{"version":3,"sources":["jsdelivr-header.js","/npm/firebase-authentication-google-apps-script@1.0.2/dist/FirebaseAuthentication.js"],"names":[],"mappings":"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","file":"/npm/firebase-authentication-google-apps-script@1.0.2/dist/FirebaseAuthentication.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/firebase-authentication-google-apps-script@1.0.2/dist/FirebaseAuthentication.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\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAuth = exports.FirebaseAuthentication = void 0;\n__exportStar(require(\"./@types\"), exports);\nclass FirebaseAuthentication {\n    constructor(email, key, projectId) {\n        this.email = email;\n        this.key = key;\n        this.projectId = projectId;\n    }\n    static getAuth(email, key, projectId) {\n        return new FirebaseAuthentication(email, key, projectId);\n    }\n    getUserByUid(uid) {\n        const response = this.requestWithAuth('/accounts:lookup', 'post', {\n            localId: [uid],\n        });\n        return this.pickUser(response.users);\n    }\n    getUserByLocalId(localId) {\n        // Just alias\n        return this.getUserByUid(localId);\n    }\n    getUserByEmail(email) {\n        const response = this.requestWithAuth('/accounts:lookup', 'post', {\n            email: [email],\n        });\n        return this.pickUser(response.users);\n    }\n    getUserByPhoneNumber(phoneNumber) {\n        const response = this.requestWithAuth('/accounts:lookup', 'post', {\n            phoneNumber: [phoneNumber],\n        });\n        console.log(response.users[0].providerUserInfo);\n        return this.pickUser(response.users);\n    }\n    getUsers(maxResults = 1000) {\n        const response = this.requestWithAuth('/accounts:batchGet', 'get', { maxResults });\n        return response.users || [];\n    }\n    createUser(params) {\n        return this.requestWithAuth('/accounts', 'post', params);\n    }\n    createUsers(users) {\n        return this.requestWithAuth('/accounts:batchCreate', 'post', { users });\n    }\n    updateUser(params) {\n        return this.requestWithAuth('/accounts:update', 'post', params);\n    }\n    deleteUser(localId) {\n        return this.requestWithAuth('/accounts:delete', 'post', { localId });\n    }\n    deleteUsers(localIds, force = false) {\n        if (localIds.length === 0) {\n            return null;\n        }\n        return this.requestWithAuth('/accounts:batchDelete', 'post', { localIds, force });\n    }\n    pickUser(users) {\n        if (!users || users.length === 0) {\n            return null;\n        }\n        else {\n            return users[0];\n        }\n    }\n    requestWithAuth(path, method, data) {\n        const options = {\n            method,\n            contentType: 'application/json',\n            headers: {\n                Authorization: `Bearer ${this.accessToken}`,\n            },\n        };\n        if (data) {\n            if (method === 'get') {\n                path = `${path}?${Object.entries(data).map(([k, v]) => `${k}=${v}`).join('&')}`;\n            }\n            else {\n                options.payload = JSON.stringify(data);\n            }\n        }\n        const url = `https://identitytoolkit.googleapis.com/v1/projects/${this.projectId}${path}`;\n        const response = UrlFetchApp.fetch(url, options);\n        return JSON.parse(response.getContentText());\n    }\n    get accessToken() {\n        // This access token will expire after 1 hour later, but GAS will terminate 30 min for Google limitation.\n        // Therefore, we don't care refresh it.\n        if (!this._accessToken) {\n            this._accessToken = this.getAccessToken();\n        }\n        return this._accessToken;\n    }\n    getAccessToken() {\n        const GOOGLE_AUTH_TOKEN_HOST = 'accounts.google.com';\n        const GOOGLE_AUTH_TOKEN_PATH = '/o/oauth2/token';\n        const token = this.createAuthJwt();\n        const postData = 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3A' +\n            'grant-type%3Ajwt-bearer&assertion=' +\n            token;\n        const url = `https://${GOOGLE_AUTH_TOKEN_HOST}${GOOGLE_AUTH_TOKEN_PATH}`;\n        const response = UrlFetchApp.fetch(url, {\n            method: 'post',\n            contentType: 'application/x-www-form-urlencoded',\n            payload: postData,\n        });\n        const { access_token } = JSON.parse(response.getContentText());\n        return access_token;\n    }\n    createAuthJwt() {\n        const GOOGLE_TOKEN_AUDIENCE = 'https://accounts.google.com/o/oauth2/token';\n        const ONE_HOUR_IN_SECONDS = 60 * 60;\n        const scope = [\n            'https://www.googleapis.com/auth/cloud-platform',\n            'https://www.googleapis.com/auth/firebase.database',\n            'https://www.googleapis.com/auth/firebase.messaging',\n            'https://www.googleapis.com/auth/identitytoolkit',\n            'https://www.googleapis.com/auth/userinfo.email',\n        ].join(' ');\n        const jwtHeader = {\n            alg: 'RS256',\n        };\n        const seconds = ~~(new Date().getTime() / 1000);\n        const jwtPayload = {\n            iss: this.email,\n            scope,\n            aud: GOOGLE_TOKEN_AUDIENCE,\n            exp: seconds + ONE_HOUR_IN_SECONDS,\n            iat: seconds,\n        };\n        const jwtHeaderBase64 = Utilities.base64EncodeWebSafe(JSON.stringify(jwtHeader));\n        const jwtClaimBase64 = Utilities.base64EncodeWebSafe(JSON.stringify(jwtPayload));\n        const signatureInput = `${jwtHeaderBase64}.${jwtClaimBase64}`;\n        const signature = Utilities.computeRsaSha256Signature(signatureInput, this.key);\n        return `${signatureInput}.${Utilities.base64EncodeWebSafe(signature)}`;\n    }\n}\nexports.FirebaseAuthentication = FirebaseAuthentication;\nfunction getAuth(email, key, projectId) {\n    return FirebaseAuthentication.getAuth(email, key, projectId);\n}\nexports.getAuth = getAuth;\n"]}