firebase-tools
Version:
Command-Line Interface for Firebase
133 lines (132 loc) • 4.92 kB
JavaScript
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;
;