summaryrefslogtreecommitdiff
path: root/frontend-old/node_modules/@firebase/functions/dist/index.cjs.js
diff options
context:
space:
mode:
authoraltaf-creator <dev@altafcreator.com>2025-11-16 19:08:29 +0800
committeraltaf-creator <dev@altafcreator.com>2025-11-16 19:08:29 +0800
commit434aa8343fdcbb4d5002f934979913c099489bee (patch)
tree55bab4ec5a6151be57797d34f61faf5ea744471b /frontend-old/node_modules/@firebase/functions/dist/index.cjs.js
parent893c388d4e99442a36005e5971a87730623f946e (diff)
sdk, del
Diffstat (limited to 'frontend-old/node_modules/@firebase/functions/dist/index.cjs.js')
-rw-r--r--frontend-old/node_modules/@firebase/functions/dist/index.cjs.js978
1 files changed, 0 insertions, 978 deletions
diff --git a/frontend-old/node_modules/@firebase/functions/dist/index.cjs.js b/frontend-old/node_modules/@firebase/functions/dist/index.cjs.js
deleted file mode 100644
index fafce2e..0000000
--- a/frontend-old/node_modules/@firebase/functions/dist/index.cjs.js
+++ /dev/null
@@ -1,978 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-var app = require('@firebase/app');
-var util = require('@firebase/util');
-var component = require('@firebase/component');
-
-/**
- * @license
- * Copyright 2017 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 LONG_TYPE = 'type.googleapis.com/google.protobuf.Int64Value';
-const UNSIGNED_LONG_TYPE = 'type.googleapis.com/google.protobuf.UInt64Value';
-function mapValues(
-// { [k: string]: unknown } is no longer a wildcard assignment target after typescript 3.5
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-o, f) {
- const result = {};
- for (const key in o) {
- if (o.hasOwnProperty(key)) {
- result[key] = f(o[key]);
- }
- }
- return result;
-}
-/**
- * Takes data and encodes it in a JSON-friendly way, such that types such as
- * Date are preserved.
- * @internal
- * @param data - Data to encode.
- */
-function encode(data) {
- if (data == null) {
- return null;
- }
- if (data instanceof Number) {
- data = data.valueOf();
- }
- if (typeof data === 'number' && isFinite(data)) {
- // Any number in JS is safe to put directly in JSON and parse as a double
- // without any loss of precision.
- return data;
- }
- if (data === true || data === false) {
- return data;
- }
- if (Object.prototype.toString.call(data) === '[object String]') {
- return data;
- }
- if (data instanceof Date) {
- return data.toISOString();
- }
- if (Array.isArray(data)) {
- return data.map(x => encode(x));
- }
- if (typeof data === 'function' || typeof data === 'object') {
- return mapValues(data, x => encode(x));
- }
- // If we got this far, the data is not encodable.
- throw new Error('Data cannot be encoded in JSON: ' + data);
-}
-/**
- * Takes data that's been encoded in a JSON-friendly form and returns a form
- * with richer datatypes, such as Dates, etc.
- * @internal
- * @param json - JSON to convert.
- */
-function decode(json) {
- if (json == null) {
- return json;
- }
- if (json['@type']) {
- switch (json['@type']) {
- case LONG_TYPE:
- // Fall through and handle this the same as unsigned.
- case UNSIGNED_LONG_TYPE: {
- // Technically, this could work return a valid number for malformed
- // data if there was a number followed by garbage. But it's just not
- // worth all the extra code to detect that case.
- const value = Number(json['value']);
- if (isNaN(value)) {
- throw new Error('Data cannot be decoded from JSON: ' + json);
- }
- return value;
- }
- default: {
- throw new Error('Data cannot be decoded from JSON: ' + json);
- }
- }
- }
- if (Array.isArray(json)) {
- return json.map(x => decode(x));
- }
- if (typeof json === 'function' || typeof json === 'object') {
- return mapValues(json, x => decode(x));
- }
- // Anything else is safe to return.
- return json;
-}
-
-/**
- * @license
- * Copyright 2020 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.
- */
-/**
- * Type constant for Firebase Functions.
- */
-const FUNCTIONS_TYPE = 'functions';
-
-/**
- * @license
- * Copyright 2017 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.
- */
-/**
- * Standard error codes for different ways a request can fail, as defined by:
- * https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
- *
- * This map is used primarily to convert from a backend error code string to
- * a client SDK error code string, and make sure it's in the supported set.
- */
-const errorCodeMap = {
- OK: 'ok',
- CANCELLED: 'cancelled',
- UNKNOWN: 'unknown',
- INVALID_ARGUMENT: 'invalid-argument',
- DEADLINE_EXCEEDED: 'deadline-exceeded',
- NOT_FOUND: 'not-found',
- ALREADY_EXISTS: 'already-exists',
- PERMISSION_DENIED: 'permission-denied',
- UNAUTHENTICATED: 'unauthenticated',
- RESOURCE_EXHAUSTED: 'resource-exhausted',
- FAILED_PRECONDITION: 'failed-precondition',
- ABORTED: 'aborted',
- OUT_OF_RANGE: 'out-of-range',
- UNIMPLEMENTED: 'unimplemented',
- INTERNAL: 'internal',
- UNAVAILABLE: 'unavailable',
- DATA_LOSS: 'data-loss'
-};
-/**
- * An error returned by the Firebase Functions client SDK.
- *
- * See {@link FunctionsErrorCode} for full documentation of codes.
- *
- * @public
- */
-class FunctionsError extends util.FirebaseError {
- /**
- * Constructs a new instance of the `FunctionsError` class.
- */
- constructor(
- /**
- * A standard error code that will be returned to the client. This also
- * determines the HTTP status code of the response, as defined in code.proto.
- */
- code, message,
- /**
- * Additional details to be converted to JSON and included in the error response.
- */
- details) {
- super(`${FUNCTIONS_TYPE}/${code}`, message || '');
- this.details = details;
- // Since the FirebaseError constructor sets the prototype of `this` to FirebaseError.prototype,
- // we also have to do it in all subclasses to allow for correct `instanceof` checks.
- Object.setPrototypeOf(this, FunctionsError.prototype);
- }
-}
-/**
- * Takes an HTTP status code and returns the corresponding ErrorCode.
- * This is the standard HTTP status code -> error mapping defined in:
- * https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
- *
- * @param status An HTTP status code.
- * @return The corresponding ErrorCode, or ErrorCode.UNKNOWN if none.
- */
-function codeForHTTPStatus(status) {
- // Make sure any successful status is OK.
- if (status >= 200 && status < 300) {
- return 'ok';
- }
- switch (status) {
- case 0:
- // This can happen if the server returns 500.
- return 'internal';
- case 400:
- return 'invalid-argument';
- case 401:
- return 'unauthenticated';
- case 403:
- return 'permission-denied';
- case 404:
- return 'not-found';
- case 409:
- return 'aborted';
- case 429:
- return 'resource-exhausted';
- case 499:
- return 'cancelled';
- case 500:
- return 'internal';
- case 501:
- return 'unimplemented';
- case 503:
- return 'unavailable';
- case 504:
- return 'deadline-exceeded';
- }
- return 'unknown';
-}
-/**
- * Takes an HTTP response and returns the corresponding Error, if any.
- */
-function _errorForResponse(status, bodyJSON) {
- let code = codeForHTTPStatus(status);
- // Start with reasonable defaults from the status code.
- let description = code;
- let details = undefined;
- // Then look through the body for explicit details.
- try {
- const errorJSON = bodyJSON && bodyJSON.error;
- if (errorJSON) {
- const status = errorJSON.status;
- if (typeof status === 'string') {
- if (!errorCodeMap[status]) {
- // They must've included an unknown error code in the body.
- return new FunctionsError('internal', 'internal');
- }
- code = errorCodeMap[status];
- // TODO(klimt): Add better default descriptions for error enums.
- // The default description needs to be updated for the new code.
- description = status;
- }
- const message = errorJSON.message;
- if (typeof message === 'string') {
- description = message;
- }
- details = errorJSON.details;
- if (details !== undefined) {
- details = decode(details);
- }
- }
- }
- catch (e) {
- // If we couldn't parse explicit error data, that's fine.
- }
- if (code === 'ok') {
- // Technically, there's an edge case where a developer could explicitly
- // return an error code of OK, and we will treat it as success, but that
- // seems reasonable.
- return null;
- }
- return new FunctionsError(code, description, details);
-}
-
-/**
- * @license
- * Copyright 2017 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.
- */
-/**
- * Helper class to get metadata that should be included with a function call.
- * @internal
- */
-class ContextProvider {
- constructor(app$1, authProvider, messagingProvider, appCheckProvider) {
- this.app = app$1;
- this.auth = null;
- this.messaging = null;
- this.appCheck = null;
- this.serverAppAppCheckToken = null;
- if (app._isFirebaseServerApp(app$1) && app$1.settings.appCheckToken) {
- this.serverAppAppCheckToken = app$1.settings.appCheckToken;
- }
- this.auth = authProvider.getImmediate({ optional: true });
- this.messaging = messagingProvider.getImmediate({
- optional: true
- });
- if (!this.auth) {
- authProvider.get().then(auth => (this.auth = auth), () => {
- /* get() never rejects */
- });
- }
- if (!this.messaging) {
- messagingProvider.get().then(messaging => (this.messaging = messaging), () => {
- /* get() never rejects */
- });
- }
- if (!this.appCheck) {
- appCheckProvider?.get().then(appCheck => (this.appCheck = appCheck), () => {
- /* get() never rejects */
- });
- }
- }
- async getAuthToken() {
- if (!this.auth) {
- return undefined;
- }
- try {
- const token = await this.auth.getToken();
- return token?.accessToken;
- }
- catch (e) {
- // If there's any error when trying to get the auth token, leave it off.
- return undefined;
- }
- }
- async getMessagingToken() {
- if (!this.messaging ||
- !('Notification' in self) ||
- Notification.permission !== 'granted') {
- return undefined;
- }
- try {
- return await this.messaging.getToken();
- }
- catch (e) {
- // We don't warn on this, because it usually means messaging isn't set up.
- // console.warn('Failed to retrieve instance id token.', e);
- // If there's any error when trying to get the token, leave it off.
- return undefined;
- }
- }
- async getAppCheckToken(limitedUseAppCheckTokens) {
- if (this.serverAppAppCheckToken) {
- return this.serverAppAppCheckToken;
- }
- if (this.appCheck) {
- const result = limitedUseAppCheckTokens
- ? await this.appCheck.getLimitedUseToken()
- : await this.appCheck.getToken();
- if (result.error) {
- // Do not send the App Check header to the functions endpoint if
- // there was an error from the App Check exchange endpoint. The App
- // Check SDK will already have logged the error to console.
- return null;
- }
- return result.token;
- }
- return null;
- }
- async getContext(limitedUseAppCheckTokens) {
- const authToken = await this.getAuthToken();
- const messagingToken = await this.getMessagingToken();
- const appCheckToken = await this.getAppCheckToken(limitedUseAppCheckTokens);
- return { authToken, messagingToken, appCheckToken };
- }
-}
-
-/**
- * @license
- * Copyright 2017 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 DEFAULT_REGION = 'us-central1';
-const responseLineRE = /^data: (.*?)(?:\n|$)/;
-/**
- * Returns a Promise that will be rejected after the given duration.
- * The error will be of type FunctionsError.
- *
- * @param millis Number of milliseconds to wait before rejecting.
- */
-function failAfter(millis) {
- // Node timers and browser timers are fundamentally incompatible, but we
- // don't care about the value here
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- let timer = null;
- return {
- promise: new Promise((_, reject) => {
- timer = setTimeout(() => {
- reject(new FunctionsError('deadline-exceeded', 'deadline-exceeded'));
- }, millis);
- }),
- cancel: () => {
- if (timer) {
- clearTimeout(timer);
- }
- }
- };
-}
-/**
- * The main class for the Firebase Functions SDK.
- * @internal
- */
-class FunctionsService {
- /**
- * Creates a new Functions service for the given app.
- * @param app - The FirebaseApp to use.
- */
- constructor(app, authProvider, messagingProvider, appCheckProvider, regionOrCustomDomain = DEFAULT_REGION, fetchImpl = (...args) => fetch(...args)) {
- this.app = app;
- this.fetchImpl = fetchImpl;
- this.emulatorOrigin = null;
- this.contextProvider = new ContextProvider(app, authProvider, messagingProvider, appCheckProvider);
- // Cancels all ongoing requests when resolved.
- this.cancelAllRequests = new Promise(resolve => {
- this.deleteService = () => {
- return Promise.resolve(resolve());
- };
- });
- // Resolve the region or custom domain overload by attempting to parse it.
- try {
- const url = new URL(regionOrCustomDomain);
- this.customDomain =
- url.origin + (url.pathname === '/' ? '' : url.pathname);
- this.region = DEFAULT_REGION;
- }
- catch (e) {
- this.customDomain = null;
- this.region = regionOrCustomDomain;
- }
- }
- _delete() {
- return this.deleteService();
- }
- /**
- * Returns the URL for a callable with the given name.
- * @param name - The name of the callable.
- * @internal
- */
- _url(name) {
- const projectId = this.app.options.projectId;
- if (this.emulatorOrigin !== null) {
- const origin = this.emulatorOrigin;
- return `${origin}/${projectId}/${this.region}/${name}`;
- }
- if (this.customDomain !== null) {
- return `${this.customDomain}/${name}`;
- }
- return `https://${this.region}-${projectId}.cloudfunctions.net/${name}`;
- }
-}
-/**
- * Modify this instance to communicate with the Cloud Functions emulator.
- *
- * Note: this must be called before this instance has been used to do any operations.
- *
- * @param host The emulator host (ex: localhost)
- * @param port The emulator port (ex: 5001)
- * @public
- */
-function connectFunctionsEmulator$1(functionsInstance, host, port) {
- const useSsl = util.isCloudWorkstation(host);
- functionsInstance.emulatorOrigin = `http${useSsl ? 's' : ''}://${host}:${port}`;
- // Workaround to get cookies in Firebase Studio
- if (useSsl) {
- void util.pingServer(functionsInstance.emulatorOrigin + '/backends');
- util.updateEmulatorBanner('Functions', true);
- }
-}
-/**
- * Returns a reference to the callable https trigger with the given name.
- * @param name - The name of the trigger.
- * @public
- */
-function httpsCallable$1(functionsInstance, name, options) {
- const callable = (data) => {
- return call(functionsInstance, name, data, options || {});
- };
- callable.stream = (data, options) => {
- return stream(functionsInstance, name, data, options);
- };
- return callable;
-}
-/**
- * Returns a reference to the callable https trigger with the given url.
- * @param url - The url of the trigger.
- * @public
- */
-function httpsCallableFromURL$1(functionsInstance, url, options) {
- const callable = (data) => {
- return callAtURL(functionsInstance, url, data, options || {});
- };
- callable.stream = (data, options) => {
- return streamAtURL(functionsInstance, url, data, options || {});
- };
- return callable;
-}
-function getCredentials(functionsInstance) {
- return functionsInstance.emulatorOrigin &&
- util.isCloudWorkstation(functionsInstance.emulatorOrigin)
- ? 'include'
- : undefined;
-}
-/**
- * Does an HTTP POST and returns the completed response.
- * @param url The url to post to.
- * @param body The JSON body of the post.
- * @param headers The HTTP headers to include in the request.
- * @param functionsInstance functions instance that is calling postJSON
- * @return A Promise that will succeed when the request finishes.
- */
-async function postJSON(url, body, headers, fetchImpl, functionsInstance) {
- headers['Content-Type'] = 'application/json';
- let response;
- try {
- response = await fetchImpl(url, {
- method: 'POST',
- body: JSON.stringify(body),
- headers,
- credentials: getCredentials(functionsInstance)
- });
- }
- catch (e) {
- // This could be an unhandled error on the backend, or it could be a
- // network error. There's no way to know, since an unhandled error on the
- // backend will fail to set the proper CORS header, and thus will be
- // treated as a network error by fetch.
- return {
- status: 0,
- json: null
- };
- }
- let json = null;
- try {
- json = await response.json();
- }
- catch (e) {
- // If we fail to parse JSON, it will fail the same as an empty body.
- }
- return {
- status: response.status,
- json
- };
-}
-/**
- * Creates authorization headers for Firebase Functions requests.
- * @param functionsInstance The Firebase Functions service instance.
- * @param options Options for the callable function, including AppCheck token settings.
- * @return A Promise that resolves a headers map to include in outgoing fetch request.
- */
-async function makeAuthHeaders(functionsInstance, options) {
- const headers = {};
- const context = await functionsInstance.contextProvider.getContext(options.limitedUseAppCheckTokens);
- if (context.authToken) {
- headers['Authorization'] = 'Bearer ' + context.authToken;
- }
- if (context.messagingToken) {
- headers['Firebase-Instance-ID-Token'] = context.messagingToken;
- }
- if (context.appCheckToken !== null) {
- headers['X-Firebase-AppCheck'] = context.appCheckToken;
- }
- return headers;
-}
-/**
- * Calls a callable function asynchronously and returns the result.
- * @param name The name of the callable trigger.
- * @param data The data to pass as params to the function.
- */
-function call(functionsInstance, name, data, options) {
- const url = functionsInstance._url(name);
- return callAtURL(functionsInstance, url, data, options);
-}
-/**
- * Calls a callable function asynchronously and returns the result.
- * @param url The url of the callable trigger.
- * @param data The data to pass as params to the function.
- */
-async function callAtURL(functionsInstance, url, data, options) {
- // Encode any special types, such as dates, in the input data.
- data = encode(data);
- const body = { data };
- // Add a header for the authToken.
- const headers = await makeAuthHeaders(functionsInstance, options);
- // Default timeout to 70s, but let the options override it.
- const timeout = options.timeout || 70000;
- const failAfterHandle = failAfter(timeout);
- const response = await Promise.race([
- postJSON(url, body, headers, functionsInstance.fetchImpl, functionsInstance),
- failAfterHandle.promise,
- functionsInstance.cancelAllRequests
- ]);
- // Always clear the failAfter timeout
- failAfterHandle.cancel();
- // If service was deleted, interrupted response throws an error.
- if (!response) {
- throw new FunctionsError('cancelled', 'Firebase Functions instance was deleted.');
- }
- // Check for an error status, regardless of http status.
- const error = _errorForResponse(response.status, response.json);
- if (error) {
- throw error;
- }
- if (!response.json) {
- throw new FunctionsError('internal', 'Response is not valid JSON object.');
- }
- let responseData = response.json.data;
- // TODO(klimt): For right now, allow "result" instead of "data", for
- // backwards compatibility.
- if (typeof responseData === 'undefined') {
- responseData = response.json.result;
- }
- if (typeof responseData === 'undefined') {
- // Consider the response malformed.
- throw new FunctionsError('internal', 'Response is missing data field.');
- }
- // Decode any special types, such as dates, in the returned data.
- const decodedData = decode(responseData);
- return { data: decodedData };
-}
-/**
- * Calls a callable function asynchronously and returns a streaming result.
- * @param name The name of the callable trigger.
- * @param data The data to pass as params to the function.
- * @param options Streaming request options.
- */
-function stream(functionsInstance, name, data, options) {
- const url = functionsInstance._url(name);
- return streamAtURL(functionsInstance, url, data, options || {});
-}
-/**
- * Calls a callable function asynchronously and return a streaming result.
- * @param url The url of the callable trigger.
- * @param data The data to pass as params to the function.
- * @param options Streaming request options.
- */
-async function streamAtURL(functionsInstance, url, data, options) {
- // Encode any special types, such as dates, in the input data.
- data = encode(data);
- const body = { data };
- //
- // Add a header for the authToken.
- const headers = await makeAuthHeaders(functionsInstance, options);
- headers['Content-Type'] = 'application/json';
- headers['Accept'] = 'text/event-stream';
- let response;
- try {
- response = await functionsInstance.fetchImpl(url, {
- method: 'POST',
- body: JSON.stringify(body),
- headers,
- signal: options?.signal,
- credentials: getCredentials(functionsInstance)
- });
- }
- catch (e) {
- if (e instanceof Error && e.name === 'AbortError') {
- const error = new FunctionsError('cancelled', 'Request was cancelled.');
- return {
- data: Promise.reject(error),
- stream: {
- [Symbol.asyncIterator]() {
- return {
- next() {
- return Promise.reject(error);
- }
- };
- }
- }
- };
- }
- // This could be an unhandled error on the backend, or it could be a
- // network error. There's no way to know, since an unhandled error on the
- // backend will fail to set the proper CORS header, and thus will be
- // treated as a network error by fetch.
- const error = _errorForResponse(0, null);
- return {
- data: Promise.reject(error),
- // Return an empty async iterator
- stream: {
- [Symbol.asyncIterator]() {
- return {
- next() {
- return Promise.reject(error);
- }
- };
- }
- }
- };
- }
- let resultResolver;
- let resultRejecter;
- const resultPromise = new Promise((resolve, reject) => {
- resultResolver = resolve;
- resultRejecter = reject;
- });
- options?.signal?.addEventListener('abort', () => {
- const error = new FunctionsError('cancelled', 'Request was cancelled.');
- resultRejecter(error);
- });
- const reader = response.body.getReader();
- const rstream = createResponseStream(reader, resultResolver, resultRejecter, options?.signal);
- return {
- stream: {
- [Symbol.asyncIterator]() {
- const rreader = rstream.getReader();
- return {
- async next() {
- const { value, done } = await rreader.read();
- return { value: value, done };
- },
- async return() {
- await rreader.cancel();
- return { done: true, value: undefined };
- }
- };
- }
- },
- data: resultPromise
- };
-}
-/**
- * Creates a ReadableStream that processes a streaming response from a streaming
- * callable function that returns data in server-sent event format.
- *
- * @param reader The underlying reader providing raw response data
- * @param resultResolver Callback to resolve the final result when received
- * @param resultRejecter Callback to reject with an error if encountered
- * @param signal Optional AbortSignal to cancel the stream processing
- * @returns A ReadableStream that emits decoded messages from the response
- *
- * The returned ReadableStream:
- * 1. Emits individual messages when "message" data is received
- * 2. Resolves with the final result when a "result" message is received
- * 3. Rejects with an error if an "error" message is received
- */
-function createResponseStream(reader, resultResolver, resultRejecter, signal) {
- const processLine = (line, controller) => {
- const match = line.match(responseLineRE);
- // ignore all other lines (newline, comments, etc.)
- if (!match) {
- return;
- }
- const data = match[1];
- try {
- const jsonData = JSON.parse(data);
- if ('result' in jsonData) {
- resultResolver(decode(jsonData.result));
- return;
- }
- if ('message' in jsonData) {
- controller.enqueue(decode(jsonData.message));
- return;
- }
- if ('error' in jsonData) {
- const error = _errorForResponse(0, jsonData);
- controller.error(error);
- resultRejecter(error);
- return;
- }
- }
- catch (error) {
- if (error instanceof FunctionsError) {
- controller.error(error);
- resultRejecter(error);
- return;
- }
- // ignore other parsing errors
- }
- };
- const decoder = new TextDecoder();
- return new ReadableStream({
- start(controller) {
- let currentText = '';
- return pump();
- async function pump() {
- if (signal?.aborted) {
- const error = new FunctionsError('cancelled', 'Request was cancelled');
- controller.error(error);
- resultRejecter(error);
- return Promise.resolve();
- }
- try {
- const { value, done } = await reader.read();
- if (done) {
- if (currentText.trim()) {
- processLine(currentText.trim(), controller);
- }
- controller.close();
- return;
- }
- if (signal?.aborted) {
- const error = new FunctionsError('cancelled', 'Request was cancelled');
- controller.error(error);
- resultRejecter(error);
- await reader.cancel();
- return;
- }
- currentText += decoder.decode(value, { stream: true });
- const lines = currentText.split('\n');
- currentText = lines.pop() || '';
- for (const line of lines) {
- if (line.trim()) {
- processLine(line.trim(), controller);
- }
- }
- return pump();
- }
- catch (error) {
- const functionsError = error instanceof FunctionsError
- ? error
- : _errorForResponse(0, null);
- controller.error(functionsError);
- resultRejecter(functionsError);
- }
- }
- },
- cancel() {
- return reader.cancel();
- }
- });
-}
-
-const name = "@firebase/functions";
-const version = "0.13.1";
-
-/**
- * @license
- * Copyright 2019 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 AUTH_INTERNAL_NAME = 'auth-internal';
-const APP_CHECK_INTERNAL_NAME = 'app-check-internal';
-const MESSAGING_INTERNAL_NAME = 'messaging-internal';
-function registerFunctions(variant) {
- const factory = (container, { instanceIdentifier: regionOrCustomDomain }) => {
- // Dependencies
- const app = container.getProvider('app').getImmediate();
- const authProvider = container.getProvider(AUTH_INTERNAL_NAME);
- const messagingProvider = container.getProvider(MESSAGING_INTERNAL_NAME);
- const appCheckProvider = container.getProvider(APP_CHECK_INTERNAL_NAME);
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- return new FunctionsService(app, authProvider, messagingProvider, appCheckProvider, regionOrCustomDomain);
- };
- app._registerComponent(new component.Component(FUNCTIONS_TYPE, factory, "PUBLIC" /* ComponentType.PUBLIC */).setMultipleInstances(true));
- app.registerVersion(name, version, variant);
- // BUILD_TARGET will be replaced by values like esm, cjs, etc during the compilation
- app.registerVersion(name, version, 'cjs2020');
-}
-
-/**
- * @license
- * Copyright 2020 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.
- */
-/**
- * Returns a {@link Functions} instance for the given app.
- * @param app - The {@link @firebase/app#FirebaseApp} to use.
- * @param regionOrCustomDomain - one of:
- * a) The region the callable functions are located in (ex: us-central1)
- * b) A custom domain hosting the callable functions (ex: https://mydomain.com)
- * @public
- */
-function getFunctions(app$1 = app.getApp(), regionOrCustomDomain = DEFAULT_REGION) {
- // Dependencies
- const functionsProvider = app._getProvider(util.getModularInstance(app$1), FUNCTIONS_TYPE);
- const functionsInstance = functionsProvider.getImmediate({
- identifier: regionOrCustomDomain
- });
- const emulator = util.getDefaultEmulatorHostnameAndPort('functions');
- if (emulator) {
- connectFunctionsEmulator(functionsInstance, ...emulator);
- }
- return functionsInstance;
-}
-/**
- * Modify this instance to communicate with the Cloud Functions emulator.
- *
- * Note: this must be called before this instance has been used to do any operations.
- *
- * @param host - The emulator host (ex: localhost)
- * @param port - The emulator port (ex: 5001)
- * @public
- */
-function connectFunctionsEmulator(functionsInstance, host, port) {
- connectFunctionsEmulator$1(util.getModularInstance(functionsInstance), host, port);
-}
-/**
- * Returns a reference to the callable HTTPS trigger with the given name.
- * @param name - The name of the trigger.
- * @public
- */
-function httpsCallable(functionsInstance, name, options) {
- return httpsCallable$1(util.getModularInstance(functionsInstance), name, options);
-}
-/**
- * Returns a reference to the callable HTTPS trigger with the specified url.
- * @param url - The url of the trigger.
- * @public
- */
-function httpsCallableFromURL(functionsInstance, url, options) {
- return httpsCallableFromURL$1(util.getModularInstance(functionsInstance), url, options);
-}
-
-/**
- * Cloud Functions for Firebase
- *
- * @packageDocumentation
- */
-registerFunctions();
-
-exports.FunctionsError = FunctionsError;
-exports.connectFunctionsEmulator = connectFunctionsEmulator;
-exports.getFunctions = getFunctions;
-exports.httpsCallable = httpsCallable;
-exports.httpsCallableFromURL = httpsCallableFromURL;
-//# sourceMappingURL=index.cjs.js.map