@whooshbang/contracts 1.0.0-rc.21 → 1.0.0-rc.23

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 (125) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +9 -3
  3. package/contract-manifest.json +43 -41
  4. package/dist/generated/artifact-index.d.ts +35 -35
  5. package/dist/generated/artifact-index.js +43 -41
  6. package/dist/generated/artifact-index.js.map +1 -1
  7. package/dist/generated/validators-standalone.d.ts +340 -288
  8. package/dist/generated/validators-standalone.js +5560 -2925
  9. package/dist/generated/validators-standalone.js.map +1 -1
  10. package/dist/generated/validators.d.ts +12 -8
  11. package/dist/generated/validators.js +22 -18
  12. package/dist/generated/validators.js.map +1 -1
  13. package/dist/generated/whooshbang-event-v1.d.ts +1 -1
  14. package/dist/generated/whooshbang-v1.d.ts +211 -121
  15. package/dist/index.d.ts +2 -2
  16. package/dist/index.js +1 -1
  17. package/dist/index.js.map +1 -1
  18. package/fixtures/core-v1/fixture-index.json +50 -34
  19. package/fixtures/core-v1/problems/credential-organization-mismatch.json +9 -0
  20. package/fixtures/core-v1/problems/live-simulator-refused.json +16 -0
  21. package/fixtures/core-v1/problems/project-slug-conflict.json +1 -1
  22. package/fixtures/core-v1/requests/create-organization-credential.json +4 -0
  23. package/fixtures/core-v1/requests/update-project.json +3 -0
  24. package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
  25. package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
  26. package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
  27. package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
  28. package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
  29. package/fixtures/core-v1/scenarios/cross-organization-project.json +14 -0
  30. package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
  31. package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
  32. package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
  33. package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
  34. package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
  35. package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
  36. package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
  37. package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +2 -2
  38. package/fixtures/core-v1/scenarios/project-slug-conflict.json +2 -2
  39. package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
  40. package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
  41. package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
  42. package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
  43. package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
  44. package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
  45. package/fixtures/core-v1/success/{account-credential-collection.json → organization-credential-collection.json} +3 -3
  46. package/fixtures/core-v1/success/organization-credential-created.json +12 -0
  47. package/fixtures/core-v1/success/{account-credential-revoked.json → organization-credential-revoked.json} +3 -3
  48. package/fixtures/core-v1/success/{account-credential-rotated.json → organization-credential-rotated.json} +7 -7
  49. package/fixtures/core-v1/success/{account-projection.json → organization-projection.json} +2 -2
  50. package/fixtures/core-v1/success/project-collection.json +3 -2
  51. package/fixtures/core-v1/success/project-created.json +3 -2
  52. package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
  53. package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
  54. package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
  55. package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
  56. package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
  57. package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
  58. package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
  59. package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
  60. package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
  61. package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
  62. package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
  63. package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
  64. package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
  65. package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
  66. package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
  67. package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
  68. package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
  69. package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
  70. package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
  71. package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
  72. package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
  73. package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
  74. package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
  75. package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
  76. package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
  77. package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
  78. package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
  79. package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
  80. package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
  81. package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
  82. package/fixtures/recipient-experience-v1/requests/create-recipient-group.json +1 -1
  83. package/fixtures/recipient-experience-v1/requests/create-subscriber-with-groups.json +1 -1
  84. package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
  85. package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
  86. package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
  87. package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +2 -2
  88. package/fixtures/recipient-experience-v1/success/recipient-group.json +1 -1
  89. package/fixtures/whooshbang-events-v1/events/agent-binding-degraded.json +1 -1
  90. package/fixtures/whooshbang-events-v1/events/interaction-expired.json +1 -1
  91. package/fixtures/whooshbang-events-v1/events/interaction-received.json +1 -1
  92. package/fixtures/whooshbang-events-v1/events/message-delivered.json +1 -1
  93. package/fixtures/whooshbang-events-v1/events/message-expired.json +1 -1
  94. package/fixtures/whooshbang-events-v1/events/message-failed.json +1 -1
  95. package/fixtures/whooshbang-events-v1/events/message-provider-accepted.json +1 -1
  96. package/fixtures/whooshbang-events-v1/events/subscription-activated.json +1 -1
  97. package/fixtures/whooshbang-events-v1/events/subscription-revoked.json +1 -1
  98. package/fixtures/whooshbang-events-v1/signing/vectors.json +29 -29
  99. package/openapi/generated/whooshbang-v1.bundle.json +641 -248
  100. package/openapi/whooshbang-v1.yaml +403 -189
  101. package/package.json +1 -1
  102. package/schemas/core-scenario.schema.json +1 -1
  103. package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
  104. package/schemas/events/interaction-expired-v1.schema.json +1 -1
  105. package/schemas/events/interaction-received-v1.schema.json +1 -1
  106. package/schemas/events/message-delivered-v1.schema.json +1 -1
  107. package/schemas/events/message-expired-v1.schema.json +1 -1
  108. package/schemas/events/message-failed-v1.schema.json +1 -1
  109. package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
  110. package/schemas/events/subscription-activated-v1.schema.json +1 -1
  111. package/schemas/events/subscription-revoked-v1.schema.json +1 -1
  112. package/schemas/events/whooshbang-event-v1.schema.json +3 -3
  113. package/schemas/fixture-index.schema.json +1 -1
  114. package/schemas/interaction-machine-scenario.schema.json +1 -1
  115. package/schemas/interaction-v1.schema.json +1 -1
  116. package/schemas/machine-v1.schema.json +1 -1
  117. package/schemas/provider-capabilities-v1.schema.json +1 -1
  118. package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
  119. package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
  120. package/schemas/whooshbang-v1.schema.json +289 -67
  121. package/fixtures/core-v1/problems/credential-account-mismatch.json +0 -9
  122. package/fixtures/core-v1/requests/create-account-credential.json +0 -4
  123. package/fixtures/core-v1/scenarios/cross-account-project.json +0 -14
  124. package/fixtures/core-v1/success/account-credential-created.json +0 -12
  125. /package/fixtures/core-v1/requests/{rotate-account-credential.json → rotate-organization-credential.json} +0 -0
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * Public request, resource, summary, and Problem Details models for the WhooshBang V1 REST API.
7
7
  */
8
- export type WhooshBangV1ContractDocument = AccountProjection | CreateProjectRequest | Project | ProjectCollection | RecipientCopyOverrideCollection | UpdateRecipientCopyOverrideRequest | CreateApiCredentialRequest | RotateApiCredentialRequest | ApiCredential | ApiCredentialCollection | ApiCredentialSecretReveal | ApiCredentialRotation | CreateAccountCredentialRequest | RotateAccountCredentialRequest | AccountCredential | AccountCredentialCollection | AccountCredentialSecretReveal | AccountCredentialRotation | CreateCustomerEndpointRequest | CustomerEndpoint | CustomerEndpointCollection | CustomerEndpointMutationResult | CustomerEndpointAttemptCollection | CustomerEndpointVerificationChallenge | CreateSubscriptionLinkRequest | SubscriptionLink | CreateMessageRequest | Message | Problem | IdempotencyKey | ProviderCapabilitiesCollection | ConnectionProviderCollection | ChannelConnection | ChannelConnectionCollection | CreateChannelConnectionRequest | UpdateChannelConnectionRequest | RotateChannelConnectionCredentialRequest | NotifierConnectionCollection | AttachNotifierConnectionRequest | ConnectionTest | ConnectionTestCollection | CreateConnectionTestRequest | CustomerOwnedSlackAppManifest | ProjectRecipientExperience | UpdateProjectRecipientExperienceRequest | RecipientBrandLogoUpload | NotificationImageAsset | EnvironmentRecipientExperience | UpdateEnvironmentRecipientExperienceRequest | CreateRecipientSessionRequest | CreateRecipientSessionResponse | RecipientSession | CreateProviderHandoffRequest | ProviderHandoff | RecipientHandoffCompletion | SetPreferredBindingRequest | PreferredBinding1 | CreateSubscriberRequest | Subscriber | CreateRecipientGroupRequest | RecipientGroup | RecipientGroupCollection | RecipientGroupMembership | RecipientGroupMembershipCollection | CreateGroupBroadcastRequest | GroupBroadcast;
8
+ export type WhooshBangV1ContractDocument = OrganizationProjection | CloseOrganizationRequest | OrganizationClosureResult | CreateProjectRequest | Project | UpdateProjectRequest | PrivacyMode | ProjectCollection | RecipientCopyOverrideCollection | UpdateRecipientCopyOverrideRequest | CreateApiCredentialRequest | RotateApiCredentialRequest | ApiCredential | ApiCredentialCollection | ApiCredentialSecretReveal | ApiCredentialRotation | CreateOrganizationCredentialRequest | RotateOrganizationCredentialRequest | OrganizationCredential | OrganizationCredentialCollection | OrganizationCredentialSecretReveal | OrganizationCredentialRotation | CreateCustomerEndpointRequest | CustomerEndpoint | CustomerEndpointCollection | CustomerEndpointMutationResult | CustomerEndpointAttemptCollection | CustomerEndpointVerificationChallenge | CreateSubscriptionLinkRequest | SubscriptionLink | CreateMessageRequest | Message | Problem | IdempotencyKey | ProviderCapabilitiesCollection | ConnectionProviderCollection | ChannelConnection | ChannelConnectionCollection | CreateChannelConnectionRequest | UpdateChannelConnectionRequest | RotateChannelConnectionCredentialRequest | NotifierConnectionCollection | AttachNotifierConnectionRequest | ConnectionTest | ConnectionTestCollection | CreateConnectionTestRequest | CustomerOwnedSlackAppManifest | ProjectRecipientExperience | UpdateProjectRecipientExperienceRequest | RecipientBrandLogoUpload | NotificationImageAsset | EnvironmentRecipientExperience | UpdateEnvironmentRecipientExperienceRequest | CreateRecipientSessionRequest | CreateRecipientSessionResponse | RecipientSession | CreateProviderHandoffRequest | ProviderHandoff | RecipientHandoffCompletion | SetPreferredBindingRequest | PreferredBinding1 | CreateSubscriberRequest | Subscriber | SubscriberDataExport | CreateRecipientGroupRequest | RecipientGroup | RecipientGroupCollection | RecipientGroupMembership | RecipientGroupMembershipCollection | CreateGroupBroadcastRequest | GroupBroadcast;
9
9
  /**
10
10
  * An opaque identifier. Its shape, ordering, and embedded content are not public promises.
11
11
  */
@@ -13,7 +13,7 @@ export type OpaqueIdentifier = string;
13
13
  /**
14
14
  * The stable WhooshBang authorization role projected from the current Clerk organization membership.
15
15
  */
16
- export type AccountRole = "admin" | "member";
16
+ export type OrganizationRole = "admin" | "member";
17
17
  /**
18
18
  * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
19
19
  */
@@ -30,6 +30,10 @@ export type RecipientLanguage = "en" | "es" | "pt-BR" | "fr" | "de" | "it" | "nl
30
30
  * The single environment selected by the authenticated credential.
31
31
  */
32
32
  export type Environment = "test" | "live";
33
+ /**
34
+ * Project profile collection policy. minimal (the default for new and existing projects) keeps recipient language only; standard permits messenger profile data; private retains delivery routing and the customer-supplied subscriber identifier, with no profile data. Lowering collection erases existing fields the new mode disallows.
35
+ */
36
+ export type PrivacyMode = "minimal" | "standard" | "private";
33
37
  /**
34
38
  * A 1-based page number. Present on a response only when the request addressed the list by page rather than by cursor: a cursor walk cannot know which page it is on. What is bounded is the row a page starts at, not the page number: a request whose first row would be past 50,000 — the deepest row any published list ceiling reaches — is refused as `request_invalid`. Bounding the page number instead would make the last rows of a large list unreachable at a small page size, which is exactly when a person is paging through one.
35
39
  */
@@ -124,7 +128,7 @@ export type ApiCredentialScopeSet = [ApiCredentialScope] | [ApiCredentialScope,
124
128
  ApiCredentialScope
125
129
  ];
126
130
  /**
127
- * One project-credential capability. Environment authority always comes from the credential record, never a scope or request field. `projects:write` configures the credential's own project and environment; it never creates a project, which remains an account authority. The project-wide singletons — brand, default locale, logo and recipient copy — are what a live recipient sees, so writing them requires a live credential; a test credential may read them and may write its own environment's policy.
131
+ * One project-credential capability. Environment authority always comes from the credential record, never a scope or request field. `projects:write` configures the credential's own project and environment; it never creates a project, which remains an organization authority. The project-wide singletons — brand, default locale, logo and recipient copy — are what a live recipient sees, so writing them requires a live credential; a test credential may read them and may write its own environment's policy.
128
132
  */
129
133
  export type ApiCredentialScope = "projects:write" | "projects:read" | "messages:write" | "messages:read" | "subscriptions:write" | "subscriptions:read" | "machine-clients:write" | "machine-clients:read" | "capabilities:read" | "connections:write" | "connections:read";
130
134
  /**
@@ -169,102 +173,106 @@ export type ApiCredentialSecret = string;
169
173
  * @minItems 1
170
174
  * @maxItems 12
171
175
  */
172
- export type AccountCredentialScopeSet = [AccountCredentialScope] | [AccountCredentialScope, AccountCredentialScope] | [AccountCredentialScope, AccountCredentialScope, AccountCredentialScope] | [
173
- AccountCredentialScope,
174
- AccountCredentialScope,
175
- AccountCredentialScope,
176
- AccountCredentialScope
176
+ export type OrganizationCredentialScopeSet = [OrganizationCredentialScope] | [OrganizationCredentialScope, OrganizationCredentialScope] | [
177
+ OrganizationCredentialScope,
178
+ OrganizationCredentialScope,
179
+ OrganizationCredentialScope
180
+ ] | [
181
+ OrganizationCredentialScope,
182
+ OrganizationCredentialScope,
183
+ OrganizationCredentialScope,
184
+ OrganizationCredentialScope
177
185
  ] | [
178
- AccountCredentialScope,
179
- AccountCredentialScope,
180
- AccountCredentialScope,
181
- AccountCredentialScope,
182
- AccountCredentialScope
186
+ OrganizationCredentialScope,
187
+ OrganizationCredentialScope,
188
+ OrganizationCredentialScope,
189
+ OrganizationCredentialScope,
190
+ OrganizationCredentialScope
183
191
  ] | [
184
- AccountCredentialScope,
185
- AccountCredentialScope,
186
- AccountCredentialScope,
187
- AccountCredentialScope,
188
- AccountCredentialScope,
189
- AccountCredentialScope
192
+ OrganizationCredentialScope,
193
+ OrganizationCredentialScope,
194
+ OrganizationCredentialScope,
195
+ OrganizationCredentialScope,
196
+ OrganizationCredentialScope,
197
+ OrganizationCredentialScope
190
198
  ] | [
191
- AccountCredentialScope,
192
- AccountCredentialScope,
193
- AccountCredentialScope,
194
- AccountCredentialScope,
195
- AccountCredentialScope,
196
- AccountCredentialScope,
197
- AccountCredentialScope
199
+ OrganizationCredentialScope,
200
+ OrganizationCredentialScope,
201
+ OrganizationCredentialScope,
202
+ OrganizationCredentialScope,
203
+ OrganizationCredentialScope,
204
+ OrganizationCredentialScope,
205
+ OrganizationCredentialScope
198
206
  ] | [
199
- AccountCredentialScope,
200
- AccountCredentialScope,
201
- AccountCredentialScope,
202
- AccountCredentialScope,
203
- AccountCredentialScope,
204
- AccountCredentialScope,
205
- AccountCredentialScope,
206
- AccountCredentialScope
207
+ OrganizationCredentialScope,
208
+ OrganizationCredentialScope,
209
+ OrganizationCredentialScope,
210
+ OrganizationCredentialScope,
211
+ OrganizationCredentialScope,
212
+ OrganizationCredentialScope,
213
+ OrganizationCredentialScope,
214
+ OrganizationCredentialScope
207
215
  ] | [
208
- AccountCredentialScope,
209
- AccountCredentialScope,
210
- AccountCredentialScope,
211
- AccountCredentialScope,
212
- AccountCredentialScope,
213
- AccountCredentialScope,
214
- AccountCredentialScope,
215
- AccountCredentialScope,
216
- AccountCredentialScope
216
+ OrganizationCredentialScope,
217
+ OrganizationCredentialScope,
218
+ OrganizationCredentialScope,
219
+ OrganizationCredentialScope,
220
+ OrganizationCredentialScope,
221
+ OrganizationCredentialScope,
222
+ OrganizationCredentialScope,
223
+ OrganizationCredentialScope,
224
+ OrganizationCredentialScope
217
225
  ] | [
218
- AccountCredentialScope,
219
- AccountCredentialScope,
220
- AccountCredentialScope,
221
- AccountCredentialScope,
222
- AccountCredentialScope,
223
- AccountCredentialScope,
224
- AccountCredentialScope,
225
- AccountCredentialScope,
226
- AccountCredentialScope,
227
- AccountCredentialScope
226
+ OrganizationCredentialScope,
227
+ OrganizationCredentialScope,
228
+ OrganizationCredentialScope,
229
+ OrganizationCredentialScope,
230
+ OrganizationCredentialScope,
231
+ OrganizationCredentialScope,
232
+ OrganizationCredentialScope,
233
+ OrganizationCredentialScope,
234
+ OrganizationCredentialScope,
235
+ OrganizationCredentialScope
228
236
  ] | [
229
- AccountCredentialScope,
230
- AccountCredentialScope,
231
- AccountCredentialScope,
232
- AccountCredentialScope,
233
- AccountCredentialScope,
234
- AccountCredentialScope,
235
- AccountCredentialScope,
236
- AccountCredentialScope,
237
- AccountCredentialScope,
238
- AccountCredentialScope,
239
- AccountCredentialScope
237
+ OrganizationCredentialScope,
238
+ OrganizationCredentialScope,
239
+ OrganizationCredentialScope,
240
+ OrganizationCredentialScope,
241
+ OrganizationCredentialScope,
242
+ OrganizationCredentialScope,
243
+ OrganizationCredentialScope,
244
+ OrganizationCredentialScope,
245
+ OrganizationCredentialScope,
246
+ OrganizationCredentialScope,
247
+ OrganizationCredentialScope
240
248
  ] | [
241
- AccountCredentialScope,
242
- AccountCredentialScope,
243
- AccountCredentialScope,
244
- AccountCredentialScope,
245
- AccountCredentialScope,
246
- AccountCredentialScope,
247
- AccountCredentialScope,
248
- AccountCredentialScope,
249
- AccountCredentialScope,
250
- AccountCredentialScope,
251
- AccountCredentialScope,
252
- AccountCredentialScope
249
+ OrganizationCredentialScope,
250
+ OrganizationCredentialScope,
251
+ OrganizationCredentialScope,
252
+ OrganizationCredentialScope,
253
+ OrganizationCredentialScope,
254
+ OrganizationCredentialScope,
255
+ OrganizationCredentialScope,
256
+ OrganizationCredentialScope,
257
+ OrganizationCredentialScope,
258
+ OrganizationCredentialScope,
259
+ OrganizationCredentialScope,
260
+ OrganizationCredentialScope
253
261
  ];
254
262
  /**
255
- * One account-credential capability. `account:read` is the account's project directory — listing the account's projects and reading one — and is the only scope here a project credential can never carry; it authorizes nothing below the account. Every other name is the project-credential vocabulary unchanged, and is exercised only on the environment-scoped routes, where the project and environment come from the path and the credential's authority is the intersection of these scopes with the project-credential vocabulary. An account credential is therefore never wider than a project credential would have been for the same project environment.
263
+ * One organization-credential capability. `organization:read` is the organization's project directory — listing the organization's projects and reading one — and is the only scope here a project credential can never carry; it authorizes nothing below the organization. Every other name is the project-credential vocabulary unchanged, and is exercised only on the environment-scoped routes, where the project and environment come from the path and the credential's authority is the intersection of these scopes with the project-credential vocabulary. An organization credential is therefore never wider than a project credential would have been for the same project environment.
256
264
  */
257
- export type AccountCredentialScope = "account:read" | "projects:write" | "projects:read" | "messages:write" | "messages:read" | "subscriptions:write" | "subscriptions:read" | "machine-clients:write" | "machine-clients:read" | "capabilities:read" | "connections:write" | "connections:read";
265
+ export type OrganizationCredentialScope = "organization:read" | "projects:write" | "projects:read" | "messages:write" | "messages:read" | "subscriptions:write" | "subscriptions:read" | "machine-clients:write" | "machine-clients:read" | "capabilities:read" | "connections:write" | "connections:read";
258
266
  /**
259
- * Safe account-scoped API credential metadata. It carries no project or environment, because it names neither: a request does, in its path. It never contains a bearer secret, digest, Clerk identifier, or digest-key reference.
267
+ * Safe organization-scoped API credential metadata. It carries no project or environment, because it names neither: a request does, in its path. It never contains a bearer secret, digest, Clerk identifier, or digest-key reference.
260
268
  */
261
- export type AccountCredential = {
269
+ export type OrganizationCredential = {
262
270
  [k: string]: unknown;
263
271
  } & {
264
- id: AccountCredentialId;
265
- prefix: AccountCredentialPrefix;
272
+ id: OrganizationCredentialId;
273
+ prefix: OrganizationCredentialPrefix;
266
274
  label: string;
267
- scopes: AccountCredentialScopeSet;
275
+ scopes: OrganizationCredentialScopeSet;
268
276
  /**
269
277
  * An opaque identifier. Its shape, ordering, and embedded content are not public promises.
270
278
  */
@@ -279,17 +287,17 @@ export type AccountCredential = {
279
287
  revoked_at?: Timestamp;
280
288
  };
281
289
  /**
282
- * acred_ followed by the canonical unpadded base64url encoding of exactly 16 random bytes.
290
+ * ocred_ followed by the canonical unpadded base64url encoding of exactly 16 random bytes.
283
291
  */
284
- export type AccountCredentialId = string;
292
+ export type OrganizationCredentialId = string;
285
293
  /**
286
- * A safe display prefix containing the account-credential format marker and first eight base64url identity characters, never secret bytes.
294
+ * A safe display prefix containing the organization-credential format marker and first eight base64url identity characters, never secret bytes.
287
295
  */
288
- export type AccountCredentialPrefix = string;
296
+ export type OrganizationCredentialPrefix = string;
289
297
  /**
290
298
  * The exact one-time runtime bearer syntax. The final segment is canonical unpadded base64url for exactly 32 random secret bytes.
291
299
  */
292
- export type AccountCredentialSecret = string;
300
+ export type OrganizationCredentialSecret = string;
293
301
  export type CustomerEventType = "subscription.activated" | "subscription.revoked" | "message.provider_accepted" | "message.delivered" | "message.failed" | "message.expired" | "interaction.received" | "interaction.expired" | "agent_binding.degraded";
294
302
  export type CustomerEndpointStatus = "unverified" | "active" | "paused" | "disabled";
295
303
  /**
@@ -347,7 +355,7 @@ export type SubscriptionLink = {
347
355
  */
348
356
  cancellation_effective?: boolean;
349
357
  };
350
- export type ProblemCode = "authentication_required" | "credential_invalid" | "scope_forbidden" | "environment_mismatch" | "idempotency_key_required" | "idempotency_conflict" | "project_slug_conflict" | "request_invalid" | "replay_unavailable" | "subscriber_unbound" | "recipient_configuration_invalid" | "recipient_origin_forbidden" | "return_destination_not_found" | "recipient_capability_invalid" | "recipient_handoff_invalid" | "preferred_binding_conflict" | "preferred_binding_unavailable" | "subscriber_conflict" | "recipient_group_conflict" | "recipient_group_archived" | "resource_not_found" | "resource_expired" | "cancellation_too_late" | "credential_account_mismatch" | "endpoint_rotation_conflict" | "rate_limited" | "provider_retryable" | "provider_terminal" | "provider_outcome_unknown";
358
+ export type ProblemCode = "authentication_required" | "credential_invalid" | "scope_forbidden" | "environment_mismatch" | "idempotency_key_required" | "idempotency_conflict" | "privacy_operation_in_progress" | "project_slug_conflict" | "request_invalid" | "replay_unavailable" | "subscriber_unbound" | "recipient_configuration_invalid" | "recipient_origin_forbidden" | "return_destination_not_found" | "recipient_capability_invalid" | "recipient_handoff_invalid" | "preferred_binding_conflict" | "preferred_binding_unavailable" | "subscriber_conflict" | "recipient_group_conflict" | "recipient_group_archived" | "resource_not_found" | "resource_expired" | "cancellation_too_late" | "credential_organization_mismatch" | "endpoint_rotation_conflict" | "rate_limited" | "provider_retryable" | "provider_terminal" | "provider_outcome_unknown";
351
359
  /**
352
360
  * Creates one logical message for one subscriber and one resolved channel binding.
353
361
  */
@@ -357,7 +365,7 @@ export type CreateMessageRequest = {
357
365
  to: MessageTarget;
358
366
  notifier_id?: OpaqueIdentifier;
359
367
  /**
360
- * Optional routing override. Omit for notifier-default connection delivery, except reserved simulator destinations retained for compatibility.
368
+ * Optional routing override. Simulator delivery and the reserved test: subscriber prefix are test-environment-only; live requests are refused with 400 request_invalid. Omit for notifier-default connection delivery or the reserved test-environment simulator default.
361
369
  */
362
370
  delivery_target?: "connection" | "simulator";
363
371
  /**
@@ -816,6 +824,13 @@ export type Problem1 = {
816
824
  code?: "idempotency_conflict";
817
825
  retryable?: false;
818
826
  [k: string]: unknown;
827
+ } | {
828
+ type?: "https://whooshbang.flowxo.com/problems/privacy_operation_in_progress";
829
+ title?: "Privacy operation in progress";
830
+ status?: 409;
831
+ code?: "privacy_operation_in_progress";
832
+ retryable?: true;
833
+ [k: string]: unknown;
819
834
  } | {
820
835
  type?: "https://whooshbang.flowxo.com/problems/request_invalid";
821
836
  title?: "Request invalid";
@@ -922,10 +937,10 @@ export type Problem1 = {
922
937
  retryable?: false;
923
938
  [k: string]: unknown;
924
939
  } | {
925
- type?: "https://whooshbang.flowxo.com/problems/credential_account_mismatch";
926
- title?: "Credential account mismatch";
940
+ type?: "https://whooshbang.flowxo.com/problems/credential_organization_mismatch";
941
+ title?: "Credential organization mismatch";
927
942
  status?: 403;
928
- code?: "credential_account_mismatch";
943
+ code?: "credential_organization_mismatch";
929
944
  retryable?: false;
930
945
  [k: string]: unknown;
931
946
  } | {
@@ -1436,7 +1451,7 @@ export type ChannelConnection = TelegramChannelConnection | HostedChannelConnect
1436
1451
  */
1437
1452
  export type ChannelConnectionStatus = "pending" | "active" | "degraded" | "disabled" | "archived";
1438
1453
  /**
1439
- * How far a guided setup has reached, which is the only thing a caller can act on while a connection is still `pending`. `awaiting_handoff` waits for the administrator to open the link on the Telegram account that will own the bot; `awaiting_creation` means that account is bound and the bot does not exist yet; `provisioning` means the bot exists and WhooshBang is installing delivery on it. `failed` and `expired` end the attempt without ending the connection — another attempt can be started on the same `pending` connection — and neither withdraws a bot Telegram has already created, because no provider API can delete one.
1454
+ * How far a guided setup has reached, which is the only thing a caller can act on while a connection is still `pending`. `awaiting_handoff` waits for the administrator to open the link on the Telegram account that will own the bot; `awaiting_creation` means that Telegram account is bound and the bot does not exist yet; `provisioning` means the bot exists and WhooshBang is installing delivery on it. `failed` and `expired` end the attempt without ending the connection — another attempt can be started on the same `pending` connection — and neither withdraws a bot Telegram has already created, because no provider API can delete one.
1440
1455
  */
1441
1456
  export type ChannelConnectionSetupStatus = "awaiting_handoff" | "awaiting_creation" | "provisioning" | "failed" | "expired";
1442
1457
  /**
@@ -1476,7 +1491,7 @@ export type CustomerOwnedSlackSetupStatus = "awaiting_app_creation" | "awaiting_
1476
1491
  */
1477
1492
  export type CustomerOwnedSlackAppAuthority = "client_identity" | "client_secret" | "signing_secret";
1478
1493
  /**
1479
- * Selects the provider identity this environment will send through, discriminated on `mode`, and naming the provider it is for. The two customer-owned modes differ only in where the bot comes from: `customer_byok` connects one the customer already has, and `customer_managed` has Telegram create a new one on the administrator's own account. Neither supersedes the other, because a bot that already exists can never be adopted into managed mode — the manager that may act for a bot is fixed when the bot is created.
1494
+ * Selects the provider identity this environment will send through, discriminated on `mode`, and naming the provider it is for. The two customer-owned modes differ only in where the bot comes from: `customer_byok` connects one the customer already has, and `customer_managed` has Telegram create a new one on the administrator's own Telegram account. Neither supersedes the other, because a bot that already exists can never be adopted into managed mode — the manager that may act for a bot is fixed when the bot is created.
1480
1495
  */
1481
1496
  export type CreateChannelConnectionRequest = {
1482
1497
  mode: "whooshbang_shared";
@@ -1748,20 +1763,42 @@ export type RecipientGroupMembership = {
1748
1763
  /**
1749
1764
  * The current Clerk organization projected as a WhooshBang tenant. Clerk organization and user identifiers are not public fields.
1750
1765
  */
1751
- export interface AccountProjection {
1766
+ export interface OrganizationProjection {
1752
1767
  id: OpaqueIdentifier;
1753
1768
  name: string;
1754
1769
  status: "active" | "suspended";
1755
- membership: AccountMembershipSummary;
1770
+ membership: OrganizationMembershipSummary;
1756
1771
  created_at: Timestamp;
1757
1772
  updated_at: Timestamp;
1758
1773
  diagnostic_id: DiagnosticId;
1759
1774
  }
1760
- export interface AccountMembershipSummary {
1761
- role: AccountRole;
1775
+ export interface OrganizationMembershipSummary {
1776
+ role: OrganizationRole;
1777
+ }
1778
+ /**
1779
+ * Exact, explicit confirmation that the current organization administrator intends to close the whole organization.
1780
+ */
1781
+ export interface CloseOrganizationRequest {
1782
+ confirmation: "close-organization";
1783
+ }
1784
+ /**
1785
+ * Terminal organization-closure result. Repeating closure returns the same closed_at and any provider-owned resources that still require manual retirement.
1786
+ */
1787
+ export interface OrganizationClosureResult {
1788
+ status: "closed";
1789
+ closed_at: Timestamp;
1790
+ provider_actions_required: OrganizationClosureProviderAction[];
1791
+ }
1792
+ /**
1793
+ * One provider-owned resource the customer must retire outside WhooshBang after organization closure. It contains safe identifiers only, never provider credentials.
1794
+ */
1795
+ export interface OrganizationClosureProviderAction {
1796
+ provider: "telegram" | "slack";
1797
+ action: "revoke_bot_token" | "delete_provider_application";
1798
+ connection_id: OpaqueIdentifier;
1762
1799
  }
1763
1800
  /**
1764
- * Creates one project inside the account selected by the authenticated human session.
1801
+ * Creates one project inside the organization selected by the authenticated human session.
1765
1802
  */
1766
1803
  export interface CreateProjectRequest {
1767
1804
  name: string;
@@ -1770,13 +1807,17 @@ export interface CreateProjectRequest {
1770
1807
  * The application fallback locale for recipient-owned surfaces when no session, subscriber, or supported provider locale is available.
1771
1808
  */
1772
1809
  default_locale?: "en" | "es" | "pt-BR" | "fr" | "de" | "it" | "nl" | "pl" | "ru" | "uk" | "tr" | "id" | "ar" | "fa" | "hi" | "zh-Hans";
1810
+ /**
1811
+ * Project profile collection policy. minimal (the default for new and existing projects) keeps recipient language only; standard permits messenger profile data; private retains delivery routing and the customer-supplied subscriber identifier, with no profile data. Lowering collection erases existing fields the new mode disallows.
1812
+ */
1813
+ privacy_mode?: "minimal" | "standard" | "private";
1773
1814
  }
1774
1815
  /**
1775
- * An account-scoped application project with its complete test/live bootstrap.
1816
+ * An organization-scoped application project with its complete test/live bootstrap.
1776
1817
  */
1777
1818
  export interface Project {
1778
1819
  id: OpaqueIdentifier;
1779
- account_id: OpaqueIdentifier;
1820
+ organization_id: OpaqueIdentifier;
1780
1821
  name: string;
1781
1822
  slug: string;
1782
1823
  status: "active" | "disabled";
@@ -1789,6 +1830,7 @@ export interface Project {
1789
1830
  created_at: Timestamp;
1790
1831
  updated_at: Timestamp;
1791
1832
  diagnostic_id: DiagnosticId;
1833
+ privacy_mode: PrivacyMode;
1792
1834
  }
1793
1835
  /**
1794
1836
  * A test or live project environment with its transactionally created default notifier.
@@ -1811,7 +1853,13 @@ export interface DefaultNotifierSummary {
1811
1853
  is_default: true;
1812
1854
  }
1813
1855
  /**
1814
- * A stable page of projects inside the authenticated account.
1856
+ * Sets the project privacy policy. Moving from standard to minimal erases stored identifying profile data; moving to private also erases recipient language. Increasing collection does not restore erased data.
1857
+ */
1858
+ export interface UpdateProjectRequest {
1859
+ privacy_mode: PrivacyMode;
1860
+ }
1861
+ /**
1862
+ * A stable page of projects inside the authenticated organization.
1815
1863
  */
1816
1864
  export interface ProjectCollection {
1817
1865
  /**
@@ -1975,26 +2023,26 @@ export interface ApiCredentialRotation {
1975
2023
  replaced_credential: ApiCredential;
1976
2024
  }
1977
2025
  /**
1978
- * Creates one credential against the whole account rather than one project environment.
2026
+ * Creates one credential against the whole organization rather than one project environment.
1979
2027
  */
1980
- export interface CreateAccountCredentialRequest {
2028
+ export interface CreateOrganizationCredentialRequest {
1981
2029
  label: string;
1982
- scopes: AccountCredentialScopeSet;
2030
+ scopes: OrganizationCredentialScopeSet;
1983
2031
  }
1984
2032
  /**
1985
2033
  * Creates a replacement with the same label and scopes and schedules terminal revocation of the replaced credential after the declared overlap.
1986
2034
  */
1987
- export interface RotateAccountCredentialRequest {
2035
+ export interface RotateOrganizationCredentialRequest {
1988
2036
  overlap_seconds: number;
1989
2037
  }
1990
2038
  /**
1991
- * A stable page of safe account-credential metadata for one account.
2039
+ * A stable page of safe organization-credential metadata for one organization.
1992
2040
  */
1993
- export interface AccountCredentialCollection {
2041
+ export interface OrganizationCredentialCollection {
1994
2042
  /**
1995
2043
  * @maxItems 100
1996
2044
  */
1997
- items: AccountCredential[];
2045
+ items: OrganizationCredential[];
1998
2046
  next_cursor?: string;
1999
2047
  page?: ListPageNumber;
2000
2048
  page_size?: ListPageSize;
@@ -2003,16 +2051,16 @@ export interface AccountCredentialCollection {
2003
2051
  /**
2004
2052
  * The creation-only response. The secret is emitted in this response exactly once and is never available from list, rotate-target, revoke, or later read responses.
2005
2053
  */
2006
- export interface AccountCredentialSecretReveal {
2007
- credential: AccountCredential;
2008
- secret: AccountCredentialSecret;
2054
+ export interface OrganizationCredentialSecretReveal {
2055
+ credential: OrganizationCredential;
2056
+ secret: OrganizationCredentialSecret;
2009
2057
  }
2010
2058
  /**
2011
2059
  * A creation-only replacement secret plus safe metadata for the credential it replaces.
2012
2060
  */
2013
- export interface AccountCredentialRotation {
2014
- credential: AccountCredentialSecretReveal;
2015
- replaced_credential: AccountCredential;
2061
+ export interface OrganizationCredentialRotation {
2062
+ credential: OrganizationCredentialSecretReveal;
2063
+ replaced_credential: OrganizationCredential;
2016
2064
  }
2017
2065
  /**
2018
2066
  * Creates one project/environment endpoint. The service validates the final normalized destination and never returns it from health or diagnostic reads.
@@ -3157,7 +3205,7 @@ export interface TelegramChannelConnection {
3157
3205
  export interface ChannelConnectionSetup {
3158
3206
  status: ChannelConnectionSetupStatus;
3159
3207
  /**
3160
- * The link the administrator opens to put their own Telegram account behind this setup; for Telegram it is `https://t.me/<manager>?start=<payload>`. It is a capability for exactly one setup session and nothing else: it names no account, no project, and no environment, it stops working at `expires_at`, and only the first Telegram account to open it is bound. It is not credential material, so displaying it costs nothing beyond letting whoever sees it first become the owner of the bot this setup creates. After `expired` or `failed` it binds nothing, and restarting the setup issues a new one rather than reviving this.
3208
+ * The link the administrator opens to put their own Telegram account behind this setup; for Telegram it is `https://t.me/<manager>?start=<payload>`. It is a capability for exactly one setup session and nothing else: it names no organization, no project, and no environment, it stops working at `expires_at`, and only the first Telegram account to open it is bound. It is not credential material, so displaying it costs nothing beyond letting whoever sees it first become the owner of the bot this setup creates. After `expired` or `failed` it binds nothing, and restarting the setup issues a new one rather than reviving this.
3161
3209
  */
3162
3210
  handoff_url: string;
3163
3211
  /**
@@ -3169,7 +3217,7 @@ export interface ChannelConnectionSetup {
3169
3217
  */
3170
3218
  suggested_bot_username: string;
3171
3219
  /**
3172
- * Why this attempt ended, in terms the administrator can act on. Absent when there is nothing both safe and useful to say: an attempt refused because that Telegram account already holds a live setup says only that, because naming the account, project, or environment holding the other one would disclose another customer.
3220
+ * Why this attempt ended, in terms the administrator can act on. Absent when there is nothing both safe and useful to say: an attempt refused because that Telegram account already holds a live setup says only that, because naming the organization, project, or environment holding the other one would disclose another customer.
3173
3221
  */
3174
3222
  failure_reason?: string;
3175
3223
  }
@@ -3291,7 +3339,7 @@ export interface CustomerOwnedSlackChannelConnection {
3291
3339
  export interface CustomerOwnedSlackConnectionSetup {
3292
3340
  status: CustomerOwnedSlackSetupStatus;
3293
3341
  /**
3294
- * Slack's own app-creation flow, opened with this app's manifest already filled in, so the owner reviews and presses Create rather than writing or pasting YAML. The URL carries configuration only: it names no account, project, or environment and contains no credential. The opaque handle it does carry selects candidate setup state and authorizes nothing.
3342
+ * Slack's own app-creation flow, opened with this app's manifest already filled in, so the owner reviews and presses Create rather than writing or pasting YAML. The URL carries configuration only: it names no organization, project, or environment and contains no credential. The opaque handle it does carry selects candidate setup state and authorizes nothing.
3295
3343
  */
3296
3344
  creation_url: string;
3297
3345
  /**
@@ -3476,7 +3524,7 @@ export interface CreateConnectionTestRequest {
3476
3524
  /**
3477
3525
  * The exact configuration a customer-owned Slack app is created from, as data rather than as a URL-encoded blob.
3478
3526
  *
3479
- * It exists so the owner can read what they are about to approve, and so a reviewer can check it, without opening Slack. It carries configuration only: no account, project, or environment, no credential, and no provider-native identifier. The opaque handle inside the request URLs selects candidate setup state and authorizes nothing — a request still has to carry Slack's signature over the untouched body before anything inside it is believed.
3527
+ * It exists so the owner can read what they are about to approve, and so a reviewer can check it, without opening Slack. It carries configuration only: no organization, project, or environment, no credential, and no provider-native identifier. The opaque handle inside the request URLs selects candidate setup state and authorizes nothing — a request still has to carry Slack's signature over the untouched body before anything inside it is believed.
3480
3528
  */
3481
3529
  export interface CustomerOwnedSlackAppManifest {
3482
3530
  /**
@@ -4860,7 +4908,7 @@ export interface CreateRecipientSessionResponse {
4860
4908
  hosted_url: "https://connect.whooshbang.com/recipient-settings";
4861
4909
  }
4862
4910
  /**
4863
- * A browser-safe projection for the exact subscriber selected when the session was created. Account, project, environment, subscriber, origin, resolved return URL, provider identity, credentials, and group state are structurally absent.
4911
+ * A browser-safe projection for the exact subscriber selected when the session was created. Organization, project, environment, subscriber, origin, resolved return URL, provider identity, credentials, and group state are structurally absent.
4864
4912
  */
4865
4913
  export interface RecipientSession {
4866
4914
  id: OpaqueIdentifier;
@@ -5035,6 +5083,48 @@ export interface Subscriber {
5035
5083
  updated_at: Timestamp;
5036
5084
  diagnostic_id: DiagnosticId;
5037
5085
  }
5086
+ /**
5087
+ * A complete customer-controller access artifact for one subscriber across every environment in one project. provided_by_subscriber is the Article 20 portable subset; all three record groups together are the Article 15 access copy. WhooshBang-controller records are named but never mixed into the customer export.
5088
+ */
5089
+ export interface SubscriberDataExport {
5090
+ format: "whooshbang.subscriber-data-export.v1";
5091
+ generated_at: Timestamp;
5092
+ controller_scope: "customer";
5093
+ project_id: OpaqueIdentifier;
5094
+ /**
5095
+ * @minItems 1
5096
+ */
5097
+ environment_ids: [OpaqueIdentifier, ...OpaqueIdentifier[]];
5098
+ subscriber_id: OpaqueIdentifier;
5099
+ provided_by_subscriber: SubscriberDataExportRecord[];
5100
+ provided_by_customer: SubscriberDataExportRecord[];
5101
+ derived_by_service: SubscriberDataExportRecord[];
5102
+ /**
5103
+ * @minItems 2
5104
+ * @maxItems 2
5105
+ */
5106
+ excluded_controller_data: [
5107
+ SubscriberDataExportExcludedControllerData,
5108
+ SubscriberDataExportExcludedControllerData
5109
+ ];
5110
+ }
5111
+ /**
5112
+ * One semantic record held about the subscriber. The source names the durable store or recovered semantic value; data contains plaintext business fields and excludes custody metadata and secrets.
5113
+ */
5114
+ export interface SubscriberDataExportRecord {
5115
+ source: string;
5116
+ data: {
5117
+ [k: string]: unknown;
5118
+ };
5119
+ }
5120
+ /**
5121
+ * A category deliberately outside the customer-controller artifact because WhooshBang is controller for it.
5122
+ */
5123
+ export interface SubscriberDataExportExcludedControllerData {
5124
+ category: "consent_lifecycle_audit" | "service_logs";
5125
+ controller: "whooshbang";
5126
+ access: "separate_recipient_request_required";
5127
+ }
5038
5128
  /**
5039
5129
  * Creates one static, developer-managed recipient group.
5040
5130
  */
package/dist/index.d.ts CHANGED
@@ -15,12 +15,12 @@ export type { MachineCredentialCrypto, MachineCredentialMaterial, MachineCredent
15
15
  export type { RejectedWebhookSignature, VerifiedWebhookSignature, VerifyWebhookSignatureOptions, WebhookCrypto, WebhookHeaderEntry, WebhookHeaderRecord, WebhookHeaders, WebhookSignatureVerification, WebhookVerificationFailureReason, } from "./webhook-signature.js";
16
16
  export type { ConsumeVerifiedWebhookOptions, DuplicateWebhookConsumption, ProcessedWebhookConsumption, RejectedWebhookConsumption, WebhookConsumptionResult, WebhookConsumerRejectionReason, WebhookDeduplicationInput, WebhookDeduplicationOutcome, WebhookDeduplicationStore, } from "./webhook-consumer.js";
17
17
  export type { AcceptedWebhookDelivery, ClassifyWebhookDeliveryOptions, HttpDeliveryOutcome, NetworkFailureOutcome, RetryWebhookDelivery, TerminalWebhookDelivery, WebhookDeliveryClassification, WebhookDeliveryOutcome, WebhookDeliveryRetryReason, WebhookDeliveryTerminalReason, } from "./webhook-delivery.js";
18
- export { contractValidationErrors, validateAccountCredential, validateAccountCredentialCollection, validateAccountCredentialRotation, validateAccountCredentialSecretReveal, validateAccountProjection, validateApiCredential, validateApiCredentialCollection, validateApiCredentialRotation, validateApiCredentialSecretReveal, validateBindingSummary, validateCreateAccountCredentialRequest, validateCreateApiCredentialRequest, validateChannelConnection, validateChannelConnectionCollection, validateConnectionProviderCollection, validateCreateChannelConnectionRequest, validateUpdateChannelConnectionRequest, validateRotateChannelConnectionCredentialRequest, validateConnectionTest, validateConnectionTestCollection, validateCreateConnectionTestRequest, validateCustomerOwnedSlackAppManifest, validateAttachNotifierConnectionRequest, validateNotifierConnectionCollection, validateProjectRecipientExperience, validateRecipientBrandLogoUpload, validateNotificationImageAsset, validateUpdateProjectRecipientExperienceRequest, validateEnvironmentRecipientExperience, validateUpdateEnvironmentRecipientExperienceRequest, validateCreateRecipientSessionRequest, validateCreateRecipientSessionResponse, validateRecipientSession, validateCreateProviderHandoffRequest, validateProviderHandoff, validateRecipientHandoffCompletion, validateSetPreferredBindingRequest, validatePreferredBinding, validateCreateSubscriberRequest, validateSubscriber, validateCreateRecipientGroupRequest, validateUpdateRecipientGroupRequest, validateRecipientGroup, validateRecipientGroupCollection, validateRecipientGroupMembership, validateRecipientGroupMembershipCollection, validateCreateGroupBroadcastRequest, validateGroupBroadcast, validateCreateCustomerEndpointRequest, validateCreateProjectRequest, validateCreateMachineClientRequest, validateCreateMessageRequest, validateCreateSubscriptionLinkRequest, validateDeliveryAttemptSummary, validateCustomerEndpoint, validateCustomerEndpointAttemptCollection, validateCustomerEndpointCollection, validateCustomerEndpointMutationResult, validateCustomerEndpointVerificationChallenge, validateIdempotencyKey, validateAgentBindingDegradedEvent, validateInteractionEvent, validateInteractionExpiredEvent, validateInteractionReceivedEvent, validateInteractionRequest, validateInteractionSummary, validateMachineClient, validateMachineCredential, validateMachineCredentialBearer, validateMachineEventAckRequest, validateMachineEventAckResponse, validateMachineEventPollResponse, validateMessage, validateMessageDeliveredEvent, validateMessageExpiredEvent, validateMessageFailedEvent, validateMessageProviderAcceptedEvent, validateWhooshBangEvent, validateProblem, validateProject, validateProjectCollection, validateRecipientCopyOverride, validateRecipientCopyOverrideCollection, validateProviderCallbackToken, validateProviderCapabilities, validateProviderCapabilitiesCollection, validateRegisterMachineCredentialRequest, validateRotateAccountCredentialRequest, validateRotateApiCredentialRequest, validateRotateCustomerEndpointRequest, validateSubscriptionActivatedEvent, validateSubscriptionLink, validateSubscriptionRevokedEvent, validateUpdateRecipientCopyOverrideRequest, validateWebhookDeliveryCaseSet, validateWebhookSigningVectorSet, } from "./generated/validators.js";
18
+ export { contractValidationErrors, validateOrganizationCredential, validateOrganizationCredentialCollection, validateOrganizationCredentialRotation, validateOrganizationCredentialSecretReveal, validateOrganizationProjection, validateApiCredential, validateApiCredentialCollection, validateApiCredentialRotation, validateApiCredentialSecretReveal, validateBindingSummary, validateCreateOrganizationCredentialRequest, validateCreateApiCredentialRequest, validateChannelConnection, validateChannelConnectionCollection, validateConnectionProviderCollection, validateCreateChannelConnectionRequest, validateUpdateChannelConnectionRequest, validateRotateChannelConnectionCredentialRequest, validateConnectionTest, validateConnectionTestCollection, validateCreateConnectionTestRequest, validateCustomerOwnedSlackAppManifest, validateAttachNotifierConnectionRequest, validateNotifierConnectionCollection, validateProjectRecipientExperience, validateRecipientBrandLogoUpload, validateNotificationImageAsset, validateUpdateProjectRecipientExperienceRequest, validateEnvironmentRecipientExperience, validateUpdateEnvironmentRecipientExperienceRequest, validateCreateRecipientSessionRequest, validateCreateRecipientSessionResponse, validateRecipientSession, validateCreateProviderHandoffRequest, validateProviderHandoff, validateRecipientHandoffCompletion, validateSetPreferredBindingRequest, validatePreferredBinding, validateCreateSubscriberRequest, validateSubscriber, validateSubscriberDataExport, validateCloseOrganizationRequest, validateOrganizationClosureResult, validateCreateRecipientGroupRequest, validateUpdateRecipientGroupRequest, validateRecipientGroup, validateRecipientGroupCollection, validateRecipientGroupMembership, validateRecipientGroupMembershipCollection, validateCreateGroupBroadcastRequest, validateGroupBroadcast, validateCreateCustomerEndpointRequest, validateCreateProjectRequest, validateUpdateProjectRequest, validateCreateMachineClientRequest, validateCreateMessageRequest, validateCreateSubscriptionLinkRequest, validateDeliveryAttemptSummary, validateCustomerEndpoint, validateCustomerEndpointAttemptCollection, validateCustomerEndpointCollection, validateCustomerEndpointMutationResult, validateCustomerEndpointVerificationChallenge, validateIdempotencyKey, validateAgentBindingDegradedEvent, validateInteractionEvent, validateInteractionExpiredEvent, validateInteractionReceivedEvent, validateInteractionRequest, validateInteractionSummary, validateMachineClient, validateMachineCredential, validateMachineCredentialBearer, validateMachineEventAckRequest, validateMachineEventAckResponse, validateMachineEventPollResponse, validateMessage, validateMessageDeliveredEvent, validateMessageExpiredEvent, validateMessageFailedEvent, validateMessageProviderAcceptedEvent, validateWhooshBangEvent, validateProblem, validateProject, validateProjectCollection, validateRecipientCopyOverride, validateRecipientCopyOverrideCollection, validateProviderCallbackToken, validateProviderCapabilities, validateProviderCapabilitiesCollection, validateRegisterMachineCredentialRequest, validateRotateOrganizationCredentialRequest, validateRotateApiCredentialRequest, validateRotateCustomerEndpointRequest, validateSubscriptionActivatedEvent, validateSubscriptionLink, validateSubscriptionRevokedEvent, validateUpdateRecipientCopyOverrideRequest, validateWebhookDeliveryCaseSet, validateWebhookSigningVectorSet, } from "./generated/validators.js";
19
19
  export type { Artifact, ContractManifest, FixtureSet, GeneratedArtifact, } from "./generated/contract-manifest.js";
20
20
  export type { AgentBindingDegradedData, AgentBindingDegradedEvent, ConfirmInteractionResponse as CustomerEventConfirmInteractionResponse, InteractionExpiredData, InteractionExpiredEvent, InteractionReceivedData, InteractionReceivedEvent, InteractionResponse as CustomerEventInteractionResponse, MessageDeliveredData, MessageDeliveredEvent, MessageExpiredData, MessageExpiredEvent, MessageFailedData, MessageFailedEvent, MessageProviderAcceptedData, MessageProviderAcceptedEvent, WhooshBangEventV1ContractDocument, SelectInteractionResponse as CustomerEventSelectInteractionResponse, SubscriptionActivatedData, SubscriptionActivatedEvent, SubscriptionRevokedData, SubscriptionRevokedEvent, InputInteractionResponse as CustomerEventInputInteractionResponse, } from "./generated/whooshbang-event-v1.js";
21
21
  export type { WebhookDeliveryCaseSetV1, DeliveryCase as WebhookDeliveryFixtureCase, } from "./generated/webhook-delivery-case-v1.js";
22
22
  export type { WebhookSigningVectorSetV1, VerificationCase as WebhookSigningVerificationCase, } from "./generated/webhook-signing-vector-v1.js";
23
- export type { AccountCredential, AccountCredentialCollection, AccountCredentialId, AccountCredentialPrefix, AccountCredentialRotation, AccountCredentialScope, AccountCredentialScopeSet, AccountCredentialSecret, AccountCredentialSecretReveal, AccountMembershipSummary, AccountProjection, AccountRole, ApiCredential, ApiCredentialCollection, ApiCredentialId, ApiCredentialPrefix, ApiCredentialRotation, ApiCredentialScope, ApiCredentialScopeSet, ApiCredentialSecret, ApiCredentialSecretReveal, BindingSummary, Channel, ClassifiedError, CreateAccountCredentialRequest, CreateApiCredentialRequest, ChannelConnection, ChannelConnectionCollection, ChannelConnectionSetup, ChannelConnectionSetupStatus, ChannelConnectionStatus, ConnectionLifecycleOperation, ConnectionProvider, ConnectionProviderCollection, CreateChannelConnectionRequest, AttachNotifierConnectionRequest, NotifierConnectionCollection, NotifierConnectionRoute, ProjectRecipientExperience, RecipientBrandAssetId, RecipientBrandLogoAsset, RecipientBrandLogoUpload, NotificationImage, NotificationImageAsset, NotificationImageAssetId, UpdateProjectRecipientExperienceRequest, EnvironmentRecipientExperience, UpdateEnvironmentRecipientExperienceRequest, RecipientBrand, ReturnDestination, CreateRecipientSessionRequest, CreateRecipientSessionResponse, RecipientSession, RecipientPanelCopyOverrides, RecipientSessionCapability, RecipientSessionCapabilityPrefix, RecipientSessionOperation, RecipientChannelSummary, CreateProviderHandoffRequest, ProviderHandoff, ProviderHandoffCompletionMode, RecipientHandoffCompletion, SetPreferredBindingRequest, PreferredBinding, CreateSubscriberRequest, Subscriber, DeveloperKey, CreateRecipientGroupRequest, UpdateRecipientGroupRequest, RecipientGroup, RecipientGroupCollection, RecipientGroupMembership, RecipientGroupMembershipCollection, CreateGroupBroadcastRequest, BroadcastAggregate, GroupBroadcast, BroadcastMessageProvenance, ProviderHealthState, ProviderFailure, ProviderInstallationStatus, ProviderInstallationSummary, RotateChannelConnectionCredentialRequest, ConnectionTest, ConnectionTestCollection, ConnectionTestEvidence, ConnectionTestFailureCode, ConnectionTestKind, ConnectionTestStatus, CreateConnectionTestRequest, CustomerOwnedSlackAppManifest, SharedProviderIdentity, SuggestedBotUsername, UpdateChannelConnectionRequest, CreateCustomerEndpointRequest, CreateMessageRequest, CreateProjectRequest, DefaultNotifierSummary, CreateSubscriptionLinkRequest, DeliveryAttemptSummary, CustomerEndpoint, CustomerEndpointAttemptCollection, CustomerEndpointAttemptDiagnostic, CustomerEndpointCollection, CustomerEndpointFailure, CustomerEndpointMutationResult, CustomerEndpointSecret, CustomerEndpointStatus, CustomerEndpointVerificationChallenge, CustomerEventType, Environment, IdempotencyKey, Message, MessageState, WhooshBangV1ContractDocument, Problem, ProblemCode, Project, ProjectCollection, ProjectEnvironment, ProviderCapabilitiesCollection, RecipientCopyKey, RecipientCopyOverride, RecipientCopyOverrideCollection, RecipientCopyOverrideValue, RecipientLanguage, TimeZone, RotateAccountCredentialRequest, RotateApiCredentialRequest, RotateCustomerEndpointRequest, SubscriptionLink, UpdateRecipientCopyOverrideRequest, } from "./generated/whooshbang-v1.js";
23
+ export type { OrganizationCredential, OrganizationCredentialCollection, OrganizationCredentialId, OrganizationCredentialPrefix, OrganizationCredentialRotation, OrganizationCredentialScope, OrganizationCredentialScopeSet, OrganizationCredentialSecret, OrganizationCredentialSecretReveal, OrganizationMembershipSummary, OrganizationProjection, OrganizationRole, ApiCredential, ApiCredentialCollection, ApiCredentialId, ApiCredentialPrefix, ApiCredentialRotation, ApiCredentialScope, ApiCredentialScopeSet, ApiCredentialSecret, ApiCredentialSecretReveal, BindingSummary, Channel, ClassifiedError, CreateOrganizationCredentialRequest, CreateApiCredentialRequest, ChannelConnection, ChannelConnectionCollection, ChannelConnectionSetup, ChannelConnectionSetupStatus, ChannelConnectionStatus, ConnectionLifecycleOperation, ConnectionProvider, ConnectionProviderCollection, CreateChannelConnectionRequest, AttachNotifierConnectionRequest, NotifierConnectionCollection, NotifierConnectionRoute, ProjectRecipientExperience, RecipientBrandAssetId, RecipientBrandLogoAsset, RecipientBrandLogoUpload, NotificationImage, NotificationImageAsset, NotificationImageAssetId, UpdateProjectRecipientExperienceRequest, EnvironmentRecipientExperience, UpdateEnvironmentRecipientExperienceRequest, RecipientBrand, ReturnDestination, CreateRecipientSessionRequest, CreateRecipientSessionResponse, RecipientSession, RecipientPanelCopyOverrides, RecipientSessionCapability, RecipientSessionCapabilityPrefix, RecipientSessionOperation, RecipientChannelSummary, CreateProviderHandoffRequest, ProviderHandoff, ProviderHandoffCompletionMode, RecipientHandoffCompletion, SetPreferredBindingRequest, PreferredBinding, CreateSubscriberRequest, Subscriber, SubscriberDataExport, SubscriberDataExportRecord, SubscriberDataExportExcludedControllerData, CloseOrganizationRequest, OrganizationClosureProviderAction, OrganizationClosureResult, DeveloperKey, CreateRecipientGroupRequest, UpdateRecipientGroupRequest, RecipientGroup, RecipientGroupCollection, RecipientGroupMembership, RecipientGroupMembershipCollection, CreateGroupBroadcastRequest, BroadcastAggregate, GroupBroadcast, BroadcastMessageProvenance, ProviderHealthState, ProviderFailure, ProviderInstallationStatus, ProviderInstallationSummary, RotateChannelConnectionCredentialRequest, ConnectionTest, ConnectionTestCollection, ConnectionTestEvidence, ConnectionTestFailureCode, ConnectionTestKind, ConnectionTestStatus, CreateConnectionTestRequest, CustomerOwnedSlackAppManifest, SharedProviderIdentity, SuggestedBotUsername, UpdateChannelConnectionRequest, CreateCustomerEndpointRequest, CreateMessageRequest, CreateProjectRequest, UpdateProjectRequest, PrivacyMode, DefaultNotifierSummary, CreateSubscriptionLinkRequest, DeliveryAttemptSummary, CustomerEndpoint, CustomerEndpointAttemptCollection, CustomerEndpointAttemptDiagnostic, CustomerEndpointCollection, CustomerEndpointFailure, CustomerEndpointMutationResult, CustomerEndpointSecret, CustomerEndpointStatus, CustomerEndpointVerificationChallenge, CustomerEventType, Environment, IdempotencyKey, Message, MessageState, WhooshBangV1ContractDocument, Problem, ProblemCode, Project, ProjectCollection, ProjectEnvironment, ProviderCapabilitiesCollection, RecipientCopyKey, RecipientCopyOverride, RecipientCopyOverrideCollection, RecipientCopyOverrideValue, RecipientLanguage, TimeZone, RotateOrganizationCredentialRequest, RotateApiCredentialRequest, RotateCustomerEndpointRequest, SubscriptionLink, UpdateRecipientCopyOverrideRequest, } from "./generated/whooshbang-v1.js";
24
24
  export type HostedChannelConnectionSetup = NonNullable<import("./generated/whooshbang-v1.js").HostedChannelConnection["authorization_setup"]>;
25
25
  export type ChannelConnectionMode = import("./generated/whooshbang-v1.js").ChannelConnection["mode"];
26
26
  export type ChannelConnectionProvider = import("./generated/whooshbang-v1.js").ChannelConnection["provider"];
package/dist/index.js CHANGED
@@ -8,5 +8,5 @@ export { RECIPIENT_BRAND_DEFAULT_ACCENT_COLOR } from "./recipient-brand.js";
8
8
  export { normalizeNotificationImage, NOTIFICATION_IMAGE_CONTENT_TYPE, NOTIFICATION_IMAGE_MAX_BYTES, NOTIFICATION_IMAGE_MAX_DIMENSION, NOTIFICATION_IMAGE_MAX_PIXELS, NotificationImageError, } from "./notification-image.js";
9
9
  export { canonicalIanaTimeZone } from "./time-zone.js";
10
10
  export { CUSTOMIZABLE_RECIPIENT_COPY_KEYS, CUSTOMIZABLE_RECIPIENT_PANEL_COPY_KEYS, isCustomizableRecipientCopyKey, recipientCopyOverrideIssues, recipientCopyOverrideMaximumLength, RECIPIENT_COPY_OVERRIDE_HOSTED_ACTION_MAX_LENGTH, RECIPIENT_COPY_OVERRIDE_MAX_LENGTH, } from "./recipient-copy-policy.js";
11
- export { contractValidationErrors, validateAccountCredential, validateAccountCredentialCollection, validateAccountCredentialRotation, validateAccountCredentialSecretReveal, validateAccountProjection, validateApiCredential, validateApiCredentialCollection, validateApiCredentialRotation, validateApiCredentialSecretReveal, validateBindingSummary, validateCreateAccountCredentialRequest, validateCreateApiCredentialRequest, validateChannelConnection, validateChannelConnectionCollection, validateConnectionProviderCollection, validateCreateChannelConnectionRequest, validateUpdateChannelConnectionRequest, validateRotateChannelConnectionCredentialRequest, validateConnectionTest, validateConnectionTestCollection, validateCreateConnectionTestRequest, validateCustomerOwnedSlackAppManifest, validateAttachNotifierConnectionRequest, validateNotifierConnectionCollection, validateProjectRecipientExperience, validateRecipientBrandLogoUpload, validateNotificationImageAsset, validateUpdateProjectRecipientExperienceRequest, validateEnvironmentRecipientExperience, validateUpdateEnvironmentRecipientExperienceRequest, validateCreateRecipientSessionRequest, validateCreateRecipientSessionResponse, validateRecipientSession, validateCreateProviderHandoffRequest, validateProviderHandoff, validateRecipientHandoffCompletion, validateSetPreferredBindingRequest, validatePreferredBinding, validateCreateSubscriberRequest, validateSubscriber, validateCreateRecipientGroupRequest, validateUpdateRecipientGroupRequest, validateRecipientGroup, validateRecipientGroupCollection, validateRecipientGroupMembership, validateRecipientGroupMembershipCollection, validateCreateGroupBroadcastRequest, validateGroupBroadcast, validateCreateCustomerEndpointRequest, validateCreateProjectRequest, validateCreateMachineClientRequest, validateCreateMessageRequest, validateCreateSubscriptionLinkRequest, validateDeliveryAttemptSummary, validateCustomerEndpoint, validateCustomerEndpointAttemptCollection, validateCustomerEndpointCollection, validateCustomerEndpointMutationResult, validateCustomerEndpointVerificationChallenge, validateIdempotencyKey, validateAgentBindingDegradedEvent, validateInteractionEvent, validateInteractionExpiredEvent, validateInteractionReceivedEvent, validateInteractionRequest, validateInteractionSummary, validateMachineClient, validateMachineCredential, validateMachineCredentialBearer, validateMachineEventAckRequest, validateMachineEventAckResponse, validateMachineEventPollResponse, validateMessage, validateMessageDeliveredEvent, validateMessageExpiredEvent, validateMessageFailedEvent, validateMessageProviderAcceptedEvent, validateWhooshBangEvent, validateProblem, validateProject, validateProjectCollection, validateRecipientCopyOverride, validateRecipientCopyOverrideCollection, validateProviderCallbackToken, validateProviderCapabilities, validateProviderCapabilitiesCollection, validateRegisterMachineCredentialRequest, validateRotateAccountCredentialRequest, validateRotateApiCredentialRequest, validateRotateCustomerEndpointRequest, validateSubscriptionActivatedEvent, validateSubscriptionLink, validateSubscriptionRevokedEvent, validateUpdateRecipientCopyOverrideRequest, validateWebhookDeliveryCaseSet, validateWebhookSigningVectorSet, } from "./generated/validators.js";
11
+ export { contractValidationErrors, validateOrganizationCredential, validateOrganizationCredentialCollection, validateOrganizationCredentialRotation, validateOrganizationCredentialSecretReveal, validateOrganizationProjection, validateApiCredential, validateApiCredentialCollection, validateApiCredentialRotation, validateApiCredentialSecretReveal, validateBindingSummary, validateCreateOrganizationCredentialRequest, validateCreateApiCredentialRequest, validateChannelConnection, validateChannelConnectionCollection, validateConnectionProviderCollection, validateCreateChannelConnectionRequest, validateUpdateChannelConnectionRequest, validateRotateChannelConnectionCredentialRequest, validateConnectionTest, validateConnectionTestCollection, validateCreateConnectionTestRequest, validateCustomerOwnedSlackAppManifest, validateAttachNotifierConnectionRequest, validateNotifierConnectionCollection, validateProjectRecipientExperience, validateRecipientBrandLogoUpload, validateNotificationImageAsset, validateUpdateProjectRecipientExperienceRequest, validateEnvironmentRecipientExperience, validateUpdateEnvironmentRecipientExperienceRequest, validateCreateRecipientSessionRequest, validateCreateRecipientSessionResponse, validateRecipientSession, validateCreateProviderHandoffRequest, validateProviderHandoff, validateRecipientHandoffCompletion, validateSetPreferredBindingRequest, validatePreferredBinding, validateCreateSubscriberRequest, validateSubscriber, validateSubscriberDataExport, validateCloseOrganizationRequest, validateOrganizationClosureResult, validateCreateRecipientGroupRequest, validateUpdateRecipientGroupRequest, validateRecipientGroup, validateRecipientGroupCollection, validateRecipientGroupMembership, validateRecipientGroupMembershipCollection, validateCreateGroupBroadcastRequest, validateGroupBroadcast, validateCreateCustomerEndpointRequest, validateCreateProjectRequest, validateUpdateProjectRequest, validateCreateMachineClientRequest, validateCreateMessageRequest, validateCreateSubscriptionLinkRequest, validateDeliveryAttemptSummary, validateCustomerEndpoint, validateCustomerEndpointAttemptCollection, validateCustomerEndpointCollection, validateCustomerEndpointMutationResult, validateCustomerEndpointVerificationChallenge, validateIdempotencyKey, validateAgentBindingDegradedEvent, validateInteractionEvent, validateInteractionExpiredEvent, validateInteractionReceivedEvent, validateInteractionRequest, validateInteractionSummary, validateMachineClient, validateMachineCredential, validateMachineCredentialBearer, validateMachineEventAckRequest, validateMachineEventAckResponse, validateMachineEventPollResponse, validateMessage, validateMessageDeliveredEvent, validateMessageExpiredEvent, validateMessageFailedEvent, validateMessageProviderAcceptedEvent, validateWhooshBangEvent, validateProblem, validateProject, validateProjectCollection, validateRecipientCopyOverride, validateRecipientCopyOverrideCollection, validateProviderCallbackToken, validateProviderCapabilities, validateProviderCapabilitiesCollection, validateRegisterMachineCredentialRequest, validateRotateOrganizationCredentialRequest, validateRotateApiCredentialRequest, validateRotateCustomerEndpointRequest, validateSubscriptionActivatedEvent, validateSubscriptionLink, validateSubscriptionRevokedEvent, validateUpdateRecipientCopyOverrideRequest, validateWebhookDeliveryCaseSet, validateWebhookSigningVectorSet, } from "./generated/validators.js";
12
12
  //# sourceMappingURL=index.js.map