kod-temp
Version:
Workano Communications SDK
153 lines (152 loc) • 8 kB
JavaScript
;
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;