import type { Adapter } from './adapter'; import type { AdapterWithContext } from './AdapterContext'; import type { AdapterRequestContext } from './AdapterRequestContext'; import type { BuildCachedSnapshot, BuildNetworkSnapshot, CachePolicy } from './CachePolicy'; import type { ProxyGraphNode } from './GraphNode'; import type { FetchResponse, NetworkAdapter, ResourceIngest, ResourceRequest, ResourceRequestContext } from './network'; import type { Luvio, WithContextOptions } from './Root'; import type { Selector } from './Select'; import type { AvailableSnapshot, DataSnapshot, ErrorSnapshot, PendingSnapshot, Snapshot, SnapshotRefresh } from './interfaces/Snapshot'; import type { DurableStoreKeyMetadataMap, CreateStoreMetadataParams, SnapshotCreate, SnapshotRebuild, SnapshotSubscriptionCallback, StoreEntry, StoreMetadata, Unsubscribe, WatchSubscriptionCallback, Store, TTLOverrideMap, GetNotifyChangeEntry } from './interfaces/Store'; import type { TTLStrategy } from './reader/resolve'; import type { LuvioAdapterEventObserver } from './events'; import type { KeyMetadata, NormalizedKeyMetadata, StoreQueryEvaluator } from './interfaces/queryability'; export declare class Environment { private networkAdapter; private store; private adapterContextMap; private networkCount; private storeQueryEvaluator; private typeQueryEvaluatorMap; private defaultCachePolicy; constructor(store: Store, networkAdapter: NetworkAdapter); setDefaultCachePolicy(cachePolicy: CachePolicy): void; /** * Returns a resolved promise of a FetchResponse for ok http status codes. * Returns a rejected promise of an ErrorResponse of type "fetchResponse" for non-ok http status codes. * Returns a rejected promise of an ErrorResponse of type "networkError" if server can't be reached * * @throws {ErrorResponse} */ dispatchResourceRequest(request: ResourceRequest, context: ResourceRequestContext, eventObservers?: LuvioAdapterEventObserver[]): Promise>; isErrorCacheable(errorSnapshot: ErrorSnapshot): boolean; /** * Returns a Promise that resolves once the given PendingSnapshot is available. */ resolvePendingSnapshot(snapshot: PendingSnapshot): Promise>; storeIngest(key: string | NormalizedKeyMetadata, ingest: ResourceIngest | null, response: Response, luvio: Luvio, storeOverride?: Store): void; storeIngestError(key: string | NormalizedKeyMetadata, errorSnapshot: ErrorSnapshot, storeMetadataParams?: CreateStoreMetadataParams, storeOverride?: Store): void; storePublish(key: string | NormalizedKeyMetadata, data: Data): void; storePut(key: string | NormalizedKeyMetadata, data: Data): void; storeRedirect(existingKey: string | NormalizedKeyMetadata, redirectKey: string): void; storeGetCanonicalKey(key: string | NormalizedKeyMetadata): string | NormalizedKeyMetadata; storeBroadcast(rebuildSnapshot: SnapshotRebuild, snapshotAvailable: (snapshot: Snapshot) => boolean): Promise; storeSubscribe(snapshot: Snapshot, callback: SnapshotSubscriptionCallback): Unsubscribe; storeWatch(prefix: string | Partial, callback: WatchSubscriptionCallback): Unsubscribe; storeLookup(sel: Selector, createSnapshot: SnapshotCreate, refresh?: SnapshotRefresh, ttlStrategy?: TTLStrategy): Snapshot; storeCleanup(): void; storeEvict(key: string | NormalizedKeyMetadata): void; storeDealloc(key: string | NormalizedKeyMetadata): void; storeReset(): void; storeRetain(keys: string[] | NormalizedKeyMetadata[]): () => void; storeKeyExists(key: string | NormalizedKeyMetadata): boolean; snapshotAvailable(snapshot: Snapshot): snapshot is AvailableSnapshot; createSnapshot(selector: Selector, refresh?: SnapshotRefresh, ttlStrategy?: TTLStrategy): Snapshot; rebuildSnapshot(snapshot: DataSnapshot, onRebuild: (rebuilt: Snapshot) => void): void; getNode(key: string | NormalizedKeyMetadata, storeOverride?: Store): ProxyGraphNode; wrapNormalizedGraphNode(normalized: StoreEntry, key: string | NormalizedKeyMetadata, storeOverride?: Store): ProxyGraphNode; withContext(adapter: AdapterWithContext, options: WithContextOptions): (config: C, requestContext?: AdapterRequestContext) => ReturnType>; publishStoreMetadata(key: string | NormalizedKeyMetadata, storeMetadata: StoreMetadata): void; putStoreMetadata(key: string | NormalizedKeyMetadata, storeMetadata: StoreMetadata, adjustTTLOverride: boolean): void; storeSetTTLOverride(namespace: string, representationName: string, ttl: number): Promise; storeGetTTLOverride(namespace: string, representationName: string): Promise; storeGetTTLOverrides(): TTLOverrideMap; recomputeTTLOverrideExpirations(ttlNamespace: string, ttlRepresentationName: string): void; storeSetDefaultTTLOverride(ttl: number): Promise; storeGetDefaultTTLOverride(): number | undefined; recomputeDefaultTTLOverrideExpirations(): void; storeBuildIngestionStagingStore(): Store; applyCachePolicy(luvio: Luvio, adapterRequestContext: AdapterRequestContext, buildSnapshotContext: C, buildCachedSnapshot: BuildCachedSnapshot, buildNetworkSnapshot: BuildNetworkSnapshot): Snapshot | Promise>; handleSuccessResponse(ingestAndBroadcastFunc: () => Promise>, _getResponseCacheKeysFunc: () => DurableStoreKeyMetadataMap): Promise>; handleErrorResponse(ingestAndBroadcastFunc: () => Promise): Promise; /** * Gets store entries for notifyChange purposes. Returns a Promise to * support environments that need to do async cache lookups. * * If not in the store then the cache key is not added to the returned set. */ getNotifyChangeStoreEntries(keys: string[] | NormalizedKeyMetadata[]): Promise[]>; notifyStoreUpdateAvailable(keys: string[] | NormalizedKeyMetadata[]): Promise; registerStoreQueryEvaluator(queryEvaluator: StoreQueryEvaluator): void; getStoreQueryEvaluator(): StoreQueryEvaluator | undefined; registerTypeQueryEvaluator(namespace: string, representationName: string, queryEvaluator: T): void; getTypeQueryEvaluator(namespace: string, representationName: string): T | undefined; buildStructuredKey(namespace: string, representationName: string, idValues: KeyMetadata): NormalizedKeyMetadata; /** * Take a list of keys and marks them as stale to be refreshed. * Then will be refreshed with the provided refresh function. * If no refresh and makeConfig functions are provided it will refresh * time that record is trying to be fetched * * Example: one record from graphql needs to be refreshed and not * the entire graphql query * * @param keys * @param makeConfig * @param refresh * @returns */ expirePossibleStaleRecords(keys: string[] | NormalizedKeyMetadata[], config?: Config, refresh?: Adapter): Promise; refreshPossibleStaleRecords(config: Config, refresh: Adapter): Promise; }