@whooshbang/contracts 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/contract-manifest.json +32 -32
- package/dist/generated/artifact-index.d.ts +33 -33
- package/dist/generated/artifact-index.js +32 -32
- package/dist/generated/interaction-v1.d.ts +72 -4
- package/dist/generated/validators-standalone.d.ts +492 -480
- package/dist/generated/validators-standalone.js +4191 -2276
- package/dist/generated/validators-standalone.js.map +1 -1
- package/dist/generated/validators.d.ts +2 -1
- package/dist/generated/validators.js +2 -1
- package/dist/generated/validators.js.map +1 -1
- package/dist/generated/whooshbang-v1.d.ts +94 -17
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interaction-expiry.d.ts +17 -0
- package/dist/interaction-expiry.js +67 -0
- package/dist/interaction-expiry.js.map +1 -0
- package/fixtures/core-v1/fixture-index.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
- package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
- package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
- package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
- package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
- package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
- package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
- package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
- package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
- package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
- package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
- package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
- package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
- package/openapi/generated/whooshbang-v1.bundle.json +128 -20
- package/openapi/whooshbang-v1.yaml +4 -2
- package/package.json +1 -1
- package/schemas/core-scenario.schema.json +1 -1
- package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
- package/schemas/events/interaction-expired-v1.schema.json +1 -1
- package/schemas/events/interaction-received-v1.schema.json +1 -1
- package/schemas/events/message-delivered-v1.schema.json +1 -1
- package/schemas/events/message-expired-v1.schema.json +1 -1
- package/schemas/events/message-failed-v1.schema.json +1 -1
- package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
- package/schemas/events/subscription-activated-v1.schema.json +1 -1
- package/schemas/events/subscription-revoked-v1.schema.json +1 -1
- package/schemas/events/whooshbang-event-v1.schema.json +1 -1
- package/schemas/fixture-index.schema.json +1 -1
- package/schemas/interaction-machine-scenario.schema.json +1 -1
- package/schemas/interaction-v1.schema.json +151 -19
- package/schemas/machine-v1.schema.json +1 -1
- package/schemas/provider-capabilities-v1.schema.json +1 -1
- package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
- package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
- package/schemas/whooshbang-v1.schema.json +52 -48
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.1",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "WhooshBang API",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.3.0",
|
|
6
6
|
"description": "The V1 contract for human organization/project administration, project-scoped\nsubscription links, and asynchronous text messages. A Clerk session selects\none organization for administration. A project credential selects one organization,\nproject, and `test` or `live` environment for product operations; request\nbodies cannot override either authenticated scope.\n\nA person's OAuth grant selects one organization and carries scopes, but no\nproject. It names the project and environment it acts in through the URL\npath, on the environment-scoped form of each operation; the service checks\nthat path against the granting person's membership on every call. The flat\nforms remain credential-only and are unchanged.\n\nResource identifiers are opaque and are not authorization. Reads outside the\ncredential scope return the same `404` shape as absent resources. Provider\ncredentials, raw Telegram identity, and protected provider responses are\nnever part of this API.\n",
|
|
7
7
|
"termsOfService": "https://flowxo.com/terms",
|
|
8
8
|
"contact": {
|
|
@@ -11203,7 +11203,9 @@
|
|
|
11203
11203
|
"maxLength": 128
|
|
11204
11204
|
},
|
|
11205
11205
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
11206
|
-
"interaction": {
|
|
11206
|
+
"interaction": {
|
|
11207
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
11208
|
+
},
|
|
11207
11209
|
"purpose": {
|
|
11208
11210
|
"enum": ["service", "marketing"],
|
|
11209
11211
|
"default": "service",
|
|
@@ -12597,7 +12599,9 @@
|
|
|
12597
12599
|
"description": "The words a `subscriber_message` test sends, as plain text."
|
|
12598
12600
|
},
|
|
12599
12601
|
"content": { "$ref": "#/components/schemas/MessageContent" },
|
|
12600
|
-
"interaction": {
|
|
12602
|
+
"interaction": {
|
|
12603
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
12604
|
+
}
|
|
12601
12605
|
},
|
|
12602
12606
|
"allOf": [
|
|
12603
12607
|
{
|
|
@@ -15502,7 +15506,9 @@
|
|
|
15502
15506
|
"maxLength": 128
|
|
15503
15507
|
},
|
|
15504
15508
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
15505
|
-
"interaction": {
|
|
15509
|
+
"interaction": {
|
|
15510
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
15511
|
+
},
|
|
15506
15512
|
"purpose": {
|
|
15507
15513
|
"enum": ["service", "marketing"],
|
|
15508
15514
|
"default": "service",
|
|
@@ -16363,6 +16369,14 @@
|
|
|
16363
16369
|
],
|
|
16364
16370
|
"additionalProperties": false
|
|
16365
16371
|
},
|
|
16372
|
+
"InteractionSendRequest": {
|
|
16373
|
+
"description": "Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.",
|
|
16374
|
+
"oneOf": [
|
|
16375
|
+
{ "$ref": "#/components/schemas/ConfirmInteractionSendRequest" },
|
|
16376
|
+
{ "$ref": "#/components/schemas/SelectInteractionSendRequest" },
|
|
16377
|
+
{ "$ref": "#/components/schemas/InputInteractionSendRequest" }
|
|
16378
|
+
]
|
|
16379
|
+
},
|
|
16366
16380
|
"InteractionRequest": {
|
|
16367
16381
|
"description": "A required-type tagged union. C0 supports confirm, single-select, and input only.",
|
|
16368
16382
|
"oneOf": [
|
|
@@ -18186,7 +18200,9 @@
|
|
|
18186
18200
|
"maxLength": 128
|
|
18187
18201
|
},
|
|
18188
18202
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
18189
|
-
"interaction": {
|
|
18203
|
+
"interaction": {
|
|
18204
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
18205
|
+
},
|
|
18190
18206
|
"purpose": {
|
|
18191
18207
|
"enum": ["service", "marketing"],
|
|
18192
18208
|
"default": "service",
|
|
@@ -18231,7 +18247,11 @@
|
|
|
18231
18247
|
"accepted_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18232
18248
|
"updated_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18233
18249
|
"expires_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18234
|
-
"diagnostic_id": { "$ref": "#/components/schemas/DiagnosticId" }
|
|
18250
|
+
"diagnostic_id": { "$ref": "#/components/schemas/DiagnosticId" },
|
|
18251
|
+
"interaction_expires_at": {
|
|
18252
|
+
"$ref": "#/components/schemas/Timestamp",
|
|
18253
|
+
"description": "Authoritatively resolved answer deadline shared by this broadcast’s interactions, independent of delivery expires_at."
|
|
18254
|
+
}
|
|
18235
18255
|
},
|
|
18236
18256
|
"additionalProperties": false
|
|
18237
18257
|
},
|
|
@@ -18671,9 +18691,9 @@
|
|
|
18671
18691
|
"pattern": "^[^\\u0000-\\u001F\\u007F]+$",
|
|
18672
18692
|
"description": "Caller-owned opaque correlation returned as data, never treated as execution authority."
|
|
18673
18693
|
},
|
|
18674
|
-
"
|
|
18694
|
+
"ConfirmInteractionSendRequest": {
|
|
18675
18695
|
"type": "object",
|
|
18676
|
-
"required": ["type", "prompt"
|
|
18696
|
+
"required": ["type", "prompt"],
|
|
18677
18697
|
"properties": {
|
|
18678
18698
|
"type": { "const": "confirm" },
|
|
18679
18699
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
@@ -18685,13 +18705,22 @@
|
|
|
18685
18705
|
"deny_label": { "type": "string", "minLength": 1, "maxLength": 40 },
|
|
18686
18706
|
"expires_at": {
|
|
18687
18707
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18688
|
-
"description": "
|
|
18708
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
18689
18709
|
},
|
|
18690
18710
|
"correlation_id": {
|
|
18691
18711
|
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
18712
|
+
},
|
|
18713
|
+
"expires_in_seconds": {
|
|
18714
|
+
"type": "integer",
|
|
18715
|
+
"minimum": 30,
|
|
18716
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
18692
18717
|
}
|
|
18693
18718
|
},
|
|
18694
|
-
"additionalProperties": false
|
|
18719
|
+
"additionalProperties": false,
|
|
18720
|
+
"not": {
|
|
18721
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18722
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18723
|
+
}
|
|
18695
18724
|
},
|
|
18696
18725
|
"InteractionOption": {
|
|
18697
18726
|
"type": "object",
|
|
@@ -18714,9 +18743,9 @@
|
|
|
18714
18743
|
},
|
|
18715
18744
|
"additionalProperties": false
|
|
18716
18745
|
},
|
|
18717
|
-
"
|
|
18746
|
+
"SelectInteractionSendRequest": {
|
|
18718
18747
|
"type": "object",
|
|
18719
|
-
"required": ["type", "prompt", "options"
|
|
18748
|
+
"required": ["type", "prompt", "options"],
|
|
18720
18749
|
"properties": {
|
|
18721
18750
|
"type": { "const": "select" },
|
|
18722
18751
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
@@ -18729,29 +18758,47 @@
|
|
|
18729
18758
|
},
|
|
18730
18759
|
"expires_at": {
|
|
18731
18760
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18732
|
-
"description": "
|
|
18761
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
18733
18762
|
},
|
|
18734
18763
|
"correlation_id": {
|
|
18735
18764
|
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
18765
|
+
},
|
|
18766
|
+
"expires_in_seconds": {
|
|
18767
|
+
"type": "integer",
|
|
18768
|
+
"minimum": 30,
|
|
18769
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
18736
18770
|
}
|
|
18737
18771
|
},
|
|
18738
|
-
"additionalProperties": false
|
|
18772
|
+
"additionalProperties": false,
|
|
18773
|
+
"not": {
|
|
18774
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18775
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18776
|
+
}
|
|
18739
18777
|
},
|
|
18740
|
-
"
|
|
18778
|
+
"InputInteractionSendRequest": {
|
|
18741
18779
|
"type": "object",
|
|
18742
|
-
"required": ["type", "prompt"
|
|
18780
|
+
"required": ["type", "prompt"],
|
|
18743
18781
|
"properties": {
|
|
18744
18782
|
"type": { "const": "input" },
|
|
18745
18783
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
18746
18784
|
"expires_at": {
|
|
18747
18785
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18748
|
-
"description": "
|
|
18786
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
18749
18787
|
},
|
|
18750
18788
|
"correlation_id": {
|
|
18751
18789
|
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
18790
|
+
},
|
|
18791
|
+
"expires_in_seconds": {
|
|
18792
|
+
"type": "integer",
|
|
18793
|
+
"minimum": 30,
|
|
18794
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
18752
18795
|
}
|
|
18753
18796
|
},
|
|
18754
|
-
"additionalProperties": false
|
|
18797
|
+
"additionalProperties": false,
|
|
18798
|
+
"not": {
|
|
18799
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18800
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18801
|
+
}
|
|
18755
18802
|
},
|
|
18756
18803
|
"HighestProvenProviderState": {
|
|
18757
18804
|
"type": "string",
|
|
@@ -20340,7 +20387,7 @@
|
|
|
20340
20387
|
"provider-capabilities-v1.schema": {
|
|
20341
20388
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
20342
20389
|
"$id": "https://whooshbang.flowxo.com/schemas/provider-capabilities-v1.schema.json",
|
|
20343
|
-
"x-contract-version": "2.
|
|
20390
|
+
"x-contract-version": "2.3.0",
|
|
20344
20391
|
"title": "ProviderCapabilitiesV1",
|
|
20345
20392
|
"description": "Provider-neutral, renderer-facing delivery and interaction capabilities with explicit degradation.",
|
|
20346
20393
|
"type": "object",
|
|
@@ -20601,6 +20648,67 @@
|
|
|
20601
20648
|
},
|
|
20602
20649
|
"additionalProperties": false
|
|
20603
20650
|
},
|
|
20651
|
+
"ConfirmInteractionRequest": {
|
|
20652
|
+
"type": "object",
|
|
20653
|
+
"required": ["type", "prompt", "expires_at"],
|
|
20654
|
+
"properties": {
|
|
20655
|
+
"type": { "const": "confirm" },
|
|
20656
|
+
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
20657
|
+
"confirm_label": {
|
|
20658
|
+
"type": "string",
|
|
20659
|
+
"minLength": 1,
|
|
20660
|
+
"maxLength": 40
|
|
20661
|
+
},
|
|
20662
|
+
"deny_label": { "type": "string", "minLength": 1, "maxLength": 40 },
|
|
20663
|
+
"expires_at": {
|
|
20664
|
+
"$ref": "#/components/schemas/Timestamp-2",
|
|
20665
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
20666
|
+
},
|
|
20667
|
+
"correlation_id": {
|
|
20668
|
+
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
20669
|
+
}
|
|
20670
|
+
},
|
|
20671
|
+
"additionalProperties": false
|
|
20672
|
+
},
|
|
20673
|
+
"SelectInteractionRequest": {
|
|
20674
|
+
"type": "object",
|
|
20675
|
+
"required": ["type", "prompt", "options", "expires_at"],
|
|
20676
|
+
"properties": {
|
|
20677
|
+
"type": { "const": "select" },
|
|
20678
|
+
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
20679
|
+
"options": {
|
|
20680
|
+
"type": "array",
|
|
20681
|
+
"minItems": 2,
|
|
20682
|
+
"maxItems": 6,
|
|
20683
|
+
"items": { "$ref": "#/components/schemas/InteractionOption" },
|
|
20684
|
+
"x-unique-property": "value"
|
|
20685
|
+
},
|
|
20686
|
+
"expires_at": {
|
|
20687
|
+
"$ref": "#/components/schemas/Timestamp-2",
|
|
20688
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
20689
|
+
},
|
|
20690
|
+
"correlation_id": {
|
|
20691
|
+
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
20692
|
+
}
|
|
20693
|
+
},
|
|
20694
|
+
"additionalProperties": false
|
|
20695
|
+
},
|
|
20696
|
+
"InputInteractionRequest": {
|
|
20697
|
+
"type": "object",
|
|
20698
|
+
"required": ["type", "prompt", "expires_at"],
|
|
20699
|
+
"properties": {
|
|
20700
|
+
"type": { "const": "input" },
|
|
20701
|
+
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
20702
|
+
"expires_at": {
|
|
20703
|
+
"$ref": "#/components/schemas/Timestamp-2",
|
|
20704
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
20705
|
+
},
|
|
20706
|
+
"correlation_id": {
|
|
20707
|
+
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
20708
|
+
}
|
|
20709
|
+
},
|
|
20710
|
+
"additionalProperties": false
|
|
20711
|
+
},
|
|
20604
20712
|
"EmailBindingImportRow": {
|
|
20605
20713
|
"type": "object",
|
|
20606
20714
|
"required": ["subscriber_id", "notifier_id", "address", "consent"],
|
|
@@ -21060,5 +21168,5 @@
|
|
|
21060
21168
|
}
|
|
21061
21169
|
}
|
|
21062
21170
|
},
|
|
21063
|
-
"x-contract-version": "2.
|
|
21171
|
+
"x-contract-version": "2.3.0"
|
|
21064
21172
|
}
|
|
@@ -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.
|
|
4
|
+
x-contract-version: 2.3.0
|
|
5
5
|
info:
|
|
6
6
|
title: WhooshBang API
|
|
7
|
-
version: 2.
|
|
7
|
+
version: 2.3.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
|
|
@@ -8849,6 +8849,8 @@ components:
|
|
|
8849
8849
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/Message
|
|
8850
8850
|
Problem:
|
|
8851
8851
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/Problem
|
|
8852
|
+
InteractionSendRequest:
|
|
8853
|
+
$ref: ../schemas/interaction-v1.schema.json#/$defs/InteractionSendRequest
|
|
8852
8854
|
InteractionRequest:
|
|
8853
8855
|
$ref: ../schemas/interaction-v1.schema.json#/$defs/InteractionRequest
|
|
8854
8856
|
InteractionSummary:
|
package/package.json
CHANGED
|
@@ -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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.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.
|
|
4
|
+
"x-contract-version": "2.3.0",
|
|
5
5
|
"title": "WhooshBangEventV1ContractDocument",
|
|
6
6
|
"description": "Strict public customer-event envelope and initial WhooshBang event union.",
|
|
7
7
|
"oneOf": [
|
|
@@ -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.
|
|
4
|
+
"x-contract-version": "2.3.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",
|
|
@@ -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/interaction-machine-scenario.schema.json",
|
|
4
|
-
"x-contract-version": "2.
|
|
4
|
+
"x-contract-version": "2.3.0",
|
|
5
5
|
"title": "InteractionMachineScenario",
|
|
6
6
|
"description": "A deterministic C0-03 interaction, credential, authorization, polling, acknowledgement, or quarantine scenario.",
|
|
7
7
|
"type": "object",
|
|
@@ -1,23 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://whooshbang.flowxo.com/schemas/interaction-v1.schema.json",
|
|
4
|
-
"x-contract-version": "2.
|
|
4
|
+
"x-contract-version": "2.3.0",
|
|
5
5
|
"title": "InteractionV1ContractDocument",
|
|
6
6
|
"description": "Provider-neutral confirm, single-select, input, lifecycle, callback-token, and authenticated answer-event contracts.",
|
|
7
|
-
"oneOf": [
|
|
8
|
-
{
|
|
9
|
-
"$ref": "#/$defs/InteractionRequest"
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"$ref": "#/$defs/InteractionSummary"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"$ref": "#/$defs/InteractionEvent"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"$ref": "#/$defs/ProviderCallbackToken"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
7
|
"$defs": {
|
|
22
8
|
"OpaqueIdentifier": {
|
|
23
9
|
"type": "string",
|
|
@@ -90,7 +76,7 @@
|
|
|
90
76
|
},
|
|
91
77
|
"expires_at": {
|
|
92
78
|
"$ref": "#/$defs/Timestamp",
|
|
93
|
-
"description": "
|
|
79
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
94
80
|
},
|
|
95
81
|
"correlation_id": {
|
|
96
82
|
"$ref": "#/$defs/InteractionCorrelationId"
|
|
@@ -119,7 +105,7 @@
|
|
|
119
105
|
},
|
|
120
106
|
"expires_at": {
|
|
121
107
|
"$ref": "#/$defs/Timestamp",
|
|
122
|
-
"description": "
|
|
108
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
123
109
|
},
|
|
124
110
|
"correlation_id": {
|
|
125
111
|
"$ref": "#/$defs/InteractionCorrelationId"
|
|
@@ -139,7 +125,7 @@
|
|
|
139
125
|
},
|
|
140
126
|
"expires_at": {
|
|
141
127
|
"$ref": "#/$defs/Timestamp",
|
|
142
|
-
"description": "
|
|
128
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
143
129
|
},
|
|
144
130
|
"correlation_id": {
|
|
145
131
|
"$ref": "#/$defs/InteractionCorrelationId"
|
|
@@ -486,6 +472,152 @@
|
|
|
486
472
|
"type": "string",
|
|
487
473
|
"pattern": "^itok_[A-Za-z0-9_-]{21}[AQgw]$",
|
|
488
474
|
"description": "An opaque single-purpose reference containing exactly 128 random bits and no trusted identity, answer, command, or business data."
|
|
475
|
+
},
|
|
476
|
+
"ConfirmInteractionSendRequest": {
|
|
477
|
+
"type": "object",
|
|
478
|
+
"required": ["type", "prompt"],
|
|
479
|
+
"properties": {
|
|
480
|
+
"type": {
|
|
481
|
+
"const": "confirm"
|
|
482
|
+
},
|
|
483
|
+
"prompt": {
|
|
484
|
+
"$ref": "#/$defs/InteractionPrompt"
|
|
485
|
+
},
|
|
486
|
+
"confirm_label": {
|
|
487
|
+
"type": "string",
|
|
488
|
+
"minLength": 1,
|
|
489
|
+
"maxLength": 40
|
|
490
|
+
},
|
|
491
|
+
"deny_label": {
|
|
492
|
+
"type": "string",
|
|
493
|
+
"minLength": 1,
|
|
494
|
+
"maxLength": 40
|
|
495
|
+
},
|
|
496
|
+
"expires_at": {
|
|
497
|
+
"$ref": "#/$defs/Timestamp",
|
|
498
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
499
|
+
},
|
|
500
|
+
"correlation_id": {
|
|
501
|
+
"$ref": "#/$defs/InteractionCorrelationId"
|
|
502
|
+
},
|
|
503
|
+
"expires_in_seconds": {
|
|
504
|
+
"type": "integer",
|
|
505
|
+
"minimum": 30,
|
|
506
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
"additionalProperties": false,
|
|
510
|
+
"not": {
|
|
511
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
512
|
+
"properties": {
|
|
513
|
+
"expires_at": {},
|
|
514
|
+
"expires_in_seconds": {}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
"InteractionSendRequest": {
|
|
519
|
+
"description": "Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.",
|
|
520
|
+
"oneOf": [
|
|
521
|
+
{
|
|
522
|
+
"$ref": "#/$defs/ConfirmInteractionSendRequest"
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
"$ref": "#/$defs/SelectInteractionSendRequest"
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"$ref": "#/$defs/InputInteractionSendRequest"
|
|
529
|
+
}
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
"SelectInteractionSendRequest": {
|
|
533
|
+
"type": "object",
|
|
534
|
+
"required": ["type", "prompt", "options"],
|
|
535
|
+
"properties": {
|
|
536
|
+
"type": {
|
|
537
|
+
"const": "select"
|
|
538
|
+
},
|
|
539
|
+
"prompt": {
|
|
540
|
+
"$ref": "#/$defs/InteractionPrompt"
|
|
541
|
+
},
|
|
542
|
+
"options": {
|
|
543
|
+
"type": "array",
|
|
544
|
+
"minItems": 2,
|
|
545
|
+
"maxItems": 6,
|
|
546
|
+
"items": {
|
|
547
|
+
"$ref": "#/$defs/InteractionOption"
|
|
548
|
+
},
|
|
549
|
+
"x-unique-property": "value"
|
|
550
|
+
},
|
|
551
|
+
"expires_at": {
|
|
552
|
+
"$ref": "#/$defs/Timestamp",
|
|
553
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
554
|
+
},
|
|
555
|
+
"correlation_id": {
|
|
556
|
+
"$ref": "#/$defs/InteractionCorrelationId"
|
|
557
|
+
},
|
|
558
|
+
"expires_in_seconds": {
|
|
559
|
+
"type": "integer",
|
|
560
|
+
"minimum": 30,
|
|
561
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
"additionalProperties": false,
|
|
565
|
+
"not": {
|
|
566
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
567
|
+
"properties": {
|
|
568
|
+
"expires_at": {},
|
|
569
|
+
"expires_in_seconds": {}
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
"InputInteractionSendRequest": {
|
|
574
|
+
"type": "object",
|
|
575
|
+
"required": ["type", "prompt"],
|
|
576
|
+
"properties": {
|
|
577
|
+
"type": {
|
|
578
|
+
"const": "input"
|
|
579
|
+
},
|
|
580
|
+
"prompt": {
|
|
581
|
+
"$ref": "#/$defs/InteractionPrompt"
|
|
582
|
+
},
|
|
583
|
+
"expires_at": {
|
|
584
|
+
"$ref": "#/$defs/Timestamp",
|
|
585
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
586
|
+
},
|
|
587
|
+
"correlation_id": {
|
|
588
|
+
"$ref": "#/$defs/InteractionCorrelationId"
|
|
589
|
+
},
|
|
590
|
+
"expires_in_seconds": {
|
|
591
|
+
"type": "integer",
|
|
592
|
+
"minimum": 30,
|
|
593
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
"additionalProperties": false,
|
|
597
|
+
"not": {
|
|
598
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
599
|
+
"properties": {
|
|
600
|
+
"expires_at": {},
|
|
601
|
+
"expires_in_seconds": {}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
"anyOf": [
|
|
607
|
+
{
|
|
608
|
+
"$ref": "#/$defs/InteractionRequest"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"$ref": "#/$defs/InteractionSummary"
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"$ref": "#/$defs/InteractionEvent"
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
"$ref": "#/$defs/ProviderCallbackToken"
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
"$ref": "#/$defs/InteractionSendRequest"
|
|
489
621
|
}
|
|
490
|
-
|
|
622
|
+
]
|
|
491
623
|
}
|
|
@@ -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/machine-v1.schema.json",
|
|
4
|
-
"x-contract-version": "2.
|
|
4
|
+
"x-contract-version": "2.3.0",
|
|
5
5
|
"title": "MachineV1ContractDocument",
|
|
6
6
|
"description": "Machine-client administration, locally generated credential metadata, durable long-poll, and contiguous acknowledgement contracts.",
|
|
7
7
|
"oneOf": [
|