@pam-ai/pam-ordo-contracts 3.23.0 → 3.25.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/generated.d.ts +490 -1
- package/dist/generated.d.ts.map +1 -1
- package/dist/inbox-policy.d.ts.map +1 -1
- package/dist/inbox-policy.js +13 -5
- package/dist/inbox-policy.js.map +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/fixtures/inbox-list-partial-hydration.json +3 -1
- package/fixtures/manifest.json +13 -4
- package/fixtures/notification-list.json +2 -1
- package/fixtures/notification-snooze-result.json +10 -0
- package/fixtures/snooze-notification-command.json +7 -0
- package/fixtures/staff-assignment-candidate-exact-request-v1.json +6 -0
- package/fixtures/staff-assignment-candidate-exact-response-v1.json +58 -0
- package/fixtures/staff-assignment-candidate-request-v1.json +6 -0
- package/fixtures/staff-assignment-candidate-response-v1.json +33 -0
- package/fixtures/staff-schedule-command.json +17 -0
- package/fixtures/staff-work-status-self-command.json +7 -0
- package/fixtures/staff-work-status-self-result.json +20 -0
- package/openapi/openapi.json +1306 -81
- package/package.json +1 -1
package/dist/generated.d.ts
CHANGED
|
@@ -3,6 +3,62 @@
|
|
|
3
3
|
* Do not make direct changes to the file.
|
|
4
4
|
*/
|
|
5
5
|
export interface paths {
|
|
6
|
+
"/v1/inbox/staff-work-status/self": {
|
|
7
|
+
parameters: {
|
|
8
|
+
query?: never;
|
|
9
|
+
header?: never;
|
|
10
|
+
path?: never;
|
|
11
|
+
cookie?: never;
|
|
12
|
+
};
|
|
13
|
+
/** Read the authenticated staff member's effective work status */
|
|
14
|
+
get: operations["getInboxStaffWorkStatus"];
|
|
15
|
+
/** Set the authenticated staff member's bounded work-status override */
|
|
16
|
+
put: operations["setInboxStaffWorkStatus"];
|
|
17
|
+
post?: never;
|
|
18
|
+
delete?: never;
|
|
19
|
+
options?: never;
|
|
20
|
+
head?: never;
|
|
21
|
+
patch?: never;
|
|
22
|
+
trace?: never;
|
|
23
|
+
};
|
|
24
|
+
"/v1/inbox/staff-schedules/{userId}": {
|
|
25
|
+
parameters: {
|
|
26
|
+
query?: never;
|
|
27
|
+
header?: never;
|
|
28
|
+
path?: never;
|
|
29
|
+
cookie?: never;
|
|
30
|
+
};
|
|
31
|
+
/** Read one rooftop staff schedule */
|
|
32
|
+
get: operations["getInboxStaffSchedule"];
|
|
33
|
+
/** Replace one staff member's weekly rota and dated exceptions */
|
|
34
|
+
put: operations["setInboxStaffSchedule"];
|
|
35
|
+
post?: never;
|
|
36
|
+
delete?: never;
|
|
37
|
+
options?: never;
|
|
38
|
+
head?: never;
|
|
39
|
+
patch?: never;
|
|
40
|
+
trace?: never;
|
|
41
|
+
};
|
|
42
|
+
"/v1/inbox/assignment-candidates": {
|
|
43
|
+
parameters: {
|
|
44
|
+
query?: never;
|
|
45
|
+
header?: never;
|
|
46
|
+
path?: never;
|
|
47
|
+
cookie?: never;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* List rooftop staff with authoritative work status for assignment
|
|
51
|
+
* @description Returns the active rooftop roster from Permissions with effective work status. A scheduled shift is display context only and never implies AVAILABLE. Only a current explicit AVAILABLE self status may set assignmentCandidate true. Cursors are opaque and UNKNOWN or stale authority is always excluded.
|
|
52
|
+
*/
|
|
53
|
+
get: operations["listInboxAssignmentCandidates"];
|
|
54
|
+
put?: never;
|
|
55
|
+
post?: never;
|
|
56
|
+
delete?: never;
|
|
57
|
+
options?: never;
|
|
58
|
+
head?: never;
|
|
59
|
+
patch?: never;
|
|
60
|
+
trace?: never;
|
|
61
|
+
};
|
|
6
62
|
"/v1/inbox/realtime-session": {
|
|
7
63
|
parameters: {
|
|
8
64
|
query?: never;
|
|
@@ -150,7 +206,10 @@ export interface paths {
|
|
|
150
206
|
path?: never;
|
|
151
207
|
cookie?: never;
|
|
152
208
|
};
|
|
153
|
-
/**
|
|
209
|
+
/**
|
|
210
|
+
* List the authenticated User's visible active notifications
|
|
211
|
+
* @description Visible means undismissed and not currently snoozed. A notification with a future `snoozedUntil` is withheld from this page and from `unreadCount`, and returns on its own once that time passes; it is not dismissed and its unread state is unchanged while hidden.
|
|
212
|
+
*/
|
|
154
213
|
get: operations["listInboxNotifications"];
|
|
155
214
|
put?: never;
|
|
156
215
|
post?: never;
|
|
@@ -501,6 +560,28 @@ export interface paths {
|
|
|
501
560
|
patch?: never;
|
|
502
561
|
trace?: never;
|
|
503
562
|
};
|
|
563
|
+
"/v1/inbox/commands/snooze-notification": {
|
|
564
|
+
parameters: {
|
|
565
|
+
query?: never;
|
|
566
|
+
header?: never;
|
|
567
|
+
path?: never;
|
|
568
|
+
cookie?: never;
|
|
569
|
+
};
|
|
570
|
+
get?: never;
|
|
571
|
+
put?: never;
|
|
572
|
+
/**
|
|
573
|
+
* Hide one recipient-owned notification until a chosen time
|
|
574
|
+
* @description Recipient-scoped and deliberately NOT a WorkCycle command. Snoozing an alert means "not now, tell me again later"; it must not pause the work the alert points at, because the recipient is frequently not the person who owns that work and a Conversation the Customer is still writing to would go quiet for everyone.
|
|
575
|
+
* That scoping is also why there is no `expectedVersion` here, in contrast to `/v1/inbox/commands/snooze`. Optimistic concurrency guards a mutation of the WorkCycle aggregate; this command mutates only the caller's own notification row, which nobody else can write. A notification carries no aggregate version for the same reason, and one stamped at send time would be stale before it arrived. `operationId` carries idempotency, as it does for the other recipient-owned notification commands.
|
|
576
|
+
* `until` must be in the future. A notification already snoozed may be re-snoozed to a later or earlier time; the newest accepted value wins. Snoozing never marks the notification read, and dismissal supersedes a snooze permanently.
|
|
577
|
+
*/
|
|
578
|
+
post: operations["snoozeInboxNotification"];
|
|
579
|
+
delete?: never;
|
|
580
|
+
options?: never;
|
|
581
|
+
head?: never;
|
|
582
|
+
patch?: never;
|
|
583
|
+
trace?: never;
|
|
584
|
+
};
|
|
504
585
|
"/v1/inbox/commands/dismiss-notifications": {
|
|
505
586
|
parameters: {
|
|
506
587
|
query?: never;
|
|
@@ -530,6 +611,158 @@ export interface components {
|
|
|
530
611
|
InboxScope: "MY_INBOX" | "TEAM_INBOX" | "MENTIONS" | "CUSTOMERS" | "RO";
|
|
531
612
|
/** @enum {string} */
|
|
532
613
|
WorkCycleStatus: "OPEN" | "SNOOZED" | "RESOLVED";
|
|
614
|
+
/**
|
|
615
|
+
* @description Effective staff state owned by Permissions. AVAILABLE is reserved for a current explicit self override; being scheduled is not availability.
|
|
616
|
+
* @enum {string}
|
|
617
|
+
*/
|
|
618
|
+
StaffWorkStatus: "AVAILABLE" | "ON_BREAK" | "OFF_FOR_DAY" | "OFF_SHIFT" | "UNKNOWN";
|
|
619
|
+
/** @enum {string} */
|
|
620
|
+
StaffWorkStatusSource: "SELF_OVERRIDE" | "DATE_EXCEPTION" | "WEEKLY_ROTA" | "NO_SCHEDULE" | "STALE_SCHEDULE";
|
|
621
|
+
StaffShiftWindow: {
|
|
622
|
+
/** Format: date */
|
|
623
|
+
date: string;
|
|
624
|
+
/** Format: date-time */
|
|
625
|
+
startAt: string;
|
|
626
|
+
/** Format: date-time */
|
|
627
|
+
endAt: string;
|
|
628
|
+
};
|
|
629
|
+
StaffWorkStatusSnapshot: {
|
|
630
|
+
clientOrgId: string;
|
|
631
|
+
userId: string;
|
|
632
|
+
status: components["schemas"]["StaffWorkStatus"];
|
|
633
|
+
source: components["schemas"]["StaffWorkStatusSource"];
|
|
634
|
+
/** Format: date-time */
|
|
635
|
+
observedAt: string;
|
|
636
|
+
/** @description The instant after which this answer must be recomputed. Null is allowed only for UNKNOWN. */
|
|
637
|
+
expiresAt: string | null;
|
|
638
|
+
scheduleVersion: number | null;
|
|
639
|
+
reason: string | null;
|
|
640
|
+
todayShift: components["schemas"]["StaffShiftWindow"] | null;
|
|
641
|
+
};
|
|
642
|
+
StaffAssignmentCandidate: {
|
|
643
|
+
clientOrgId: string;
|
|
644
|
+
userId: string;
|
|
645
|
+
status: components["schemas"]["StaffWorkStatus"];
|
|
646
|
+
source: components["schemas"]["StaffWorkStatusSource"];
|
|
647
|
+
/** Format: date-time */
|
|
648
|
+
observedAt: string;
|
|
649
|
+
expiresAt: string | null;
|
|
650
|
+
scheduleVersion: number | null;
|
|
651
|
+
reason: string | null;
|
|
652
|
+
todayShift: components["schemas"]["StaffShiftWindow"] | null;
|
|
653
|
+
displayName: components["schemas"]["HydratedText"];
|
|
654
|
+
persona: string | null;
|
|
655
|
+
department: ("SERVICE" | "BDC") | null;
|
|
656
|
+
teamIds: string[];
|
|
657
|
+
/** @description Active rooftop/capability eligibility for a deliberate User assignment. */
|
|
658
|
+
manualAssignmentEligible: boolean;
|
|
659
|
+
/** @description True only when manual eligibility and a current explicit AVAILABLE status both hold. */
|
|
660
|
+
automaticAssignmentEligible: boolean;
|
|
661
|
+
exclusionReason: string | null;
|
|
662
|
+
};
|
|
663
|
+
StaffAssignmentCandidatesResponse: {
|
|
664
|
+
data: {
|
|
665
|
+
/** Format: date-time */
|
|
666
|
+
observedAt: string;
|
|
667
|
+
candidates: components["schemas"]["StaffAssignmentCandidate"][];
|
|
668
|
+
nextCursor: string | null;
|
|
669
|
+
};
|
|
670
|
+
};
|
|
671
|
+
StaffWorkStatusSelfCommand: {
|
|
672
|
+
clientOrgId: string;
|
|
673
|
+
/** @enum {string} */
|
|
674
|
+
status: "AVAILABLE" | "ON_BREAK" | "OFF_FOR_DAY";
|
|
675
|
+
/** @enum {integer} */
|
|
676
|
+
breakDurationMinutes?: 15 | 30 | 60;
|
|
677
|
+
expectedVersion: number;
|
|
678
|
+
reason?: string;
|
|
679
|
+
} & unknown;
|
|
680
|
+
StaffWorkStatusSelfResult: {
|
|
681
|
+
data: {
|
|
682
|
+
overrideVersion: number;
|
|
683
|
+
workStatus: components["schemas"]["StaffWorkStatusSnapshot"];
|
|
684
|
+
};
|
|
685
|
+
};
|
|
686
|
+
StaffLocalTimeInterval: {
|
|
687
|
+
start: string;
|
|
688
|
+
end: string;
|
|
689
|
+
};
|
|
690
|
+
StaffWeeklyRota: {
|
|
691
|
+
MONDAY: components["schemas"]["StaffDayIntervals"];
|
|
692
|
+
TUESDAY: components["schemas"]["StaffDayIntervals"];
|
|
693
|
+
WEDNESDAY: components["schemas"]["StaffDayIntervals"];
|
|
694
|
+
THURSDAY: components["schemas"]["StaffDayIntervals"];
|
|
695
|
+
FRIDAY: components["schemas"]["StaffDayIntervals"];
|
|
696
|
+
SATURDAY: components["schemas"]["StaffDayIntervals"];
|
|
697
|
+
SUNDAY: components["schemas"]["StaffDayIntervals"];
|
|
698
|
+
};
|
|
699
|
+
StaffDayIntervals: components["schemas"]["StaffLocalTimeInterval"][];
|
|
700
|
+
StaffScheduleException: {
|
|
701
|
+
/** Format: date */
|
|
702
|
+
date: string;
|
|
703
|
+
/** @enum {string} */
|
|
704
|
+
kind: "WORKING" | "OFF";
|
|
705
|
+
intervals: components["schemas"]["StaffDayIntervals"];
|
|
706
|
+
reason: string | null;
|
|
707
|
+
};
|
|
708
|
+
StaffSchedule: {
|
|
709
|
+
clientOrgId: string;
|
|
710
|
+
userId: string;
|
|
711
|
+
version: number;
|
|
712
|
+
timezone: string;
|
|
713
|
+
/** Format: date */
|
|
714
|
+
effectiveFrom: string;
|
|
715
|
+
/** Format: date-time */
|
|
716
|
+
expiresAt: string;
|
|
717
|
+
weeklyRota: components["schemas"]["StaffWeeklyRota"];
|
|
718
|
+
dateExceptions: components["schemas"]["StaffScheduleException"][];
|
|
719
|
+
/** Format: date-time */
|
|
720
|
+
updatedAt: string;
|
|
721
|
+
};
|
|
722
|
+
StaffScheduleCommand: {
|
|
723
|
+
clientOrgId: string;
|
|
724
|
+
expectedVersion: number;
|
|
725
|
+
timezone: string;
|
|
726
|
+
/** Format: date */
|
|
727
|
+
effectiveFrom: string;
|
|
728
|
+
/** Format: date-time */
|
|
729
|
+
expiresAt: string;
|
|
730
|
+
weeklyRota: components["schemas"]["StaffWeeklyRota"];
|
|
731
|
+
dateExceptions: components["schemas"]["StaffScheduleException"][];
|
|
732
|
+
};
|
|
733
|
+
StaffScheduleResult: {
|
|
734
|
+
data: components["schemas"]["StaffSchedule"];
|
|
735
|
+
};
|
|
736
|
+
StaffRosterCandidateRequestV1: {
|
|
737
|
+
/** @constant */
|
|
738
|
+
schemaVersion: 1;
|
|
739
|
+
/** @constant */
|
|
740
|
+
mode: "ROSTER";
|
|
741
|
+
clientOrgId: string;
|
|
742
|
+
cursor?: string;
|
|
743
|
+
limit: number;
|
|
744
|
+
};
|
|
745
|
+
StaffExactCandidateRequestV1: {
|
|
746
|
+
/** @constant */
|
|
747
|
+
schemaVersion: 1;
|
|
748
|
+
/** @constant */
|
|
749
|
+
mode: "EXACT";
|
|
750
|
+
clientOrgId: string;
|
|
751
|
+
userIds: string[];
|
|
752
|
+
};
|
|
753
|
+
StaffAssignmentCandidateRequestV1: components["schemas"]["StaffRosterCandidateRequestV1"] | components["schemas"]["StaffExactCandidateRequestV1"];
|
|
754
|
+
/** @description For ROSTER requests, results retain the authority's stable roster page order and nextCursor is the opaque continuation cursor or null at completion. For EXACT requests, results are a unique subset of the requested User IDs in request order; an unresolved or ineligible User may be omitted, and nextCursor must be null. */
|
|
755
|
+
StaffAssignmentCandidateResponseV1: {
|
|
756
|
+
/** @constant */
|
|
757
|
+
schemaVersion: 1;
|
|
758
|
+
clientOrgId: string;
|
|
759
|
+
/** Format: date-time */
|
|
760
|
+
observedAt: string;
|
|
761
|
+
/** @description Candidate rows in stable roster order for ROSTER mode, or a unique request-ordered subset for EXACT mode. */
|
|
762
|
+
results: components["schemas"]["StaffAssignmentCandidate"][];
|
|
763
|
+
/** @description Opaque ROSTER continuation cursor; always null for EXACT mode. */
|
|
764
|
+
nextCursor: string | null;
|
|
765
|
+
};
|
|
533
766
|
/** @enum {string} */
|
|
534
767
|
AvailabilityState: "available" | "missing" | "stale" | "timeout" | "unauthorized" | "unsupported";
|
|
535
768
|
Availability: {
|
|
@@ -741,6 +974,14 @@ export interface components {
|
|
|
741
974
|
notifications: components["schemas"]["InboxPolicyNotificationRuleV1"][];
|
|
742
975
|
customerMessageNotifications?: components["schemas"]["InboxPolicyCustomerMessageNotificationsV1"];
|
|
743
976
|
emailDelivery?: components["schemas"]["InboxEmailDeliveryPolicyV1"];
|
|
977
|
+
staffWorkStatus?: components["schemas"]["InboxPolicyStaffWorkStatusV1"];
|
|
978
|
+
};
|
|
979
|
+
/** @description Rooftop activation for authoritative Permissions work status. Missing is normalized as DISPLAY_ONLY. SHADOW records the decision without changing routing; ENFORCED may exclude non-AVAILABLE Users from automatic routing. Manual assignment continues to use manualAssignmentEligible. */
|
|
980
|
+
InboxPolicyStaffWorkStatusV1: {
|
|
981
|
+
/** @enum {string} */
|
|
982
|
+
mode: "DISPLAY_ONLY" | "SHADOW" | "ENFORCED";
|
|
983
|
+
/** Format: date-time */
|
|
984
|
+
activatedAt: string;
|
|
744
985
|
};
|
|
745
986
|
/** @description Optional email-only delivery policy, separate from notification creation and recipient selection. Missing policy or enabled=false sends no email. Only notifications created at or after activatedAt are eligible. An empty kinds array opts into nothing. Reading, dismissal, and source resolution do not suppress an otherwise authorized send. Current disablement is a kill switch for unsent work; unknown send outcomes require reconciliation. */
|
|
746
987
|
InboxEmailDeliveryPolicyV1: {
|
|
@@ -870,6 +1111,14 @@ export interface components {
|
|
|
870
1111
|
/** @description Whether the viewer has active Mentions-view membership for the current WorkCycle. */
|
|
871
1112
|
isMentionWatcher: boolean;
|
|
872
1113
|
unreadMentionCount: number;
|
|
1114
|
+
/**
|
|
1115
|
+
* @description Whether the viewer still owes an answer to a Mention on the current WorkCycle.
|
|
1116
|
+
* Cleared by resolution, which happens two ways and this field does not distinguish them. The explicit one is resolve-mention, the Done button. The implicit one is ANSWERING: commenting on the thread or sending the Customer a message resolves the viewer's outstanding Mentions on that cycle, because that is the thing they were asked to do and making them press Done as well would be asking them to report work the system just watched them finish. A comment never resolves the Mentions it itself raised.
|
|
1117
|
+
* None of the three fields above can stand in for it, which is why it exists. `isMentionWatcher` reports Mentions-view membership, and membership survives resolution on purpose so a later Mention on the same cycle still reaches the viewer. `unreadMentionCount` is cleared by reading, which is a different act from answering. And `latestMentionPreview` describes the newest Mention whether or not it is outstanding.
|
|
1118
|
+
* Until now the answer existed only inside the Mentions list's own server-side predicate, so a badge could be drawn on that list and nowhere else. Optional until every producer publishes it; absent means unknown, not false.
|
|
1119
|
+
* @example true
|
|
1120
|
+
*/
|
|
1121
|
+
hasUnresolvedMention?: boolean;
|
|
873
1122
|
latestMentionPreview?: components["schemas"]["LatestMentionPreview"] | null;
|
|
874
1123
|
/**
|
|
875
1124
|
* Format: uuid
|
|
@@ -981,6 +1230,16 @@ export interface components {
|
|
|
981
1230
|
/** Format: date-time */
|
|
982
1231
|
resolvedAt?: string | null;
|
|
983
1232
|
version: number;
|
|
1233
|
+
/**
|
|
1234
|
+
* @description Inbound Customer Interactions on THIS WorkCycle with no outbound Interaction after them. Optional until every producer publishes it; absent means the count is unknown, not zero.
|
|
1235
|
+
* It answers a different question from `InteractionSummary`, which sits beside this object rather than inside it: that one is Conversation-wide and totals every Interaction ever exchanged, so it keeps climbing across cycles and never falls when someone replies. A row that says how much is waiting on the reader needs this one. `oldestUnrespondedAt` already names the same set's earliest member.
|
|
1236
|
+
*/
|
|
1237
|
+
unrespondedInboundCount?: number;
|
|
1238
|
+
/**
|
|
1239
|
+
* @description The text of the most recent Interaction counted by `unrespondedInboundCount`, truncated by the server. Present so a row holding exactly one waiting message can show the message instead of the number, which is the only case where a count is strictly less informative than the thing it counts.
|
|
1240
|
+
* Optional and independently nullable: absent means the producer does not publish it, null means there is nothing waiting or the body is not available. Never reconstruct it from the count, and never treat its absence as an empty message.
|
|
1241
|
+
*/
|
|
1242
|
+
latestUnrespondedInboundPreview?: string | null;
|
|
984
1243
|
};
|
|
985
1244
|
InboxCounts: {
|
|
986
1245
|
total: number;
|
|
@@ -1241,6 +1500,11 @@ export interface components {
|
|
|
1241
1500
|
createdAt: string;
|
|
1242
1501
|
/** Format: date-time */
|
|
1243
1502
|
readAt: string | null;
|
|
1503
|
+
/**
|
|
1504
|
+
* Format: date-time
|
|
1505
|
+
* @description Optional until every reader publishes it; absent means this deployment does not support notification snooze, which is not the same as null. Null means never snoozed or already returned. A future value means the notification is withheld from the list until then. It is recipient state and never pauses the underlying WorkCycle.
|
|
1506
|
+
*/
|
|
1507
|
+
snoozedUntil?: string | null;
|
|
1244
1508
|
/** @description Optional authorized context for panel and banner presentation. Its absence is compatible with older producers; it must not be rebuilt from untrusted notification copy or realtime payloads. */
|
|
1245
1509
|
displayContext?: components["schemas"]["NotificationDisplayContext"];
|
|
1246
1510
|
/** @description Optional recipient-specific needs_attention metadata. Purpose is presentation context only; it never grants authorization or claims provider delivery. */
|
|
@@ -1675,6 +1939,19 @@ export interface components {
|
|
|
1675
1939
|
/** Format: uuid */
|
|
1676
1940
|
notificationId: string;
|
|
1677
1941
|
};
|
|
1942
|
+
/** @description Recipient-only. The notification envelope plus the time to surface the alert again, and no `expectedVersion`, because it writes no WorkCycle state. The three shared fields are repeated rather than composed: `NotificationCommand` is a published closed object that mark-read and dismiss already validate against, and refactoring it into a base reads as a breaking change to consumers for no gain here. */
|
|
1943
|
+
SnoozeNotificationCommand: {
|
|
1944
|
+
operationId: string;
|
|
1945
|
+
clientOrgId: string;
|
|
1946
|
+
/** Format: uuid */
|
|
1947
|
+
notificationId: string;
|
|
1948
|
+
/**
|
|
1949
|
+
* Format: date-time
|
|
1950
|
+
* @description When the notification returns to the panel. Must be in the future.
|
|
1951
|
+
*/
|
|
1952
|
+
until: string;
|
|
1953
|
+
reason?: string;
|
|
1954
|
+
};
|
|
1678
1955
|
/** @description Recipient-only bulk dismissal. Omit `cursor` on the first page so the server can establish the fixed action boundary. For later pages, pass the exact opaque cursor returned by the preceding response and a fresh operation ID. `clientOrgId` must match the selected rooftop header after normal authorization; neither value grants access. */
|
|
1679
1956
|
DismissNotificationsCommand: {
|
|
1680
1957
|
operationId: string;
|
|
@@ -1979,6 +2256,23 @@ export interface components {
|
|
|
1979
2256
|
dismissedAt: string | null;
|
|
1980
2257
|
};
|
|
1981
2258
|
};
|
|
2259
|
+
/** @description Applied or idempotently replayed recipient-only notification snooze. `snoozedUntil` is the value now in force, which for a replay is the one the original request established rather than the one just submitted. */
|
|
2260
|
+
NotificationSnoozeResult: {
|
|
2261
|
+
data: {
|
|
2262
|
+
operationId: string;
|
|
2263
|
+
applied: boolean;
|
|
2264
|
+
replayed: boolean;
|
|
2265
|
+
/** Format: uuid */
|
|
2266
|
+
notificationId: string;
|
|
2267
|
+
/** Format: date-time */
|
|
2268
|
+
snoozedUntil: string;
|
|
2269
|
+
/**
|
|
2270
|
+
* Format: date-time
|
|
2271
|
+
* @description Unchanged by this command. Snoozing an alert is not reading it.
|
|
2272
|
+
*/
|
|
2273
|
+
readAt: string | null;
|
|
2274
|
+
};
|
|
2275
|
+
};
|
|
1982
2276
|
/** @description Applied or idempotently replayed page of a recipient-only bulk dismissal. Counts cover this page, while `cutoff` and the cursor chain cover the fixed root snapshot. */
|
|
1983
2277
|
DismissNotificationsResult: {
|
|
1984
2278
|
data: {
|
|
@@ -2070,6 +2364,16 @@ export interface components {
|
|
|
2070
2364
|
"application/json": components["schemas"]["NotificationCommandResult"];
|
|
2071
2365
|
};
|
|
2072
2366
|
};
|
|
2367
|
+
/** @description Applied or idempotently replayed recipient-only notification snooze. */
|
|
2368
|
+
NotificationSnoozeApplied: {
|
|
2369
|
+
headers: {
|
|
2370
|
+
"x-correlation-id": components["headers"]["CorrelationId"];
|
|
2371
|
+
[name: string]: unknown;
|
|
2372
|
+
};
|
|
2373
|
+
content: {
|
|
2374
|
+
"application/json": components["schemas"]["NotificationSnoozeResult"];
|
|
2375
|
+
};
|
|
2376
|
+
};
|
|
2073
2377
|
/** @description Applied or idempotently replayed page of a fixed-snapshot notification dismissal. */
|
|
2074
2378
|
DismissNotificationsApplied: {
|
|
2075
2379
|
headers: {
|
|
@@ -2177,6 +2481,7 @@ export interface components {
|
|
|
2177
2481
|
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2178
2482
|
ClientOrgId: string;
|
|
2179
2483
|
ConversationId: string;
|
|
2484
|
+
StaffUserId: string;
|
|
2180
2485
|
};
|
|
2181
2486
|
requestBodies: {
|
|
2182
2487
|
BaseCommand: {
|
|
@@ -2249,6 +2554,11 @@ export interface components {
|
|
|
2249
2554
|
"application/json": components["schemas"]["NotificationCommand"];
|
|
2250
2555
|
};
|
|
2251
2556
|
};
|
|
2557
|
+
SnoozeNotificationCommand: {
|
|
2558
|
+
content: {
|
|
2559
|
+
"application/json": components["schemas"]["SnoozeNotificationCommand"];
|
|
2560
|
+
};
|
|
2561
|
+
};
|
|
2252
2562
|
DismissNotificationsCommand: {
|
|
2253
2563
|
content: {
|
|
2254
2564
|
"application/json": components["schemas"]["DismissNotificationsCommand"];
|
|
@@ -2273,6 +2583,163 @@ export interface components {
|
|
|
2273
2583
|
}
|
|
2274
2584
|
export type $defs = Record<string, never>;
|
|
2275
2585
|
export interface operations {
|
|
2586
|
+
getInboxStaffWorkStatus: {
|
|
2587
|
+
parameters: {
|
|
2588
|
+
query?: never;
|
|
2589
|
+
header: {
|
|
2590
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2591
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2592
|
+
};
|
|
2593
|
+
path?: never;
|
|
2594
|
+
cookie?: never;
|
|
2595
|
+
};
|
|
2596
|
+
requestBody?: never;
|
|
2597
|
+
responses: {
|
|
2598
|
+
/** @description Current self status and today's authoritative schedule window. */
|
|
2599
|
+
200: {
|
|
2600
|
+
headers: {
|
|
2601
|
+
[name: string]: unknown;
|
|
2602
|
+
};
|
|
2603
|
+
content: {
|
|
2604
|
+
"application/json": components["schemas"]["StaffWorkStatusSelfResult"];
|
|
2605
|
+
};
|
|
2606
|
+
};
|
|
2607
|
+
401: components["responses"]["Unauthorized"];
|
|
2608
|
+
403: components["responses"]["Forbidden"];
|
|
2609
|
+
500: components["responses"]["InternalError"];
|
|
2610
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2611
|
+
};
|
|
2612
|
+
};
|
|
2613
|
+
setInboxStaffWorkStatus: {
|
|
2614
|
+
parameters: {
|
|
2615
|
+
query?: never;
|
|
2616
|
+
header: {
|
|
2617
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2618
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2619
|
+
};
|
|
2620
|
+
path?: never;
|
|
2621
|
+
cookie?: never;
|
|
2622
|
+
};
|
|
2623
|
+
requestBody: {
|
|
2624
|
+
content: {
|
|
2625
|
+
"application/json": components["schemas"]["StaffWorkStatusSelfCommand"];
|
|
2626
|
+
};
|
|
2627
|
+
};
|
|
2628
|
+
responses: {
|
|
2629
|
+
/** @description Applied self status with server-derived expiry. */
|
|
2630
|
+
200: {
|
|
2631
|
+
headers: {
|
|
2632
|
+
[name: string]: unknown;
|
|
2633
|
+
};
|
|
2634
|
+
content: {
|
|
2635
|
+
"application/json": components["schemas"]["StaffWorkStatusSelfResult"];
|
|
2636
|
+
};
|
|
2637
|
+
};
|
|
2638
|
+
400: components["responses"]["BadRequest"];
|
|
2639
|
+
401: components["responses"]["Unauthorized"];
|
|
2640
|
+
403: components["responses"]["Forbidden"];
|
|
2641
|
+
409: components["responses"]["Conflict"];
|
|
2642
|
+
500: components["responses"]["InternalError"];
|
|
2643
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2644
|
+
};
|
|
2645
|
+
};
|
|
2646
|
+
getInboxStaffSchedule: {
|
|
2647
|
+
parameters: {
|
|
2648
|
+
query?: never;
|
|
2649
|
+
header: {
|
|
2650
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2651
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2652
|
+
};
|
|
2653
|
+
path: {
|
|
2654
|
+
userId: components["parameters"]["StaffUserId"];
|
|
2655
|
+
};
|
|
2656
|
+
cookie?: never;
|
|
2657
|
+
};
|
|
2658
|
+
requestBody?: never;
|
|
2659
|
+
responses: {
|
|
2660
|
+
/** @description Manager-authorized staff schedule. */
|
|
2661
|
+
200: {
|
|
2662
|
+
headers: {
|
|
2663
|
+
[name: string]: unknown;
|
|
2664
|
+
};
|
|
2665
|
+
content: {
|
|
2666
|
+
"application/json": components["schemas"]["StaffScheduleResult"];
|
|
2667
|
+
};
|
|
2668
|
+
};
|
|
2669
|
+
401: components["responses"]["Unauthorized"];
|
|
2670
|
+
403: components["responses"]["Forbidden"];
|
|
2671
|
+
404: components["responses"]["NotFound"];
|
|
2672
|
+
500: components["responses"]["InternalError"];
|
|
2673
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2674
|
+
};
|
|
2675
|
+
};
|
|
2676
|
+
setInboxStaffSchedule: {
|
|
2677
|
+
parameters: {
|
|
2678
|
+
query?: never;
|
|
2679
|
+
header: {
|
|
2680
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2681
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2682
|
+
};
|
|
2683
|
+
path: {
|
|
2684
|
+
userId: components["parameters"]["StaffUserId"];
|
|
2685
|
+
};
|
|
2686
|
+
cookie?: never;
|
|
2687
|
+
};
|
|
2688
|
+
requestBody: {
|
|
2689
|
+
content: {
|
|
2690
|
+
"application/json": components["schemas"]["StaffScheduleCommand"];
|
|
2691
|
+
};
|
|
2692
|
+
};
|
|
2693
|
+
responses: {
|
|
2694
|
+
/** @description Applied schedule snapshot. */
|
|
2695
|
+
200: {
|
|
2696
|
+
headers: {
|
|
2697
|
+
[name: string]: unknown;
|
|
2698
|
+
};
|
|
2699
|
+
content: {
|
|
2700
|
+
"application/json": components["schemas"]["StaffScheduleResult"];
|
|
2701
|
+
};
|
|
2702
|
+
};
|
|
2703
|
+
400: components["responses"]["BadRequest"];
|
|
2704
|
+
401: components["responses"]["Unauthorized"];
|
|
2705
|
+
403: components["responses"]["Forbidden"];
|
|
2706
|
+
404: components["responses"]["NotFound"];
|
|
2707
|
+
409: components["responses"]["Conflict"];
|
|
2708
|
+
500: components["responses"]["InternalError"];
|
|
2709
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2710
|
+
};
|
|
2711
|
+
};
|
|
2712
|
+
listInboxAssignmentCandidates: {
|
|
2713
|
+
parameters: {
|
|
2714
|
+
query?: {
|
|
2715
|
+
cursor?: string;
|
|
2716
|
+
limit?: number;
|
|
2717
|
+
};
|
|
2718
|
+
header: {
|
|
2719
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2720
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2721
|
+
};
|
|
2722
|
+
path?: never;
|
|
2723
|
+
cookie?: never;
|
|
2724
|
+
};
|
|
2725
|
+
requestBody?: never;
|
|
2726
|
+
responses: {
|
|
2727
|
+
/** @description Bounded active rooftop staff page and effective work status. */
|
|
2728
|
+
200: {
|
|
2729
|
+
headers: {
|
|
2730
|
+
[name: string]: unknown;
|
|
2731
|
+
};
|
|
2732
|
+
content: {
|
|
2733
|
+
"application/json": components["schemas"]["StaffAssignmentCandidatesResponse"];
|
|
2734
|
+
};
|
|
2735
|
+
};
|
|
2736
|
+
400: components["responses"]["BadRequest"];
|
|
2737
|
+
401: components["responses"]["Unauthorized"];
|
|
2738
|
+
403: components["responses"]["Forbidden"];
|
|
2739
|
+
500: components["responses"]["InternalError"];
|
|
2740
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2741
|
+
};
|
|
2742
|
+
};
|
|
2276
2743
|
createInboxRealtimeSession: {
|
|
2277
2744
|
parameters: {
|
|
2278
2745
|
query?: never;
|
|
@@ -3021,6 +3488,28 @@ export interface operations {
|
|
|
3021
3488
|
503: components["responses"]["ServiceUnavailable"];
|
|
3022
3489
|
};
|
|
3023
3490
|
};
|
|
3491
|
+
snoozeInboxNotification: {
|
|
3492
|
+
parameters: {
|
|
3493
|
+
query?: never;
|
|
3494
|
+
header: {
|
|
3495
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
3496
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
3497
|
+
};
|
|
3498
|
+
path?: never;
|
|
3499
|
+
cookie?: never;
|
|
3500
|
+
};
|
|
3501
|
+
requestBody: components["requestBodies"]["SnoozeNotificationCommand"];
|
|
3502
|
+
responses: {
|
|
3503
|
+
200: components["responses"]["NotificationSnoozeApplied"];
|
|
3504
|
+
400: components["responses"]["BadRequest"];
|
|
3505
|
+
401: components["responses"]["Unauthorized"];
|
|
3506
|
+
403: components["responses"]["Forbidden"];
|
|
3507
|
+
404: components["responses"]["NotFound"];
|
|
3508
|
+
409: components["responses"]["Conflict"];
|
|
3509
|
+
500: components["responses"]["InternalError"];
|
|
3510
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
3511
|
+
};
|
|
3512
|
+
};
|
|
3024
3513
|
dismissInboxNotifications: {
|
|
3025
3514
|
parameters: {
|
|
3026
3515
|
query?: never;
|