@whooshbang/contracts 2.0.0-rc.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/README.md +4 -5
  3. package/contract-manifest.json +33 -32
  4. package/dist/generated/artifact-index.d.ts +34 -34
  5. package/dist/generated/artifact-index.js +33 -32
  6. package/dist/generated/artifact-index.js.map +1 -1
  7. package/dist/generated/validators-standalone.d.ts +488 -437
  8. package/dist/generated/validators-standalone.js +40130 -29709
  9. package/dist/generated/validators-standalone.js.map +1 -1
  10. package/dist/generated/validators.d.ts +5 -1
  11. package/dist/generated/validators.js +9 -2
  12. package/dist/generated/validators.js.map +1 -1
  13. package/dist/generated/whooshbang-event-v1.d.ts +34 -18
  14. package/dist/generated/whooshbang-v1.d.ts +220 -45
  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 +7 -1
  19. package/fixtures/core-v1/requests/assert-email-service.json +10 -0
  20. package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
  21. package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
  22. package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
  23. package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
  24. package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
  25. package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
  26. package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
  27. package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
  28. package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
  29. package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
  30. package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
  31. package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
  32. package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
  33. package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
  34. package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
  35. package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
  36. package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
  37. package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
  38. package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
  39. package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
  40. package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
  41. package/fixtures/core-v1/success/subscription-change.json +1 -1
  42. package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
  43. package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
  44. package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
  45. package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
  46. package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
  47. package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
  48. package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
  49. package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
  50. package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
  51. package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
  52. package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
  53. package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
  54. package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
  55. package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
  56. package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
  57. package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
  58. package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
  59. package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
  60. package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
  61. package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
  62. package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
  63. package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
  64. package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
  65. package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
  66. package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
  67. package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
  68. package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
  69. package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
  70. package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
  71. package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
  72. package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
  73. package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
  74. package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
  75. package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
  76. package/openapi/generated/whooshbang-v1.bundle.json +630 -48
  77. package/openapi/whooshbang-v1.yaml +230 -5
  78. package/package.json +2 -3
  79. package/schemas/core-scenario.schema.json +1 -1
  80. package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
  81. package/schemas/events/interaction-expired-v1.schema.json +1 -1
  82. package/schemas/events/interaction-received-v1.schema.json +1 -1
  83. package/schemas/events/message-delivered-v1.schema.json +1 -1
  84. package/schemas/events/message-expired-v1.schema.json +1 -1
  85. package/schemas/events/message-failed-v1.schema.json +1 -1
  86. package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
  87. package/schemas/events/subscription-activated-v1.schema.json +1 -1
  88. package/schemas/events/subscription-revoked-v1.schema.json +1 -1
  89. package/schemas/events/whooshbang-event-v1.schema.json +145 -65
  90. package/schemas/fixture-index.schema.json +1 -1
  91. package/schemas/interaction-machine-scenario.schema.json +1 -1
  92. package/schemas/interaction-v1.schema.json +1 -1
  93. package/schemas/machine-v1.schema.json +1 -1
  94. package/schemas/provider-capabilities-v1.schema.json +1 -1
  95. package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
  96. package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
  97. package/schemas/whooshbang-v1.schema.json +552 -53
@@ -1,10 +1,10 @@
1
1
  openapi: 3.1.1
2
2
  jsonSchemaDialect: https://json-schema.org/draft/2020-12/schema
3
3
  # whooshbang:public-origin production api https://api.whooshbang.com
4
- x-contract-version: 2.0.0-rc.7
4
+ x-contract-version: 2.0.0
5
5
  info:
6
6
  title: WhooshBang API
7
- version: 2.0.0-rc.7
7
+ version: 2.0.0
8
8
  description: |
9
9
  The V1 contract for human organization/project administration, project-scoped
10
10
  subscription links, and asynchronous text messages. A Clerk session selects
@@ -37,6 +37,8 @@ security:
37
37
  tags:
38
38
  - name: Organization
39
39
  description: The current Clerk organization projected as a WhooshBang organization.
40
+ - name: Teammates
41
+ description: The people in an organization, their roles and the projects each can see.
40
42
  - name: Projects
41
43
  description: Organization-scoped applications with transactionally bootstrapped test/live environments.
42
44
  - name: API credentials
@@ -266,8 +268,16 @@ paths:
266
268
  /v1/billing/subscription-changes:
267
269
  post:
268
270
  operationId: createSubscriptionChange
271
+ description: >-
272
+ Quote a new recurring selection without charging. Upgrades keep renewal
273
+ and charge the new plan or additional add-on units for the remaining
274
+ period, without unused-time credits or offsets. Paid dropped extras
275
+ remain available through their original expiry and do not renew.
276
+ Requires an administrator in the current organization. Without a current
277
+ plan or add-on the change starts one. Confirmation matches the saved exact
278
+ cash amount and charges the default card. Uncertain outcomes recover the
279
+ same owned change.
269
280
  summary: Quote an approved recurring change
270
- description: Requires an administrator in the current organization. A quote does not charge. Without a current plan or add-on the change starts one. Confirmation matches the saved exact cash amount and charges the default card. Uncertain outcomes recover the same owned change.
271
281
  tags: [Organization]
272
282
  security:
273
283
  - clerkSession: []
@@ -310,7 +320,10 @@ paths:
310
320
  get:
311
321
  operationId: getSubscriptionChange
312
322
  summary: Recover an owned recurring change
313
- description: Requires an administrator in the current organization. A quote does not charge. Without a current plan or add-on the change starts one. Confirmation matches the saved exact cash amount and charges the default card. Uncertain outcomes recover the same owned change.
323
+ Requires an administrator in the current organization. Without a current
324
+ plan or add-on the change starts one. Confirmation matches the saved exact
325
+ cash amount and charges the default card. Uncertain outcomes recover the
326
+ same owned change.
314
327
  tags: [Organization]
315
328
  security:
316
329
  - clerkSession: []
@@ -352,7 +365,10 @@ paths:
352
365
  post:
353
366
  operationId: confirmSubscriptionChange
354
367
  summary: Confirm the quoted card charge or scheduled reduction
355
- description: Requires an administrator in the current organization. A quote does not charge. Without a current plan or add-on the change starts one. Confirmation matches the saved exact cash amount and charges the default card. Uncertain outcomes recover the same owned change.
368
+ Requires an administrator in the current organization. Without a current
369
+ plan or add-on the change starts one. Confirmation matches the saved exact
370
+ cash amount and charges the default card. Uncertain outcomes recover the
371
+ same owned change.
356
372
  tags: [Organization]
357
373
  security:
358
374
  - clerkSession: []
@@ -923,6 +939,207 @@ paths:
923
939
  $ref: "#/components/responses/Conflict"
924
940
  "429":
925
941
  $ref: "#/components/responses/RateLimited"
942
+ /v1/organization/teammates:
943
+ get:
944
+ operationId: listTeammates
945
+ summary: List the organization's teammates and open invitations
946
+ description: |
947
+ Returns every person in the organization with their role, the projects
948
+ they can see and whether they have joined, plus every invitation not yet
949
+ accepted. Any teammate may read it; only an admin may change it.
950
+ tags:
951
+ - Teammates
952
+ security:
953
+ - clerkSession: []
954
+ - bearerGrant: [teammates:read]
955
+ x-required-scopes: [teammates:read]
956
+ x-organization-membership: required
957
+ parameters:
958
+ - $ref: "#/components/parameters/ListAfterCursor"
959
+ - $ref: "#/components/parameters/ListPageLimit"
960
+ - $ref: "#/components/parameters/PageNumber"
961
+ responses:
962
+ "200":
963
+ description: The organization's teammates.
964
+ headers:
965
+ WhooshBang-Diagnostic-Id:
966
+ $ref: "#/components/headers/DiagnosticId"
967
+ content:
968
+ application/json:
969
+ schema:
970
+ $ref: "#/components/schemas/TeammateCollection"
971
+ "401":
972
+ $ref: "#/components/responses/Unauthorized"
973
+ "403":
974
+ $ref: "#/components/responses/Forbidden"
975
+ "429":
976
+ $ref: "#/components/responses/RateLimited"
977
+ post:
978
+ operationId: inviteTeammate
979
+ summary: Invite a teammate
980
+ description: |
981
+ Emails one invitation carrying the chosen role and, for a member or
982
+ messenger, the projects they will see. Nothing else is needed after they
983
+ accept. Inviting an address that is already invited or already a
984
+ teammate is refused rather than repeated.
985
+ tags:
986
+ - Teammates
987
+ security:
988
+ - clerkSession: []
989
+ - bearerGrant: [teammates:write]
990
+ x-required-scopes: [teammates:write]
991
+ x-organization-membership: required
992
+ x-required-membership-role: admin
993
+ requestBody:
994
+ required: true
995
+ content:
996
+ application/json:
997
+ schema:
998
+ $ref: "#/components/schemas/InviteTeammateRequest"
999
+ responses:
1000
+ "201":
1001
+ description: The invitation.
1002
+ headers:
1003
+ WhooshBang-Diagnostic-Id:
1004
+ $ref: "#/components/headers/DiagnosticId"
1005
+ content:
1006
+ application/json:
1007
+ schema:
1008
+ $ref: "#/components/schemas/Teammate"
1009
+ "400":
1010
+ $ref: "#/components/responses/BadRequest"
1011
+ "401":
1012
+ $ref: "#/components/responses/Unauthorized"
1013
+ "403":
1014
+ $ref: "#/components/responses/Forbidden"
1015
+ "429":
1016
+ $ref: "#/components/responses/RateLimited"
1017
+ /v1/organization/teammates/{teammate_id}:
1018
+ parameters:
1019
+ - name: teammate_id
1020
+ in: path
1021
+ required: true
1022
+ schema:
1023
+ $ref: "../schemas/whooshbang-v1.schema.json#/$defs/OpaqueIdentifier"
1024
+ delete:
1025
+ operationId: removeTeammate
1026
+ summary: Remove a teammate or revoke an invitation
1027
+ description: |
1028
+ Removes an active teammate from the organization, or revokes an
1029
+ invitation. Removal applies to their next request, including requests
1030
+ from MCP connections they authorized. The last admin cannot be removed.
1031
+ tags:
1032
+ - Teammates
1033
+ security:
1034
+ - clerkSession: []
1035
+ - bearerGrant: [teammates:write]
1036
+ x-required-scopes: [teammates:write]
1037
+ x-organization-membership: required
1038
+ x-required-membership-role: admin
1039
+ responses:
1040
+ "204":
1041
+ description: The teammate was removed or the invitation revoked.
1042
+ headers:
1043
+ WhooshBang-Diagnostic-Id:
1044
+ $ref: "#/components/headers/DiagnosticId"
1045
+ "401":
1046
+ $ref: "#/components/responses/Unauthorized"
1047
+ "403":
1048
+ $ref: "#/components/responses/Forbidden"
1049
+ "404":
1050
+ $ref: "#/components/responses/NotFound"
1051
+ "429":
1052
+ $ref: "#/components/responses/RateLimited"
1053
+ /v1/organization/teammates/{teammate_id}/access:
1054
+ parameters:
1055
+ - name: teammate_id
1056
+ in: path
1057
+ required: true
1058
+ schema:
1059
+ $ref: "../schemas/whooshbang-v1.schema.json#/$defs/OpaqueIdentifier"
1060
+ put:
1061
+ operationId: setTeammateAccess
1062
+ summary: Change a teammate's role and projects
1063
+ description: |
1064
+ Replaces the role and, for a member or messenger, the projects of an
1065
+ active teammate or an open invitation. Narrowed access applies to their
1066
+ next request. The last admin cannot be demoted.
1067
+ tags:
1068
+ - Teammates
1069
+ security:
1070
+ - clerkSession: []
1071
+ - bearerGrant: [teammates:write]
1072
+ x-required-scopes: [teammates:write]
1073
+ x-organization-membership: required
1074
+ x-required-membership-role: admin
1075
+ x-repeat-semantics:
1076
+ same_target: idempotent
1077
+ secret_returned: false
1078
+ requestBody:
1079
+ required: true
1080
+ content:
1081
+ application/json:
1082
+ schema:
1083
+ $ref: "#/components/schemas/TeammateAccessRequest"
1084
+ responses:
1085
+ "200":
1086
+ description: The teammate with their new access.
1087
+ headers:
1088
+ WhooshBang-Diagnostic-Id:
1089
+ $ref: "#/components/headers/DiagnosticId"
1090
+ content:
1091
+ application/json:
1092
+ schema:
1093
+ $ref: "#/components/schemas/Teammate"
1094
+ "400":
1095
+ $ref: "#/components/responses/BadRequest"
1096
+ "401":
1097
+ $ref: "#/components/responses/Unauthorized"
1098
+ "403":
1099
+ $ref: "#/components/responses/Forbidden"
1100
+ "404":
1101
+ $ref: "#/components/responses/NotFound"
1102
+ "429":
1103
+ $ref: "#/components/responses/RateLimited"
1104
+ /v1/organization/teammates/{teammate_id}/resend:
1105
+ parameters:
1106
+ - name: teammate_id
1107
+ in: path
1108
+ required: true
1109
+ schema:
1110
+ $ref: "../schemas/whooshbang-v1.schema.json#/$defs/OpaqueIdentifier"
1111
+ post:
1112
+ operationId: resendTeammateInvitation
1113
+ summary: Resend an invitation
1114
+ description: |
1115
+ Replaces an open invitation with a fresh one carrying the same role and
1116
+ projects, and emails it again. The earlier link stops working.
1117
+ tags:
1118
+ - Teammates
1119
+ security:
1120
+ - clerkSession: []
1121
+ - bearerGrant: [teammates:write]
1122
+ x-required-scopes: [teammates:write]
1123
+ x-organization-membership: required
1124
+ x-required-membership-role: admin
1125
+ responses:
1126
+ "200":
1127
+ description: The renewed invitation.
1128
+ headers:
1129
+ WhooshBang-Diagnostic-Id:
1130
+ $ref: "#/components/headers/DiagnosticId"
1131
+ content:
1132
+ application/json:
1133
+ schema:
1134
+ $ref: "#/components/schemas/Teammate"
1135
+ "401":
1136
+ $ref: "#/components/responses/Unauthorized"
1137
+ "403":
1138
+ $ref: "#/components/responses/Forbidden"
1139
+ "404":
1140
+ $ref: "#/components/responses/NotFound"
1141
+ "429":
1142
+ $ref: "#/components/responses/RateLimited"
926
1143
  /v1/provider-installations:
927
1144
  get:
928
1145
  operationId: listProviderInstallations
@@ -8253,6 +8470,14 @@ components:
8253
8470
  $ref: "../schemas/whooshbang-v1.schema.json#/$defs/UpdateBillingReceiptEmailRequest"
8254
8471
  OrganizationProjection:
8255
8472
  $ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationProjection
8473
+ Teammate:
8474
+ $ref: ../schemas/whooshbang-v1.schema.json#/$defs/Teammate
8475
+ TeammateCollection:
8476
+ $ref: ../schemas/whooshbang-v1.schema.json#/$defs/TeammateCollection
8477
+ TeammateAccessRequest:
8478
+ $ref: ../schemas/whooshbang-v1.schema.json#/$defs/TeammateAccessRequest
8479
+ InviteTeammateRequest:
8480
+ $ref: ../schemas/whooshbang-v1.schema.json#/$defs/InviteTeammateRequest
8256
8481
  UpdateProjectRequest:
8257
8482
  $ref: ../schemas/whooshbang-v1.schema.json#/$defs/UpdateProjectRequest
8258
8483
  PrivacyMode:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whooshbang/contracts",
3
- "version": "2.0.0-rc.7",
3
+ "version": "2.0.0",
4
4
  "description": "Versioned public contracts for WhooshBang",
5
5
  "private": false,
6
6
  "license": "MIT",
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "publishConfig": {
22
22
  "access": "public",
23
- "tag": "next"
23
+ "tag": "latest"
24
24
  },
25
25
  "files": [
26
26
  "CHANGELOG.md",
@@ -53,7 +53,6 @@
53
53
  "check": "npm run build && tsx scripts/check.ts",
54
54
  "generate": "tsx scripts/generate.ts",
55
55
  "lint": "eslint src scripts test --max-warnings=0",
56
- "pack:verified": "npm run check && tsx scripts/pack.ts",
57
56
  "test": "vitest run --no-file-parallelism",
58
57
  "type-check": "tsc --noEmit -p tsconfig.json"
59
58
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/core-scenario.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "CoreContractScenario",
6
6
  "description": "A deterministic C0-02 semantic, state, idempotency, or isolation scenario.",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/agent-binding-degraded-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "AgentBindingDegradedEventV1",
6
6
  "description": "An agent binding entered a provider-neutral degraded state.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/AgentBindingDegradedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/interaction-expired-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "InteractionExpiredEventV1",
6
6
  "description": "An interaction reached its terminal expiry without a valid answer.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/InteractionExpiredEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/interaction-received-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "InteractionReceivedEventV1",
6
6
  "description": "One authenticated, provider-neutral interaction answer was received.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/InteractionReceivedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-delivered-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "MessageDeliveredEventV1",
6
6
  "description": "A provider supplied trustworthy evidence that a message was delivered.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageDeliveredEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-expired-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "MessageExpiredEventV1",
6
6
  "description": "A message expired before reaching a later delivery state.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageExpiredEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-failed-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "MessageFailedEventV1",
6
6
  "description": "A message reached a classified terminal failure.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageFailedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/message-provider-accepted-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "MessageProviderAcceptedEventV1",
6
6
  "description": "The provider accepted a message without implying delivery.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/MessageProviderAcceptedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/subscription-activated-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "SubscriptionActivatedEventV1",
6
6
  "description": "A subscription became active with a safe public channel binding.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/SubscriptionActivatedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/subscription-revoked-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "SubscriptionRevokedEventV1",
6
6
  "description": "A subscription and its safe public channel binding were revoked.",
7
7
  "$ref": "whooshbang-event-v1.schema.json#/$defs/SubscriptionRevokedEvent"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/events/whooshbang-event-v1.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "WhooshBangEventV1ContractDocument",
6
6
  "description": "Strict public customer-event envelope and initial WhooshBang event union.",
7
7
  "oneOf": [
@@ -694,40 +694,80 @@
694
694
  ]
695
695
  },
696
696
  "SubscriptionAssertedData": {
697
- "type": "object",
698
- "required": [
699
- "consent_assertion_id",
700
- "binding_id",
701
- "subscriber_id",
702
- "notifier_id",
703
- "channel",
704
- "state",
705
- "activated_at"
706
- ],
707
- "properties": {
708
- "binding_id": {
709
- "$ref": "#/$defs/OpaqueIdentifier"
710
- },
711
- "subscriber_id": {
712
- "$ref": "#/$defs/OpaqueIdentifier"
713
- },
714
- "notifier_id": {
715
- "$ref": "#/$defs/OpaqueIdentifier"
716
- },
717
- "channel": {
718
- "const": "email"
719
- },
720
- "state": {
721
- "const": "activated"
722
- },
723
- "activated_at": {
724
- "$ref": "#/$defs/Timestamp"
697
+ "oneOf": [
698
+ {
699
+ "type": "object",
700
+ "required": [
701
+ "consent_assertion_id",
702
+ "binding_id",
703
+ "subscriber_id",
704
+ "notifier_id",
705
+ "channel",
706
+ "state",
707
+ "activated_at"
708
+ ],
709
+ "properties": {
710
+ "binding_id": {
711
+ "$ref": "#/$defs/OpaqueIdentifier"
712
+ },
713
+ "subscriber_id": {
714
+ "$ref": "#/$defs/OpaqueIdentifier"
715
+ },
716
+ "notifier_id": {
717
+ "$ref": "#/$defs/OpaqueIdentifier"
718
+ },
719
+ "channel": {
720
+ "const": "email"
721
+ },
722
+ "state": {
723
+ "const": "activated"
724
+ },
725
+ "activated_at": {
726
+ "$ref": "#/$defs/Timestamp"
727
+ },
728
+ "consent_assertion_id": {
729
+ "$ref": "#/$defs/OpaqueIdentifier"
730
+ }
731
+ },
732
+ "additionalProperties": false
725
733
  },
726
- "consent_assertion_id": {
727
- "$ref": "#/$defs/OpaqueIdentifier"
734
+ {
735
+ "type": "object",
736
+ "required": [
737
+ "service_assertion_id",
738
+ "binding_id",
739
+ "subscriber_id",
740
+ "notifier_id",
741
+ "channel",
742
+ "state",
743
+ "activated_at"
744
+ ],
745
+ "properties": {
746
+ "binding_id": {
747
+ "$ref": "#/$defs/OpaqueIdentifier"
748
+ },
749
+ "subscriber_id": {
750
+ "$ref": "#/$defs/OpaqueIdentifier"
751
+ },
752
+ "notifier_id": {
753
+ "$ref": "#/$defs/OpaqueIdentifier"
754
+ },
755
+ "channel": {
756
+ "const": "email"
757
+ },
758
+ "state": {
759
+ "const": "activated"
760
+ },
761
+ "activated_at": {
762
+ "$ref": "#/$defs/Timestamp"
763
+ },
764
+ "service_assertion_id": {
765
+ "$ref": "#/$defs/OpaqueIdentifier"
766
+ }
767
+ },
768
+ "additionalProperties": false
728
769
  }
729
- },
730
- "additionalProperties": false
770
+ ]
731
771
  },
732
772
  "SubscriptionAssertedEvent": {
733
773
  "allOf": [
@@ -748,40 +788,80 @@
748
788
  ]
749
789
  },
750
790
  "SubscriptionAssertedRevokedData": {
751
- "type": "object",
752
- "required": [
753
- "consent_assertion_id",
754
- "binding_id",
755
- "subscriber_id",
756
- "notifier_id",
757
- "channel",
758
- "state",
759
- "revoked_at"
760
- ],
761
- "properties": {
762
- "binding_id": {
763
- "$ref": "#/$defs/OpaqueIdentifier"
764
- },
765
- "subscriber_id": {
766
- "$ref": "#/$defs/OpaqueIdentifier"
767
- },
768
- "notifier_id": {
769
- "$ref": "#/$defs/OpaqueIdentifier"
770
- },
771
- "channel": {
772
- "const": "email"
773
- },
774
- "state": {
775
- "const": "revoked"
776
- },
777
- "revoked_at": {
778
- "$ref": "#/$defs/Timestamp"
791
+ "oneOf": [
792
+ {
793
+ "type": "object",
794
+ "required": [
795
+ "consent_assertion_id",
796
+ "binding_id",
797
+ "subscriber_id",
798
+ "notifier_id",
799
+ "channel",
800
+ "state",
801
+ "revoked_at"
802
+ ],
803
+ "properties": {
804
+ "binding_id": {
805
+ "$ref": "#/$defs/OpaqueIdentifier"
806
+ },
807
+ "subscriber_id": {
808
+ "$ref": "#/$defs/OpaqueIdentifier"
809
+ },
810
+ "notifier_id": {
811
+ "$ref": "#/$defs/OpaqueIdentifier"
812
+ },
813
+ "channel": {
814
+ "const": "email"
815
+ },
816
+ "state": {
817
+ "const": "revoked"
818
+ },
819
+ "revoked_at": {
820
+ "$ref": "#/$defs/Timestamp"
821
+ },
822
+ "consent_assertion_id": {
823
+ "$ref": "#/$defs/OpaqueIdentifier"
824
+ }
825
+ },
826
+ "additionalProperties": false
779
827
  },
780
- "consent_assertion_id": {
781
- "$ref": "#/$defs/OpaqueIdentifier"
828
+ {
829
+ "type": "object",
830
+ "required": [
831
+ "service_assertion_id",
832
+ "binding_id",
833
+ "subscriber_id",
834
+ "notifier_id",
835
+ "channel",
836
+ "state",
837
+ "revoked_at"
838
+ ],
839
+ "properties": {
840
+ "binding_id": {
841
+ "$ref": "#/$defs/OpaqueIdentifier"
842
+ },
843
+ "subscriber_id": {
844
+ "$ref": "#/$defs/OpaqueIdentifier"
845
+ },
846
+ "notifier_id": {
847
+ "$ref": "#/$defs/OpaqueIdentifier"
848
+ },
849
+ "channel": {
850
+ "const": "email"
851
+ },
852
+ "state": {
853
+ "const": "revoked"
854
+ },
855
+ "revoked_at": {
856
+ "$ref": "#/$defs/Timestamp"
857
+ },
858
+ "service_assertion_id": {
859
+ "$ref": "#/$defs/OpaqueIdentifier"
860
+ }
861
+ },
862
+ "additionalProperties": false
782
863
  }
783
- },
784
- "additionalProperties": false
864
+ ]
785
865
  },
786
866
  "SubscriptionAssertedRevokedEvent": {
787
867
  "allOf": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://whooshbang.flowxo.com/schemas/fixture-index.schema.json",
4
- "x-contract-version": "2.0.0-rc.7",
4
+ "x-contract-version": "2.0.0",
5
5
  "title": "CoreFixtureIndex",
6
6
  "description": "The machine-readable index of deterministic C0-02 through C0-04 golden fixtures.",
7
7
  "type": "object",