orbitx-core-models 11.104.0 → 11.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/interfaces/agent.interface.d.ts +5 -0
- package/dist/interfaces/agent.interface.d.ts.map +1 -1
- package/dist/interfaces/callSession.interface.d.ts +6 -0
- package/dist/interfaces/callSession.interface.d.ts.map +1 -1
- package/dist/interfaces/request.interface.d.ts +33 -0
- package/dist/interfaces/request.interface.d.ts.map +1 -0
- package/dist/interfaces/request.interface.js +2 -0
- package/dist/interfaces/role.interface.d.ts +12 -0
- package/dist/interfaces/role.interface.d.ts.map +1 -0
- package/dist/interfaces/role.interface.js +2 -0
- package/dist/interfaces/user.interface.d.ts +5 -0
- package/dist/interfaces/user.interface.d.ts.map +1 -1
- package/dist/models/agent.model.d.ts.map +1 -1
- package/dist/models/agent.model.js +20 -0
- package/dist/models/callSession.model.d.ts.map +1 -1
- package/dist/models/callSession.model.js +12 -0
- package/dist/models/request.model.d.ts +9 -0
- package/dist/models/request.model.d.ts.map +1 -0
- package/dist/models/request.model.js +150 -0
- package/dist/models/role.model.d.ts +8 -0
- package/dist/models/role.model.d.ts.map +1 -0
- package/dist/models/role.model.js +72 -0
- package/dist/models/user.model.d.ts.map +1 -1
- package/dist/models/user.model.js +21 -0
- package/dist/permissions/resolve.d.ts +50 -0
- package/dist/permissions/resolve.d.ts.map +1 -0
- package/dist/permissions/resolve.js +68 -0
- package/dist/permissions/seeds/roles.seed.d.ts +19 -0
- package/dist/permissions/seeds/roles.seed.d.ts.map +1 -0
- package/dist/permissions/seeds/roles.seed.js +169 -0
- package/dist/permissions/treeUtils.d.ts +9 -0
- package/dist/permissions/treeUtils.d.ts.map +1 -0
- package/dist/permissions/treeUtils.js +46 -0
- package/dist/permissions/trees/client.tree.d.ts +3 -0
- package/dist/permissions/trees/client.tree.d.ts.map +1 -0
- package/dist/permissions/trees/client.tree.js +99 -0
- package/dist/permissions/trees/employee.tree.d.ts +3 -0
- package/dist/permissions/trees/employee.tree.d.ts.map +1 -0
- package/dist/permissions/trees/employee.tree.js +35 -0
- package/dist/permissions/trees/ops.tree.d.ts +3 -0
- package/dist/permissions/trees/ops.tree.d.ts.map +1 -0
- package/dist/permissions/trees/ops.tree.js +173 -0
- package/dist/permissions/trees/partner.tree.d.ts +3 -0
- package/dist/permissions/trees/partner.tree.d.ts.map +1 -0
- package/dist/permissions/trees/partner.tree.js +71 -0
- package/dist/permissions/types.d.ts +9 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +4 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ import { LoginOtp } from "./models/loginOtp.model";
|
|
|
30
30
|
import { Counter } from "./models/counter.model";
|
|
31
31
|
import { Employee } from "./models/employee.model";
|
|
32
32
|
import { CallSession } from "./models/callSession.model";
|
|
33
|
+
import { Request } from "./models/request.model";
|
|
34
|
+
import { Role } from "./models/role.model";
|
|
33
35
|
import { IChat } from "./interfaces/chat.interface";
|
|
34
36
|
import { IMacro } from "./interfaces/macro.interface";
|
|
35
37
|
import { IVertical } from "./interfaces/vertical.interface";
|
|
@@ -61,6 +63,16 @@ import { ISession } from "./interfaces/session.interface";
|
|
|
61
63
|
import { ILoginOtp } from "./interfaces/loginOtp.interface";
|
|
62
64
|
import { IEmployee } from "./interfaces/employee.interface";
|
|
63
65
|
import { ICallSession, CallSessionStatus, CallSessionDirection } from "./interfaces/callSession.interface";
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
import { IRequest, IRequestAttachment, IRequestDetails, RequestCategory, RequestStatus } from "./interfaces/request.interface";
|
|
67
|
+
import { IRole } from "./interfaces/role.interface";
|
|
68
|
+
import { Dashboard, PermissionNode, DASHBOARDS } from "./permissions/types";
|
|
69
|
+
import { opsTree } from "./permissions/trees/ops.tree";
|
|
70
|
+
import { employeeTree } from "./permissions/trees/employee.tree";
|
|
71
|
+
import { partnerTree } from "./permissions/trees/partner.tree";
|
|
72
|
+
import { clientTree } from "./permissions/trees/client.tree";
|
|
73
|
+
import { getTree, getAllKeys, getParentKey, getAncestorKeys } from "./permissions/treeUtils";
|
|
74
|
+
import { resolveEffectivePermissions, hasPermission, validateGrantedKeys, validateExtraKeys, getFullAccessKeys, PermissionSource, ValidationResult } from "./permissions/resolve";
|
|
75
|
+
import { roleSeeds, RoleSeed } from "./permissions/seeds/roles.seed";
|
|
76
|
+
export { Chat, Message, User, Vertical, Macro, Partner, Company, CompanySettings, Review, Wallet, StripeLog, Transaction, Lead, TierConfig, TierProgress, MonthlyTierSnapshot, Product, Plan, PlanOption, Addon, Subscription, Visitor, Group, Agent, LeadLedger, Invoice, LeadDispute, Session, LoginOtp, Counter, Employee, CallSession, Request, Role, opsTree, employeeTree, partnerTree, clientTree, DASHBOARDS, getTree, getAllKeys, getParentKey, getAncestorKeys, resolveEffectivePermissions, hasPermission, validateGrantedKeys, validateExtraKeys, getFullAccessKeys, roleSeeds, };
|
|
77
|
+
export type { IChat, IMessage, IUser, IVertical, IMacro, IPartner, ICompany, IOnboardingStep, ITwilioConfig, ICompanySettings, ICallConnectSettings, ILeadConfig, ILeadFields, IReview, IWallet, IStripeLog, ITransaction, ILead, ITierConfig, ITierProgress, IMonthlyTierSnapshot, IProduct, IPlan, IPlanOption, IAddon, ISubscription, IVisitor, IGroup, IAgent, ILeadLedger, IInvoice, ILeadDispute, ISession, ILoginOtp, IEmployee, ICallSession, CallSessionStatus, CallSessionDirection, IRequest, IRequestAttachment, IRequestDetails, RequestCategory, RequestStatus, IRole, Dashboard, PermissionNode, PermissionSource, ValidationResult, RoleSeed, };
|
|
66
78
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CallSession = exports.Employee = exports.Counter = exports.LoginOtp = exports.Session = exports.LeadDispute = exports.Invoice = exports.LeadLedger = exports.Agent = exports.Group = exports.Visitor = exports.Subscription = exports.Addon = exports.PlanOption = exports.Plan = exports.Product = exports.MonthlyTierSnapshot = exports.TierProgress = exports.TierConfig = exports.Lead = exports.Transaction = exports.StripeLog = exports.Wallet = exports.Review = exports.CompanySettings = exports.Company = exports.Partner = exports.Macro = exports.Vertical = exports.User = exports.Message = exports.Chat = void 0;
|
|
3
|
+
exports.roleSeeds = exports.getFullAccessKeys = exports.validateExtraKeys = exports.validateGrantedKeys = exports.hasPermission = exports.resolveEffectivePermissions = exports.getAncestorKeys = exports.getParentKey = exports.getAllKeys = exports.getTree = exports.DASHBOARDS = exports.clientTree = exports.partnerTree = exports.employeeTree = exports.opsTree = exports.Role = exports.Request = exports.CallSession = exports.Employee = exports.Counter = exports.LoginOtp = exports.Session = exports.LeadDispute = exports.Invoice = exports.LeadLedger = exports.Agent = exports.Group = exports.Visitor = exports.Subscription = exports.Addon = exports.PlanOption = exports.Plan = exports.Product = exports.MonthlyTierSnapshot = exports.TierProgress = exports.TierConfig = exports.Lead = exports.Transaction = exports.StripeLog = exports.Wallet = exports.Review = exports.CompanySettings = exports.Company = exports.Partner = exports.Macro = exports.Vertical = exports.User = exports.Message = exports.Chat = void 0;
|
|
4
4
|
// MODELS
|
|
5
5
|
const chat_model_1 = require("./models/chat.model");
|
|
6
6
|
Object.defineProperty(exports, "Chat", { enumerable: true, get: function () { return chat_model_1.Chat; } });
|
|
@@ -66,3 +66,31 @@ const employee_model_1 = require("./models/employee.model");
|
|
|
66
66
|
Object.defineProperty(exports, "Employee", { enumerable: true, get: function () { return employee_model_1.Employee; } });
|
|
67
67
|
const callSession_model_1 = require("./models/callSession.model");
|
|
68
68
|
Object.defineProperty(exports, "CallSession", { enumerable: true, get: function () { return callSession_model_1.CallSession; } });
|
|
69
|
+
const request_model_1 = require("./models/request.model");
|
|
70
|
+
Object.defineProperty(exports, "Request", { enumerable: true, get: function () { return request_model_1.Request; } });
|
|
71
|
+
const role_model_1 = require("./models/role.model");
|
|
72
|
+
Object.defineProperty(exports, "Role", { enumerable: true, get: function () { return role_model_1.Role; } });
|
|
73
|
+
// PERMISSIONS
|
|
74
|
+
const types_1 = require("./permissions/types");
|
|
75
|
+
Object.defineProperty(exports, "DASHBOARDS", { enumerable: true, get: function () { return types_1.DASHBOARDS; } });
|
|
76
|
+
const ops_tree_1 = require("./permissions/trees/ops.tree");
|
|
77
|
+
Object.defineProperty(exports, "opsTree", { enumerable: true, get: function () { return ops_tree_1.opsTree; } });
|
|
78
|
+
const employee_tree_1 = require("./permissions/trees/employee.tree");
|
|
79
|
+
Object.defineProperty(exports, "employeeTree", { enumerable: true, get: function () { return employee_tree_1.employeeTree; } });
|
|
80
|
+
const partner_tree_1 = require("./permissions/trees/partner.tree");
|
|
81
|
+
Object.defineProperty(exports, "partnerTree", { enumerable: true, get: function () { return partner_tree_1.partnerTree; } });
|
|
82
|
+
const client_tree_1 = require("./permissions/trees/client.tree");
|
|
83
|
+
Object.defineProperty(exports, "clientTree", { enumerable: true, get: function () { return client_tree_1.clientTree; } });
|
|
84
|
+
const treeUtils_1 = require("./permissions/treeUtils");
|
|
85
|
+
Object.defineProperty(exports, "getTree", { enumerable: true, get: function () { return treeUtils_1.getTree; } });
|
|
86
|
+
Object.defineProperty(exports, "getAllKeys", { enumerable: true, get: function () { return treeUtils_1.getAllKeys; } });
|
|
87
|
+
Object.defineProperty(exports, "getParentKey", { enumerable: true, get: function () { return treeUtils_1.getParentKey; } });
|
|
88
|
+
Object.defineProperty(exports, "getAncestorKeys", { enumerable: true, get: function () { return treeUtils_1.getAncestorKeys; } });
|
|
89
|
+
const resolve_1 = require("./permissions/resolve");
|
|
90
|
+
Object.defineProperty(exports, "resolveEffectivePermissions", { enumerable: true, get: function () { return resolve_1.resolveEffectivePermissions; } });
|
|
91
|
+
Object.defineProperty(exports, "hasPermission", { enumerable: true, get: function () { return resolve_1.hasPermission; } });
|
|
92
|
+
Object.defineProperty(exports, "validateGrantedKeys", { enumerable: true, get: function () { return resolve_1.validateGrantedKeys; } });
|
|
93
|
+
Object.defineProperty(exports, "validateExtraKeys", { enumerable: true, get: function () { return resolve_1.validateExtraKeys; } });
|
|
94
|
+
Object.defineProperty(exports, "getFullAccessKeys", { enumerable: true, get: function () { return resolve_1.getFullAccessKeys; } });
|
|
95
|
+
const roles_seed_1 = require("./permissions/seeds/roles.seed");
|
|
96
|
+
Object.defineProperty(exports, "roleSeeds", { enumerable: true, get: function () { return roles_seed_1.roleSeeds; } });
|
|
@@ -18,6 +18,11 @@ export interface IAgent extends Document {
|
|
|
18
18
|
lastLogin?: Date | null;
|
|
19
19
|
lastActiveAt?: Date | null;
|
|
20
20
|
ipAddress?: string | null;
|
|
21
|
+
roleId?: Schema.Types.ObjectId | null;
|
|
22
|
+
permissionMode?: "role" | "custom";
|
|
23
|
+
permissionKeys?: string[];
|
|
24
|
+
/** Individually-granted extras on top of roleId -- only used in "role" mode. */
|
|
25
|
+
extraPermissionKeys?: string[];
|
|
21
26
|
createdAt: Date;
|
|
22
27
|
updatedAt: Date;
|
|
23
28
|
comparePassword(input: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/agent.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5C,KAAK,SAAS,GAAG,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAAC;AAC5D,KAAK,aAAa,GAAG,MAAM,CAAC;AAC5B,KAAK,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,MAAO,SAAQ,QAAQ;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,UAAU,EAAE,OAAO,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"agent.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/agent.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5C,KAAK,SAAS,GAAG,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAAC;AAC5D,KAAK,aAAa,GAAG,MAAM,CAAC;AAC5B,KAAK,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,MAAO,SAAQ,QAAQ;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAI1B,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,UAAU,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -14,8 +14,14 @@ export interface ICallSession {
|
|
|
14
14
|
direction: CallSessionDirection;
|
|
15
15
|
recordingSid?: string;
|
|
16
16
|
recordingUrl?: string;
|
|
17
|
+
/** Index into the dial queue (callConnectLocations + primary fallback) currently being attempted. */
|
|
18
|
+
currentLocationIndex?: number;
|
|
19
|
+
/** Friendly name of the location that actually answered — set when the company leg is answered. */
|
|
20
|
+
locationName?: string;
|
|
17
21
|
durationSeconds?: number;
|
|
18
22
|
failureReason?: string;
|
|
23
|
+
/** Timestamp when the post-call recording email was dispatched via SendGrid. */
|
|
24
|
+
transcriptEmailSentAt?: Date;
|
|
19
25
|
startedAt?: Date;
|
|
20
26
|
connectedAt?: Date;
|
|
21
27
|
endedAt?: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callSession.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/callSession.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,SAAS,GACT,WAAW,GACX,WAAW,GACX,QAAQ,GACR,MAAM,GACN,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,eAAe,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IAGrB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IAGvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAG5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,oBAAoB,CAAC;IAGhC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,IAAI,CAAC;IAEf,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"callSession.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/callSession.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,SAAS,GACT,WAAW,GACX,WAAW,GACX,QAAQ,GACR,MAAM,GACN,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,eAAe,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IAGrB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IAGvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAG5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,oBAAoB,CAAC;IAGhC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,qGAAqG;IACrG,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,IAAI,CAAC;IAG7B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,IAAI,CAAC;IAEf,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Document, Types } from "mongoose";
|
|
2
|
+
export type RequestCategory = "business_information" | "contact_information" | "cancellation" | "change_plan" | "script";
|
|
3
|
+
export type RequestStatus = "pending" | "in_progress" | "resolved";
|
|
4
|
+
export interface IRequestDetails {
|
|
5
|
+
subcategory?: string;
|
|
6
|
+
reason?: string;
|
|
7
|
+
plan?: string;
|
|
8
|
+
folder?: string;
|
|
9
|
+
macro?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface IRequestAttachment {
|
|
12
|
+
url: string;
|
|
13
|
+
s3Key: string;
|
|
14
|
+
fileName: string;
|
|
15
|
+
mimeType: string;
|
|
16
|
+
size: number;
|
|
17
|
+
}
|
|
18
|
+
export interface IRequest extends Document {
|
|
19
|
+
requestId: string;
|
|
20
|
+
companyId: Types.ObjectId;
|
|
21
|
+
category: RequestCategory;
|
|
22
|
+
details: IRequestDetails;
|
|
23
|
+
description?: string;
|
|
24
|
+
attachment?: IRequestAttachment;
|
|
25
|
+
requestedBy: Types.ObjectId;
|
|
26
|
+
status: RequestStatus;
|
|
27
|
+
remarks?: string;
|
|
28
|
+
resolvedBy?: Types.ObjectId;
|
|
29
|
+
resolvedAt?: Date;
|
|
30
|
+
createdAt?: Date;
|
|
31
|
+
updatedAt?: Date;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=request.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/request.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,eAAe,GACvB,sBAAsB,GACtB,qBAAqB,GACrB,cAAc,GACd,aAAa,GACb,QAAQ,CAAC;AAEb,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC5B,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
import { Dashboard } from "../permissions/types";
|
|
3
|
+
export interface IRole extends mongoose.Document {
|
|
4
|
+
dashboard: Dashboard;
|
|
5
|
+
key: string;
|
|
6
|
+
label: string;
|
|
7
|
+
isSystemRole: boolean;
|
|
8
|
+
grantedKeys: string[];
|
|
9
|
+
createdAt?: Date;
|
|
10
|
+
updatedAt?: Date;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=role.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/role.interface.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,WAAW,KAAM,SAAQ,QAAQ,CAAC,QAAQ;IAC9C,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB"}
|
|
@@ -19,6 +19,11 @@ export interface IUser extends mongoose.Document {
|
|
|
19
19
|
lastLogin?: Date;
|
|
20
20
|
lockedOut?: boolean;
|
|
21
21
|
userId: string;
|
|
22
|
+
roleId?: mongoose.Types.ObjectId;
|
|
23
|
+
permissionMode?: "role" | "custom";
|
|
24
|
+
permissionKeys?: string[];
|
|
25
|
+
/** Individually-granted extras on top of roleId -- only used in "role" mode. */
|
|
26
|
+
extraPermissionKeys?: string[];
|
|
22
27
|
createdAt?: Date;
|
|
23
28
|
updatedAt?: Date;
|
|
24
29
|
twoFactorEnabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/user.interface.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,KAAM,SAAQ,QAAQ,CAAC,QAAQ;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EACA,MAAM,GACN,iBAAiB,GACjB,aAAa,GACb,OAAO,GACP,YAAY,GACZ,iBAAiB,GACjB,SAAS,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC/C,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClC,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"user.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/user.interface.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,KAAM,SAAQ,QAAQ,CAAC,QAAQ;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EACA,MAAM,GACN,iBAAiB,GACjB,aAAa,GACb,OAAO,GACP,YAAY,GACZ,iBAAiB,GACjB,SAAS,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC/C,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClC,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IAIf,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,IAAI,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,qBAAqB,CAAC,EAAE,sBAAsB,CAAC;IAC/C,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,qBAAqB,CAAC,EAAE,sBAAsB,CAAC;IAC/C,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AACD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.model.d.ts","sourceRoot":"","sources":["../../src/models/agent.model.ts"],"names":[],"mappings":"AAEA,OAAiB,EAAU,KAAK,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAC,MAAM,EAAC,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.model.d.ts","sourceRoot":"","sources":["../../src/models/agent.model.ts"],"names":[],"mappings":"AAEA,OAAiB,EAAU,KAAK,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAC,MAAM,EAAC,MAAM,+BAA+B,CAAC;AA8IrD,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,CAAgD,CAAC;AACjF,eAAe,KAAK,CAAC"}
|
|
@@ -122,6 +122,26 @@ const agentSchema = new mongoose_1.Schema({
|
|
|
122
122
|
type: String,
|
|
123
123
|
default: null,
|
|
124
124
|
},
|
|
125
|
+
// ─────────────────────────────────────────────
|
|
126
|
+
// RBAC
|
|
127
|
+
// ─────────────────────────────────────────────
|
|
128
|
+
roleId: {
|
|
129
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
130
|
+
ref: "Role",
|
|
131
|
+
default: null,
|
|
132
|
+
index: true,
|
|
133
|
+
},
|
|
134
|
+
permissionMode: {
|
|
135
|
+
type: String,
|
|
136
|
+
enum: ["role", "custom"],
|
|
137
|
+
default: "role",
|
|
138
|
+
},
|
|
139
|
+
// Authoritative only when permissionMode === "custom"; see
|
|
140
|
+
// src/permissions/resolve.ts for how this and roleId are reconciled.
|
|
141
|
+
permissionKeys: [{ type: String }],
|
|
142
|
+
// Individually-granted extras on top of roleId's own grantedKeys --
|
|
143
|
+
// only applied in "role" mode.
|
|
144
|
+
extraPermissionKeys: [{ type: String }],
|
|
125
145
|
}, {
|
|
126
146
|
timestamps: true,
|
|
127
147
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callSession.model.d.ts","sourceRoot":"","sources":["../../src/models/callSession.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAoB,MAAM,UAAU,CAAC;AAC5C,OAAO,EACL,YAAY,EACb,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"callSession.model.d.ts","sourceRoot":"","sources":["../../src/models/callSession.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAoB,MAAM,UAAU,CAAC;AAC5C,OAAO,EACL,YAAY,EACb,MAAM,qCAAqC,CAAC;AAwH7C,eAAO,MAAM,WAAW;;;;OAGvB,CAAC;AACF,eAAe,WAAW,CAAC"}
|
|
@@ -95,11 +95,23 @@ const callSessionSchema = new mongoose_1.Schema({
|
|
|
95
95
|
recordingSid: { type: String },
|
|
96
96
|
recordingUrl: { type: String },
|
|
97
97
|
// ─────────────────────────────────────────────
|
|
98
|
+
// MULTI-LOCATION ROUTING
|
|
99
|
+
// ─────────────────────────────────────────────
|
|
100
|
+
/** Index in the dial queue currently being attempted (locations + primary fallback). */
|
|
101
|
+
currentLocationIndex: { type: Number, default: 0 },
|
|
102
|
+
/** Friendly name of the location that actually answered. */
|
|
103
|
+
locationName: { type: String },
|
|
104
|
+
// ─────────────────────────────────────────────
|
|
98
105
|
// METRICS & REASON
|
|
99
106
|
// ─────────────────────────────────────────────
|
|
100
107
|
durationSeconds: { type: Number },
|
|
101
108
|
failureReason: { type: String },
|
|
102
109
|
// ─────────────────────────────────────────────
|
|
110
|
+
// POST-CALL EMAIL
|
|
111
|
+
// ─────────────────────────────────────────────
|
|
112
|
+
/** Timestamp when the post-call recording email was dispatched via SendGrid. */
|
|
113
|
+
transcriptEmailSentAt: { type: Date },
|
|
114
|
+
// ─────────────────────────────────────────────
|
|
103
115
|
// TIMESTAMPS
|
|
104
116
|
// ─────────────────────────────────────────────
|
|
105
117
|
startedAt: { type: Date },
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
import { IRequest } from "../interfaces/request.interface";
|
|
3
|
+
export declare const Request: mongoose.Model<IRequest, {}, {}, {}, mongoose.Document<unknown, {}, IRequest, {}, {}> & IRequest & Required<{
|
|
4
|
+
_id: unknown;
|
|
5
|
+
}> & {
|
|
6
|
+
__v: number;
|
|
7
|
+
}, any>;
|
|
8
|
+
export default Request;
|
|
9
|
+
//# sourceMappingURL=request.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.model.d.ts","sourceRoot":"","sources":["../../src/models/request.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAoB,MAAM,UAAU,CAAC;AAE5C,OAAO,EACL,QAAQ,EAGT,MAAM,iCAAiC,CAAC;AAuIzC,eAAO,MAAM,OAAO;;;;OAAqD,CAAC;AAC1E,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Request = void 0;
|
|
37
|
+
const mongoose_1 = __importStar(require("mongoose"));
|
|
38
|
+
const counter_model_1 = require("./counter.model");
|
|
39
|
+
const requestDetailsSchema = new mongoose_1.Schema({
|
|
40
|
+
subcategory: { type: String, trim: true, maxlength: 150 },
|
|
41
|
+
reason: { type: String, trim: true, maxlength: 150 },
|
|
42
|
+
plan: { type: String, trim: true, maxlength: 150 },
|
|
43
|
+
folder: { type: String, trim: true, maxlength: 150 },
|
|
44
|
+
macro: { type: String, trim: true, maxlength: 150 },
|
|
45
|
+
}, { _id: false });
|
|
46
|
+
const requestAttachmentSchema = new mongoose_1.Schema({
|
|
47
|
+
url: { type: String, required: true, trim: true },
|
|
48
|
+
s3Key: { type: String, required: true, trim: true },
|
|
49
|
+
fileName: { type: String, required: true, trim: true },
|
|
50
|
+
mimeType: { type: String, required: true, trim: true },
|
|
51
|
+
size: { type: Number, required: true, min: 0 },
|
|
52
|
+
}, { _id: false });
|
|
53
|
+
const requestSchema = new mongoose_1.Schema({
|
|
54
|
+
requestId: {
|
|
55
|
+
type: String,
|
|
56
|
+
unique: true,
|
|
57
|
+
immutable: true,
|
|
58
|
+
index: true,
|
|
59
|
+
},
|
|
60
|
+
companyId: {
|
|
61
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
62
|
+
ref: "Company",
|
|
63
|
+
required: [true, "Company ID is required"],
|
|
64
|
+
index: true,
|
|
65
|
+
},
|
|
66
|
+
category: {
|
|
67
|
+
type: String,
|
|
68
|
+
enum: [
|
|
69
|
+
"business_information",
|
|
70
|
+
"contact_information",
|
|
71
|
+
"cancellation",
|
|
72
|
+
"change_plan",
|
|
73
|
+
"script",
|
|
74
|
+
],
|
|
75
|
+
required: [true, "Request category is required"],
|
|
76
|
+
index: true,
|
|
77
|
+
},
|
|
78
|
+
details: {
|
|
79
|
+
type: requestDetailsSchema,
|
|
80
|
+
required: [true, "Request details are required"],
|
|
81
|
+
default: {},
|
|
82
|
+
},
|
|
83
|
+
description: {
|
|
84
|
+
type: String,
|
|
85
|
+
trim: true,
|
|
86
|
+
maxlength: [5000, "Description cannot exceed 5000 characters"],
|
|
87
|
+
},
|
|
88
|
+
attachment: requestAttachmentSchema,
|
|
89
|
+
requestedBy: {
|
|
90
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
91
|
+
ref: "User",
|
|
92
|
+
required: [true, "Requested by user ID is required"],
|
|
93
|
+
index: true,
|
|
94
|
+
},
|
|
95
|
+
status: {
|
|
96
|
+
type: String,
|
|
97
|
+
enum: ["pending", "in_progress", "resolved"],
|
|
98
|
+
default: "pending",
|
|
99
|
+
index: true,
|
|
100
|
+
},
|
|
101
|
+
remarks: {
|
|
102
|
+
type: String,
|
|
103
|
+
trim: true,
|
|
104
|
+
maxlength: [5000, "Remarks cannot exceed 5000 characters"],
|
|
105
|
+
},
|
|
106
|
+
resolvedBy: {
|
|
107
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
108
|
+
ref: "User",
|
|
109
|
+
},
|
|
110
|
+
resolvedAt: Date,
|
|
111
|
+
}, {
|
|
112
|
+
timestamps: true,
|
|
113
|
+
toJSON: { virtuals: true },
|
|
114
|
+
toObject: { virtuals: true },
|
|
115
|
+
});
|
|
116
|
+
requestSchema.pre("validate", function () {
|
|
117
|
+
const details = this.details || {};
|
|
118
|
+
if (["business_information", "contact_information"].includes(this.category) &&
|
|
119
|
+
!details.subcategory) {
|
|
120
|
+
this.invalidate("details.subcategory", "Request sub-category is required");
|
|
121
|
+
}
|
|
122
|
+
if (this.category === "cancellation" && !details.reason) {
|
|
123
|
+
this.invalidate("details.reason", "Cancellation reason is required");
|
|
124
|
+
}
|
|
125
|
+
if (this.category === "change_plan" && !details.plan) {
|
|
126
|
+
this.invalidate("details.plan", "Requested plan is required");
|
|
127
|
+
}
|
|
128
|
+
if (this.category === "script") {
|
|
129
|
+
if (!details.folder) {
|
|
130
|
+
this.invalidate("details.folder", "Script folder is required");
|
|
131
|
+
}
|
|
132
|
+
if (!details.macro) {
|
|
133
|
+
this.invalidate("details.macro", "Script macro is required");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (this.category !== "cancellation" && !this.description) {
|
|
137
|
+
this.invalidate("description", "Request description is required");
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
requestSchema.pre("save", async function () {
|
|
141
|
+
if (!this.isNew || this.requestId)
|
|
142
|
+
return;
|
|
143
|
+
const counter = await counter_model_1.Counter.findByIdAndUpdate("requestId", { $inc: { seq: 1 } }, { new: true, upsert: true, setDefaultsOnInsert: true });
|
|
144
|
+
this.requestId = `REQ-${String(counter.seq).padStart(6, "0")}`;
|
|
145
|
+
});
|
|
146
|
+
requestSchema.index({ companyId: 1, createdAt: -1 });
|
|
147
|
+
requestSchema.index({ companyId: 1, status: 1, createdAt: -1 });
|
|
148
|
+
requestSchema.index({ companyId: 1, category: 1, createdAt: -1 });
|
|
149
|
+
exports.Request = mongoose_1.default.model("Request", requestSchema);
|
|
150
|
+
exports.default = exports.Request;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
import { IRole } from "../interfaces/role.interface";
|
|
3
|
+
export declare const Role: mongoose.Model<IRole, {}, {}, {}, mongoose.Document<unknown, {}, IRole, {}, {}> & IRole & Required<{
|
|
4
|
+
_id: unknown;
|
|
5
|
+
}> & {
|
|
6
|
+
__v: number;
|
|
7
|
+
}, any>;
|
|
8
|
+
//# sourceMappingURL=role.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.model.d.ts","sourceRoot":"","sources":["../../src/models/role.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAoB,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AA6CrD,eAAO,MAAM,IAAI;;;;OAA4C,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Role = void 0;
|
|
37
|
+
const mongoose_1 = __importStar(require("mongoose"));
|
|
38
|
+
const types_1 = require("../permissions/types");
|
|
39
|
+
const roleSchema = new mongoose_1.Schema({
|
|
40
|
+
dashboard: {
|
|
41
|
+
type: String,
|
|
42
|
+
enum: types_1.DASHBOARDS,
|
|
43
|
+
required: true,
|
|
44
|
+
index: true,
|
|
45
|
+
},
|
|
46
|
+
// e.g. "global-admin", "associate-agent", "partner-admin" -- unique per
|
|
47
|
+
// dashboard, not globally (an "admin" key exists on both Partner and
|
|
48
|
+
// Client independently).
|
|
49
|
+
key: {
|
|
50
|
+
type: String,
|
|
51
|
+
required: true,
|
|
52
|
+
trim: true,
|
|
53
|
+
},
|
|
54
|
+
label: {
|
|
55
|
+
type: String,
|
|
56
|
+
required: true,
|
|
57
|
+
trim: true,
|
|
58
|
+
},
|
|
59
|
+
// True for all 8 predefined roles from the spec. Reserved for a future
|
|
60
|
+
// "save a custom set as a reusable named role" feature -- not used by
|
|
61
|
+
// anything today.
|
|
62
|
+
isSystemRole: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
default: false,
|
|
65
|
+
index: true,
|
|
66
|
+
},
|
|
67
|
+
// Flattened, ancestor-inclusive set of granted permission-tree keys --
|
|
68
|
+
// see src/permissions/resolve.ts for why ancestors are stored explicitly.
|
|
69
|
+
grantedKeys: [{ type: String }],
|
|
70
|
+
}, { timestamps: true });
|
|
71
|
+
roleSchema.index({ dashboard: 1, key: 1 }, { unique: true });
|
|
72
|
+
exports.Role = mongoose_1.default.model("Role", roleSchema);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.model.d.ts","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAoB,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"user.model.d.ts","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAoB,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AA4OrD,eAAO,MAAM,IAAI;;;;OAA4C,CAAC"}
|
|
@@ -194,6 +194,27 @@ const userSchema = new mongoose_1.Schema({
|
|
|
194
194
|
unique: true,
|
|
195
195
|
index: true,
|
|
196
196
|
},
|
|
197
|
+
// ─────────────────────────────────────────────
|
|
198
|
+
// RBAC
|
|
199
|
+
// ─────────────────────────────────────────────
|
|
200
|
+
roleId: {
|
|
201
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
202
|
+
ref: "Role",
|
|
203
|
+
default: null,
|
|
204
|
+
index: true,
|
|
205
|
+
},
|
|
206
|
+
permissionMode: {
|
|
207
|
+
type: String,
|
|
208
|
+
enum: ["role", "custom"],
|
|
209
|
+
default: "role",
|
|
210
|
+
},
|
|
211
|
+
// Authoritative only when permissionMode === "custom"; see
|
|
212
|
+
// src/permissions/resolve.ts for how this and roleId are reconciled.
|
|
213
|
+
permissionKeys: [{ type: String }],
|
|
214
|
+
// Individually-granted extras on top of roleId's own grantedKeys --
|
|
215
|
+
// only applied in "role" mode (e.g. one global-admin-adjacent user who
|
|
216
|
+
// also needs a single node nobody else on that role has).
|
|
217
|
+
extraPermissionKeys: [{ type: String }],
|
|
197
218
|
}, { timestamps: true });
|
|
198
219
|
// ─────────────────────────────────────────────
|
|
199
220
|
// PASSWORD HASH
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Dashboard } from "./types";
|
|
2
|
+
export interface PermissionSource {
|
|
3
|
+
permissionMode?: "role" | "custom";
|
|
4
|
+
permissionKeys?: string[];
|
|
5
|
+
/**
|
|
6
|
+
* Individually-granted extras on top of a named role -- e.g. a
|
|
7
|
+
* global-admin-adjacent role that also needs one extra node nobody else on
|
|
8
|
+
* that role gets. Only applies in "role" mode; ignored in "custom" mode
|
|
9
|
+
* since permissionKeys is already the fully authoritative set there.
|
|
10
|
+
*/
|
|
11
|
+
extraPermissionKeys?: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Must be populated (a Role document with `grantedKeys`) for "role" mode to
|
|
14
|
+
* resolve to anything — pass the raw ObjectId and this returns an empty set.
|
|
15
|
+
*/
|
|
16
|
+
roleId?: {
|
|
17
|
+
grantedKeys?: string[];
|
|
18
|
+
} | unknown;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Single source of truth for "what can this user/agent actually do", used
|
|
22
|
+
* identically by every backend's requirePermission middleware and by each
|
|
23
|
+
* frontend's usePermissions() hook (via the effectivePermissions the login/
|
|
24
|
+
* `GET /me` response should expose). Does not hit the DB — the caller is
|
|
25
|
+
* responsible for populating `roleId` beforehand when in "role" mode.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveEffectivePermissions(source: PermissionSource): Set<string>;
|
|
28
|
+
export declare function hasPermission(source: PermissionSource, key: string): boolean;
|
|
29
|
+
export interface ValidationResult {
|
|
30
|
+
valid: boolean;
|
|
31
|
+
errors: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Enforces the parent-gates-children rule server-side: a submitted set is
|
|
35
|
+
* only valid if every key exists in that dashboard's tree AND every key's
|
|
36
|
+
* full ancestor chain is also present in the set. Run this on every write
|
|
37
|
+
* path that accepts a custom permission set or a new Role's grantedKeys —
|
|
38
|
+
* never trust client-side tree-editor state alone.
|
|
39
|
+
*/
|
|
40
|
+
export declare function validateGrantedKeys(dashboard: Dashboard, keys: string[]): ValidationResult;
|
|
41
|
+
/** Every key in a dashboard's tree, granted at once -- for "full access" roles. */
|
|
42
|
+
export declare function getFullAccessKeys(dashboard: Dashboard): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Validates a role's extraPermissionKeys against the UNION of the role's own
|
|
45
|
+
* grantedKeys and the extras -- an extra key's parent may already be covered
|
|
46
|
+
* by the role itself, so it doesn't need to be duplicated into the extras
|
|
47
|
+
* list. Call this on every write path that accepts extraPermissionKeys.
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateExtraKeys(dashboard: Dashboard, roleGrantedKeys: string[], extraKeys: string[]): ValidationResult;
|
|
50
|
+
//# sourceMappingURL=resolve.d.ts.map
|