clarion-shared-types 1.0.89 → 1.0.91

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 (78) hide show
  1. package/dist/cjs/index.js +1 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/modules/partner/enums/partner-enums.js +95 -1
  4. package/dist/cjs/modules/partner/enums/partner-enums.js.map +1 -1
  5. package/dist/cjs/modules/partner/index.js +1 -0
  6. package/dist/cjs/modules/partner/index.js.map +1 -1
  7. package/dist/cjs/modules/partner/interfaces/partner-membership.dto.js +3 -0
  8. package/dist/cjs/modules/partner/interfaces/partner-membership.dto.js.map +1 -0
  9. package/dist/cjs/modules/partner/utils/partner-display.util.js +151 -1
  10. package/dist/cjs/modules/partner/utils/partner-display.util.js.map +1 -1
  11. package/dist/cjs/modules/permission/enums/permission-actions.enum.js +40 -0
  12. package/dist/cjs/modules/permission/enums/permission-actions.enum.js.map +1 -1
  13. package/dist/cjs/modules/permission/enums/permissions-moudule.enum.js +1 -0
  14. package/dist/cjs/modules/permission/enums/permissions-moudule.enum.js.map +1 -1
  15. package/dist/cjs/modules/support/enums/support-enums.js +375 -0
  16. package/dist/cjs/modules/support/enums/support-enums.js.map +1 -0
  17. package/dist/cjs/modules/support/index.js +27 -0
  18. package/dist/cjs/modules/support/index.js.map +1 -0
  19. package/dist/cjs/modules/support/interfaces/customer-feedback.dto.js +3 -0
  20. package/dist/cjs/modules/support/interfaces/customer-feedback.dto.js.map +1 -0
  21. package/dist/cjs/modules/support/interfaces/support-configuration.dto.js +3 -0
  22. package/dist/cjs/modules/support/interfaces/support-configuration.dto.js.map +1 -0
  23. package/dist/cjs/modules/support/interfaces/support-reports.dto.js +3 -0
  24. package/dist/cjs/modules/support/interfaces/support-reports.dto.js.map +1 -0
  25. package/dist/cjs/modules/support/interfaces/support-sync.dto.js +3 -0
  26. package/dist/cjs/modules/support/interfaces/support-sync.dto.js.map +1 -0
  27. package/dist/cjs/modules/support/interfaces/support-ticket.dto.js +3 -0
  28. package/dist/cjs/modules/support/interfaces/support-ticket.dto.js.map +1 -0
  29. package/dist/cjs/modules/support/utils/support-display.util.js +364 -0
  30. package/dist/cjs/modules/support/utils/support-display.util.js.map +1 -0
  31. package/dist/esm/index.js +1 -0
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/modules/partner/enums/partner-enums.js +94 -0
  34. package/dist/esm/modules/partner/enums/partner-enums.js.map +1 -1
  35. package/dist/esm/modules/partner/index.js +1 -0
  36. package/dist/esm/modules/partner/index.js.map +1 -1
  37. package/dist/esm/modules/partner/interfaces/partner-membership.dto.js +2 -0
  38. package/dist/esm/modules/partner/interfaces/partner-membership.dto.js.map +1 -0
  39. package/dist/esm/modules/partner/utils/partner-display.util.js +148 -1
  40. package/dist/esm/modules/partner/utils/partner-display.util.js.map +1 -1
  41. package/dist/esm/modules/permission/enums/permission-actions.enum.js +40 -0
  42. package/dist/esm/modules/permission/enums/permission-actions.enum.js.map +1 -1
  43. package/dist/esm/modules/permission/enums/permissions-moudule.enum.js +1 -0
  44. package/dist/esm/modules/permission/enums/permissions-moudule.enum.js.map +1 -1
  45. package/dist/esm/modules/support/enums/support-enums.js +372 -0
  46. package/dist/esm/modules/support/enums/support-enums.js.map +1 -0
  47. package/dist/esm/modules/support/index.js +11 -0
  48. package/dist/esm/modules/support/index.js.map +1 -0
  49. package/dist/esm/modules/support/interfaces/customer-feedback.dto.js +2 -0
  50. package/dist/esm/modules/support/interfaces/customer-feedback.dto.js.map +1 -0
  51. package/dist/esm/modules/support/interfaces/support-configuration.dto.js +2 -0
  52. package/dist/esm/modules/support/interfaces/support-configuration.dto.js.map +1 -0
  53. package/dist/esm/modules/support/interfaces/support-reports.dto.js +2 -0
  54. package/dist/esm/modules/support/interfaces/support-reports.dto.js.map +1 -0
  55. package/dist/esm/modules/support/interfaces/support-sync.dto.js +2 -0
  56. package/dist/esm/modules/support/interfaces/support-sync.dto.js.map +1 -0
  57. package/dist/esm/modules/support/interfaces/support-ticket.dto.js +2 -0
  58. package/dist/esm/modules/support/interfaces/support-ticket.dto.js.map +1 -0
  59. package/dist/esm/modules/support/utils/support-display.util.js +351 -0
  60. package/dist/esm/modules/support/utils/support-display.util.js.map +1 -0
  61. package/dist/types/index.d.ts +1 -0
  62. package/dist/types/modules/partner/enums/partner-enums.d.ts +86 -0
  63. package/dist/types/modules/partner/index.d.ts +1 -0
  64. package/dist/types/modules/partner/interfaces/partner-integration.dto.d.ts +24 -1
  65. package/dist/types/modules/partner/interfaces/partner-membership.dto.d.ts +176 -0
  66. package/dist/types/modules/partner/interfaces/partner-provider.dto.d.ts +10 -0
  67. package/dist/types/modules/partner/utils/partner-display.util.d.ts +51 -1
  68. package/dist/types/modules/permission/enums/permission-actions.enum.d.ts +29 -1
  69. package/dist/types/modules/permission/enums/permissions-moudule.enum.d.ts +2 -1
  70. package/dist/types/modules/support/enums/support-enums.d.ts +341 -0
  71. package/dist/types/modules/support/index.d.ts +7 -0
  72. package/dist/types/modules/support/interfaces/customer-feedback.dto.d.ts +151 -0
  73. package/dist/types/modules/support/interfaces/support-configuration.dto.d.ts +244 -0
  74. package/dist/types/modules/support/interfaces/support-reports.dto.d.ts +146 -0
  75. package/dist/types/modules/support/interfaces/support-sync.dto.d.ts +92 -0
  76. package/dist/types/modules/support/interfaces/support-ticket.dto.d.ts +275 -0
  77. package/dist/types/modules/support/utils/support-display.util.d.ts +67 -0
  78. package/package.json +1 -1
@@ -0,0 +1,275 @@
1
+ import { CountryCode } from '../../country/enums/country-code.enum';
2
+ import { SupportMessageAuthorType, SupportMessageOrigin, SupportProviderCode, SupportRelatedEntityType, SupportSlaState, SupportSlaTarget, SupportTicketChannel, SupportTicketMessageType, SupportTicketPriority, SupportTicketSource, SupportTicketStatus } from '../enums/support-enums';
3
+ /** A pointer to a record owned by another service. Type plus id, never a copy. */
4
+ export interface SupportRelatedEntityDto {
5
+ type: SupportRelatedEntityType;
6
+ /** Text, because the owning services disagree on integer versus uuid. */
7
+ id: string;
8
+ /** Resolved for display; absent when it could not be resolved or may not be shown. */
9
+ label?: string | null;
10
+ }
11
+ /** Where one SLA clock stands. */
12
+ export interface SupportSlaClockDto {
13
+ target: SupportSlaTarget;
14
+ state: SupportSlaState;
15
+ dueAt: string | null;
16
+ metAt: string | null;
17
+ /** Negative once breached. Computed server-side so no client re-derives a deadline. */
18
+ remainingMinutes: number | null;
19
+ pausedMinutes: number;
20
+ }
21
+ /**
22
+ * A support ticket as the admin and the customer app receive it.
23
+ *
24
+ * The `external*` fields are the only place a helpdesk's identifiers appear in
25
+ * the browser - never its payloads, never its URLs and never its credentials.
26
+ */
27
+ export interface SupportTicketDto {
28
+ id: string;
29
+ ticketNumber: string;
30
+ organizationId: number;
31
+ controlCentreId: number | null;
32
+ countryCode: CountryCode;
33
+ appId: string | null;
34
+ createdByUserId: number;
35
+ customerUserId: number;
36
+ customerName: string | null;
37
+ assignedAgentId: number | null;
38
+ assignedAgentName: string | null;
39
+ assignedTeamId: string | null;
40
+ assignedTeamName: string | null;
41
+ queueId: string | null;
42
+ queueName: string | null;
43
+ categoryId: string | null;
44
+ categoryName: string | null;
45
+ subject: string;
46
+ description: string;
47
+ status: SupportTicketStatus;
48
+ priority: SupportTicketPriority;
49
+ channel: SupportTicketChannel;
50
+ source: SupportTicketSource;
51
+ tags: string[];
52
+ firstResponseDueAt: string | null;
53
+ resolutionDueAt: string | null;
54
+ firstRespondedAt: string | null;
55
+ resolvedAt: string | null;
56
+ closedAt: string | null;
57
+ reopenedAt: string | null;
58
+ firstResponseSlaState: SupportSlaState;
59
+ resolutionSlaState: SupportSlaState;
60
+ slaPolicyId: string | null;
61
+ /** Both clocks with their remaining time, so a chip needs no client arithmetic. */
62
+ slaClocks: SupportSlaClockDto[];
63
+ lastCustomerMessageAt: string | null;
64
+ lastAgentMessageAt: string | null;
65
+ messageCount: number;
66
+ reopenCount: number;
67
+ externalProvider: SupportProviderCode | null;
68
+ externalTicketId: string | null;
69
+ externalTicketNumber: string | null;
70
+ externalSyncPending: boolean;
71
+ externalSyncFailed: boolean;
72
+ externalLastSyncedAt: string | null;
73
+ relatedEntities: SupportRelatedEntityDto[];
74
+ sourceFeedbackId: string | null;
75
+ metadata: Record<string, unknown> | null;
76
+ version: number;
77
+ createdAt: string;
78
+ updatedAt: string;
79
+ }
80
+ /** The row shape a ticket list returns. A subset, so a page stays small. */
81
+ export interface SupportTicketSummaryDto {
82
+ id: string;
83
+ ticketNumber: string;
84
+ organizationId: number;
85
+ controlCentreId: number | null;
86
+ countryCode: CountryCode;
87
+ customerUserId: number;
88
+ customerName: string | null;
89
+ assignedAgentId: number | null;
90
+ assignedAgentName: string | null;
91
+ queueId: string | null;
92
+ queueName: string | null;
93
+ categoryId: string | null;
94
+ categoryName: string | null;
95
+ subject: string;
96
+ status: SupportTicketStatus;
97
+ priority: SupportTicketPriority;
98
+ channel: SupportTicketChannel;
99
+ firstResponseSlaState: SupportSlaState;
100
+ resolutionSlaState: SupportSlaState;
101
+ firstResponseDueAt: string | null;
102
+ resolutionDueAt: string | null;
103
+ lastCustomerMessageAt: string | null;
104
+ lastAgentMessageAt: string | null;
105
+ messageCount: number;
106
+ externalProvider: SupportProviderCode | null;
107
+ externalSyncPending: boolean;
108
+ externalSyncFailed: boolean;
109
+ createdAt: string;
110
+ updatedAt: string;
111
+ }
112
+ /** A file on a ticket. The bytes live in clarion-dms; this is the reference. */
113
+ export interface SupportTicketAttachmentDto {
114
+ id: string;
115
+ ticketId: string;
116
+ messageId: string | null;
117
+ documentId: number;
118
+ fileName: string;
119
+ mimeType: string;
120
+ sizeBytes: number;
121
+ uploadedByUserId: number | null;
122
+ fromProvider: boolean;
123
+ externalAttachmentId: string | null;
124
+ /**
125
+ * Short-lived and authorization-checked. Present only on a single-ticket
126
+ * read, never on a list. A provider's own attachment URL is never handed to
127
+ * a browser - those are frequently unauthenticated and permanent.
128
+ */
129
+ downloadUrl: string | null;
130
+ createdAt: string;
131
+ }
132
+ /** One entry in a ticket conversation. */
133
+ export interface SupportTicketMessageDto {
134
+ id: string;
135
+ ticketId: string;
136
+ type: SupportTicketMessageType;
137
+ authorType: SupportMessageAuthorType;
138
+ authorUserId: number | null;
139
+ authorName: string | null;
140
+ body: string;
141
+ origin: SupportMessageOrigin;
142
+ externalProvider: SupportProviderCode | null;
143
+ externalMessageId: string | null;
144
+ attachments: SupportTicketAttachmentDto[];
145
+ /** True while the entry has not reached the helpdesk yet. Shown differently on purpose. */
146
+ externalSyncPending: boolean;
147
+ metadata: Record<string, unknown> | null;
148
+ createdAt: string;
149
+ }
150
+ /** One recorded status change on the ticket timeline. */
151
+ export interface SupportTicketStatusHistoryDto {
152
+ id: string;
153
+ ticketId: string;
154
+ fromStatus: SupportTicketStatus | null;
155
+ toStatus: SupportTicketStatus;
156
+ changedByUserId: number | null;
157
+ changedByName: string | null;
158
+ fromProvider: boolean;
159
+ reason: string | null;
160
+ createdAt: string;
161
+ }
162
+ /** One recorded assignment change. */
163
+ export interface SupportTicketAssignmentHistoryDto {
164
+ id: string;
165
+ ticketId: string;
166
+ fromAgentId: number | null;
167
+ fromAgentName: string | null;
168
+ toAgentId: number | null;
169
+ toAgentName: string | null;
170
+ fromTeamId: string | null;
171
+ toTeamId: string | null;
172
+ fromQueueId: string | null;
173
+ toQueueId: string | null;
174
+ changedByUserId: number | null;
175
+ changedByName: string | null;
176
+ reason: string | null;
177
+ createdAt: string;
178
+ }
179
+ /** A ticket with everything the detail page renders, in one response. */
180
+ export interface SupportTicketDetailsDto {
181
+ ticket: SupportTicketDto;
182
+ messages: SupportTicketMessageDto[];
183
+ attachments: SupportTicketAttachmentDto[];
184
+ statusHistory: SupportTicketStatusHistoryDto[];
185
+ assignmentHistory: SupportTicketAssignmentHistoryDto[];
186
+ /** The states this ticket may legally move to, so the UI offers only those. */
187
+ allowedStatuses: SupportTicketStatus[];
188
+ }
189
+ /** Create a ticket. Send an `Idempotency-Key` header so a retry is not a duplicate. */
190
+ export interface CreateSupportTicketDto {
191
+ subject: string;
192
+ description: string;
193
+ categoryId?: string;
194
+ priority?: SupportTicketPriority;
195
+ channel?: SupportTicketChannel;
196
+ relatedEntities?: {
197
+ type: SupportRelatedEntityType;
198
+ id: string;
199
+ }[];
200
+ documentIds?: number[];
201
+ tags?: string[];
202
+ appId?: string;
203
+ countryCode?: CountryCode;
204
+ /** Super-admin only. */
205
+ organizationId?: number;
206
+ /** Agent raising a ticket for somebody else. */
207
+ customerUserId?: number;
208
+ metadata?: Record<string, unknown>;
209
+ }
210
+ export interface UpdateSupportTicketDto {
211
+ subject?: string;
212
+ categoryId?: string;
213
+ queueId?: string;
214
+ }
215
+ export interface AssignSupportTicketDto {
216
+ assignedAgentId?: number;
217
+ assignedTeamId?: string;
218
+ queueId?: string;
219
+ reason?: string;
220
+ }
221
+ export interface ChangeSupportTicketStatusDto {
222
+ status: SupportTicketStatus;
223
+ reason?: string;
224
+ /** Optional note posted to the customer alongside the change. */
225
+ message?: string;
226
+ }
227
+ export interface ChangeSupportTicketPriorityDto {
228
+ priority: SupportTicketPriority;
229
+ reason?: string;
230
+ }
231
+ export interface CreateSupportTicketMessageDto {
232
+ body: string;
233
+ documentIds?: number[];
234
+ }
235
+ export interface SetSupportTicketTagsDto {
236
+ tags: string[];
237
+ }
238
+ export interface CloseSupportTicketDto {
239
+ message?: string;
240
+ }
241
+ export interface ReopenSupportTicketDto {
242
+ reason: string;
243
+ }
244
+ export interface AttachSupportDocumentsDto {
245
+ documentIds: number[];
246
+ messageId?: string;
247
+ }
248
+ /** Filters for a ticket list. Narrows what the caller may already see. */
249
+ export interface SupportTicketQueryParams {
250
+ page?: number;
251
+ limit?: number;
252
+ search?: string;
253
+ sortBy?: string;
254
+ sortOrder?: 'ASC' | 'DESC';
255
+ status?: SupportTicketStatus;
256
+ activeOnly?: boolean;
257
+ priority?: SupportTicketPriority;
258
+ channel?: SupportTicketChannel;
259
+ countryCode?: CountryCode;
260
+ organizationId?: number;
261
+ controlCentreId?: number;
262
+ queueId?: string;
263
+ teamId?: string;
264
+ categoryId?: string;
265
+ assignedAgentId?: number;
266
+ unassignedOnly?: boolean;
267
+ customerUserId?: number;
268
+ slaState?: SupportSlaState;
269
+ breachedOnly?: boolean;
270
+ tag?: string;
271
+ externalProvider?: SupportProviderCode;
272
+ syncFailedOnly?: boolean;
273
+ from?: string;
274
+ to?: string;
275
+ }
@@ -0,0 +1,67 @@
1
+ import { CustomerFeedbackChannel, CustomerFeedbackSentiment, CustomerFeedbackStatus, CustomerFeedbackType, SupportMessageAuthorType, SupportProviderCapability, SupportProviderCode, SupportQueueAssignmentStrategy, SupportRelatedEntityType, SupportRoutingMatchType, SupportSlaClock, SupportSlaState, SupportSlaTarget, SupportSyncFailureReason, SupportSyncOperation, SupportSyncStatus, SupportTeamMemberRole, SupportTicketChannel, SupportTicketMessageType, SupportTicketPriority, SupportTicketSource, SupportTicketStatus, SupportWebhookStatus } from '../enums/support-enums';
2
+ /**
3
+ * Human labels for the support enums.
4
+ *
5
+ * Kept in the shared package rather than in the admin app so every screen that
6
+ * shows a ticket - the list, the detail page, the queue board, the customer's
7
+ * own screen - names the same state the same way. An operator reading "Waiting
8
+ * on customer" in one place and "Pending reply" in another would reasonably
9
+ * assume they were different things.
10
+ */
11
+ export declare const SUPPORT_TICKET_STATUS_LABELS: Readonly<Record<SupportTicketStatus, string>>;
12
+ export declare const SUPPORT_TICKET_PRIORITY_LABELS: Readonly<Record<SupportTicketPriority, string>>;
13
+ export declare const SUPPORT_TICKET_CHANNEL_LABELS: Readonly<Record<SupportTicketChannel, string>>;
14
+ export declare const SUPPORT_TICKET_SOURCE_LABELS: Readonly<Record<SupportTicketSource, string>>;
15
+ export declare const SUPPORT_TICKET_MESSAGE_TYPE_LABELS: Readonly<Record<SupportTicketMessageType, string>>;
16
+ export declare const SUPPORT_MESSAGE_AUTHOR_TYPE_LABELS: Readonly<Record<SupportMessageAuthorType, string>>;
17
+ export declare const SUPPORT_SLA_STATE_LABELS: Readonly<Record<SupportSlaState, string>>;
18
+ export declare const SUPPORT_SLA_TARGET_LABELS: Readonly<Record<SupportSlaTarget, string>>;
19
+ export declare const SUPPORT_SLA_CLOCK_LABELS: Readonly<Record<SupportSlaClock, string>>;
20
+ export declare const CUSTOMER_FEEDBACK_TYPE_LABELS: Readonly<Record<CustomerFeedbackType, string>>;
21
+ export declare const CUSTOMER_FEEDBACK_STATUS_LABELS: Readonly<Record<CustomerFeedbackStatus, string>>;
22
+ export declare const CUSTOMER_FEEDBACK_CHANNEL_LABELS: Readonly<Record<CustomerFeedbackChannel, string>>;
23
+ export declare const CUSTOMER_FEEDBACK_SENTIMENT_LABELS: Readonly<Record<CustomerFeedbackSentiment, string>>;
24
+ export declare const SUPPORT_PROVIDER_LABELS: Readonly<Record<SupportProviderCode, string>>;
25
+ export declare const SUPPORT_PROVIDER_CAPABILITY_LABELS: Readonly<Record<SupportProviderCapability, string>>;
26
+ export declare const SUPPORT_SYNC_STATUS_LABELS: Readonly<Record<SupportSyncStatus, string>>;
27
+ export declare const SUPPORT_SYNC_OPERATION_LABELS: Readonly<Record<SupportSyncOperation, string>>;
28
+ /**
29
+ * Failure reasons in words an operator can act on.
30
+ *
31
+ * Each one says what to DO, not just what happened. "Provider rejected the
32
+ * request" tells nobody anything; "the helpdesk refused the request - check the
33
+ * ticket's category mapping" is a next step.
34
+ */
35
+ export declare const SUPPORT_SYNC_FAILURE_REASON_LABELS: Readonly<Record<SupportSyncFailureReason, string>>;
36
+ export declare const SUPPORT_WEBHOOK_STATUS_LABELS: Readonly<Record<SupportWebhookStatus, string>>;
37
+ export declare const SUPPORT_RELATED_ENTITY_TYPE_LABELS: Readonly<Record<SupportRelatedEntityType, string>>;
38
+ export declare const SUPPORT_QUEUE_ASSIGNMENT_STRATEGY_LABELS: Readonly<Record<SupportQueueAssignmentStrategy, string>>;
39
+ export declare const SUPPORT_ROUTING_MATCH_TYPE_LABELS: Readonly<Record<SupportRoutingMatchType, string>>;
40
+ export declare const SUPPORT_TEAM_MEMBER_ROLE_LABELS: Readonly<Record<SupportTeamMemberRole, string>>;
41
+ /** Chip tone. The admin maps these four onto its own classes. */
42
+ export type SupportTone = 'success' | 'warn' | 'danger' | 'neutral' | 'info';
43
+ export declare function supportTicketStatusTone(status: SupportTicketStatus): SupportTone;
44
+ export declare function supportTicketPriorityTone(priority: SupportTicketPriority): SupportTone;
45
+ export declare function supportSlaStateTone(state: SupportSlaState): SupportTone;
46
+ export declare function supportSyncStatusTone(status: SupportSyncStatus): SupportTone;
47
+ export declare function customerFeedbackStatusTone(status: CustomerFeedbackStatus): SupportTone;
48
+ export declare function customerFeedbackSentimentTone(sentiment: CustomerFeedbackSentiment): SupportTone;
49
+ /**
50
+ * How a deadline reads on screen.
51
+ *
52
+ * Returns a phrase rather than a number so a paused clock does not render as a
53
+ * countdown that is not counting - the single most misleading thing an SLA chip
54
+ * can do.
55
+ */
56
+ export declare function describeSupportSlaDeadline(state: SupportSlaState, remainingMinutes: number | null): string;
57
+ /** Minutes as a short human duration: 45m, 3h 20m, 2d 4h. */
58
+ export declare function formatSupportDuration(minutes: number | null | undefined): string;
59
+ /**
60
+ * Whether an adapter can do something.
61
+ *
62
+ * The admin gates every button on this rather than assuming, so an action a
63
+ * helpdesk cannot perform is never offered to an operator as if it worked.
64
+ */
65
+ export declare function supportProviderSupports(capabilities: SupportProviderCapability[] | null | undefined, capability: SupportProviderCapability): boolean;
66
+ /** True for the message types a customer is allowed to see. */
67
+ export declare function isCustomerVisibleSupportMessage(type: SupportTicketMessageType): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clarion-shared-types",
3
- "version": "1.0.89",
3
+ "version": "1.0.91",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",