@whooshbang/contracts 3.2.0 → 4.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.
- package/CHANGELOG.md +10 -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 +1 -1
- package/dist/generated/machine-v1.d.ts +1 -1
- package/dist/generated/validators-standalone.d.ts +377 -378
- package/dist/generated/validators-standalone.js +5070 -4019
- package/dist/generated/validators-standalone.js.map +1 -1
- package/dist/generated/whooshbang-v1.d.ts +47 -18
- 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/fixtures/recipient-experience-v1/success/project-recipient-experience.json +2 -0
- package/openapi/generated/whooshbang-v1.bundle.json +137 -24
- package/openapi/whooshbang-v1.yaml +32 -3
- 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 +2 -2
- 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 +109 -22
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.1",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "WhooshBang API",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "4.0.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": {
|
|
@@ -103,6 +103,7 @@
|
|
|
103
103
|
"get": {
|
|
104
104
|
"operationId": "listMessageCategories",
|
|
105
105
|
"summary": "List project message categories",
|
|
106
|
+
"description": "By default, only current categories are listed. Include archived categories when offering a filter over historical messages.",
|
|
106
107
|
"tags": ["Message categories"],
|
|
107
108
|
"security": [
|
|
108
109
|
{ "clerkSession": [] },
|
|
@@ -110,6 +111,14 @@
|
|
|
110
111
|
{ "bearerCredential": [] }
|
|
111
112
|
],
|
|
112
113
|
"x-required-scopes": ["projects:read"],
|
|
114
|
+
"parameters": [
|
|
115
|
+
{
|
|
116
|
+
"in": "query",
|
|
117
|
+
"name": "include_archived",
|
|
118
|
+
"required": false,
|
|
119
|
+
"schema": { "type": "boolean", "default": false }
|
|
120
|
+
}
|
|
121
|
+
],
|
|
113
122
|
"responses": {
|
|
114
123
|
"200": {
|
|
115
124
|
"description": "Categories in this project.",
|
|
@@ -6899,6 +6908,8 @@
|
|
|
6899
6908
|
"accent_color": "#4F46E5",
|
|
6900
6909
|
"color_scheme": "system"
|
|
6901
6910
|
},
|
|
6911
|
+
"show_service_category_switches": true,
|
|
6912
|
+
"show_marketing_category_switches": true,
|
|
6902
6913
|
"row_version": 2,
|
|
6903
6914
|
"updated_at": "2026-08-22T18:00:00Z",
|
|
6904
6915
|
"diagnostic_id": "diag_n17_project_experience"
|
|
@@ -8939,7 +8950,7 @@
|
|
|
8939
8950
|
"get": {
|
|
8940
8951
|
"operationId": "listMessagesInEnvironment",
|
|
8941
8952
|
"summary": "List accepted messages with filters",
|
|
8942
|
-
"description": "
|
|
8953
|
+
"description": "Message history with a retained-content snippet. q searches retained text or an exact message or subscriber ID. After content expires, its message ID still finds it. Filters combine before pagination. accepted_after is inclusive; accepted_before is exclusive. Supply after or page, never both. after accepts the opaque next_after continuation; history intentionally has no total.",
|
|
8943
8954
|
"tags": ["Administration"],
|
|
8944
8955
|
"security": [
|
|
8945
8956
|
{ "clerkSession": [] },
|
|
@@ -8973,6 +8984,13 @@
|
|
|
8973
8984
|
"required": false,
|
|
8974
8985
|
"schema": { "$ref": "#/components/schemas/OpaqueIdentifier" }
|
|
8975
8986
|
},
|
|
8987
|
+
{
|
|
8988
|
+
"in": "query",
|
|
8989
|
+
"name": "q",
|
|
8990
|
+
"required": false,
|
|
8991
|
+
"description": "Search retained message text or an exact message or subscriber ID. Expired content is found by message ID only.",
|
|
8992
|
+
"schema": { "type": "string", "minLength": 1, "maxLength": 256 }
|
|
8993
|
+
},
|
|
8976
8994
|
{
|
|
8977
8995
|
"in": "query",
|
|
8978
8996
|
"name": "accepted_after",
|
|
@@ -8991,6 +9009,20 @@
|
|
|
8991
9009
|
"required": false,
|
|
8992
9010
|
"schema": { "$ref": "#/components/schemas/OpaqueIdentifier" }
|
|
8993
9011
|
},
|
|
9012
|
+
{
|
|
9013
|
+
"in": "query",
|
|
9014
|
+
"name": "category_key",
|
|
9015
|
+
"required": false,
|
|
9016
|
+
"description": "Match the category key captured when the message was accepted.",
|
|
9017
|
+
"schema": { "$ref": "#/components/schemas/MessageCategoryKey" }
|
|
9018
|
+
},
|
|
9019
|
+
{
|
|
9020
|
+
"in": "query",
|
|
9021
|
+
"name": "no_category",
|
|
9022
|
+
"required": false,
|
|
9023
|
+
"description": "Match messages accepted before categories were recorded. Cannot be true with category_key.",
|
|
9024
|
+
"schema": { "type": "boolean", "default": false }
|
|
9025
|
+
},
|
|
8994
9026
|
{
|
|
8995
9027
|
"in": "query",
|
|
8996
9028
|
"name": "state",
|
|
@@ -11993,7 +12025,16 @@
|
|
|
11993
12025
|
"purpose": { "enum": ["service", "marketing"] },
|
|
11994
12026
|
"level": { "enum": ["low", "normal", "high", "critical"] },
|
|
11995
12027
|
"can_turn_off": { "type": "boolean" },
|
|
11996
|
-
"is_default": { "type": "boolean" }
|
|
12028
|
+
"is_default": { "type": "boolean" },
|
|
12029
|
+
"opted_out_subscriber_count": {
|
|
12030
|
+
"type": "integer",
|
|
12031
|
+
"minimum": 0,
|
|
12032
|
+
"description": "Number of subscribers in this project who currently have this category switched off. Returned when listing a project's categories."
|
|
12033
|
+
},
|
|
12034
|
+
"archived_at": {
|
|
12035
|
+
"$ref": "#/components/schemas/Timestamp",
|
|
12036
|
+
"description": "Present only when this category has been archived. Historical messages retain their acceptance-time category snapshot."
|
|
12037
|
+
}
|
|
11997
12038
|
},
|
|
11998
12039
|
"additionalProperties": false
|
|
11999
12040
|
},
|
|
@@ -12003,7 +12044,6 @@
|
|
|
12003
12044
|
"properties": {
|
|
12004
12045
|
"items": {
|
|
12005
12046
|
"type": "array",
|
|
12006
|
-
"maxItems": 100,
|
|
12007
12047
|
"items": { "$ref": "#/components/schemas/MessageCategory" }
|
|
12008
12048
|
},
|
|
12009
12049
|
"total": { "$ref": "#/components/schemas/ListTotal" }
|
|
@@ -12403,6 +12443,7 @@
|
|
|
12403
12443
|
"dispatch_pending",
|
|
12404
12444
|
"queued",
|
|
12405
12445
|
"sending",
|
|
12446
|
+
"intake_pending",
|
|
12406
12447
|
"provider_accepted",
|
|
12407
12448
|
"retry_wait",
|
|
12408
12449
|
"terminal_failed",
|
|
@@ -12516,6 +12557,7 @@
|
|
|
12516
12557
|
"accepted",
|
|
12517
12558
|
"queued",
|
|
12518
12559
|
"attempt_started",
|
|
12560
|
+
"attempt_intake_pending",
|
|
12519
12561
|
"attempt_sent",
|
|
12520
12562
|
"attempt_retry_scheduled",
|
|
12521
12563
|
"attempt_could_not_send",
|
|
@@ -17125,6 +17167,7 @@
|
|
|
17125
17167
|
"dispatch_pending",
|
|
17126
17168
|
"queued",
|
|
17127
17169
|
"sending",
|
|
17170
|
+
"intake_pending",
|
|
17128
17171
|
"provider_accepted",
|
|
17129
17172
|
"cancelled",
|
|
17130
17173
|
"expired"
|
|
@@ -17194,6 +17237,32 @@
|
|
|
17194
17237
|
}
|
|
17195
17238
|
}
|
|
17196
17239
|
},
|
|
17240
|
+
{
|
|
17241
|
+
"if": {
|
|
17242
|
+
"type": "object",
|
|
17243
|
+
"properties": { "state": { "const": "intake_pending" } },
|
|
17244
|
+
"required": ["state"]
|
|
17245
|
+
},
|
|
17246
|
+
"then": {
|
|
17247
|
+
"type": "object",
|
|
17248
|
+
"properties": {
|
|
17249
|
+
"delivery": {
|
|
17250
|
+
"allOf": [
|
|
17251
|
+
{ "$ref": "#/components/schemas/DeliveryAttemptSummary" },
|
|
17252
|
+
{
|
|
17253
|
+
"type": "object",
|
|
17254
|
+
"properties": {
|
|
17255
|
+
"attempt_count": { "type": "integer", "minimum": 1 },
|
|
17256
|
+
"highest_proven_provider_state": { "const": "none" },
|
|
17257
|
+
"retry_scheduled": { "const": false },
|
|
17258
|
+
"classified_error": false
|
|
17259
|
+
}
|
|
17260
|
+
}
|
|
17261
|
+
]
|
|
17262
|
+
}
|
|
17263
|
+
}
|
|
17264
|
+
}
|
|
17265
|
+
},
|
|
17197
17266
|
{
|
|
17198
17267
|
"if": {
|
|
17199
17268
|
"type": "object",
|
|
@@ -17351,7 +17420,12 @@
|
|
|
17351
17420
|
"type": "object",
|
|
17352
17421
|
"properties": {
|
|
17353
17422
|
"state": {
|
|
17354
|
-
"enum": [
|
|
17423
|
+
"enum": [
|
|
17424
|
+
"sending",
|
|
17425
|
+
"intake_pending",
|
|
17426
|
+
"provider_accepted",
|
|
17427
|
+
"outcome_unknown"
|
|
17428
|
+
]
|
|
17355
17429
|
},
|
|
17356
17430
|
"cancellation_effective": { "type": "boolean" }
|
|
17357
17431
|
},
|
|
@@ -18379,6 +18453,10 @@
|
|
|
18379
18453
|
"type": "object",
|
|
18380
18454
|
"required": ["items", "total"],
|
|
18381
18455
|
"properties": {
|
|
18456
|
+
"managed_domain_available": {
|
|
18457
|
+
"type": "boolean",
|
|
18458
|
+
"description": "Whether this deployment is configured to offer service-managed custom-domain setup. False is a deployment capability, not a domain readiness verdict."
|
|
18459
|
+
},
|
|
18382
18460
|
"items": {
|
|
18383
18461
|
"type": "array",
|
|
18384
18462
|
"maxItems": 100,
|
|
@@ -18446,20 +18524,37 @@
|
|
|
18446
18524
|
"additionalProperties": false
|
|
18447
18525
|
},
|
|
18448
18526
|
"CreateEmailDomainRequest": {
|
|
18449
|
-
"
|
|
18450
|
-
"
|
|
18451
|
-
|
|
18452
|
-
|
|
18453
|
-
|
|
18454
|
-
"
|
|
18527
|
+
"description": "Creates or safely adopts an account-owned domain. Omit backend and installation_id for the default FlowXO Mail service. An existing legacy OAuth installation may still be selected by id.",
|
|
18528
|
+
"oneOf": [
|
|
18529
|
+
{
|
|
18530
|
+
"type": "object",
|
|
18531
|
+
"required": ["installation_id", "domain"],
|
|
18532
|
+
"properties": {
|
|
18533
|
+
"installation_id": {
|
|
18534
|
+
"$ref": "#/components/schemas/OpaqueIdentifier"
|
|
18535
|
+
},
|
|
18536
|
+
"domain": { "$ref": "#/components/schemas/EmailDomainName" },
|
|
18537
|
+
"tls": {
|
|
18538
|
+
"enum": ["opportunistic", "enforced"],
|
|
18539
|
+
"default": "opportunistic"
|
|
18540
|
+
}
|
|
18541
|
+
},
|
|
18542
|
+
"additionalProperties": false
|
|
18455
18543
|
},
|
|
18456
|
-
|
|
18457
|
-
|
|
18458
|
-
"
|
|
18459
|
-
"
|
|
18544
|
+
{
|
|
18545
|
+
"type": "object",
|
|
18546
|
+
"required": ["domain"],
|
|
18547
|
+
"properties": {
|
|
18548
|
+
"backend": { "const": "flowxo_mail" },
|
|
18549
|
+
"domain": { "$ref": "#/components/schemas/EmailDomainName" },
|
|
18550
|
+
"tls": {
|
|
18551
|
+
"enum": ["opportunistic", "enforced"],
|
|
18552
|
+
"default": "opportunistic"
|
|
18553
|
+
}
|
|
18554
|
+
},
|
|
18555
|
+
"additionalProperties": false
|
|
18460
18556
|
}
|
|
18461
|
-
|
|
18462
|
-
"additionalProperties": false
|
|
18557
|
+
]
|
|
18463
18558
|
},
|
|
18464
18559
|
"CreateEmailBindingImportRequest": {
|
|
18465
18560
|
"type": "object",
|
|
@@ -18550,11 +18645,13 @@
|
|
|
18550
18645
|
},
|
|
18551
18646
|
"ProjectRecipientExperience": {
|
|
18552
18647
|
"type": "object",
|
|
18553
|
-
"description": "The project-owned recipient identity, fallback locale,
|
|
18648
|
+
"description": "The project-owned recipient identity, fallback locale, email answer behavior, and category switch visibility. Email answers use one click when no setting has been saved.",
|
|
18554
18649
|
"required": [
|
|
18555
18650
|
"project_id",
|
|
18556
18651
|
"default_locale",
|
|
18557
18652
|
"brand",
|
|
18653
|
+
"show_service_category_switches",
|
|
18654
|
+
"show_marketing_category_switches",
|
|
18558
18655
|
"row_version",
|
|
18559
18656
|
"updated_at",
|
|
18560
18657
|
"diagnostic_id"
|
|
@@ -18570,6 +18667,14 @@
|
|
|
18570
18667
|
"enum": ["one_click", "confirm"],
|
|
18571
18668
|
"description": "How an email confirm or select button records its bound answer. Defaults to one_click for existing and new projects; free-text answers always use a form."
|
|
18572
18669
|
},
|
|
18670
|
+
"show_service_category_switches": {
|
|
18671
|
+
"type": "boolean",
|
|
18672
|
+
"description": "Whether subscriber settings show service category switches. A subscriber who already turned a category off still sees its switch. Defaults to true."
|
|
18673
|
+
},
|
|
18674
|
+
"show_marketing_category_switches": {
|
|
18675
|
+
"type": "boolean",
|
|
18676
|
+
"description": "Whether subscriber settings show marketing category switches. A subscriber who already turned a category off still sees its switch. Defaults to true."
|
|
18677
|
+
},
|
|
18573
18678
|
"row_version": { "type": "integer", "minimum": 1 },
|
|
18574
18679
|
"updated_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18575
18680
|
"diagnostic_id": { "$ref": "#/components/schemas/DiagnosticId" }
|
|
@@ -18704,8 +18809,8 @@
|
|
|
18704
18809
|
},
|
|
18705
18810
|
"UpdateProjectRecipientExperienceRequest": {
|
|
18706
18811
|
"type": "object",
|
|
18707
|
-
"description": "
|
|
18708
|
-
"required": ["
|
|
18812
|
+
"description": "Updates supplied project recipient settings under the last observed row version. Omitted fields keep their current values or project defaults.",
|
|
18813
|
+
"required": ["row_version"],
|
|
18709
18814
|
"properties": {
|
|
18710
18815
|
"default_locale": {
|
|
18711
18816
|
"$ref": "#/components/schemas/RecipientLanguage"
|
|
@@ -18716,6 +18821,14 @@
|
|
|
18716
18821
|
"enum": ["one_click", "confirm"],
|
|
18717
18822
|
"description": "Optional project-wide email answer behavior. Omission preserves the current value."
|
|
18718
18823
|
},
|
|
18824
|
+
"show_service_category_switches": {
|
|
18825
|
+
"type": "boolean",
|
|
18826
|
+
"description": "Show service category switches in subscriber settings. A subscriber who already turned a category off still sees its switch. Omit to keep the current value."
|
|
18827
|
+
},
|
|
18828
|
+
"show_marketing_category_switches": {
|
|
18829
|
+
"type": "boolean",
|
|
18830
|
+
"description": "Show marketing category switches in subscriber settings. A subscriber who already turned a category off still sees its switch. Omit to keep the current value."
|
|
18831
|
+
},
|
|
18719
18832
|
"row_version": { "type": "integer", "minimum": 1 }
|
|
18720
18833
|
},
|
|
18721
18834
|
"additionalProperties": false
|
|
@@ -20844,7 +20957,7 @@
|
|
|
20844
20957
|
"additionalProperties": false
|
|
20845
20958
|
},
|
|
20846
20959
|
"EmailDnsRecord": {
|
|
20847
|
-
"description": "One exact neutral DNS record. `name`
|
|
20960
|
+
"description": "One exact neutral DNS record. `name` and `value` are preserved exactly as supplied; a record name may be relative to the registrable domain or a full hostname. DNS consoles differ in whether they append the zone automatically.",
|
|
20848
20961
|
"oneOf": [
|
|
20849
20962
|
{
|
|
20850
20963
|
"type": "object",
|
|
@@ -21144,7 +21257,7 @@
|
|
|
21144
21257
|
"binding_id": { "$ref": "#/components/schemas/OpaqueIdentifier-2" },
|
|
21145
21258
|
"channel": {
|
|
21146
21259
|
"type": "string",
|
|
21147
|
-
"enum": ["telegram"],
|
|
21260
|
+
"enum": ["telegram", "email"],
|
|
21148
21261
|
"description": "Which channel the person answered on. An enum rather than a fixed value, so that a second channel adds a member instead of changing the type every generated client holds. The vocabulary grows additively; a consumer that meets a member it does not know should treat the answer as valid and the channel as unfamiliar rather than refusing it."
|
|
21149
21262
|
},
|
|
21150
21263
|
"conversation_kind": {
|
|
@@ -22068,7 +22181,7 @@
|
|
|
22068
22181
|
"provider-capabilities-v1.schema": {
|
|
22069
22182
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
22070
22183
|
"$id": "https://whooshbang.flowxo.com/schemas/provider-capabilities-v1.schema.json",
|
|
22071
|
-
"x-contract-version": "
|
|
22184
|
+
"x-contract-version": "4.0.0",
|
|
22072
22185
|
"title": "ProviderCapabilitiesV1",
|
|
22073
22186
|
"description": "Provider-neutral, renderer-facing delivery and interaction capabilities with explicit degradation.",
|
|
22074
22187
|
"type": "object",
|
|
@@ -22870,5 +22983,5 @@
|
|
|
22870
22983
|
}
|
|
22871
22984
|
}
|
|
22872
22985
|
},
|
|
22873
|
-
"x-contract-version": "
|
|
22986
|
+
"x-contract-version": "4.0.0"
|
|
22874
22987
|
}
|
|
@@ -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:
|
|
4
|
+
x-contract-version: 4.0.0
|
|
5
5
|
info:
|
|
6
6
|
title: WhooshBang API
|
|
7
|
-
version:
|
|
7
|
+
version: 4.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
|
|
@@ -80,12 +80,20 @@ paths:
|
|
|
80
80
|
get:
|
|
81
81
|
operationId: listMessageCategories
|
|
82
82
|
summary: List project message categories
|
|
83
|
+
description: By default, only current categories are listed. Include archived categories when offering a filter over historical messages.
|
|
83
84
|
tags: [Message categories]
|
|
84
85
|
security:
|
|
85
86
|
- clerkSession: []
|
|
86
87
|
- bearerGrant: []
|
|
87
88
|
- bearerCredential: []
|
|
88
89
|
x-required-scopes: [projects:read]
|
|
90
|
+
parameters:
|
|
91
|
+
- in: query
|
|
92
|
+
name: include_archived
|
|
93
|
+
required: false
|
|
94
|
+
schema:
|
|
95
|
+
type: boolean
|
|
96
|
+
default: false
|
|
89
97
|
responses:
|
|
90
98
|
"200":
|
|
91
99
|
description: Categories in this project.
|
|
@@ -6882,7 +6890,7 @@ paths:
|
|
|
6882
6890
|
get:
|
|
6883
6891
|
operationId: listMessagesInEnvironment
|
|
6884
6892
|
summary: List accepted messages with filters
|
|
6885
|
-
description: "
|
|
6893
|
+
description: "Message history with a retained-content snippet. q searches retained text or an exact message or subscriber ID. After content expires, its message ID still finds it. Filters combine before pagination. accepted_after is inclusive; accepted_before is exclusive. Supply after or page, never both. after accepts the opaque next_after continuation; history intentionally has no total."
|
|
6886
6894
|
tags: [Administration]
|
|
6887
6895
|
security:
|
|
6888
6896
|
- clerkSession: []
|
|
@@ -6913,6 +6921,14 @@ paths:
|
|
|
6913
6921
|
required: false
|
|
6914
6922
|
schema:
|
|
6915
6923
|
$ref: "#/components/schemas/OpaqueIdentifier"
|
|
6924
|
+
- in: query
|
|
6925
|
+
name: q
|
|
6926
|
+
required: false
|
|
6927
|
+
description: Search retained message text or an exact message or subscriber ID. Expired content is found by message ID only.
|
|
6928
|
+
schema:
|
|
6929
|
+
type: string
|
|
6930
|
+
minLength: 1
|
|
6931
|
+
maxLength: 256
|
|
6916
6932
|
- in: query
|
|
6917
6933
|
name: accepted_after
|
|
6918
6934
|
required: false
|
|
@@ -6928,6 +6944,19 @@ paths:
|
|
|
6928
6944
|
required: false
|
|
6929
6945
|
schema:
|
|
6930
6946
|
$ref: "#/components/schemas/OpaqueIdentifier"
|
|
6947
|
+
- in: query
|
|
6948
|
+
name: category_key
|
|
6949
|
+
required: false
|
|
6950
|
+
description: Match the category key captured when the message was accepted.
|
|
6951
|
+
schema:
|
|
6952
|
+
$ref: "#/components/schemas/MessageCategoryKey"
|
|
6953
|
+
- in: query
|
|
6954
|
+
name: no_category
|
|
6955
|
+
required: false
|
|
6956
|
+
description: Match messages accepted before categories were recorded. Cannot be true with category_key.
|
|
6957
|
+
schema:
|
|
6958
|
+
type: boolean
|
|
6959
|
+
default: false
|
|
6931
6960
|
- in: query
|
|
6932
6961
|
name: state
|
|
6933
6962
|
required: false
|
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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.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": "
|
|
4
|
+
"x-contract-version": "4.0.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": "
|
|
4
|
+
"x-contract-version": "4.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",
|
|
@@ -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": "
|
|
4
|
+
"x-contract-version": "4.0.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,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-v1.schema.json",
|
|
4
|
-
"x-contract-version": "
|
|
4
|
+
"x-contract-version": "4.0.0",
|
|
5
5
|
"title": "InteractionV1ContractDocument",
|
|
6
6
|
"description": "Provider-neutral confirm, single-select, input, lifecycle, callback-token, and authenticated answer-event contracts.",
|
|
7
7
|
"$defs": {
|
|
@@ -369,7 +369,7 @@
|
|
|
369
369
|
},
|
|
370
370
|
"channel": {
|
|
371
371
|
"type": "string",
|
|
372
|
-
"enum": ["telegram"],
|
|
372
|
+
"enum": ["telegram", "email"],
|
|
373
373
|
"description": "Which channel the person answered on. An enum rather than a fixed value, so that a second channel adds a member instead of changing the type every generated client holds. The vocabulary grows additively; a consumer that meets a member it does not know should treat the answer as valid and the channel as unfamiliar rather than refusing it."
|
|
374
374
|
},
|
|
375
375
|
"conversation_kind": {
|
|
@@ -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": "
|
|
4
|
+
"x-contract-version": "4.0.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": [
|
|
@@ -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/provider-capabilities-v1.schema.json",
|
|
4
|
-
"x-contract-version": "
|
|
4
|
+
"x-contract-version": "4.0.0",
|
|
5
5
|
"title": "ProviderCapabilitiesV1",
|
|
6
6
|
"description": "Provider-neutral, renderer-facing delivery and interaction capabilities with explicit degradation.",
|
|
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/webhooks/webhook-delivery-case-v1.schema.json",
|
|
4
|
-
"x-contract-version": "
|
|
4
|
+
"x-contract-version": "4.0.0",
|
|
5
5
|
"title": "WebhookDeliveryCaseSetV1",
|
|
6
6
|
"description": "Deterministic customer webhook response classification, Retry-After, and delivery-bound cases.",
|
|
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/webhooks/webhook-signing-vector-v1.schema.json",
|
|
4
|
-
"x-contract-version": "
|
|
4
|
+
"x-contract-version": "4.0.0",
|
|
5
5
|
"title": "WebhookSigningVectorSetV1",
|
|
6
6
|
"description": "Language-neutral deterministic Standard Webhooks V1 verification vectors. All key material is public synthetic test data and must never be used outside fixtures.",
|
|
7
7
|
"type": "object",
|