@whooshbang/contracts 2.1.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 +12 -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 +4313 -2284
- 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 +98 -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 +135 -21
- 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 +58 -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": {
|
|
@@ -11146,7 +11146,13 @@
|
|
|
11146
11146
|
"role": { "enum": ["admin", "member", "messenger"] },
|
|
11147
11147
|
"readiness": { "enum": ["ready", "channel_unavailable"] },
|
|
11148
11148
|
"preferred_channel": { "$ref": "#/components/schemas/Channel" },
|
|
11149
|
-
"preferences_url": { "type": "string", "format": "uri" }
|
|
11149
|
+
"preferences_url": { "type": "string", "format": "uri" },
|
|
11150
|
+
"setup_reason": {
|
|
11151
|
+
"type": "string",
|
|
11152
|
+
"minLength": 1,
|
|
11153
|
+
"maxLength": 512,
|
|
11154
|
+
"description": "An actionable platform setup reason when the default shared email setup is missing, ambiguous or unavailable."
|
|
11155
|
+
}
|
|
11150
11156
|
},
|
|
11151
11157
|
"additionalProperties": false
|
|
11152
11158
|
},
|
|
@@ -11197,7 +11203,9 @@
|
|
|
11197
11203
|
"maxLength": 128
|
|
11198
11204
|
},
|
|
11199
11205
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
11200
|
-
"interaction": {
|
|
11206
|
+
"interaction": {
|
|
11207
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
11208
|
+
},
|
|
11201
11209
|
"purpose": {
|
|
11202
11210
|
"enum": ["service", "marketing"],
|
|
11203
11211
|
"default": "service",
|
|
@@ -12591,7 +12599,9 @@
|
|
|
12591
12599
|
"description": "The words a `subscriber_message` test sends, as plain text."
|
|
12592
12600
|
},
|
|
12593
12601
|
"content": { "$ref": "#/components/schemas/MessageContent" },
|
|
12594
|
-
"interaction": {
|
|
12602
|
+
"interaction": {
|
|
12603
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
12604
|
+
}
|
|
12595
12605
|
},
|
|
12596
12606
|
"allOf": [
|
|
12597
12607
|
{
|
|
@@ -15496,7 +15506,9 @@
|
|
|
15496
15506
|
"maxLength": 128
|
|
15497
15507
|
},
|
|
15498
15508
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
15499
|
-
"interaction": {
|
|
15509
|
+
"interaction": {
|
|
15510
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
15511
|
+
},
|
|
15500
15512
|
"purpose": {
|
|
15501
15513
|
"enum": ["service", "marketing"],
|
|
15502
15514
|
"default": "service",
|
|
@@ -16357,6 +16369,14 @@
|
|
|
16357
16369
|
],
|
|
16358
16370
|
"additionalProperties": false
|
|
16359
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
|
+
},
|
|
16360
16380
|
"InteractionRequest": {
|
|
16361
16381
|
"description": "A required-type tagged union. C0 supports confirm, single-select, and input only.",
|
|
16362
16382
|
"oneOf": [
|
|
@@ -18180,7 +18200,9 @@
|
|
|
18180
18200
|
"maxLength": 128
|
|
18181
18201
|
},
|
|
18182
18202
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
18183
|
-
"interaction": {
|
|
18203
|
+
"interaction": {
|
|
18204
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
18205
|
+
},
|
|
18184
18206
|
"purpose": {
|
|
18185
18207
|
"enum": ["service", "marketing"],
|
|
18186
18208
|
"default": "service",
|
|
@@ -18225,7 +18247,11 @@
|
|
|
18225
18247
|
"accepted_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18226
18248
|
"updated_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18227
18249
|
"expires_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18228
|
-
"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
|
+
}
|
|
18229
18255
|
},
|
|
18230
18256
|
"additionalProperties": false
|
|
18231
18257
|
},
|
|
@@ -18665,9 +18691,9 @@
|
|
|
18665
18691
|
"pattern": "^[^\\u0000-\\u001F\\u007F]+$",
|
|
18666
18692
|
"description": "Caller-owned opaque correlation returned as data, never treated as execution authority."
|
|
18667
18693
|
},
|
|
18668
|
-
"
|
|
18694
|
+
"ConfirmInteractionSendRequest": {
|
|
18669
18695
|
"type": "object",
|
|
18670
|
-
"required": ["type", "prompt"
|
|
18696
|
+
"required": ["type", "prompt"],
|
|
18671
18697
|
"properties": {
|
|
18672
18698
|
"type": { "const": "confirm" },
|
|
18673
18699
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
@@ -18679,13 +18705,22 @@
|
|
|
18679
18705
|
"deny_label": { "type": "string", "minLength": 1, "maxLength": 40 },
|
|
18680
18706
|
"expires_at": {
|
|
18681
18707
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18682
|
-
"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."
|
|
18683
18709
|
},
|
|
18684
18710
|
"correlation_id": {
|
|
18685
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)."
|
|
18686
18717
|
}
|
|
18687
18718
|
},
|
|
18688
|
-
"additionalProperties": false
|
|
18719
|
+
"additionalProperties": false,
|
|
18720
|
+
"not": {
|
|
18721
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18722
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18723
|
+
}
|
|
18689
18724
|
},
|
|
18690
18725
|
"InteractionOption": {
|
|
18691
18726
|
"type": "object",
|
|
@@ -18708,9 +18743,9 @@
|
|
|
18708
18743
|
},
|
|
18709
18744
|
"additionalProperties": false
|
|
18710
18745
|
},
|
|
18711
|
-
"
|
|
18746
|
+
"SelectInteractionSendRequest": {
|
|
18712
18747
|
"type": "object",
|
|
18713
|
-
"required": ["type", "prompt", "options"
|
|
18748
|
+
"required": ["type", "prompt", "options"],
|
|
18714
18749
|
"properties": {
|
|
18715
18750
|
"type": { "const": "select" },
|
|
18716
18751
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
@@ -18723,29 +18758,47 @@
|
|
|
18723
18758
|
},
|
|
18724
18759
|
"expires_at": {
|
|
18725
18760
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18726
|
-
"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."
|
|
18727
18762
|
},
|
|
18728
18763
|
"correlation_id": {
|
|
18729
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)."
|
|
18730
18770
|
}
|
|
18731
18771
|
},
|
|
18732
|
-
"additionalProperties": false
|
|
18772
|
+
"additionalProperties": false,
|
|
18773
|
+
"not": {
|
|
18774
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18775
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18776
|
+
}
|
|
18733
18777
|
},
|
|
18734
|
-
"
|
|
18778
|
+
"InputInteractionSendRequest": {
|
|
18735
18779
|
"type": "object",
|
|
18736
|
-
"required": ["type", "prompt"
|
|
18780
|
+
"required": ["type", "prompt"],
|
|
18737
18781
|
"properties": {
|
|
18738
18782
|
"type": { "const": "input" },
|
|
18739
18783
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
18740
18784
|
"expires_at": {
|
|
18741
18785
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18742
|
-
"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."
|
|
18743
18787
|
},
|
|
18744
18788
|
"correlation_id": {
|
|
18745
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)."
|
|
18746
18795
|
}
|
|
18747
18796
|
},
|
|
18748
|
-
"additionalProperties": false
|
|
18797
|
+
"additionalProperties": false,
|
|
18798
|
+
"not": {
|
|
18799
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18800
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18801
|
+
}
|
|
18749
18802
|
},
|
|
18750
18803
|
"HighestProvenProviderState": {
|
|
18751
18804
|
"type": "string",
|
|
@@ -20334,7 +20387,7 @@
|
|
|
20334
20387
|
"provider-capabilities-v1.schema": {
|
|
20335
20388
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
20336
20389
|
"$id": "https://whooshbang.flowxo.com/schemas/provider-capabilities-v1.schema.json",
|
|
20337
|
-
"x-contract-version": "2.
|
|
20390
|
+
"x-contract-version": "2.3.0",
|
|
20338
20391
|
"title": "ProviderCapabilitiesV1",
|
|
20339
20392
|
"description": "Provider-neutral, renderer-facing delivery and interaction capabilities with explicit degradation.",
|
|
20340
20393
|
"type": "object",
|
|
@@ -20595,6 +20648,67 @@
|
|
|
20595
20648
|
},
|
|
20596
20649
|
"additionalProperties": false
|
|
20597
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
|
+
},
|
|
20598
20712
|
"EmailBindingImportRow": {
|
|
20599
20713
|
"type": "object",
|
|
20600
20714
|
"required": ["subscriber_id", "notifier_id", "address", "consent"],
|
|
@@ -21054,5 +21168,5 @@
|
|
|
21054
21168
|
}
|
|
21055
21169
|
}
|
|
21056
21170
|
},
|
|
21057
|
-
"x-contract-version": "2.
|
|
21171
|
+
"x-contract-version": "2.3.0"
|
|
21058
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
|
}
|