@vindentech/api-client 0.3.0-next.18 → 0.3.0-next.19

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 (49) hide show
  1. package/dist/generated/_all.d.ts +1 -0
  2. package/dist/generated/_all.d.ts.map +1 -1
  3. package/dist/generated/_all.js +1 -0
  4. package/dist/generated/_all.js.map +1 -1
  5. package/dist/generated/_permissions.d.ts +60 -1
  6. package/dist/generated/_permissions.d.ts.map +1 -1
  7. package/dist/generated/_permissions.js +15 -0
  8. package/dist/generated/_permissions.js.map +1 -1
  9. package/dist/generated/index.schemas.d.ts +493 -71
  10. package/dist/generated/index.schemas.d.ts.map +1 -1
  11. package/dist/generated/index.schemas.js +158 -9
  12. package/dist/generated/index.schemas.js.map +1 -1
  13. package/dist/generated/me-notification-preferences/me-notification-preferences.d.ts +22 -1
  14. package/dist/generated/me-notification-preferences/me-notification-preferences.d.ts.map +1 -1
  15. package/dist/generated/me-notification-preferences/me-notification-preferences.js +11 -0
  16. package/dist/generated/me-notification-preferences/me-notification-preferences.js.map +1 -1
  17. package/dist/generated/notification-debug/notification-debug.d.ts +34 -0
  18. package/dist/generated/notification-debug/notification-debug.d.ts.map +1 -0
  19. package/dist/generated/notification-debug/notification-debug.js +13 -0
  20. package/dist/generated/notification-debug/notification-debug.js.map +1 -0
  21. package/dist/generated/notification-dispatches/notification-dispatches.d.ts +51 -1
  22. package/dist/generated/notification-dispatches/notification-dispatches.d.ts.map +1 -1
  23. package/dist/generated/notification-dispatches/notification-dispatches.js +20 -0
  24. package/dist/generated/notification-dispatches/notification-dispatches.js.map +1 -1
  25. package/dist/generated/notification-preferences/notification-preferences.d.ts +26 -1
  26. package/dist/generated/notification-preferences/notification-preferences.d.ts.map +1 -1
  27. package/dist/generated/notification-preferences/notification-preferences.js +11 -0
  28. package/dist/generated/notification-preferences/notification-preferences.js.map +1 -1
  29. package/dist/generated/notification-requests/notification-requests.d.ts +22 -1
  30. package/dist/generated/notification-requests/notification-requests.d.ts.map +1 -1
  31. package/dist/generated/notification-requests/notification-requests.js +9 -0
  32. package/dist/generated/notification-requests/notification-requests.js.map +1 -1
  33. package/dist/generated/notification-settings/notification-settings.d.ts +36 -1
  34. package/dist/generated/notification-settings/notification-settings.d.ts.map +1 -1
  35. package/dist/generated/notification-settings/notification-settings.js +23 -0
  36. package/dist/generated/notification-settings/notification-settings.js.map +1 -1
  37. package/dist/generated/orders/orders.d.ts +15 -1
  38. package/dist/generated/orders/orders.d.ts.map +1 -1
  39. package/dist/generated/orders/orders.js +12 -0
  40. package/dist/generated/orders/orders.js.map +1 -1
  41. package/dist/generated/sender-identities/sender-identities.d.ts +93 -1
  42. package/dist/generated/sender-identities/sender-identities.d.ts.map +1 -1
  43. package/dist/generated/sender-identities/sender-identities.js +40 -0
  44. package/dist/generated/sender-identities/sender-identities.js.map +1 -1
  45. package/dist/generated/suppressions/suppressions.d.ts +55 -1
  46. package/dist/generated/suppressions/suppressions.d.ts.map +1 -1
  47. package/dist/generated/suppressions/suppressions.js +22 -0
  48. package/dist/generated/suppressions/suppressions.js.map +1 -1
  49. package/package.json +1 -1
@@ -581,6 +581,60 @@ export interface OrderTransitionResultDto {
581
581
  newStatus: OrderTransitionResultDtoNewStatus;
582
582
  transitionedAt: string;
583
583
  }
584
+ export interface ReceiveAtWarehouseDto {
585
+ /** The container the collected goods were unloaded onto at the warehouse. */
586
+ containerId: string;
587
+ }
588
+ /**
589
+ * Always RECEIVED.
590
+ */
591
+ export type ReceivedAtWarehousePodDtoStatus = typeof ReceivedAtWarehousePodDtoStatus[keyof typeof ReceivedAtWarehousePodDtoStatus];
592
+ export declare const ReceivedAtWarehousePodDtoStatus: {
593
+ readonly RECEIVED: "RECEIVED";
594
+ };
595
+ export interface ReceivedAtWarehousePodDto {
596
+ podId: string;
597
+ /** Always RECEIVED. */
598
+ status: ReceivedAtWarehousePodDtoStatus;
599
+ /** The MOVE movement appended for this pod. */
600
+ movementId: string;
601
+ }
602
+ /**
603
+ * Always IN_TRANSIT.
604
+ */
605
+ export type ReceiveAtWarehouseResultDtoOldStatus = typeof ReceiveAtWarehouseResultDtoOldStatus[keyof typeof ReceiveAtWarehouseResultDtoOldStatus];
606
+ export declare const ReceiveAtWarehouseResultDtoOldStatus: {
607
+ readonly IN_TRANSIT: "IN_TRANSIT";
608
+ };
609
+ /**
610
+ * Always RECEIVED.
611
+ */
612
+ export type ReceiveAtWarehouseResultDtoNewStatus = typeof ReceiveAtWarehouseResultDtoNewStatus[keyof typeof ReceiveAtWarehouseResultDtoNewStatus];
613
+ export declare const ReceiveAtWarehouseResultDtoNewStatus: {
614
+ readonly RECEIVED: "RECEIVED";
615
+ };
616
+ export interface ReceiveAtWarehouseResultDto {
617
+ salesOrderId: string;
618
+ /** Always IN_TRANSIT. */
619
+ oldStatus: ReceiveAtWarehouseResultDtoOldStatus;
620
+ /** Always RECEIVED. */
621
+ newStatus: ReceiveAtWarehouseResultDtoNewStatus;
622
+ /** ISO-8601 receipt timestamp. */
623
+ receivedAt: string;
624
+ /** The receiving container. */
625
+ containerId: string;
626
+ /**
627
+ * The container's current position, or null when it is unplaced.
628
+ * @nullable
629
+ */
630
+ positionId: string | null;
631
+ /** The order's warehouse after the command — backfilled from the container when the order had none. */
632
+ warehouseId: string;
633
+ /** Every IDENTIFIED pod that was moved onto the container. */
634
+ placedPods: ReceivedAtWarehousePodDto[];
635
+ /** True when this response is an idempotent replay. */
636
+ idempotent: boolean;
637
+ }
584
638
  export interface DeliverAllDto {
585
639
  /** An existing file_asset id (kind POD) to link to the leg as proof_of_delivery. */
586
640
  proofOfDeliveryFileId?: string;
@@ -1594,6 +1648,77 @@ export interface UpdateIdentityNumberDto {
1594
1648
  /** Swedish personal identity number — YYMMDDNNNN, YYMMDD-NNNN, YYMMDD+NNNN, YYYYMMDDNNNN or YYYYMMDD-NNNN, with a valid Luhn check digit. Stored digits-only. Never returned by any endpoint. */
1595
1649
  personalIdentityNumber: string;
1596
1650
  }
1651
+ export interface ServicePointAddressDto {
1652
+ /** @nullable */
1653
+ street: string | null;
1654
+ /** @nullable */
1655
+ postalCode: string | null;
1656
+ /** @nullable */
1657
+ city: string | null;
1658
+ /** @nullable */
1659
+ municipality: string | null;
1660
+ /** ISO 3166-1 alpha-2 */
1661
+ countryCode: string;
1662
+ /**
1663
+ * Where to find the point once on site (e.g. which part of a building).
1664
+ * @nullable
1665
+ */
1666
+ specificLocation: string | null;
1667
+ /** @nullable */
1668
+ latitude: number | null;
1669
+ /** @nullable */
1670
+ longitude: number | null;
1671
+ }
1672
+ export interface ServicePointOpeningHoursDto {
1673
+ /** Provider-supplied day name. */
1674
+ dayOfWeek: string;
1675
+ /**
1676
+ * Local time, provider-formatted.
1677
+ * @nullable
1678
+ */
1679
+ opens: string | null;
1680
+ /**
1681
+ * Local time, provider-formatted.
1682
+ * @nullable
1683
+ */
1684
+ closes: string | null;
1685
+ open24h: boolean;
1686
+ closed: boolean;
1687
+ }
1688
+ export type ServicePointDtoProvider = typeof ServicePointDtoProvider[keyof typeof ServicePointDtoProvider];
1689
+ export declare const ServicePointDtoProvider: {
1690
+ readonly POSTI: "POSTI";
1691
+ };
1692
+ export type ServicePointDtoType = typeof ServicePointDtoType[keyof typeof ServicePointDtoType];
1693
+ export declare const ServicePointDtoType: {
1694
+ readonly PARCEL_LOCKER: "PARCEL_LOCKER";
1695
+ readonly PICKUP_POINT: "PICKUP_POINT";
1696
+ };
1697
+ export interface ServicePointDto {
1698
+ /** Provider-scoped opaque id. This is the value to send back as the cart's servicePointId. */
1699
+ id: string;
1700
+ provider: ServicePointDtoProvider;
1701
+ /** Display name for the picker. */
1702
+ name: string;
1703
+ type: ServicePointDtoType;
1704
+ /**
1705
+ * Host business the point sits inside, when it is not standalone.
1706
+ * @nullable
1707
+ */
1708
+ careOf: string | null;
1709
+ /**
1710
+ * Provider routing code for this point — what a shipping/label call needs to address a parcel here.
1711
+ * @nullable
1712
+ */
1713
+ routingServiceCode: string | null;
1714
+ /**
1715
+ * Distance from the searched location, when the provider reports one.
1716
+ * @nullable
1717
+ */
1718
+ distanceInMeters: number | null;
1719
+ address: ServicePointAddressDto;
1720
+ openingHours: ServicePointOpeningHoursDto[];
1721
+ }
1597
1722
  export interface AnonymousSessionDto {
1598
1723
  /** Opaque bearer token for the anonymous session. Send it as the X-Session-Token header on guest-capable endpoints. Shown once — it is stored only as a hash. */
1599
1724
  sessionToken: string;
@@ -2435,77 +2560,6 @@ export interface PlaceOrderResultDto {
2435
2560
  orderNumber: number;
2436
2561
  salesOrders: PlacedSalesOrderDto[];
2437
2562
  }
2438
- export interface ServicePointAddressDto {
2439
- /** @nullable */
2440
- street: string | null;
2441
- /** @nullable */
2442
- postalCode: string | null;
2443
- /** @nullable */
2444
- city: string | null;
2445
- /** @nullable */
2446
- municipality: string | null;
2447
- /** ISO 3166-1 alpha-2 */
2448
- countryCode: string;
2449
- /**
2450
- * Where to find the point once on site (e.g. which part of a building).
2451
- * @nullable
2452
- */
2453
- specificLocation: string | null;
2454
- /** @nullable */
2455
- latitude: number | null;
2456
- /** @nullable */
2457
- longitude: number | null;
2458
- }
2459
- export interface ServicePointOpeningHoursDto {
2460
- /** Provider-supplied day name. */
2461
- dayOfWeek: string;
2462
- /**
2463
- * Local time, provider-formatted.
2464
- * @nullable
2465
- */
2466
- opens: string | null;
2467
- /**
2468
- * Local time, provider-formatted.
2469
- * @nullable
2470
- */
2471
- closes: string | null;
2472
- open24h: boolean;
2473
- closed: boolean;
2474
- }
2475
- export type ServicePointDtoProvider = typeof ServicePointDtoProvider[keyof typeof ServicePointDtoProvider];
2476
- export declare const ServicePointDtoProvider: {
2477
- readonly POSTI: "POSTI";
2478
- };
2479
- export type ServicePointDtoType = typeof ServicePointDtoType[keyof typeof ServicePointDtoType];
2480
- export declare const ServicePointDtoType: {
2481
- readonly PARCEL_LOCKER: "PARCEL_LOCKER";
2482
- readonly PICKUP_POINT: "PICKUP_POINT";
2483
- };
2484
- export interface ServicePointDto {
2485
- /** Provider-scoped opaque id. This is the value to send back as the cart's servicePointId. */
2486
- id: string;
2487
- provider: ServicePointDtoProvider;
2488
- /** Display name for the picker. */
2489
- name: string;
2490
- type: ServicePointDtoType;
2491
- /**
2492
- * Host business the point sits inside, when it is not standalone.
2493
- * @nullable
2494
- */
2495
- careOf: string | null;
2496
- /**
2497
- * Provider routing code for this point — what a shipping/label call needs to address a parcel here.
2498
- * @nullable
2499
- */
2500
- routingServiceCode: string | null;
2501
- /**
2502
- * Distance from the searched location, when the provider reports one.
2503
- * @nullable
2504
- */
2505
- distanceInMeters: number | null;
2506
- address: ServicePointAddressDto;
2507
- openingHours: ServicePointOpeningHoursDto[];
2508
- }
2509
2563
  export type TransportServiceDtoSalesOrderType = typeof TransportServiceDtoSalesOrderType[keyof typeof TransportServiceDtoSalesOrderType];
2510
2564
  export declare const TransportServiceDtoSalesOrderType: {
2511
2565
  readonly PICKUP: "PICKUP";
@@ -8152,6 +8206,44 @@ export interface PreferenceDto {
8152
8206
  source: string;
8153
8207
  updatedAt: string;
8154
8208
  }
8209
+ export interface PreferenceSubjectDto {
8210
+ /** The subject's Keycloak sub. Mutually exclusive with `address`. */
8211
+ userSub?: string;
8212
+ /** The subject's email or phone. Mutually exclusive with `userSub`. */
8213
+ address?: string;
8214
+ }
8215
+ export type UpsertPreferenceDtoCategory = typeof UpsertPreferenceDtoCategory[keyof typeof UpsertPreferenceDtoCategory];
8216
+ export declare const UpsertPreferenceDtoCategory: {
8217
+ readonly marketing: "marketing";
8218
+ readonly operational: "operational";
8219
+ readonly transactional: "transactional";
8220
+ readonly billing: "billing";
8221
+ readonly security: "security";
8222
+ readonly system: "system";
8223
+ };
8224
+ /**
8225
+ * `null` applies the choice to every channel for the category.
8226
+ * @nullable
8227
+ */
8228
+ export type UpsertPreferenceDtoChannel = typeof UpsertPreferenceDtoChannel[keyof typeof UpsertPreferenceDtoChannel] | null;
8229
+ export declare const UpsertPreferenceDtoChannel: {
8230
+ readonly email: "email";
8231
+ readonly sms: "sms";
8232
+ readonly push: "push";
8233
+ readonly webhook: "webhook";
8234
+ };
8235
+ export interface UpsertPreferenceDto {
8236
+ /** Staff surface only. On `/v1/me` the subject is the caller's JWT `sub` and this field is rejected. */
8237
+ subject?: PreferenceSubjectDto;
8238
+ category: UpsertPreferenceDtoCategory;
8239
+ /**
8240
+ * `null` applies the choice to every channel for the category.
8241
+ * @nullable
8242
+ */
8243
+ channel: UpsertPreferenceDtoChannel;
8244
+ /** `false` is the opt-out. `true` is an explicit restored opt-in, which is kept as a row so the trail shows the choice was reversed. */
8245
+ isEnabled: boolean;
8246
+ }
8155
8247
  export type AddressVerdictDtoCategory = typeof AddressVerdictDtoCategory[keyof typeof AddressVerdictDtoCategory];
8156
8248
  export declare const AddressVerdictDtoCategory: {
8157
8249
  readonly marketing: "marketing";
@@ -8252,6 +8344,28 @@ export interface PaginatedSuppressionsDto {
8252
8344
  /** Effective rows skipped applied. */
8253
8345
  offset: number;
8254
8346
  }
8347
+ export type CreateSuppressionDtoChannel = typeof CreateSuppressionDtoChannel[keyof typeof CreateSuppressionDtoChannel];
8348
+ export declare const CreateSuppressionDtoChannel: {
8349
+ readonly email: "email";
8350
+ readonly sms: "sms";
8351
+ readonly push: "push";
8352
+ readonly webhook: "webhook";
8353
+ };
8354
+ export interface CreateSuppressionDto {
8355
+ channel: CreateSuppressionDtoChannel;
8356
+ /** Email or E.164 phone; normalized server-side. */
8357
+ address: string;
8358
+ /** When the block lapses. Omit for a permanent block. */
8359
+ expiresAt?: string;
8360
+ /** Why this address is being blocked. Recorded in the admin action. */
8361
+ note?: string;
8362
+ }
8363
+ export interface ReleaseSuppressionDto {
8364
+ /** Why the block is being lifted. Recorded in the admin action. */
8365
+ reason: string;
8366
+ /** Required to release a hard_bounce / complaint / sms_stop / provider_suppression row. Recorded in the admin action. */
8367
+ acknowledgeReputationRisk?: boolean;
8368
+ }
8255
8369
  export type NotificationDispatchDtoChannel = typeof NotificationDispatchDtoChannel[keyof typeof NotificationDispatchDtoChannel];
8256
8370
  export declare const NotificationDispatchDtoChannel: {
8257
8371
  readonly email: "email";
@@ -8513,6 +8627,55 @@ export interface NotificationDispatchDetailDto {
8513
8627
  bodyRetained: boolean;
8514
8628
  deliveryEvents: DeliveryEventDto[];
8515
8629
  }
8630
+ /**
8631
+ * Transient `failed` only. Any other status is refused.
8632
+ */
8633
+ export type ResendBatchFilterDtoStatus = typeof ResendBatchFilterDtoStatus[keyof typeof ResendBatchFilterDtoStatus];
8634
+ export declare const ResendBatchFilterDtoStatus: {
8635
+ readonly failed: "failed";
8636
+ };
8637
+ export interface ResendBatchFilterDto {
8638
+ /** Transient `failed` only. Any other status is refused. */
8639
+ status: ResendBatchFilterDtoStatus;
8640
+ /** Narrow to one event. */
8641
+ eventKey?: string;
8642
+ /** Required. The window is what makes the count and the resend partition-pruned. */
8643
+ createdFrom: string;
8644
+ createdTo: string;
8645
+ }
8646
+ export interface ResendBatchDto {
8647
+ filter: ResendBatchFilterDto;
8648
+ /** The count the operator was shown. The server re-counts and refuses the batch if the number moved — a bulk send against a number nobody saw is the failure mode this exists to prevent. */
8649
+ expectedCount: number;
8650
+ /** Explicit confirmation (04 §11). Anything but `true` is refused. */
8651
+ confirm: boolean;
8652
+ }
8653
+ export interface ResendBatchResultDto {
8654
+ /** New dispatch rows created. */
8655
+ created: number;
8656
+ /** How many of those landed terminal because the re-run gate blocked them (now-suppressed or opted-out addresses). They are created and auditable, but nothing will be sent. */
8657
+ skippedByGate: number;
8658
+ }
8659
+ /**
8660
+ * What the re-run send-time gate decided. `suppressed` / `skipped_opt_out` mean the resend landed as a terminal row and no message will go out — the UI cannot punch through a hard block.
8661
+ */
8662
+ export type ResendResultDtoGateOutcome = typeof ResendResultDtoGateOutcome[keyof typeof ResendResultDtoGateOutcome];
8663
+ export declare const ResendResultDtoGateOutcome: {
8664
+ readonly queued: "queued";
8665
+ readonly suppressed: "suppressed";
8666
+ readonly skipped_opt_out: "skipped_opt_out";
8667
+ };
8668
+ export interface ResendResultDto {
8669
+ /** The NEW dispatch. The original is never mutated. */
8670
+ notificationDispatchId: string;
8671
+ /** What the re-run send-time gate decided. `suppressed` / `skipped_opt_out` mean the resend landed as a terminal row and no message will go out — the UI cannot punch through a hard block. */
8672
+ gateOutcome: ResendResultDtoGateOutcome;
8673
+ /**
8674
+ * Why the gate blocked it, in the vocabulary the dispatch row records.
8675
+ * @nullable
8676
+ */
8677
+ gateReason: string | null;
8678
+ }
8516
8679
  export type DispatchStatusCountDtoStatus = typeof DispatchStatusCountDtoStatus[keyof typeof DispatchStatusCountDtoStatus];
8517
8680
  export declare const DispatchStatusCountDtoStatus: {
8518
8681
  readonly queued: "queued";
@@ -8568,6 +8731,10 @@ export interface NotificationRequestDto {
8568
8731
  /** Total dispatches fanned out from this request. */
8569
8732
  dispatchCount: number;
8570
8733
  }
8734
+ export interface ReprocessResultDto {
8735
+ /** The outbox key of the re-emitted event. A reprocess puts the original event back on the pipeline rather than writing a request row: Phase A creates the new request when it consumes the event, so this key — not a request id — is what correlates the command to the fan-out it caused. The original request is never mutated. */
8736
+ outboxEventKey: string;
8737
+ }
8571
8738
  export interface HealthRateWindowDto {
8572
8739
  numerator: number;
8573
8740
  denominator: number;
@@ -8604,6 +8771,10 @@ export interface NotificationSettingsDto {
8604
8771
  /** @nullable */
8605
8772
  smsSpendCeiling: number | null;
8606
8773
  }
8774
+ export interface SendPauseDto {
8775
+ /** Why sending is being paused or resumed. Recorded in the admin action. */
8776
+ reason: string;
8777
+ }
8607
8778
  export type SenderIdentityDtoChannel = typeof SenderIdentityDtoChannel[keyof typeof SenderIdentityDtoChannel];
8608
8779
  export declare const SenderIdentityDtoChannel: {
8609
8780
  readonly email: "email";
@@ -8683,6 +8854,257 @@ export interface SenderIdentityDetailDto {
8683
8854
  /** DKIM/DNS records to publish for an email identity. Empty until the SES read lands with the verify command in the write slice. */
8684
8855
  dnsRecords: SenderDnsRecordDto[];
8685
8856
  }
8857
+ export type CreateSenderIdentityDtoChannel = typeof CreateSenderIdentityDtoChannel[keyof typeof CreateSenderIdentityDtoChannel];
8858
+ export declare const CreateSenderIdentityDtoChannel: {
8859
+ readonly email: "email";
8860
+ readonly sms: "sms";
8861
+ readonly push: "push";
8862
+ readonly webhook: "webhook";
8863
+ };
8864
+ export type CreateSenderIdentityDtoProvider = typeof CreateSenderIdentityDtoProvider[keyof typeof CreateSenderIdentityDtoProvider];
8865
+ export declare const CreateSenderIdentityDtoProvider: {
8866
+ readonly ses: "ses";
8867
+ readonly aws_eum_sms: "aws_eum_sms";
8868
+ readonly apns: "apns";
8869
+ readonly fcm: "fcm";
8870
+ };
8871
+ export interface CreateSenderIdentityDto {
8872
+ channel: CreateSenderIdentityDtoChannel;
8873
+ provider: CreateSenderIdentityDtoProvider;
8874
+ /** Email address or domain for SES; sender ID / origination number for SMS. */
8875
+ identityValue: string;
8876
+ /** The From name recipients see. */
8877
+ displayName?: string;
8878
+ /** SES configuration-set name / EUM config set or pool ARN. An opaque pointer to a Pulumi-provisioned resource — never a credential. May be filled in later by platform tooling. */
8879
+ providerConfigRef?: string;
8880
+ /** SES identity ARN / EUM pool or sender-ID ARN. Same rules as `providerConfigRef`. */
8881
+ providerIdentityArn?: string;
8882
+ }
8883
+ export interface UpdateSenderIdentityDto {
8884
+ /** @nullable */
8885
+ displayName?: string | null;
8886
+ /** Make this the channel's default. The swap is atomic — the partial UNIQUE admits one default per channel, so the previous default is demoted in the same transaction. Passing `false` on the current default is refused: a channel with enabled rules and no default has no sender. */
8887
+ isDefault?: boolean;
8888
+ }
8889
+ /**
8890
+ * The event payload, exactly as the producer would emit it.
8891
+ */
8892
+ export type SimulateDtoPayload = {
8893
+ [key: string]: unknown;
8894
+ };
8895
+ export interface SimulateDto {
8896
+ eventKey: string;
8897
+ /** Pin a contract version. Defaults to the event's active version. */
8898
+ eventVersion?: number;
8899
+ /** The event payload, exactly as the producer would emit it. */
8900
+ payload: SimulateDtoPayload;
8901
+ /** The tenant to simulate against. Must be the tenant this host resolves to — enterprise tenants have their own hostname and their own database, so simulating another tenant means calling that tenant's API, not passing its id here. */
8902
+ tenantId?: string;
8903
+ }
8904
+ export interface SimulationContractValidationDto {
8905
+ valid: boolean;
8906
+ /** One line per offending instance path. */
8907
+ errors: string[];
8908
+ }
8909
+ export type SimulationMatchedRuleDtoChannel = typeof SimulationMatchedRuleDtoChannel[keyof typeof SimulationMatchedRuleDtoChannel];
8910
+ export declare const SimulationMatchedRuleDtoChannel: {
8911
+ readonly email: "email";
8912
+ readonly sms: "sms";
8913
+ readonly push: "push";
8914
+ readonly webhook: "webhook";
8915
+ };
8916
+ export type SimulationMatchedRuleDtoCategory = typeof SimulationMatchedRuleDtoCategory[keyof typeof SimulationMatchedRuleDtoCategory];
8917
+ export declare const SimulationMatchedRuleDtoCategory: {
8918
+ readonly marketing: "marketing";
8919
+ readonly operational: "operational";
8920
+ readonly transactional: "transactional";
8921
+ readonly billing: "billing";
8922
+ readonly security: "security";
8923
+ readonly system: "system";
8924
+ };
8925
+ export interface SimulationMatchedRuleDto {
8926
+ ruleId: string;
8927
+ channel: SimulationMatchedRuleDtoChannel;
8928
+ category: SimulationMatchedRuleDtoCategory;
8929
+ /** Whether fan-out would act on this rule. */
8930
+ fired: boolean;
8931
+ /**
8932
+ * Why it did not fire. `rule_disabled` is the only reason in v1.
8933
+ * @nullable
8934
+ */
8935
+ skipReason: string | null;
8936
+ }
8937
+ export type SimulationRecipientDtoDelivery = typeof SimulationRecipientDtoDelivery[keyof typeof SimulationRecipientDtoDelivery];
8938
+ export declare const SimulationRecipientDtoDelivery: {
8939
+ readonly to: "to";
8940
+ readonly cc: "cc";
8941
+ readonly bcc: "bcc";
8942
+ };
8943
+ /**
8944
+ * The `resolution_reason` snapshot: spec index, kind, and the role/path it named.
8945
+ */
8946
+ export type SimulationRecipientDtoResolutionReason = {
8947
+ [key: string]: unknown;
8948
+ };
8949
+ export interface SimulationRecipientDto {
8950
+ ruleId: string;
8951
+ /** Normalized, as the dispatch row would record it. */
8952
+ address: string;
8953
+ /** messaging.recipient_kind — which spec produced it. */
8954
+ kind: string;
8955
+ delivery: SimulationRecipientDtoDelivery;
8956
+ /** The `resolution_reason` snapshot: spec index, kind, and the role/path it named. */
8957
+ resolutionReason: SimulationRecipientDtoResolutionReason;
8958
+ /**
8959
+ * `unresolvable_recipient` / `invalid_recipient` when the spec produced nothing usable. Fan-out writes a terminal `failed` dispatch for these rather than dropping them.
8960
+ * @nullable
8961
+ */
8962
+ error: string | null;
8963
+ }
8964
+ export type SimulationPolicyDecisionDtoCategory = typeof SimulationPolicyDecisionDtoCategory[keyof typeof SimulationPolicyDecisionDtoCategory];
8965
+ export declare const SimulationPolicyDecisionDtoCategory: {
8966
+ readonly marketing: "marketing";
8967
+ readonly operational: "operational";
8968
+ readonly transactional: "transactional";
8969
+ readonly billing: "billing";
8970
+ readonly security: "security";
8971
+ readonly system: "system";
8972
+ };
8973
+ export type SimulationPolicyDecisionDtoChannel = typeof SimulationPolicyDecisionDtoChannel[keyof typeof SimulationPolicyDecisionDtoChannel];
8974
+ export declare const SimulationPolicyDecisionDtoChannel: {
8975
+ readonly email: "email";
8976
+ readonly sms: "sms";
8977
+ readonly push: "push";
8978
+ readonly webhook: "webhook";
8979
+ };
8980
+ export type SimulationPolicyDecisionDtoVerdict = typeof SimulationPolicyDecisionDtoVerdict[keyof typeof SimulationPolicyDecisionDtoVerdict];
8981
+ export declare const SimulationPolicyDecisionDtoVerdict: {
8982
+ readonly send: "send";
8983
+ readonly suppressed: "suppressed";
8984
+ readonly skipped_opt_out: "skipped_opt_out";
8985
+ };
8986
+ /**
8987
+ * The matrix rule that decided it.
8988
+ */
8989
+ export type SimulationPolicyDecisionDtoMatrixRule = typeof SimulationPolicyDecisionDtoMatrixRule[keyof typeof SimulationPolicyDecisionDtoMatrixRule];
8990
+ export declare const SimulationPolicyDecisionDtoMatrixRule: {
8991
+ readonly hard_bounce_always_wins: "hard_bounce_always_wins";
8992
+ readonly complaint_always_wins: "complaint_always_wins";
8993
+ readonly sms_stop_legal_hard_block: "sms_stop_legal_hard_block";
8994
+ readonly manual_suppression: "manual_suppression";
8995
+ readonly provider_suppression: "provider_suppression";
8996
+ readonly preference_opt_out: "preference_opt_out";
8997
+ readonly billing_category_opt_out_ignored: "billing_category_opt_out_ignored";
8998
+ readonly category_not_preference_suppressible: "category_not_preference_suppressible";
8999
+ readonly no_block: "no_block";
9000
+ };
9001
+ export interface SimulationPolicyDecisionDto {
9002
+ address: string;
9003
+ category: SimulationPolicyDecisionDtoCategory;
9004
+ channel: SimulationPolicyDecisionDtoChannel;
9005
+ verdict: SimulationPolicyDecisionDtoVerdict;
9006
+ /** The matrix rule that decided it. */
9007
+ matrixRule: SimulationPolicyDecisionDtoMatrixRule;
9008
+ /**
9009
+ * The suppression or preference row behind the verdict.
9010
+ * @nullable
9011
+ */
9012
+ recordId: string | null;
9013
+ }
9014
+ export type SimulationTemplateCandidateDtoScope = typeof SimulationTemplateCandidateDtoScope[keyof typeof SimulationTemplateCandidateDtoScope];
9015
+ export declare const SimulationTemplateCandidateDtoScope: {
9016
+ readonly bound: "bound";
9017
+ readonly org_override: "org_override";
9018
+ readonly tenant_default: "tenant_default";
9019
+ readonly system: "system";
9020
+ };
9021
+ export interface SimulationTemplateCandidateDto {
9022
+ scope: SimulationTemplateCandidateDtoScope;
9023
+ notificationTemplateId: string;
9024
+ notificationTemplateVersionId: string;
9025
+ locale: string;
9026
+ /**
9027
+ * Lower is a better locale match; null means the locale is not an acceptable fallback.
9028
+ * @nullable
9029
+ */
9030
+ localeRank: number | null;
9031
+ chosen: boolean;
9032
+ }
9033
+ export interface SimulationTemplateResolutionDto {
9034
+ ruleId: string;
9035
+ /** @nullable */
9036
+ notificationTemplateId: string | null;
9037
+ /** @nullable */
9038
+ notificationTemplateVersionId: string | null;
9039
+ /** @nullable */
9040
+ locale: string | null;
9041
+ /** Every published candidate considered, in precedence order — bound, then org override, tenant default, system — with the winner marked. The answer to "why that template?". */
9042
+ fallbackChain: SimulationTemplateCandidateDto[];
9043
+ }
9044
+ export interface SimulationRenderedPreviewDto {
9045
+ ruleId: string;
9046
+ subject: string;
9047
+ html: string;
9048
+ text: string;
9049
+ /** @nullable */
9050
+ smsSegments: number | null;
9051
+ sanitizationWarnings: SanitizationWarningDto[];
9052
+ /** Non-fatal field render errors. */
9053
+ renderErrors: string[];
9054
+ }
9055
+ export type SimulationVerdictDtoChannel = typeof SimulationVerdictDtoChannel[keyof typeof SimulationVerdictDtoChannel];
9056
+ export declare const SimulationVerdictDtoChannel: {
9057
+ readonly email: "email";
9058
+ readonly sms: "sms";
9059
+ readonly push: "push";
9060
+ readonly webhook: "webhook";
9061
+ };
9062
+ export type SimulationVerdictDtoWouldWriteStatus = typeof SimulationVerdictDtoWouldWriteStatus[keyof typeof SimulationVerdictDtoWouldWriteStatus];
9063
+ export declare const SimulationVerdictDtoWouldWriteStatus: {
9064
+ readonly queued: "queued";
9065
+ readonly rendering: "rendering";
9066
+ readonly render_failed: "render_failed";
9067
+ readonly suppressed: "suppressed";
9068
+ readonly skipped_opt_out: "skipped_opt_out";
9069
+ readonly skipped_disabled: "skipped_disabled";
9070
+ readonly skipped_cost_capped: "skipped_cost_capped";
9071
+ readonly sent: "sent";
9072
+ readonly delivered: "delivered";
9073
+ readonly opened: "opened";
9074
+ readonly clicked: "clicked";
9075
+ readonly soft_bounced: "soft_bounced";
9076
+ readonly hard_bounced: "hard_bounced";
9077
+ readonly complaint: "complaint";
9078
+ readonly failed: "failed";
9079
+ readonly dead_lettered: "dead_lettered";
9080
+ readonly permanently_failed: "permanently_failed";
9081
+ };
9082
+ export interface SimulationVerdictDto {
9083
+ ruleId: string;
9084
+ address: string;
9085
+ channel: SimulationVerdictDtoChannel;
9086
+ wouldWriteStatus: SimulationVerdictDtoWouldWriteStatus;
9087
+ /**
9088
+ * The `error_message` the row would carry, when the status is not `queued`.
9089
+ * @nullable
9090
+ */
9091
+ detail: string | null;
9092
+ }
9093
+ export interface SimulationResultDto {
9094
+ eventKey: string;
9095
+ eventVersion: number;
9096
+ contractValidation: SimulationContractValidationDto;
9097
+ matchedRules: SimulationMatchedRuleDto[];
9098
+ resolvedRecipients: SimulationRecipientDto[];
9099
+ /** After (address, channel) dedup, keeping the strongest delivery level — the set fan-out would actually create rows for. */
9100
+ dedupedRecipients: SimulationRecipientDto[];
9101
+ policyDecisions: SimulationPolicyDecisionDto[];
9102
+ templateResolution: SimulationTemplateResolutionDto[];
9103
+ renderedPreview: SimulationRenderedPreviewDto[];
9104
+ verdicts: SimulationVerdictDto[];
9105
+ /** True when this tenant's sending is paused. Phase A still fans out; Phase B would park every `queued` row until the pause lifts — so the verdicts above are what WOULD be written, not what would be delivered today. */
9106
+ sendingPaused: boolean;
9107
+ }
8686
9108
  export type OrdersControllerListV1Params = {
8687
9109
  /**
8688
9110
  * Max rows to return (1–100).