@trii/types 2.10.764 → 2.10.766

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.
Files changed (111) hide show
  1. package/dist/Automations/Events/Event.d.ts +3 -3
  2. package/dist/Common/Messages/Message.d.ts +1 -0
  3. package/dist/Common/index.js +7 -17
  4. package/dist/Contacts/CommunicationEndpoint.d.ts +8 -8
  5. package/dist/Conversations/Classifications/ConversationClassificationEvents.d.ts +2 -2
  6. package/dist/Conversations/Conversation.d.ts +11 -11
  7. package/dist/Conversations/InboxMongo.d.ts +12 -12
  8. package/dist/Conversations/InboxQueries.d.ts +73 -3
  9. package/dist/Conversations/Routing.d.ts +10 -10
  10. package/dist/Conversations/index.js +7 -17
  11. package/dist/Events/DomainEventTypes.d.ts +23 -23
  12. package/dist/Spaces/spaces.d.ts +2 -2
  13. package/dist/Tickets/Automation.d.ts +2 -0
  14. package/dist/Tickets/Automation.js +2 -0
  15. package/dist/Tickets/Routing.d.ts +9 -0
  16. package/dist/Tickets/Workflow.d.ts +3 -1
  17. package/dist/Tickets/Workflow.js +2 -0
  18. package/dist/index.js +7 -17
  19. package/dist/src/Automations/Capabilities/Capability.d.ts +81 -0
  20. package/dist/src/Automations/Capabilities/Capability.js +23 -0
  21. package/dist/src/Automations/Capabilities/index.d.ts +1 -0
  22. package/dist/src/Automations/Capabilities/index.js +17 -0
  23. package/dist/src/Automations/Common.d.ts +94 -0
  24. package/dist/src/Automations/Common.js +40 -0
  25. package/dist/src/Automations/Events/Event.d.ts +69 -0
  26. package/dist/src/Automations/Events/Event.js +14 -0
  27. package/dist/src/Automations/Events/index.d.ts +1 -0
  28. package/dist/src/Automations/Events/index.js +17 -0
  29. package/dist/src/Automations/Executions/Execution.d.ts +254 -0
  30. package/dist/src/Automations/Executions/Execution.js +62 -0
  31. package/dist/src/Automations/Executions/Testing.d.ts +166 -0
  32. package/dist/src/Automations/Executions/Testing.js +54 -0
  33. package/dist/src/Automations/Executions/index.d.ts +2 -0
  34. package/dist/src/Automations/Executions/index.js +18 -0
  35. package/dist/src/Automations/Flows/Canvas.d.ts +103 -0
  36. package/dist/src/Automations/Flows/Canvas.js +38 -0
  37. package/dist/src/Automations/Flows/Flow.d.ts +147 -0
  38. package/dist/src/Automations/Flows/Flow.js +58 -0
  39. package/dist/src/Automations/Flows/Requests.d.ts +71 -0
  40. package/dist/src/Automations/Flows/Validation.d.ts +28 -0
  41. package/dist/src/Automations/Flows/Validation.js +9 -0
  42. package/dist/src/Automations/Flows/index.d.ts +4 -0
  43. package/dist/src/Automations/Flows/index.js +20 -0
  44. package/dist/src/Automations/Nodes/Node.d.ts +113 -0
  45. package/dist/src/Automations/Nodes/Node.js +27 -0
  46. package/dist/src/Automations/Nodes/index.d.ts +1 -0
  47. package/dist/src/Automations/Nodes/index.js +17 -0
  48. package/dist/src/Automations/index.d.ts +6 -0
  49. package/dist/src/Automations/index.js +22 -0
  50. package/dist/src/Chats/Chat.d.ts +61 -0
  51. package/dist/src/Chats/Chat.js +28 -0
  52. package/dist/src/Common/Channels/Channel.d.ts +28 -1
  53. package/dist/src/Contacts/contacts.d.ts +2 -2
  54. package/dist/src/Conversations/Assignment.d.ts +81 -0
  55. package/dist/src/Conversations/Assignment.js +4 -0
  56. package/dist/src/Conversations/Conversation.d.ts +331 -48
  57. package/dist/src/Conversations/Conversation.js +14 -34
  58. package/dist/src/Conversations/DashBoard/dashboard.d.ts +2 -2
  59. package/dist/src/Conversations/Flows/Workflows/Workflow.d.ts +280 -123
  60. package/dist/src/Conversations/Flows/Workflows/Workflow.js +85 -35
  61. package/dist/src/Conversations/Groups/Group.d.ts +2 -8
  62. package/dist/src/Conversations/Groups/Group.js +0 -6
  63. package/dist/src/Conversations/InboxMongo.d.ts +154 -0
  64. package/dist/src/Conversations/InboxMongo.js +128 -0
  65. package/dist/src/Conversations/InboxProjection.d.ts +162 -0
  66. package/dist/src/Conversations/InboxProjection.js +2 -0
  67. package/dist/src/Conversations/Label.d.ts +1 -1
  68. package/dist/src/Conversations/Outbox.d.ts +24 -0
  69. package/dist/src/Conversations/Outbox.js +4 -0
  70. package/dist/src/Conversations/Queue.d.ts +107 -0
  71. package/dist/src/Conversations/Queue.js +4 -0
  72. package/dist/src/Conversations/Routing.d.ts +164 -0
  73. package/dist/src/Conversations/Routing.js +2 -0
  74. package/dist/src/Conversations/Sla.d.ts +227 -0
  75. package/dist/src/Conversations/Sla.js +6 -0
  76. package/dist/src/Conversations/Transfer.d.ts +73 -0
  77. package/dist/src/Conversations/Transfer.js +2 -0
  78. package/dist/src/Conversations/WebHook.d.ts +1 -1
  79. package/dist/src/Conversations/index.d.ts +9 -1
  80. package/dist/src/Conversations/index.js +9 -1
  81. package/dist/src/Forms/API.d.ts +53 -0
  82. package/dist/src/Forms/API.js +2 -0
  83. package/dist/src/Forms/SubmittedForm.d.ts +56 -0
  84. package/dist/src/Forms/SubmittedForm.js +9 -0
  85. package/dist/src/Forms/index.d.ts +2 -0
  86. package/dist/src/Forms/index.js +18 -0
  87. package/dist/src/Presence/AgentPause.d.ts +24 -0
  88. package/dist/src/Presence/AgentPause.js +19 -0
  89. package/dist/src/Presence/QueueParticipation.d.ts +17 -0
  90. package/dist/src/Presence/QueueParticipation.js +2 -0
  91. package/dist/src/Presence/QueueRoutingState.d.ts +27 -0
  92. package/dist/src/Presence/QueueRoutingState.js +9 -0
  93. package/dist/src/Presence/index.d.ts +3 -0
  94. package/dist/src/Presence/index.js +19 -0
  95. package/dist/src/Tickets/Category.d.ts +18 -0
  96. package/dist/src/Tickets/Dashboard.d.ts +78 -0
  97. package/dist/src/Tickets/Dashboard.js +13 -1
  98. package/dist/src/Tickets/Fields.d.ts +1 -0
  99. package/dist/src/Tickets/Layouts.d.ts +3 -1
  100. package/dist/src/Tickets/Workflow.d.ts +20 -0
  101. package/dist/src/Users/UserTrii.d.ts +10 -0
  102. package/dist/src/Users/UserTrii.js +8 -1
  103. package/dist/src/index.d.ts +3 -0
  104. package/dist/src/index.js +4 -1
  105. package/package.json +5 -2
  106. package/dist/Conversations/DashBoard/dashboardForms.d.ts +0 -44
  107. package/dist/Conversations/DashBoard/dashboardForms.js +0 -24
  108. package/dist/Conversations/InboxCounters.d.ts +0 -18
  109. package/dist/src/Conversations/DashBoard/dashboardForms.d.ts +0 -44
  110. package/dist/src/Conversations/DashBoard/dashboardForms.js +0 -24
  111. /package/dist/{Conversations/InboxCounters.js → src/Automations/Flows/Requests.js} +0 -0
@@ -0,0 +1,154 @@
1
+ import { ID, InboxViewId } from './Conversation';
2
+ export declare const CONVERSATION_SUBSCRIPTIONS_COLLECTION = "conversation_subscriptions";
3
+ export declare const USER_INBOX_ITEMS_COLLECTION = "user_inbox_items";
4
+ export declare const USER_INBOX_COUNTERS_COLLECTION = "user_inbox_counters";
5
+ export declare const INBOX_PROCESSOR_RECEIPTS_COLLECTION = "inbox_processor_receipts";
6
+ /**
7
+ * MongoDB indexes for conversation_subscriptions.
8
+ *
9
+ * The unique index enforces one current subscription state per
10
+ * user/conversation. The follower index resolves the active followers that
11
+ * InboxAudienceResolver receives as input.
12
+ */
13
+ export declare const CONVERSATION_SUBSCRIPTION_INDEXES: readonly [{
14
+ readonly name: 'uq_subscription_user_conversation';
15
+ readonly key: {
16
+ readonly spaceId: 1;
17
+ readonly userId: 1;
18
+ readonly conversationId: 1;
19
+ };
20
+ readonly unique: true;
21
+ }, {
22
+ readonly name: 'ix_subscription_conversation_followers';
23
+ readonly key: {
24
+ readonly spaceId: 1;
25
+ readonly conversationId: 1;
26
+ readonly status: 1;
27
+ readonly userId: 1;
28
+ };
29
+ }];
30
+ /**
31
+ * MongoDB indexes for user_inbox_items.
32
+ *
33
+ * views.viewId is the only array field in each compound index. Do not add
34
+ * views.visibilityReasons to these indexes: MongoDB compound multikey indexes
35
+ * must not combine multiple array paths.
36
+ */
37
+ export declare const USER_INBOX_ITEM_INDEXES: readonly [{
38
+ readonly name: 'uq_inbox_item_user_conversation';
39
+ readonly key: {
40
+ readonly spaceId: 1;
41
+ readonly userId: 1;
42
+ readonly conversationId: 1;
43
+ };
44
+ readonly unique: true;
45
+ }, {
46
+ readonly name: 'ix_inbox_view_activity';
47
+ readonly key: {
48
+ readonly spaceId: 1;
49
+ readonly userId: 1;
50
+ readonly 'views.viewId': 1;
51
+ readonly pinned: -1;
52
+ readonly sortAt: -1;
53
+ readonly id: -1;
54
+ };
55
+ }, {
56
+ readonly name: 'ix_inbox_view_priority';
57
+ readonly key: {
58
+ readonly spaceId: 1;
59
+ readonly userId: 1;
60
+ readonly 'views.viewId': 1;
61
+ readonly pinned: -1;
62
+ readonly priorityScore: -1;
63
+ readonly sortAt: -1;
64
+ readonly id: -1;
65
+ };
66
+ }, {
67
+ readonly name: 'ix_inbox_view_status_activity';
68
+ readonly key: {
69
+ readonly spaceId: 1;
70
+ readonly userId: 1;
71
+ readonly 'views.viewId': 1;
72
+ readonly 'snapshot.status': 1;
73
+ readonly sortAt: -1;
74
+ readonly id: -1;
75
+ };
76
+ }, {
77
+ readonly name: 'ix_inbox_view_queue_activity';
78
+ readonly key: {
79
+ readonly spaceId: 1;
80
+ readonly userId: 1;
81
+ readonly 'views.viewId': 1;
82
+ readonly 'snapshot.queueId': 1;
83
+ readonly sortAt: -1;
84
+ readonly id: -1;
85
+ };
86
+ }];
87
+ /**
88
+ * MongoDB indexes for user_inbox_counters.
89
+ *
90
+ * The unique index also serves reads for all views of a user through its
91
+ * spaceId + userId prefix.
92
+ */
93
+ export declare const USER_INBOX_COUNTER_INDEXES: readonly [{
94
+ readonly name: 'uq_inbox_counter_user_view';
95
+ readonly key: {
96
+ readonly spaceId: 1;
97
+ readonly userId: 1;
98
+ readonly viewId: 1;
99
+ };
100
+ readonly unique: true;
101
+ }];
102
+ /**
103
+ * MongoDB indexes for durable processor idempotency receipts.
104
+ */
105
+ export declare const INBOX_PROCESSOR_RECEIPT_INDEXES: readonly [{
106
+ readonly name: 'uq_inbox_processor_source_scope';
107
+ readonly key: {
108
+ readonly processor: 1;
109
+ readonly sourceEventId: 1;
110
+ readonly scopeKey: 1;
111
+ };
112
+ readonly unique: true;
113
+ }];
114
+ export type InboxPaginationSort = 'activity' | 'priority';
115
+ /**
116
+ * Seek-pagination cursor matching ix_inbox_view_activity.
117
+ */
118
+ export interface InboxActivityCursor {
119
+ sort: 'activity';
120
+ pinned: boolean;
121
+ sortAt: Date;
122
+ id: ID;
123
+ }
124
+ /**
125
+ * Seek-pagination cursor matching ix_inbox_view_priority.
126
+ */
127
+ export interface InboxPriorityCursor {
128
+ sort: 'priority';
129
+ pinned: boolean;
130
+ priorityScore: number;
131
+ sortAt: Date;
132
+ id: ID;
133
+ }
134
+ export type InboxPaginationCursor = InboxActivityCursor | InboxPriorityCursor;
135
+ /**
136
+ * Query contract for one logical inbox view.
137
+ *
138
+ * Implementations must use seek pagination with cursor; skip pagination is not
139
+ * compatible with frequently changing sortAt values.
140
+ */
141
+ interface InboxPageQueryBase {
142
+ spaceId: ID;
143
+ userId: ID;
144
+ viewId: InboxViewId;
145
+ limit: number;
146
+ }
147
+ export type InboxPageQuery = (InboxPageQueryBase & {
148
+ sort: 'activity';
149
+ cursor?: InboxActivityCursor;
150
+ }) | (InboxPageQueryBase & {
151
+ sort: 'priority';
152
+ cursor?: InboxPriorityCursor;
153
+ });
154
+ export {};
@@ -0,0 +1,128 @@
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
+ ];
@@ -0,0 +1,162 @@
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
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +1,6 @@
1
1
  interface ILabel {
2
2
  id?: string | null;
3
- tenantId?: string | null;
3
+ spaceId?: string | null;
4
4
  name?: string | null;
5
5
  color?: string | null;
6
6
  createdAt?: string | null;
@@ -0,0 +1,24 @@
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
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OUTBOX_EVENTS_COLLECTION = void 0;
4
+ exports.OUTBOX_EVENTS_COLLECTION = 'outbox_events';
@@ -0,0 +1,107 @@
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
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONVERSATION_QUEUES_COLLECTION = void 0;
4
+ exports.CONVERSATION_QUEUES_COLLECTION = 'conversation_queues';