@whooshbang/contracts 2.5.0 → 3.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 +13 -2
- package/README.md +21 -21
- package/contract-manifest.json +32 -33
- package/dist/generated/artifact-index.d.ts +34 -34
- package/dist/generated/artifact-index.js +32 -33
- package/dist/generated/artifact-index.js.map +1 -1
- package/dist/generated/interaction-v1.d.ts +77 -4
- package/dist/generated/validators-standalone.d.ts +492 -492
- package/dist/generated/validators-standalone.js +6405 -4572
- package/dist/generated/validators-standalone.js.map +1 -1
- package/dist/generated/validators.d.ts +2 -2
- package/dist/generated/validators.js +1 -0
- package/dist/generated/validators.js.map +1 -1
- package/dist/generated/whooshbang-v1.d.ts +526 -116
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/input-defaults.d.ts +7 -0
- package/dist/input-defaults.js +59 -0
- package/dist/input-defaults.js.map +1 -0
- package/dist/interaction-expiry.js +2 -1
- package/dist/interaction-expiry.js.map +1 -1
- package/fixtures/core-v1/fixture-index.json +1 -9
- package/fixtures/core-v1/problems/idempotency-key-required.json +2 -2
- 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 +1009 -302
- package/openapi/whooshbang-v1.yaml +455 -74
- 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 +192 -5
- 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 +410 -63
- package/fixtures/core-v1/problems/replay-unavailable-rollout.json +0 -16
|
@@ -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/whooshbang-v1.schema.json",
|
|
4
|
-
"x-contract-version": "
|
|
4
|
+
"x-contract-version": "3.0.0",
|
|
5
5
|
"title": "WhooshBangV1ContractDocument",
|
|
6
6
|
"description": "Public request, resource, summary, and Problem Details models for the WhooshBang V1 REST API.",
|
|
7
7
|
"anyOf": [
|
|
@@ -403,6 +403,15 @@
|
|
|
403
403
|
},
|
|
404
404
|
{
|
|
405
405
|
"$ref": "#/$defs/RedeemBillingPromotionRequest"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"$ref": "#/$defs/CanonicalCreateMessageRequest"
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"$ref": "#/$defs/CanonicalCreateGroupBroadcastRequest"
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"$ref": "#/$defs/CanonicalCreateOperatorMessageRequest"
|
|
406
415
|
}
|
|
407
416
|
],
|
|
408
417
|
"$defs": {
|
|
@@ -3724,7 +3733,7 @@
|
|
|
3724
3733
|
"maxItems": 50,
|
|
3725
3734
|
"uniqueItems": true,
|
|
3726
3735
|
"items": {
|
|
3727
|
-
"$ref": "#/$defs/
|
|
3736
|
+
"$ref": "#/$defs/GroupKey"
|
|
3728
3737
|
}
|
|
3729
3738
|
}
|
|
3730
3739
|
},
|
|
@@ -3815,7 +3824,7 @@
|
|
|
3815
3824
|
"uniqueItems": true,
|
|
3816
3825
|
"description": "The keys of the static groups this subscriber belongs to in the environment asked about. Present when one subscriber is read.",
|
|
3817
3826
|
"items": {
|
|
3818
|
-
"$ref": "#/$defs/
|
|
3827
|
+
"$ref": "#/$defs/GroupKey"
|
|
3819
3828
|
}
|
|
3820
3829
|
},
|
|
3821
3830
|
"last_activity_at": {
|
|
@@ -4049,10 +4058,10 @@
|
|
|
4049
4058
|
"CreateSubscriberGroupRequest": {
|
|
4050
4059
|
"type": "object",
|
|
4051
4060
|
"description": "Creates one static, developer-managed subscriber group.",
|
|
4052
|
-
"required": ["key"
|
|
4061
|
+
"required": ["key"],
|
|
4053
4062
|
"properties": {
|
|
4054
4063
|
"key": {
|
|
4055
|
-
"$ref": "#/$defs/
|
|
4064
|
+
"$ref": "#/$defs/GroupKey"
|
|
4056
4065
|
},
|
|
4057
4066
|
"display_name": {
|
|
4058
4067
|
"type": "string",
|
|
@@ -4069,8 +4078,8 @@
|
|
|
4069
4078
|
"UpdateSubscriberGroupRequest": {
|
|
4070
4079
|
"type": "object",
|
|
4071
4080
|
"description": "Renames or redescribes an active group. Its key and static membership model cannot change.",
|
|
4072
|
-
"required": [
|
|
4073
|
-
"minProperties":
|
|
4081
|
+
"required": [],
|
|
4082
|
+
"minProperties": 1,
|
|
4074
4083
|
"properties": {
|
|
4075
4084
|
"row_version": {
|
|
4076
4085
|
"type": "integer",
|
|
@@ -4086,7 +4095,21 @@
|
|
|
4086
4095
|
"maxLength": 500
|
|
4087
4096
|
}
|
|
4088
4097
|
},
|
|
4089
|
-
"additionalProperties": false
|
|
4098
|
+
"additionalProperties": false,
|
|
4099
|
+
"anyOf": [
|
|
4100
|
+
{
|
|
4101
|
+
"required": ["display_name"],
|
|
4102
|
+
"properties": {
|
|
4103
|
+
"display_name": {}
|
|
4104
|
+
}
|
|
4105
|
+
},
|
|
4106
|
+
{
|
|
4107
|
+
"required": ["description"],
|
|
4108
|
+
"properties": {
|
|
4109
|
+
"description": {}
|
|
4110
|
+
}
|
|
4111
|
+
}
|
|
4112
|
+
]
|
|
4090
4113
|
},
|
|
4091
4114
|
"SubscriberGroup": {
|
|
4092
4115
|
"type": "object",
|
|
@@ -4120,7 +4143,7 @@
|
|
|
4120
4143
|
"$ref": "#/$defs/Environment"
|
|
4121
4144
|
},
|
|
4122
4145
|
"key": {
|
|
4123
|
-
"$ref": "#/$defs/
|
|
4146
|
+
"$ref": "#/$defs/GroupKey"
|
|
4124
4147
|
},
|
|
4125
4148
|
"display_name": {
|
|
4126
4149
|
"type": "string",
|
|
@@ -4229,7 +4252,7 @@
|
|
|
4229
4252
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
4230
4253
|
},
|
|
4231
4254
|
"group_key": {
|
|
4232
|
-
"$ref": "#/$defs/
|
|
4255
|
+
"$ref": "#/$defs/GroupKey"
|
|
4233
4256
|
},
|
|
4234
4257
|
"subscriber_id": {
|
|
4235
4258
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -4306,7 +4329,7 @@
|
|
|
4306
4329
|
"required": ["group_key", "membership_revision", "items"],
|
|
4307
4330
|
"properties": {
|
|
4308
4331
|
"group_key": {
|
|
4309
|
-
"$ref": "#/$defs/
|
|
4332
|
+
"$ref": "#/$defs/GroupKey"
|
|
4310
4333
|
},
|
|
4311
4334
|
"membership_revision": {
|
|
4312
4335
|
"type": "integer",
|
|
@@ -4340,7 +4363,7 @@
|
|
|
4340
4363
|
"CreateGroupBroadcastRequest": {
|
|
4341
4364
|
"type": "object",
|
|
4342
4365
|
"description": "Creates one group broadcast using the existing ordinary message envelope. The group target comes only from the path.",
|
|
4343
|
-
"required": [
|
|
4366
|
+
"required": [],
|
|
4344
4367
|
"properties": {
|
|
4345
4368
|
"notifier_id": {
|
|
4346
4369
|
"allOf": [
|
|
@@ -4351,10 +4374,11 @@
|
|
|
4351
4374
|
"default": "default"
|
|
4352
4375
|
},
|
|
4353
4376
|
"content": {
|
|
4354
|
-
"$ref": "#/$defs/
|
|
4377
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
4355
4378
|
},
|
|
4356
4379
|
"expires_at": {
|
|
4357
|
-
"$ref": "#/$defs/Timestamp"
|
|
4380
|
+
"$ref": "#/$defs/Timestamp",
|
|
4381
|
+
"description": "Optional server-authoritative expiry after acceptance, through year 9999. Omit for 24 hours."
|
|
4358
4382
|
},
|
|
4359
4383
|
"correlation_id": {
|
|
4360
4384
|
"type": "string",
|
|
@@ -4373,7 +4397,31 @@
|
|
|
4373
4397
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
4374
4398
|
}
|
|
4375
4399
|
},
|
|
4376
|
-
"additionalProperties": false
|
|
4400
|
+
"additionalProperties": false,
|
|
4401
|
+
"allOf": [
|
|
4402
|
+
{
|
|
4403
|
+
"anyOf": [
|
|
4404
|
+
{
|
|
4405
|
+
"required": ["content"],
|
|
4406
|
+
"properties": {
|
|
4407
|
+
"content": {
|
|
4408
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
4409
|
+
}
|
|
4410
|
+
},
|
|
4411
|
+
"additionalProperties": true
|
|
4412
|
+
},
|
|
4413
|
+
{
|
|
4414
|
+
"required": ["interaction"],
|
|
4415
|
+
"properties": {
|
|
4416
|
+
"interaction": {
|
|
4417
|
+
"$ref": "interaction-v1.schema.json#/$defs/InteractionSendRequest"
|
|
4418
|
+
}
|
|
4419
|
+
},
|
|
4420
|
+
"additionalProperties": true
|
|
4421
|
+
}
|
|
4422
|
+
]
|
|
4423
|
+
}
|
|
4424
|
+
]
|
|
4377
4425
|
},
|
|
4378
4426
|
"BroadcastAggregate": {
|
|
4379
4427
|
"type": "object",
|
|
@@ -4464,7 +4512,7 @@
|
|
|
4464
4512
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
4465
4513
|
},
|
|
4466
4514
|
"group_key": {
|
|
4467
|
-
"$ref": "#/$defs/
|
|
4515
|
+
"$ref": "#/$defs/GroupKey"
|
|
4468
4516
|
},
|
|
4469
4517
|
"audience_revision": {
|
|
4470
4518
|
"type": "integer",
|
|
@@ -4499,7 +4547,7 @@
|
|
|
4499
4547
|
"CreateSubscriptionLinkRequest": {
|
|
4500
4548
|
"type": "object",
|
|
4501
4549
|
"description": "Creates one project- and environment-scoped, single-use authorization link.",
|
|
4502
|
-
"required": ["subscriber_id"
|
|
4550
|
+
"required": ["subscriber_id"],
|
|
4503
4551
|
"properties": {
|
|
4504
4552
|
"subscriber_id": {
|
|
4505
4553
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -4523,7 +4571,7 @@
|
|
|
4523
4571
|
},
|
|
4524
4572
|
"connection_id": {
|
|
4525
4573
|
"$ref": "#/$defs/OpaqueIdentifier",
|
|
4526
|
-
"description": "
|
|
4574
|
+
"description": "Optional exact connection. Otherwise the default or only compatible connection is used."
|
|
4527
4575
|
},
|
|
4528
4576
|
"address": {
|
|
4529
4577
|
"$ref": "#/$defs/EmailAddress",
|
|
@@ -4572,22 +4620,6 @@
|
|
|
4572
4620
|
}
|
|
4573
4621
|
}
|
|
4574
4622
|
}
|
|
4575
|
-
},
|
|
4576
|
-
{
|
|
4577
|
-
"if": {
|
|
4578
|
-
"properties": {
|
|
4579
|
-
"channels": {
|
|
4580
|
-
"const": ["slack"]
|
|
4581
|
-
}
|
|
4582
|
-
},
|
|
4583
|
-
"required": ["channels"]
|
|
4584
|
-
},
|
|
4585
|
-
"then": {
|
|
4586
|
-
"required": ["connection_id"],
|
|
4587
|
-
"properties": {
|
|
4588
|
-
"connection_id": {}
|
|
4589
|
-
}
|
|
4590
|
-
}
|
|
4591
4623
|
}
|
|
4592
4624
|
],
|
|
4593
4625
|
"additionalProperties": false
|
|
@@ -5078,7 +5110,7 @@
|
|
|
5078
5110
|
"CreateCustomerEndpointRequest": {
|
|
5079
5111
|
"type": "object",
|
|
5080
5112
|
"description": "Creates one project/environment endpoint. The service validates the final normalized destination and never returns it from health or diagnostic reads.",
|
|
5081
|
-
"required": ["url"
|
|
5113
|
+
"required": ["url"],
|
|
5082
5114
|
"properties": {
|
|
5083
5115
|
"url": {
|
|
5084
5116
|
"type": "string",
|
|
@@ -5106,12 +5138,13 @@
|
|
|
5106
5138
|
},
|
|
5107
5139
|
"RotateCustomerEndpointRequest": {
|
|
5108
5140
|
"type": "object",
|
|
5109
|
-
"required": [
|
|
5141
|
+
"required": [],
|
|
5110
5142
|
"properties": {
|
|
5111
5143
|
"overlap_seconds": {
|
|
5112
5144
|
"type": "integer",
|
|
5113
5145
|
"minimum": 60,
|
|
5114
|
-
"maximum": 86400
|
|
5146
|
+
"maximum": 86400,
|
|
5147
|
+
"default": 86400
|
|
5115
5148
|
}
|
|
5116
5149
|
},
|
|
5117
5150
|
"additionalProperties": false
|
|
@@ -5215,6 +5248,16 @@
|
|
|
5215
5248
|
},
|
|
5216
5249
|
"diagnostic_id": {
|
|
5217
5250
|
"$ref": "#/$defs/DiagnosticId"
|
|
5251
|
+
},
|
|
5252
|
+
"pause_reason": {
|
|
5253
|
+
"type": "string",
|
|
5254
|
+
"enum": ["customer", "sustained_failure", "probe_failed"]
|
|
5255
|
+
},
|
|
5256
|
+
"next_probe_at": {
|
|
5257
|
+
"$ref": "#/$defs/Timestamp"
|
|
5258
|
+
},
|
|
5259
|
+
"recovery_pending": {
|
|
5260
|
+
"type": "boolean"
|
|
5218
5261
|
}
|
|
5219
5262
|
},
|
|
5220
5263
|
"additionalProperties": false
|
|
@@ -5370,10 +5413,17 @@
|
|
|
5370
5413
|
"CreateMessageRequest": {
|
|
5371
5414
|
"type": "object",
|
|
5372
5415
|
"description": "Creates one logical message for one subscriber and one resolved channel binding.",
|
|
5373
|
-
"required": ["to"
|
|
5416
|
+
"required": ["to"],
|
|
5374
5417
|
"properties": {
|
|
5375
5418
|
"to": {
|
|
5376
|
-
"
|
|
5419
|
+
"oneOf": [
|
|
5420
|
+
{
|
|
5421
|
+
"$ref": "#/$defs/MessageTarget"
|
|
5422
|
+
},
|
|
5423
|
+
{
|
|
5424
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
5425
|
+
}
|
|
5426
|
+
]
|
|
5377
5427
|
},
|
|
5378
5428
|
"notifier_id": {
|
|
5379
5429
|
"allOf": [
|
|
@@ -5396,11 +5446,11 @@
|
|
|
5396
5446
|
"description": "Optional channel connection to send through, from the environment's connections. The subscriber must be connected through it; the service never substitutes another connection or provider. A connection the subscriber has not connected through is refused as `subscriber_not_connected` when they are connected through another, and as an unchosen send would be (`subscriber_unbound` or `preferred_binding_unavailable`) when no connected channel can take the message. Omitted, the service chooses: the subscriber's preferred channel when they set one, otherwise the default connection when they are connected there, otherwise the connection they connected through most recently. The accepted message's `binding.connection_id` records the connection used. Implies `delivery_target: connection`."
|
|
5397
5447
|
},
|
|
5398
5448
|
"content": {
|
|
5399
|
-
"$ref": "#/$defs/
|
|
5449
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
5400
5450
|
},
|
|
5401
5451
|
"expires_at": {
|
|
5402
5452
|
"$ref": "#/$defs/Timestamp",
|
|
5403
|
-
"description": "Optional server-authoritative expiry
|
|
5453
|
+
"description": "Optional server-authoritative expiry after acceptance, through year 9999. Omit for 24 hours."
|
|
5404
5454
|
},
|
|
5405
5455
|
"correlation_id": {
|
|
5406
5456
|
"type": "string",
|
|
@@ -5434,6 +5484,28 @@
|
|
|
5434
5484
|
}
|
|
5435
5485
|
}
|
|
5436
5486
|
}
|
|
5487
|
+
},
|
|
5488
|
+
{
|
|
5489
|
+
"anyOf": [
|
|
5490
|
+
{
|
|
5491
|
+
"required": ["content"],
|
|
5492
|
+
"properties": {
|
|
5493
|
+
"content": {
|
|
5494
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
5495
|
+
}
|
|
5496
|
+
},
|
|
5497
|
+
"additionalProperties": true
|
|
5498
|
+
},
|
|
5499
|
+
{
|
|
5500
|
+
"required": ["interaction"],
|
|
5501
|
+
"properties": {
|
|
5502
|
+
"interaction": {
|
|
5503
|
+
"$ref": "interaction-v1.schema.json#/$defs/InteractionSendRequest"
|
|
5504
|
+
}
|
|
5505
|
+
},
|
|
5506
|
+
"additionalProperties": true
|
|
5507
|
+
}
|
|
5508
|
+
]
|
|
5437
5509
|
}
|
|
5438
5510
|
],
|
|
5439
5511
|
"additionalProperties": false
|
|
@@ -6511,7 +6583,7 @@
|
|
|
6511
6583
|
"const": "https://whooshbang.flowxo.com/problems/idempotency_key_required"
|
|
6512
6584
|
},
|
|
6513
6585
|
"title": {
|
|
6514
|
-
"
|
|
6586
|
+
"enum": ["Invalid idempotency key", "Idempotency key required"]
|
|
6515
6587
|
},
|
|
6516
6588
|
"status": {
|
|
6517
6589
|
"const": 400
|
|
@@ -9606,21 +9678,14 @@
|
|
|
9606
9678
|
{
|
|
9607
9679
|
"type": "object",
|
|
9608
9680
|
"description": "Atomically create or resolve one subscriber and assert existing consent for an exact customer-owned email connection and domain. No verification message is sent. Revocation, suppression, recipient pause, holds and unhealthy authority take precedence. An omitted source is recorded as customer.",
|
|
9609
|
-
"required": [
|
|
9610
|
-
"subscriber_id",
|
|
9611
|
-
"notifier_id",
|
|
9612
|
-
"connection_id",
|
|
9613
|
-
"domain_id",
|
|
9614
|
-
"address",
|
|
9615
|
-
"consented",
|
|
9616
|
-
"consented_at"
|
|
9617
|
-
],
|
|
9681
|
+
"required": ["subscriber_id", "address", "consented", "consented_at"],
|
|
9618
9682
|
"properties": {
|
|
9619
9683
|
"subscriber_id": {
|
|
9620
9684
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9621
9685
|
},
|
|
9622
9686
|
"notifier_id": {
|
|
9623
|
-
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9687
|
+
"$ref": "#/$defs/OpaqueIdentifier",
|
|
9688
|
+
"default": "default"
|
|
9624
9689
|
},
|
|
9625
9690
|
"connection_id": {
|
|
9626
9691
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -9653,9 +9718,6 @@
|
|
|
9653
9718
|
"description": "Enroll an application-verified user for service email. This is relationship evidence, never consent or WhooshBang mailbox verification. An existing prior-consent binding with the same subscriber, address, notifier, connection and domain is reused with its original evidence and status.",
|
|
9654
9719
|
"required": [
|
|
9655
9720
|
"subscriber_id",
|
|
9656
|
-
"notifier_id",
|
|
9657
|
-
"connection_id",
|
|
9658
|
-
"domain_id",
|
|
9659
9721
|
"address",
|
|
9660
9722
|
"basis",
|
|
9661
9723
|
"source",
|
|
@@ -9666,7 +9728,8 @@
|
|
|
9666
9728
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9667
9729
|
},
|
|
9668
9730
|
"notifier_id": {
|
|
9669
|
-
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9731
|
+
"$ref": "#/$defs/OpaqueIdentifier",
|
|
9732
|
+
"default": "default"
|
|
9670
9733
|
},
|
|
9671
9734
|
"connection_id": {
|
|
9672
9735
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -9830,9 +9893,7 @@
|
|
|
9830
9893
|
"required": ["key", "count"],
|
|
9831
9894
|
"properties": {
|
|
9832
9895
|
"key": {
|
|
9833
|
-
"
|
|
9834
|
-
"minLength": 1,
|
|
9835
|
-
"maxLength": 128
|
|
9896
|
+
"$ref": "#/$defs/GroupKey"
|
|
9836
9897
|
},
|
|
9837
9898
|
"count": {
|
|
9838
9899
|
"type": "integer",
|
|
@@ -11744,7 +11805,7 @@
|
|
|
11744
11805
|
"CreateOperatorMessageRequest": {
|
|
11745
11806
|
"type": "object",
|
|
11746
11807
|
"description": "Send to a teammate by exact name or operator ID, or use me. Omitted recipient means the verified authenticated human only. Shared and service credentials must name a recipient. Preferred channel, service-email billing and marketing restrictions still apply.",
|
|
11747
|
-
"required": [
|
|
11808
|
+
"required": [],
|
|
11748
11809
|
"properties": {
|
|
11749
11810
|
"recipient": {
|
|
11750
11811
|
"type": "string",
|
|
@@ -11752,11 +11813,11 @@
|
|
|
11752
11813
|
"maxLength": 128
|
|
11753
11814
|
},
|
|
11754
11815
|
"content": {
|
|
11755
|
-
"$ref": "#/$defs/
|
|
11816
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
11756
11817
|
},
|
|
11757
11818
|
"expires_at": {
|
|
11758
11819
|
"$ref": "#/$defs/Timestamp",
|
|
11759
|
-
"description": "Optional server-authoritative expiry
|
|
11820
|
+
"description": "Optional server-authoritative expiry after acceptance, through year 9999. Omit for 24 hours."
|
|
11760
11821
|
},
|
|
11761
11822
|
"correlation_id": {
|
|
11762
11823
|
"type": "string",
|
|
@@ -11775,7 +11836,31 @@
|
|
|
11775
11836
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
11776
11837
|
}
|
|
11777
11838
|
},
|
|
11778
|
-
"additionalProperties": false
|
|
11839
|
+
"additionalProperties": false,
|
|
11840
|
+
"allOf": [
|
|
11841
|
+
{
|
|
11842
|
+
"anyOf": [
|
|
11843
|
+
{
|
|
11844
|
+
"required": ["content"],
|
|
11845
|
+
"properties": {
|
|
11846
|
+
"content": {
|
|
11847
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
11848
|
+
}
|
|
11849
|
+
},
|
|
11850
|
+
"additionalProperties": true
|
|
11851
|
+
},
|
|
11852
|
+
{
|
|
11853
|
+
"required": ["interaction"],
|
|
11854
|
+
"properties": {
|
|
11855
|
+
"interaction": {
|
|
11856
|
+
"$ref": "interaction-v1.schema.json#/$defs/InteractionSendRequest"
|
|
11857
|
+
}
|
|
11858
|
+
},
|
|
11859
|
+
"additionalProperties": true
|
|
11860
|
+
}
|
|
11861
|
+
]
|
|
11862
|
+
}
|
|
11863
|
+
]
|
|
11779
11864
|
},
|
|
11780
11865
|
"OperatorMessageResult": {
|
|
11781
11866
|
"type": "object",
|
|
@@ -12264,6 +12349,268 @@
|
|
|
12264
12349
|
}
|
|
12265
12350
|
},
|
|
12266
12351
|
"additionalProperties": false
|
|
12352
|
+
},
|
|
12353
|
+
"CanonicalCreateMessageRequest": {
|
|
12354
|
+
"type": "object",
|
|
12355
|
+
"description": "Creates one logical message for one subscriber and one resolved channel binding.",
|
|
12356
|
+
"required": ["to", "content"],
|
|
12357
|
+
"properties": {
|
|
12358
|
+
"to": {
|
|
12359
|
+
"$ref": "#/$defs/MessageTarget"
|
|
12360
|
+
},
|
|
12361
|
+
"notifier_id": {
|
|
12362
|
+
"allOf": [
|
|
12363
|
+
{
|
|
12364
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
12365
|
+
}
|
|
12366
|
+
],
|
|
12367
|
+
"default": "default"
|
|
12368
|
+
},
|
|
12369
|
+
"delivery_target": {
|
|
12370
|
+
"$ref": "#/$defs/MessageDeliveryTarget",
|
|
12371
|
+
"description": "Optional routing override. Simulator delivery and the reserved test: subscriber prefix are test-environment-only; live requests are refused with 400 request_invalid. Omit for connection delivery, or for the reserved test-environment simulator default."
|
|
12372
|
+
},
|
|
12373
|
+
"connection_id": {
|
|
12374
|
+
"allOf": [
|
|
12375
|
+
{
|
|
12376
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
12377
|
+
}
|
|
12378
|
+
],
|
|
12379
|
+
"description": "Optional channel connection to send through, from the environment's connections. The subscriber must be connected through it; the service never substitutes another connection or provider. A connection the subscriber has not connected through is refused as `subscriber_not_connected` when they are connected through another, and as an unchosen send would be (`subscriber_unbound` or `preferred_binding_unavailable`) when no connected channel can take the message. Omitted, the service chooses: the subscriber's preferred channel when they set one, otherwise the default connection when they are connected there, otherwise the connection they connected through most recently. The accepted message's `binding.connection_id` records the connection used. Implies `delivery_target: connection`."
|
|
12380
|
+
},
|
|
12381
|
+
"content": {
|
|
12382
|
+
"$ref": "#/$defs/MessageContent"
|
|
12383
|
+
},
|
|
12384
|
+
"expires_at": {
|
|
12385
|
+
"$ref": "#/$defs/Timestamp",
|
|
12386
|
+
"description": "Optional server-authoritative expiry within the representable range through year 9999 after acceptance."
|
|
12387
|
+
},
|
|
12388
|
+
"correlation_id": {
|
|
12389
|
+
"type": "string",
|
|
12390
|
+
"minLength": 1,
|
|
12391
|
+
"maxLength": 128
|
|
12392
|
+
},
|
|
12393
|
+
"metadata": {
|
|
12394
|
+
"$ref": "#/$defs/Metadata"
|
|
12395
|
+
},
|
|
12396
|
+
"interaction": {
|
|
12397
|
+
"$ref": "interaction-v1.schema.json#/$defs/CanonicalInteractionSendRequest"
|
|
12398
|
+
},
|
|
12399
|
+
"purpose": {
|
|
12400
|
+
"enum": ["service", "marketing"],
|
|
12401
|
+
"default": "service",
|
|
12402
|
+
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12403
|
+
}
|
|
12404
|
+
},
|
|
12405
|
+
"allOf": [
|
|
12406
|
+
{
|
|
12407
|
+
"if": {
|
|
12408
|
+
"required": ["connection_id"],
|
|
12409
|
+
"properties": {
|
|
12410
|
+
"connection_id": true
|
|
12411
|
+
}
|
|
12412
|
+
},
|
|
12413
|
+
"then": {
|
|
12414
|
+
"properties": {
|
|
12415
|
+
"delivery_target": {
|
|
12416
|
+
"const": "connection"
|
|
12417
|
+
}
|
|
12418
|
+
}
|
|
12419
|
+
}
|
|
12420
|
+
}
|
|
12421
|
+
],
|
|
12422
|
+
"additionalProperties": false
|
|
12423
|
+
},
|
|
12424
|
+
"CanonicalCreateGroupBroadcastRequest": {
|
|
12425
|
+
"type": "object",
|
|
12426
|
+
"description": "Creates one group broadcast using the existing ordinary message envelope. The group target comes only from the path.",
|
|
12427
|
+
"required": ["content"],
|
|
12428
|
+
"properties": {
|
|
12429
|
+
"notifier_id": {
|
|
12430
|
+
"allOf": [
|
|
12431
|
+
{
|
|
12432
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
12433
|
+
}
|
|
12434
|
+
],
|
|
12435
|
+
"default": "default"
|
|
12436
|
+
},
|
|
12437
|
+
"content": {
|
|
12438
|
+
"$ref": "#/$defs/MessageContent"
|
|
12439
|
+
},
|
|
12440
|
+
"expires_at": {
|
|
12441
|
+
"$ref": "#/$defs/Timestamp"
|
|
12442
|
+
},
|
|
12443
|
+
"correlation_id": {
|
|
12444
|
+
"type": "string",
|
|
12445
|
+
"minLength": 1,
|
|
12446
|
+
"maxLength": 128
|
|
12447
|
+
},
|
|
12448
|
+
"metadata": {
|
|
12449
|
+
"$ref": "#/$defs/Metadata"
|
|
12450
|
+
},
|
|
12451
|
+
"interaction": {
|
|
12452
|
+
"$ref": "interaction-v1.schema.json#/$defs/CanonicalInteractionSendRequest"
|
|
12453
|
+
},
|
|
12454
|
+
"purpose": {
|
|
12455
|
+
"enum": ["service", "marketing"],
|
|
12456
|
+
"default": "service",
|
|
12457
|
+
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12458
|
+
}
|
|
12459
|
+
},
|
|
12460
|
+
"additionalProperties": false
|
|
12461
|
+
},
|
|
12462
|
+
"CanonicalCreateOperatorMessageRequest": {
|
|
12463
|
+
"type": "object",
|
|
12464
|
+
"description": "Send to a teammate by exact name or operator ID, or use me. Omitted recipient means the verified authenticated human only. Shared and service credentials must name a recipient. Preferred channel, service-email billing and marketing restrictions still apply.",
|
|
12465
|
+
"required": ["content"],
|
|
12466
|
+
"properties": {
|
|
12467
|
+
"recipient": {
|
|
12468
|
+
"type": "string",
|
|
12469
|
+
"minLength": 1,
|
|
12470
|
+
"maxLength": 128
|
|
12471
|
+
},
|
|
12472
|
+
"content": {
|
|
12473
|
+
"$ref": "#/$defs/MessageContent"
|
|
12474
|
+
},
|
|
12475
|
+
"expires_at": {
|
|
12476
|
+
"$ref": "#/$defs/Timestamp",
|
|
12477
|
+
"description": "Optional server-authoritative expiry within the representable range through year 9999 after acceptance."
|
|
12478
|
+
},
|
|
12479
|
+
"correlation_id": {
|
|
12480
|
+
"type": "string",
|
|
12481
|
+
"minLength": 1,
|
|
12482
|
+
"maxLength": 128
|
|
12483
|
+
},
|
|
12484
|
+
"metadata": {
|
|
12485
|
+
"$ref": "#/$defs/Metadata"
|
|
12486
|
+
},
|
|
12487
|
+
"interaction": {
|
|
12488
|
+
"$ref": "interaction-v1.schema.json#/$defs/CanonicalInteractionSendRequest"
|
|
12489
|
+
},
|
|
12490
|
+
"purpose": {
|
|
12491
|
+
"enum": ["service", "marketing"],
|
|
12492
|
+
"default": "service",
|
|
12493
|
+
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12494
|
+
}
|
|
12495
|
+
},
|
|
12496
|
+
"additionalProperties": false
|
|
12497
|
+
},
|
|
12498
|
+
"MessageContentInput": {
|
|
12499
|
+
"oneOf": [
|
|
12500
|
+
{
|
|
12501
|
+
"type": "string",
|
|
12502
|
+
"minLength": 1,
|
|
12503
|
+
"maxLength": 8192,
|
|
12504
|
+
"x-max-utf8-bytes": 8192
|
|
12505
|
+
},
|
|
12506
|
+
{
|
|
12507
|
+
"$ref": "#/$defs/TextContentInput"
|
|
12508
|
+
},
|
|
12509
|
+
{
|
|
12510
|
+
"$ref": "#/$defs/DocumentContentInput"
|
|
12511
|
+
}
|
|
12512
|
+
]
|
|
12513
|
+
},
|
|
12514
|
+
"TextContentInput": {
|
|
12515
|
+
"type": "object",
|
|
12516
|
+
"required": ["text"],
|
|
12517
|
+
"properties": {
|
|
12518
|
+
"type": {
|
|
12519
|
+
"const": "text"
|
|
12520
|
+
},
|
|
12521
|
+
"format": {
|
|
12522
|
+
"type": "string",
|
|
12523
|
+
"enum": ["plain", "markdown"],
|
|
12524
|
+
"description": "Text format. Omitted means plain text. Markdown supports headings, paragraphs, emphasis, strong emphasis, code, lists, quotes and safe HTTP(S) links; raw HTML and remote images are never executed or fetched."
|
|
12525
|
+
},
|
|
12526
|
+
"text": {
|
|
12527
|
+
"description": "The complete notification content. This remains authoritative and sufficient when an adapter cannot render optional structure.",
|
|
12528
|
+
"type": "string",
|
|
12529
|
+
"minLength": 1,
|
|
12530
|
+
"maxLength": 8192,
|
|
12531
|
+
"x-max-utf8-bytes": 8192
|
|
12532
|
+
},
|
|
12533
|
+
"title": {
|
|
12534
|
+
"description": "An optional semantic title. The adapter chooses its native presentation.",
|
|
12535
|
+
"type": "string",
|
|
12536
|
+
"minLength": 1,
|
|
12537
|
+
"maxLength": 200,
|
|
12538
|
+
"x-max-utf8-bytes": 800
|
|
12539
|
+
},
|
|
12540
|
+
"sections": {
|
|
12541
|
+
"description": "Optional ordered semantic sections that enhance, but never replace, the complete text.",
|
|
12542
|
+
"type": "array",
|
|
12543
|
+
"minItems": 1,
|
|
12544
|
+
"maxItems": 12,
|
|
12545
|
+
"items": {
|
|
12546
|
+
"$ref": "#/$defs/StructuredTextSection"
|
|
12547
|
+
}
|
|
12548
|
+
},
|
|
12549
|
+
"image": {
|
|
12550
|
+
"$ref": "#/$defs/NotificationImageInput"
|
|
12551
|
+
}
|
|
12552
|
+
},
|
|
12553
|
+
"additionalProperties": false
|
|
12554
|
+
},
|
|
12555
|
+
"DocumentContentInput": {
|
|
12556
|
+
"description": "An authoritative ordered portable notification document that every delivery adapter renders faithfully.",
|
|
12557
|
+
"type": "object",
|
|
12558
|
+
"required": ["blocks"],
|
|
12559
|
+
"properties": {
|
|
12560
|
+
"type": {
|
|
12561
|
+
"const": "document"
|
|
12562
|
+
},
|
|
12563
|
+
"title": {
|
|
12564
|
+
"description": "An optional semantic document title. The adapter chooses its native presentation.",
|
|
12565
|
+
"type": "string",
|
|
12566
|
+
"minLength": 1,
|
|
12567
|
+
"maxLength": 200,
|
|
12568
|
+
"x-max-utf8-bytes": 800
|
|
12569
|
+
},
|
|
12570
|
+
"blocks": {
|
|
12571
|
+
"description": "The complete portable document in exact authored order.",
|
|
12572
|
+
"type": "array",
|
|
12573
|
+
"minItems": 1,
|
|
12574
|
+
"maxItems": 24,
|
|
12575
|
+
"items": {
|
|
12576
|
+
"$ref": "#/$defs/DocumentBlock"
|
|
12577
|
+
}
|
|
12578
|
+
},
|
|
12579
|
+
"image": {
|
|
12580
|
+
"$ref": "#/$defs/NotificationImageInput"
|
|
12581
|
+
}
|
|
12582
|
+
},
|
|
12583
|
+
"additionalProperties": false
|
|
12584
|
+
},
|
|
12585
|
+
"NotificationImageInput": {
|
|
12586
|
+
"type": "object",
|
|
12587
|
+
"description": "One optional provider-neutral illustrative image. The notification content remains complete without the pixels.",
|
|
12588
|
+
"required": ["asset_id"],
|
|
12589
|
+
"properties": {
|
|
12590
|
+
"asset_id": {
|
|
12591
|
+
"$ref": "#/$defs/NotificationImageAssetId"
|
|
12592
|
+
},
|
|
12593
|
+
"purpose": {
|
|
12594
|
+
"const": "illustration",
|
|
12595
|
+
"default": "illustration"
|
|
12596
|
+
},
|
|
12597
|
+
"description": {
|
|
12598
|
+
"type": "string",
|
|
12599
|
+
"minLength": 1,
|
|
12600
|
+
"maxLength": 1000,
|
|
12601
|
+
"pattern": "^(?=.*\\S)[^\\u0000-\\u001F\\u007F]+$",
|
|
12602
|
+
"x-max-utf8-bytes": 4000,
|
|
12603
|
+
"description": "Optional accessible description preserved by every adapter. Omit it for a decorative illustration; notification text must remain complete without the image."
|
|
12604
|
+
}
|
|
12605
|
+
},
|
|
12606
|
+
"additionalProperties": false
|
|
12607
|
+
},
|
|
12608
|
+
"GroupKey": {
|
|
12609
|
+
"type": "string",
|
|
12610
|
+
"minLength": 1,
|
|
12611
|
+
"maxLength": 63,
|
|
12612
|
+
"pattern": "^[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*$",
|
|
12613
|
+
"description": "A stable, case-sensitive subscriber group key. Existing keys are preserved exactly."
|
|
12267
12614
|
}
|
|
12268
12615
|
}
|
|
12269
12616
|
}
|