diff options
| author | altaf-creator <dev@altafcreator.com> | 2025-11-16 19:08:29 +0800 |
|---|---|---|
| committer | altaf-creator <dev@altafcreator.com> | 2025-11-16 19:08:29 +0800 |
| commit | 434aa8343fdcbb4d5002f934979913c099489bee (patch) | |
| tree | 55bab4ec5a6151be57797d34f61faf5ea744471b /frontend-old/node_modules/@firebase/data-connect/dist/index.esm.js | |
| parent | 893c388d4e99442a36005e5971a87730623f946e (diff) | |
sdk, del
Diffstat (limited to 'frontend-old/node_modules/@firebase/data-connect/dist/index.esm.js')
| -rw-r--r-- | frontend-old/node_modules/@firebase/data-connect/dist/index.esm.js | 1236 |
1 files changed, 0 insertions, 1236 deletions
diff --git a/frontend-old/node_modules/@firebase/data-connect/dist/index.esm.js b/frontend-old/node_modules/@firebase/data-connect/dist/index.esm.js deleted file mode 100644 index f7fe54c..0000000 --- a/frontend-old/node_modules/@firebase/data-connect/dist/index.esm.js +++ /dev/null @@ -1,1236 +0,0 @@ -import { _isFirebaseServerApp, _removeServiceInstance, getApp, _getProvider, _registerComponent, registerVersion, SDK_VERSION as SDK_VERSION$1 } from '@firebase/app'; -import { Component } from '@firebase/component'; -import { FirebaseError, isCloudWorkstation, pingServer, updateEmulatorBanner } from '@firebase/util'; -import { Logger } from '@firebase/logger'; - -const name = "@firebase/data-connect"; -const version = "0.3.11"; - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** The semver (www.semver.org) version of the SDK. */ -let SDK_VERSION = ''; -/** - * SDK_VERSION should be set before any database instance is created - * @internal - */ -function setSDKVersion(version) { - SDK_VERSION = version; -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @internal - * Abstraction around AppCheck's token fetching capabilities. - */ -class AppCheckTokenProvider { - constructor(app, appCheckProvider) { - this.appCheckProvider = appCheckProvider; - if (_isFirebaseServerApp(app) && app.settings.appCheckToken) { - this.serverAppAppCheckToken = app.settings.appCheckToken; - } - this.appCheck = appCheckProvider?.getImmediate({ optional: true }); - if (!this.appCheck) { - void appCheckProvider - ?.get() - .then(appCheck => (this.appCheck = appCheck)) - .catch(); - } - } - getToken() { - if (this.serverAppAppCheckToken) { - return Promise.resolve({ token: this.serverAppAppCheckToken }); - } - if (!this.appCheck) { - return new Promise((resolve, reject) => { - // Support delayed initialization of FirebaseAppCheck. This allows our - // customers to initialize the RTDB SDK before initializing Firebase - // AppCheck and ensures that all requests are authenticated if a token - // becomes available before the timoeout below expires. - setTimeout(() => { - if (this.appCheck) { - this.getToken().then(resolve, reject); - } - else { - resolve(null); - } - }, 0); - }); - } - return this.appCheck.getToken(); - } - addTokenChangeListener(listener) { - void this.appCheckProvider - ?.get() - .then(appCheck => appCheck.addTokenListener(listener)); - } -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const Code = { - OTHER: 'other', - ALREADY_INITIALIZED: 'already-initialized', - NOT_INITIALIZED: 'not-initialized', - NOT_SUPPORTED: 'not-supported', - INVALID_ARGUMENT: 'invalid-argument', - PARTIAL_ERROR: 'partial-error', - UNAUTHORIZED: 'unauthorized' -}; -/** An error returned by a DataConnect operation. */ -class DataConnectError extends FirebaseError { - constructor(code, message) { - super(code, message); - /** @internal */ - this.name = 'DataConnectError'; - // Ensure the instanceof operator works as expected on subclasses of Error. - // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#custom_error_types - // and https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget - Object.setPrototypeOf(this, DataConnectError.prototype); - } - /** @internal */ - toString() { - return `${this.name}[code=${this.code}]: ${this.message}`; - } -} -/** An error returned by a DataConnect operation. */ -class DataConnectOperationError extends DataConnectError { - /** @hideconstructor */ - constructor(message, response) { - super(Code.PARTIAL_ERROR, message); - /** @internal */ - this.name = 'DataConnectOperationError'; - this.response = response; - } -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const logger = new Logger('@firebase/data-connect'); -function setLogLevel(logLevel) { - logger.setLogLevel(logLevel); -} -function logDebug(msg) { - logger.debug(`DataConnect (${SDK_VERSION}): ${msg}`); -} -function logError(msg) { - logger.error(`DataConnect (${SDK_VERSION}): ${msg}`); -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -// @internal -class FirebaseAuthProvider { - constructor(_appName, _options, _authProvider) { - this._appName = _appName; - this._options = _options; - this._authProvider = _authProvider; - this._auth = _authProvider.getImmediate({ optional: true }); - if (!this._auth) { - _authProvider.onInit(auth => (this._auth = auth)); - } - } - getToken(forceRefresh) { - if (!this._auth) { - return new Promise((resolve, reject) => { - setTimeout(() => { - if (this._auth) { - this.getToken(forceRefresh).then(resolve, reject); - } - else { - resolve(null); - } - }, 0); - }); - } - return this._auth.getToken(forceRefresh).catch(error => { - if (error && error.code === 'auth/token-not-initialized') { - logDebug('Got auth/token-not-initialized error. Treating as null token.'); - return null; - } - else { - logError('Error received when attempting to retrieve token: ' + - JSON.stringify(error)); - return Promise.reject(error); - } - }); - } - addTokenChangeListener(listener) { - this._auth?.addAuthTokenListener(listener); - } - removeTokenChangeListener(listener) { - this._authProvider - .get() - .then(auth => auth.removeAuthTokenListener(listener)) - .catch(err => logError(err)); - } -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const QUERY_STR = 'query'; -const MUTATION_STR = 'mutation'; -const SOURCE_SERVER = 'SERVER'; -const SOURCE_CACHE = 'CACHE'; - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -let encoderImpl; -function setEncoder(encoder) { - encoderImpl = encoder; -} -setEncoder(o => JSON.stringify(o)); - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -function setIfNotExists(map, key, val) { - if (!map.has(key)) { - map.set(key, val); - } -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -function getRefSerializer(queryRef, data, source) { - return function toJSON() { - return { - data, - refInfo: { - name: queryRef.name, - variables: queryRef.variables, - connectorConfig: { - projectId: queryRef.dataConnect.app.options.projectId, - ...queryRef.dataConnect.getSettings() - } - }, - fetchTime: Date.now().toLocaleString(), - source - }; - }; -} -class QueryManager { - constructor(transport) { - this.transport = transport; - this._queries = new Map(); - } - track(queryName, variables, initialCache) { - const ref = { - name: queryName, - variables, - refType: QUERY_STR - }; - const key = encoderImpl(ref); - const newTrackedQuery = { - ref, - subscriptions: [], - currentCache: initialCache || null, - lastError: null - }; - // @ts-ignore - setIfNotExists(this._queries, key, newTrackedQuery); - return this._queries.get(key); - } - addSubscription(queryRef, onResultCallback, onErrorCallback, initialCache) { - const key = encoderImpl({ - name: queryRef.name, - variables: queryRef.variables, - refType: QUERY_STR - }); - const trackedQuery = this._queries.get(key); - const subscription = { - userCallback: onResultCallback, - errCallback: onErrorCallback - }; - const unsubscribe = () => { - const trackedQuery = this._queries.get(key); - trackedQuery.subscriptions = trackedQuery.subscriptions.filter(sub => sub !== subscription); - }; - if (initialCache && trackedQuery.currentCache !== initialCache) { - logDebug('Initial cache found. Comparing dates.'); - if (!trackedQuery.currentCache || - (trackedQuery.currentCache && - compareDates(trackedQuery.currentCache.fetchTime, initialCache.fetchTime))) { - trackedQuery.currentCache = initialCache; - } - } - if (trackedQuery.currentCache !== null) { - const cachedData = trackedQuery.currentCache.data; - onResultCallback({ - data: cachedData, - source: SOURCE_CACHE, - ref: queryRef, - toJSON: getRefSerializer(queryRef, trackedQuery.currentCache.data, SOURCE_CACHE), - fetchTime: trackedQuery.currentCache.fetchTime - }); - if (trackedQuery.lastError !== null && onErrorCallback) { - onErrorCallback(undefined); - } - } - trackedQuery.subscriptions.push({ - userCallback: onResultCallback, - errCallback: onErrorCallback, - unsubscribe - }); - if (!trackedQuery.currentCache) { - logDebug(`No cache available for query ${queryRef.name} with variables ${JSON.stringify(queryRef.variables)}. Calling executeQuery.`); - const promise = this.executeQuery(queryRef); - // We want to ignore the error and let subscriptions handle it - promise.then(undefined, err => { }); - } - return unsubscribe; - } - executeQuery(queryRef) { - if (queryRef.refType !== QUERY_STR) { - throw new DataConnectError(Code.INVALID_ARGUMENT, `ExecuteQuery can only execute query operation`); - } - const key = encoderImpl({ - name: queryRef.name, - variables: queryRef.variables, - refType: QUERY_STR - }); - const trackedQuery = this._queries.get(key); - const result = this.transport.invokeQuery(queryRef.name, queryRef.variables); - const newR = result.then(res => { - const fetchTime = new Date().toString(); - const result = { - ...res, - source: SOURCE_SERVER, - ref: queryRef, - toJSON: getRefSerializer(queryRef, res.data, SOURCE_SERVER), - fetchTime - }; - trackedQuery.subscriptions.forEach(subscription => { - subscription.userCallback(result); - }); - trackedQuery.currentCache = { - data: res.data, - source: SOURCE_CACHE, - fetchTime - }; - return result; - }, err => { - trackedQuery.lastError = err; - trackedQuery.subscriptions.forEach(subscription => { - if (subscription.errCallback) { - subscription.errCallback(err); - } - }); - throw err; - }); - return newR; - } - enableEmulator(host, port) { - this.transport.useEmulator(host, port); - } -} -function compareDates(str1, str2) { - const date1 = new Date(str1); - const date2 = new Date(str2); - return date1.getTime() < date2.getTime(); -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const CallerSdkTypeEnum = { - Base: 'Base', // Core JS SDK - Generated: 'Generated', // Generated JS SDK - TanstackReactCore: 'TanstackReactCore', // Tanstack non-generated React SDK - GeneratedReact: 'GeneratedReact', // Tanstack non-generated Angular SDK - TanstackAngularCore: 'TanstackAngularCore', // Tanstack non-generated Angular SDK - GeneratedAngular: 'GeneratedAngular' // Generated Angular SDK -}; - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -function urlBuilder(projectConfig, transportOptions) { - const { connector, location, projectId: project, service } = projectConfig; - const { host, sslEnabled, port } = transportOptions; - const protocol = sslEnabled ? 'https' : 'http'; - const realHost = host || `firebasedataconnect.googleapis.com`; - let baseUrl = `${protocol}://${realHost}`; - if (typeof port === 'number') { - baseUrl += `:${port}`; - } - else if (typeof port !== 'undefined') { - logError('Port type is of an invalid type'); - throw new DataConnectError(Code.INVALID_ARGUMENT, 'Incorrect type for port passed in!'); - } - return `${baseUrl}/v1/projects/${project}/locations/${location}/services/${service}/connectors/${connector}`; -} -function addToken(url, apiKey) { - if (!apiKey) { - return url; - } - const newUrl = new URL(url); - newUrl.searchParams.append('key', apiKey); - return newUrl.toString(); -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -let connectFetch = globalThis.fetch; -function getGoogApiClientValue(_isUsingGen, _callerSdkType) { - let str = 'gl-js/ fire/' + SDK_VERSION; - if (_callerSdkType !== CallerSdkTypeEnum.Base && - _callerSdkType !== CallerSdkTypeEnum.Generated) { - str += ' js/' + _callerSdkType.toLowerCase(); - } - else if (_isUsingGen || _callerSdkType === CallerSdkTypeEnum.Generated) { - str += ' js/gen'; - } - return str; -} -function dcFetch(url, body, { signal }, appId, accessToken, appCheckToken, _isUsingGen, _callerSdkType, _isUsingEmulator) { - if (!connectFetch) { - throw new DataConnectError(Code.OTHER, 'No Fetch Implementation detected!'); - } - const headers = { - 'Content-Type': 'application/json', - 'X-Goog-Api-Client': getGoogApiClientValue(_isUsingGen, _callerSdkType) - }; - if (accessToken) { - headers['X-Firebase-Auth-Token'] = accessToken; - } - if (appId) { - headers['x-firebase-gmpid'] = appId; - } - if (appCheckToken) { - headers['X-Firebase-AppCheck'] = appCheckToken; - } - const bodyStr = JSON.stringify(body); - const fetchOptions = { - body: bodyStr, - method: 'POST', - headers, - signal - }; - if (isCloudWorkstation(url) && _isUsingEmulator) { - fetchOptions.credentials = 'include'; - } - return connectFetch(url, fetchOptions) - .catch(err => { - throw new DataConnectError(Code.OTHER, 'Failed to fetch: ' + JSON.stringify(err)); - }) - .then(async (response) => { - let jsonResponse = null; - try { - jsonResponse = await response.json(); - } - catch (e) { - throw new DataConnectError(Code.OTHER, JSON.stringify(e)); - } - const message = getMessage(jsonResponse); - if (response.status >= 400) { - logError('Error while performing request: ' + JSON.stringify(jsonResponse)); - if (response.status === 401) { - throw new DataConnectError(Code.UNAUTHORIZED, message); - } - throw new DataConnectError(Code.OTHER, message); - } - return jsonResponse; - }) - .then(res => { - if (res.errors && res.errors.length) { - const stringified = JSON.stringify(res.errors); - const response = { - errors: res.errors, - data: res.data - }; - throw new DataConnectOperationError('DataConnect error while performing request: ' + stringified, response); - } - return res; - }); -} -function getMessage(obj) { - if ('message' in obj) { - return obj.message; - } - return JSON.stringify(obj); -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class RESTTransport { - constructor(options, apiKey, appId, authProvider, appCheckProvider, transportOptions, _isUsingGen = false, _callerSdkType = CallerSdkTypeEnum.Base) { - this.apiKey = apiKey; - this.appId = appId; - this.authProvider = authProvider; - this.appCheckProvider = appCheckProvider; - this._isUsingGen = _isUsingGen; - this._callerSdkType = _callerSdkType; - this._host = ''; - this._location = 'l'; - this._connectorName = ''; - this._secure = true; - this._project = 'p'; - this._accessToken = null; - this._appCheckToken = null; - this._lastToken = null; - this._isUsingEmulator = false; - // TODO(mtewani): Update U to include shape of body defined in line 13. - this.invokeQuery = (queryName, body) => { - const abortController = new AbortController(); - // TODO(mtewani): Update to proper value - const withAuth = this.withRetry(() => dcFetch(addToken(`${this.endpointUrl}:executeQuery`, this.apiKey), { - name: `projects/${this._project}/locations/${this._location}/services/${this._serviceName}/connectors/${this._connectorName}`, - operationName: queryName, - variables: body - }, abortController, this.appId, this._accessToken, this._appCheckToken, this._isUsingGen, this._callerSdkType, this._isUsingEmulator)); - return withAuth; - }; - this.invokeMutation = (mutationName, body) => { - const abortController = new AbortController(); - const taskResult = this.withRetry(() => { - return dcFetch(addToken(`${this.endpointUrl}:executeMutation`, this.apiKey), { - name: `projects/${this._project}/locations/${this._location}/services/${this._serviceName}/connectors/${this._connectorName}`, - operationName: mutationName, - variables: body - }, abortController, this.appId, this._accessToken, this._appCheckToken, this._isUsingGen, this._callerSdkType, this._isUsingEmulator); - }); - return taskResult; - }; - if (transportOptions) { - if (typeof transportOptions.port === 'number') { - this._port = transportOptions.port; - } - if (typeof transportOptions.sslEnabled !== 'undefined') { - this._secure = transportOptions.sslEnabled; - } - this._host = transportOptions.host; - } - const { location, projectId: project, connector, service } = options; - if (location) { - this._location = location; - } - if (project) { - this._project = project; - } - this._serviceName = service; - if (!connector) { - throw new DataConnectError(Code.INVALID_ARGUMENT, 'Connector Name required!'); - } - this._connectorName = connector; - this.authProvider?.addTokenChangeListener(token => { - logDebug(`New Token Available: ${token}`); - this._accessToken = token; - }); - this.appCheckProvider?.addTokenChangeListener(result => { - const { token } = result; - logDebug(`New App Check Token Available: ${token}`); - this._appCheckToken = token; - }); - } - get endpointUrl() { - return urlBuilder({ - connector: this._connectorName, - location: this._location, - projectId: this._project, - service: this._serviceName - }, { host: this._host, sslEnabled: this._secure, port: this._port }); - } - useEmulator(host, port, isSecure) { - this._host = host; - this._isUsingEmulator = true; - if (typeof port === 'number') { - this._port = port; - } - if (typeof isSecure !== 'undefined') { - this._secure = isSecure; - } - } - onTokenChanged(newToken) { - this._accessToken = newToken; - } - async getWithAuth(forceToken = false) { - let starterPromise = new Promise(resolve => resolve(this._accessToken)); - if (this.appCheckProvider) { - this._appCheckToken = (await this.appCheckProvider.getToken())?.token; - } - if (this.authProvider) { - starterPromise = this.authProvider - .getToken(/*forceToken=*/ forceToken) - .then(data => { - if (!data) { - return null; - } - this._accessToken = data.accessToken; - return this._accessToken; - }); - } - else { - starterPromise = new Promise(resolve => resolve('')); - } - return starterPromise; - } - _setLastToken(lastToken) { - this._lastToken = lastToken; - } - withRetry(promiseFactory, retry = false) { - let isNewToken = false; - return this.getWithAuth(retry) - .then(res => { - isNewToken = this._lastToken !== res; - this._lastToken = res; - return res; - }) - .then(promiseFactory) - .catch(err => { - // Only retry if the result is unauthorized and the last token isn't the same as the new one. - if ('code' in err && - err.code === Code.UNAUTHORIZED && - !retry && - isNewToken) { - logDebug('Retrying due to unauthorized'); - return this.withRetry(promiseFactory, true); - } - throw err; - }); - } - _setCallerSdkType(callerSdkType) { - this._callerSdkType = callerSdkType; - } -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * - * @param dcInstance Data Connect instance - * @param mutationName name of mutation - * @param variables variables to send with mutation - * @returns `MutationRef` - */ -function mutationRef(dcInstance, mutationName, variables) { - dcInstance.setInitialized(); - const ref = { - dataConnect: dcInstance, - name: mutationName, - refType: MUTATION_STR, - variables: variables - }; - return ref; -} -/** - * @internal - */ -class MutationManager { - constructor(_transport) { - this._transport = _transport; - this._inflight = []; - } - executeMutation(mutationRef) { - const result = this._transport.invokeMutation(mutationRef.name, mutationRef.variables); - const withRefPromise = result.then(res => { - const obj = { - ...res, // Double check that the result is result.data, not just result - source: SOURCE_SERVER, - ref: mutationRef, - fetchTime: Date.now().toLocaleString() - }; - return obj; - }); - this._inflight.push(result); - const removePromise = () => (this._inflight = this._inflight.filter(promise => promise !== result)); - result.then(removePromise, removePromise); - return withRefPromise; - } -} -/** - * Execute Mutation - * @param mutationRef mutation to execute - * @returns `MutationRef` - */ -function executeMutation(mutationRef) { - return mutationRef.dataConnect._mutationManager.executeMutation(mutationRef); -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const FIREBASE_DATA_CONNECT_EMULATOR_HOST_VAR = 'FIREBASE_DATA_CONNECT_EMULATOR_HOST'; -/** - * - * @param fullHost - * @returns TransportOptions - * @internal - */ -function parseOptions(fullHost) { - const [protocol, hostName] = fullHost.split('://'); - const isSecure = protocol === 'https'; - const [host, portAsString] = hostName.split(':'); - const port = Number(portAsString); - return { host, port, sslEnabled: isSecure }; -} -/** - * Class representing Firebase Data Connect - */ -class DataConnect { - // @internal - constructor(app, - // TODO(mtewani): Replace with _dataConnectOptions in the future - dataConnectOptions, _authProvider, _appCheckProvider) { - this.app = app; - this.dataConnectOptions = dataConnectOptions; - this._authProvider = _authProvider; - this._appCheckProvider = _appCheckProvider; - this.isEmulator = false; - this._initialized = false; - this._isUsingGeneratedSdk = false; - this._callerSdkType = CallerSdkTypeEnum.Base; - if (typeof process !== 'undefined' && process.env) { - const host = process.env[FIREBASE_DATA_CONNECT_EMULATOR_HOST_VAR]; - if (host) { - logDebug('Found custom host. Using emulator'); - this.isEmulator = true; - this._transportOptions = parseOptions(host); - } - } - } - // @internal - _useGeneratedSdk() { - if (!this._isUsingGeneratedSdk) { - this._isUsingGeneratedSdk = true; - } - } - _setCallerSdkType(callerSdkType) { - this._callerSdkType = callerSdkType; - if (this._initialized) { - this._transport._setCallerSdkType(callerSdkType); - } - } - _delete() { - _removeServiceInstance(this.app, 'data-connect', JSON.stringify(this.getSettings())); - return Promise.resolve(); - } - // @internal - getSettings() { - const copy = JSON.parse(JSON.stringify(this.dataConnectOptions)); - delete copy.projectId; - return copy; - } - // @internal - setInitialized() { - if (this._initialized) { - return; - } - if (this._transportClass === undefined) { - logDebug('transportClass not provided. Defaulting to RESTTransport.'); - this._transportClass = RESTTransport; - } - if (this._authProvider) { - this._authTokenProvider = new FirebaseAuthProvider(this.app.name, this.app.options, this._authProvider); - } - if (this._appCheckProvider) { - this._appCheckTokenProvider = new AppCheckTokenProvider(this.app, this._appCheckProvider); - } - this._initialized = true; - this._transport = new this._transportClass(this.dataConnectOptions, this.app.options.apiKey, this.app.options.appId, this._authTokenProvider, this._appCheckTokenProvider, undefined, this._isUsingGeneratedSdk, this._callerSdkType); - if (this._transportOptions) { - this._transport.useEmulator(this._transportOptions.host, this._transportOptions.port, this._transportOptions.sslEnabled); - } - this._queryManager = new QueryManager(this._transport); - this._mutationManager = new MutationManager(this._transport); - } - // @internal - enableEmulator(transportOptions) { - if (this._initialized && - !areTransportOptionsEqual(this._transportOptions, transportOptions)) { - logError('enableEmulator called after initialization'); - throw new DataConnectError(Code.ALREADY_INITIALIZED, 'DataConnect instance already initialized!'); - } - this._transportOptions = transportOptions; - this.isEmulator = true; - } -} -/** - * @internal - * @param transportOptions1 - * @param transportOptions2 - * @returns - */ -function areTransportOptionsEqual(transportOptions1, transportOptions2) { - return (transportOptions1.host === transportOptions2.host && - transportOptions1.port === transportOptions2.port && - transportOptions1.sslEnabled === transportOptions2.sslEnabled); -} -/** - * Connect to the DataConnect Emulator - * @param dc Data Connect instance - * @param host host of emulator server - * @param port port of emulator server - * @param sslEnabled use https - */ -function connectDataConnectEmulator(dc, host, port, sslEnabled = false) { - // Workaround to get cookies in Firebase Studio - if (isCloudWorkstation(host)) { - void pingServer(`https://${host}${port ? `:${port}` : ''}`); - updateEmulatorBanner('Data Connect', true); - } - dc.enableEmulator({ host, port, sslEnabled }); -} -function getDataConnect(appOrOptions, optionalOptions) { - let app; - let dcOptions; - if ('location' in appOrOptions) { - dcOptions = appOrOptions; - app = getApp(); - } - else { - dcOptions = optionalOptions; - app = appOrOptions; - } - if (!app || Object.keys(app).length === 0) { - app = getApp(); - } - const provider = _getProvider(app, 'data-connect'); - const identifier = JSON.stringify(dcOptions); - if (provider.isInitialized(identifier)) { - const dcInstance = provider.getImmediate({ identifier }); - const options = provider.getOptions(identifier); - const optionsValid = Object.keys(options).length > 0; - if (optionsValid) { - logDebug('Re-using cached instance'); - return dcInstance; - } - } - validateDCOptions(dcOptions); - logDebug('Creating new DataConnect instance'); - // Initialize with options. - return provider.initialize({ - instanceIdentifier: identifier, - options: dcOptions - }); -} -/** - * - * @param dcOptions - * @returns {void} - * @internal - */ -function validateDCOptions(dcOptions) { - const fields = ['connector', 'location', 'service']; - if (!dcOptions) { - throw new DataConnectError(Code.INVALID_ARGUMENT, 'DC Option Required'); - } - fields.forEach(field => { - if (dcOptions[field] === null || dcOptions[field] === undefined) { - throw new DataConnectError(Code.INVALID_ARGUMENT, `${field} Required`); - } - }); - return true; -} -/** - * Delete DataConnect instance - * @param dataConnect DataConnect instance - * @returns - */ -function terminate(dataConnect) { - return dataConnect._delete(); - // TODO(mtewani): Stop pending tasks -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -function registerDataConnect(variant) { - setSDKVersion(SDK_VERSION$1); - _registerComponent(new Component('data-connect', (container, { instanceIdentifier: settings, options }) => { - const app = container.getProvider('app').getImmediate(); - const authProvider = container.getProvider('auth-internal'); - const appCheckProvider = container.getProvider('app-check-internal'); - let newOpts = options; - if (settings) { - newOpts = JSON.parse(settings); - } - if (!app.options.projectId) { - throw new DataConnectError(Code.INVALID_ARGUMENT, 'Project ID must be provided. Did you pass in a proper projectId to initializeApp?'); - } - return new DataConnect(app, { ...newOpts, projectId: app.options.projectId }, authProvider, appCheckProvider); - }, "PUBLIC" /* ComponentType.PUBLIC */).setMultipleInstances(true)); - registerVersion(name, version, variant); - // BUILD_TARGET will be replaced by values like esm, cjs, etc during the compilation - registerVersion(name, version, 'esm2020'); -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * Execute Query - * @param queryRef query to execute. - * @returns `QueryPromise` - */ -function executeQuery(queryRef) { - return queryRef.dataConnect._queryManager.executeQuery(queryRef); -} -/** - * Execute Query - * @param dcInstance Data Connect instance to use. - * @param queryName Query to execute - * @param variables Variables to execute with - * @param initialCache initial cache to use for client hydration - * @returns `QueryRef` - */ -function queryRef(dcInstance, queryName, variables, initialCache) { - dcInstance.setInitialized(); - dcInstance._queryManager.track(queryName, variables, initialCache); - return { - dataConnect: dcInstance, - refType: QUERY_STR, - name: queryName, - variables - }; -} -/** - * Converts serialized ref to query ref - * @param serializedRef ref to convert to `QueryRef` - * @returns `QueryRef` - */ -function toQueryRef(serializedRef) { - const { refInfo: { name, variables, connectorConfig } } = serializedRef; - return queryRef(getDataConnect(connectorConfig), name, variables); -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * The generated SDK will allow the user to pass in either the variable or the data connect instance with the variable, - * and this function validates the variables and returns back the DataConnect instance and variables based on the arguments passed in. - * @param connectorConfig - * @param dcOrVars - * @param vars - * @param validateVars - * @returns {DataConnect} and {Variables} instance - * @internal - */ -function validateArgs(connectorConfig, dcOrVars, vars, validateVars) { - let dcInstance; - let realVars; - if (dcOrVars && 'enableEmulator' in dcOrVars) { - dcInstance = dcOrVars; - realVars = vars; - } - else { - dcInstance = getDataConnect(connectorConfig); - realVars = dcOrVars; - } - if (!dcInstance || (!realVars && validateVars)) { - throw new DataConnectError(Code.INVALID_ARGUMENT, 'Variables required.'); - } - return { dc: dcInstance, vars: realVars }; -} - -/** - * @license - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * Subscribe to a `QueryRef` - * @param queryRefOrSerializedResult query ref or serialized result. - * @param observerOrOnNext observer object or next function. - * @param onError Callback to call when error gets thrown. - * @param onComplete Called when subscription completes. - * @returns `SubscriptionOptions` - */ -function subscribe(queryRefOrSerializedResult, observerOrOnNext, onError, onComplete) { - let ref; - let initialCache; - if ('refInfo' in queryRefOrSerializedResult) { - const serializedRef = queryRefOrSerializedResult; - const { data, source, fetchTime } = serializedRef; - initialCache = { - data, - source, - fetchTime - }; - ref = toQueryRef(serializedRef); - } - else { - ref = queryRefOrSerializedResult; - } - let onResult = undefined; - if (typeof observerOrOnNext === 'function') { - onResult = observerOrOnNext; - } - else { - onResult = observerOrOnNext.onNext; - onError = observerOrOnNext.onErr; - observerOrOnNext.onComplete; - } - if (!onResult) { - throw new DataConnectError(Code.INVALID_ARGUMENT, 'Must provide onNext'); - } - return ref.dataConnect._queryManager.addSubscription(ref, onResult, onError, initialCache); -} - -/** - * Firebase Data Connect - * - * @packageDocumentation - */ -registerDataConnect(); - -export { CallerSdkTypeEnum, Code, DataConnect, DataConnectError, DataConnectOperationError, MUTATION_STR, MutationManager, QUERY_STR, SOURCE_CACHE, SOURCE_SERVER, areTransportOptionsEqual, connectDataConnectEmulator, executeMutation, executeQuery, getDataConnect, mutationRef, parseOptions, queryRef, setLogLevel, subscribe, terminate, toQueryRef, validateArgs, validateDCOptions }; -//# sourceMappingURL=index.esm.js.map |
