@firebase/data-connect 0.5.0 → 0.6.0-20260409172004

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/index.cjs.js +1173 -143
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +1172 -144
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.node.cjs.js +1239 -190
  6. package/dist/index.node.cjs.js.map +1 -1
  7. package/dist/internal.d.ts +133 -12
  8. package/dist/node-esm/index.node.esm.js +1238 -191
  9. package/dist/node-esm/index.node.esm.js.map +1 -1
  10. package/dist/node-esm/src/api/Mutation.d.ts +2 -2
  11. package/dist/node-esm/src/api/query.d.ts +1 -1
  12. package/dist/node-esm/src/core/query/QueryManager.d.ts +22 -3
  13. package/dist/node-esm/src/network/index.d.ts +1 -1
  14. package/dist/node-esm/src/network/manager.d.ts +61 -0
  15. package/dist/node-esm/src/network/{fetch.d.ts → rest/fetch.d.ts} +9 -4
  16. package/dist/node-esm/src/network/rest/index.d.ts +18 -0
  17. package/dist/node-esm/src/network/rest/restTransport.d.ts +33 -0
  18. package/dist/node-esm/src/network/stream/streamTransport.d.ts +243 -0
  19. package/dist/node-esm/src/network/stream/websocket.d.ts +90 -0
  20. package/dist/node-esm/src/network/stream/wire.d.ts +138 -0
  21. package/dist/node-esm/src/network/transport.d.ts +179 -0
  22. package/dist/node-esm/src/util/url.d.ts +3 -1
  23. package/dist/private.d.ts +29 -7
  24. package/dist/public.d.ts +3 -1
  25. package/dist/src/api/Mutation.d.ts +2 -2
  26. package/dist/src/api/query.d.ts +1 -1
  27. package/dist/src/core/query/QueryManager.d.ts +22 -3
  28. package/dist/src/network/index.d.ts +1 -1
  29. package/dist/src/network/manager.d.ts +61 -0
  30. package/dist/src/network/{fetch.d.ts → rest/fetch.d.ts} +9 -4
  31. package/dist/src/network/rest/index.d.ts +18 -0
  32. package/dist/src/network/rest/restTransport.d.ts +33 -0
  33. package/dist/src/network/stream/streamTransport.d.ts +243 -0
  34. package/dist/src/network/stream/websocket.d.ts +90 -0
  35. package/dist/src/network/stream/wire.d.ts +138 -0
  36. package/dist/src/network/transport.d.ts +179 -0
  37. package/dist/src/util/url.d.ts +3 -1
  38. package/package.json +1 -1
  39. package/dist/node-esm/src/network/transport/index.d.ts +0 -81
  40. package/dist/node-esm/src/network/transport/rest.d.ts +0 -49
  41. package/dist/src/network/transport/index.d.ts +0 -81
  42. package/dist/src/network/transport/rest.d.ts +0 -49
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/core/version.ts","../src/core/error.ts","../src/cache/EntityDataObject.ts","../src/cache/InMemoryCacheProvider.ts","../src/cache/EntityNode.ts","../src/cache/ResultTree.ts","../src/cache/ImpactedQueryRefsAccumulator.ts","../src/cache/ResultTreeProcessor.ts","../src/cache/Cache.ts","../src/core/AppCheckTokenProvider.ts","../src/logger.ts","../src/core/FirebaseAuthProvider.ts","../src/api/Reference.ts","../src/cache/cacheUtils.ts","../src/util/encoder.ts","../src/core/query/QueryManager.ts","../src/network/transport/index.ts","../src/util/url.ts","../src/network/fetch.ts","../src/network/transport/rest.ts","../src/api/Mutation.ts","../src/api/DataConnect.ts","../src/register.ts","../src/core/query/queryOptions.ts","../src/api/query.ts","../src/util/validateArgs.ts","../src/core/query/subscribe.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** The semver (www.semver.org) version of the SDK. */\nexport let SDK_VERSION = '';\n\n/**\n * SDK_VERSION should be set before any database instance is created\n * @internal\n */\nexport function setSDKVersion(version: string): void {\n SDK_VERSION = version;\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseError } from '@firebase/util';\n\nexport type DataConnectErrorCode =\n | 'other'\n | 'already-initialized'\n | 'not-initialized'\n | 'not-supported'\n | 'invalid-argument'\n | 'partial-error'\n | 'unauthorized';\n\nexport type Code = DataConnectErrorCode;\n\nexport const Code = {\n OTHER: 'other' as DataConnectErrorCode,\n ALREADY_INITIALIZED: 'already-initialized' as DataConnectErrorCode,\n NOT_INITIALIZED: 'not-initialized' as DataConnectErrorCode,\n NOT_SUPPORTED: 'not-supported' as DataConnectErrorCode,\n INVALID_ARGUMENT: 'invalid-argument' as DataConnectErrorCode,\n PARTIAL_ERROR: 'partial-error' as DataConnectErrorCode,\n UNAUTHORIZED: 'unauthorized' as DataConnectErrorCode\n};\n\n/** An error returned by a DataConnect operation. */\nexport class DataConnectError extends FirebaseError {\n /** @internal */\n readonly name: string = 'DataConnectError';\n\n constructor(code: Code, message: string) {\n super(code, message);\n\n // Ensure the instanceof operator works as expected on subclasses of Error.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#custom_error_types\n // and https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget\n Object.setPrototypeOf(this, DataConnectError.prototype);\n }\n\n /** @internal */\n toString(): string {\n return `${this.name}[code=${this.code}]: ${this.message}`;\n }\n}\n\n/** An error returned by a DataConnect operation. */\nexport class DataConnectOperationError extends DataConnectError {\n /** @internal */\n readonly name: string = 'DataConnectOperationError';\n\n /** The response received from the backend. */\n readonly response: DataConnectOperationFailureResponse;\n\n /** @hideconstructor */\n constructor(message: string, response: DataConnectOperationFailureResponse) {\n super(Code.PARTIAL_ERROR, message);\n this.response = response;\n }\n}\n\nexport interface DataConnectOperationFailureResponse {\n // The \"data\" provided by the backend in the response message.\n //\n // Will be `undefined` if no \"data\" was provided in the response message.\n // Otherwise, will be `null` if `null` was explicitly specified as the \"data\"\n // in the response message. Otherwise, will be the value of the \"data\"\n // specified as the \"data\" in the response message\n readonly data?: Record<string, unknown> | null;\n\n // The list of errors provided by the backend in the response message.\n readonly errors: DataConnectOperationFailureResponseErrorInfo[];\n}\n\n// Information about the error, as provided in the response from the backend.\n// See https://spec.graphql.org/draft/#sec-Errors\nexport interface DataConnectOperationFailureResponseErrorInfo {\n // The error message.\n readonly message: string;\n\n // The path of the field in the response data to which this error relates.\n // String values in this array refer to field names. Numeric values in this\n // array always satisfy `Number.isInteger()` and refer to the index in an\n // array.\n readonly path: Array<string | number>;\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type FDCScalarValue =\n | string\n | number\n | boolean\n | undefined\n | null\n | Record<string, unknown>\n | FDCScalarValue[];\n\nexport interface EntityDataObjectJson {\n map: {\n [key: string]: FDCScalarValue;\n };\n referencedFrom: string[];\n globalID: string;\n}\n\nexport class EntityDataObject {\n getServerValue(key: string): unknown {\n return this.serverValues[key];\n }\n private serverValues: { [key: string]: FDCScalarValue } = {};\n private referencedFrom = new Set<string>();\n constructor(public readonly globalID: string) {}\n getServerValues(): { [key: string]: FDCScalarValue } {\n return this.serverValues;\n }\n toJSON(): EntityDataObjectJson {\n return {\n globalID: this.globalID,\n map: this.serverValues,\n referencedFrom: Array.from(this.referencedFrom)\n };\n }\n static fromJSON(json: EntityDataObjectJson): EntityDataObject {\n const edo = new EntityDataObject(json.globalID);\n edo.serverValues = json.map;\n edo.referencedFrom = new Set(json.referencedFrom);\n return edo;\n }\n\n updateServerValue(\n key: string,\n value: FDCScalarValue,\n requestedFrom: string\n ): string[] {\n this.serverValues[key] = value;\n this.referencedFrom.add(requestedFrom);\n return Array.from(this.referencedFrom);\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport { EntityDataObject } from './EntityDataObject';\nimport { ResultTree } from './ResultTree';\n\nexport class InMemoryCacheProvider implements InternalCacheProvider {\n private edos = new Map<string, EntityDataObject>();\n private resultTrees = new Map<string, ResultTree>();\n constructor(private _keyId: string) {}\n\n async setResultTree(queryId: string, rt: ResultTree): Promise<void> {\n this.resultTrees.set(queryId, rt);\n }\n async getResultTree(queryId: string): Promise<ResultTree | undefined> {\n return this.resultTrees.get(queryId);\n }\n async updateEntityData(entityData: EntityDataObject): Promise<void> {\n this.edos.set(entityData.globalID, entityData);\n }\n async getEntityData(globalId: string): Promise<EntityDataObject> {\n if (!this.edos.has(globalId)) {\n this.edos.set(globalId, new EntityDataObject(globalId));\n }\n // Because of the above, we can guarantee that there will be an EDO at the globalId.\n return this.edos.get(globalId)!;\n }\n close(): Promise<void> {\n // No-op\n return Promise.resolve();\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Code, DataConnectError } from '../core/error';\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport {\n EntityDataObject,\n EntityDataObjectJson,\n FDCScalarValue\n} from './EntityDataObject';\nimport { ImpactedQueryRefsAccumulator } from './ImpactedQueryRefsAccumulator';\n\nexport const GLOBAL_ID_KEY = '_id';\nexport const OBJECT_LISTS_KEY = '_objectLists';\nexport const REFERENCES_KEY = '_references';\nexport const SCALARS_KEY = '_scalars';\nexport const ENTITY_DATA_KEYS_KEY = '_entity_data_keys';\nexport class EntityNode {\n entityData?: EntityDataObject;\n scalars: Record<string, FDCScalarValue> = {};\n references: { [key: string]: EntityNode } = {};\n objectLists: {\n [key: string]: EntityNode[];\n } = {};\n globalId?: string;\n entityDataKeys: Set<string> = new Set();\n\n async loadData(\n queryId: string,\n values: FDCScalarValue,\n entityIds: Record<string, unknown> | undefined,\n acc: ImpactedQueryRefsAccumulator,\n cacheProvider: InternalCacheProvider\n ): Promise<void> {\n if (values === undefined) {\n return;\n }\n if (typeof values !== 'object' || Array.isArray(values)) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'EntityNode initialized with non-object value'\n );\n }\n if (values === null) {\n return;\n }\n\n if (\n typeof values === 'object' &&\n entityIds &&\n entityIds[GLOBAL_ID_KEY] &&\n typeof entityIds[GLOBAL_ID_KEY] === 'string'\n ) {\n this.globalId = entityIds[GLOBAL_ID_KEY];\n this.entityData = await cacheProvider.getEntityData(this.globalId);\n }\n for (const key in values) {\n if (values.hasOwnProperty(key)) {\n if (typeof values[key] === 'object') {\n if (Array.isArray(values[key])) {\n const ids: Record<string, unknown> | undefined =\n entityIds && (entityIds[key] as Record<string, unknown>);\n const objArray: EntityNode[] = [];\n const scalarArray: Array<NonNullable<FDCScalarValue>> = [];\n for (const [index, value] of values[key].entries()) {\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n // Note: we don't support sparse arrays.\n } else {\n const entityNode = new EntityNode();\n await entityNode.loadData(\n queryId,\n value,\n ids && (ids[index] as Record<string, unknown>),\n acc,\n cacheProvider\n );\n objArray.push(entityNode);\n }\n } else {\n scalarArray.push(value);\n }\n }\n if (scalarArray.length > 0 && objArray.length > 0) {\n this.scalars[key] = values[key];\n } else if (scalarArray.length > 0) {\n if (this.entityData) {\n const impactedRefs = this.entityData.updateServerValue(\n key,\n scalarArray,\n queryId\n );\n this.entityDataKeys.add(key);\n acc.add(impactedRefs);\n } else {\n this.scalars[key] = scalarArray;\n }\n } else if (objArray.length > 0) {\n this.objectLists[key] = objArray;\n } else {\n this.scalars[key] = [];\n }\n } else {\n if (values[key] === null) {\n this.scalars[key] = null;\n continue;\n }\n const entityNode = new EntityNode();\n // TODO: Load Data might need to be pushed into ResultTreeProcessor instead.\n await entityNode.loadData(\n queryId,\n (values as Record<string, FDCScalarValue>)[key],\n entityIds && (entityIds[key] as Record<string, unknown>),\n acc,\n cacheProvider\n );\n this.references[key] = entityNode;\n }\n } else {\n if (this.entityData) {\n const impactedRefs = this.entityData.updateServerValue(\n key,\n values[key] as FDCScalarValue,\n queryId\n );\n this.entityDataKeys.add(key);\n acc.add(impactedRefs);\n } else {\n this.scalars[key] = values[key] as FDCScalarValue;\n }\n }\n }\n }\n if (this.entityData) {\n await cacheProvider.updateEntityData(this.entityData);\n }\n }\n\n toJSON(mode: EncodingMode): Record<string, unknown> {\n const resultObject: Record<string, unknown> = {};\n if (mode === EncodingMode.hydrated) {\n if (this.entityData) {\n for (const key of this.entityDataKeys) {\n resultObject[key] = this.entityData.getServerValue(key);\n }\n }\n\n if (this.scalars) {\n Object.assign(resultObject, this.scalars);\n }\n if (this.references) {\n for (const key in this.references) {\n if (this.references.hasOwnProperty(key)) {\n resultObject[key] = this.references[key].toJSON(mode);\n }\n }\n }\n if (this.objectLists) {\n for (const key in this.objectLists) {\n if (this.objectLists.hasOwnProperty(key)) {\n resultObject[key] = this.objectLists[key].map(obj =>\n obj.toJSON(mode)\n );\n }\n }\n }\n return resultObject;\n } else {\n // Get JSON representation of dehydrated list\n if (this.entityData) {\n resultObject[GLOBAL_ID_KEY] = this.entityData.globalID;\n }\n\n resultObject[ENTITY_DATA_KEYS_KEY] = Array.from(this.entityDataKeys);\n\n if (this.scalars) {\n resultObject[SCALARS_KEY] = this.scalars;\n }\n\n if (this.references) {\n const references = {} as Record<string, unknown>;\n for (const key in this.references) {\n if (this.references.hasOwnProperty(key)) {\n references[key] = this.references[key].toJSON(mode);\n }\n }\n resultObject[REFERENCES_KEY] = references;\n }\n if (this.objectLists) {\n const objectLists = {} as Record<string, unknown>;\n for (const key in this.objectLists) {\n if (this.objectLists.hasOwnProperty(key)) {\n objectLists[key] = this.objectLists[key].map(obj =>\n obj.toJSON(mode)\n );\n }\n }\n resultObject[OBJECT_LISTS_KEY] = objectLists;\n }\n }\n\n return resultObject;\n }\n\n static fromJson(obj: DehydratedStubDataObject): EntityNode {\n const sdo = new EntityNode();\n if (obj.backingData) {\n sdo.entityData = EntityDataObject.fromJSON(obj.backingData);\n }\n sdo.globalId = obj.globalID;\n sdo.scalars = obj.scalars;\n if (obj.references) {\n const references: Record<string, unknown> = {};\n for (const key in obj.references) {\n if (obj.references.hasOwnProperty(key)) {\n references[key] = EntityNode.fromJson(obj.references[key]);\n }\n }\n sdo.references = references as typeof sdo.references;\n }\n if (obj.objectLists) {\n const objectLists: Record<string, unknown> = {};\n for (const key in obj.objectLists) {\n if (obj.objectLists.hasOwnProperty(key)) {\n objectLists[key] = obj.objectLists[key].map(obj =>\n EntityNode.fromJson(obj)\n );\n }\n }\n sdo.objectLists = objectLists as typeof sdo.objectLists;\n }\n return sdo;\n }\n}\n\nexport interface DehydratedStubDataObject {\n backingData?: EntityDataObjectJson;\n globalID?: string;\n scalars: { [key: string]: FDCScalarValue };\n references: { [key: string]: DehydratedStubDataObject };\n objectLists: {\n [key: string]: DehydratedStubDataObject[];\n };\n}\n\n// Helpful for storing in persistent cache, which is not available yet.\nexport enum EncodingMode {\n hydrated,\n dehydrated\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EntityNode, DehydratedStubDataObject } from './EntityNode';\n\nexport class ResultTree {\n /**\n * Create a {@link ResultTree} from a dehydrated JSON object.\n * @param value The dehydrated JSON object.\n * @returns The {@link ResultTree}.\n */\n static fromJson(value: DehydratedResultTreeJson): ResultTree {\n return new ResultTree(\n EntityNode.fromJson(value.rootStub),\n value.maxAge,\n value.cachedAt,\n value.lastAccessed\n );\n }\n constructor(\n private rootStub: EntityNode,\n private maxAge: number = 0,\n public readonly cachedAt: Date,\n private _lastAccessed: Date\n ) {}\n isStale(): boolean {\n return (\n Date.now() - new Date(this.cachedAt.getTime()).getTime() >\n this.maxAge * 1000\n );\n }\n updateMaxAge(maxAgeInSeconds: number): void {\n this.maxAge = maxAgeInSeconds;\n }\n updateAccessed(): void {\n this._lastAccessed = new Date();\n }\n get lastAccessed(): Date {\n return this._lastAccessed;\n }\n getRootStub(): EntityNode {\n return this.rootStub;\n }\n}\n\ninterface DehydratedResultTreeJson {\n rootStub: DehydratedStubDataObject;\n maxAge: number;\n cachedAt: Date;\n lastAccessed: Date;\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class ImpactedQueryRefsAccumulator {\n impacted = new Set<string>();\n constructor(private queryId: string) {}\n add(impacted: string[]): void {\n impacted\n .filter(ref => ref !== this.queryId)\n .forEach(ref => this.impacted.add(ref));\n }\n consumeEvents(): string[] {\n const events = Array.from(this.impacted);\n this.impacted.clear();\n return events;\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport { EncodingMode, EntityNode } from './EntityNode';\nimport { ImpactedQueryRefsAccumulator } from './ImpactedQueryRefsAccumulator';\n\ninterface DehydratedResults {\n entityNode: EntityNode;\n impacted: string[];\n}\n\nexport class ResultTreeProcessor {\n /**\n * Hydrate the EntityNode into a JSON object so that it can be returned to the user.\n * @param rootStubObject\n * @returns {string}\n */\n hydrateResults(rootStubObject: EntityNode): Record<string, unknown> {\n return rootStubObject.toJSON(EncodingMode.hydrated);\n }\n /**\n * Dehydrate results so that they can be stored in the cache.\n * @param json\n * @param entityIds\n * @param cacheProvider\n * @param queryId\n * @returns {Promise<DehydratedResults>}\n */\n async dehydrateResults(\n json: Record<string, unknown>,\n entityIds: Record<string, unknown>,\n cacheProvider: InternalCacheProvider,\n queryId: string\n ): Promise<DehydratedResults> {\n const acc = new ImpactedQueryRefsAccumulator(queryId);\n const entityNode = new EntityNode();\n await entityNode.loadData(queryId, json, entityIds, acc, cacheProvider);\n return {\n entityNode,\n impacted: acc.consumeEvents()\n };\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { generateSHA256Hash } from '@firebase/util';\n\nimport {\n CacheProvider,\n CacheSettings,\n type ConnectorConfig\n} from '../api/DataConnect';\nimport { Code, DataConnectError } from '../core/error';\nimport { type AuthTokenProvider } from '../core/FirebaseAuthProvider';\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport { InMemoryCacheProvider } from './InMemoryCacheProvider';\nimport { ResultTree } from './ResultTree';\nimport { ResultTreeProcessor } from './ResultTreeProcessor';\n\nexport const Memory = 'memory';\n\nexport type DataConnectStorage = typeof Memory;\n\n/**\n * ServerValues\n */\nexport interface ServerValues extends Record<string, unknown> {\n maxAge?: number;\n}\n\nexport class DataConnectCache {\n private cacheProvider: InternalCacheProvider | null = null;\n private uid: string | null = null;\n constructor(\n private authProvider: AuthTokenProvider,\n private projectId: string,\n private connectorConfig: ConnectorConfig,\n private host: string,\n public cacheSettings: CacheSettings\n ) {\n this.authProvider.addTokenChangeListener(async _ => {\n const newUid = this.authProvider.getAuth().getUid();\n // We should only close if the token changes and so does the new UID\n if (this.uid !== newUid) {\n this.cacheProvider?.close();\n this.uid = newUid;\n const identifier = await this.getIdentifier(this.uid);\n this.cacheProvider = this.initializeNewProviders(identifier);\n }\n });\n }\n\n async initialize(): Promise<void> {\n if (!this.cacheProvider) {\n const identifier = await this.getIdentifier(this.uid);\n this.cacheProvider = this.initializeNewProviders(identifier);\n }\n }\n\n async getIdentifier(uid: string | null): Promise<string> {\n const identifier = `${\n 'memory' // TODO: replace this with indexeddb when persistence is available.\n }-${this.projectId}-${this.connectorConfig.service}-${\n this.connectorConfig.connector\n }-${this.connectorConfig.location}-${uid}-${this.host}`;\n const sha256 = await generateSHA256Hash(identifier);\n return sha256;\n }\n\n initializeNewProviders(identifier: string): InternalCacheProvider {\n return this.cacheSettings.cacheProvider.initialize(identifier);\n }\n\n async containsResultTree(queryId: string): Promise<boolean> {\n await this.initialize();\n const resultTree = await this.cacheProvider!.getResultTree(queryId);\n return resultTree !== undefined;\n }\n async getResultTree(queryId: string): Promise<ResultTree | undefined> {\n await this.initialize();\n return this.cacheProvider!.getResultTree(queryId);\n }\n async getResultJSON(queryId: string): Promise<Record<string, unknown>> {\n await this.initialize();\n const processor = new ResultTreeProcessor();\n const cacheProvider = this.cacheProvider;\n const resultTree = await cacheProvider!.getResultTree(queryId);\n if (!resultTree) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n `${queryId} not found in cache. Call \"update()\" first.`\n );\n }\n return processor.hydrateResults(resultTree.getRootStub());\n }\n async update(\n queryId: string,\n serverValues: ServerValues,\n entityIds: Record<string, unknown>\n ): Promise<string[]> {\n await this.initialize();\n const processor = new ResultTreeProcessor();\n const cacheProvider = this.cacheProvider;\n const { entityNode: stubDataObject, impacted } =\n await processor.dehydrateResults(\n serverValues,\n entityIds,\n cacheProvider!,\n queryId\n );\n const now = new Date();\n await cacheProvider!.setResultTree(\n queryId,\n new ResultTree(\n stubDataObject,\n serverValues.maxAge || this.cacheSettings.maxAgeSeconds,\n now,\n now\n )\n );\n return impacted;\n }\n}\n\nexport class MemoryStub implements CacheProvider<'MEMORY'> {\n type: 'MEMORY' = 'MEMORY';\n /**\n * @internal\n */\n initialize(cacheId: string): InMemoryCacheProvider {\n return new InMemoryCacheProvider(cacheId);\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp, _isFirebaseServerApp } from '@firebase/app';\nimport {\n AppCheckInternalComponentName,\n AppCheckTokenListener,\n AppCheckTokenResult,\n FirebaseAppCheckInternal\n} from '@firebase/app-check-interop-types';\nimport { Provider } from '@firebase/component';\n\n/**\n * @internal\n * Abstraction around AppCheck's token fetching capabilities.\n */\nexport class AppCheckTokenProvider {\n private appCheck?: FirebaseAppCheckInternal | null;\n private serverAppAppCheckToken?: string;\n constructor(\n app: FirebaseApp,\n private appCheckProvider?: Provider<AppCheckInternalComponentName>\n ) {\n if (_isFirebaseServerApp(app) && app.settings.appCheckToken) {\n this.serverAppAppCheckToken = app.settings.appCheckToken;\n }\n this.appCheck = appCheckProvider?.getImmediate({ optional: true });\n if (!this.appCheck) {\n void appCheckProvider\n ?.get()\n .then(appCheck => (this.appCheck = appCheck))\n .catch();\n }\n }\n\n getToken(): Promise<AppCheckTokenResult | null> {\n if (this.serverAppAppCheckToken) {\n return Promise.resolve({ token: this.serverAppAppCheckToken });\n }\n\n if (!this.appCheck) {\n return new Promise<AppCheckTokenResult | null>((resolve, reject) => {\n // Support delayed initialization of FirebaseAppCheck. This allows our\n // customers to initialize the RTDB SDK before initializing Firebase\n // AppCheck and ensures that all requests are authenticated if a token\n // becomes available before the timoeout below expires.\n setTimeout(() => {\n if (this.appCheck) {\n this.getToken().then(resolve, reject);\n } else {\n resolve(null);\n }\n }, 0);\n });\n }\n return this.appCheck.getToken();\n }\n\n addTokenChangeListener(listener: AppCheckTokenListener): void {\n void this.appCheckProvider\n ?.get()\n .then(appCheck => appCheck.addTokenListener(listener));\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Logger, LogLevelString } from '@firebase/logger';\n\nimport { SDK_VERSION } from './core/version';\n\nconst logger = new Logger('@firebase/data-connect');\nexport function setLogLevel(logLevel: LogLevelString): void {\n logger.setLogLevel(logLevel);\n}\nexport function logDebug(msg: string): void {\n logger.debug(`DataConnect (${SDK_VERSION}): ${msg}`);\n}\n\nexport function logError(msg: string): void {\n logger.error(`DataConnect (${SDK_VERSION}): ${msg}`);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseOptions } from '@firebase/app-types';\nimport {\n FirebaseAuthInternal,\n FirebaseAuthInternalName,\n FirebaseAuthTokenData\n} from '@firebase/auth-interop-types';\nimport { Provider } from '@firebase/component';\n\nimport { logDebug, logError } from '../logger';\n\n// @internal\nexport interface AuthTokenProvider {\n getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData | null>;\n addTokenChangeListener(listener: AuthTokenListener): void;\n getAuth(): FirebaseAuthInternal;\n}\nexport type AuthTokenListener = (token: string | null) => void;\n\n// @internal\nexport class FirebaseAuthProvider implements AuthTokenProvider {\n private _auth: FirebaseAuthInternal;\n constructor(\n private _appName: string,\n private _options: FirebaseOptions,\n private _authProvider: Provider<FirebaseAuthInternalName>\n ) {\n this._auth = _authProvider.getImmediate({ optional: true })!;\n if (!this._auth) {\n _authProvider.onInit(auth => (this._auth = auth));\n }\n }\n getAuth(): FirebaseAuthInternal {\n return this._auth;\n }\n getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData | null> {\n if (!this._auth) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n if (this._auth) {\n this.getToken(forceRefresh).then(resolve, reject);\n } else {\n resolve(null);\n }\n }, 0);\n });\n }\n return this._auth.getToken(forceRefresh).catch(error => {\n if (error && error.code === 'auth/token-not-initialized') {\n logDebug(\n 'Got auth/token-not-initialized error. Treating as null token.'\n );\n return null;\n } else {\n logError(\n 'Error received when attempting to retrieve token: ' +\n JSON.stringify(error)\n );\n return Promise.reject(error);\n }\n });\n }\n addTokenChangeListener(listener: AuthTokenListener): void {\n this._auth?.addAuthTokenListener(listener);\n }\n removeTokenChangeListener(listener: (token: string | null) => void): void {\n this._authProvider\n .get()\n .then(auth => auth.removeAuthTokenListener(listener))\n .catch(err => logError(err));\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Extensions } from '../network';\n\nimport { DataConnect, DataConnectOptions } from './DataConnect';\nexport const QUERY_STR = 'query';\nexport const MUTATION_STR = 'mutation';\nexport type ReferenceType = typeof QUERY_STR | typeof MUTATION_STR;\n\nexport const SOURCE_SERVER = 'SERVER';\nexport const SOURCE_CACHE = 'CACHE';\nexport type DataSource = typeof SOURCE_CACHE | typeof SOURCE_SERVER;\n\nexport interface OpResult<Data> {\n data: Data;\n source: DataSource;\n fetchTime: string;\n extensions?: Extensions;\n}\n\nexport interface OperationRef<_Data, Variables> {\n name: string;\n variables: Variables;\n refType: ReferenceType;\n dataConnect: DataConnect;\n}\n\nexport interface DataConnectResult<Data, Variables> extends OpResult<Data> {\n ref: OperationRef<Data, Variables>;\n // future metadata\n}\n\n/**\n * Serialized RefInfo as a result of `QueryResult.toJSON().refInfo`\n */\nexport interface RefInfo<Variables> {\n name: string;\n variables: Variables;\n connectorConfig: DataConnectOptions;\n}\n/**\n * Serialized Ref as a result of `QueryResult.toJSON()`\n */\nexport interface SerializedRef<Data, Variables> extends OpResult<Data> {\n refInfo: RefInfo<Variables>;\n}\n","/**\n * @license\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { OpResult } from '../api/Reference';\nimport { DataConnectExtension } from '../network';\nexport function parseEntityIds<T>(\n result: OpResult<T>\n): Record<string, unknown> {\n // Iterate through extensions.dataConnect\n const dataConnectExtensions = result.extensions?.dataConnect;\n const dataCopy = Object.assign(result);\n if (!dataConnectExtensions) {\n return dataCopy;\n }\n const ret: Record<string, unknown> = {};\n for (const extension of dataConnectExtensions) {\n const { path } = extension;\n populatePath(path, ret, extension);\n }\n return ret;\n}\n\n// mutates the object to update the path\nexport function populatePath(\n path: Array<string | number>,\n toUpdate: Record<string | number, unknown>,\n extension: DataConnectExtension\n): void {\n let curObj: Record<string | number, unknown> = toUpdate;\n for (const slice of path) {\n if (typeof curObj[slice] !== 'object') {\n curObj[slice] = {};\n }\n curObj = curObj[slice] as Record<string, unknown>;\n }\n\n if ('entityId' in extension && extension.entityId) {\n curObj['_id'] = extension.entityId;\n } else if ('entityIds' in extension) {\n const entityArr = extension.entityIds;\n for (let i = 0; i < entityArr.length; i++) {\n const entityId = entityArr[i];\n if (typeof curObj[i] === 'undefined') {\n curObj[i] = {};\n }\n (curObj[i] as Record<string, unknown>)._id = entityId;\n }\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type HmacImpl = (obj: Record<string, unknown>) => string;\nexport let encoderImpl: HmacImpl;\nexport type DecodeHmacImpl = (s: string) => Record<string, unknown>;\nexport let decoderImpl: DecodeHmacImpl;\nexport function setEncoder(encoder: HmacImpl): void {\n encoderImpl = encoder;\n}\nexport function setDecoder(decoder: DecodeHmacImpl): void {\n decoderImpl = decoder;\n}\nfunction sortKeysForObj(o: Record<string, unknown>): Record<string, unknown> {\n return Object.keys(o)\n .sort()\n .reduce((accumulator, currentKey) => {\n accumulator[currentKey] = o[currentKey];\n return accumulator;\n }, {} as Record<string, unknown>);\n}\nsetEncoder((o: Record<string, unknown>) => JSON.stringify(sortKeysForObj(o)));\nsetDecoder(s => sortKeysForObj(JSON.parse(s)));\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type DataConnect } from '../../api/DataConnect';\nimport { QueryRef, QueryResult } from '../../api/query';\nimport {\n QUERY_STR,\n SerializedRef,\n SOURCE_SERVER,\n DataSource,\n SOURCE_CACHE\n} from '../../api/Reference';\nimport { DataConnectSubscription } from '../../api.browser';\nimport { DataConnectCache, ServerValues } from '../../cache/Cache';\nimport { parseEntityIds } from '../../cache/cacheUtils';\nimport { EncodingMode } from '../../cache/EntityNode';\nimport { DataConnectTransport, Extensions } from '../../network';\nimport {\n DataConnectExtensionWithMaxAge,\n ExtensionsWithMaxAge\n} from '../../network/transport';\nimport { decoderImpl, encoderImpl } from '../../util/encoder';\nimport { Code, DataConnectError } from '../error';\n\nimport {\n OnCompleteSubscription,\n OnErrorSubscription,\n OnResultSubscription\n} from './subscribe';\n\nexport function getRefSerializer<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n data: Data,\n source: DataSource,\n fetchTime: string\n) {\n return function toJSON(): SerializedRef<Data, Variables> {\n return {\n data,\n refInfo: {\n name: queryRef.name,\n variables: queryRef.variables,\n connectorConfig: {\n projectId: queryRef.dataConnect.app.options.projectId!,\n ...queryRef.dataConnect.getSettings()\n }\n },\n fetchTime,\n source\n };\n };\n}\n\nexport class QueryManager {\n async preferCacheResults<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n allowStale = false\n ): Promise<QueryResult<Data, Variables>> {\n let cacheResult: QueryResult<Data, Variables> | undefined;\n try {\n cacheResult = await this.fetchCacheResults(queryRef, allowStale);\n } catch (e) {\n // Ignore the error and try to fetch from the server.\n }\n if (cacheResult) {\n return cacheResult;\n }\n return this.fetchServerResults(queryRef);\n }\n private callbacks = new Map<\n string,\n Array<DataConnectSubscription<unknown, unknown>>\n >();\n private subscriptionCache = new Map<string, QueryResult<unknown, unknown>>();\n constructor(\n private transport: DataConnectTransport,\n private dc: DataConnect,\n private cache?: DataConnectCache\n ) {}\n private queue: Array<Promise<unknown>> = [];\n async waitForQueuedWrites(): Promise<void> {\n for (const promise of this.queue) {\n await promise;\n }\n this.queue = [];\n }\n\n updateSSR<Data, Variables>(updatedData: QueryResult<Data, Variables>): void {\n this.queue.push(\n this.updateCache(updatedData).then(async result =>\n this.publishCacheResultsToSubscribers(result, updatedData.fetchTime)\n )\n );\n }\n\n async updateCache<Data, Variables>(\n result: QueryResult<Data, Variables>,\n extensions?: DataConnectExtensionWithMaxAge[]\n ): Promise<string[]> {\n await this.waitForQueuedWrites();\n if (this.cache) {\n const entityIds = parseEntityIds(result);\n const updatedMaxAge = getMaxAgeFromExtensions(extensions);\n if (updatedMaxAge !== undefined) {\n this.cache.cacheSettings.maxAgeSeconds = updatedMaxAge;\n }\n return this.cache.update(\n encoderImpl({\n name: result.ref.name,\n variables: result.ref.variables,\n refType: QUERY_STR\n }),\n result.data as ServerValues,\n entityIds\n );\n } else {\n const key = encoderImpl({\n name: result.ref.name,\n variables: result.ref.variables,\n refType: QUERY_STR\n });\n this.subscriptionCache.set(key, result);\n return [key];\n }\n }\n\n addSubscription<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n onResultCallback: OnResultSubscription<Data, Variables>,\n onCompleteCallback?: OnCompleteSubscription,\n onErrorCallback?: OnErrorSubscription,\n initialCache?: QueryResult<Data, Variables>\n ): () => void {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n\n const unsubscribe = (): void => {\n if (this.callbacks.has(key)) {\n const callbackList = this.callbacks.get(key)!;\n this.callbacks.set(\n key,\n callbackList.filter(callback => callback !== subscription)\n );\n onCompleteCallback?.();\n }\n };\n const subscription: DataConnectSubscription<Data, Variables> = {\n userCallback: onResultCallback,\n errCallback: onErrorCallback,\n unsubscribe\n };\n\n if (initialCache) {\n this.updateSSR(initialCache);\n }\n\n const promise = this.preferCacheResults(queryRef, /*allowStale=*/ true);\n // We want to ignore the error and let subscriptions handle it\n promise.then(undefined, err => {});\n\n if (!this.callbacks.has(key)) {\n this.callbacks.set(key, []);\n }\n this.callbacks\n .get(key)!\n .push(subscription as DataConnectSubscription<unknown, unknown>);\n\n return unsubscribe;\n }\n\n async fetchServerResults<Data, Variables>(\n queryRef: QueryRef<Data, Variables>\n ): Promise<QueryResult<Data, Variables>> {\n await this.waitForQueuedWrites();\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n try {\n const result = await this.transport.invokeQuery<Data, Variables>(\n queryRef.name,\n queryRef.variables\n );\n const fetchTime = Date.now().toString();\n const originalExtensions = result.extensions;\n const queryResult: QueryResult<Data, Variables> = {\n ...result,\n ref: queryRef,\n source: SOURCE_SERVER,\n fetchTime,\n data: result.data,\n extensions: getDataConnectExtensionsWithoutMaxAge(originalExtensions),\n toJSON: getRefSerializer(\n queryRef,\n result.data,\n SOURCE_SERVER,\n fetchTime\n )\n };\n let updatedKeys: string[] = [];\n updatedKeys = await this.updateCache(\n queryResult,\n originalExtensions?.dataConnect\n );\n this.publishDataToSubscribers(key, queryResult);\n if (this.cache) {\n await this.publishCacheResultsToSubscribers(updatedKeys, fetchTime);\n } else {\n this.subscriptionCache.set(key, queryResult);\n }\n return queryResult;\n } catch (e) {\n this.publishErrorToSubscribers(key, e);\n throw e;\n }\n }\n\n async fetchCacheResults<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n allowStale = false\n ): Promise<QueryResult<Data, Variables>> {\n await this.waitForQueuedWrites();\n let result: QueryResult<Data, Variables> | undefined | null;\n if (!this.cache) {\n result = await this.getFromSubscriberCache(queryRef);\n } else {\n result = await this.getFromResultTreeCache(queryRef, allowStale);\n }\n if (!result) {\n throw new DataConnectError(\n Code.OTHER,\n 'No cache entry found for query: ' + queryRef.name\n );\n }\n const fetchTime = Date.now().toString();\n const queryResult: QueryResult<Data, Variables> = {\n ...result,\n ref: queryRef,\n source: SOURCE_CACHE,\n fetchTime,\n data: result.data,\n extensions: result.extensions,\n toJSON: getRefSerializer(queryRef, result.data, SOURCE_CACHE, fetchTime)\n };\n if (this.cache) {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n await this.publishCacheResultsToSubscribers([key], fetchTime);\n } else {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n this.subscriptionCache.set(key, queryResult);\n this.publishDataToSubscribers(key, queryResult);\n }\n\n return queryResult;\n }\n\n publishErrorToSubscribers(key: string, err: unknown): void {\n this.callbacks.get(key)?.forEach(subscription => {\n if (subscription.errCallback) {\n subscription.errCallback(err as DataConnectError);\n }\n });\n }\n\n async getFromResultTreeCache<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n allowStale = false\n ): Promise<QueryResult<Data, Variables> | null> {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n if (!this.cache || !(await this.cache.containsResultTree(key))) {\n return null;\n }\n const cacheResult: Data = (await this.cache!.getResultJSON(key)) as Data;\n const resultTree = await this.cache!.getResultTree(key);\n if (!allowStale && resultTree!.isStale()) {\n return null;\n }\n const result: QueryResult<Data, Variables> = {\n source: SOURCE_CACHE,\n ref: queryRef,\n data: cacheResult,\n toJSON: getRefSerializer(\n queryRef,\n cacheResult,\n SOURCE_CACHE,\n resultTree!.cachedAt.toString()\n ),\n fetchTime: resultTree!.cachedAt.toString()\n };\n (await this.cache!.getResultTree(key))!.updateAccessed();\n return result;\n }\n async getFromSubscriberCache<Data, Variables>(\n queryRef: QueryRef<Data, Variables>\n ): Promise<QueryResult<Data, Variables> | undefined> {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n if (!this.subscriptionCache.has(key)) {\n return;\n }\n const result = this.subscriptionCache.get(key);\n result!.source = SOURCE_CACHE;\n result!.toJSON = getRefSerializer(\n result!.ref,\n result!.data,\n SOURCE_CACHE,\n result!.fetchTime\n );\n return result as QueryResult<Data, Variables>;\n }\n\n publishDataToSubscribers(\n key: string,\n queryResult: QueryResult<unknown, unknown>\n ): void {\n if (!this.callbacks.has(key)) {\n return;\n }\n const subscribers = this.callbacks.get(key);\n subscribers!.forEach(callback => {\n callback.userCallback(queryResult);\n });\n }\n async publishCacheResultsToSubscribers(\n impactedQueries: string[],\n fetchTime: string\n ): Promise<void> {\n if (!this.cache) {\n return;\n }\n for (const query of impactedQueries) {\n const callbacks = this.callbacks.get(query);\n if (!callbacks) {\n continue;\n }\n const newJson = (await this.cache.getResultTree(query))!\n .getRootStub()\n .toJSON(EncodingMode.hydrated);\n const { name, variables } = decoderImpl(query) as unknown as QueryRef<\n unknown,\n unknown\n >;\n const queryRef: QueryRef<unknown, unknown> = {\n dataConnect: this.dc,\n refType: QUERY_STR,\n name,\n variables\n };\n this.publishDataToSubscribers(query, {\n data: newJson,\n fetchTime,\n ref: queryRef,\n source: SOURCE_CACHE,\n toJSON: getRefSerializer(queryRef, newJson, SOURCE_CACHE, fetchTime)\n });\n }\n }\n enableEmulator(host: string, port: number): void {\n this.transport.useEmulator(host, port);\n }\n}\n\nexport function getMaxAgeFromExtensions(\n extensions: DataConnectExtensionWithMaxAge[] | undefined\n): number | undefined {\n if (!extensions) {\n return;\n }\n for (const extension of extensions) {\n if (\n 'maxAge' in extension &&\n extension.maxAge !== undefined &&\n extension.maxAge !== null\n ) {\n if (extension.maxAge.endsWith('s')) {\n return Number(\n extension.maxAge.substring(0, extension.maxAge.length - 1)\n );\n }\n }\n }\n}\nfunction getDataConnectExtensionsWithoutMaxAge(\n extensions: ExtensionsWithMaxAge\n): Extensions | undefined {\n return {\n dataConnect: extensions.dataConnect?.filter(\n extension => 'entityId' in extension || 'entityIds' in extension\n )\n };\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectOptions, TransportOptions } from '../../api/DataConnect';\nimport { AppCheckTokenProvider } from '../../core/AppCheckTokenProvider';\nimport { AuthTokenProvider } from '../../core/FirebaseAuthProvider';\n\n/**\n * enum representing different flavors of the SDK used by developers\n * use the CallerSdkType for type-checking, and the CallerSdkTypeEnum for value-checking/assigning\n */\nexport type CallerSdkType =\n | 'Base' // Core JS SDK\n | 'Generated' // Generated JS SDK\n | 'TanstackReactCore' // Tanstack non-generated React SDK\n | 'GeneratedReact' // Generated React SDK\n | 'TanstackAngularCore' // Tanstack non-generated Angular SDK\n | 'GeneratedAngular'; // Generated Angular SDK\nexport const CallerSdkTypeEnum = {\n Base: 'Base', // Core JS SDK\n Generated: 'Generated', // Generated JS SDK\n TanstackReactCore: 'TanstackReactCore', // Tanstack non-generated React SDK\n GeneratedReact: 'GeneratedReact', // Tanstack non-generated Angular SDK\n TanstackAngularCore: 'TanstackAngularCore', // Tanstack non-generated Angular SDK\n GeneratedAngular: 'GeneratedAngular' // Generated Angular SDK\n} as const;\n\nexport interface DataConnectEntityArray {\n entityIds: string[];\n}\n\nexport interface DataConnectSingleEntity {\n entityId: string;\n}\n\nexport type DataConnectExtension = {\n path: Array<string | number>;\n} & (DataConnectEntityArray | DataConnectSingleEntity);\n\n/** @internal */\nexport interface DataConnectMaxAge {\n maxAge: string;\n}\n\n/** @internal */\nexport type DataConnectExtensionWithMaxAge = {\n path: Array<string | number>;\n} & (DataConnectEntityArray | DataConnectSingleEntity | DataConnectMaxAge);\n\nexport interface Extensions {\n dataConnect?: DataConnectExtension[];\n}\n\n/** @internal */\nexport interface ExtensionsWithMaxAge {\n dataConnect?: DataConnectExtensionWithMaxAge[];\n}\n\nexport interface DataConnectResponse<T> {\n data: T;\n errors: Error[];\n extensions: Extensions;\n}\n\n/** @internal */\nexport interface DataConnectResponseWithMaxAge<T> {\n data: T;\n errors: Error[];\n extensions: ExtensionsWithMaxAge;\n}\n\n/**\n * @internal\n */\nexport interface DataConnectTransport {\n invokeQuery<T, U>(\n queryName: string,\n body?: U\n ): Promise<DataConnectResponseWithMaxAge<T>>;\n invokeMutation<T, U>(\n queryName: string,\n body?: U\n ): Promise<DataConnectResponse<T>>;\n useEmulator(host: string, port?: number, sslEnabled?: boolean): void;\n onTokenChanged: (token: string | null) => void;\n _setCallerSdkType(callerSdkType: CallerSdkType): void;\n}\n\n/**\n * @internal\n */\nexport type TransportClass = new (\n options: DataConnectOptions,\n apiKey?: string,\n appId?: string,\n authProvider?: AuthTokenProvider,\n appCheckProvider?: AppCheckTokenProvider,\n transportOptions?: TransportOptions,\n _isUsingGen?: boolean,\n _callerSdkType?: CallerSdkType\n) => DataConnectTransport;\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectOptions, TransportOptions } from '../api/DataConnect';\nimport { Code, DataConnectError } from '../core/error';\nimport { logError } from '../logger';\n\nexport const PROD_HOST = 'firebasedataconnect.googleapis.com';\n\nexport function urlBuilder(\n projectConfig: DataConnectOptions,\n transportOptions: TransportOptions\n): string {\n const { connector, location, projectId: project, service } = projectConfig;\n const { host, sslEnabled, port } = transportOptions;\n const protocol = sslEnabled ? 'https' : 'http';\n const realHost = host || PROD_HOST;\n let baseUrl = `${protocol}://${realHost}`;\n if (typeof port === 'number') {\n baseUrl += `:${port}`;\n } else if (typeof port !== 'undefined') {\n logError('Port type is of an invalid type');\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'Incorrect type for port passed in!'\n );\n }\n return `${baseUrl}/v1/projects/${project}/locations/${location}/services/${service}/connectors/${connector}`;\n}\nexport function addToken(url: string, apiKey?: string): string {\n if (!apiKey) {\n return url;\n }\n const newUrl = new URL(url);\n newUrl.searchParams.append('key', apiKey);\n return newUrl.toString();\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isCloudWorkstation } from '@firebase/util';\n\nimport {\n Code,\n DataConnectError,\n DataConnectOperationError,\n DataConnectOperationFailureResponse\n} from '../core/error';\nimport { SDK_VERSION } from '../core/version';\nimport { logError } from '../logger';\n\nimport {\n CallerSdkType,\n CallerSdkTypeEnum,\n Extensions,\n DataConnectResponse\n} from './transport';\n\nlet connectFetch: typeof fetch | null = globalThis.fetch;\nexport function initializeFetch(fetchImpl: typeof fetch): void {\n connectFetch = fetchImpl;\n}\nfunction getGoogApiClientValue(\n _isUsingGen: boolean,\n _callerSdkType: CallerSdkType\n): string {\n let str = 'gl-js/ fire/' + SDK_VERSION;\n if (\n _callerSdkType !== CallerSdkTypeEnum.Base &&\n _callerSdkType !== CallerSdkTypeEnum.Generated\n ) {\n str += ' js/' + _callerSdkType.toLowerCase();\n } else if (_isUsingGen || _callerSdkType === CallerSdkTypeEnum.Generated) {\n str += ' js/gen';\n }\n return str;\n}\nexport interface DataConnectFetchBody<T> {\n name: string;\n operationName: string;\n variables: T;\n}\nexport async function dcFetch<T, U>(\n url: string,\n body: DataConnectFetchBody<U>,\n { signal }: AbortController,\n appId: string | null | undefined,\n accessToken: string | null,\n appCheckToken: string | null | undefined,\n _isUsingGen: boolean,\n _callerSdkType: CallerSdkType,\n _isUsingEmulator: boolean\n): Promise<DataConnectResponse<T>> {\n if (!connectFetch) {\n throw new DataConnectError(Code.OTHER, 'No Fetch Implementation detected!');\n }\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n 'X-Goog-Api-Client': getGoogApiClientValue(_isUsingGen, _callerSdkType)\n };\n if (accessToken) {\n headers['X-Firebase-Auth-Token'] = accessToken;\n }\n if (appId) {\n headers['x-firebase-gmpid'] = appId;\n }\n if (appCheckToken) {\n headers['X-Firebase-AppCheck'] = appCheckToken;\n }\n const bodyStr = JSON.stringify(body);\n const fetchOptions: RequestInit = {\n body: bodyStr,\n method: 'POST',\n headers,\n signal\n };\n if (isCloudWorkstation(url) && _isUsingEmulator) {\n fetchOptions.credentials = 'include';\n }\n\n let response: Response;\n try {\n response = await connectFetch(url, fetchOptions);\n } catch (err) {\n throw new DataConnectError(\n Code.OTHER,\n 'Failed to fetch: ' + JSON.stringify(err)\n );\n }\n let jsonResponse: JsonResponse<T>;\n try {\n jsonResponse = await response.json();\n } catch (e) {\n throw new DataConnectError(Code.OTHER, JSON.stringify(e));\n }\n const message = getErrorMessage(jsonResponse);\n if (response.status >= 400) {\n logError('Error while performing request: ' + JSON.stringify(jsonResponse));\n if (response.status === 401) {\n throw new DataConnectError(Code.UNAUTHORIZED, message);\n }\n throw new DataConnectError(Code.OTHER, message);\n }\n if (jsonResponse.errors && jsonResponse.errors.length) {\n const stringified = JSON.stringify(jsonResponse.errors);\n const failureResponse: DataConnectOperationFailureResponse = {\n errors: jsonResponse.errors,\n data: jsonResponse.data as Record<string, unknown>\n };\n throw new DataConnectOperationError(\n 'DataConnect error while performing request: ' + stringified,\n failureResponse\n );\n }\n if (!jsonResponse.extensions) {\n jsonResponse.extensions = {\n dataConnect: []\n };\n }\n return jsonResponse as DataConnectResponse<T>;\n}\ninterface JsonResponse<T> {\n message?: string;\n errors: [];\n data: Record<string, unknown> | T | null;\n extensions?: Extensions;\n}\nfunction getErrorMessage(obj: JsonResponse<unknown>): string {\n if ('message' in obj && obj.message) {\n return obj.message;\n }\n return JSON.stringify(obj);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectOptions, TransportOptions } from '../../api/DataConnect';\nimport { AppCheckTokenProvider } from '../../core/AppCheckTokenProvider';\nimport { DataConnectError, Code } from '../../core/error';\nimport { AuthTokenProvider } from '../../core/FirebaseAuthProvider';\nimport { logDebug } from '../../logger';\nimport { addToken, urlBuilder } from '../../util/url';\nimport { dcFetch } from '../fetch';\n\nimport {\n CallerSdkType,\n CallerSdkTypeEnum,\n DataConnectResponse,\n DataConnectTransport\n} from '.';\n\nexport class RESTTransport implements DataConnectTransport {\n private _host = '';\n private _port: number | undefined;\n private _location = 'l';\n private _connectorName = '';\n private _secure = true;\n private _project = 'p';\n private _serviceName: string;\n private _accessToken: string | null = null;\n private _appCheckToken: string | null | undefined = null;\n private _lastToken: string | null = null;\n private _isUsingEmulator = false;\n constructor(\n options: DataConnectOptions,\n private apiKey?: string | undefined,\n private appId?: string | null,\n private authProvider?: AuthTokenProvider | undefined,\n private appCheckProvider?: AppCheckTokenProvider | undefined,\n transportOptions?: TransportOptions | undefined,\n private _isUsingGen = false,\n private _callerSdkType: CallerSdkType = CallerSdkTypeEnum.Base\n ) {\n if (transportOptions) {\n if (typeof transportOptions.port === 'number') {\n this._port = transportOptions.port;\n }\n if (typeof transportOptions.sslEnabled !== 'undefined') {\n this._secure = transportOptions.sslEnabled;\n }\n this._host = transportOptions.host;\n }\n const { location, projectId: project, connector, service } = options;\n if (location) {\n this._location = location;\n }\n if (project) {\n this._project = project;\n }\n this._serviceName = service;\n if (!connector) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'Connector Name required!'\n );\n }\n this._connectorName = connector;\n this.authProvider?.addTokenChangeListener(token => {\n logDebug(`New Token Available: ${token}`);\n this._accessToken = token;\n });\n this.appCheckProvider?.addTokenChangeListener(result => {\n const { token } = result;\n logDebug(`New App Check Token Available: ${token}`);\n this._appCheckToken = token;\n });\n }\n get endpointUrl(): string {\n return urlBuilder(\n {\n connector: this._connectorName,\n location: this._location,\n projectId: this._project,\n service: this._serviceName\n },\n { host: this._host, sslEnabled: this._secure, port: this._port }\n );\n }\n useEmulator(host: string, port?: number, isSecure?: boolean): void {\n this._host = host;\n this._isUsingEmulator = true;\n if (typeof port === 'number') {\n this._port = port;\n }\n if (typeof isSecure !== 'undefined') {\n this._secure = isSecure;\n }\n }\n onTokenChanged(newToken: string | null): void {\n this._accessToken = newToken;\n }\n\n async getWithAuth(forceToken = false): Promise<string | null> {\n let starterPromise: Promise<string | null> = new Promise(resolve =>\n resolve(this._accessToken)\n );\n if (this.appCheckProvider) {\n const appCheckToken = await this.appCheckProvider.getToken();\n if (appCheckToken) {\n this._appCheckToken = appCheckToken.token;\n }\n }\n if (this.authProvider) {\n starterPromise = this.authProvider\n .getToken(/*forceToken=*/ forceToken)\n .then(data => {\n if (!data) {\n return null;\n }\n this._accessToken = data.accessToken;\n return this._accessToken;\n });\n } else {\n starterPromise = new Promise(resolve => resolve(''));\n }\n return starterPromise;\n }\n\n _setLastToken(lastToken: string | null): void {\n this._lastToken = lastToken;\n }\n\n withRetry<T>(\n promiseFactory: () => Promise<DataConnectResponse<T>>,\n retry = false\n ): Promise<DataConnectResponse<T>> {\n let isNewToken = false;\n return this.getWithAuth(retry)\n .then(res => {\n isNewToken = this._lastToken !== res;\n this._lastToken = res;\n return res;\n })\n .then(promiseFactory)\n .catch(err => {\n // Only retry if the result is unauthorized and the last token isn't the same as the new one.\n if (\n 'code' in err &&\n err.code === Code.UNAUTHORIZED &&\n !retry &&\n isNewToken\n ) {\n logDebug('Retrying due to unauthorized');\n return this.withRetry(promiseFactory, true);\n }\n throw err;\n });\n }\n\n // TODO(mtewani): Update U to include shape of body defined in line 13.\n invokeQuery: <T, U>(\n queryName: string,\n body?: U\n ) => Promise<DataConnectResponse<T>> = <T, U = unknown>(\n queryName: string,\n body: U\n ) => {\n const abortController = new AbortController();\n\n // TODO(mtewani): Update to proper value\n const withAuth = this.withRetry(() =>\n dcFetch<T, U>(\n addToken(`${this.endpointUrl}:executeQuery`, this.apiKey),\n {\n name: `projects/${this._project}/locations/${this._location}/services/${this._serviceName}/connectors/${this._connectorName}`,\n operationName: queryName,\n variables: body\n },\n abortController,\n this.appId,\n this._accessToken,\n this._appCheckToken,\n this._isUsingGen,\n this._callerSdkType,\n this._isUsingEmulator\n )\n );\n return withAuth;\n };\n invokeMutation: <T, U>(\n queryName: string,\n body?: U\n ) => Promise<DataConnectResponse<T>> = <T, U = unknown>(\n mutationName: string,\n body: U\n ) => {\n const abortController = new AbortController();\n const taskResult = this.withRetry(() => {\n return dcFetch<T, U>(\n addToken(`${this.endpointUrl}:executeMutation`, this.apiKey),\n {\n name: `projects/${this._project}/locations/${this._location}/services/${this._serviceName}/connectors/${this._connectorName}`,\n operationName: mutationName,\n variables: body\n },\n abortController,\n this.appId,\n this._accessToken,\n this._appCheckToken,\n this._isUsingGen,\n this._callerSdkType,\n this._isUsingEmulator\n );\n });\n return taskResult;\n };\n\n _setCallerSdkType(callerSdkType: CallerSdkType): void {\n this._callerSdkType = callerSdkType;\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectTransport } from '../network/transport';\n\nimport { DataConnect } from './DataConnect';\nimport {\n DataConnectResult,\n MUTATION_STR,\n OperationRef,\n SOURCE_SERVER\n} from './Reference';\n\nexport interface MutationRef<Data, Variables>\n extends OperationRef<Data, Variables> {\n refType: typeof MUTATION_STR;\n}\n\n/**\n * Creates a `MutationRef`\n * @param dcInstance Data Connect instance\n * @param mutationName name of mutation\n */\nexport function mutationRef<Data>(\n dcInstance: DataConnect,\n mutationName: string\n): MutationRef<Data, undefined>;\n/**\n *\n * @param dcInstance Data Connect instance\n * @param mutationName name of mutation\n * @param variables variables to send with mutation\n */\nexport function mutationRef<Data, Variables>(\n dcInstance: DataConnect,\n mutationName: string,\n variables: Variables\n): MutationRef<Data, Variables>;\n/**\n *\n * @param dcInstance Data Connect instance\n * @param mutationName name of mutation\n * @param variables variables to send with mutation\n * @returns `MutationRef`\n */\nexport function mutationRef<Data, Variables>(\n dcInstance: DataConnect,\n mutationName: string,\n variables?: Variables\n): MutationRef<Data, Variables> {\n dcInstance.setInitialized();\n const ref: MutationRef<Data, Variables> = {\n dataConnect: dcInstance,\n name: mutationName,\n refType: MUTATION_STR,\n variables: variables as Variables\n };\n return ref;\n}\n\n/**\n * @internal\n */\nexport class MutationManager {\n private _inflight: Array<Promise<unknown>> = [];\n constructor(private _transport: DataConnectTransport) {}\n executeMutation<Data, Variables>(\n mutationRef: MutationRef<Data, Variables>\n ): MutationPromise<Data, Variables> {\n const result = this._transport.invokeMutation<Data, Variables>(\n mutationRef.name,\n mutationRef.variables\n );\n const withRefPromise = result.then(res => {\n const obj: MutationResult<Data, Variables> = {\n ...res, // Double check that the result is result.data, not just result\n source: SOURCE_SERVER,\n ref: mutationRef,\n fetchTime: Date.now().toLocaleString()\n };\n return obj;\n });\n this._inflight.push(result);\n const removePromise = (): Array<Promise<unknown>> =>\n (this._inflight = this._inflight.filter(promise => promise !== result));\n result.then(removePromise, removePromise);\n return withRefPromise;\n }\n}\n\n/**\n * Mutation Result from `executeMutation`\n */\nexport interface MutationResult<Data, Variables>\n extends DataConnectResult<Data, Variables> {\n ref: MutationRef<Data, Variables>;\n}\n/**\n * Mutation return value from `executeMutation`\n */\nexport interface MutationPromise<Data, Variables>\n extends Promise<MutationResult<Data, Variables>> {\n // reserved for special actions like cancellation\n}\n\n/**\n * Execute Mutation\n * @param mutationRef mutation to execute\n * @returns `MutationRef`\n */\nexport function executeMutation<Data, Variables>(\n mutationRef: MutationRef<Data, Variables>\n): MutationPromise<Data, Variables> {\n return mutationRef.dataConnect._mutationManager.executeMutation(mutationRef);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FirebaseApp,\n _getProvider,\n _removeServiceInstance,\n getApp\n} from '@firebase/app';\nimport { AppCheckInternalComponentName } from '@firebase/app-check-interop-types';\nimport { FirebaseAuthInternalName } from '@firebase/auth-interop-types';\nimport { Provider } from '@firebase/component';\nimport { isCloudWorkstation, pingServer } from '@firebase/util';\n\nimport { DataConnectCache, MemoryStub } from '../cache/Cache';\nimport { InternalCacheProvider } from '../cache/CacheProvider';\nimport { AppCheckTokenProvider } from '../core/AppCheckTokenProvider';\nimport { Code, DataConnectError } from '../core/error';\nimport {\n AuthTokenProvider,\n FirebaseAuthProvider\n} from '../core/FirebaseAuthProvider';\nimport { QueryManager } from '../core/query/QueryManager';\nimport { logDebug, logError } from '../logger';\nimport {\n CallerSdkType,\n CallerSdkTypeEnum,\n DataConnectTransport,\n TransportClass\n} from '../network';\nimport { RESTTransport } from '../network/transport/rest';\nimport { PROD_HOST } from '../util/url';\n\nimport { MutationManager } from './Mutation';\n\n/**\n * Connector Config for calling Data Connect backend.\n */\nexport interface ConnectorConfig {\n location: string;\n connector: string;\n service: string;\n}\n\n/**\n * Options to connect to emulator\n */\nexport interface TransportOptions {\n host: string;\n sslEnabled?: boolean;\n port?: number;\n}\n\nconst FIREBASE_DATA_CONNECT_EMULATOR_HOST_VAR =\n 'FIREBASE_DATA_CONNECT_EMULATOR_HOST';\n\n/**\n *\n * @param fullHost\n * @returns TransportOptions\n * @internal\n */\nexport function parseOptions(fullHost: string): TransportOptions {\n const [protocol, hostName] = fullHost.split('://');\n const isSecure = protocol === 'https';\n const [host, portAsString] = hostName.split(':');\n const port = Number(portAsString);\n return { host, port, sslEnabled: isSecure };\n}\n/**\n * DataConnectOptions including project id\n */\nexport interface DataConnectOptions extends ConnectorConfig {\n projectId: string;\n}\n\n/**\n * Class representing Firebase Data Connect\n */\nexport class DataConnect {\n _queryManager!: QueryManager;\n _mutationManager!: MutationManager;\n isEmulator = false;\n _initialized = false;\n private _transport!: DataConnectTransport;\n private _transportClass: TransportClass | undefined;\n private _transportOptions?: TransportOptions;\n private _authTokenProvider?: AuthTokenProvider;\n _isUsingGeneratedSdk: boolean = false;\n _callerSdkType: CallerSdkType = CallerSdkTypeEnum.Base;\n private _appCheckTokenProvider?: AppCheckTokenProvider;\n private _cacheSettings?: CacheSettings;\n /**\n * @internal\n */\n private cache?: DataConnectCache;\n // @internal\n constructor(\n public readonly app: FirebaseApp,\n // TODO(mtewani): Replace with _dataConnectOptions in the future\n private readonly dataConnectOptions: DataConnectOptions,\n private readonly _authProvider: Provider<FirebaseAuthInternalName>,\n private readonly _appCheckProvider: Provider<AppCheckInternalComponentName>\n ) {\n if (typeof process !== 'undefined' && process.env) {\n const host = process.env[FIREBASE_DATA_CONNECT_EMULATOR_HOST_VAR];\n if (host) {\n logDebug('Found custom host. Using emulator');\n this.isEmulator = true;\n this._transportOptions = parseOptions(host);\n }\n }\n }\n /**\n * @internal\n */\n getCache(): DataConnectCache | undefined {\n return this.cache;\n }\n // @internal\n _useGeneratedSdk(): void {\n if (!this._isUsingGeneratedSdk) {\n this._isUsingGeneratedSdk = true;\n }\n }\n _setCallerSdkType(callerSdkType: CallerSdkType): void {\n this._callerSdkType = callerSdkType;\n if (this._initialized) {\n this._transport._setCallerSdkType(callerSdkType);\n }\n }\n _delete(): Promise<void> {\n _removeServiceInstance(\n this.app,\n 'data-connect',\n JSON.stringify(this.getSettings())\n );\n return Promise.resolve();\n }\n\n // @internal\n getSettings(): ConnectorConfig {\n const copy = JSON.parse(JSON.stringify(this.dataConnectOptions));\n delete copy.projectId;\n return copy;\n }\n\n /**\n * @internal\n */\n setCacheSettings(cacheSettings: CacheSettings): void {\n this._cacheSettings = cacheSettings;\n }\n\n // @internal\n setInitialized(): void {\n if (this._initialized) {\n return;\n }\n if (this._transportClass === undefined) {\n logDebug('transportClass not provided. Defaulting to RESTTransport.');\n this._transportClass = RESTTransport;\n }\n\n this._authTokenProvider = new FirebaseAuthProvider(\n this.app.name,\n this.app.options,\n this._authProvider\n );\n const connectorConfig: ConnectorConfig = {\n connector: this.dataConnectOptions.connector,\n service: this.dataConnectOptions.service,\n location: this.dataConnectOptions.location\n };\n if (this._cacheSettings) {\n this.cache = new DataConnectCache(\n this._authTokenProvider,\n this.app.options.projectId!,\n connectorConfig,\n this._transportOptions?.host || PROD_HOST,\n this._cacheSettings\n );\n }\n\n if (this._appCheckProvider) {\n this._appCheckTokenProvider = new AppCheckTokenProvider(\n this.app,\n this._appCheckProvider\n );\n }\n\n this._transport = new this._transportClass(\n this.dataConnectOptions,\n this.app.options.apiKey,\n this.app.options.appId,\n this._authTokenProvider,\n this._appCheckTokenProvider,\n undefined,\n this._isUsingGeneratedSdk,\n this._callerSdkType\n );\n if (this._transportOptions) {\n this._transport.useEmulator(\n this._transportOptions.host,\n this._transportOptions.port,\n this._transportOptions.sslEnabled\n );\n }\n\n this._queryManager = new QueryManager(this._transport, this, this.cache);\n this._mutationManager = new MutationManager(this._transport);\n this._initialized = true;\n }\n\n // @internal\n enableEmulator(transportOptions: TransportOptions): void {\n if (\n this._transportOptions &&\n this._initialized &&\n !areTransportOptionsEqual(this._transportOptions, transportOptions)\n ) {\n logError('enableEmulator called after initialization');\n throw new DataConnectError(\n Code.ALREADY_INITIALIZED,\n 'DataConnect instance already initialized!'\n );\n }\n this._transportOptions = transportOptions;\n this.isEmulator = true;\n }\n}\n\n/**\n * @internal\n * @param transportOptions1\n * @param transportOptions2\n * @returns\n */\nexport function areTransportOptionsEqual(\n transportOptions1: TransportOptions,\n transportOptions2: TransportOptions\n): boolean {\n return (\n transportOptions1.host === transportOptions2.host &&\n transportOptions1.port === transportOptions2.port &&\n transportOptions1.sslEnabled === transportOptions2.sslEnabled\n );\n}\n\n/**\n * Connect to the DataConnect Emulator\n * @param dc Data Connect instance\n * @param host host of emulator server\n * @param port port of emulator server\n * @param sslEnabled use https\n */\nexport function connectDataConnectEmulator(\n dc: DataConnect,\n host: string,\n port?: number,\n sslEnabled = false\n): void {\n // Workaround to get cookies in Firebase Studio\n if (isCloudWorkstation(host)) {\n void pingServer(`https://${host}${port ? `:${port}` : ''}`);\n }\n dc.enableEmulator({ host, port, sslEnabled });\n}\n\nexport interface DataConnectSettings {\n cacheSettings?: CacheSettings;\n}\n\n/**\n * Initialize DataConnect instance\n * @param options ConnectorConfig\n */\nexport function getDataConnect(\n options: ConnectorConfig,\n settings?: DataConnectSettings\n): DataConnect;\nexport function getDataConnect(options: ConnectorConfig): DataConnect;\n/**\n * Initialize DataConnect instance\n * @param app FirebaseApp to initialize to.\n * @param connectorConfig ConnectorConfig\n */\nexport function getDataConnect(\n app: FirebaseApp,\n connectorConfig: ConnectorConfig\n): DataConnect;\n\n/**\n * Initialize DataConnect instance\n * @param app FirebaseApp to initialize to.\n * @param connectorConfig ConnectorConfig\n */\nexport function getDataConnect(\n app: FirebaseApp,\n connectorConfig: ConnectorConfig,\n settings: DataConnectSettings\n): DataConnect;\n\nexport function getDataConnect(\n appOrConnectorConfig: FirebaseApp | ConnectorConfig,\n settingsOrConnectorConfig?: ConnectorConfig | DataConnectSettings,\n settings?: DataConnectSettings\n): DataConnect {\n let app: FirebaseApp;\n let connectorConfig: ConnectorConfig;\n let realSettings: DataConnectSettings;\n if ('location' in appOrConnectorConfig) {\n connectorConfig = appOrConnectorConfig;\n app = getApp();\n realSettings = settingsOrConnectorConfig as DataConnectSettings;\n } else {\n app = appOrConnectorConfig;\n connectorConfig = settingsOrConnectorConfig as ConnectorConfig;\n realSettings = settings as DataConnectSettings;\n }\n\n if (!app || Object.keys(app).length === 0) {\n app = getApp();\n }\n\n // Options to store in Firebase Component Provider.\n const serializedOptions = {\n ...connectorConfig,\n projectId: app.options.projectId\n };\n\n // We should sort the keys before initialization.\n const sortedSerialized = Object.fromEntries(\n Object.entries(serializedOptions).sort()\n );\n\n const provider = _getProvider(app, 'data-connect');\n const identifier = JSON.stringify(sortedSerialized);\n if (provider.isInitialized(identifier)) {\n const dcInstance = provider.getImmediate({ identifier });\n const options = provider.getOptions(identifier);\n const optionsValid = Object.keys(options).length > 0;\n if (optionsValid) {\n logDebug('Re-using cached instance');\n return dcInstance;\n }\n }\n validateDCOptions(connectorConfig);\n\n logDebug('Creating new DataConnect instance');\n // Initialize with options.\n const dataConnect = provider.initialize({\n instanceIdentifier: identifier,\n options: Object.fromEntries(\n Object.entries({\n ...sortedSerialized\n }).sort()\n )\n });\n if (realSettings?.cacheSettings) {\n dataConnect.setCacheSettings(realSettings.cacheSettings);\n }\n return dataConnect;\n}\n\n/**\n *\n * @param dcOptions\n * @returns {void}\n * @internal\n */\nexport function validateDCOptions(dcOptions: ConnectorConfig): boolean {\n const fields = ['connector', 'location', 'service'];\n if (!dcOptions) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'DC Option Required');\n }\n fields.forEach(field => {\n if (\n dcOptions[field as keyof ConnectorConfig] === null ||\n dcOptions[field as keyof ConnectorConfig] === undefined\n ) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, `${field} Required`);\n }\n });\n return true;\n}\n\n/**\n * Delete DataConnect instance\n * @param dataConnect DataConnect instance\n * @returns\n */\nexport function terminate(dataConnect: DataConnect): Promise<void> {\n return dataConnect._delete();\n // TODO(mtewani): Stop pending tasks\n}\nexport const StorageType = {\n MEMORY: 'MEMORY'\n} as const;\n\nexport type StorageType = (typeof StorageType)[keyof typeof StorageType];\n\nexport interface CacheSettings {\n cacheProvider: CacheProvider<StorageType>;\n maxAgeSeconds?: number;\n}\nexport interface CacheProvider<T extends StorageType> {\n type: T;\n /**\n * @internal\n */\n initialize(cacheId: string): InternalCacheProvider;\n}\n\nexport function makeMemoryCacheProvider(): CacheProvider<'MEMORY'> {\n return new MemoryStub();\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n _registerComponent,\n registerVersion,\n SDK_VERSION\n} from '@firebase/app';\nimport { Component, ComponentType } from '@firebase/component';\n\nimport { name, version } from '../package.json';\nimport { setSDKVersion } from '../src/core/version';\n\nimport { DataConnect, ConnectorConfig } from './api/DataConnect';\nimport { Code, DataConnectError } from './core/error';\n\nexport function registerDataConnect(variant?: string): void {\n setSDKVersion(SDK_VERSION);\n _registerComponent(\n new Component(\n 'data-connect',\n (container, { instanceIdentifier: connectorConfigStr, options }) => {\n const app = container.getProvider('app').getImmediate()!;\n const authProvider = container.getProvider('auth-internal');\n const appCheckProvider = container.getProvider('app-check-internal');\n let newOpts = options as ConnectorConfig;\n if (connectorConfigStr) {\n newOpts = {\n ...JSON.parse(connectorConfigStr),\n ...newOpts\n };\n }\n if (!app.options.projectId) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'Project ID must be provided. Did you pass in a proper projectId to initializeApp?'\n );\n }\n return new DataConnect(\n app,\n { ...newOpts, projectId: app.options.projectId! },\n authProvider,\n appCheckProvider\n );\n },\n ComponentType.PUBLIC\n ).setMultipleInstances(true)\n );\n registerVersion(name, version, variant);\n // BUILD_TARGET will be replaced by values like esm, cjs, etc during the compilation\n registerVersion(name, version, '__BUILD_TARGET__');\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const QueryFetchPolicy = {\n PREFER_CACHE: 'PREFER_CACHE',\n CACHE_ONLY: 'CACHE_ONLY',\n SERVER_ONLY: 'SERVER_ONLY'\n} as const;\n\n/*\n * Represents policy for how executeQuery fetches data\n */\nexport type QueryFetchPolicy =\n (typeof QueryFetchPolicy)[keyof typeof QueryFetchPolicy];\n\n/**\n * Options for executing a query.\n */\nexport interface ExecuteQueryOptions {\n fetchPolicy: QueryFetchPolicy;\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Code, DataConnectError } from '../core/error';\nimport {\n ExecuteQueryOptions,\n QueryFetchPolicy\n} from '../core/query/queryOptions';\nimport { DataConnectExtensionWithMaxAge } from '../network/transport';\n\nimport { DataConnect, getDataConnect } from './DataConnect';\nimport {\n OperationRef,\n QUERY_STR,\n DataConnectResult,\n SerializedRef\n} from './Reference';\n\n/**\n * QueryRef object\n */\nexport interface QueryRef<Data, Variables>\n extends OperationRef<Data, Variables> {\n refType: typeof QUERY_STR;\n}\n\n/** @internal */\nexport type InternalQueryResult<Data, Variables> = QueryResult<\n Data,\n Variables\n> &\n Omit<DataConnectResult<Data, Variables>, 'extensions'> & {\n extensions?: {\n dataConnect?: DataConnectExtensionWithMaxAge[];\n };\n };\n\n/**\n * Result of `executeQuery`\n */\nexport interface QueryResult<Data, Variables>\n extends DataConnectResult<Data, Variables> {\n ref: QueryRef<Data, Variables>;\n toJSON: () => SerializedRef<Data, Variables>;\n}\n/**\n * Promise returned from `executeQuery`\n */\nexport interface QueryPromise<Data, Variables>\n extends Promise<QueryResult<Data, Variables>> {\n // reserved for special actions like cancellation\n}\n\n/**\n * Execute Query\n * @param queryRef query to execute.\n * @returns `QueryPromise`\n */\nexport function executeQuery<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n options?: ExecuteQueryOptions\n): QueryPromise<Data, Variables> {\n if (queryRef.refType !== QUERY_STR) {\n return Promise.reject(\n new DataConnectError(\n Code.INVALID_ARGUMENT,\n `ExecuteQuery can only execute query operations`\n )\n );\n }\n const queryManager = queryRef.dataConnect._queryManager;\n const fetchPolicy = options?.fetchPolicy ?? QueryFetchPolicy.PREFER_CACHE;\n switch (fetchPolicy) {\n case QueryFetchPolicy.SERVER_ONLY:\n return queryManager.fetchServerResults(queryRef);\n case QueryFetchPolicy.CACHE_ONLY:\n return queryManager.fetchCacheResults(queryRef, true);\n case QueryFetchPolicy.PREFER_CACHE:\n return queryManager.preferCacheResults(queryRef, false);\n default:\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n `Invalid fetch policy: ${fetchPolicy}`\n );\n }\n}\n\n/**\n * Execute Query\n * @param dcInstance Data Connect instance to use.\n * @param queryName Query to execute\n * @returns `QueryRef`\n */\nexport function queryRef<Data>(\n dcInstance: DataConnect,\n queryName: string\n): QueryRef<Data, undefined>;\n/**\n * Execute Query\n * @param dcInstance Data Connect instance to use.\n * @param queryName Query to execute\n * @param variables Variables to execute with\n * @returns `QueryRef`\n */\nexport function queryRef<Data, Variables>(\n dcInstance: DataConnect,\n queryName: string,\n variables: Variables\n): QueryRef<Data, Variables>;\n/**\n * Execute Query\n * @param dcInstance Data Connect instance to use.\n * @param queryName Query to execute\n * @param variables Variables to execute with\n * @param initialCache initial cache to use for client hydration\n * @returns `QueryRef`\n */\nexport function queryRef<Data, Variables>(\n dcInstance: DataConnect,\n queryName: string,\n variables?: Variables,\n initialCache?: QueryResult<Data, Variables>\n): QueryRef<Data, Variables> {\n dcInstance.setInitialized();\n if (initialCache !== undefined) {\n dcInstance._queryManager.updateSSR(initialCache);\n }\n return {\n dataConnect: dcInstance,\n refType: QUERY_STR,\n name: queryName,\n variables: variables as Variables\n };\n}\n/**\n * Converts serialized ref to query ref\n * @param serializedRef ref to convert to `QueryRef`\n * @returns `QueryRef`\n */\nexport function toQueryRef<Data, Variables>(\n serializedRef: SerializedRef<Data, Variables>\n): QueryRef<Data, Variables> {\n const {\n refInfo: { name, variables, connectorConfig }\n } = serializedRef;\n return queryRef(getDataConnect(connectorConfig), name, variables);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ExecuteQueryOptions } from '../api';\nimport {\n ConnectorConfig,\n DataConnect,\n getDataConnect\n} from '../api/DataConnect';\nimport { Code, DataConnectError } from '../core/error';\n\ninterface ParsedArgs<Variables> {\n dc: DataConnect;\n vars: Variables;\n options?: ExecuteQueryOptions;\n}\n\n/**\n * The generated SDK will allow the user to pass in either the variables or the data connect instance\n * with the variables. This function validates the variables and returns back the DataConnect instance\n * and variables based on the arguments passed in.\n *\n * Generated SDKs generated from versions 3.2.0 and lower of the Data Connect emulator binary are\n * NOT concerned with options, and will use this function to validate arguments.\n *\n * @param connectorConfig\n * @param dcOrVars\n * @param vars\n * @param variablesRequired\n * @returns {DataConnect} and {Variables} instance\n * @internal\n */\nexport function validateArgs<Variables extends object>(\n connectorConfig: ConnectorConfig,\n dcOrVars?: DataConnect | Variables,\n vars?: Variables,\n variablesRequired?: boolean\n): ParsedArgs<Variables> {\n let dcInstance: DataConnect;\n let realVars: Variables;\n\n const dcFirstArg = dcOrVars && 'enableEmulator' in dcOrVars;\n\n if (dcFirstArg) {\n dcInstance = dcOrVars as DataConnect;\n realVars = vars as Variables;\n } else {\n dcInstance = getDataConnect(connectorConfig);\n realVars = dcOrVars as Variables;\n }\n\n if (!dcInstance || (!realVars && variablesRequired)) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'Variables required.');\n }\n\n return { dc: dcInstance, vars: realVars };\n}\n\n/**\n * The generated SDK will allow the user to pass in either the variables or the data connect instance\n * with the variables, and/or options. This function validates the variables and returns back the\n * DataConnect instance and variables, and potentially options, based on the arguments passed in.\n *\n * Generated SDKs generated from versions 3.2.0 and higher of the Data Connect emulator binary are\n * in fact concerned with options, and will use this function to validate arguments.\n *\n * @param connectorConfig\n * @param dcOrVarsOrOptions\n * @param varsOrOptions\n * @param variablesRequired\n * @param options\n * @returns {DataConnect} and {Variables} instance, and optionally {ExecuteQueryOptions}\n * @internal\n */\nexport function validateArgsWithOptions<Variables extends object>(\n connectorConfig: ConnectorConfig,\n dcOrVarsOrOptions?: DataConnect | Variables | ExecuteQueryOptions,\n varsOrOptions?: Variables | ExecuteQueryOptions,\n options?: ExecuteQueryOptions,\n hasVars?: boolean,\n variablesRequired?: boolean\n): ParsedArgs<Variables> {\n let dcInstance: DataConnect;\n let realVars: Variables;\n let realOptions: ExecuteQueryOptions;\n\n const dcFirstArg = dcOrVarsOrOptions && 'enableEmulator' in dcOrVarsOrOptions;\n\n if (dcFirstArg) {\n dcInstance = dcOrVarsOrOptions as DataConnect;\n if (hasVars) {\n realVars = varsOrOptions as Variables;\n realOptions = options as ExecuteQueryOptions;\n } else {\n realVars = undefined as unknown as Variables;\n realOptions = varsOrOptions as ExecuteQueryOptions;\n }\n } else {\n dcInstance = getDataConnect(connectorConfig);\n if (hasVars) {\n realVars = dcOrVarsOrOptions as Variables;\n realOptions = varsOrOptions as ExecuteQueryOptions;\n } else {\n realVars = undefined as unknown as Variables;\n realOptions = dcOrVarsOrOptions as ExecuteQueryOptions;\n }\n }\n\n if (!dcInstance || (!realVars && variablesRequired)) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'Variables required.');\n }\n\n return { dc: dcInstance, vars: realVars, options: realOptions };\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { QueryRef, QueryResult, toQueryRef } from '../../api/query';\nimport { SerializedRef } from '../../api/Reference';\nimport { DataConnectError, Code } from '../error';\n\nimport { getRefSerializer } from './QueryManager';\n\n/**\n * `OnCompleteSubscription`\n */\nexport type OnCompleteSubscription = () => void;\n/**\n * Representation of full observer options in `subscribe`\n */\nexport interface SubscriptionOptions<Data, Variables> {\n onNext?: OnResultSubscription<Data, Variables>;\n onErr?: OnErrorSubscription;\n onComplete?: OnCompleteSubscription;\n}\n\n/**\n * Signature for `OnResultSubscription` for `subscribe`\n */\nexport type OnResultSubscription<Data, Variables> = (\n res: QueryResult<Data, Variables>\n) => void;\n/**\n * Signature for `OnErrorSubscription` for `subscribe`\n */\nexport type OnErrorSubscription = (err?: DataConnectError) => void;\n/**\n * Signature for unsubscribe from `subscribe`\n */\nexport type QueryUnsubscribe = () => void;\n/**\n * Representation of user provided subscription options.\n */\nexport interface DataConnectSubscription<Data, Variables> {\n userCallback: OnResultSubscription<Data, Variables>;\n errCallback?: (e?: DataConnectError) => void;\n unsubscribe: () => void;\n}\n\n/**\n * Subscribe to a `QueryRef`\n * @param queryRefOrSerializedResult query ref or serialized result.\n * @param observer observer object to use for subscribing.\n * @returns `SubscriptionOptions`\n */\nexport function subscribe<Data, Variables>(\n queryRefOrSerializedResult:\n | QueryRef<Data, Variables>\n | SerializedRef<Data, Variables>,\n observer: SubscriptionOptions<Data, Variables>\n): QueryUnsubscribe;\n/**\n * Subscribe to a `QueryRef`\n * @param queryRefOrSerializedResult query ref or serialized result.\n * @param onNext Callback to call when result comes back.\n * @param onError Callback to call when error gets thrown.\n * @param onComplete Called when subscription completes.\n * @returns `SubscriptionOptions`\n */\nexport function subscribe<Data, Variables>(\n queryRefOrSerializedResult:\n | QueryRef<Data, Variables>\n | SerializedRef<Data, Variables>,\n onNext: OnResultSubscription<Data, Variables>,\n onError?: OnErrorSubscription,\n onComplete?: OnCompleteSubscription\n): QueryUnsubscribe;\n/**\n * Subscribe to a `QueryRef`\n * @param queryRefOrSerializedResult query ref or serialized result.\n * @param observerOrOnNext observer object or next function.\n * @param onError Callback to call when error gets thrown.\n * @param onComplete Called when subscription completes.\n * @returns `SubscriptionOptions`\n */\nexport function subscribe<Data, Variables>(\n queryRefOrSerializedResult:\n | QueryRef<Data, Variables>\n | SerializedRef<Data, Variables>,\n observerOrOnNext:\n | SubscriptionOptions<Data, Variables>\n | OnResultSubscription<Data, Variables>,\n onError?: OnErrorSubscription,\n onComplete?: OnCompleteSubscription\n): QueryUnsubscribe {\n let ref: QueryRef<Data, Variables>;\n let initialCache: QueryResult<Data, Variables> | undefined;\n if ('refInfo' in queryRefOrSerializedResult) {\n const serializedRef: SerializedRef<Data, Variables> =\n queryRefOrSerializedResult;\n const { data, source, fetchTime } = serializedRef;\n\n ref = toQueryRef(serializedRef);\n initialCache = {\n data,\n source,\n fetchTime,\n ref,\n toJSON: getRefSerializer(ref, data, source, fetchTime)\n };\n } else {\n ref = queryRefOrSerializedResult;\n }\n let onResult: OnResultSubscription<Data, Variables> | undefined = undefined;\n if (typeof observerOrOnNext === 'function') {\n onResult = observerOrOnNext;\n } else {\n onResult = observerOrOnNext.onNext;\n onError = observerOrOnNext.onErr;\n onComplete = observerOrOnNext.onComplete;\n }\n if (!onResult) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'Must provide onNext');\n }\n return ref.dataConnect._queryManager.addSubscription(\n ref,\n onResult,\n onComplete,\n onError,\n initialCache\n );\n}\n","/**\n * Firebase Data Connect\n *\n * @packageDocumentation\n */\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DataConnect } from './api/DataConnect';\nimport { registerDataConnect } from './register';\n\nexport * from './api';\nexport * from './api.browser';\n\nregisterDataConnect();\n\ndeclare module '@firebase/component' {\n interface NameServiceMapping {\n 'data-connect': DataConnect;\n }\n}\n"],"names":["SDK_VERSION"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/core/version.ts","../src/core/error.ts","../src/cache/EntityDataObject.ts","../src/cache/InMemoryCacheProvider.ts","../src/cache/EntityNode.ts","../src/cache/ResultTree.ts","../src/cache/ImpactedQueryRefsAccumulator.ts","../src/cache/ResultTreeProcessor.ts","../src/cache/Cache.ts","../src/core/AppCheckTokenProvider.ts","../src/logger.ts","../src/core/FirebaseAuthProvider.ts","../src/api/Reference.ts","../src/cache/cacheUtils.ts","../src/util/encoder.ts","../src/core/query/QueryManager.ts","../src/network/transport.ts","../src/network/rest/fetch.ts","../src/util/url.ts","../src/network/rest/restTransport.ts","../src/network/stream/streamTransport.ts","../src/network/stream/websocket.ts","../src/network/manager.ts","../src/api/Mutation.ts","../src/api/DataConnect.ts","../src/register.ts","../src/core/query/queryOptions.ts","../src/api/query.ts","../src/util/validateArgs.ts","../src/core/query/subscribe.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** The semver (www.semver.org) version of the SDK. */\nexport let SDK_VERSION = '';\n\n/**\n * SDK_VERSION should be set before any database instance is created\n * @internal\n */\nexport function setSDKVersion(version: string): void {\n SDK_VERSION = version;\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseError } from '@firebase/util';\n\nexport type DataConnectErrorCode =\n | 'other'\n | 'already-initialized'\n | 'not-initialized'\n | 'not-supported'\n | 'invalid-argument'\n | 'partial-error'\n | 'unauthorized';\n\nexport type Code = DataConnectErrorCode;\n\nexport const Code = {\n OTHER: 'other' as DataConnectErrorCode,\n ALREADY_INITIALIZED: 'already-initialized' as DataConnectErrorCode,\n NOT_INITIALIZED: 'not-initialized' as DataConnectErrorCode,\n NOT_SUPPORTED: 'not-supported' as DataConnectErrorCode,\n INVALID_ARGUMENT: 'invalid-argument' as DataConnectErrorCode,\n PARTIAL_ERROR: 'partial-error' as DataConnectErrorCode,\n UNAUTHORIZED: 'unauthorized' as DataConnectErrorCode\n};\n\n/** An error returned by a DataConnect operation. */\nexport class DataConnectError extends FirebaseError {\n /** @internal */\n readonly name: string = 'DataConnectError';\n\n constructor(code: Code, message: string) {\n super(code, message);\n\n // Ensure the instanceof operator works as expected on subclasses of Error.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#custom_error_types\n // and https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget\n Object.setPrototypeOf(this, DataConnectError.prototype);\n }\n\n /** @internal */\n toString(): string {\n return `${this.name}[code=${this.code}]: ${this.message}`;\n }\n}\n\n/** An error returned by a DataConnect operation. */\nexport class DataConnectOperationError extends DataConnectError {\n /** @internal */\n readonly name: string = 'DataConnectOperationError';\n\n /** The response received from the backend. */\n readonly response: DataConnectOperationFailureResponse;\n\n /** @hideconstructor */\n constructor(message: string, response: DataConnectOperationFailureResponse) {\n super(Code.PARTIAL_ERROR, message);\n this.response = response;\n }\n}\n\nexport interface DataConnectOperationFailureResponse {\n // The \"data\" provided by the backend in the response message.\n //\n // Will be `undefined` if no \"data\" was provided in the response message.\n // Otherwise, will be `null` if `null` was explicitly specified as the \"data\"\n // in the response message. Otherwise, will be the value of the \"data\"\n // specified as the \"data\" in the response message\n readonly data?: Record<string, unknown> | null;\n\n // The list of errors provided by the backend in the response message.\n readonly errors: DataConnectOperationFailureResponseErrorInfo[];\n}\n\n// Information about the error, as provided in the response from the backend.\n// See https://spec.graphql.org/draft/#sec-Errors\nexport interface DataConnectOperationFailureResponseErrorInfo {\n // The error message.\n readonly message: string;\n\n // The path of the field in the response data to which this error relates.\n // String values in this array refer to field names. Numeric values in this\n // array always satisfy `Number.isInteger()` and refer to the index in an\n // array.\n readonly path: Array<string | number>;\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type FDCScalarValue =\n | string\n | number\n | boolean\n | undefined\n | null\n | Record<string, unknown>\n | FDCScalarValue[];\n\nexport interface EntityDataObjectJson {\n map: {\n [key: string]: FDCScalarValue;\n };\n referencedFrom: string[];\n globalID: string;\n}\n\nexport class EntityDataObject {\n getServerValue(key: string): unknown {\n return this.serverValues[key];\n }\n private serverValues: { [key: string]: FDCScalarValue } = {};\n private referencedFrom = new Set<string>();\n constructor(public readonly globalID: string) {}\n getServerValues(): { [key: string]: FDCScalarValue } {\n return this.serverValues;\n }\n toJSON(): EntityDataObjectJson {\n return {\n globalID: this.globalID,\n map: this.serverValues,\n referencedFrom: Array.from(this.referencedFrom)\n };\n }\n static fromJSON(json: EntityDataObjectJson): EntityDataObject {\n const edo = new EntityDataObject(json.globalID);\n edo.serverValues = json.map;\n edo.referencedFrom = new Set(json.referencedFrom);\n return edo;\n }\n\n updateServerValue(\n key: string,\n value: FDCScalarValue,\n requestedFrom: string\n ): string[] {\n this.serverValues[key] = value;\n this.referencedFrom.add(requestedFrom);\n return Array.from(this.referencedFrom);\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport { EntityDataObject } from './EntityDataObject';\nimport { ResultTree } from './ResultTree';\n\nexport class InMemoryCacheProvider implements InternalCacheProvider {\n private edos = new Map<string, EntityDataObject>();\n private resultTrees = new Map<string, ResultTree>();\n constructor(private _keyId: string) {}\n\n async setResultTree(queryId: string, rt: ResultTree): Promise<void> {\n this.resultTrees.set(queryId, rt);\n }\n async getResultTree(queryId: string): Promise<ResultTree | undefined> {\n return this.resultTrees.get(queryId);\n }\n async updateEntityData(entityData: EntityDataObject): Promise<void> {\n this.edos.set(entityData.globalID, entityData);\n }\n async getEntityData(globalId: string): Promise<EntityDataObject> {\n if (!this.edos.has(globalId)) {\n this.edos.set(globalId, new EntityDataObject(globalId));\n }\n // Because of the above, we can guarantee that there will be an EDO at the globalId.\n return this.edos.get(globalId)!;\n }\n close(): Promise<void> {\n // No-op\n return Promise.resolve();\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Code, DataConnectError } from '../core/error';\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport {\n EntityDataObject,\n EntityDataObjectJson,\n FDCScalarValue\n} from './EntityDataObject';\nimport { ImpactedQueryRefsAccumulator } from './ImpactedQueryRefsAccumulator';\n\nexport const GLOBAL_ID_KEY = '_id';\nexport const OBJECT_LISTS_KEY = '_objectLists';\nexport const REFERENCES_KEY = '_references';\nexport const SCALARS_KEY = '_scalars';\nexport const ENTITY_DATA_KEYS_KEY = '_entity_data_keys';\nexport class EntityNode {\n entityData?: EntityDataObject;\n scalars: Record<string, FDCScalarValue> = {};\n references: { [key: string]: EntityNode } = {};\n objectLists: {\n [key: string]: EntityNode[];\n } = {};\n globalId?: string;\n entityDataKeys: Set<string> = new Set();\n\n async loadData(\n queryId: string,\n values: FDCScalarValue,\n entityIds: Record<string, unknown> | undefined,\n acc: ImpactedQueryRefsAccumulator,\n cacheProvider: InternalCacheProvider\n ): Promise<void> {\n if (values === undefined) {\n return;\n }\n if (typeof values !== 'object' || Array.isArray(values)) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'EntityNode initialized with non-object value'\n );\n }\n if (values === null) {\n return;\n }\n\n if (\n typeof values === 'object' &&\n entityIds &&\n entityIds[GLOBAL_ID_KEY] &&\n typeof entityIds[GLOBAL_ID_KEY] === 'string'\n ) {\n this.globalId = entityIds[GLOBAL_ID_KEY];\n this.entityData = await cacheProvider.getEntityData(this.globalId);\n }\n for (const key in values) {\n if (values.hasOwnProperty(key)) {\n if (typeof values[key] === 'object') {\n if (Array.isArray(values[key])) {\n const ids: Record<string, unknown> | undefined =\n entityIds && (entityIds[key] as Record<string, unknown>);\n const objArray: EntityNode[] = [];\n const scalarArray: Array<NonNullable<FDCScalarValue>> = [];\n for (const [index, value] of values[key].entries()) {\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n // Note: we don't support sparse arrays.\n } else {\n const entityNode = new EntityNode();\n await entityNode.loadData(\n queryId,\n value,\n ids && (ids[index] as Record<string, unknown>),\n acc,\n cacheProvider\n );\n objArray.push(entityNode);\n }\n } else {\n scalarArray.push(value);\n }\n }\n if (scalarArray.length > 0 && objArray.length > 0) {\n this.scalars[key] = values[key];\n } else if (scalarArray.length > 0) {\n if (this.entityData) {\n const impactedRefs = this.entityData.updateServerValue(\n key,\n scalarArray,\n queryId\n );\n this.entityDataKeys.add(key);\n acc.add(impactedRefs);\n } else {\n this.scalars[key] = scalarArray;\n }\n } else if (objArray.length > 0) {\n this.objectLists[key] = objArray;\n } else {\n this.scalars[key] = [];\n }\n } else {\n if (values[key] === null) {\n this.scalars[key] = null;\n continue;\n }\n const entityNode = new EntityNode();\n // TODO: Load Data might need to be pushed into ResultTreeProcessor instead.\n await entityNode.loadData(\n queryId,\n (values as Record<string, FDCScalarValue>)[key],\n entityIds && (entityIds[key] as Record<string, unknown>),\n acc,\n cacheProvider\n );\n this.references[key] = entityNode;\n }\n } else {\n if (this.entityData) {\n const impactedRefs = this.entityData.updateServerValue(\n key,\n values[key] as FDCScalarValue,\n queryId\n );\n this.entityDataKeys.add(key);\n acc.add(impactedRefs);\n } else {\n this.scalars[key] = values[key] as FDCScalarValue;\n }\n }\n }\n }\n if (this.entityData) {\n await cacheProvider.updateEntityData(this.entityData);\n }\n }\n\n toJSON(mode: EncodingMode): Record<string, unknown> {\n const resultObject: Record<string, unknown> = {};\n if (mode === EncodingMode.hydrated) {\n if (this.entityData) {\n for (const key of this.entityDataKeys) {\n resultObject[key] = this.entityData.getServerValue(key);\n }\n }\n\n if (this.scalars) {\n Object.assign(resultObject, this.scalars);\n }\n if (this.references) {\n for (const key in this.references) {\n if (this.references.hasOwnProperty(key)) {\n resultObject[key] = this.references[key].toJSON(mode);\n }\n }\n }\n if (this.objectLists) {\n for (const key in this.objectLists) {\n if (this.objectLists.hasOwnProperty(key)) {\n resultObject[key] = this.objectLists[key].map(obj =>\n obj.toJSON(mode)\n );\n }\n }\n }\n return resultObject;\n } else {\n // Get JSON representation of dehydrated list\n if (this.entityData) {\n resultObject[GLOBAL_ID_KEY] = this.entityData.globalID;\n }\n\n resultObject[ENTITY_DATA_KEYS_KEY] = Array.from(this.entityDataKeys);\n\n if (this.scalars) {\n resultObject[SCALARS_KEY] = this.scalars;\n }\n\n if (this.references) {\n const references = {} as Record<string, unknown>;\n for (const key in this.references) {\n if (this.references.hasOwnProperty(key)) {\n references[key] = this.references[key].toJSON(mode);\n }\n }\n resultObject[REFERENCES_KEY] = references;\n }\n if (this.objectLists) {\n const objectLists = {} as Record<string, unknown>;\n for (const key in this.objectLists) {\n if (this.objectLists.hasOwnProperty(key)) {\n objectLists[key] = this.objectLists[key].map(obj =>\n obj.toJSON(mode)\n );\n }\n }\n resultObject[OBJECT_LISTS_KEY] = objectLists;\n }\n }\n\n return resultObject;\n }\n\n static fromJson(obj: DehydratedStubDataObject): EntityNode {\n const sdo = new EntityNode();\n if (obj.backingData) {\n sdo.entityData = EntityDataObject.fromJSON(obj.backingData);\n }\n sdo.globalId = obj.globalID;\n sdo.scalars = obj.scalars;\n if (obj.references) {\n const references: Record<string, unknown> = {};\n for (const key in obj.references) {\n if (obj.references.hasOwnProperty(key)) {\n references[key] = EntityNode.fromJson(obj.references[key]);\n }\n }\n sdo.references = references as typeof sdo.references;\n }\n if (obj.objectLists) {\n const objectLists: Record<string, unknown> = {};\n for (const key in obj.objectLists) {\n if (obj.objectLists.hasOwnProperty(key)) {\n objectLists[key] = obj.objectLists[key].map(obj =>\n EntityNode.fromJson(obj)\n );\n }\n }\n sdo.objectLists = objectLists as typeof sdo.objectLists;\n }\n return sdo;\n }\n}\n\nexport interface DehydratedStubDataObject {\n backingData?: EntityDataObjectJson;\n globalID?: string;\n scalars: { [key: string]: FDCScalarValue };\n references: { [key: string]: DehydratedStubDataObject };\n objectLists: {\n [key: string]: DehydratedStubDataObject[];\n };\n}\n\n// Helpful for storing in persistent cache, which is not available yet.\nexport enum EncodingMode {\n hydrated,\n dehydrated\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EntityNode, DehydratedStubDataObject } from './EntityNode';\n\nexport class ResultTree {\n /**\n * Create a {@link ResultTree} from a dehydrated JSON object.\n * @param value The dehydrated JSON object.\n * @returns The {@link ResultTree}.\n */\n static fromJson(value: DehydratedResultTreeJson): ResultTree {\n return new ResultTree(\n EntityNode.fromJson(value.rootStub),\n value.maxAge,\n value.cachedAt,\n value.lastAccessed\n );\n }\n constructor(\n private rootStub: EntityNode,\n private maxAge: number = 0,\n public readonly cachedAt: Date,\n private _lastAccessed: Date\n ) {}\n isStale(): boolean {\n return (\n Date.now() - new Date(this.cachedAt.getTime()).getTime() >\n this.maxAge * 1000\n );\n }\n updateMaxAge(maxAgeInSeconds: number): void {\n this.maxAge = maxAgeInSeconds;\n }\n updateAccessed(): void {\n this._lastAccessed = new Date();\n }\n get lastAccessed(): Date {\n return this._lastAccessed;\n }\n getRootStub(): EntityNode {\n return this.rootStub;\n }\n}\n\ninterface DehydratedResultTreeJson {\n rootStub: DehydratedStubDataObject;\n maxAge: number;\n cachedAt: Date;\n lastAccessed: Date;\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class ImpactedQueryRefsAccumulator {\n impacted = new Set<string>();\n constructor(private queryId: string) {}\n add(impacted: string[]): void {\n impacted\n .filter(ref => ref !== this.queryId)\n .forEach(ref => this.impacted.add(ref));\n }\n consumeEvents(): string[] {\n const events = Array.from(this.impacted);\n this.impacted.clear();\n return events;\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport { EncodingMode, EntityNode } from './EntityNode';\nimport { ImpactedQueryRefsAccumulator } from './ImpactedQueryRefsAccumulator';\n\ninterface DehydratedResults {\n entityNode: EntityNode;\n impacted: string[];\n}\n\nexport class ResultTreeProcessor {\n /**\n * Hydrate the EntityNode into a JSON object so that it can be returned to the user.\n * @param rootStubObject\n * @returns {string}\n */\n hydrateResults(rootStubObject: EntityNode): Record<string, unknown> {\n return rootStubObject.toJSON(EncodingMode.hydrated);\n }\n /**\n * Dehydrate results so that they can be stored in the cache.\n * @param json\n * @param entityIds\n * @param cacheProvider\n * @param queryId\n * @returns {Promise<DehydratedResults>}\n */\n async dehydrateResults(\n json: Record<string, unknown>,\n entityIds: Record<string, unknown>,\n cacheProvider: InternalCacheProvider,\n queryId: string\n ): Promise<DehydratedResults> {\n const acc = new ImpactedQueryRefsAccumulator(queryId);\n const entityNode = new EntityNode();\n await entityNode.loadData(queryId, json, entityIds, acc, cacheProvider);\n return {\n entityNode,\n impacted: acc.consumeEvents()\n };\n }\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { generateSHA256Hash } from '@firebase/util';\n\nimport {\n CacheProvider,\n CacheSettings,\n type ConnectorConfig\n} from '../api/DataConnect';\nimport { Code, DataConnectError } from '../core/error';\nimport { type AuthTokenProvider } from '../core/FirebaseAuthProvider';\n\nimport { InternalCacheProvider } from './CacheProvider';\nimport { InMemoryCacheProvider } from './InMemoryCacheProvider';\nimport { ResultTree } from './ResultTree';\nimport { ResultTreeProcessor } from './ResultTreeProcessor';\n\nexport const Memory = 'memory';\n\nexport type DataConnectStorage = typeof Memory;\n\n/**\n * ServerValues\n */\nexport interface ServerValues extends Record<string, unknown> {\n maxAge?: number;\n}\n\nexport class DataConnectCache {\n private cacheProvider: InternalCacheProvider | null = null;\n private uid: string | null = null;\n constructor(\n private authProvider: AuthTokenProvider,\n private projectId: string,\n private connectorConfig: ConnectorConfig,\n private host: string,\n public cacheSettings: CacheSettings\n ) {\n this.authProvider.addTokenChangeListener(async _ => {\n const newUid = this.authProvider.getAuth().getUid();\n // We should only close if the token changes and so does the new UID\n if (this.uid !== newUid) {\n this.cacheProvider?.close();\n this.uid = newUid;\n const identifier = await this.getIdentifier(this.uid);\n this.cacheProvider = this.initializeNewProviders(identifier);\n }\n });\n }\n\n async initialize(): Promise<void> {\n if (!this.cacheProvider) {\n const identifier = await this.getIdentifier(this.uid);\n this.cacheProvider = this.initializeNewProviders(identifier);\n }\n }\n\n async getIdentifier(uid: string | null): Promise<string> {\n const identifier = `${\n 'memory' // TODO: replace this with indexeddb when persistence is available.\n }-${this.projectId}-${this.connectorConfig.service}-${\n this.connectorConfig.connector\n }-${this.connectorConfig.location}-${uid}-${this.host}`;\n const sha256 = await generateSHA256Hash(identifier);\n return sha256;\n }\n\n initializeNewProviders(identifier: string): InternalCacheProvider {\n return this.cacheSettings.cacheProvider.initialize(identifier);\n }\n\n async containsResultTree(queryId: string): Promise<boolean> {\n await this.initialize();\n const resultTree = await this.cacheProvider!.getResultTree(queryId);\n return resultTree !== undefined;\n }\n async getResultTree(queryId: string): Promise<ResultTree | undefined> {\n await this.initialize();\n return this.cacheProvider!.getResultTree(queryId);\n }\n async getResultJSON(queryId: string): Promise<Record<string, unknown>> {\n await this.initialize();\n const processor = new ResultTreeProcessor();\n const cacheProvider = this.cacheProvider;\n const resultTree = await cacheProvider!.getResultTree(queryId);\n if (!resultTree) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n `${queryId} not found in cache. Call \"update()\" first.`\n );\n }\n return processor.hydrateResults(resultTree.getRootStub());\n }\n async update(\n queryId: string,\n serverValues: ServerValues,\n entityIds: Record<string, unknown>\n ): Promise<string[]> {\n await this.initialize();\n const processor = new ResultTreeProcessor();\n const cacheProvider = this.cacheProvider;\n const { entityNode: stubDataObject, impacted } =\n await processor.dehydrateResults(\n serverValues,\n entityIds,\n cacheProvider!,\n queryId\n );\n const now = new Date();\n await cacheProvider!.setResultTree(\n queryId,\n new ResultTree(\n stubDataObject,\n serverValues.maxAge || this.cacheSettings.maxAgeSeconds,\n now,\n now\n )\n );\n return impacted;\n }\n}\n\nexport class MemoryStub implements CacheProvider<'MEMORY'> {\n type: 'MEMORY' = 'MEMORY';\n /**\n * @internal\n */\n initialize(cacheId: string): InMemoryCacheProvider {\n return new InMemoryCacheProvider(cacheId);\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp, _isFirebaseServerApp } from '@firebase/app';\nimport {\n AppCheckInternalComponentName,\n AppCheckTokenListener,\n AppCheckTokenResult,\n FirebaseAppCheckInternal\n} from '@firebase/app-check-interop-types';\nimport { Provider } from '@firebase/component';\n\n/**\n * @internal\n * Abstraction around AppCheck's token fetching capabilities.\n */\nexport class AppCheckTokenProvider {\n private appCheck?: FirebaseAppCheckInternal | null;\n private serverAppAppCheckToken?: string;\n constructor(\n app: FirebaseApp,\n private appCheckProvider?: Provider<AppCheckInternalComponentName>\n ) {\n if (_isFirebaseServerApp(app) && app.settings.appCheckToken) {\n this.serverAppAppCheckToken = app.settings.appCheckToken;\n }\n this.appCheck = appCheckProvider?.getImmediate({ optional: true });\n if (!this.appCheck) {\n void appCheckProvider\n ?.get()\n .then(appCheck => (this.appCheck = appCheck))\n .catch();\n }\n }\n\n getToken(): Promise<AppCheckTokenResult | null> {\n if (this.serverAppAppCheckToken) {\n return Promise.resolve({ token: this.serverAppAppCheckToken });\n }\n\n if (!this.appCheck) {\n return new Promise<AppCheckTokenResult | null>((resolve, reject) => {\n // Support delayed initialization of FirebaseAppCheck. This allows our\n // customers to initialize the RTDB SDK before initializing Firebase\n // AppCheck and ensures that all requests are authenticated if a token\n // becomes available before the timoeout below expires.\n setTimeout(() => {\n if (this.appCheck) {\n this.getToken().then(resolve, reject);\n } else {\n resolve(null);\n }\n }, 0);\n });\n }\n return this.appCheck.getToken();\n }\n\n addTokenChangeListener(listener: AppCheckTokenListener): void {\n void this.appCheckProvider\n ?.get()\n .then(appCheck => appCheck.addTokenListener(listener));\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Logger, LogLevelString } from '@firebase/logger';\n\nimport { SDK_VERSION } from './core/version';\n\nconst logger = new Logger('@firebase/data-connect');\nexport function setLogLevel(logLevel: LogLevelString): void {\n logger.setLogLevel(logLevel);\n}\nexport function logDebug(msg: string): void {\n logger.debug(`DataConnect (${SDK_VERSION}): ${msg}`);\n}\n\nexport function logError(msg: string): void {\n logger.error(`DataConnect (${SDK_VERSION}): ${msg}`);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseOptions } from '@firebase/app-types';\nimport {\n FirebaseAuthInternal,\n FirebaseAuthInternalName,\n FirebaseAuthTokenData\n} from '@firebase/auth-interop-types';\nimport { Provider } from '@firebase/component';\n\nimport { logDebug, logError } from '../logger';\n\n// @internal\nexport interface AuthTokenProvider {\n getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData | null>;\n addTokenChangeListener(listener: AuthTokenListener): void;\n getAuth(): FirebaseAuthInternal;\n}\nexport type AuthTokenListener = (token: string | null) => void;\n\n// @internal\nexport class FirebaseAuthProvider implements AuthTokenProvider {\n private _auth: FirebaseAuthInternal;\n constructor(\n private _appName: string,\n private _options: FirebaseOptions,\n private _authProvider: Provider<FirebaseAuthInternalName>\n ) {\n this._auth = _authProvider.getImmediate({ optional: true })!;\n if (!this._auth) {\n _authProvider.onInit(auth => (this._auth = auth));\n }\n }\n getAuth(): FirebaseAuthInternal {\n return this._auth;\n }\n getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData | null> {\n if (!this._auth) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n if (this._auth) {\n this.getToken(forceRefresh).then(resolve, reject);\n } else {\n resolve(null);\n }\n }, 0);\n });\n }\n return this._auth.getToken(forceRefresh).catch(error => {\n if (error && error.code === 'auth/token-not-initialized') {\n logDebug(\n 'Got auth/token-not-initialized error. Treating as null token.'\n );\n return null;\n } else {\n logError(\n 'Error received when attempting to retrieve token: ' +\n JSON.stringify(error)\n );\n return Promise.reject(error);\n }\n });\n }\n addTokenChangeListener(listener: AuthTokenListener): void {\n this._auth?.addAuthTokenListener(listener);\n }\n removeTokenChangeListener(listener: (token: string | null) => void): void {\n this._authProvider\n .get()\n .then(auth => auth.removeAuthTokenListener(listener))\n .catch(err => logError(err));\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Extensions } from '../network';\n\nimport { DataConnect, DataConnectOptions } from './DataConnect';\nexport const QUERY_STR = 'query';\nexport const MUTATION_STR = 'mutation';\nexport type ReferenceType = typeof QUERY_STR | typeof MUTATION_STR;\n\nexport const SOURCE_SERVER = 'SERVER';\nexport const SOURCE_CACHE = 'CACHE';\nexport type DataSource = typeof SOURCE_CACHE | typeof SOURCE_SERVER;\n\nexport interface OpResult<Data> {\n data: Data;\n source: DataSource;\n fetchTime: string;\n extensions?: Extensions;\n}\n\nexport interface OperationRef<_Data, Variables> {\n name: string;\n variables: Variables;\n refType: ReferenceType;\n dataConnect: DataConnect;\n}\n\nexport interface DataConnectResult<Data, Variables> extends OpResult<Data> {\n ref: OperationRef<Data, Variables>;\n // future metadata\n}\n\n/**\n * Serialized RefInfo as a result of `QueryResult.toJSON().refInfo`\n */\nexport interface RefInfo<Variables> {\n name: string;\n variables: Variables;\n connectorConfig: DataConnectOptions;\n}\n/**\n * Serialized Ref as a result of `QueryResult.toJSON()`\n */\nexport interface SerializedRef<Data, Variables> extends OpResult<Data> {\n refInfo: RefInfo<Variables>;\n}\n","/**\n * @license\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { OpResult } from '../api/Reference';\nimport { DataConnectExtension } from '../network';\nexport function parseEntityIds<T>(\n result: OpResult<T>\n): Record<string, unknown> {\n // Iterate through extensions.dataConnect\n const dataConnectExtensions = result.extensions?.dataConnect;\n const dataCopy = Object.assign(result);\n if (!dataConnectExtensions) {\n return dataCopy;\n }\n const ret: Record<string, unknown> = {};\n for (const extension of dataConnectExtensions) {\n const { path } = extension;\n populatePath(path, ret, extension);\n }\n return ret;\n}\n\n// mutates the object to update the path\nexport function populatePath(\n path: Array<string | number>,\n toUpdate: Record<string | number, unknown>,\n extension: DataConnectExtension\n): void {\n let curObj: Record<string | number, unknown> = toUpdate;\n for (const slice of path) {\n if (typeof curObj[slice] !== 'object') {\n curObj[slice] = {};\n }\n curObj = curObj[slice] as Record<string, unknown>;\n }\n\n if ('entityId' in extension && extension.entityId) {\n curObj['_id'] = extension.entityId;\n } else if ('entityIds' in extension) {\n const entityArr = extension.entityIds;\n for (let i = 0; i < entityArr.length; i++) {\n const entityId = entityArr[i];\n if (typeof curObj[i] === 'undefined') {\n curObj[i] = {};\n }\n (curObj[i] as Record<string, unknown>)._id = entityId;\n }\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type HmacImpl = (obj: Record<string, unknown>) => string;\nexport let encoderImpl: HmacImpl;\nexport type DecodeHmacImpl = (s: string) => Record<string, unknown>;\nexport let decoderImpl: DecodeHmacImpl;\nexport function setEncoder(encoder: HmacImpl): void {\n encoderImpl = encoder;\n}\nexport function setDecoder(decoder: DecodeHmacImpl): void {\n decoderImpl = decoder;\n}\nfunction sortKeysForObj(o: Record<string, unknown>): Record<string, unknown> {\n return Object.keys(o)\n .sort()\n .reduce((accumulator, currentKey) => {\n accumulator[currentKey] = o[currentKey];\n return accumulator;\n }, {} as Record<string, unknown>);\n}\nsetEncoder((o: Record<string, unknown>) => JSON.stringify(sortKeysForObj(o)));\nsetDecoder(s => sortKeysForObj(JSON.parse(s)));\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type DataConnect } from '../../api/DataConnect';\nimport { QueryRef, QueryResult } from '../../api/query';\nimport {\n QUERY_STR,\n SerializedRef,\n SOURCE_SERVER,\n DataSource,\n SOURCE_CACHE\n} from '../../api/Reference';\nimport { DataConnectSubscription } from '../../api.browser';\nimport { DataConnectCache, ServerValues } from '../../cache/Cache';\nimport { parseEntityIds } from '../../cache/cacheUtils';\nimport { EncodingMode } from '../../cache/EntityNode';\nimport {\n DataConnectTransportInterface,\n Extensions,\n DataConnectExtensionWithMaxAge,\n ExtensionsWithMaxAge,\n SubscribeObserver,\n DataConnectResponse\n} from '../../network';\nimport { decoderImpl, encoderImpl } from '../../util/encoder';\nimport {\n Code,\n DataConnectError,\n DataConnectOperationError,\n DataConnectOperationFailureResponse\n} from '../error';\n\nimport {\n OnCompleteSubscription,\n OnErrorSubscription,\n OnResultSubscription\n} from './subscribe';\n\nexport function getRefSerializer<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n data: Data,\n source: DataSource,\n fetchTime: string\n) {\n return function toJSON(): SerializedRef<Data, Variables> {\n return {\n data,\n refInfo: {\n name: queryRef.name,\n variables: queryRef.variables,\n connectorConfig: {\n projectId: queryRef.dataConnect.app.options.projectId!,\n ...queryRef.dataConnect.getSettings()\n }\n },\n fetchTime,\n source\n };\n };\n}\n\nexport class QueryManager {\n async preferCacheResults<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n allowStale = false\n ): Promise<QueryResult<Data, Variables>> {\n let cacheResult: QueryResult<Data, Variables> | undefined;\n try {\n cacheResult = await this.fetchCacheResults(queryRef, allowStale);\n } catch (e) {\n // Ignore the error and try to fetch from the server.\n }\n if (cacheResult) {\n return cacheResult;\n }\n return this.fetchServerResults(queryRef);\n }\n private callbacks = new Map<\n string,\n Array<DataConnectSubscription<unknown, unknown>>\n >();\n /**\n * Map of serialized query keys to most recent Query Result. Used as a simple fallback cache\n * for subsciptions if caching is not enabled.\n */\n private subscriptionCache = new Map<string, QueryResult<unknown, unknown>>();\n constructor(\n private transport: DataConnectTransportInterface,\n private dc: DataConnect,\n private cache?: DataConnectCache\n ) {}\n private queue: Array<Promise<unknown>> = [];\n async waitForQueuedWrites(): Promise<void> {\n for (const promise of this.queue) {\n await promise;\n }\n this.queue = [];\n }\n\n updateSSR<Data, Variables>(updatedData: QueryResult<Data, Variables>): void {\n this.queue.push(\n this.updateCache(updatedData).then(async result =>\n this.publishCacheResultsToSubscribers(result, updatedData.fetchTime)\n )\n );\n }\n\n async updateCache<Data, Variables>(\n result: QueryResult<Data, Variables>,\n extensions?: DataConnectExtensionWithMaxAge[]\n ): Promise<string[]> {\n await this.waitForQueuedWrites();\n if (this.cache) {\n const entityIds = parseEntityIds(result);\n const updatedMaxAge = getMaxAgeFromExtensions(extensions);\n if (updatedMaxAge !== undefined) {\n this.cache.cacheSettings.maxAgeSeconds = updatedMaxAge;\n }\n return this.cache.update(\n encoderImpl({\n name: result.ref.name,\n variables: result.ref.variables,\n refType: QUERY_STR\n }),\n result.data as ServerValues,\n entityIds\n );\n } else {\n const key = encoderImpl({\n name: result.ref.name,\n variables: result.ref.variables,\n refType: QUERY_STR\n });\n this.subscriptionCache.set(key, result);\n return [key];\n }\n }\n\n addSubscription<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n onResultCallback: OnResultSubscription<Data, Variables>,\n onCompleteCallback?: OnCompleteSubscription,\n onErrorCallback?: OnErrorSubscription,\n initialCache?: QueryResult<Data, Variables>\n ): () => void {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n\n const unsubscribe = (): void => {\n if (this.callbacks.has(key)) {\n const callbackList = this.callbacks.get(key)!;\n const newList = callbackList.filter(\n callback => callback !== subscription\n );\n this.callbacks.set(key, newList);\n\n if (newList.length === 0) {\n this.callbacks.delete(key);\n this.transport.invokeUnsubscribe(queryRef.name, queryRef.variables);\n }\n onCompleteCallback?.();\n }\n };\n const subscription: DataConnectSubscription<Data, Variables> = {\n userCallback: onResultCallback,\n errCallback: onErrorCallback,\n unsubscribe\n };\n\n if (initialCache) {\n this.updateSSR(initialCache);\n }\n\n const promise = this.preferCacheResults(queryRef, /*allowStale=*/ true);\n // We want to ignore the error and let subscriptions handle it\n promise.then(undefined, err => {});\n\n if (this.callbacks.has(key)) {\n this.callbacks\n .get(key)!\n .push(subscription as DataConnectSubscription<unknown, unknown>);\n } else {\n this.callbacks.set(key, [\n subscription as DataConnectSubscription<unknown, unknown>\n ]);\n\n // only invoke subscription if we don't already have an active subscription\n this.transport.invokeSubscribe<Data, Variables>(\n this.makeSubscribeObserver(queryRef),\n queryRef.name,\n queryRef.variables\n );\n }\n\n return unsubscribe;\n }\n\n async fetchServerResults<Data, Variables>(\n queryRef: QueryRef<Data, Variables>\n ): Promise<QueryResult<Data, Variables>> {\n await this.waitForQueuedWrites();\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n try {\n const result = await this.transport.invokeQuery<Data, Variables>(\n queryRef.name,\n queryRef.variables\n );\n const fetchTime = Date.now().toString();\n const originalExtensions = result.extensions;\n const queryResult: QueryResult<Data, Variables> = {\n ...result,\n ref: queryRef,\n source: SOURCE_SERVER,\n fetchTime,\n data: result.data,\n extensions: getDataConnectExtensionsWithoutMaxAge(originalExtensions),\n toJSON: getRefSerializer(\n queryRef,\n result.data,\n SOURCE_SERVER,\n fetchTime\n )\n };\n const updatedKeys = await this.updateCache(\n queryResult,\n originalExtensions?.dataConnect\n );\n this.publishDataToSubscribers(key, queryResult);\n if (this.cache) {\n await this.publishCacheResultsToSubscribers(updatedKeys, fetchTime);\n } else {\n this.subscriptionCache.set(key, queryResult);\n }\n return queryResult;\n } catch (e) {\n this.publishErrorToSubscribers(key, e);\n throw e;\n }\n }\n\n async fetchCacheResults<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n allowStale = false\n ): Promise<QueryResult<Data, Variables>> {\n await this.waitForQueuedWrites();\n let result: QueryResult<Data, Variables> | undefined | null;\n if (!this.cache) {\n result = await this.getFromSubscriberCache(queryRef);\n } else {\n result = await this.getFromResultTreeCache(queryRef, allowStale);\n }\n if (!result) {\n throw new DataConnectError(\n Code.OTHER,\n 'No cache entry found for query: ' + queryRef.name\n );\n }\n const fetchTime = Date.now().toString();\n const queryResult: QueryResult<Data, Variables> = {\n ...result,\n ref: queryRef,\n source: SOURCE_CACHE,\n fetchTime,\n data: result.data,\n extensions: result.extensions,\n toJSON: getRefSerializer(queryRef, result.data, SOURCE_CACHE, fetchTime)\n };\n if (this.cache) {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n await this.publishCacheResultsToSubscribers([key], fetchTime);\n } else {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n this.subscriptionCache.set(key, queryResult);\n this.publishDataToSubscribers(key, queryResult);\n }\n\n return queryResult;\n }\n\n publishErrorToSubscribers(key: string, err: unknown): void {\n this.callbacks.get(key)?.forEach(subscription => {\n if (subscription.errCallback) {\n subscription.errCallback(err as DataConnectError);\n }\n });\n }\n\n async getFromResultTreeCache<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n allowStale = false\n ): Promise<QueryResult<Data, Variables> | null> {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n if (!this.cache || !(await this.cache.containsResultTree(key))) {\n return null;\n }\n const cacheResult: Data = (await this.cache!.getResultJSON(key)) as Data;\n const resultTree = await this.cache!.getResultTree(key);\n if (!allowStale && resultTree!.isStale()) {\n return null;\n }\n const result: QueryResult<Data, Variables> = {\n source: SOURCE_CACHE,\n ref: queryRef,\n data: cacheResult,\n toJSON: getRefSerializer(\n queryRef,\n cacheResult,\n SOURCE_CACHE,\n resultTree!.cachedAt.toString()\n ),\n fetchTime: resultTree!.cachedAt.toString()\n };\n (await this.cache!.getResultTree(key))!.updateAccessed();\n return result;\n }\n async getFromSubscriberCache<Data, Variables>(\n queryRef: QueryRef<Data, Variables>\n ): Promise<QueryResult<Data, Variables> | undefined> {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n if (!this.subscriptionCache.has(key)) {\n return;\n }\n const result = this.subscriptionCache.get(key);\n result!.source = SOURCE_CACHE;\n result!.toJSON = getRefSerializer(\n result!.ref,\n result!.data,\n SOURCE_CACHE,\n result!.fetchTime\n );\n return result as QueryResult<Data, Variables>;\n }\n\n /** Call the registered onNext callbacks for the given key */\n publishDataToSubscribers(\n key: string,\n queryResult: QueryResult<unknown, unknown>\n ): void {\n if (!this.callbacks.has(key)) {\n return;\n }\n const subscribers = this.callbacks.get(key);\n subscribers!.forEach(callback => {\n callback.userCallback(queryResult);\n });\n }\n async publishCacheResultsToSubscribers(\n impactedQueries: string[],\n fetchTime: string\n ): Promise<void> {\n if (!this.cache) {\n return;\n }\n for (const query of impactedQueries) {\n const callbacks = this.callbacks.get(query);\n if (!callbacks) {\n continue;\n }\n const newJson = (await this.cache.getResultTree(query))!\n .getRootStub()\n .toJSON(EncodingMode.hydrated);\n const { name, variables } = decoderImpl(query) as unknown as QueryRef<\n unknown,\n unknown\n >;\n const queryRef: QueryRef<unknown, unknown> = {\n dataConnect: this.dc,\n refType: QUERY_STR,\n name,\n variables\n };\n this.publishDataToSubscribers(query, {\n data: newJson,\n fetchTime,\n ref: queryRef,\n source: SOURCE_CACHE,\n toJSON: getRefSerializer(queryRef, newJson, SOURCE_CACHE, fetchTime)\n });\n }\n }\n enableEmulator(host: string, port: number): void {\n this.transport.useEmulator(host, port);\n }\n\n /**\n * Create a new {@link SubscribeObserver} for the given QueryRef. This will be passed to\n * {@link DataConnectTransportInterface.invokeSubscribe | invokeSubscribe()} to notify the query\n * layer of data update notifications or if the stream disconnected.\n */\n private makeSubscribeObserver<Data, Variables>(\n queryRef: QueryRef<Data, Variables>\n ): SubscribeObserver<Data> {\n const key = encoderImpl({\n name: queryRef.name,\n variables: queryRef.variables,\n refType: QUERY_STR\n });\n return {\n onData: async response => {\n await this.handleStreamNotification(key, response, queryRef);\n },\n onDisconnect: (code, reason) => {\n this.handleStreamDisconnect(key, code, reason);\n },\n onError: error => {\n this.publishErrorToSubscribers(key, error);\n }\n };\n }\n\n /**\n * Handle a data update notification from the stream. Notify subscribers of results/errors, and\n * update the cache.\n */\n private async handleStreamNotification<Data, Variables>(\n key: string,\n response: DataConnectResponse<Data>,\n queryRef: QueryRef<Data, Variables>\n ): Promise<void> {\n if (response.errors && response.errors.length > 0) {\n const stringified = JSON.stringify(\n response.errors.map(e => {\n if (e && typeof e === 'object') {\n return {\n message: (e as unknown as { message: string }).message,\n code: (e as unknown as { code?: unknown }).code\n };\n }\n return e;\n })\n );\n const failureResponse: DataConnectOperationFailureResponse = {\n errors: response.errors as [],\n data: response.data as Record<string, unknown>\n };\n const error = new DataConnectOperationError(\n 'DataConnect error received from subscribe notification: ' +\n stringified,\n failureResponse\n );\n this.publishErrorToSubscribers(key, error);\n return;\n }\n\n const fetchTime = Date.now().toString();\n const queryResult: QueryResult<Data, Variables> = {\n ref: queryRef,\n source: SOURCE_SERVER,\n fetchTime,\n data: response.data,\n extensions: getDataConnectExtensionsWithoutMaxAge(response.extensions),\n toJSON: getRefSerializer(\n queryRef,\n response.data,\n SOURCE_SERVER,\n fetchTime\n )\n };\n const updatedKeys = await this.updateCache(\n queryResult,\n response.extensions?.dataConnect\n );\n this.publishDataToSubscribers(key, queryResult);\n if (this.cache) {\n await this.publishCacheResultsToSubscribers(updatedKeys, fetchTime);\n }\n }\n\n /**\n * Handle a disconnect from the stream. Unsubscribe all callbacks for the given key.\n */\n private handleStreamDisconnect(\n key: string,\n code: string,\n reason: string\n ): void {\n const error = new DataConnectError(code as Code, reason);\n this.publishErrorToSubscribers(key, error);\n\n const callbacks = this.callbacks.get(key);\n if (callbacks) {\n [...callbacks].forEach(cb => cb.unsubscribe());\n }\n return;\n }\n}\n\nexport function getMaxAgeFromExtensions(\n extensions: DataConnectExtensionWithMaxAge[] | undefined\n): number | undefined {\n if (!extensions) {\n return;\n }\n for (const extension of extensions) {\n if (\n 'maxAge' in extension &&\n extension.maxAge !== undefined &&\n extension.maxAge !== null\n ) {\n if (extension.maxAge.endsWith('s')) {\n return Number(\n extension.maxAge.substring(0, extension.maxAge.length - 1)\n );\n }\n }\n }\n}\nfunction getDataConnectExtensionsWithoutMaxAge(\n extensions: ExtensionsWithMaxAge\n): Extensions | undefined {\n return {\n dataConnect: extensions.dataConnect?.filter(\n extension => 'entityId' in extension || 'entityIds' in extension\n )\n };\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectOptions, TransportOptions } from '../api/DataConnect';\nimport { AppCheckTokenProvider } from '../core/AppCheckTokenProvider';\nimport { Code, DataConnectError } from '../core/error';\nimport { AuthTokenProvider } from '../core/FirebaseAuthProvider';\nimport { SDK_VERSION } from '../core/version';\nimport { logDebug } from '../logger';\n\n/**\n * enum representing different flavors of the SDK used by developers\n * use the CallerSdkType for type-checking, and the CallerSdkTypeEnum for value-checking/assigning\n */\nexport type CallerSdkType =\n | 'Base' // Core JS SDK\n | 'Generated' // Generated JS SDK\n | 'TanstackReactCore' // Tanstack non-generated React SDK\n | 'GeneratedReact' // Generated React SDK\n | 'TanstackAngularCore' // Tanstack non-generated Angular SDK\n | 'GeneratedAngular'; // Generated Angular SDK\nexport const CallerSdkTypeEnum = {\n Base: 'Base', // Core JS SDK\n Generated: 'Generated', // Generated JS SDK\n TanstackReactCore: 'TanstackReactCore', // Tanstack non-generated React SDK\n GeneratedReact: 'GeneratedReact', // Tanstack non-generated Angular SDK\n TanstackAngularCore: 'TanstackAngularCore', // Tanstack non-generated Angular SDK\n GeneratedAngular: 'GeneratedAngular' // Generated Angular SDK\n} as const;\n\nexport interface DataConnectEntityArray {\n entityIds: string[];\n}\n\nexport interface DataConnectSingleEntity {\n entityId: string;\n}\n\nexport type DataConnectExtension = {\n path: Array<string | number>;\n} & (DataConnectEntityArray | DataConnectSingleEntity);\n\n/** @internal */\nexport interface DataConnectMaxAge {\n maxAge: string;\n}\n\n/** @internal */\nexport type DataConnectExtensionWithMaxAge = {\n path: Array<string | number>;\n} & (DataConnectEntityArray | DataConnectSingleEntity | DataConnectMaxAge);\n\nexport interface Extensions {\n dataConnect?: DataConnectExtension[];\n}\n\n/** @internal */\nexport interface ExtensionsWithMaxAge {\n dataConnect?: DataConnectExtensionWithMaxAge[];\n}\n\n/** @internal */\nexport interface DataConnectResponse<T> {\n data: T;\n errors: Error[];\n extensions: Extensions;\n}\n\n/** @internal */\nexport interface DataConnectResponseWithMaxAge<T> {\n data: T;\n errors: Error[];\n extensions: ExtensionsWithMaxAge;\n}\n\n/**\n * Observer defined by the Query Layer for receiving notifications from the Transport Layer.\n * @internal\n */\nexport interface SubscribeObserver<Data> {\n onData(response: DataConnectResponse<Data>): Promise<void> | void;\n onDisconnect(code: string, reason: string): void;\n onError(error: Error): void;\n}\n\n/**\n * Interface defining the external API of the transport layer.\n * @internal\n */\nexport interface DataConnectTransportInterface {\n /**\n * Invoke a query execution request.\n * @param queryName The name of the query to execute.\n * @param body The variables associated with the query.\n * @returns A promise resolving to the DataConnectResponse.\n */\n invokeQuery<Data, Variables>(\n queryName: string,\n body?: Variables\n ): Promise<DataConnectResponseWithMaxAge<Data>>;\n\n /**\n * Invoke a mutation execution request.\n * @param queryName The name of the mutation to execute.\n * @param body The variables associated with the mutation.\n * @returns A promise resolving to the DataConnectResponse.\n */\n invokeMutation<Data, Variables>(\n queryName: string,\n body?: Variables\n ): Promise<DataConnectResponse<Data>>;\n\n /**\n * Subscribes to a query to receive push notifications of updates.\n * @param observer the observer passed to the transport layer to notify the query layer of events.\n * @param queryName The name of the query to subscribe to.\n * @param body The variables associated with the subscription.\n */\n invokeSubscribe<Data, Variables>(\n observer: SubscribeObserver<Data>,\n queryName: string,\n body?: Variables\n ): void;\n\n /**\n * Unsubscribes from an active subscription.\n * @param queryName The name of the query to unsubscribe from.\n * @param body The variables associated with the subscription.\n */\n invokeUnsubscribe<Variables>(queryName: string, body?: Variables): void;\n\n /**\n * Configures the transport to use a local Data Connect emulator.\n * @param host The host address of the emulator (e.g., '127.0.0.1').\n * @param port The port number the emulator is listening on.\n * @param sslEnabled Whether to use SSL (HTTPS/WSS) for the emulator connection.\n */\n useEmulator(host: string, port?: number, sslEnabled?: boolean): void;\n\n /**\n * Callback invoked when the Firebase Auth token is refreshed or changed. Note that this callback\n * is called immediately asynchronously when the Auth Provider is initialized to provide\n * the initial auth state.\n * @param token The new access token or null if signed out.\n */\n onAuthTokenChanged: (token: string | null) => void;\n\n /**\n * Internal method to set the SDK type for metrics and logging purposes.\n * @param callerSdkType The type of SDK making the call (e.g., generated vs base).\n */\n _setCallerSdkType(callerSdkType: CallerSdkType): void;\n}\n\n/**\n * Type signature of a transport class constructor.\n * @internal\n */\nexport type TransportClass = new (\n options: DataConnectOptions,\n apiKey?: string,\n appId?: string,\n authProvider?: AuthTokenProvider,\n appCheckProvider?: AppCheckTokenProvider,\n transportOptions?: TransportOptions,\n _isUsingGen?: boolean,\n _callerSdkType?: CallerSdkType\n) => DataConnectTransportInterface;\n\n/**\n * Constructs the value for the X-Goog-Api-Client header\n * @internal\n */\nexport function getGoogApiClientValue(\n isUsingGen: boolean,\n callerSdkType: CallerSdkType\n): string {\n let str = 'gl-js/ fire/' + SDK_VERSION;\n if (\n callerSdkType !== CallerSdkTypeEnum.Base &&\n callerSdkType !== CallerSdkTypeEnum.Generated\n ) {\n str += ' js/' + callerSdkType.toLowerCase();\n } else if (isUsingGen || callerSdkType === CallerSdkTypeEnum.Generated) {\n str += ' js/gen';\n }\n return str;\n}\n\n/**\n * The base class for all DataConnectTransportInterface implementations. Handles common logic such as\n * URL construction, auth token management, and emulator usage. Concrete transport implementations\n * should extend this class and implement the abstract {@link DataConnectTransportInterface} methods.\n * @internal\n */\nexport abstract class AbstractDataConnectTransport\n implements DataConnectTransportInterface\n{\n protected _host = '';\n protected _port: number | undefined;\n protected _location = 'l';\n protected _connectorName = '';\n /** The resource path for requests from this Data Connect instance. */\n protected _connectorResourcePath: string;\n protected _secure = true;\n protected _project = 'p';\n protected _serviceName: string;\n protected _authToken: string | null = null;\n protected _appCheckToken: string | null | undefined = null;\n protected _lastToken: string | null = null;\n protected _isUsingEmulator = false;\n\n constructor(\n options: DataConnectOptions,\n protected apiKey?: string | undefined,\n protected appId?: string | null,\n protected authProvider?: AuthTokenProvider | undefined,\n protected appCheckProvider?: AppCheckTokenProvider | undefined,\n transportOptions?: TransportOptions | undefined,\n protected _isUsingGen = false,\n protected _callerSdkType: CallerSdkType = CallerSdkTypeEnum.Base\n ) {\n if (transportOptions) {\n if (typeof transportOptions.port === 'number') {\n this._port = transportOptions.port;\n }\n if (typeof transportOptions.sslEnabled !== 'undefined') {\n this._secure = transportOptions.sslEnabled;\n }\n this._host = transportOptions.host;\n }\n const { location, projectId: project, connector, service } = options;\n if (location) {\n this._location = location;\n }\n if (project) {\n this._project = project;\n }\n this._serviceName = service;\n if (!connector) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'Connector Name required!'\n );\n }\n this._connectorName = connector;\n this._connectorResourcePath = `projects/${this._project}/locations/${this._location}/services/${this._serviceName}/connectors/${this._connectorName}`;\n this.authProvider?.addTokenChangeListener(token => {\n logDebug(`New Token Available: ${token}`);\n this.onAuthTokenChanged(token);\n });\n this.appCheckProvider?.addTokenChangeListener(result => {\n const { token } = result;\n logDebug(`New App Check Token Available: ${token}`);\n this._appCheckToken = token;\n });\n }\n\n /** Get the endpoint URL this transport should use to communicate with the backend. */\n abstract get endpointUrl(): string;\n\n useEmulator(host: string, port?: number, isSecure?: boolean): void {\n this._host = host;\n this._isUsingEmulator = true;\n if (typeof port === 'number') {\n this._port = port;\n }\n if (typeof isSecure !== 'undefined') {\n this._secure = isSecure;\n }\n }\n\n async getWithAuth(forceToken = false): Promise<string | null> {\n let starterPromise: Promise<string | null> = new Promise(resolve =>\n resolve(this._authToken)\n );\n if (this.appCheckProvider) {\n const appCheckToken = await this.appCheckProvider.getToken();\n if (appCheckToken) {\n this._appCheckToken = appCheckToken.token;\n }\n }\n if (this.authProvider) {\n starterPromise = this.authProvider\n .getToken(/*forceToken=*/ forceToken)\n .then(data => {\n if (!data) {\n return null;\n }\n this._authToken = data.accessToken;\n return this._authToken;\n });\n } else {\n starterPromise = new Promise(resolve => resolve(''));\n }\n return starterPromise;\n }\n\n async withRetry<T>(\n promiseFactory: () => Promise<DataConnectResponse<T>>,\n retry = false\n ): Promise<DataConnectResponse<T>> {\n let isNewToken = false;\n return this.getWithAuth(retry)\n .then(res => {\n isNewToken = this._lastToken !== res;\n this._lastToken = res;\n return res;\n })\n .then(promiseFactory)\n .catch(err => {\n // Only retry if the result is unauthorized and the last token isn't the same as the new one.\n if (\n 'code' in err &&\n err.code === Code.UNAUTHORIZED &&\n !retry &&\n isNewToken\n ) {\n logDebug('Retrying due to unauthorized');\n return this.withRetry(promiseFactory, true);\n }\n throw err;\n });\n }\n\n _setLastToken(lastToken: string | null): void {\n this._lastToken = lastToken;\n }\n\n abstract invokeQuery<Data, Variables>(\n queryName: string,\n body?: Variables\n ): Promise<DataConnectResponseWithMaxAge<Data>>;\n\n abstract invokeMutation<Data, Variables>(\n queryName: string,\n body?: Variables\n ): Promise<DataConnectResponse<Data>>;\n\n abstract invokeSubscribe<Data, Variables>(\n observer: SubscribeObserver<Data>,\n queryName: string,\n body?: Variables\n ): void;\n\n abstract invokeUnsubscribe<Variables>(\n queryName: string,\n variables: Variables\n ): void;\n\n abstract onAuthTokenChanged(newToken: string | null): void;\n\n _setCallerSdkType(callerSdkType: CallerSdkType): void {\n this._callerSdkType = callerSdkType;\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isCloudWorkstation } from '@firebase/util';\n\nimport {\n CallerSdkType,\n CallerSdkTypeEnum,\n DataConnectResponse,\n Extensions\n} from '..';\nimport {\n Code,\n DataConnectError,\n DataConnectOperationError,\n DataConnectOperationFailureResponse\n} from '../../core/error';\nimport { SDK_VERSION } from '../../core/version';\nimport { logError } from '../../logger';\n\n/** The fetch implementation to be used by the {@link RESTTransport}. */\nlet connectFetch: typeof fetch | null = globalThis.fetch;\n\n/**\n * This function is ONLY used for testing and for ensuring compatability in environments which may\n * be using a poyfill and/or bundlers. It should not be called by users of the Firebase JS SDK.\n * @internal\n */\nexport function initializeFetch(fetchImpl: typeof fetch): void {\n connectFetch = fetchImpl;\n}\n\nfunction getGoogApiClientValue(\n _isUsingGen: boolean,\n _callerSdkType: CallerSdkType\n): string {\n let str = 'gl-js/ fire/' + SDK_VERSION;\n if (\n _callerSdkType !== CallerSdkTypeEnum.Base &&\n _callerSdkType !== CallerSdkTypeEnum.Generated\n ) {\n str += ' js/' + _callerSdkType.toLowerCase();\n } else if (_isUsingGen || _callerSdkType === CallerSdkTypeEnum.Generated) {\n str += ' js/gen';\n }\n return str;\n}\nexport interface DataConnectFetchBody<Variables> {\n name: string;\n operationName: string;\n variables: Variables;\n}\nexport async function dcFetch<Data, Variables>(\n url: string,\n body: DataConnectFetchBody<Variables>,\n { signal }: AbortController,\n appId: string | null | undefined,\n accessToken: string | null,\n appCheckToken: string | null | undefined,\n _isUsingGen: boolean,\n _callerSdkType: CallerSdkType,\n _isUsingEmulator: boolean\n): Promise<DataConnectResponse<Data>> {\n if (!connectFetch) {\n throw new DataConnectError(Code.OTHER, 'No Fetch Implementation detected!');\n }\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n 'X-Goog-Api-Client': getGoogApiClientValue(_isUsingGen, _callerSdkType)\n };\n if (accessToken) {\n headers['X-Firebase-Auth-Token'] = accessToken;\n }\n if (appId) {\n headers['x-firebase-gmpid'] = appId;\n }\n if (appCheckToken) {\n headers['X-Firebase-AppCheck'] = appCheckToken;\n }\n const bodyStr = JSON.stringify(body);\n const fetchOptions: RequestInit = {\n body: bodyStr,\n method: 'POST',\n headers,\n signal\n };\n if (isCloudWorkstation(url) && _isUsingEmulator) {\n fetchOptions.credentials = 'include';\n }\n\n let response: Response;\n try {\n response = await connectFetch(url, fetchOptions);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? (err as unknown as Record<string, unknown>)['message']\n : String(err);\n throw new DataConnectError(Code.OTHER, 'Failed to fetch: ' + message);\n }\n let jsonResponse: JsonResponse<Data>;\n try {\n jsonResponse = await response.json();\n } catch (e) {\n const message =\n e && typeof e === 'object' && 'message' in e\n ? (e as unknown as Record<string, unknown>)['message']\n : String(e);\n throw new DataConnectError(\n Code.OTHER,\n 'Failed to parse JSON response: ' + message\n );\n }\n const message = getErrorMessage(jsonResponse);\n if (response.status >= 400) {\n logError('Error while performing request: ' + JSON.stringify(jsonResponse));\n if (response.status === 401) {\n throw new DataConnectError(Code.UNAUTHORIZED, message);\n }\n throw new DataConnectError(Code.OTHER, message);\n }\n if (jsonResponse.errors && jsonResponse.errors.length) {\n const stringified = JSON.stringify(jsonResponse.errors);\n const failureResponse: DataConnectOperationFailureResponse = {\n errors: jsonResponse.errors,\n data: jsonResponse.data as Record<string, unknown>\n };\n throw new DataConnectOperationError(\n 'DataConnect error while performing request: ' + stringified,\n failureResponse\n );\n }\n if (!jsonResponse.extensions) {\n jsonResponse.extensions = {\n dataConnect: []\n };\n }\n return jsonResponse as DataConnectResponse<Data>;\n}\ninterface JsonResponse<Data> {\n message?: string;\n errors: [];\n data: Record<string, unknown> | Data | null;\n extensions?: Extensions;\n}\nfunction getErrorMessage(obj: JsonResponse<unknown>): string {\n if ('message' in obj && obj.message) {\n return obj.message;\n }\n return JSON.stringify(obj);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectOptions, TransportOptions } from '../api/DataConnect';\nimport { Code, DataConnectError } from '../core/error';\nimport { logError } from '../logger';\n\nexport const PROD_HOST = 'firebasedataconnect.googleapis.com';\nexport const WEBSOCKET_PATH =\n 'ws/google.firebase.dataconnect.v1.ConnectorStreamService';\n\nexport function restUrlBuilder(\n projectConfig: DataConnectOptions,\n transportOptions: TransportOptions\n): string {\n const { connector, location, projectId: project, service } = projectConfig;\n const { host, sslEnabled, port } = transportOptions;\n const protocol = sslEnabled ? 'https' : 'http';\n const realHost = host || PROD_HOST;\n let baseUrl = `${protocol}://${realHost}`;\n if (typeof port === 'number') {\n baseUrl += `:${port}`;\n } else if (typeof port !== 'undefined') {\n logError('Port type is of an invalid type');\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'Incorrect type for port passed in!'\n );\n }\n return `${baseUrl}/v1/projects/${project}/locations/${location}/services/${service}/connectors/${connector}`;\n}\n\nexport function websocketUrlBuilder(\n projectConfig: DataConnectOptions,\n transportOptions: TransportOptions\n): string {\n const { location } = projectConfig;\n const { host, sslEnabled, port } = transportOptions;\n const protocol = sslEnabled ? 'wss' : 'ws';\n const realHost = host || PROD_HOST;\n let baseUrl = `${protocol}://${realHost}`;\n if (typeof port === 'number') {\n baseUrl += `:${port}`;\n } else if (typeof port !== 'undefined') {\n logError('Port type is of an invalid type');\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'Incorrect type for port passed in!'\n );\n }\n return `${baseUrl}/${WEBSOCKET_PATH}/Connect/locations/${location}`;\n}\n\nexport function addToken(url: string, apiKey?: string): string {\n if (!apiKey) {\n return url;\n }\n const newUrl = new URL(url);\n newUrl.searchParams.append('key', apiKey);\n return newUrl.toString();\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n CallerSdkType,\n CallerSdkTypeEnum,\n DataConnectResponse,\n DataConnectResponseWithMaxAge,\n AbstractDataConnectTransport,\n SubscribeObserver\n} from '..';\nimport { DataConnectOptions, TransportOptions } from '../../api/DataConnect';\nimport { AppCheckTokenProvider } from '../../core/AppCheckTokenProvider';\nimport { Code, DataConnectError } from '../../core/error';\nimport { AuthTokenProvider } from '../../core/FirebaseAuthProvider';\nimport { addToken, restUrlBuilder } from '../../util/url';\n\nimport { dcFetch } from './fetch';\n\n/**\n * Fetch-based REST implementation of {@link AbstractDataConnectTransport}.\n * @internal\n */\nexport class RESTTransport extends AbstractDataConnectTransport {\n constructor(\n options: DataConnectOptions,\n apiKey?: string | undefined,\n appId?: string | null,\n authProvider?: AuthTokenProvider | undefined,\n appCheckProvider?: AppCheckTokenProvider | undefined,\n transportOptions?: TransportOptions | undefined,\n _isUsingGen = false,\n _callerSdkType: CallerSdkType = CallerSdkTypeEnum.Base\n ) {\n super(\n options,\n apiKey,\n appId,\n authProvider,\n appCheckProvider,\n transportOptions,\n _isUsingGen,\n _callerSdkType\n );\n }\n\n get endpointUrl(): string {\n return restUrlBuilder(\n {\n connector: this._connectorName,\n location: this._location,\n projectId: this._project,\n service: this._serviceName\n },\n {\n host: this._host,\n sslEnabled: this._secure,\n port: this._port\n }\n );\n }\n\n invokeQuery: <Data, Variables>(\n queryName: string,\n body?: Variables\n ) => Promise<DataConnectResponseWithMaxAge<Data>> = <\n Data,\n Variables = unknown\n >(\n queryName: string,\n body: Variables\n ) => {\n const abortController = new AbortController();\n\n // TODO(mtewani): Update to proper value\n const withAuth = this.withRetry(() =>\n dcFetch<Data, Variables>(\n addToken(`${this.endpointUrl}:executeQuery`, this.apiKey),\n {\n name: this._connectorResourcePath,\n operationName: queryName,\n variables: body\n },\n abortController,\n this.appId,\n this._authToken,\n this._appCheckToken,\n this._isUsingGen,\n this._callerSdkType,\n this._isUsingEmulator\n )\n );\n return withAuth;\n };\n\n invokeMutation: <Data, Variables>(\n queryName: string,\n body?: Variables\n ) => Promise<DataConnectResponse<Data>> = <Data, Variables = unknown>(\n mutationName: string,\n body: Variables\n ) => {\n const abortController = new AbortController();\n const taskResult = this.withRetry(() => {\n return dcFetch<Data, Variables>(\n addToken(`${this.endpointUrl}:executeMutation`, this.apiKey),\n {\n name: this._connectorResourcePath,\n operationName: mutationName,\n variables: body\n },\n abortController,\n this.appId,\n this._authToken,\n this._appCheckToken,\n this._isUsingGen,\n this._callerSdkType,\n this._isUsingEmulator\n );\n });\n return taskResult;\n };\n\n invokeSubscribe<Data, Variables>(\n observer: SubscribeObserver<Data>,\n queryName: string,\n body?: Variables\n ): void {\n throw new DataConnectError(\n Code.NOT_SUPPORTED,\n 'Subscriptions are not supported using REST!'\n );\n }\n\n invokeUnsubscribe<Variables>(queryName: string, body?: Variables): void {\n throw new DataConnectError(\n Code.NOT_SUPPORTED,\n 'Unsubscriptions are not supported using REST!'\n );\n }\n\n onAuthTokenChanged(newToken: string | null): void {\n this._authToken = newToken;\n }\n}\n","/**\n * @license\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Code,\n DataConnectError,\n DataConnectOperationError,\n DataConnectOperationFailureResponse\n} from '../../core/error';\nimport { logError } from '../../logger';\nimport {\n AbstractDataConnectTransport,\n DataConnectResponse,\n SubscribeObserver,\n getGoogApiClientValue\n} from '../transport';\n\nimport {\n CancelStreamRequest,\n DataConnectStreamRequest,\n ExecuteStreamRequest,\n ResumeStreamRequest,\n StreamRequestHeaders,\n SubscribeStreamRequest\n} from './wire';\n\n/** The request id of the first request over the stream */\nconst FIRST_REQUEST_ID = 1;\n\n/** Time to wait before closing an idle connection (no active subscriptions) */\nconst IDLE_CONNECTION_TIMEOUT_MS = 60 * 1000; // 1 minute\n\n/**\n * A promise that is settled for a request is received, and the functions that resolve or reject it.\n */\ninterface TrackedExecuteRequestPromise<Data> {\n responsePromise: Promise<DataConnectResponse<Data>>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolveFn: (data: any) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rejectFn: (err: any) => void;\n}\n\n/**\n * The base class for all {@link DataConnectStreamTransport | Stream Transport} implementations.\n * Handles management of logical streams (requests), authentication, data routing to query layer, etc.\n * @internal\n */\nexport abstract class AbstractDataConnectStreamTransport extends AbstractDataConnectTransport {\n /** Optional callback invoked when the stream closes gracefully. */\n onGracefulStreamClose?: () => void;\n\n /** True if the physical stream connection is fully open and ready to transmit data. */\n abstract get streamIsReady(): boolean;\n\n /** Is the stream currently waiting to close connection? */\n get isPendingClose(): boolean {\n return this.pendingClose;\n }\n private pendingClose = false;\n\n /** True if the transport is unable to connect to the server */\n isUnableToConnect = false;\n\n /** True if there are active subscriptions on the stream */\n get hasActiveSubscriptions(): boolean {\n return this.activeSubscribeRequests.size > 0;\n }\n\n /** True if there are active execute or mutation requests on the stream */\n get hasActiveExecuteRequests(): boolean {\n return (\n this.activeQueryExecuteRequests.size > 0 ||\n this.activeMutationExecuteRequests.size > 0\n );\n }\n\n /**\n * Open a physical connection to the server.\n * @returns a promise which resolves when the connection is ready, or rejects if it fails to open.\n */\n protected abstract openConnection(): Promise<void>;\n\n /**\n * Close the physical connection with the server. Handles no cleanup - simply closes the\n * implementation-specific connection.\n * @returns a promise which resolves when the connection is closed, or rejects if it fails to close.\n * On failure to close, the connection is still considered closed.\n */\n protected abstract closeConnection(): Promise<void>;\n\n /**\n * Queue a message to be sent over the stream.\n * @param requestBody The body of the message to be sent.\n * @throws DataConnectError if sending fails.\n */\n protected abstract sendMessage<Variables>(\n requestBody: DataConnectStreamRequest<Variables>\n ): Promise<void>;\n\n /**\n * Ensures that that there is an open connection. If there is none, it initiates a new one.\n * If a connection attempt is already in progress, it returns the existing connection promise.\n * @returns A promise that resolves when the stream is open and ready.\n */\n protected abstract ensureConnection(): Promise<void>;\n\n /** The request ID of the next message to be sent. Monotonically increasing sequence number. */\n private requestNumber = FIRST_REQUEST_ID;\n /**\n * Generates and returns the next request ID.\n */\n private nextRequestId(): string {\n return (this.requestNumber++).toString();\n }\n\n /**\n * Map of query/variables to their active execute/resume request bodies.\n */\n private activeQueryExecuteRequests = new Map<\n string,\n ExecuteStreamRequest<unknown> | ResumeStreamRequest\n >();\n\n /**\n * Map of mutation/variables to their active execute request bodies.\n */\n private activeMutationExecuteRequests = new Map<\n string,\n Array<ExecuteStreamRequest<unknown>>\n >();\n\n /**\n * Map of query/variables to their active subscribe request bodies.\n */\n private activeSubscribeRequests = new Map<\n string,\n SubscribeStreamRequest<unknown>\n >();\n\n /**\n * Map of active execution RequestIds and their corresponding Promises and resolvers.\n */\n private executeRequestPromises = new Map<\n string,\n TrackedExecuteRequestPromise<unknown>\n >();\n\n /**\n * Map of active subscription RequestIds and their corresponding observers.\n */\n private subscribeObservers = new Map<string, SubscribeObserver<unknown>>();\n\n /** current close timeout from setTimeout(), if any */\n private closeTimeout: NodeJS.Timeout | null = null;\n /** has the close timeout finished? */\n private closeTimeoutFinished = false;\n /** current auth uid. used to detect if a different user logs in */\n private authUid: string | null | undefined;\n /** Flag to ensure we wait for the initial auth state once per connection attempt. */\n private hasWaitedForInitialAuth = false;\n\n /**\n * Tracks a query execution request, storing the request body and creating and storing a promise that\n * will be resolved when the response is received.\n * @returns The reject function and the response promise.\n *\n * @remarks\n * This method returns a promise, but is synchronous.\n */\n private trackQueryExecuteRequest<Data>(\n requestId: string,\n mapKey: string,\n executeBody: ExecuteStreamRequest<unknown>\n ): TrackedExecuteRequestPromise<Data> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let resolveFn: (data: any) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rejectFn: (err: any) => void;\n const responsePromise = new Promise<DataConnectResponse<Data>>(\n (resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n }\n );\n const executeRequestPromise: TrackedExecuteRequestPromise<Data> = {\n responsePromise,\n resolveFn: resolveFn!,\n rejectFn: rejectFn!\n };\n\n this.activeQueryExecuteRequests.set(mapKey, executeBody);\n this.executeRequestPromises.set(requestId, executeRequestPromise);\n\n return executeRequestPromise;\n }\n\n /**\n * Tracks a mutation execution request, storing the request body and creating and storing a promise\n * that will be resolved when the response is received.\n * @returns The reject function and the response promise.\n *\n * @remarks\n * This method returns a promise, but is synchronous.\n */\n private trackMutationExecuteRequest<Data>(\n requestId: string,\n mapKey: string,\n executeBody: ExecuteStreamRequest<unknown>\n ): TrackedExecuteRequestPromise<Data> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let resolveFn: (data: any) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rejectFn: (err: any) => void;\n const responsePromise = new Promise<DataConnectResponse<Data>>(\n (resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n }\n );\n const executeRequestPromise: TrackedExecuteRequestPromise<Data> = {\n responsePromise,\n resolveFn: resolveFn!,\n rejectFn: rejectFn!\n };\n\n const activeRequests = this.activeMutationExecuteRequests.get(mapKey) || [];\n activeRequests.push(executeBody);\n this.activeMutationExecuteRequests.set(mapKey, activeRequests);\n this.executeRequestPromises.set(requestId, executeRequestPromise);\n\n return executeRequestPromise;\n }\n\n /**\n * Tracks a subscribe request, storing the request body and the notification observer.\n * @remarks\n * This method is synchronous.\n */\n private trackSubscribeRequest<Data>(\n requestId: string,\n mapKey: string,\n subscribeBody: SubscribeStreamRequest<unknown>,\n observer: SubscribeObserver<Data>\n ): void {\n this.activeSubscribeRequests.set(mapKey, subscribeBody);\n this.subscribeObservers.set(\n requestId,\n observer as SubscribeObserver<unknown>\n );\n }\n\n /**\n * Cleans up the query execute request tracking data structures, deleting the tracked request and\n * it's associated promise.\n */\n private cleanupQueryExecuteRequest(requestId: string, mapKey: string): void {\n this.activeQueryExecuteRequests.delete(mapKey);\n this.executeRequestPromises.delete(requestId);\n }\n\n /**\n * Cleans up the mutation execute request tracking data structures, deleting the tracked request and\n * it's associated promise.\n */\n private cleanupMutationExecuteRequest(\n requestId: string,\n mapKey: string\n ): void {\n const executeRequests = this.activeMutationExecuteRequests.get(mapKey);\n if (executeRequests) {\n const updatedRequests = executeRequests.filter(\n req => req.requestId !== requestId\n );\n if (updatedRequests.length > 0) {\n this.activeMutationExecuteRequests.set(mapKey, updatedRequests);\n } else {\n this.activeMutationExecuteRequests.delete(mapKey);\n }\n }\n this.executeRequestPromises.delete(requestId);\n }\n\n /**\n * Cleans up the subscribe request tracking data structures, deleting the tracked request and\n * it's associated promise.\n */\n private cleanupSubscribeRequest(requestId: string, mapKey: string): void {\n this.activeSubscribeRequests.delete(mapKey);\n this.subscribeObservers.delete(requestId);\n }\n\n /**\n * Tracks if the next message to be sent is the first message of the stream.\n */\n private isFirstStreamMessage = true;\n /**\n * Tracks the last auth token sent to the server.\n * Used to detect if the token has changed and needs to be resent.\n */\n private lastSentAuthToken: string | null = null;\n /**\n * Indicates whether we should include the auth token in the next message.\n * Only true if there is an auth token and it is different from the last sent auth token, or this\n * is the first message.\n */\n private get shouldIncludeAuth(): boolean {\n return (\n this.isFirstStreamMessage ||\n (!!this._authToken && this._authToken !== this.lastSentAuthToken)\n );\n }\n\n /**\n * Called by the concrete transport implementation when the physical connection is ready.\n */\n protected onConnectionReady(): void {\n this.isFirstStreamMessage = true;\n this.lastSentAuthToken = null;\n this.hasWaitedForInitialAuth = false;\n }\n\n /**\n * Attempt to close the connection. Will only close if there are no active requests preventing it\n * from doing so.\n */\n private async attemptClose(): Promise<void> {\n if (this.hasActiveSubscriptions || this.hasActiveExecuteRequests) {\n return;\n }\n this.cancelClose();\n await this.closeConnection();\n this.onGracefulStreamClose?.();\n }\n\n /**\n * Begin closing the connection. Waits for and cleans up all active requests, and waits for\n * {@link IDLE_CONNECTION_TIMEOUT_MS}. This is a graceful close - it will be called when there are\n * no more active subscriptions, so there's no need to cleanup.\n */\n private prepareToCloseGracefully(): void {\n if (this.pendingClose) {\n return;\n }\n this.pendingClose = true;\n this.closeTimeoutFinished = false;\n this.closeTimeout = setTimeout(() => {\n this.closeTimeoutFinished = true;\n void this.attemptClose();\n }, IDLE_CONNECTION_TIMEOUT_MS);\n }\n\n /**\n * Cancel closing the connection.\n */\n private cancelClose(): void {\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n }\n this.pendingClose = false;\n this.closeTimeoutFinished = false;\n }\n\n /**\n * Reject all active execute promises and notify all subscribe observers with the given error.\n * Clear active request tracking maps without cancelling or re-invoking any requests.\n */\n private rejectAllActiveRequests(code: Code, reason: string): void {\n this.activeQueryExecuteRequests.clear();\n this.activeMutationExecuteRequests.clear();\n this.activeSubscribeRequests.clear();\n\n const error = new DataConnectError(code, reason);\n for (const [requestId, { rejectFn }] of this.executeRequestPromises) {\n this.executeRequestPromises.delete(requestId);\n rejectFn(error);\n }\n\n for (const [requestId, observer] of this.subscribeObservers) {\n this.subscribeObservers.delete(requestId);\n observer.onDisconnect(code, reason);\n }\n }\n\n /**\n * Called by concrete implementations when the stream is successfully closed, gracefully or otherwise.\n */\n protected onStreamClose(code: number, reason: string): void {\n this.rejectAllActiveRequests(\n Code.OTHER,\n `Stream disconnected with code ${code}: ${reason}`\n );\n }\n\n /**\n * Prepares a stream request message by adding necessary headers and metadata.\n * If this is the first message on the stream, it includes the resource name, auth token, and App Check token.\n * If the auth token has refreshed since the last message, it includes the new auth token.\n *\n * This method is called by the concrete transport implementation before sending a message.\n *\n * @returns the requestBody, with attached headers and initial request fields\n */\n protected prepareMessage<\n Variables,\n StreamBody extends DataConnectStreamRequest<Variables>\n >(requestBody: StreamBody): StreamBody {\n const preparedRequestBody: StreamBody = { ...requestBody };\n const headers: StreamRequestHeaders = {};\n if (this.appId) {\n headers['x-firebase-gmpid'] = this.appId;\n }\n headers['X-Goog-Api-Client'] = getGoogApiClientValue(\n this._isUsingGen,\n this._callerSdkType\n );\n if (this.shouldIncludeAuth && this._authToken) {\n headers['X-Firebase-Auth-Token'] = this._authToken;\n this.lastSentAuthToken = this._authToken;\n }\n if (this.isFirstStreamMessage) {\n if (this._appCheckToken) {\n headers['X-Firebase-App-Check'] = this._appCheckToken;\n }\n preparedRequestBody.name = this._connectorResourcePath;\n }\n preparedRequestBody.headers = headers;\n this.isFirstStreamMessage = false;\n return preparedRequestBody;\n }\n\n // TODO(stephenarosaj): just make this async\n /**\n * Sends a request message to the server via the concrete implementation.\n * Ensures the connection is ready and prepares the message before sending.\n * @returns A promise that resolves when the request message has been sent.\n */\n private async sendRequestMessage<Variables>(\n requestBody: DataConnectStreamRequest<Variables>\n ): Promise<void> {\n if (!this.hasWaitedForInitialAuth && this.authProvider) {\n await this.getWithAuth();\n this.hasWaitedForInitialAuth = true;\n }\n if (this.streamIsReady) {\n const prepared = this.prepareMessage(requestBody);\n return this.sendMessage(prepared);\n }\n return this.ensureConnection().then(() => {\n const prepared = this.prepareMessage(requestBody);\n return this.sendMessage(prepared);\n });\n }\n\n /**\n * Helper to generate a consistent string key for the tracking maps.\n */\n private getMapKey(operationName: string, variables?: unknown): string {\n const sortedVariables = this.sortObjectKeys(variables);\n return JSON.stringify({ operationName, variables: sortedVariables });\n }\n\n /**\n * Recursively sorts the keys of an object.\n */\n private sortObjectKeys(obj: unknown): unknown {\n if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {\n return obj;\n }\n const sortedObj: Record<string, unknown> = {};\n Object.keys(obj as Record<string, unknown>)\n .sort()\n .forEach(key => {\n sortedObj[key] = this.sortObjectKeys(\n (obj as Record<string, unknown>)[key]\n );\n });\n return sortedObj;\n }\n\n /**\n * @inheritdoc\n * @remarks\n * This method synchronously updates the request tracking data structures before sending any message.\n * If any asynchronous functionality is added to this function, it MUST be done in a way that\n * preserves the synchronous update of the tracking data structures before the method returns.\n */\n invokeQuery<Data, Variables>(\n queryName: string,\n variables?: Variables\n ): Promise<DataConnectResponse<Data>> {\n const requestId = this.nextRequestId();\n const activeRequestKey = { operationName: queryName, variables };\n const mapKey = this.getMapKey(queryName, variables);\n const executeBody: ExecuteStreamRequest<Variables> = {\n requestId,\n execute: activeRequestKey\n };\n\n let { responsePromise, rejectFn } = this.trackQueryExecuteRequest<Data>(\n requestId,\n mapKey,\n executeBody\n );\n responsePromise = responsePromise.finally(() => {\n this.cleanupQueryExecuteRequest(requestId, mapKey);\n if (\n !this.hasActiveSubscriptions &&\n !this.hasActiveExecuteRequests &&\n this.closeTimeoutFinished\n ) {\n void this.attemptClose();\n }\n });\n\n // asynchronous, fire and forget\n this.sendRequestMessage<Variables>(executeBody).catch(err => {\n rejectFn(err);\n });\n return responsePromise;\n }\n\n /**\n * @inheritdoc\n * @remarks\n * This method synchronously updates the request tracking data structures before sending any message.\n * If any asynchronous functionality is added to this function, it MUST be done in a way that\n * preserves the synchronous update of the tracking data structures before the method returns.\n */\n invokeMutation<Data, Variables>(\n mutationName: string,\n variables?: Variables\n ): Promise<DataConnectResponse<Data>> {\n const requestId = this.nextRequestId();\n const activeRequestKey = { operationName: mutationName, variables };\n const mapKey = this.getMapKey(mutationName, variables);\n const executeBody: ExecuteStreamRequest<Variables> = {\n requestId,\n execute: activeRequestKey\n };\n\n let { responsePromise, rejectFn } = this.trackMutationExecuteRequest<Data>(\n requestId,\n mapKey,\n executeBody\n );\n responsePromise = responsePromise.finally(() => {\n this.cleanupMutationExecuteRequest(requestId, mapKey);\n if (\n !this.hasActiveSubscriptions &&\n !this.hasActiveExecuteRequests &&\n this.closeTimeoutFinished\n ) {\n void this.attemptClose();\n }\n });\n\n // asynchronous, fire and forget\n this.sendRequestMessage<Variables>(executeBody).catch(err => {\n rejectFn(err);\n });\n return responsePromise;\n }\n\n /**\n * @inheritdoc\n * @remarks\n * This method synchronously updates the request tracking data structures before sending any message\n * or cancelling the closing of the stream. If any asynchronous functionality is added to this function,\n * it MUST be done in a way that preserves the synchronous update of the tracking data structures\n * before the method returns.\n */\n invokeSubscribe<Data, Variables>(\n observer: SubscribeObserver<Data>,\n queryName: string,\n variables: Variables\n ): void {\n // if we are waiting to close the stream, cancel closing!\n this.cancelClose();\n\n const requestId = this.nextRequestId();\n const activeRequestKey = { operationName: queryName, variables };\n const mapKey = this.getMapKey(queryName, variables);\n const subscribeBody: SubscribeStreamRequest<Variables> = {\n requestId,\n subscribe: activeRequestKey\n };\n\n this.trackSubscribeRequest<Data>(\n requestId,\n mapKey,\n subscribeBody,\n observer\n );\n\n // asynchronous, fire and forget\n this.sendRequestMessage<Variables>(subscribeBody).catch(err => {\n observer.onError(err instanceof Error ? err : new Error(String(err)));\n this.cleanupSubscribeRequest(requestId, mapKey);\n if (!this.hasActiveSubscriptions) {\n this.prepareToCloseGracefully();\n }\n });\n }\n\n /**\n * @inheritdoc\n * @remarks\n * This method synchronously updates the request tracking data structures before sending any message.\n * If any asynchronous functionality is added to this function, it MUST be done in a way that\n * preserves the synchronous update of the tracking data structures before the method returns.\n */\n invokeUnsubscribe<Variables>(queryName: string, variables: Variables): void {\n const mapKey = this.getMapKey(queryName, variables);\n const subscribeRequest = this.activeSubscribeRequests.get(mapKey);\n if (!subscribeRequest) {\n return;\n }\n const requestId = subscribeRequest.requestId;\n const cancelBody: CancelStreamRequest = {\n requestId,\n cancel: {}\n };\n\n this.cleanupSubscribeRequest(requestId, mapKey);\n\n // asynchronous, fire and forget\n this.sendRequestMessage(cancelBody).catch(err => {\n logError(`Stream Transport failed to send unsubscribe message: ${err}`);\n });\n\n if (!this.hasActiveSubscriptions) {\n this.prepareToCloseGracefully();\n }\n }\n\n onAuthTokenChanged(newToken: string | null): void {\n const oldAuthToken = this._authToken;\n this._authToken = newToken;\n\n const oldAuthUid = this.authUid;\n const newAuthUid = this.authProvider?.getAuth()?.getUid();\n this.authUid = newAuthUid;\n\n // onAuthTokenChanged gets called by the auth provider once it initializes, so we must make sure\n // we don't prematurely disconnect the stream if this is the initial call.\n const isInitialAuth = oldAuthUid === undefined;\n if (isInitialAuth) {\n return;\n }\n\n if (\n (oldAuthToken && newToken === null) || // user logged out\n (!oldAuthUid && newAuthUid) || // user logged in\n (oldAuthUid && newAuthUid !== oldAuthUid) // logged in user changed\n ) {\n this.rejectAllActiveRequests(\n Code.UNAUTHORIZED,\n 'Stream disconnected due to auth change.'\n );\n void this.attemptClose();\n }\n }\n\n /**\n * Handle a response message from the server. Called by the connection-specific implementation after\n * it's transformed a message from the server into a {@link DataConnectResponse}.\n * @param requestId the requestId associated with this response.\n * @param response the response from the server.\n */\n protected async handleResponse<Data>(\n requestId: string,\n response: DataConnectResponse<Data>\n ): Promise<void> {\n if (this.executeRequestPromises.has(requestId)) {\n // don't clean up the tracking maps here, they're handled automatically when the execute promise settles\n const { resolveFn, rejectFn } =\n this.executeRequestPromises.get(requestId)!;\n if (response.errors && response.errors.length) {\n const failureResponse: DataConnectOperationFailureResponse = {\n errors: response.errors as [],\n data: response.data as Record<string, unknown>\n };\n const stringified = JSON.stringify(response.errors);\n rejectFn(\n new DataConnectOperationError(\n 'DataConnect error while performing request: ' + stringified,\n failureResponse\n )\n );\n } else {\n resolveFn(response);\n }\n } else if (this.subscribeObservers.has(requestId)) {\n const observer = this.subscribeObservers.get(requestId)!;\n await observer.onData(response);\n } else {\n throw new DataConnectError(\n Code.OTHER,\n `Stream response contained unrecognized requestId '${requestId}'`\n );\n }\n }\n}\n","/**\n * @license\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectOptions, TransportOptions } from '../../api/DataConnect';\nimport { AppCheckTokenProvider } from '../../core/AppCheckTokenProvider';\nimport { Code, DataConnectError } from '../../core/error';\nimport { AuthTokenProvider } from '../../core/FirebaseAuthProvider';\nimport { logError } from '../../logger';\nimport { websocketUrlBuilder } from '../../util/url';\nimport {\n CallerSdkType,\n CallerSdkTypeEnum,\n DataConnectResponse\n} from '../transport';\n\nimport { AbstractDataConnectStreamTransport } from './streamTransport';\nimport { DataConnectStreamRequest, DataConnectStreamResponse } from './wire';\n\n/** The WebSocket implementation to be used by the {@link WebSocketTransport}. */\nlet connectWebSocket: typeof WebSocket | null = globalThis.WebSocket;\n\n/**\n * This function is ONLY used for testing and for ensuring compatability in environments which may\n * be using a poyfill and/or bundlers. It should not be called by users of the Firebase JS SDK.\n * @internal\n */\nexport function initializeWebSocket(webSocketImpl: typeof WebSocket): void {\n connectWebSocket = webSocketImpl;\n}\n\n/**\n * The code used to close the WebSocket connection.\n * This is a protocol-level code, and is not the same as the {@link Code | DataConnect error code}.\n * @internal\n */\nexport const WEBSOCKET_CLOSE_CODE = 1000;\n\n/**\n * An {@link AbstractDataConnectStreamTransport | Stream Transport} implementation that uses {@link WebSocket | WebSockets} to stream requests and responses.\n * This class handles the lifecycle of the WebSocket connection, including automatic\n * reconnection and request correlation.\n * @internal\n */\nexport class WebSocketTransport extends AbstractDataConnectStreamTransport {\n get endpointUrl(): string {\n return websocketUrlBuilder(\n {\n connector: this._connectorName,\n location: this._location,\n projectId: this._project,\n service: this._serviceName\n },\n {\n host: this._host,\n sslEnabled: this._secure,\n port: this._port\n }\n );\n }\n\n /** Decodes binary WebSocket responses to strings */\n private decoder: TextDecoder | undefined = undefined;\n\n /**\n * Decodes a WebSocket response from a Uint8Array to a JSON object.\n * Emulator does not send messages as Uint8Arrays, but prod does.\n */\n private decodeBinaryResponse(data: ArrayBuffer): string {\n if (!this.decoder) {\n this.decoder = new TextDecoder('utf-8');\n }\n return this.decoder.decode(data);\n }\n\n /** The current connection to the server. Undefined if disconnected. */\n private connection: WebSocket | undefined = undefined;\n\n get streamIsReady(): boolean {\n return this.connection?.readyState === WebSocket.OPEN;\n }\n\n /**\n * Current connection attempt. If null, we are not currently attemping to connect (not connected,\n * or already connected). Will be resolved or rejected when the connection is opened or fails to open.\n */\n private connectionAttempt: Promise<void> | null = null;\n\n constructor(\n options: DataConnectOptions,\n protected apiKey?: string | undefined,\n protected appId?: string | null,\n protected authProvider?: AuthTokenProvider | undefined,\n protected appCheckProvider?: AppCheckTokenProvider | undefined,\n transportOptions?: TransportOptions | undefined,\n protected _isUsingGen = false,\n protected _callerSdkType: CallerSdkType = CallerSdkTypeEnum.Base\n ) {\n super(\n options,\n apiKey,\n appId,\n authProvider,\n appCheckProvider,\n transportOptions,\n _isUsingGen,\n _callerSdkType\n );\n }\n\n protected ensureConnection(): Promise<void> {\n try {\n if (this.streamIsReady) {\n return Promise.resolve();\n }\n if (this.connectionAttempt) {\n return this.connectionAttempt;\n }\n this.connectionAttempt = new Promise<void>((resolve, reject) => {\n if (!connectWebSocket) {\n throw new DataConnectError(\n Code.OTHER,\n 'No WebSocket Implementation detected!'\n );\n }\n const ws = new connectWebSocket(this.endpointUrl);\n this.connection = ws;\n this.connection!.binaryType = 'arraybuffer';\n\n ws.onopen = () => {\n this.isUnableToConnect = false;\n this.onConnectionReady();\n resolve();\n };\n\n ws.onerror = event => {\n this.connectionAttempt = null;\n this.isUnableToConnect = true;\n const error = new DataConnectError(\n Code.OTHER,\n `Error using WebSocket connection, closing WebSocket`\n );\n this.handleError(error);\n reject(error);\n };\n\n ws.onmessage = ev =>\n this.handleWebSocketMessage(ev).catch(async reason => {\n this.handleError(reason);\n });\n\n ws.onclose = ev => this.handleWebsocketDisconnect(ev);\n });\n\n return this.connectionAttempt;\n } catch (error) {\n this.handleError(error);\n throw error;\n }\n }\n\n protected openConnection(): Promise<void> {\n return this.ensureConnection().catch(err => {\n throw new DataConnectError(\n Code.OTHER,\n `Failed to open connection: ${err}`\n );\n });\n }\n\n protected closeConnection(code?: number, reason?: string): Promise<void> {\n if (!this.connection) {\n this.connectionAttempt = null;\n return Promise.resolve();\n }\n let error;\n try {\n if (reason) {\n // reason string can be max 123 bytes (not characters, bytes)\n // https://developer.mozilla.org/en-US/docs/Web/API/WebSocketStream/close#parameters\n const MAX_BYTES = 123;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(reason);\n if (bytes.length <= MAX_BYTES) {\n this.connection.close(code, reason);\n } else {\n const buf = new Uint8Array(MAX_BYTES);\n const { read } = encoder.encodeInto(reason, buf);\n const truncatedReason = reason.substring(0, read);\n this.connection.close(code, truncatedReason);\n }\n } else {\n this.connection.close(code);\n }\n } catch (e) {\n error = e;\n } finally {\n this.connection = undefined;\n this.connectionAttempt = null;\n }\n if (error) {\n return Promise.reject(error);\n }\n return Promise.resolve();\n }\n\n /**\n * Handle a disconnection from the server. Initiates graceful clean up and reconnection attempts.\n * @param ev the {@link CloseEvent} that closed the WebSocket.\n */\n private handleWebsocketDisconnect(ev: CloseEvent): void {\n this.connection = undefined;\n this.connectionAttempt = null;\n this.onStreamClose(ev.code, ev.reason);\n }\n\n /**\n * Handle an error that occurred on the WebSocket. Close the connection and reject all active requests.\n */\n private handleError(error?: unknown): void {\n logError(`DataConnect WebSocket error, closing stream: ${error}`);\n let reason = error ? String(error) : 'Unknown Error';\n if (error instanceof DataConnectError) {\n reason = error.message;\n }\n void this.closeConnection(WEBSOCKET_CLOSE_CODE, reason);\n }\n\n protected sendMessage<Variables>(\n requestBody: DataConnectStreamRequest<Variables>\n ): Promise<void> {\n return this.ensureConnection().then(() => {\n try {\n this.connection!.send(JSON.stringify(requestBody));\n return Promise.resolve();\n } catch (err) {\n this.handleError(err);\n throw new DataConnectError(\n Code.OTHER,\n `Failed to send message: ${String(err)}`\n );\n }\n });\n }\n\n /**\n * Handles incoming WebSocket messages.\n * @param ev The {@link MessageEvent} from the WebSocket.\n */\n private async handleWebSocketMessage(ev: MessageEvent): Promise<void> {\n const result: DataConnectStreamResponse<unknown> = this.parseWebSocketData(\n ev.data\n );\n const requestId = result.requestId;\n\n const response: DataConnectResponse<unknown> = {\n data: result.data,\n errors: result.errors,\n extensions: result.extensions || { dataConnect: [] }\n };\n\n await this.handleResponse(requestId, response);\n }\n\n /**\n * Parse a response from the server. Assert that it has a {@link DataConnectStreamResponse.requestId | requestId}.\n * @param data the message from the server to be parsed\n * @returns the parsed message as a {@link DataConnectStreamResponse}\n * @throws {DataConnectError} if parsing fails or message is malformed.\n */\n private parseWebSocketData<Data>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any\n ): DataConnectStreamResponse<Data> {\n const dataIsString = typeof data === 'string';\n /** raw websocket message */\n let webSocketMessage;\n /** object containing data, errors, and extensions */\n let result;\n try {\n if (dataIsString) {\n webSocketMessage = JSON.parse(data);\n } else {\n webSocketMessage = JSON.parse(this.decodeBinaryResponse(data));\n }\n } catch (err) {\n throw new DataConnectError(\n Code.OTHER,\n `Could not parse WebSocket message: ${\n err instanceof Error ? err.message : String(err)\n }`\n );\n }\n if (typeof webSocketMessage !== 'object' || webSocketMessage === null) {\n throw new DataConnectError(\n Code.OTHER,\n 'WebSocket message is not an object'\n );\n }\n if (dataIsString) {\n if (!('result' in webSocketMessage)) {\n throw new DataConnectError(\n Code.OTHER,\n 'WebSocket message from emulator did not include result'\n );\n }\n if (\n typeof webSocketMessage.result !== 'object' ||\n webSocketMessage.result === null\n ) {\n throw new DataConnectError(\n Code.OTHER,\n 'WebSocket message result is not an object'\n );\n }\n result = webSocketMessage.result;\n } else {\n result = webSocketMessage;\n }\n if (!('requestId' in result)) {\n throw new DataConnectError(\n Code.OTHER,\n 'WebSocket message did not include requestId'\n );\n }\n return result as DataConnectStreamResponse<Data>;\n }\n}\n","/**\n * @license\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectOptions, TransportOptions } from '../api/DataConnect';\nimport { AppCheckTokenProvider } from '../core/AppCheckTokenProvider';\nimport { Code, DataConnectError } from '../core/error';\nimport { AuthTokenProvider } from '../core/FirebaseAuthProvider';\n\nimport { RESTTransport } from './rest';\nimport { AbstractDataConnectStreamTransport } from './stream/streamTransport';\nimport { WebSocketTransport } from './stream/websocket';\nimport {\n CallerSdkType,\n DataConnectResponse,\n DataConnectResponseWithMaxAge,\n DataConnectTransportInterface,\n SubscribeObserver\n} from './transport';\n\n/**\n * Entry point for the transport layer. Manages routing between transport implementations.\n * @internal\n */\nexport class DataConnectTransportManager\n implements DataConnectTransportInterface\n{\n private restTransport: RESTTransport;\n private streamTransport?: AbstractDataConnectStreamTransport;\n private isUsingEmulator = false;\n\n constructor(\n private options: DataConnectOptions,\n private apiKey?: string,\n private appId?: string | null,\n private authProvider?: AuthTokenProvider,\n private appCheckProvider?: AppCheckTokenProvider,\n private transportOptions?: TransportOptions,\n private _isUsingGen = false,\n private _callerSdkType?: CallerSdkType\n ) {\n this.restTransport = new RESTTransport(\n options,\n apiKey,\n appId,\n authProvider,\n appCheckProvider,\n transportOptions,\n _isUsingGen,\n _callerSdkType\n );\n }\n\n /**\n * Initializes the stream transport if it hasn't been already.\n */\n private initStreamTransport(): AbstractDataConnectStreamTransport {\n if (!this.streamTransport) {\n this.streamTransport = new WebSocketTransport(\n this.options,\n this.apiKey,\n this.appId,\n this.authProvider,\n this.appCheckProvider,\n this.transportOptions,\n this._isUsingGen,\n this._callerSdkType\n );\n if (this.isUsingEmulator && this.transportOptions) {\n this.streamTransport.useEmulator(\n this.transportOptions.host!,\n this.transportOptions.port,\n this.transportOptions.sslEnabled\n );\n }\n this.streamTransport.onGracefulStreamClose = () => {\n this.streamTransport = undefined;\n };\n }\n return this.streamTransport;\n }\n\n /**\n * Returns true if the stream is in a healthy, ready connection state and has active subscriptions.\n */\n private executeShouldUseStream(): boolean {\n return (\n !!this.streamTransport &&\n !this.streamTransport.isPendingClose &&\n this.streamTransport.streamIsReady &&\n this.streamTransport.hasActiveSubscriptions &&\n !this.streamTransport.isUnableToConnect\n );\n }\n\n /**\n * Prefer to use Streaming Transport connection when one is available.\n * @inheritdoc\n */\n invokeQuery<Data, Variables>(\n queryName: string,\n body?: Variables\n ): Promise<DataConnectResponseWithMaxAge<Data>> {\n if (this.executeShouldUseStream()) {\n return this.streamTransport!.invokeQuery<Data, Variables>(\n queryName,\n body\n ).catch(err => {\n if (this.executeShouldUseStream()) {\n throw err;\n }\n return this.restTransport.invokeQuery<Data, Variables>(queryName, body);\n });\n }\n return this.restTransport.invokeQuery(queryName, body);\n }\n\n /**\n * Prefer to use Streaming Transport connection when one is available.\n * @inheritdoc\n */\n invokeMutation<Data, Variables>(\n queryName: string,\n body?: Variables\n ): Promise<DataConnectResponse<Data>> {\n if (this.executeShouldUseStream()) {\n return this.streamTransport!.invokeMutation<Data, Variables>(\n queryName,\n body\n ).catch(err => {\n if (this.executeShouldUseStream()) {\n throw err;\n }\n return this.restTransport.invokeMutation<Data, Variables>(\n queryName,\n body\n );\n });\n }\n return this.restTransport.invokeMutation(queryName, body);\n }\n\n invokeSubscribe<Data, Variables>(\n observer: SubscribeObserver<Data>,\n queryName: string,\n body?: Variables\n ): void {\n const streamTransport = this.initStreamTransport();\n if (streamTransport.isUnableToConnect) {\n throw new DataConnectError(\n Code.OTHER,\n 'Unable to connect streaming connection to server. Subscriptions are unavailable.'\n );\n }\n streamTransport.invokeSubscribe(observer, queryName, body);\n }\n\n invokeUnsubscribe<Variables>(queryName: string, body?: Variables): void {\n if (this.streamTransport) {\n this.streamTransport.invokeUnsubscribe(queryName, body);\n }\n }\n\n useEmulator(host: string, port?: number, sslEnabled?: boolean): void {\n this.isUsingEmulator = true;\n this.transportOptions = { host, port, sslEnabled };\n this.restTransport.useEmulator(host, port, sslEnabled);\n if (this.streamTransport) {\n this.streamTransport.useEmulator(host, port, sslEnabled);\n }\n }\n\n onAuthTokenChanged(token: string | null): void {\n this.restTransport.onAuthTokenChanged(token);\n if (this.streamTransport) {\n this.streamTransport.onAuthTokenChanged(token);\n }\n }\n\n _setCallerSdkType(callerSdkType: CallerSdkType): void {\n this._callerSdkType = callerSdkType;\n this.restTransport._setCallerSdkType(callerSdkType);\n if (this.streamTransport) {\n this.streamTransport._setCallerSdkType(callerSdkType);\n }\n }\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataConnectTransportInterface } from '../network';\n\nimport { DataConnect } from './DataConnect';\nimport {\n DataConnectResult,\n MUTATION_STR,\n OperationRef,\n SOURCE_SERVER\n} from './Reference';\n\nexport interface MutationRef<Data, Variables>\n extends OperationRef<Data, Variables> {\n refType: typeof MUTATION_STR;\n}\n\n/**\n * Creates a `MutationRef`\n * @param dcInstance Data Connect instance\n * @param mutationName name of mutation\n */\nexport function mutationRef<Data>(\n dcInstance: DataConnect,\n mutationName: string\n): MutationRef<Data, undefined>;\n/**\n *\n * @param dcInstance Data Connect instance\n * @param mutationName name of mutation\n * @param variables variables to send with mutation\n */\nexport function mutationRef<Data, Variables>(\n dcInstance: DataConnect,\n mutationName: string,\n variables: Variables\n): MutationRef<Data, Variables>;\n/**\n *\n * @param dcInstance Data Connect instance\n * @param mutationName name of mutation\n * @param variables variables to send with mutation\n * @returns `MutationRef`\n */\nexport function mutationRef<Data, Variables>(\n dcInstance: DataConnect,\n mutationName: string,\n variables?: Variables\n): MutationRef<Data, Variables> {\n dcInstance.setInitialized();\n const ref: MutationRef<Data, Variables> = {\n dataConnect: dcInstance,\n name: mutationName,\n refType: MUTATION_STR,\n variables: variables as Variables\n };\n return ref;\n}\n\n/**\n * @internal\n */\nexport class MutationManager {\n private _inflight: Array<Promise<unknown>> = [];\n constructor(private _transport: DataConnectTransportInterface) {}\n executeMutation<Data, Variables>(\n mutationRef: MutationRef<Data, Variables>\n ): MutationPromise<Data, Variables> {\n const result = this._transport.invokeMutation<Data, Variables>(\n mutationRef.name,\n mutationRef.variables\n );\n const withRefPromise = result.then(res => {\n const obj: MutationResult<Data, Variables> = {\n ...res, // Double check that the result is result.data, not just result\n source: SOURCE_SERVER,\n ref: mutationRef,\n fetchTime: Date.now().toLocaleString()\n };\n return obj;\n });\n this._inflight.push(result);\n const removePromise = (): Array<Promise<unknown>> =>\n (this._inflight = this._inflight.filter(promise => promise !== result));\n result.then(removePromise, removePromise);\n return withRefPromise;\n }\n}\n\n/**\n * Mutation Result from `executeMutation`\n */\nexport interface MutationResult<Data, Variables>\n extends DataConnectResult<Data, Variables> {\n ref: MutationRef<Data, Variables>;\n}\n/**\n * Mutation return value from `executeMutation`\n */\nexport interface MutationPromise<Data, Variables>\n extends Promise<MutationResult<Data, Variables>> {\n // reserved for special actions like cancellation\n}\n\n/**\n * Execute Mutation\n * @param mutationRef mutation to execute\n * @returns `MutationRef`\n */\nexport function executeMutation<Data, Variables>(\n mutationRef: MutationRef<Data, Variables>\n): MutationPromise<Data, Variables> {\n return mutationRef.dataConnect._mutationManager.executeMutation(mutationRef);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FirebaseApp,\n _getProvider,\n _removeServiceInstance,\n getApp\n} from '@firebase/app';\nimport { AppCheckInternalComponentName } from '@firebase/app-check-interop-types';\nimport { FirebaseAuthInternalName } from '@firebase/auth-interop-types';\nimport { Provider } from '@firebase/component';\nimport { isCloudWorkstation, pingServer } from '@firebase/util';\n\nimport { DataConnectCache, MemoryStub } from '../cache/Cache';\nimport { InternalCacheProvider } from '../cache/CacheProvider';\nimport { AppCheckTokenProvider } from '../core/AppCheckTokenProvider';\nimport { Code, DataConnectError } from '../core/error';\nimport {\n AuthTokenProvider,\n FirebaseAuthProvider\n} from '../core/FirebaseAuthProvider';\nimport { QueryManager } from '../core/query/QueryManager';\nimport { logDebug, logError } from '../logger';\nimport {\n DataConnectTransportInterface,\n TransportClass,\n CallerSdkType,\n CallerSdkTypeEnum\n} from '../network';\nimport { DataConnectTransportManager } from '../network/manager';\nimport { PROD_HOST } from '../util/url';\n\nimport { MutationManager } from './Mutation';\n\n/**\n * Connector Config for calling Data Connect backend.\n */\nexport interface ConnectorConfig {\n location: string;\n connector: string;\n service: string;\n}\n\n/**\n * Options to connect to emulator\n */\nexport interface TransportOptions {\n host: string;\n sslEnabled?: boolean;\n port?: number;\n}\n\nconst FIREBASE_DATA_CONNECT_EMULATOR_HOST_VAR =\n 'FIREBASE_DATA_CONNECT_EMULATOR_HOST';\n\n/**\n *\n * @param fullHost\n * @returns TransportOptions\n * @internal\n */\nexport function parseOptions(fullHost: string): TransportOptions {\n const [protocol, hostName] = fullHost.split('://');\n const isSecure = protocol === 'https';\n const [host, portAsString] = hostName.split(':');\n const port = Number(portAsString);\n return { host, port, sslEnabled: isSecure };\n}\n/**\n * DataConnectOptions including project id\n */\nexport interface DataConnectOptions extends ConnectorConfig {\n projectId: string;\n}\n\n/**\n * Class representing Firebase Data Connect\n */\nexport class DataConnect {\n _queryManager!: QueryManager;\n _mutationManager!: MutationManager;\n isEmulator = false;\n _initialized = false;\n private _transport!: DataConnectTransportInterface;\n private _transportClass: TransportClass | undefined;\n private _transportOptions?: TransportOptions;\n private _authTokenProvider?: AuthTokenProvider;\n _isUsingGeneratedSdk: boolean = false;\n _callerSdkType: CallerSdkType = CallerSdkTypeEnum.Base;\n private _appCheckTokenProvider?: AppCheckTokenProvider;\n private _cacheSettings?: CacheSettings;\n /**\n * @internal\n */\n private cache?: DataConnectCache;\n // @internal\n constructor(\n public readonly app: FirebaseApp,\n // TODO(mtewani): Replace with _dataConnectOptions in the future\n private readonly dataConnectOptions: DataConnectOptions,\n private readonly _authProvider: Provider<FirebaseAuthInternalName>,\n private readonly _appCheckProvider: Provider<AppCheckInternalComponentName>\n ) {\n if (typeof process !== 'undefined' && process.env) {\n const host = process.env[FIREBASE_DATA_CONNECT_EMULATOR_HOST_VAR];\n if (host) {\n logDebug('Found custom host. Using emulator');\n this.isEmulator = true;\n this._transportOptions = parseOptions(host);\n }\n }\n }\n /**\n * @internal\n */\n getCache(): DataConnectCache | undefined {\n return this.cache;\n }\n // @internal\n _useGeneratedSdk(): void {\n if (!this._isUsingGeneratedSdk) {\n this._isUsingGeneratedSdk = true;\n }\n }\n _setCallerSdkType(callerSdkType: CallerSdkType): void {\n this._callerSdkType = callerSdkType;\n if (this._initialized) {\n this._transport._setCallerSdkType(callerSdkType);\n }\n }\n _delete(): Promise<void> {\n _removeServiceInstance(\n this.app,\n 'data-connect',\n JSON.stringify(this.getSettings())\n );\n return Promise.resolve();\n }\n\n // @internal\n getSettings(): ConnectorConfig {\n const copy = JSON.parse(JSON.stringify(this.dataConnectOptions));\n delete copy.projectId;\n return copy;\n }\n\n /**\n * @internal\n */\n setCacheSettings(cacheSettings: CacheSettings): void {\n this._cacheSettings = cacheSettings;\n }\n\n // @internal\n setInitialized(): void {\n if (this._initialized) {\n return;\n }\n if (this._transportClass === undefined) {\n logDebug(\n 'transportClass not provided. Defaulting to DataConnectTransportManager.'\n );\n this._transportClass = DataConnectTransportManager;\n }\n\n this._authTokenProvider = new FirebaseAuthProvider(\n this.app.name,\n this.app.options,\n this._authProvider\n );\n const connectorConfig: ConnectorConfig = {\n connector: this.dataConnectOptions.connector,\n service: this.dataConnectOptions.service,\n location: this.dataConnectOptions.location\n };\n if (this._cacheSettings) {\n this.cache = new DataConnectCache(\n this._authTokenProvider,\n this.app.options.projectId!,\n connectorConfig,\n this._transportOptions?.host || PROD_HOST,\n this._cacheSettings\n );\n }\n\n if (this._appCheckProvider) {\n this._appCheckTokenProvider = new AppCheckTokenProvider(\n this.app,\n this._appCheckProvider\n );\n }\n\n this._transport = new this._transportClass(\n this.dataConnectOptions,\n this.app.options.apiKey,\n this.app.options.appId,\n this._authTokenProvider,\n this._appCheckTokenProvider,\n undefined,\n this._isUsingGeneratedSdk,\n this._callerSdkType\n );\n if (this._transportOptions) {\n this._transport.useEmulator(\n this._transportOptions.host,\n this._transportOptions.port,\n this._transportOptions.sslEnabled\n );\n }\n\n this._queryManager = new QueryManager(this._transport, this, this.cache);\n this._mutationManager = new MutationManager(this._transport);\n this._initialized = true;\n }\n\n // @internal\n enableEmulator(transportOptions: TransportOptions): void {\n if (\n this._transportOptions &&\n this._initialized &&\n !areTransportOptionsEqual(this._transportOptions, transportOptions)\n ) {\n logError('enableEmulator called after initialization');\n throw new DataConnectError(\n Code.ALREADY_INITIALIZED,\n 'DataConnect instance already initialized!'\n );\n }\n this._transportOptions = transportOptions;\n this.isEmulator = true;\n }\n}\n\n/**\n * @internal\n * @param transportOptions1\n * @param transportOptions2\n * @returns\n */\nexport function areTransportOptionsEqual(\n transportOptions1: TransportOptions,\n transportOptions2: TransportOptions\n): boolean {\n return (\n transportOptions1.host === transportOptions2.host &&\n transportOptions1.port === transportOptions2.port &&\n transportOptions1.sslEnabled === transportOptions2.sslEnabled\n );\n}\n\n/**\n * Connect to the DataConnect Emulator\n * @param dc Data Connect instance\n * @param host host of emulator server\n * @param port port of emulator server\n * @param sslEnabled use https\n */\nexport function connectDataConnectEmulator(\n dc: DataConnect,\n host: string,\n port?: number,\n sslEnabled = false\n): void {\n // Workaround to get cookies in Firebase Studio\n if (isCloudWorkstation(host)) {\n void pingServer(`https://${host}${port ? `:${port}` : ''}`);\n }\n dc.enableEmulator({ host, port, sslEnabled });\n}\n\nexport interface DataConnectSettings {\n cacheSettings?: CacheSettings;\n}\n\n/**\n * Initialize DataConnect instance\n * @param options ConnectorConfig\n */\nexport function getDataConnect(\n options: ConnectorConfig,\n settings?: DataConnectSettings\n): DataConnect;\nexport function getDataConnect(options: ConnectorConfig): DataConnect;\n/**\n * Initialize DataConnect instance\n * @param app FirebaseApp to initialize to.\n * @param connectorConfig ConnectorConfig\n */\nexport function getDataConnect(\n app: FirebaseApp,\n connectorConfig: ConnectorConfig\n): DataConnect;\n\n/**\n * Initialize DataConnect instance\n * @param app FirebaseApp to initialize to.\n * @param connectorConfig ConnectorConfig\n */\nexport function getDataConnect(\n app: FirebaseApp,\n connectorConfig: ConnectorConfig,\n settings: DataConnectSettings\n): DataConnect;\n\nexport function getDataConnect(\n appOrConnectorConfig: FirebaseApp | ConnectorConfig,\n settingsOrConnectorConfig?: ConnectorConfig | DataConnectSettings,\n settings?: DataConnectSettings\n): DataConnect {\n let app: FirebaseApp;\n let connectorConfig: ConnectorConfig;\n let realSettings: DataConnectSettings;\n if ('location' in appOrConnectorConfig) {\n connectorConfig = appOrConnectorConfig;\n app = getApp();\n realSettings = settingsOrConnectorConfig as DataConnectSettings;\n } else {\n app = appOrConnectorConfig;\n connectorConfig = settingsOrConnectorConfig as ConnectorConfig;\n realSettings = settings as DataConnectSettings;\n }\n\n if (!app || Object.keys(app).length === 0) {\n app = getApp();\n }\n\n // Options to store in Firebase Component Provider.\n const serializedOptions = {\n ...connectorConfig,\n projectId: app.options.projectId\n };\n\n // We should sort the keys before initialization.\n const sortedSerialized = Object.fromEntries(\n Object.entries(serializedOptions).sort()\n );\n\n const provider = _getProvider(app, 'data-connect');\n const identifier = JSON.stringify(sortedSerialized);\n if (provider.isInitialized(identifier)) {\n const dcInstance = provider.getImmediate({ identifier });\n const options = provider.getOptions(identifier);\n const optionsValid = Object.keys(options).length > 0;\n if (optionsValid) {\n logDebug('Re-using cached instance');\n return dcInstance;\n }\n }\n validateDCOptions(connectorConfig);\n\n logDebug('Creating new DataConnect instance');\n // Initialize with options.\n const dataConnect = provider.initialize({\n instanceIdentifier: identifier,\n options: Object.fromEntries(\n Object.entries({\n ...sortedSerialized\n }).sort()\n )\n });\n if (realSettings?.cacheSettings) {\n dataConnect.setCacheSettings(realSettings.cacheSettings);\n }\n return dataConnect;\n}\n\n/**\n *\n * @param dcOptions\n * @returns {void}\n * @internal\n */\nexport function validateDCOptions(dcOptions: ConnectorConfig): boolean {\n const fields = ['connector', 'location', 'service'];\n if (!dcOptions) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'DC Option Required');\n }\n fields.forEach(field => {\n if (\n dcOptions[field as keyof ConnectorConfig] === null ||\n dcOptions[field as keyof ConnectorConfig] === undefined\n ) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, `${field} Required`);\n }\n });\n return true;\n}\n\n/**\n * Delete DataConnect instance\n * @param dataConnect DataConnect instance\n * @returns\n */\nexport function terminate(dataConnect: DataConnect): Promise<void> {\n return dataConnect._delete();\n // TODO(mtewani): Stop pending tasks\n}\nexport const StorageType = {\n MEMORY: 'MEMORY'\n} as const;\n\nexport type StorageType = (typeof StorageType)[keyof typeof StorageType];\n\nexport interface CacheSettings {\n cacheProvider: CacheProvider<StorageType>;\n maxAgeSeconds?: number;\n}\nexport interface CacheProvider<T extends StorageType> {\n type: T;\n /**\n * @internal\n */\n initialize(cacheId: string): InternalCacheProvider;\n}\n\nexport function makeMemoryCacheProvider(): CacheProvider<'MEMORY'> {\n return new MemoryStub();\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n _registerComponent,\n registerVersion,\n SDK_VERSION\n} from '@firebase/app';\nimport { Component, ComponentType } from '@firebase/component';\n\nimport { name, version } from '../package.json';\nimport { setSDKVersion } from '../src/core/version';\n\nimport { DataConnect, ConnectorConfig } from './api/DataConnect';\nimport { Code, DataConnectError } from './core/error';\n\nexport function registerDataConnect(variant?: string): void {\n setSDKVersion(SDK_VERSION);\n _registerComponent(\n new Component(\n 'data-connect',\n (container, { instanceIdentifier: connectorConfigStr, options }) => {\n const app = container.getProvider('app').getImmediate()!;\n const authProvider = container.getProvider('auth-internal');\n const appCheckProvider = container.getProvider('app-check-internal');\n let newOpts = options as ConnectorConfig;\n if (connectorConfigStr) {\n newOpts = {\n ...JSON.parse(connectorConfigStr),\n ...newOpts\n };\n }\n if (!app.options.projectId) {\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n 'Project ID must be provided. Did you pass in a proper projectId to initializeApp?'\n );\n }\n return new DataConnect(\n app,\n { ...newOpts, projectId: app.options.projectId! },\n authProvider,\n appCheckProvider\n );\n },\n ComponentType.PUBLIC\n ).setMultipleInstances(true)\n );\n registerVersion(name, version, variant);\n // BUILD_TARGET will be replaced by values like esm, cjs, etc during the compilation\n registerVersion(name, version, '__BUILD_TARGET__');\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const QueryFetchPolicy = {\n PREFER_CACHE: 'PREFER_CACHE',\n CACHE_ONLY: 'CACHE_ONLY',\n SERVER_ONLY: 'SERVER_ONLY'\n} as const;\n\n/*\n * Represents policy for how executeQuery fetches data\n */\nexport type QueryFetchPolicy =\n (typeof QueryFetchPolicy)[keyof typeof QueryFetchPolicy];\n\n/**\n * Options for executing a query.\n */\nexport interface ExecuteQueryOptions {\n fetchPolicy: QueryFetchPolicy;\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Code, DataConnectError } from '../core/error';\nimport {\n ExecuteQueryOptions,\n QueryFetchPolicy\n} from '../core/query/queryOptions';\nimport { DataConnectExtensionWithMaxAge } from '../network';\n\nimport { DataConnect, getDataConnect } from './DataConnect';\nimport {\n OperationRef,\n QUERY_STR,\n DataConnectResult,\n SerializedRef\n} from './Reference';\n\n/**\n * QueryRef object\n */\nexport interface QueryRef<Data, Variables>\n extends OperationRef<Data, Variables> {\n refType: typeof QUERY_STR;\n}\n\n/** @internal */\nexport type InternalQueryResult<Data, Variables> = QueryResult<\n Data,\n Variables\n> &\n Omit<DataConnectResult<Data, Variables>, 'extensions'> & {\n extensions?: {\n dataConnect?: DataConnectExtensionWithMaxAge[];\n };\n };\n\n/**\n * Result of `executeQuery`\n */\nexport interface QueryResult<Data, Variables>\n extends DataConnectResult<Data, Variables> {\n ref: QueryRef<Data, Variables>;\n toJSON: () => SerializedRef<Data, Variables>;\n}\n/**\n * Promise returned from `executeQuery`\n */\nexport interface QueryPromise<Data, Variables>\n extends Promise<QueryResult<Data, Variables>> {\n // reserved for special actions like cancellation\n}\n\n/**\n * Execute Query\n * @param queryRef query to execute.\n * @returns `QueryPromise`\n */\nexport function executeQuery<Data, Variables>(\n queryRef: QueryRef<Data, Variables>,\n options?: ExecuteQueryOptions\n): QueryPromise<Data, Variables> {\n if (queryRef.refType !== QUERY_STR) {\n return Promise.reject(\n new DataConnectError(\n Code.INVALID_ARGUMENT,\n `ExecuteQuery can only execute query operations`\n )\n );\n }\n const queryManager = queryRef.dataConnect._queryManager;\n const fetchPolicy = options?.fetchPolicy ?? QueryFetchPolicy.PREFER_CACHE;\n switch (fetchPolicy) {\n case QueryFetchPolicy.SERVER_ONLY:\n return queryManager.fetchServerResults(queryRef);\n case QueryFetchPolicy.CACHE_ONLY:\n return queryManager.fetchCacheResults(queryRef, true);\n case QueryFetchPolicy.PREFER_CACHE:\n return queryManager.preferCacheResults(queryRef, false);\n default:\n throw new DataConnectError(\n Code.INVALID_ARGUMENT,\n `Invalid fetch policy: ${fetchPolicy}`\n );\n }\n}\n\n/**\n * Execute Query\n * @param dcInstance Data Connect instance to use.\n * @param queryName Query to execute\n * @returns `QueryRef`\n */\nexport function queryRef<Data>(\n dcInstance: DataConnect,\n queryName: string\n): QueryRef<Data, undefined>;\n/**\n * Execute Query\n * @param dcInstance Data Connect instance to use.\n * @param queryName Query to execute\n * @param variables Variables to execute with\n * @returns `QueryRef`\n */\nexport function queryRef<Data, Variables>(\n dcInstance: DataConnect,\n queryName: string,\n variables: Variables\n): QueryRef<Data, Variables>;\n/**\n * Execute Query\n * @param dcInstance Data Connect instance to use.\n * @param queryName Query to execute\n * @param variables Variables to execute with\n * @param initialCache initial cache to use for client hydration\n * @returns `QueryRef`\n */\nexport function queryRef<Data, Variables>(\n dcInstance: DataConnect,\n queryName: string,\n variables?: Variables,\n initialCache?: QueryResult<Data, Variables>\n): QueryRef<Data, Variables> {\n dcInstance.setInitialized();\n if (initialCache !== undefined) {\n dcInstance._queryManager.updateSSR(initialCache);\n }\n return {\n dataConnect: dcInstance,\n refType: QUERY_STR,\n name: queryName,\n variables: variables as Variables\n };\n}\n/**\n * Converts serialized ref to query ref\n * @param serializedRef ref to convert to `QueryRef`\n * @returns `QueryRef`\n */\nexport function toQueryRef<Data, Variables>(\n serializedRef: SerializedRef<Data, Variables>\n): QueryRef<Data, Variables> {\n const {\n refInfo: { name, variables, connectorConfig }\n } = serializedRef;\n return queryRef(getDataConnect(connectorConfig), name, variables);\n}\n","/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ExecuteQueryOptions } from '../api';\nimport {\n ConnectorConfig,\n DataConnect,\n getDataConnect\n} from '../api/DataConnect';\nimport { Code, DataConnectError } from '../core/error';\n\ninterface ParsedArgs<Variables> {\n dc: DataConnect;\n vars: Variables;\n options?: ExecuteQueryOptions;\n}\n\n/**\n * The generated SDK will allow the user to pass in either the variables or the data connect instance\n * with the variables. This function validates the variables and returns back the DataConnect instance\n * and variables based on the arguments passed in.\n *\n * Generated SDKs generated from versions 3.2.0 and lower of the Data Connect emulator binary are\n * NOT concerned with options, and will use this function to validate arguments.\n *\n * @param connectorConfig\n * @param dcOrVars\n * @param vars\n * @param variablesRequired\n * @returns {DataConnect} and {Variables} instance\n * @internal\n */\nexport function validateArgs<Variables extends object>(\n connectorConfig: ConnectorConfig,\n dcOrVars?: DataConnect | Variables,\n vars?: Variables,\n variablesRequired?: boolean\n): ParsedArgs<Variables> {\n let dcInstance: DataConnect;\n let realVars: Variables;\n\n const dcFirstArg = dcOrVars && 'enableEmulator' in dcOrVars;\n\n if (dcFirstArg) {\n dcInstance = dcOrVars as DataConnect;\n realVars = vars as Variables;\n } else {\n dcInstance = getDataConnect(connectorConfig);\n realVars = dcOrVars as Variables;\n }\n\n if (!dcInstance || (!realVars && variablesRequired)) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'Variables required.');\n }\n\n return { dc: dcInstance, vars: realVars };\n}\n\n/**\n * The generated SDK will allow the user to pass in either the variables or the data connect instance\n * with the variables, and/or options. This function validates the variables and returns back the\n * DataConnect instance and variables, and potentially options, based on the arguments passed in.\n *\n * Generated SDKs generated from versions 3.2.0 and higher of the Data Connect emulator binary are\n * in fact concerned with options, and will use this function to validate arguments.\n *\n * @param connectorConfig\n * @param dcOrVarsOrOptions\n * @param varsOrOptions\n * @param variablesRequired\n * @param options\n * @returns {DataConnect} and {Variables} instance, and optionally {ExecuteQueryOptions}\n * @internal\n */\nexport function validateArgsWithOptions<Variables extends object>(\n connectorConfig: ConnectorConfig,\n dcOrVarsOrOptions?: DataConnect | Variables | ExecuteQueryOptions,\n varsOrOptions?: Variables | ExecuteQueryOptions,\n options?: ExecuteQueryOptions,\n hasVars?: boolean,\n variablesRequired?: boolean\n): ParsedArgs<Variables> {\n let dcInstance: DataConnect;\n let realVars: Variables;\n let realOptions: ExecuteQueryOptions;\n\n const dcFirstArg = dcOrVarsOrOptions && 'enableEmulator' in dcOrVarsOrOptions;\n\n if (dcFirstArg) {\n dcInstance = dcOrVarsOrOptions as DataConnect;\n if (hasVars) {\n realVars = varsOrOptions as Variables;\n realOptions = options as ExecuteQueryOptions;\n } else {\n realVars = undefined as unknown as Variables;\n realOptions = varsOrOptions as ExecuteQueryOptions;\n }\n } else {\n dcInstance = getDataConnect(connectorConfig);\n if (hasVars) {\n realVars = dcOrVarsOrOptions as Variables;\n realOptions = varsOrOptions as ExecuteQueryOptions;\n } else {\n realVars = undefined as unknown as Variables;\n realOptions = dcOrVarsOrOptions as ExecuteQueryOptions;\n }\n }\n\n if (!dcInstance || (!realVars && variablesRequired)) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'Variables required.');\n }\n\n return { dc: dcInstance, vars: realVars, options: realOptions };\n}\n","/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { QueryRef, QueryResult, toQueryRef } from '../../api/query';\nimport { SerializedRef } from '../../api/Reference';\nimport { DataConnectError, Code } from '../error';\n\nimport { getRefSerializer } from './QueryManager';\n\n/**\n * `OnCompleteSubscription`\n */\nexport type OnCompleteSubscription = () => void;\n/**\n * Representation of full observer options in `subscribe`\n */\nexport interface SubscriptionOptions<Data, Variables> {\n onNext?: OnResultSubscription<Data, Variables>;\n onErr?: OnErrorSubscription;\n onComplete?: OnCompleteSubscription;\n}\n\n/**\n * Signature for `OnResultSubscription` for `subscribe`\n */\nexport type OnResultSubscription<Data, Variables> = (\n res: QueryResult<Data, Variables>\n) => void;\n/**\n * Signature for `OnErrorSubscription` for `subscribe`\n */\nexport type OnErrorSubscription = (err?: DataConnectError) => void;\n/**\n * Signature for unsubscribe from `subscribe`\n */\nexport type QueryUnsubscribe = () => void;\n/**\n * Representation of user provided subscription options.\n */\nexport interface DataConnectSubscription<Data, Variables> {\n userCallback: OnResultSubscription<Data, Variables>;\n errCallback?: (e?: DataConnectError) => void;\n unsubscribe: () => void;\n}\n\n/**\n * Subscribe to a `QueryRef`\n * @param queryRefOrSerializedResult query ref or serialized result.\n * @param observer observer object to use for subscribing.\n * @returns `SubscriptionOptions`\n */\nexport function subscribe<Data, Variables>(\n queryRefOrSerializedResult:\n | QueryRef<Data, Variables>\n | SerializedRef<Data, Variables>,\n observer: SubscriptionOptions<Data, Variables>\n): QueryUnsubscribe;\n/**\n * Subscribe to a `QueryRef`\n * @param queryRefOrSerializedResult query ref or serialized result.\n * @param onNext Callback to call when result comes back.\n * @param onError Callback to call when error gets thrown.\n * @param onComplete Called when subscription completes.\n * @returns `SubscriptionOptions`\n */\nexport function subscribe<Data, Variables>(\n queryRefOrSerializedResult:\n | QueryRef<Data, Variables>\n | SerializedRef<Data, Variables>,\n onNext: OnResultSubscription<Data, Variables>,\n onError?: OnErrorSubscription,\n onComplete?: OnCompleteSubscription\n): QueryUnsubscribe;\n/**\n * Subscribe to a `QueryRef`\n * @param queryRefOrSerializedResult query ref or serialized result.\n * @param observerOrOnNext observer object or next function.\n * @param onError Callback to call when error gets thrown.\n * @param onComplete Called when subscription completes.\n * @returns `SubscriptionOptions`\n */\nexport function subscribe<Data, Variables>(\n queryRefOrSerializedResult:\n | QueryRef<Data, Variables>\n | SerializedRef<Data, Variables>,\n observerOrOnNext:\n | SubscriptionOptions<Data, Variables>\n | OnResultSubscription<Data, Variables>,\n onError?: OnErrorSubscription,\n onComplete?: OnCompleteSubscription\n): QueryUnsubscribe {\n let ref: QueryRef<Data, Variables>;\n let initialCache: QueryResult<Data, Variables> | undefined;\n if ('refInfo' in queryRefOrSerializedResult) {\n const serializedRef: SerializedRef<Data, Variables> =\n queryRefOrSerializedResult;\n const { data, source, fetchTime } = serializedRef;\n\n ref = toQueryRef(serializedRef);\n initialCache = {\n data,\n source,\n fetchTime,\n ref,\n toJSON: getRefSerializer(ref, data, source, fetchTime)\n };\n } else {\n ref = queryRefOrSerializedResult;\n }\n let onResult: OnResultSubscription<Data, Variables> | undefined = undefined;\n if (typeof observerOrOnNext === 'function') {\n onResult = observerOrOnNext;\n } else {\n onResult = observerOrOnNext.onNext;\n onError = observerOrOnNext.onErr;\n onComplete = observerOrOnNext.onComplete;\n }\n if (!onResult) {\n throw new DataConnectError(Code.INVALID_ARGUMENT, 'Must provide onNext');\n }\n return ref.dataConnect._queryManager.addSubscription(\n ref,\n onResult,\n onComplete,\n onError,\n initialCache\n );\n}\n","/**\n * Firebase Data Connect\n *\n * @packageDocumentation\n */\n\n/**\n * @license\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DataConnect } from './api/DataConnect';\nimport { registerDataConnect } from './register';\n\nexport * from './api';\nexport * from './api.browser';\n\nregisterDataConnect();\n\ndeclare module '@firebase/component' {\n interface NameServiceMapping {\n 'data-connect': DataConnect;\n }\n}\n"],"names":["getGoogApiClientValue","SDK_VERSION"],"mappings":"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"}