UNPKG

kod-temp

Version:

Workano Communications SDK

153 lines (152 loc) 8 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const exten_1 = require("../../utils/exten"); const index_1 = __importDefault(require("../../lib/index")); function randomString(length, options = {}) { let chars = "abcdefghijklmnopqrstuvwxyz"; if (options.uppercase) chars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (options.numbers) chars += "0123456789"; let result = ""; for (let i = 0; i < length; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; } function randomNumericString(length) { let chars = "0123456789"; let result = ""; for (let i = 0; i < length; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; } class default_1 { static addUser(user) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c; try { // Fetch templates const templates = yield index_1.default.confd.listTemplates(); const globalTemplateUUID = (_a = templates.items.find((template) => template.label === "global")) === null || _a === void 0 ? void 0 : _a.uuid; const webrtcTemplateUUID = (_b = templates.items.find((template) => template.label === "webrtc")) === null || _b === void 0 ? void 0 : _b.uuid; let selectedTemplateUUID = user.subscription_type === 0 ? globalTemplateUUID : webrtcTemplateUUID; if (!selectedTemplateUUID) { throw new Error("Template UUID not found for the given subscription type"); } const caller_id = `"${user.firstname_english} ${user.lastname_english}"`; // Build auth data const authData = { firstname: user.firstname, lastname: user.lastname, email_address: user.email, username: user.email, enabled: true, purpose: "user", password: user.password, }; // Build lines let lines = []; if (user.lines && user.lines.length > 0) { lines = user.lines.map((line) => { var _a; const lineName = randomString(8, { uppercase: false, numbers: true }); const randomCode = randomNumericString(6); return Object.assign(Object.assign({}, line), { name: lineName, provisioning_extension: randomCode, provisioning_code: randomCode, caller_id_name: `${user.firstname} ${user.lastname}`, context: line.extensions[0].context, caller_id_num: (_a = line.extensions) === null || _a === void 0 ? void 0 : _a[0].exten, registrar: "default", protocol: "sip", endpoint_sip: { templates: [{ uuid: selectedTemplateUUID }], label: lineName, name: lineName, auth_section_options: [ [ "password", randomString(8, { uppercase: true, numbers: true }), ], ["username", lineName], ], }, extensions: line.extensions.map((ext) => (Object.assign({}, ext))) }); }); } // Adjust selectedTemplateUUID for new line if necessary if (lines.length > 0) { const lastLineTemplateUUID = lines[lines.length - 1].endpoint_sip.templates[0].uuid; selectedTemplateUUID = lastLineTemplateUUID === globalTemplateUUID ? webrtcTemplateUUID : globalTemplateUUID; } // If subscription_type is 1, add a new line const additionalLinesCount = user.subscription_type >= 1 && user.subscription_type <= 3 ? user.subscription_type : 0; if (additionalLinesCount) { const lineName = randomString(8, { uppercase: false, numbers: true }); const randomCode = randomNumericString(6); const newLine = Object.assign(Object.assign({}, lines[0]), { name: lineName, provisioning_extension: randomCode, provisioning_code: randomCode, position: 2, endpoint_sip: Object.assign(Object.assign({}, (_c = lines[0]) === null || _c === void 0 ? void 0 : _c.endpoint_sip), { label: lineName, name: lineName, auth_section_options: [ ["password", randomString(8, { uppercase: true, numbers: true })], ["username", lineName], ], templates: [{ uuid: selectedTemplateUUID }] }) }); lines.push(newLine); } // Prepare the requestData const requestData = { auth: authData, caller_id: caller_id, subscription_type: user.subscription_type, firstname: user.firstname, lastname: user.lastname, language: user.language, email: user.email, username: user.email, mobile_phone_number: user.mobile_phone_number, lines: lines, call_transfer_enabled: true, dtmf_hangup_enabled: true, enabled: true, }; // Create the user const confUserSubmitResult = yield index_1.default.confd.addUser(requestData); // // Assign ACL policies to the user // if (user.acl_policies && user.acl_policies.length > 0) { // for (const aclPolicyUUID of user.acl_policies) { // await workano.auth.addUserPolicy( // confUserSubmitResult.uuid, // aclPolicyUUID // ); // } // } return confUserSubmitResult; } catch (error) { throw error; } }); } static getExtensions() { return __awaiter(this, void 0, void 0, function* () { const contextsResponse = yield index_1.default.confd.listContexts(); const extensionsResponse = yield index_1.default.confd.listExtensions(); const contexts = contextsResponse.items; const extensions = extensionsResponse.items; const result = contexts.map((context) => ({ context: context.name, contextLabel: context.label, numbers: (0, exten_1.generateExtens)(context, "user", extensions), })); return result; }); } } exports.default = default_1;