{"version":3,"sources":["jsdelivr-header.js","/npm/abstracted-client@0.38.3/dist/cjs/db.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aACA,OAAO,eAAe,QAAS,aAAc,CAAE,OAAO,IACtD,MAAM,sBAAwB,QAAQ,uBAChC,eAAiB,QAAQ,kBACzB,cAAgB,QAAQ,iBAC9B,IAAI,iBACJ,SAAW,GACP,EAAgB,EAAsB,KAAI,GAAK,OAC/C,EAAgB,EAAuB,MAAI,GAAK,OACnD,CAHD,CAGG,gBAAkB,QAAQ,kBAAoB,QAAQ,gBAAkB,CAAC,IAC5E,QAAQ,qBAAuB,IAC/B,MAAM,WAAW,sBAAsB,WACnC,WAAA,CAAY,GACR,MAAM,GACN,KAAK,YAAc,SACnB,KAAK,cAAgB,IAAI,eAAe,aAExC,KAAK,WAAW,EACpB,CAKA,oBAAa,CAAQ,GACjB,MAAM,EAAM,IAAI,GAAG,GAEnB,aADM,EAAI,oBACH,CACX,CAEA,wBAAa,GAET,MAAM,QAAW,QAAQ,UAAU,MAAK,IAAM,QAAQ,mBAEtD,aADM,QAAQ,UAAU,MAAK,IAAM,QAAQ,wBACpC,MAAM,KAAK,IAAI,IAAI,EAAG,SAAS,KAAK,KAAK,GAAM,EAAE,QAC5D,CAIA,iBAAI,GACA,IAAK,KAAK,SACN,MAAM,IAAI,cAAc,YAAY,kEAExC,IAAK,KAAK,eAAgB,CACtB,IAAK,KAAK,SAAS,KACf,MAAM,IAAI,cAAc,YAAY,8EAExC,KAAK,eAAiB,KAAK,SAAS,IACxC,CACA,OAAO,KAAK,cAChB,CACA,UAAM,GACF,OAAI,KAAK,MACE,KAAK,OAEX,KAAK,mBACA,KAAK,oBAEX,KAAK,UACL,KAAK,YAAc,KAAK,KAAK,OACtB,KAAK,QAEhB,KAAK,MAAQ,KAAK,IAAI,OACf,KAAK,OAChB,CAOA,uBAAM,CAAkB,EAAQ,GAAU,GACtC,GAAI,sBAAsB,aAAa,SAE7B,KAAK,YAAY,CACnB,GAAI,EAAO,UAAY,CAAC,EACxB,KAAM,OAAO,OAAO,CAAE,UAAW,IAAM,EAAO,YAElD,KAAK,eAAiB,KAAK,MAAM,cACjC,KAAK,cAAe,MAEnB,CAED,GAAK,KAAK,aAmCN,QAAQ,KAAK,YAAY,EAAO,8BAnCZ,CAKpB,GAJI,QAAQ,IAAqB,kBAC7B,EAAS,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG,GAAS,KAAK,MAAM,QAAQ,IAAqB,oBAGzF,EAAO,SAAW,EAAO,aAAe,EAAO,YAChD,MAAM,IAAI,MAAM,iEAEpB,EAAO,KAAO,EAAO,MAAQ,EAAO,YAAY,QAAQ,kCAAmC,MAE3F,MAAM,QAAW,QAAQ,UAAU,MAAK,IAAM,QAA+C,yBACvF,QAAQ,UAAU,MAAK,IAAM,QAA8C,wBAC7E,SACM,QAAQ,UAAU,MAAK,IAAM,QAAgD,oBAEvF,IACI,MAAM,EAAc,IAAI,IAAI,EAAG,SAAS,KAAK,KAAK,GAAM,EAAE,QAC1D,KAAK,IAAM,EAAY,IAAI,EAAO,MAE1B,EAAG,SAAS,IAAI,EAAO,MACzB,EAAG,SAAS,cAAc,EAAQ,EAAO,KACnD,CACA,MAAO,GACH,IAAI,EAAE,UAAuD,IAA5C,EAAE,QAAQ,QAAQ,qBAK/B,MAAM,EAJN,QAAQ,IAAI,QAAQ,2CACpB,KAAK,cAAe,CAK5B,CACA,KAAK,SAAW,EAAG,QACnB,KAAK,UAAY,KAAK,IAAI,UAC9B,CAKI,EAAO,WACP,KAAK,sBAAkD,mBAArB,EAAO,UAClC,GAAY,EAAO,UAAU,GAC7B,GAAY,QAAQ,IAAI,aAAc,GAErD,CACJ,CAIA,yBAAA,GACS,KAAK,UACN,KAAK,UAAU,IAAI,mBAAmB,GAAG,SAAU,GAAS,KAAK,mBAAmB,KAAK,KAA7B,CAAmC,IAKvG,EAEJ,QAAQ,GAAK","file":"/npm/abstracted-client@0.38.3/dist/cjs/db.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/abstracted-client@0.38.3/dist/cjs/db.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst abstracted_firebase_1 = require(\"abstracted-firebase\");\nconst EventManager_1 = require(\"./EventManager\");\nconst ClientError_1 = require(\"./ClientError\");\nvar FirebaseBoolean;\n(function (FirebaseBoolean) {\n    FirebaseBoolean[FirebaseBoolean[\"true\"] = 1] = \"true\";\n    FirebaseBoolean[FirebaseBoolean[\"false\"] = 0] = \"false\";\n})(FirebaseBoolean = exports.FirebaseBoolean || (exports.FirebaseBoolean = {}));\nexports.MOCK_LOADING_TIMEOUT = 200;\nclass DB extends abstracted_firebase_1.RealTimeDB {\n    constructor(config) {\n        super(config);\n        this._clientType = \"client\";\n        this._eventManager = new EventManager_1.EventManager();\n        // this starts the \"listenForConnectionStatus\" event emitter\n        this.initialize(config);\n    }\n    /**\n     * Instantiates a DB and then waits for the connection\n     * to finish.\n     */\n    static async connect(config) {\n        const obj = new DB(config);\n        await obj.waitForConnection();\n        return obj;\n    }\n    /** lists the database names which are currently connected */\n    static async connectedTo() {\n        // tslint:disable-next-line:no-submodule-imports\n        const fb = await Promise.resolve().then(() => require(\"@firebase/app\"));\n        await Promise.resolve().then(() => require(\"@firebase/database\"));\n        return Array.from(new Set(fb.firebase.apps.map((i) => i.name)));\n    }\n    /**\n     * access to provider specific providers\n     */\n    get authProviders() {\n        if (!this._fbClass) {\n            throw new ClientError_1.ClientError(`There was a problem getting the Firebase default export/class!`);\n        }\n        if (!this._authProviders) {\n            if (!this._fbClass.auth) {\n                throw new ClientError_1.ClientError(`Attempt to get the authProviders getter before connecting to the database!`);\n            }\n            this._authProviders = this._fbClass.auth;\n        }\n        return this._authProviders;\n    }\n    async auth() {\n        if (this._auth) {\n            return this._auth;\n        }\n        if (!this.isConnected) {\n            await this.waitForConnection();\n        }\n        if (this._mocking) {\n            this._auth = await this.mock.auth();\n            return this._auth;\n        }\n        this._auth = this.app.auth();\n        return this._auth;\n    }\n    /**\n     * connect\n     *\n     * Asynchronously loads the firebase/app library and then\n     * initializes a connection to the database.\n     */\n    async connectToFirebase(config, useAuth = true) {\n        if (abstracted_firebase_1.isMockConfig(config)) {\n            // MOCK DB\n            await this.getFireMock({\n                db: config.mockData || {},\n                auth: Object.assign({ providers: [] }, config.mockAuth),\n            });\n            this._authProviders = this._mock.authProviders;\n            this._isConnected = true;\n        }\n        else {\n            // REAL DB\n            if (!this._isConnected) {\n                if (process.env[\"FIREBASE_CONFIG\"]) {\n                    config = Object.assign(Object.assign({}, config), JSON.parse(process.env[\"FIREBASE_CONFIG\"]));\n                }\n                config = config;\n                if (!config.apiKey || !config.authDomain || !config.databaseURL) {\n                    throw new Error(\"Trying to connect without appropriate firebase configuration!\");\n                }\n                config.name = config.name || config.databaseURL.replace(/.*https:\\W*([\\w-]*)\\.((.|\\n)*)/g, \"$1\");\n                // tslint:disable-next-line:no-submodule-imports\n                const fb = await Promise.resolve().then(() => require(/* webpackChunkName: \"firebase-app\" */ \"@firebase/app\"));\n                await Promise.resolve().then(() => require(/* webpackChunkName: \"firebase-db\" */ \"@firebase/database\"));\n                if (useAuth) {\n                    await Promise.resolve().then(() => require(/* webpackChunkName: \"firebase-auth\" */ \"@firebase/auth\"));\n                }\n                try {\n                    const runningApps = new Set(fb.firebase.apps.map((i) => i.name));\n                    this.app = runningApps.has(config.name)\n                        ? // TODO: does this connect to the right named DB?\n                            fb.firebase.app(config.name)\n                        : fb.firebase.initializeApp(config, config.name);\n                }\n                catch (e) {\n                    if (e.message && e.message.indexOf(\"app/duplicate-app\") !== -1) {\n                        console.log(`The \"${name}\" app already exists; will proceed.`);\n                        this._isConnected = true;\n                    }\n                    else {\n                        throw e;\n                    }\n                }\n                this._fbClass = fb.default;\n                this._database = this.app.database();\n            }\n            else {\n                console.info(`Database ${config.name} already connected`);\n            }\n            // TODO: relook at debugging func\n            if (config.debugging) {\n                this.enableDatabaseLogging(typeof config.debugging === \"function\"\n                    ? (message) => config.debugging(message)\n                    : (message) => console.log(\"[FIREBASE]\", message));\n            }\n        }\n    }\n    /**\n     * Sets up the listening process for connection status\n     */\n    listenForConnectionStatus() {\n        if (!this._mocking) {\n            this._database.ref(\".info/connected\").on(\"value\", (snap) => this._monitorConnection.bind(this)(snap));\n        }\n        else {\n            // console.info(`Listening for connection changes on Mock DB`);\n        }\n    }\n}\nexports.DB = DB;\n"]}