UNPKG

firebase-tools

Version:
133 lines (132 loc) 4.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setDenySmsRegionPolicy = exports.setAllowSmsRegionPolicy = exports.setCustomClaim = exports.disableUser = exports.listUsers = exports.findUser = exports.updateAuthDomains = exports.getAuthDomains = void 0; const apiv2_1 = require("../apiv2"); const api_1 = require("../api"); const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.identityOrigin)(), auth: true }); async function getAuthDomains(project) { const res = await apiClient.get(`/admin/v2/projects/${project}/config`, { headers: { "x-goog-user-project": project } }); return res.body.authorizedDomains; } exports.getAuthDomains = getAuthDomains; async function updateAuthDomains(project, authDomains) { const res = await apiClient.patch(`/admin/v2/projects/${project}/config`, { authorizedDomains: authDomains }, { queryParams: { update_mask: "authorizedDomains" }, headers: { "x-goog-user-project": project }, }); return res.body.authorizedDomains; } exports.updateAuthDomains = updateAuthDomains; async function findUser(project, email, phone, uid) { var _a; const expression = { email, phoneNumber: phone, userId: uid, }; const res = await apiClient.post(`/v1/projects/${project}/accounts:query`, { expression: [expression], limit: "1", }); if (!((_a = res.body.userInfo) === null || _a === void 0 ? void 0 : _a.length)) { throw new Error("No users found"); } const modifiedUserInfo = res.body.userInfo.map((ui) => { ui.uid = ui.localId; delete ui.localId; return ui; }); return modifiedUserInfo[0]; } exports.findUser = findUser; async function listUsers(project, limit) { let queryLimit = limit; let offset = 0; if (limit > 500) { queryLimit = 500; } const userInfo = []; while (offset < limit) { if (queryLimit + offset > limit) { queryLimit = limit - offset; } const res = await apiClient.post(`/v1/projects/${project}/accounts:query`, { offset: offset.toString(), limit: queryLimit.toString(), }); if (res.body.recordsCount === "0") { break; } offset += Number(res.body.recordsCount); const modifiedUserInfo = res.body.userInfo.map((ui) => { ui.uid = ui.localId; delete ui.localId; return ui; }); userInfo.push(...modifiedUserInfo); } return userInfo; } exports.listUsers = listUsers; async function disableUser(project, uid, disabled) { const res = await apiClient.post("/v1/accounts:update", { disableUser: disabled, targetProjectId: project, localId: uid, }); return res.status === 200; } exports.disableUser = disableUser; async function setCustomClaim(project, uid, claim, options) { let user = await findUser(project, undefined, undefined, uid); if (user.uid !== uid) { throw new Error(`Could not find ${uid} in the auth db, please check the uid again.`); } let reqClaim = JSON.stringify(claim); if (options === null || options === void 0 ? void 0 : options.merge) { let attributeJson = new Map(); if (user.customAttributes !== undefined && user.customAttributes !== "") { attributeJson = JSON.parse(user.customAttributes); } reqClaim = JSON.stringify(Object.assign(Object.assign({}, attributeJson), claim)); } const res = await apiClient.post("/v1/accounts:update", { customAttributes: reqClaim, targetProjectId: project, localId: uid, }); if (res.status !== 200) { throw new Error("something went wrong in the request"); } user = await findUser(project, undefined, undefined, uid); return user; } exports.setCustomClaim = setCustomClaim; async function setAllowSmsRegionPolicy(project, countryCodes) { const res = await apiClient.patch(`/admin/v2/projects/${project}/config?updateMask=sms_region_config`, { sms_region_config: { allowlist_only: { allowed_regions: countryCodes, }, }, }); if (res.status !== 200) { throw new Error("SMS Region Policy failed to be configured"); } return true; } exports.setAllowSmsRegionPolicy = setAllowSmsRegionPolicy; async function setDenySmsRegionPolicy(project, countryCodes) { const res = await apiClient.patch(`/admin/v2/projects/${project}/config?updateMask=sms_region_config`, { sms_region_config: { allow_by_default: { disallowed_regions: countryCodes, }, }, }); if (res.status !== 200) { throw new Error("SMS Region Policy failed to be configured"); } return true; } exports.setDenySmsRegionPolicy = setDenySmsRegionPolicy;