UNPKG

13.4 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.cjs.js","sources":["../src/api/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as firebase from 'firebase';\nimport { _FirebaseApp } from '@firebase/app-types/private';\nimport { FirebaseAuthInternal } from '@firebase/auth-interop-types';\nimport * as request from 'request';\nimport { base64 } from '@firebase/util';\nimport { setLogLevel, LogLevel } from '@firebase/logger';\nimport { Component, ComponentType } from '@firebase/component';\n\nexport { database, firestore } from 'firebase';\n\n/** If this environment variable is set, use it for the database emulator's address. */\nconst DATABASE_ADDRESS_ENV: string = 'FIREBASE_DATABASE_EMULATOR_ADDRESS';\n/** The default address for the local database emulator. */\nconst DATABASE_ADDRESS_DEFAULT: string = 'localhost:9000';\n/** The actual address for the database emulator */\nconst DATABASE_ADDRESS: string =\n process.env[DATABASE_ADDRESS_ENV] || DATABASE_ADDRESS_DEFAULT;\n\n/** If any of environment variable is set, use it for the Firestore emulator. */\nconst FIRESTORE_ADDRESS_ENVS: string[] = [\n 'FIRESTORE_EMULATOR_HOST',\n 'FIREBASE_FIRESTORE_EMULATOR_ADDRESS'\n];\n/** The default address for the local Firestore emulator. */\nconst FIRESTORE_ADDRESS_DEFAULT: string = 'localhost:8080';\n/** The actual address for the Firestore emulator */\nconst FIRESTORE_ADDRESS: string = FIRESTORE_ADDRESS_ENVS.reduce(\n (addr, name) => process.env[name] || addr,\n FIRESTORE_ADDRESS_DEFAULT\n);\n\n/** Passing this in tells the emulator to treat you as an admin. */\nconst ADMIN_TOKEN = 'owner';\n/** Create an unsecured JWT for the given auth payload. See https://tools.ietf.org/html/rfc7519#section-6. */\nfunction createUnsecuredJwt(auth: object): string {\n // Unsecured JWTs use \"none\" as the algorithm.\n const header = {\n alg: 'none',\n kid: 'fakekid'\n };\n // Ensure that the auth payload has a value for 'iat'.\n (auth as any).iat = (auth as any).iat || 0;\n // Use `uid` field as a backup when `sub` is missing.\n (auth as any).sub = (auth as any).sub || (auth as any).uid;\n if (!(auth as any).sub) {\n throw new Error(\"auth must be an object with a 'sub' or 'uid' field\");\n }\n // Unsecured JWTs use the empty string as a signature.\n const signature = '';\n return [\n base64.encodeString(JSON.stringify(header), /*webSafe=*/ false),\n base64.encodeString(JSON.stringify(auth), /*webSafe=*/ false),\n signature\n ].join('.');\n}\n\nexport function apps(): firebase.app.App[] {\n return firebase.apps;\n}\n\nexport type AppOptions = {\n databaseName?: string;\n projectId?: string;\n auth?: object;\n};\n/** Construct an App authenticated with options.auth. */\nexport function initializeTestApp(options: AppOptions): firebase.app.App {\n return initializeApp(\n options.auth ? createUnsecuredJwt(options.auth) : undefined,\n options.databaseName,\n options.projectId\n );\n}\n\nexport type AdminAppOptions = {\n databaseName?: string;\n projectId?: string;\n};\n/** Construct an App authenticated as an admin user. */\nexport function initializeAdminApp(options: AdminAppOptions): firebase.app.App {\n return initializeApp(ADMIN_TOKEN, options.databaseName, options.projectId);\n}\n\nfunction initializeApp(\n accessToken?: string,\n databaseName?: string,\n projectId?: string\n): firebase.app.App {\n let appOptions: { [key: string]: string } = {};\n if (databaseName) {\n appOptions['databaseURL'] = `http://${DATABASE_ADDRESS}?ns=${databaseName}`;\n }\n if (projectId) {\n appOptions['projectId'] = projectId;\n }\n const appName = 'app-' + new Date().getTime() + '-' + Math.random();\n let app = firebase.initializeApp(appOptions, appName);\n if (accessToken) {\n const mockAuthComponent = new Component(\n 'auth-internal',\n () =>\n ({\n getToken: async () => ({ accessToken: accessToken }),\n getUid: () => null,\n addAuthTokenListener: listener => {\n // Call listener once immediately with predefined accessToken.\n listener(accessToken);\n },\n removeAuthTokenListener: () => {}\n } as FirebaseAuthInternal),\n ComponentType.PRIVATE\n );\n\n ((app as unknown) as _FirebaseApp)._addOrOverwriteComponent(\n mockAuthComponent\n );\n }\n if (databaseName) {\n // Toggle network connectivity to force a reauthentication attempt.\n // This mitigates a minor race condition where the client can send the\n // first database request before authenticating.\n app.database().goOffline();\n app.database().goOnline();\n }\n if (projectId) {\n app.firestore().settings({\n host: FIRESTORE_ADDRESS,\n ssl: false\n });\n }\n /**\n Mute warnings for the previously-created database and whatever other\n objects were just created.\n */\n setLogLevel(LogLevel.ERROR);\n return app;\n}\n\nexport type LoadDatabaseRulesOptions = {\n databaseName: string;\n rules: string;\n};\nexport function loadDatabaseRules(\n options: LoadDatabaseRulesOptions\n): Promise<void> {\n if (!options.databaseName) {\n throw Error('databaseName not specified');\n }\n\n if (!options.rules) {\n throw Error('must provide rules to loadDatabaseRules');\n }\n\n return new Promise((resolve, reject) => {\n request.put(\n {\n uri: `http://${DATABASE_ADDRESS}/.settings/rules.json?ns=${options.databaseName}`,\n headers: { Authorization: 'Bearer owner' },\n body: options.rules\n },\n (err, resp, body) => {\n if (err) {\n reject(err);\n } else if (resp.statusCode !== 200) {\n reject(JSON.parse(body).error);\n } else {\n resolve();\n }\n }\n );\n });\n}\n\nexport type LoadFirestoreRulesOptions = {\n projectId: string;\n rules: string;\n};\nexport function loadFirestoreRules(\n options: LoadFirestoreRulesOptions\n): Promise<void> {\n if (!options.projectId) {\n throw new Error('projectId not specified');\n }\n\n if (!options.rules) {\n throw new Error('must provide rules to loadFirestoreRules');\n }\n\n return new Promise((resolve, reject) => {\n request.put(\n {\n uri: `http://${FIRESTORE_ADDRESS}/emulator/v1/projects/${options.projectId}:securityRules`,\n body: JSON.stringify({\n rules: {\n files: [{ content: options.rules }]\n }\n })\n },\n (err, resp, body) => {\n if (err) {\n reject(err);\n } else if (resp.statusCode !== 200) {\n console.log('body', body);\n reject(JSON.parse(body).error);\n } else {\n resolve();\n }\n }\n );\n });\n}\n\nexport type ClearFirestoreDataOptions = {\n projectId: string;\n};\nexport function clearFirestoreData(\n options: ClearFirestoreDataOptions\n): Promise<void> {\n if (!options.projectId) {\n throw new Error('projectId not specified');\n }\n\n return new Promise((resolve, reject) => {\n request.delete(\n {\n uri: `http://${FIRESTORE_ADDRESS}/emulator/v1/projects/${options.projectId}/databases/(default)/documents`,\n body: JSON.stringify({\n database: `projects/${options.projectId}/databases/(default)`\n })\n },\n (err, resp, body) => {\n if (err) {\n reject(err);\n } else if (resp.statusCode !== 200) {\n console.log('body', body);\n reject(JSON.parse(body).error);\n } else {\n resolve();\n }\n }\n );\n });\n}\n\nexport function assertFails(pr: Promise<any>): any {\n return pr.then(\n v =>\n Promise.reject(new Error('Expected request to fail, but it succeeded.')),\n err => err\n );\n}\n\nexport function assertSucceeds(pr: Promise<any>): any {\n return pr;\n}\n"],"names":["base64","firebase.apps","firebase.initializeApp","Component","setLogLevel","LogLevel","request.put","request.delete"],"mappings":"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"}
\No newline at end of file