@pam-ai/pam-ordo-contracts 3.29.0 → 3.31.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.
@@ -1,4 +1,4 @@
1
- import type { ConversationSearchMatch, MentionRef, ResolveMentionResult, SearchInboxContactsParams } from './index.js';
1
+ import type { ConversationSearchMatch, MentionRef, ResolveMentionResult, SearchInboxContactsParams, SendInboxMessageCommand } from './index.js';
2
2
  type Assert<T extends true> = T;
3
3
  type Accepts<Value, Shape> = Value extends Shape ? true : false;
4
4
  type Rejects<Value, Shape> = Value extends Shape ? false : true;
@@ -148,5 +148,41 @@ export type ConversationSearchMatchInvariants = [
148
148
  facets: [];
149
149
  }, ConversationSearchMatch>>
150
150
  ];
151
+ /**
152
+ * A send carries words, media, or both — and DASH-342 made the first optional,
153
+ * which is the change that needs guarding. `body` alone still sends, media
154
+ * alone now sends, and neither is not a message.
155
+ */
156
+ type SendBase = {
157
+ operationId: 'op-1';
158
+ clientOrgId: 'rooftop-1';
159
+ customer: never;
160
+ conversationId: null;
161
+ ownershipDisposition: never;
162
+ };
163
+ type Attachment = {
164
+ storageKey: 'ordo/rooftop-1/conversation-1/1757700000000-6f1c.jpg';
165
+ contentType: 'image/jpeg';
166
+ };
167
+ export type SendInboxMessageCommandInvariants = [
168
+ Assert<Accepts<SendBase & {
169
+ body: 'Your van is ready.';
170
+ }, SendInboxMessageCommand>>,
171
+ Assert<Accepts<SendBase & {
172
+ attachments: [Attachment];
173
+ }, SendInboxMessageCommand>>,
174
+ Assert<Accepts<SendBase & {
175
+ body: 'Here it is.';
176
+ attachments: [Attachment];
177
+ }, SendInboxMessageCommand>>,
178
+ Assert<Rejects<SendBase, SendInboxMessageCommand>>,
179
+ Assert<Rejects<SendBase & {
180
+ attachments: [];
181
+ }, SendInboxMessageCommand>>,
182
+ Assert<Rejects<SendBase & {
183
+ body: 'Hello';
184
+ attachments: [];
185
+ }, SendInboxMessageCommand>>
186
+ ];
151
187
  export {};
152
188
  //# sourceMappingURL=contract-invariants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract-invariants.d.ts","sourceRoot":"","sources":["../src/contract-invariants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-invariants.d.ts","sourceRoot":"","sources":["../src/contract-invariants.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"contract-invariants.js","sourceRoot":"","sources":["../src/contract-invariants.ts"],"names":[],"mappings":"AAgGA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAmB;IACjD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"contract-invariants.js","sourceRoot":"","sources":["../src/contract-invariants.ts"],"names":[],"mappings":"AAiGA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAmB;IACjD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC"}
@@ -243,6 +243,26 @@ export interface paths {
243
243
  patch?: never;
244
244
  trace?: never;
245
245
  };
246
+ "/v1/inbox/desktop-notification-settings": {
247
+ parameters: {
248
+ query?: never;
249
+ header?: never;
250
+ path?: never;
251
+ cookie?: never;
252
+ };
253
+ /**
254
+ * Read the authenticated User's effective desktop-notification setting
255
+ * @description Returns the selected rooftop's default, the caller's optional rooftop-specific override, and the effective value. A present User override wins over the rooftop default in both directions. Browser permission and device subscription state remain local browser concerns and do not change this product preference.
256
+ */
257
+ get: operations["getDesktopNotificationSettings"];
258
+ put?: never;
259
+ post?: never;
260
+ delete?: never;
261
+ options?: never;
262
+ head?: never;
263
+ patch?: never;
264
+ trace?: never;
265
+ };
246
266
  "/v1/inbox/commands/create-customer": {
247
267
  parameters: {
248
268
  query?: never;
@@ -550,6 +570,60 @@ export interface paths {
550
570
  patch?: never;
551
571
  trace?: never;
552
572
  };
573
+ "/v1/inbox/commands/set-desktop-notification-preference": {
574
+ parameters: {
575
+ query?: never;
576
+ header?: never;
577
+ path?: never;
578
+ cookie?: never;
579
+ };
580
+ get?: never;
581
+ put?: never;
582
+ /** Set or clear the authenticated User's rooftop-specific desktop-notification override */
583
+ post: operations["setDesktopNotificationPreference"];
584
+ delete?: never;
585
+ options?: never;
586
+ head?: never;
587
+ patch?: never;
588
+ trace?: never;
589
+ };
590
+ "/v1/inbox/commands/register-desktop-push-subscription": {
591
+ parameters: {
592
+ query?: never;
593
+ header?: never;
594
+ path?: never;
595
+ cookie?: never;
596
+ };
597
+ get?: never;
598
+ put?: never;
599
+ /**
600
+ * Register or refresh an account-wide browser push subscription
601
+ * @description The authenticated User owns the subscription. It can deliver eligible notifications from every rooftop that User can currently access; rooftop and User preferences are still evaluated independently for each notification. An endpoint already owned by another User is never silently rebound.
602
+ */
603
+ post: operations["registerDesktopPushSubscription"];
604
+ delete?: never;
605
+ options?: never;
606
+ head?: never;
607
+ patch?: never;
608
+ trace?: never;
609
+ };
610
+ "/v1/inbox/commands/unregister-desktop-push-subscription": {
611
+ parameters: {
612
+ query?: never;
613
+ header?: never;
614
+ path?: never;
615
+ cookie?: never;
616
+ };
617
+ get?: never;
618
+ put?: never;
619
+ /** Unregister the authenticated User's browser push subscription */
620
+ post: operations["unregisterDesktopPushSubscription"];
621
+ delete?: never;
622
+ options?: never;
623
+ head?: never;
624
+ patch?: never;
625
+ trace?: never;
626
+ };
553
627
  "/v1/inbox/commands/resolve-mention": {
554
628
  parameters: {
555
629
  query?: never;
@@ -998,6 +1072,7 @@ export interface components {
998
1072
  notifications: components["schemas"]["InboxPolicyNotificationRuleV1"][];
999
1073
  customerMessageNotifications?: components["schemas"]["InboxPolicyCustomerMessageNotificationsV1"];
1000
1074
  emailDelivery?: components["schemas"]["InboxEmailDeliveryPolicyV1"];
1075
+ webPushDelivery?: components["schemas"]["InboxWebPushDeliveryPolicyV1"];
1001
1076
  staffWorkStatus?: components["schemas"]["InboxPolicyStaffWorkStatusV1"];
1002
1077
  };
1003
1078
  /** @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. */
@@ -1014,6 +1089,12 @@ export interface components {
1014
1089
  activatedAt: string;
1015
1090
  kinds: components["schemas"]["NotificationKind"][];
1016
1091
  };
1092
+ /** @description Optional forward-only rooftop default for desktop Web Push. Missing policy or enabled=false defaults delivery off. A User's explicit rooftop override wins over this value in either direction. Only notifications created at or after activatedAt are eligible. */
1093
+ InboxWebPushDeliveryPolicyV1: {
1094
+ enabled: boolean;
1095
+ /** Format: date-time */
1096
+ activatedAt: string;
1097
+ };
1017
1098
  /** @enum {string} */
1018
1099
  RealtimeQueryAreaV1: "inbox" | "conversation" | "customer_notes" | "notifications";
1019
1100
  /** @description Refetch instruction, never canonical state. eventId deduplicates repeated delivery. aggregateVersion is only a hint for the named aggregate and must not suppress independent comment, note, label, or recipient changes. A scope-only invalidation deliberately omits Conversation and aggregate identity, including when a formerly visible Conversation is no longer authorized. Notification areas are recipient-only. No source payloads, message bodies, Customer information, or subscription credentials belong in this frame. */
@@ -1433,6 +1514,22 @@ export interface components {
1433
1514
  attachments?: components["schemas"]["InteractionAttachmentV1"][];
1434
1515
  availability: components["schemas"]["Availability"];
1435
1516
  };
1517
+ /**
1518
+ * @description One piece of media an advisor is sending, named by the handle its upload issued rather than carried inline.
1519
+ * A HANDLE, NEVER BYTES. The dashboard uploads to storage under a key the server minted from the authenticated session, and this command names that key. Ordo never receives the bytes, never signs for them and never inspects them; it authorizes the send and passes the reference on. A command that carried media inline would put megabytes through a fingerprinted, replayable command path, and would put the decision about what a handset can display in the one place that knows least about it.
1520
+ * THE ROOFTOP IS PROVED FROM THE KEY, NOT FROM THE CALLER. A storage key is supplied by a client, so a producer must confirm the key belongs to the rooftop the caller is authorized for before it is used. Accepting it on trust would let a caller name another dealership's object and have it delivered on their behalf.
1521
+ * THE DECLARED TYPE IS A HINT. The messaging platform conforms media to what a carrier will deliver, and decides from the bytes it holds rather than from what a browser claimed at pick time.
1522
+ */
1523
+ OutboundAttachmentV1: {
1524
+ /** @description Opaque reference to the uploaded object, exactly as the upload grant issued it. Not a URL, and not addressable by a browser. */
1525
+ storageKey: string;
1526
+ /** @description What the client believes it uploaded. Required here, unlike its inbound sibling, because a sender always knows what it chose — but still advisory, and never the basis for a delivery decision. */
1527
+ contentType: string;
1528
+ /** @description The name to present to the reader, when the client captured one. */
1529
+ fileName?: string | null;
1530
+ /** @description Size of the uploaded original, when known. Advisory: it describes what was uploaded, not what will travel, because conforming changes it. */
1531
+ byteSize?: number | null;
1532
+ };
1436
1533
  /**
1437
1534
  * @description One piece of media on an Interaction, described well enough to render a card for it without fetching a byte.
1438
1535
  * THE KIND IS PUBLISHED RATHER THAN DERIVED. A consumer that classifies media by testing whether its content type starts with `image/` shows a download chip for a photograph the moment a provider omits the type or sends `application/octet-stream`, which it does routinely. The system that mastered the record knows the filename and the source as well as the declared type, so it decides once, here, and every consumer agrees.
@@ -2092,6 +2189,32 @@ export interface components {
2092
2189
  /** @description Opaque continuation cursor from the immediately preceding page. */
2093
2190
  cursor?: string;
2094
2191
  };
2192
+ SetDesktopNotificationPreferenceCommand: {
2193
+ operationId: string;
2194
+ clientOrgId: string;
2195
+ /** @description Explicit User setting, or null to inherit the rooftop default. */
2196
+ override: boolean | null;
2197
+ };
2198
+ WebPushSubscriptionKeys: {
2199
+ p256dh: string;
2200
+ auth: string;
2201
+ };
2202
+ RegisterDesktopPushSubscriptionCommand: {
2203
+ operationId: string;
2204
+ clientOrgId: string;
2205
+ subscription: {
2206
+ /** Format: uri */
2207
+ endpoint: string;
2208
+ expirationTime: number | null;
2209
+ keys: components["schemas"]["WebPushSubscriptionKeys"];
2210
+ };
2211
+ };
2212
+ UnregisterDesktopPushSubscriptionCommand: {
2213
+ operationId: string;
2214
+ clientOrgId: string;
2215
+ /** Format: uri */
2216
+ endpoint: string;
2217
+ };
2095
2218
  /**
2096
2219
  * @description Mark the caller's outstanding Mentions on one WorkCycle dealt with.
2097
2220
  * CONVERSATION-WIDE, NOT PER-MENTION, and the shape is the point. A recipient does not think in Mentions; they think "I have handled this thread". Two colleagues naming the same person in one exchange raises two Mentions, and clearing one of them would leave the row on the Mentions list with nothing on screen to explain why.
@@ -2293,6 +2416,11 @@ export interface components {
2293
2416
  * @enum {string}
2294
2417
  */
2295
2418
  OutboundMessageOwnershipDisposition: "PRESERVE" | "TAKE";
2419
+ /**
2420
+ * @description Send a message to a Customer, with words, media, or both.
2421
+ * EITHER MAY BE ABSENT, BUT NOT BOTH, which the `anyOf` below states. A message carrying only a photograph is an ordinary thing to send and was previously unexpressible, because `body` was required; a message carrying neither is not a message.
2422
+ * OMIT, NEVER EMPTY. A producer fingerprints the parsed command to make a retry idempotent, and an absent field and an empty one do not hash alike. So `body` has no empty form and `attachments` has no empty form — a send with no media omits the field rather than passing `[]`, and the schema enforces it so the two spellings can never diverge in the wild.
2423
+ */
2296
2424
  SendInboxMessageCommand: {
2297
2425
  operationId: string;
2298
2426
  clientOrgId: string;
@@ -2302,7 +2430,12 @@ export interface components {
2302
2430
  * @description The Conversation observed by the caller, or null when contact search reported NONE. Ordo revalidates it against the canonical Customer and safely finds or creates the Conversation under its tenant lock.
2303
2431
  */
2304
2432
  conversationId: string | null;
2305
- body: string;
2433
+ body?: string;
2434
+ /**
2435
+ * @description Media to send with this message, in the order the reader should see it.
2436
+ * TEN, BECAUSE THAT IS WHAT A COMPOSER SHOULD OFFER, not because the wire cannot carry more. How many provider messages it takes to deliver these is the messaging platform's business, and a set too large for one is split rather than refused — but it remains ONE Interaction carrying N attachments, whatever the transport did.
2437
+ */
2438
+ attachments?: components["schemas"]["OutboundAttachmentV1"][];
2306
2439
  ownershipDisposition: components["schemas"]["OutboundMessageOwnershipDisposition"];
2307
2440
  };
2308
2441
  /** @enum {string} */
@@ -2425,6 +2558,41 @@ export interface components {
2425
2558
  nextCursor: string | null;
2426
2559
  };
2427
2560
  };
2561
+ DesktopNotificationSettingsResponse: {
2562
+ data: {
2563
+ clientOrgId: string;
2564
+ rooftopDefaultEnabled: boolean;
2565
+ userOverride: boolean | null;
2566
+ effectiveEnabled: boolean;
2567
+ /** Format: date-time */
2568
+ activatedAt: string | null;
2569
+ vapidPublicKey: string;
2570
+ };
2571
+ };
2572
+ DesktopNotificationPreferenceResult: {
2573
+ data: {
2574
+ operationId: string;
2575
+ applied: boolean;
2576
+ replayed: boolean;
2577
+ clientOrgId: string;
2578
+ rooftopDefaultEnabled: boolean;
2579
+ userOverride: boolean | null;
2580
+ effectiveEnabled: boolean;
2581
+ };
2582
+ };
2583
+ DesktopPushSubscriptionResult: {
2584
+ data: {
2585
+ operationId: string;
2586
+ applied: boolean;
2587
+ replayed: boolean;
2588
+ /**
2589
+ * Format: uuid
2590
+ * @description Existing subscription identity, or null when unregistration was a no-op.
2591
+ */
2592
+ subscriptionId: string | null;
2593
+ active: boolean;
2594
+ };
2595
+ };
2428
2596
  ErrorEnvelope: {
2429
2597
  error: {
2430
2598
  code: string;
@@ -2527,6 +2695,36 @@ export interface components {
2527
2695
  "application/json": components["schemas"]["DismissNotificationsResult"];
2528
2696
  };
2529
2697
  };
2698
+ /** @description Applied or idempotently replayed desktop-notification preference. */
2699
+ DesktopNotificationPreferenceApplied: {
2700
+ headers: {
2701
+ "x-correlation-id": components["headers"]["CorrelationId"];
2702
+ [name: string]: unknown;
2703
+ };
2704
+ content: {
2705
+ "application/json": components["schemas"]["DesktopNotificationPreferenceResult"];
2706
+ };
2707
+ };
2708
+ /** @description Registered, refreshed, or idempotently replayed browser subscription. */
2709
+ DesktopPushSubscriptionRegistered: {
2710
+ headers: {
2711
+ "x-correlation-id": components["headers"]["CorrelationId"];
2712
+ [name: string]: unknown;
2713
+ };
2714
+ content: {
2715
+ "application/json": components["schemas"]["DesktopPushSubscriptionResult"];
2716
+ };
2717
+ };
2718
+ /** @description Unregistered or idempotently replayed browser subscription. */
2719
+ DesktopPushSubscriptionUnregistered: {
2720
+ headers: {
2721
+ "x-correlation-id": components["headers"]["CorrelationId"];
2722
+ [name: string]: unknown;
2723
+ };
2724
+ content: {
2725
+ "application/json": components["schemas"]["DesktopPushSubscriptionResult"];
2726
+ };
2727
+ };
2530
2728
  /** @description Created or idempotently replayed canonical Customer result. */
2531
2729
  InboxCustomerCreated: {
2532
2730
  headers: {
@@ -2709,6 +2907,21 @@ export interface components {
2709
2907
  "application/json": components["schemas"]["DismissNotificationsCommand"];
2710
2908
  };
2711
2909
  };
2910
+ SetDesktopNotificationPreferenceCommand: {
2911
+ content: {
2912
+ "application/json": components["schemas"]["SetDesktopNotificationPreferenceCommand"];
2913
+ };
2914
+ };
2915
+ RegisterDesktopPushSubscriptionCommand: {
2916
+ content: {
2917
+ "application/json": components["schemas"]["RegisterDesktopPushSubscriptionCommand"];
2918
+ };
2919
+ };
2920
+ UnregisterDesktopPushSubscriptionCommand: {
2921
+ content: {
2922
+ "application/json": components["schemas"]["UnregisterDesktopPushSubscriptionCommand"];
2923
+ };
2924
+ };
2712
2925
  CreateInboxCustomerCommand: {
2713
2926
  content: {
2714
2927
  "application/json": components["schemas"]["CreateInboxCustomerCommand"];
@@ -3228,6 +3441,34 @@ export interface operations {
3228
3441
  503: components["responses"]["ServiceUnavailable"];
3229
3442
  };
3230
3443
  };
3444
+ getDesktopNotificationSettings: {
3445
+ parameters: {
3446
+ query?: never;
3447
+ header: {
3448
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
3449
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
3450
+ };
3451
+ path?: never;
3452
+ cookie?: never;
3453
+ };
3454
+ requestBody?: never;
3455
+ responses: {
3456
+ /** @description Effective desktop-notification settings for the selected rooftop. */
3457
+ 200: {
3458
+ headers: {
3459
+ "x-correlation-id": components["headers"]["CorrelationId"];
3460
+ [name: string]: unknown;
3461
+ };
3462
+ content: {
3463
+ "application/json": components["schemas"]["DesktopNotificationSettingsResponse"];
3464
+ };
3465
+ };
3466
+ 401: components["responses"]["Unauthorized"];
3467
+ 403: components["responses"]["Forbidden"];
3468
+ 500: components["responses"]["InternalError"];
3469
+ 503: components["responses"]["ServiceUnavailable"];
3470
+ };
3471
+ };
3231
3472
  createInboxCustomer: {
3232
3473
  parameters: {
3233
3474
  query?: never;
@@ -3615,6 +3856,69 @@ export interface operations {
3615
3856
  503: components["responses"]["ServiceUnavailable"];
3616
3857
  };
3617
3858
  };
3859
+ setDesktopNotificationPreference: {
3860
+ parameters: {
3861
+ query?: never;
3862
+ header: {
3863
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
3864
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
3865
+ };
3866
+ path?: never;
3867
+ cookie?: never;
3868
+ };
3869
+ requestBody: components["requestBodies"]["SetDesktopNotificationPreferenceCommand"];
3870
+ responses: {
3871
+ 200: components["responses"]["DesktopNotificationPreferenceApplied"];
3872
+ 400: components["responses"]["BadRequest"];
3873
+ 401: components["responses"]["Unauthorized"];
3874
+ 403: components["responses"]["Forbidden"];
3875
+ 409: components["responses"]["Conflict"];
3876
+ 500: components["responses"]["InternalError"];
3877
+ 503: components["responses"]["ServiceUnavailable"];
3878
+ };
3879
+ };
3880
+ registerDesktopPushSubscription: {
3881
+ parameters: {
3882
+ query?: never;
3883
+ header: {
3884
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
3885
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
3886
+ };
3887
+ path?: never;
3888
+ cookie?: never;
3889
+ };
3890
+ requestBody: components["requestBodies"]["RegisterDesktopPushSubscriptionCommand"];
3891
+ responses: {
3892
+ 200: components["responses"]["DesktopPushSubscriptionRegistered"];
3893
+ 400: components["responses"]["BadRequest"];
3894
+ 401: components["responses"]["Unauthorized"];
3895
+ 403: components["responses"]["Forbidden"];
3896
+ 409: components["responses"]["Conflict"];
3897
+ 500: components["responses"]["InternalError"];
3898
+ 503: components["responses"]["ServiceUnavailable"];
3899
+ };
3900
+ };
3901
+ unregisterDesktopPushSubscription: {
3902
+ parameters: {
3903
+ query?: never;
3904
+ header: {
3905
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
3906
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
3907
+ };
3908
+ path?: never;
3909
+ cookie?: never;
3910
+ };
3911
+ requestBody: components["requestBodies"]["UnregisterDesktopPushSubscriptionCommand"];
3912
+ responses: {
3913
+ 200: components["responses"]["DesktopPushSubscriptionUnregistered"];
3914
+ 400: components["responses"]["BadRequest"];
3915
+ 401: components["responses"]["Unauthorized"];
3916
+ 403: components["responses"]["Forbidden"];
3917
+ 409: components["responses"]["Conflict"];
3918
+ 500: components["responses"]["InternalError"];
3919
+ 503: components["responses"]["ServiceUnavailable"];
3920
+ };
3921
+ };
3618
3922
  resolveInboxMentions: {
3619
3923
  parameters: {
3620
3924
  query?: never;