'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var tslib = require('tslib'); var util = require('@firebase/util'); var component = require('@firebase/component'); var logger$1 = require('@firebase/logger'); var Storage = _interopDefault(require('dom-storage')); var xmlhttprequest = require('xmlhttprequest'); /** * @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. */ var _a; var ERRORS = (_a = {}, _a["no-app" /* NO_APP */] = "No Firebase App '{$appName}' has been created - " + 'call Firebase App.initializeApp()', _a["bad-app-name" /* BAD_APP_NAME */] = "Illegal App name: '{$appName}", _a["duplicate-app" /* DUPLICATE_APP */] = "Firebase App named '{$appName}' already exists", _a["app-deleted" /* APP_DELETED */] = "Firebase App named '{$appName}' already deleted", _a["invalid-app-argument" /* INVALID_APP_ARGUMENT */] = 'firebase.{$appName}() takes either no argument or a ' + 'Firebase App instance.', _a["invalid-log-argument" /* INVALID_LOG_ARGUMENT */] = 'First argument to `onLog` must be null or a function.', _a); var ERROR_FACTORY = new util.ErrorFactory('app', 'Firebase', ERRORS); var name$1 = "@firebase/app"; var version = "0.6.4"; var name$2 = "@firebase/analytics"; var name$3 = "@firebase/auth"; var name$4 = "@firebase/database"; var name$5 = "@firebase/functions"; var name$6 = "@firebase/installations"; var name$7 = "@firebase/messaging"; var name$8 = "@firebase/performance"; var name$9 = "@firebase/remote-config"; var name$a = "@firebase/storage"; var name$b = "@firebase/firestore"; var name$c = "firebase-wrapper"; /** * @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. */ var _a$1; var DEFAULT_ENTRY_NAME = '[DEFAULT]'; var PLATFORM_LOG_STRING = (_a$1 = {}, _a$1[name$1] = 'fire-core', _a$1[name$2] = 'fire-analytics', _a$1[name$3] = 'fire-auth', _a$1[name$4] = 'fire-rtdb', _a$1[name$5] = 'fire-fn', _a$1[name$6] = 'fire-iid', _a$1[name$7] = 'fire-fcm', _a$1[name$8] = 'fire-perf', _a$1[name$9] = 'fire-rc', _a$1[name$a] = 'fire-gcs', _a$1[name$b] = 'fire-fst', _a$1['fire-js'] = 'fire-js', _a$1[name$c] = 'fire-js-all', _a$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. */ var logger = new logger$1.Logger('@firebase/app'); /** * @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. */ /** * Global context object for a collection of services using * a shared authentication state. */ var FirebaseAppImpl = /** @class */ (function () { function FirebaseAppImpl(options, config, firebase_) { var e_1, _a; var _this = this; this.firebase_ = firebase_; this.isDeleted_ = false; this.name_ = config.name; this.automaticDataCollectionEnabled_ = config.automaticDataCollectionEnabled || false; this.options_ = util.deepCopy(options); this.container = new component.ComponentContainer(config.name); // add itself to container this._addComponent(new component.Component('app', function () { return _this; }, "PUBLIC" /* PUBLIC */)); try { // populate ComponentContainer with existing components for (var _b = tslib.__values(this.firebase_.INTERNAL.components.values()), _c = _b.next(); !_c.done; _c = _b.next()) { var component$1 = _c.value; this._addComponent(component$1); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } } Object.defineProperty(FirebaseAppImpl.prototype, "automaticDataCollectionEnabled", { get: function () { this.checkDestroyed_(); return this.automaticDataCollectionEnabled_; }, set: function (val) { this.checkDestroyed_(); this.automaticDataCollectionEnabled_ = val; }, enumerable: true, configurable: true }); Object.defineProperty(FirebaseAppImpl.prototype, "name", { get: function () { this.checkDestroyed_(); return this.name_; }, enumerable: true, configurable: true }); Object.defineProperty(FirebaseAppImpl.prototype, "options", { get: function () { this.checkDestroyed_(); return this.options_; }, enumerable: true, configurable: true }); FirebaseAppImpl.prototype.delete = function () { var _this = this; return new Promise(function (resolve) { _this.checkDestroyed_(); resolve(); }) .then(function () { _this.firebase_.INTERNAL.removeApp(_this.name_); return Promise.all(_this.container.getProviders().map(function (provider) { return provider.delete(); })); }) .then(function () { _this.isDeleted_ = true; }); }; /** * Return a service instance associated with this app (creating it * on demand), identified by the passed instanceIdentifier. * * NOTE: Currently storage and functions are the only ones that are leveraging this * functionality. They invoke it by calling: * * ```javascript * firebase.app().storage('STORAGE BUCKET ID') * ``` * * The service name is passed to this already * @internal */ FirebaseAppImpl.prototype._getService = function (name, instanceIdentifier) { if (instanceIdentifier === void 0) { instanceIdentifier = DEFAULT_ENTRY_NAME; } this.checkDestroyed_(); // getImmediate will always succeed because _getService is only called for registered components. return this.container.getProvider(name).getImmediate({ identifier: instanceIdentifier }); }; /** * Remove a service instance from the cache, so we will create a new instance for this service * when people try to get this service again. * * NOTE: currently only firestore is using this functionality to support firestore shutdown. * * @param name The service name * @param instanceIdentifier instance identifier in case multiple instances are allowed * @internal */ FirebaseAppImpl.prototype._removeServiceInstance = function (name, instanceIdentifier) { if (instanceIdentifier === void 0) { instanceIdentifier = DEFAULT_ENTRY_NAME; } // eslint-disable-next-line @typescript-eslint/no-explicit-any this.container.getProvider(name).clearInstance(instanceIdentifier); }; /** * @param component the component being added to this app's container */ FirebaseAppImpl.prototype._addComponent = function (component) { try { this.container.addComponent(component); } catch (e) { logger.debug("Component " + component.name + " failed to register with FirebaseApp " + this.name, e); } }; FirebaseAppImpl.prototype._addOrOverwriteComponent = function (component) { this.container.addOrOverwriteComponent(component); }; /** * This function will throw an Error if the App has already been deleted - * use before performing API actions on the App. */ FirebaseAppImpl.prototype.checkDestroyed_ = function () { if (this.isDeleted_) { throw ERROR_FACTORY.create("app-deleted" /* APP_DELETED */, { appName: this.name_ }); } }; return FirebaseAppImpl; }()); // Prevent dead-code elimination of these methods w/o invalid property // copying. (FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options) || FirebaseAppImpl.prototype.delete || console.log('dc'); var version$1 = "7.14.5"; /** * @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. */ /** * Because auth can't share code with other components, we attach the utility functions * in an internal namespace to share code. * This function return a firebase namespace object without * any utility functions, so it can be shared between the regular firebaseNamespace and * the lite version. */ function createFirebaseNamespaceCore(firebaseAppImpl) { var apps = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any var components = new Map(); // A namespace is a plain JavaScript Object. var namespace = { // Hack to prevent Babel from modifying the object returned // as the firebase namespace. // @ts-ignore __esModule: true, initializeApp: initializeApp, // @ts-ignore app: app, registerVersion: registerVersion, setLogLevel: logger$1.setLogLevel, onLog: onLog, // @ts-ignore apps: null, SDK_VERSION: version$1, INTERNAL: { registerComponent: registerComponent, removeApp: removeApp, components: components, useAsService: useAsService } }; // Inject a circular default export to allow Babel users who were previously // using: // // import firebase from 'firebase'; // which becomes: var firebase = require('firebase').default; // // instead of // // import * as firebase from 'firebase'; // which becomes: var firebase = require('firebase'); // eslint-disable-next-line @typescript-eslint/no-explicit-any namespace['default'] = namespace; // firebase.apps is a read-only getter. Object.defineProperty(namespace, 'apps', { get: getApps }); /** * Called by App.delete() - but before any services associated with the App * are deleted. */ function removeApp(name) { delete apps[name]; } /** * Get the App object for a given name (or DEFAULT). */ function app(name) { name = name || DEFAULT_ENTRY_NAME; if (!util.contains(apps, name)) { throw ERROR_FACTORY.create("no-app" /* NO_APP */, { appName: name }); } return apps[name]; } // @ts-ignore app['App'] = firebaseAppImpl; function initializeApp(options, rawConfig) { if (rawConfig === void 0) { rawConfig = {}; } if (typeof rawConfig !== 'object' || rawConfig === null) { var name_1 = rawConfig; rawConfig = { name: name_1 }; } var config = rawConfig; if (config.name === undefined) { config.name = DEFAULT_ENTRY_NAME; } var name = config.name; if (typeof name !== 'string' || !name) { throw ERROR_FACTORY.create("bad-app-name" /* BAD_APP_NAME */, { appName: String(name) }); } if (util.contains(apps, name)) { throw ERROR_FACTORY.create("duplicate-app" /* DUPLICATE_APP */, { appName: name }); } var app = new firebaseAppImpl(options, config, namespace); apps[name] = app; return app; } /* * Return an array of all the non-deleted FirebaseApps. */ function getApps() { // Make a copy so caller cannot mutate the apps list. return Object.keys(apps).map(function (name) { return apps[name]; }); } function registerComponent(component) { var e_1, _a; var componentName = component.name; if (components.has(componentName)) { logger.debug("There were multiple attempts to register component " + componentName + "."); return component.type === "PUBLIC" /* PUBLIC */ ? // eslint-disable-next-line @typescript-eslint/no-explicit-any namespace[componentName] : null; } components.set(componentName, component); // create service namespace for public components if (component.type === "PUBLIC" /* PUBLIC */) { // The Service namespace is an accessor function ... var serviceNamespace = function (appArg) { if (appArg === void 0) { appArg = app(); } // eslint-disable-next-line @typescript-eslint/no-explicit-any if (typeof appArg[componentName] !== 'function') { // Invalid argument. // This happens in the following case: firebase.storage('gs:/') throw ERROR_FACTORY.create("invalid-app-argument" /* INVALID_APP_ARGUMENT */, { appName: componentName }); } // Forward service instance lookup to the FirebaseApp. // eslint-disable-next-line @typescript-eslint/no-explicit-any return appArg[componentName](); }; // ... and a container for service-level properties. if (component.serviceProps !== undefined) { util.deepExtend(serviceNamespace, component.serviceProps); } // eslint-disable-next-line @typescript-eslint/no-explicit-any namespace[componentName] = serviceNamespace; // Patch the FirebaseAppImpl prototype // eslint-disable-next-line @typescript-eslint/no-explicit-any firebaseAppImpl.prototype[componentName] = // TODO: The eslint disable can be removed and the 'ignoreRestArgs' // option added to the no-explicit-any rule when ESlint releases it. // eslint-disable-next-line @typescript-eslint/no-explicit-any function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var serviceFxn = this._getService.bind(this, componentName); return serviceFxn.apply(this, component.multipleInstances ? args : []); }; } try { // add the component to existing app instances for (var _b = tslib.__values(Object.keys(apps)), _c = _b.next(); !_c.done; _c = _b.next()) { var appName = _c.value; apps[appName]._addComponent(component); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } return component.type === "PUBLIC" /* PUBLIC */ ? // eslint-disable-next-line @typescript-eslint/no-explicit-any namespace[componentName] : null; } function registerVersion(libraryKeyOrName, version, variant) { var _a; // TODO: We can use this check to whitelist strings when/if we set up // a good whitelist system. var library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName; if (variant) { library += "-" + variant; } var libraryMismatch = library.match(/\s|\//); var versionMismatch = version.match(/\s|\//); if (libraryMismatch || versionMismatch) { var warning = [ "Unable to register library \"" + library + "\" with version \"" + version + "\":" ]; if (libraryMismatch) { warning.push("library name \"" + library + "\" contains illegal characters (whitespace or \"/\")"); } if (libraryMismatch && versionMismatch) { warning.push('and'); } if (versionMismatch) { warning.push("version name \"" + version + "\" contains illegal characters (whitespace or \"/\")"); } logger.warn(warning.join(' ')); return; } registerComponent(new component.Component(library + "-version", function () { return ({ library: library, version: version }); }, "VERSION" /* VERSION */)); } function onLog(logCallback, options) { if (logCallback !== null && typeof logCallback !== 'function') { throw ERROR_FACTORY.create("invalid-log-argument" /* INVALID_LOG_ARGUMENT */, { appName: name }); } logger$1.setUserLogHandler(logCallback, options); } // Map the requested service to a registered service name // (used to map auth to serverAuth service when needed). function useAsService(app, name) { if (name === 'serverAuth') { return null; } var useService = name; return useService; } return namespace; } /** * @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. */ /** * Return a firebase namespace object. * * In production, this will be called exactly once and the result * assigned to the 'firebase' global. It may be called multiple times * in unit tests. */ function createFirebaseNamespace() { var namespace = createFirebaseNamespaceCore(FirebaseAppImpl); namespace.INTERNAL = tslib.__assign(tslib.__assign({}, namespace.INTERNAL), { createFirebaseNamespace: createFirebaseNamespace, extendNamespace: extendNamespace, createSubscribe: util.createSubscribe, ErrorFactory: util.ErrorFactory, deepExtend: util.deepExtend }); /** * Patch the top-level firebase namespace with additional properties. * * firebase.INTERNAL.extendNamespace() */ function extendNamespace(props) { util.deepExtend(namespace, props); } return namespace; } var firebase = createFirebaseNamespace(); /** * @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. */ var PlatformLoggerService = /** @class */ (function () { function PlatformLoggerService(container) { this.container = container; } // In initial implementation, this will be called by installations on // auth token refresh, and installations will send this string. PlatformLoggerService.prototype.getPlatformInfoString = function () { var providers = this.container.getProviders(); // Loop through providers and get library/version pairs from any that are // version components. return providers .map(function (provider) { if (isVersionServiceProvider(provider)) { var service = provider.getImmediate(); return service.library + "/" + service.version; } else { return null; } }) .filter(function (logString) { return logString; }) .join(' '); }; return PlatformLoggerService; }()); /** * * @param provider check if this provider provides a VersionService * * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider * provides VersionService. The provider is not necessarily a 'app-version' * provider. */ function isVersionServiceProvider(provider) { var component = provider.getComponent(); return (component === null || component === void 0 ? void 0 : component.type) === "VERSION" /* VERSION */; } /** * @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. */ function registerCoreComponents(firebase, variant) { firebase.INTERNAL.registerComponent(new component.Component('platform-logger', function (container) { return new PlatformLoggerService(container); }, "PRIVATE" /* PRIVATE */)); // Register `app` package. firebase.registerVersion(name$1, version, variant); // Register platform SDK identifier (no version). firebase.registerVersion('fire-js', ''); } /** * @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. */ firebase.INTERNAL.extendNamespace({ INTERNAL: { node: { localStorage: new Storage(null, { strict: true }), sessionStorage: new Storage(null, { strict: true }), XMLHttpRequest: xmlhttprequest.XMLHttpRequest } } }); var firebase$1 = firebase; registerCoreComponents(firebase$1, 'node'); exports.default = firebase$1; exports.firebase = firebase$1; //# sourceMappingURL=index.node.cjs.js.map