@trii/types 2.10.699 → 2.10.701
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/Automations/Executions/Execution.d.ts +44 -0
- package/dist/Automations/Executions/Execution.js +15 -1
- package/dist/Automations/Flows/Canvas.d.ts +6 -0
- package/dist/Automations/Flows/Canvas.js +6 -1
- package/dist/Common/index.js +17 -7
- package/dist/Conversations/Conversation.d.ts +8 -8
- package/dist/Conversations/DashBoard/dashboardForms.d.ts +44 -0
- package/dist/Conversations/DashBoard/dashboardForms.js +24 -0
- package/dist/Conversations/InboxCounters.d.ts +18 -0
- package/dist/Conversations/InboxMongo.d.ts +12 -12
- package/dist/Conversations/Routing.d.ts +10 -10
- package/dist/Conversations/index.js +17 -7
- package/dist/Tickets/SelfService.d.ts +56 -0
- package/dist/index.d.ts +23 -23
- package/dist/index.js +59 -49
- package/dist/src/Common/Channels/Channel.d.ts +1 -28
- package/dist/src/Contacts/contacts.d.ts +2 -2
- package/dist/src/Conversations/Conversation.d.ts +48 -331
- package/dist/src/Conversations/Conversation.js +34 -14
- package/dist/src/Conversations/DashBoard/dashboard.d.ts +2 -2
- package/dist/src/Conversations/DashBoard/dashboardForms.d.ts +44 -0
- package/dist/src/Conversations/DashBoard/dashboardForms.js +24 -0
- package/dist/src/Conversations/Flows/Workflows/Workflow.d.ts +123 -280
- package/dist/src/Conversations/Flows/Workflows/Workflow.js +35 -85
- package/dist/src/Conversations/Groups/Group.d.ts +8 -2
- package/dist/src/Conversations/Groups/Group.js +6 -0
- package/dist/src/Conversations/Label.d.ts +1 -1
- package/dist/src/Conversations/WebHook.d.ts +1 -1
- package/dist/src/Conversations/index.d.ts +1 -9
- package/dist/src/Conversations/index.js +1 -9
- package/dist/src/Tickets/Category.d.ts +0 -18
- package/dist/src/Tickets/Dashboard.d.ts +0 -78
- package/dist/src/Tickets/Dashboard.js +1 -13
- package/dist/src/Tickets/Fields.d.ts +0 -1
- package/dist/src/Tickets/Layouts.d.ts +1 -3
- package/dist/src/Tickets/Workflow.d.ts +0 -20
- package/dist/src/Users/UserTrii.d.ts +0 -10
- package/dist/src/Users/UserTrii.js +1 -8
- package/dist/src/index.d.ts +0 -3
- package/dist/src/index.js +1 -4
- package/package.json +2 -5
- package/dist/src/Automations/Capabilities/Capability.d.ts +0 -81
- package/dist/src/Automations/Capabilities/Capability.js +0 -23
- package/dist/src/Automations/Capabilities/index.d.ts +0 -1
- package/dist/src/Automations/Capabilities/index.js +0 -17
- package/dist/src/Automations/Common.d.ts +0 -94
- package/dist/src/Automations/Common.js +0 -40
- package/dist/src/Automations/Events/Event.d.ts +0 -69
- package/dist/src/Automations/Events/Event.js +0 -14
- package/dist/src/Automations/Events/index.d.ts +0 -1
- package/dist/src/Automations/Events/index.js +0 -17
- package/dist/src/Automations/Executions/Execution.d.ts +0 -254
- package/dist/src/Automations/Executions/Execution.js +0 -62
- package/dist/src/Automations/Executions/Testing.d.ts +0 -166
- package/dist/src/Automations/Executions/Testing.js +0 -54
- package/dist/src/Automations/Executions/index.d.ts +0 -2
- package/dist/src/Automations/Executions/index.js +0 -18
- package/dist/src/Automations/Flows/Canvas.d.ts +0 -103
- package/dist/src/Automations/Flows/Canvas.js +0 -38
- package/dist/src/Automations/Flows/Flow.d.ts +0 -147
- package/dist/src/Automations/Flows/Flow.js +0 -58
- package/dist/src/Automations/Flows/Requests.d.ts +0 -71
- package/dist/src/Automations/Flows/Validation.d.ts +0 -28
- package/dist/src/Automations/Flows/Validation.js +0 -9
- package/dist/src/Automations/Flows/index.d.ts +0 -4
- package/dist/src/Automations/Flows/index.js +0 -20
- package/dist/src/Automations/Nodes/Node.d.ts +0 -113
- package/dist/src/Automations/Nodes/Node.js +0 -27
- package/dist/src/Automations/Nodes/index.d.ts +0 -1
- package/dist/src/Automations/Nodes/index.js +0 -17
- package/dist/src/Automations/index.d.ts +0 -6
- package/dist/src/Automations/index.js +0 -22
- package/dist/src/Chats/Chat.d.ts +0 -61
- package/dist/src/Chats/Chat.js +0 -28
- package/dist/src/Conversations/Assignment.d.ts +0 -81
- package/dist/src/Conversations/Assignment.js +0 -4
- package/dist/src/Conversations/InboxMongo.d.ts +0 -154
- package/dist/src/Conversations/InboxMongo.js +0 -128
- package/dist/src/Conversations/InboxProjection.d.ts +0 -162
- package/dist/src/Conversations/InboxProjection.js +0 -2
- package/dist/src/Conversations/Outbox.d.ts +0 -24
- package/dist/src/Conversations/Outbox.js +0 -4
- package/dist/src/Conversations/Queue.d.ts +0 -107
- package/dist/src/Conversations/Queue.js +0 -4
- package/dist/src/Conversations/Routing.d.ts +0 -164
- package/dist/src/Conversations/Routing.js +0 -2
- package/dist/src/Conversations/Sla.d.ts +0 -227
- package/dist/src/Conversations/Sla.js +0 -6
- package/dist/src/Conversations/Transfer.d.ts +0 -73
- package/dist/src/Conversations/Transfer.js +0 -2
- package/dist/src/Forms/API.d.ts +0 -53
- package/dist/src/Forms/API.js +0 -2
- package/dist/src/Forms/SubmittedForm.d.ts +0 -56
- package/dist/src/Forms/SubmittedForm.js +0 -9
- package/dist/src/Forms/index.d.ts +0 -2
- package/dist/src/Forms/index.js +0 -18
- package/dist/src/Presence/AgentPause.d.ts +0 -24
- package/dist/src/Presence/AgentPause.js +0 -19
- package/dist/src/Presence/QueueParticipation.d.ts +0 -17
- package/dist/src/Presence/QueueParticipation.js +0 -2
- package/dist/src/Presence/QueueRoutingState.d.ts +0 -27
- package/dist/src/Presence/QueueRoutingState.js +0 -9
- package/dist/src/Presence/index.d.ts +0 -3
- package/dist/src/Presence/index.js +0 -19
- /package/dist/{src/Automations/Flows/Requests.js → Conversations/InboxCounters.js} +0 -0
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.INBOX_PROCESSOR_RECEIPT_INDEXES = exports.USER_INBOX_COUNTER_INDEXES = exports.USER_INBOX_ITEM_INDEXES = exports.CONVERSATION_SUBSCRIPTION_INDEXES = exports.INBOX_PROCESSOR_RECEIPTS_COLLECTION = exports.USER_INBOX_COUNTERS_COLLECTION = exports.USER_INBOX_ITEMS_COLLECTION = exports.CONVERSATION_SUBSCRIPTIONS_COLLECTION = void 0;
|
|
4
|
-
exports.CONVERSATION_SUBSCRIPTIONS_COLLECTION = 'conversation_subscriptions';
|
|
5
|
-
exports.USER_INBOX_ITEMS_COLLECTION = 'user_inbox_items';
|
|
6
|
-
exports.USER_INBOX_COUNTERS_COLLECTION = 'user_inbox_counters';
|
|
7
|
-
exports.INBOX_PROCESSOR_RECEIPTS_COLLECTION = 'inbox_processor_receipts';
|
|
8
|
-
/**
|
|
9
|
-
* MongoDB indexes for conversation_subscriptions.
|
|
10
|
-
*
|
|
11
|
-
* The unique index enforces one current subscription state per
|
|
12
|
-
* user/conversation. The follower index resolves the active followers that
|
|
13
|
-
* InboxAudienceResolver receives as input.
|
|
14
|
-
*/
|
|
15
|
-
exports.CONVERSATION_SUBSCRIPTION_INDEXES = [
|
|
16
|
-
{
|
|
17
|
-
name: 'uq_subscription_user_conversation',
|
|
18
|
-
key: {
|
|
19
|
-
spaceId: 1,
|
|
20
|
-
userId: 1,
|
|
21
|
-
conversationId: 1,
|
|
22
|
-
},
|
|
23
|
-
unique: true,
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
name: 'ix_subscription_conversation_followers',
|
|
27
|
-
key: {
|
|
28
|
-
spaceId: 1,
|
|
29
|
-
conversationId: 1,
|
|
30
|
-
status: 1,
|
|
31
|
-
userId: 1,
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
];
|
|
35
|
-
/**
|
|
36
|
-
* MongoDB indexes for user_inbox_items.
|
|
37
|
-
*
|
|
38
|
-
* views.viewId is the only array field in each compound index. Do not add
|
|
39
|
-
* views.visibilityReasons to these indexes: MongoDB compound multikey indexes
|
|
40
|
-
* must not combine multiple array paths.
|
|
41
|
-
*/
|
|
42
|
-
exports.USER_INBOX_ITEM_INDEXES = [
|
|
43
|
-
{
|
|
44
|
-
name: 'uq_inbox_item_user_conversation',
|
|
45
|
-
key: {
|
|
46
|
-
spaceId: 1,
|
|
47
|
-
userId: 1,
|
|
48
|
-
conversationId: 1,
|
|
49
|
-
},
|
|
50
|
-
unique: true,
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: 'ix_inbox_view_activity',
|
|
54
|
-
key: {
|
|
55
|
-
spaceId: 1,
|
|
56
|
-
userId: 1,
|
|
57
|
-
'views.viewId': 1,
|
|
58
|
-
pinned: -1,
|
|
59
|
-
sortAt: -1,
|
|
60
|
-
id: -1,
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
name: 'ix_inbox_view_priority',
|
|
65
|
-
key: {
|
|
66
|
-
spaceId: 1,
|
|
67
|
-
userId: 1,
|
|
68
|
-
'views.viewId': 1,
|
|
69
|
-
pinned: -1,
|
|
70
|
-
priorityScore: -1,
|
|
71
|
-
sortAt: -1,
|
|
72
|
-
id: -1,
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
name: 'ix_inbox_view_status_activity',
|
|
77
|
-
key: {
|
|
78
|
-
spaceId: 1,
|
|
79
|
-
userId: 1,
|
|
80
|
-
'views.viewId': 1,
|
|
81
|
-
'snapshot.status': 1,
|
|
82
|
-
sortAt: -1,
|
|
83
|
-
id: -1,
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
name: 'ix_inbox_view_queue_activity',
|
|
88
|
-
key: {
|
|
89
|
-
spaceId: 1,
|
|
90
|
-
userId: 1,
|
|
91
|
-
'views.viewId': 1,
|
|
92
|
-
'snapshot.queueId': 1,
|
|
93
|
-
sortAt: -1,
|
|
94
|
-
id: -1,
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
];
|
|
98
|
-
/**
|
|
99
|
-
* MongoDB indexes for user_inbox_counters.
|
|
100
|
-
*
|
|
101
|
-
* The unique index also serves reads for all views of a user through its
|
|
102
|
-
* spaceId + userId prefix.
|
|
103
|
-
*/
|
|
104
|
-
exports.USER_INBOX_COUNTER_INDEXES = [
|
|
105
|
-
{
|
|
106
|
-
name: 'uq_inbox_counter_user_view',
|
|
107
|
-
key: {
|
|
108
|
-
spaceId: 1,
|
|
109
|
-
userId: 1,
|
|
110
|
-
viewId: 1,
|
|
111
|
-
},
|
|
112
|
-
unique: true,
|
|
113
|
-
},
|
|
114
|
-
];
|
|
115
|
-
/**
|
|
116
|
-
* MongoDB indexes for durable processor idempotency receipts.
|
|
117
|
-
*/
|
|
118
|
-
exports.INBOX_PROCESSOR_RECEIPT_INDEXES = [
|
|
119
|
-
{
|
|
120
|
-
name: 'uq_inbox_processor_source_scope',
|
|
121
|
-
key: {
|
|
122
|
-
processor: 1,
|
|
123
|
-
sourceEventId: 1,
|
|
124
|
-
scopeKey: 1,
|
|
125
|
-
},
|
|
126
|
-
unique: true,
|
|
127
|
-
},
|
|
128
|
-
];
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { ConversationInboxSnapshot, ID, InboxViewId, UserInboxItemView } from './Conversation';
|
|
2
|
-
import { ConversationQueue } from './Queue';
|
|
3
|
-
import { ConversationAssignmentChanged } from './Transfer';
|
|
4
|
-
export type InboxProcessorName = 'inbox-audience-resolver' | 'inbox-item-projector' | 'inbox-counter-projector';
|
|
5
|
-
/**
|
|
6
|
-
* Queue membership snapshot used while resolving an assignment change.
|
|
7
|
-
*
|
|
8
|
-
* Produced by: assignment-change consumer.
|
|
9
|
-
* Consumed by: InboxAudienceResolver.
|
|
10
|
-
* Used when: previous/current queue audiences must be expanded from groups
|
|
11
|
-
* into concrete users without embedding membership in the integration event.
|
|
12
|
-
*/
|
|
13
|
-
export interface QueueAudienceResolutionContext {
|
|
14
|
-
queue: ConversationQueue;
|
|
15
|
-
memberUserIds: ID[];
|
|
16
|
-
activeMemberUserIds: ID[];
|
|
17
|
-
supervisorUserIds: ID[];
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Complete input for calculating desired inbox visibility.
|
|
21
|
-
*
|
|
22
|
-
* Produced by: ConversationAssignmentChanged consumer.
|
|
23
|
-
* Consumed by: InboxAudienceResolver.
|
|
24
|
-
* Used when: an assignment/transfer changes queue, owner or status and the
|
|
25
|
-
* desired per-user inbox audience must be recalculated.
|
|
26
|
-
*/
|
|
27
|
-
export interface InboxAudienceResolverInput {
|
|
28
|
-
sourceEvent: ConversationAssignmentChanged;
|
|
29
|
-
snapshot: ConversationInboxSnapshot;
|
|
30
|
-
previousQueue?: QueueAudienceResolutionContext;
|
|
31
|
-
currentQueue?: QueueAudienceResolutionContext;
|
|
32
|
-
participantUserIds: ID[];
|
|
33
|
-
followerUserIds: ID[];
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Visibility of one conversation inside one logical inbox view.
|
|
37
|
-
*
|
|
38
|
-
* Produced by: InboxAudienceResolver.
|
|
39
|
-
* Consumed by: inbox item projection planner/projector.
|
|
40
|
-
* Used when: multiple independent reasons can preserve the same view without
|
|
41
|
-
* generating duplicate inbox items or duplicate counter increments.
|
|
42
|
-
*/
|
|
43
|
-
export type ResolvedInboxView = UserInboxItemView;
|
|
44
|
-
/**
|
|
45
|
-
* Desired inbox visibility for a single user after applying the source event.
|
|
46
|
-
*
|
|
47
|
-
* Produced by: InboxAudienceResolver.
|
|
48
|
-
* Consumed by: inbox item projection planner/projector.
|
|
49
|
-
* Used when: the projector compares desired visibility with the materialized
|
|
50
|
-
* user_inbox_items state.
|
|
51
|
-
*/
|
|
52
|
-
export interface ResolvedInboxUserVisibility {
|
|
53
|
-
userId: ID;
|
|
54
|
-
views: ResolvedInboxView[];
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Full audience resolution result for one conversation version.
|
|
58
|
-
*
|
|
59
|
-
* Produced by: InboxAudienceResolver.
|
|
60
|
-
* Consumed by: inbox item projection planner/projector.
|
|
61
|
-
* Used when: all affected users must be diffed against their existing
|
|
62
|
-
* user_inbox_items documents.
|
|
63
|
-
*/
|
|
64
|
-
export interface ResolvedInboxAudience {
|
|
65
|
-
sourceEventId: ID;
|
|
66
|
-
spaceId: ID;
|
|
67
|
-
conversationId: ID;
|
|
68
|
-
conversationVersion: number;
|
|
69
|
-
snapshot: ConversationInboxSnapshot;
|
|
70
|
-
users: ResolvedInboxUserVisibility[];
|
|
71
|
-
resolvedAt: Date;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Processor boundary for pure audience calculation.
|
|
75
|
-
*
|
|
76
|
-
* Called by: ConversationAssignmentChanged consumer.
|
|
77
|
-
* Returns to: inbox item projection planner/projector.
|
|
78
|
-
*/
|
|
79
|
-
export interface InboxAudienceResolver {
|
|
80
|
-
resolve(input: InboxAudienceResolverInput): Promise<ResolvedInboxAudience>;
|
|
81
|
-
}
|
|
82
|
-
export type InboxProjectionOperation = 'insert' | 'update' | 'delete';
|
|
83
|
-
/**
|
|
84
|
-
* Idempotent mutation plan for one user's materialized conversation item.
|
|
85
|
-
*
|
|
86
|
-
* Produced by: inbox item projection planner.
|
|
87
|
-
* Consumed by: inbox item projector; after persistence it is also the input
|
|
88
|
-
* used to derive InboxCounterDelta messages.
|
|
89
|
-
* Used when: desired audience is compared with the existing projection.
|
|
90
|
-
*
|
|
91
|
-
* id must be deterministic from:
|
|
92
|
-
* sourceEventId + userId + conversationId.
|
|
93
|
-
*/
|
|
94
|
-
export interface InboxProjectionDelta {
|
|
95
|
-
id: ID;
|
|
96
|
-
sourceEventId: ID;
|
|
97
|
-
spaceId: ID;
|
|
98
|
-
userId: ID;
|
|
99
|
-
conversationId: ID;
|
|
100
|
-
conversationVersion: number;
|
|
101
|
-
operation: InboxProjectionOperation;
|
|
102
|
-
previous?: ResolvedInboxUserVisibility;
|
|
103
|
-
current?: ResolvedInboxUserVisibility;
|
|
104
|
-
snapshot?: ConversationInboxSnapshot;
|
|
105
|
-
createdAt: Date;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Atomic counter change for one user/view caused by one projection delta.
|
|
109
|
-
*
|
|
110
|
-
* Produced by: inbox item projector after determining the actual persisted
|
|
111
|
-
* before/after state.
|
|
112
|
-
* Consumed by: InboxCounterProjector.
|
|
113
|
-
* Used when: view membership, requiresAction or unread state changes.
|
|
114
|
-
*
|
|
115
|
-
* id must be deterministic from:
|
|
116
|
-
* sourceEventId + userId + conversationId + viewId.
|
|
117
|
-
*/
|
|
118
|
-
export interface InboxCounterDelta {
|
|
119
|
-
id: ID;
|
|
120
|
-
sourceEventId: ID;
|
|
121
|
-
spaceId: ID;
|
|
122
|
-
userId: ID;
|
|
123
|
-
conversationId: ID;
|
|
124
|
-
viewId: InboxViewId;
|
|
125
|
-
conversationVersion: number;
|
|
126
|
-
totalDelta: -1 | 0 | 1;
|
|
127
|
-
requiresActionDelta: -1 | 0 | 1;
|
|
128
|
-
unreadDelta: -1 | 0 | 1;
|
|
129
|
-
createdAt: Date;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Durable idempotency receipt for a processor side effect.
|
|
133
|
-
*
|
|
134
|
-
* Produced and consumed by: inbox item projector or InboxCounterProjector.
|
|
135
|
-
* Used when: the same outbox event/delta is delivered more than once.
|
|
136
|
-
*
|
|
137
|
-
* Unique key:
|
|
138
|
-
* processor + sourceEventId + scopeKey.
|
|
139
|
-
*
|
|
140
|
-
* scopeKey examples:
|
|
141
|
-
* - item projector: userId + conversationId
|
|
142
|
-
* - counter projector: userId + conversationId + viewId
|
|
143
|
-
*/
|
|
144
|
-
export interface InboxProcessorReceipt {
|
|
145
|
-
id: ID;
|
|
146
|
-
processor: InboxProcessorName;
|
|
147
|
-
sourceEventId: ID;
|
|
148
|
-
scopeKey: string;
|
|
149
|
-
spaceId: ID;
|
|
150
|
-
conversationId: ID;
|
|
151
|
-
conversationVersion: number;
|
|
152
|
-
processedAt: Date;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Processor boundary for applying counter deltas idempotently.
|
|
156
|
-
*
|
|
157
|
-
* Called by: inbox item projector.
|
|
158
|
-
* Mutates: user_inbox_counters and InboxProcessorReceipt in one transaction.
|
|
159
|
-
*/
|
|
160
|
-
export interface InboxCounterProjector {
|
|
161
|
-
apply(delta: InboxCounterDelta): Promise<void>;
|
|
162
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export declare const OUTBOX_EVENTS_COLLECTION = "outbox_events";
|
|
2
|
-
export type OutboxEventStatus = 'pending' | 'publishing' | 'published' | 'failed';
|
|
3
|
-
/**
|
|
4
|
-
* Transactional outbox record persisted with the aggregate mutation.
|
|
5
|
-
*/
|
|
6
|
-
export interface OutboxEvent<TPayload> {
|
|
7
|
-
id: string;
|
|
8
|
-
spaceId: string;
|
|
9
|
-
aggregateType: string;
|
|
10
|
-
aggregateId: string;
|
|
11
|
-
eventType: string;
|
|
12
|
-
schemaVersion: number;
|
|
13
|
-
payload: TPayload;
|
|
14
|
-
status: OutboxEventStatus;
|
|
15
|
-
attempts: number;
|
|
16
|
-
availableAt: Date;
|
|
17
|
-
lockedAt?: Date;
|
|
18
|
-
lockedUntil?: Date;
|
|
19
|
-
lockedBy?: string;
|
|
20
|
-
createdAt: Date;
|
|
21
|
-
lastAttemptAt?: Date;
|
|
22
|
-
publishedAt?: Date;
|
|
23
|
-
lastError?: string;
|
|
24
|
-
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { ID } from './Conversation';
|
|
2
|
-
import { QueueRoutingPolicy } from './Routing';
|
|
3
|
-
export declare const CONVERSATION_QUEUES_COLLECTION = "conversation_queues";
|
|
4
|
-
export type QueueSlaTransferBehavior = 'preserve' | 'restart' | 'recalculate';
|
|
5
|
-
export type ConversationQueueSlaConfig = {
|
|
6
|
-
enabled: false;
|
|
7
|
-
policyId?: never;
|
|
8
|
-
policyVersion?: never;
|
|
9
|
-
onTransferIn?: never;
|
|
10
|
-
} | {
|
|
11
|
-
enabled: true;
|
|
12
|
-
policyId: ID;
|
|
13
|
-
policyVersion: number;
|
|
14
|
-
onTransferIn: QueueSlaTransferBehavior;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* distribution:
|
|
18
|
-
* visibility follows shared, manual_pull or exclusive routing semantics.
|
|
19
|
-
* all_current:
|
|
20
|
-
* all authorized queue members can see current queue conversations.
|
|
21
|
-
*/
|
|
22
|
-
export type QueueMemberAudienceMode = 'distribution' | 'all_current' | 'none';
|
|
23
|
-
export type QueueSupervisorAudienceMode = 'all_current' | 'sla_only' | 'escalations_only' | 'none';
|
|
24
|
-
export interface ConversationQueueAudienceConfig {
|
|
25
|
-
members: {
|
|
26
|
-
mode: QueueMemberAudienceMode;
|
|
27
|
-
requireActiveParticipation: boolean;
|
|
28
|
-
includeResolved: boolean;
|
|
29
|
-
};
|
|
30
|
-
supervisors: {
|
|
31
|
-
mode: QueueSupervisorAudienceMode;
|
|
32
|
-
includeResolved: boolean;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
export interface ConversationQueueInfo {
|
|
36
|
-
id: ID;
|
|
37
|
-
name: string;
|
|
38
|
-
color?: string;
|
|
39
|
-
enabled: boolean;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Conversation routing, supervision and reporting boundary.
|
|
43
|
-
* Groups only provide user membership; they never own conversations.
|
|
44
|
-
*/
|
|
45
|
-
export interface ConversationQueue {
|
|
46
|
-
id: ID;
|
|
47
|
-
spaceId: ID;
|
|
48
|
-
name: string;
|
|
49
|
-
description?: string;
|
|
50
|
-
color?: string;
|
|
51
|
-
enabled: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Higher values are evaluated first when multiple queues match.
|
|
54
|
-
*/
|
|
55
|
-
priority: number;
|
|
56
|
-
memberGroupIds: ID[];
|
|
57
|
-
supervisorGroupIds: ID[];
|
|
58
|
-
routing: QueueRoutingPolicy;
|
|
59
|
-
sla: ConversationQueueSlaConfig;
|
|
60
|
-
audience: ConversationQueueAudienceConfig;
|
|
61
|
-
version: number;
|
|
62
|
-
createdAt: Date;
|
|
63
|
-
createdByUserId?: ID;
|
|
64
|
-
updatedAt: Date;
|
|
65
|
-
updatedByUserId?: ID;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Editable Queue definition sent by clients.
|
|
69
|
-
*
|
|
70
|
-
* It excludes id, version and audit fields controlled by the backend. Nested
|
|
71
|
-
* routing, SLA and audience objects use full-replacement semantics.
|
|
72
|
-
*/
|
|
73
|
-
export interface ConversationQueueDefinitionInput {
|
|
74
|
-
name: string;
|
|
75
|
-
description?: string;
|
|
76
|
-
color?: string;
|
|
77
|
-
enabled: boolean;
|
|
78
|
-
priority: number;
|
|
79
|
-
memberGroupIds: ID[];
|
|
80
|
-
supervisorGroupIds: ID[];
|
|
81
|
-
routing: QueueRoutingPolicy;
|
|
82
|
-
sla: ConversationQueueSlaConfig;
|
|
83
|
-
audience: ConversationQueueAudienceConfig;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Creates a Queue. commandId makes retries idempotent. The backend assigns
|
|
87
|
-
* queue id, version and audit fields.
|
|
88
|
-
*/
|
|
89
|
-
export interface CreateConversationQueueRequest {
|
|
90
|
-
commandId: ID;
|
|
91
|
-
spaceId: ID;
|
|
92
|
-
definition: ConversationQueueDefinitionInput;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Replaces the editable definition of an existing Queue.
|
|
96
|
-
*
|
|
97
|
-
* expectedVersion is the version loaded by the client; it is not incremented
|
|
98
|
-
* by the client. The backend rejects stale writes and returns the updated
|
|
99
|
-
* ConversationQueue with its new version and audit fields.
|
|
100
|
-
*/
|
|
101
|
-
export interface UpdateConversationQueueRequest {
|
|
102
|
-
commandId: ID;
|
|
103
|
-
spaceId: ID;
|
|
104
|
-
queueId: ID;
|
|
105
|
-
expectedVersion: number;
|
|
106
|
-
definition: ConversationQueueDefinitionInput;
|
|
107
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { ChannelType } from '../Common/Channels/ChannelType';
|
|
2
|
-
interface QueueRoutingPolicyBase {
|
|
3
|
-
requiredSkills?: string[];
|
|
4
|
-
optionalSkills?: string[];
|
|
5
|
-
acceptedChannelTypes: ChannelType[];
|
|
6
|
-
requireActiveParticipation: boolean;
|
|
7
|
-
requireAvailablePresence: boolean;
|
|
8
|
-
requireAcceptance: boolean;
|
|
9
|
-
capacityPolicy: {
|
|
10
|
-
maxConcurrentByChannelType: Partial<Record<ChannelType, number>>;
|
|
11
|
-
weightByChannelType: Partial<Record<ChannelType, number>>;
|
|
12
|
-
};
|
|
13
|
-
fallback: {
|
|
14
|
-
action: 'keep_queued' | 'overflow_queue' | 'assign_supervisor';
|
|
15
|
-
overflowQueueId?: string;
|
|
16
|
-
timeoutSeconds?: number;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Resolves the ownerUserId of the contact or business associated with the
|
|
21
|
-
* conversation. The resolved user is still subject to every Queue eligibility
|
|
22
|
-
* rule.
|
|
23
|
-
*/
|
|
24
|
-
export interface PartyOwnerAssigneeResolver {
|
|
25
|
-
type: 'party_owner';
|
|
26
|
-
mode: 'prefer' | 'required';
|
|
27
|
-
}
|
|
28
|
-
export type QueueOwnerAssigneeResolver = PartyOwnerAssigneeResolver;
|
|
29
|
-
export type QueueRoutingPolicy = (QueueRoutingPolicyBase & {
|
|
30
|
-
distributionMode: 'shared';
|
|
31
|
-
strategy?: never;
|
|
32
|
-
ownerResolver?: never;
|
|
33
|
-
}) | (QueueRoutingPolicyBase & {
|
|
34
|
-
distributionMode: 'manual_pull';
|
|
35
|
-
strategy?: never;
|
|
36
|
-
ownerResolver?: never;
|
|
37
|
-
}) | (QueueRoutingPolicyBase & {
|
|
38
|
-
distributionMode: 'exclusive';
|
|
39
|
-
strategy: QueueRoutingStrategy;
|
|
40
|
-
ownerResolver?: undefined | (PartyOwnerAssigneeResolver & {
|
|
41
|
-
mode: 'prefer';
|
|
42
|
-
});
|
|
43
|
-
}) | (QueueRoutingPolicyBase & {
|
|
44
|
-
distributionMode: 'exclusive';
|
|
45
|
-
strategy?: never;
|
|
46
|
-
ownerResolver: PartyOwnerAssigneeResolver & {
|
|
47
|
-
mode: 'required';
|
|
48
|
-
};
|
|
49
|
-
});
|
|
50
|
-
export type QueueRoutingConfig = QueueRoutingPolicy & {
|
|
51
|
-
queueId: string;
|
|
52
|
-
spaceId: string;
|
|
53
|
-
version: number;
|
|
54
|
-
updatedAt: Date;
|
|
55
|
-
};
|
|
56
|
-
export type QueueDistributionMode = 'shared' | 'exclusive' | 'manual_pull';
|
|
57
|
-
export type QueueRoutingStrategy = 'round_robin' | 'least_busy' | 'random' | 'highest_capacity' | 'skills' | 'account_affinity' | 'longest_idle' | 'manual';
|
|
58
|
-
export interface RoutingCandidate {
|
|
59
|
-
userId: string;
|
|
60
|
-
queueId: string;
|
|
61
|
-
authorized: boolean;
|
|
62
|
-
participating: boolean;
|
|
63
|
-
available: boolean;
|
|
64
|
-
channelEligible: boolean;
|
|
65
|
-
capacityUsed: number;
|
|
66
|
-
capacityTotal: number;
|
|
67
|
-
lastAssignedAt?: Date;
|
|
68
|
-
idleSince?: Date;
|
|
69
|
-
skills: string[];
|
|
70
|
-
accountAffinityScore?: number;
|
|
71
|
-
}
|
|
72
|
-
export type RoutingPartyType = 'contact' | 'business';
|
|
73
|
-
/**
|
|
74
|
-
* Snapshot resolved by the command producer. The routing worker must not read
|
|
75
|
-
* Contacts again to obtain ownerUserId.
|
|
76
|
-
*/
|
|
77
|
-
export type RoutingPartyContext = {
|
|
78
|
-
status: 'not_found';
|
|
79
|
-
partyType: RoutingPartyType;
|
|
80
|
-
partyId?: string;
|
|
81
|
-
ownerUserId?: never;
|
|
82
|
-
} | {
|
|
83
|
-
status: 'without_owner';
|
|
84
|
-
partyType: RoutingPartyType;
|
|
85
|
-
partyId: string;
|
|
86
|
-
ownerUserId?: never;
|
|
87
|
-
} | {
|
|
88
|
-
status: 'resolved';
|
|
89
|
-
partyType: RoutingPartyType;
|
|
90
|
-
partyId: string;
|
|
91
|
-
ownerUserId: string;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* Idempotent request for routing a queued conversation.
|
|
95
|
-
*
|
|
96
|
-
* contact/business ownership is captured in party by the producer so the
|
|
97
|
-
* routing worker can evaluate it against candidates without another read.
|
|
98
|
-
*/
|
|
99
|
-
export interface RouteConversationCommand {
|
|
100
|
-
commandId: string;
|
|
101
|
-
sourceEventId: string;
|
|
102
|
-
spaceId: string;
|
|
103
|
-
conversationId: string;
|
|
104
|
-
queueId: string;
|
|
105
|
-
expectedConversationVersion: number;
|
|
106
|
-
queueConfigVersion: number;
|
|
107
|
-
party: RoutingPartyContext;
|
|
108
|
-
requestedAt: Date;
|
|
109
|
-
}
|
|
110
|
-
export type RoutingSelectionSource = 'party_owner' | 'strategy' | 'fallback';
|
|
111
|
-
export type PartyOwnerResolutionFailure = 'party_not_found' | 'party_without_owner' | 'owner_user_not_found' | 'not_authorized' | 'not_participating' | 'unavailable' | 'channel_ineligible' | 'capacity_exhausted';
|
|
112
|
-
type FailedPartyOwnerEvaluation = {
|
|
113
|
-
party: Extract<RoutingPartyContext, {
|
|
114
|
-
status: 'not_found';
|
|
115
|
-
}>;
|
|
116
|
-
outcome: 'party_not_found';
|
|
117
|
-
} | {
|
|
118
|
-
party: Extract<RoutingPartyContext, {
|
|
119
|
-
status: 'without_owner';
|
|
120
|
-
}>;
|
|
121
|
-
outcome: 'party_without_owner';
|
|
122
|
-
} | {
|
|
123
|
-
party: Extract<RoutingPartyContext, {
|
|
124
|
-
status: 'resolved';
|
|
125
|
-
}>;
|
|
126
|
-
outcome: Exclude<PartyOwnerResolutionFailure, 'party_not_found' | 'party_without_owner'>;
|
|
127
|
-
};
|
|
128
|
-
export type PartyOwnerAssigneeEvaluation = {
|
|
129
|
-
type: 'party_owner';
|
|
130
|
-
mode: PartyOwnerAssigneeResolver['mode'];
|
|
131
|
-
party: Extract<RoutingPartyContext, {
|
|
132
|
-
status: 'resolved';
|
|
133
|
-
}>;
|
|
134
|
-
outcome: 'selected';
|
|
135
|
-
nextStep?: never;
|
|
136
|
-
} | (FailedPartyOwnerEvaluation & {
|
|
137
|
-
type: 'party_owner';
|
|
138
|
-
mode: 'prefer';
|
|
139
|
-
nextStep: 'strategy';
|
|
140
|
-
}) | (FailedPartyOwnerEvaluation & {
|
|
141
|
-
type: 'party_owner';
|
|
142
|
-
mode: 'required';
|
|
143
|
-
nextStep: 'fallback';
|
|
144
|
-
});
|
|
145
|
-
export interface RoutingDecision {
|
|
146
|
-
decisionId: string;
|
|
147
|
-
spaceId: string;
|
|
148
|
-
conversationId: string;
|
|
149
|
-
queueId: string;
|
|
150
|
-
distributionMode: QueueDistributionMode;
|
|
151
|
-
strategy?: QueueRoutingStrategy;
|
|
152
|
-
eligibleUserIds: string[];
|
|
153
|
-
selectedUserId?: string;
|
|
154
|
-
selectionSource?: RoutingSelectionSource;
|
|
155
|
-
ownerEvaluation?: PartyOwnerAssigneeEvaluation;
|
|
156
|
-
rejected: Array<{
|
|
157
|
-
userId: string;
|
|
158
|
-
reasons: string[];
|
|
159
|
-
}>;
|
|
160
|
-
queueConfigVersion: number;
|
|
161
|
-
conversationVersion: number;
|
|
162
|
-
createdAt: Date;
|
|
163
|
-
}
|
|
164
|
-
export {};
|