@whooshbang/contracts 3.1.0 → 3.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 +11 -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/validators-standalone.d.ts +582 -491
- package/dist/generated/validators-standalone.js +9597 -4634
- package/dist/generated/validators-standalone.js.map +1 -1
- package/dist/generated/validators.d.ts +8 -1
- package/dist/generated/validators.js +8 -1
- package/dist/generated/validators.js.map +1 -1
- package/dist/generated/whooshbang-v1.d.ts +147 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/input-defaults.d.ts +1 -1
- package/dist/input-defaults.js.map +1 -1
- 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 +582 -19
- package/openapi/whooshbang-v1.yaml +281 -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 +1 -1
- 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 +288 -11
|
@@ -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": "3.
|
|
4
|
+
"x-contract-version": "3.3.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": [
|
|
@@ -110,6 +110,27 @@
|
|
|
110
110
|
{
|
|
111
111
|
"$ref": "#/$defs/CreateMessageRequest"
|
|
112
112
|
},
|
|
113
|
+
{
|
|
114
|
+
"$ref": "#/$defs/MessageCategory"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"$ref": "#/$defs/MessageCategoryCollection"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"$ref": "#/$defs/CreateMessageCategoryRequest"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"$ref": "#/$defs/UpdateMessageCategoryRequest"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"$ref": "#/$defs/SubscriberCategoryPreference"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"$ref": "#/$defs/SubscriberCategoryPreferenceCollection"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"$ref": "#/$defs/SetSubscriberCategoryPreferenceRequest"
|
|
133
|
+
},
|
|
113
134
|
{
|
|
114
135
|
"$ref": "#/$defs/Message"
|
|
115
136
|
},
|
|
@@ -2967,11 +2988,13 @@
|
|
|
2967
2988
|
},
|
|
2968
2989
|
"ProjectRecipientExperience": {
|
|
2969
2990
|
"type": "object",
|
|
2970
|
-
"description": "The project-owned recipient identity, fallback locale,
|
|
2991
|
+
"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.",
|
|
2971
2992
|
"required": [
|
|
2972
2993
|
"project_id",
|
|
2973
2994
|
"default_locale",
|
|
2974
2995
|
"brand",
|
|
2996
|
+
"show_service_category_switches",
|
|
2997
|
+
"show_marketing_category_switches",
|
|
2975
2998
|
"row_version",
|
|
2976
2999
|
"updated_at",
|
|
2977
3000
|
"diagnostic_id"
|
|
@@ -2991,6 +3014,14 @@
|
|
|
2991
3014
|
"enum": ["one_click", "confirm"],
|
|
2992
3015
|
"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."
|
|
2993
3016
|
},
|
|
3017
|
+
"show_service_category_switches": {
|
|
3018
|
+
"type": "boolean",
|
|
3019
|
+
"description": "Whether subscriber settings show service category switches. A subscriber who already turned a category off still sees its switch. Defaults to true."
|
|
3020
|
+
},
|
|
3021
|
+
"show_marketing_category_switches": {
|
|
3022
|
+
"type": "boolean",
|
|
3023
|
+
"description": "Whether subscriber settings show marketing category switches. A subscriber who already turned a category off still sees its switch. Defaults to true."
|
|
3024
|
+
},
|
|
2994
3025
|
"row_version": {
|
|
2995
3026
|
"type": "integer",
|
|
2996
3027
|
"minimum": 1
|
|
@@ -3006,8 +3037,8 @@
|
|
|
3006
3037
|
},
|
|
3007
3038
|
"UpdateProjectRecipientExperienceRequest": {
|
|
3008
3039
|
"type": "object",
|
|
3009
|
-
"description": "
|
|
3010
|
-
"required": ["
|
|
3040
|
+
"description": "Updates supplied project recipient settings under the last observed row version. Omitted fields keep their current values or project defaults.",
|
|
3041
|
+
"required": ["row_version"],
|
|
3011
3042
|
"properties": {
|
|
3012
3043
|
"default_locale": {
|
|
3013
3044
|
"$ref": "#/$defs/RecipientLanguage"
|
|
@@ -3020,6 +3051,14 @@
|
|
|
3020
3051
|
"enum": ["one_click", "confirm"],
|
|
3021
3052
|
"description": "Optional project-wide email answer behavior. Omission preserves the current value."
|
|
3022
3053
|
},
|
|
3054
|
+
"show_service_category_switches": {
|
|
3055
|
+
"type": "boolean",
|
|
3056
|
+
"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."
|
|
3057
|
+
},
|
|
3058
|
+
"show_marketing_category_switches": {
|
|
3059
|
+
"type": "boolean",
|
|
3060
|
+
"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."
|
|
3061
|
+
},
|
|
3023
3062
|
"row_version": {
|
|
3024
3063
|
"type": "integer",
|
|
3025
3064
|
"minimum": 1
|
|
@@ -4400,6 +4439,10 @@
|
|
|
4400
4439
|
"enum": ["service", "marketing"],
|
|
4401
4440
|
"default": "service",
|
|
4402
4441
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
4442
|
+
},
|
|
4443
|
+
"category_key": {
|
|
4444
|
+
"$ref": "#/$defs/MessageCategoryKey",
|
|
4445
|
+
"description": "Optional project category. Omitted service sends use Updates; omitted marketing sends use Marketing."
|
|
4403
4446
|
}
|
|
4404
4447
|
},
|
|
4405
4448
|
"additionalProperties": false,
|
|
@@ -5415,6 +5458,144 @@
|
|
|
5415
5458
|
"additionalProperties": false,
|
|
5416
5459
|
"description": "Exact signed request bytes. A verifier echoes these exact bytes with valid webhook headers to prove it possesses the endpoint secret."
|
|
5417
5460
|
},
|
|
5461
|
+
"MessageCategoryKey": {
|
|
5462
|
+
"type": "string",
|
|
5463
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
|
|
5464
|
+
"minLength": 1,
|
|
5465
|
+
"maxLength": 63
|
|
5466
|
+
},
|
|
5467
|
+
"MessageCategorySnapshot": {
|
|
5468
|
+
"type": "object",
|
|
5469
|
+
"description": "The category settings recorded when the message was accepted.",
|
|
5470
|
+
"required": ["key", "name", "purpose", "level", "can_turn_off"],
|
|
5471
|
+
"properties": {
|
|
5472
|
+
"key": { "$ref": "#/$defs/MessageCategoryKey" },
|
|
5473
|
+
"name": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
5474
|
+
"purpose": { "enum": ["service", "marketing"] },
|
|
5475
|
+
"level": { "enum": ["low", "normal", "high", "critical"] },
|
|
5476
|
+
"can_turn_off": { "type": "boolean" }
|
|
5477
|
+
},
|
|
5478
|
+
"additionalProperties": false
|
|
5479
|
+
},
|
|
5480
|
+
"MessageCategory": {
|
|
5481
|
+
"type": "object",
|
|
5482
|
+
"description": "One project-owned category. Its key stays stable when settings change.",
|
|
5483
|
+
"required": [
|
|
5484
|
+
"key",
|
|
5485
|
+
"name",
|
|
5486
|
+
"description",
|
|
5487
|
+
"purpose",
|
|
5488
|
+
"level",
|
|
5489
|
+
"can_turn_off",
|
|
5490
|
+
"is_default"
|
|
5491
|
+
],
|
|
5492
|
+
"properties": {
|
|
5493
|
+
"key": { "$ref": "#/$defs/MessageCategoryKey" },
|
|
5494
|
+
"name": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
5495
|
+
"description": { "type": "string", "minLength": 1, "maxLength": 160 },
|
|
5496
|
+
"purpose": { "enum": ["service", "marketing"] },
|
|
5497
|
+
"level": { "enum": ["low", "normal", "high", "critical"] },
|
|
5498
|
+
"can_turn_off": { "type": "boolean" },
|
|
5499
|
+
"is_default": { "type": "boolean" },
|
|
5500
|
+
"opted_out_subscriber_count": {
|
|
5501
|
+
"type": "integer",
|
|
5502
|
+
"minimum": 0,
|
|
5503
|
+
"description": "Number of subscribers in this project who currently have this category switched off. Returned when listing a project's categories."
|
|
5504
|
+
},
|
|
5505
|
+
"archived_at": {
|
|
5506
|
+
"$ref": "#/$defs/Timestamp",
|
|
5507
|
+
"description": "Present only when this category has been archived. Historical messages retain their acceptance-time category snapshot."
|
|
5508
|
+
}
|
|
5509
|
+
},
|
|
5510
|
+
"additionalProperties": false
|
|
5511
|
+
},
|
|
5512
|
+
"MessageCategoryCollection": {
|
|
5513
|
+
"type": "object",
|
|
5514
|
+
"required": ["items", "total"],
|
|
5515
|
+
"properties": {
|
|
5516
|
+
"items": {
|
|
5517
|
+
"type": "array",
|
|
5518
|
+
"items": { "$ref": "#/$defs/MessageCategory" }
|
|
5519
|
+
},
|
|
5520
|
+
"total": { "$ref": "#/$defs/ListTotal" }
|
|
5521
|
+
},
|
|
5522
|
+
"additionalProperties": false
|
|
5523
|
+
},
|
|
5524
|
+
"CreateMessageCategoryRequest": {
|
|
5525
|
+
"type": "object",
|
|
5526
|
+
"required": [
|
|
5527
|
+
"key",
|
|
5528
|
+
"name",
|
|
5529
|
+
"description",
|
|
5530
|
+
"purpose",
|
|
5531
|
+
"level",
|
|
5532
|
+
"can_turn_off"
|
|
5533
|
+
],
|
|
5534
|
+
"properties": {
|
|
5535
|
+
"key": { "$ref": "#/$defs/MessageCategoryKey" },
|
|
5536
|
+
"name": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
5537
|
+
"description": { "type": "string", "minLength": 1, "maxLength": 160 },
|
|
5538
|
+
"purpose": { "enum": ["service", "marketing"] },
|
|
5539
|
+
"level": { "enum": ["low", "normal", "high", "critical"] },
|
|
5540
|
+
"can_turn_off": { "type": "boolean" }
|
|
5541
|
+
},
|
|
5542
|
+
"additionalProperties": false
|
|
5543
|
+
},
|
|
5544
|
+
"UpdateMessageCategoryRequest": {
|
|
5545
|
+
"type": "object",
|
|
5546
|
+
"minProperties": 1,
|
|
5547
|
+
"properties": {
|
|
5548
|
+
"name": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
5549
|
+
"description": { "type": "string", "minLength": 1, "maxLength": 160 },
|
|
5550
|
+
"purpose": { "enum": ["service", "marketing"] },
|
|
5551
|
+
"level": { "enum": ["low", "normal", "high", "critical"] },
|
|
5552
|
+
"can_turn_off": { "type": "boolean" }
|
|
5553
|
+
},
|
|
5554
|
+
"additionalProperties": false
|
|
5555
|
+
},
|
|
5556
|
+
"SubscriberCategoryPreference": {
|
|
5557
|
+
"type": "object",
|
|
5558
|
+
"required": [
|
|
5559
|
+
"key",
|
|
5560
|
+
"name",
|
|
5561
|
+
"description",
|
|
5562
|
+
"purpose",
|
|
5563
|
+
"level",
|
|
5564
|
+
"can_turn_off",
|
|
5565
|
+
"is_default",
|
|
5566
|
+
"enabled"
|
|
5567
|
+
],
|
|
5568
|
+
"properties": {
|
|
5569
|
+
"key": { "$ref": "#/$defs/MessageCategoryKey" },
|
|
5570
|
+
"name": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
5571
|
+
"description": { "type": "string", "minLength": 1, "maxLength": 160 },
|
|
5572
|
+
"purpose": { "enum": ["service", "marketing"] },
|
|
5573
|
+
"level": { "enum": ["low", "normal", "high", "critical"] },
|
|
5574
|
+
"can_turn_off": { "type": "boolean" },
|
|
5575
|
+
"is_default": { "type": "boolean" },
|
|
5576
|
+
"enabled": { "type": "boolean" }
|
|
5577
|
+
},
|
|
5578
|
+
"additionalProperties": false
|
|
5579
|
+
},
|
|
5580
|
+
"SubscriberCategoryPreferenceCollection": {
|
|
5581
|
+
"type": "object",
|
|
5582
|
+
"required": ["items", "total"],
|
|
5583
|
+
"properties": {
|
|
5584
|
+
"items": {
|
|
5585
|
+
"type": "array",
|
|
5586
|
+
"maxItems": 100,
|
|
5587
|
+
"items": { "$ref": "#/$defs/SubscriberCategoryPreference" }
|
|
5588
|
+
},
|
|
5589
|
+
"total": { "$ref": "#/$defs/ListTotal" }
|
|
5590
|
+
},
|
|
5591
|
+
"additionalProperties": false
|
|
5592
|
+
},
|
|
5593
|
+
"SetSubscriberCategoryPreferenceRequest": {
|
|
5594
|
+
"type": "object",
|
|
5595
|
+
"required": ["enabled"],
|
|
5596
|
+
"properties": { "enabled": { "type": "boolean" } },
|
|
5597
|
+
"additionalProperties": false
|
|
5598
|
+
},
|
|
5418
5599
|
"CreateMessageRequest": {
|
|
5419
5600
|
"type": "object",
|
|
5420
5601
|
"description": "Creates one logical message for one subscriber and one resolved channel binding.",
|
|
@@ -5472,6 +5653,10 @@
|
|
|
5472
5653
|
"enum": ["service", "marketing"],
|
|
5473
5654
|
"default": "service",
|
|
5474
5655
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
5656
|
+
},
|
|
5657
|
+
"category_key": {
|
|
5658
|
+
"$ref": "#/$defs/MessageCategoryKey",
|
|
5659
|
+
"description": "Optional project category. Omitted service sends use Updates; omitted marketing sends use Marketing."
|
|
5475
5660
|
}
|
|
5476
5661
|
},
|
|
5477
5662
|
"allOf": [
|
|
@@ -5664,6 +5849,10 @@
|
|
|
5664
5849
|
"notifier_id": {
|
|
5665
5850
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
5666
5851
|
},
|
|
5852
|
+
"category": {
|
|
5853
|
+
"$ref": "#/$defs/MessageCategorySnapshot",
|
|
5854
|
+
"description": "Category as accepted. Absent on messages accepted before categories existed."
|
|
5855
|
+
},
|
|
5667
5856
|
"binding": {
|
|
5668
5857
|
"$ref": "#/$defs/BindingSummary"
|
|
5669
5858
|
},
|
|
@@ -5999,10 +6188,6 @@
|
|
|
5999
6188
|
"type": "object",
|
|
6000
6189
|
"required": ["classified_error"],
|
|
6001
6190
|
"properties": {
|
|
6002
|
-
"attempt_count": {
|
|
6003
|
-
"type": "integer",
|
|
6004
|
-
"minimum": 1
|
|
6005
|
-
},
|
|
6006
6191
|
"classified_error": {
|
|
6007
6192
|
"allOf": [
|
|
6008
6193
|
{
|
|
@@ -6014,7 +6199,8 @@
|
|
|
6014
6199
|
"code": {
|
|
6015
6200
|
"enum": [
|
|
6016
6201
|
"provider_terminal",
|
|
6017
|
-
"not_consented_for_marketing"
|
|
6202
|
+
"not_consented_for_marketing",
|
|
6203
|
+
"category_turned_off"
|
|
6018
6204
|
]
|
|
6019
6205
|
},
|
|
6020
6206
|
"retryable": {
|
|
@@ -6024,7 +6210,29 @@
|
|
|
6024
6210
|
}
|
|
6025
6211
|
]
|
|
6026
6212
|
}
|
|
6027
|
-
}
|
|
6213
|
+
},
|
|
6214
|
+
"allOf": [
|
|
6215
|
+
{
|
|
6216
|
+
"if": {
|
|
6217
|
+
"type": "object",
|
|
6218
|
+
"properties": {
|
|
6219
|
+
"classified_error": {
|
|
6220
|
+
"type": "object",
|
|
6221
|
+
"properties": {
|
|
6222
|
+
"code": { "const": "provider_terminal" }
|
|
6223
|
+
},
|
|
6224
|
+
"required": ["code"]
|
|
6225
|
+
}
|
|
6226
|
+
},
|
|
6227
|
+
"required": ["classified_error"]
|
|
6228
|
+
},
|
|
6229
|
+
"then": {
|
|
6230
|
+
"properties": {
|
|
6231
|
+
"attempt_count": { "type": "integer", "minimum": 1 }
|
|
6232
|
+
}
|
|
6233
|
+
}
|
|
6234
|
+
}
|
|
6235
|
+
]
|
|
6028
6236
|
}
|
|
6029
6237
|
]
|
|
6030
6238
|
}
|
|
@@ -6123,7 +6331,11 @@
|
|
|
6123
6331
|
"provider_terminal",
|
|
6124
6332
|
"provider_outcome_unknown",
|
|
6125
6333
|
"internal_error",
|
|
6126
|
-
"not_consented_for_marketing"
|
|
6334
|
+
"not_consented_for_marketing",
|
|
6335
|
+
"category_purpose_mismatch",
|
|
6336
|
+
"category_turned_off",
|
|
6337
|
+
"category_conflict",
|
|
6338
|
+
"category_not_found"
|
|
6127
6339
|
]
|
|
6128
6340
|
},
|
|
6129
6341
|
"ProblemFieldError": {
|
|
@@ -7103,6 +7315,54 @@
|
|
|
7103
7315
|
"const": false
|
|
7104
7316
|
}
|
|
7105
7317
|
}
|
|
7318
|
+
},
|
|
7319
|
+
{
|
|
7320
|
+
"type": "object",
|
|
7321
|
+
"properties": {
|
|
7322
|
+
"type": {
|
|
7323
|
+
"const": "https://whooshbang.flowxo.com/problems/category_not_found"
|
|
7324
|
+
},
|
|
7325
|
+
"title": { "const": "Message category not found" },
|
|
7326
|
+
"status": { "const": 404 },
|
|
7327
|
+
"code": { "const": "category_not_found" },
|
|
7328
|
+
"retryable": { "const": false }
|
|
7329
|
+
}
|
|
7330
|
+
},
|
|
7331
|
+
{
|
|
7332
|
+
"type": "object",
|
|
7333
|
+
"properties": {
|
|
7334
|
+
"type": {
|
|
7335
|
+
"const": "https://whooshbang.flowxo.com/problems/category_purpose_mismatch"
|
|
7336
|
+
},
|
|
7337
|
+
"title": { "const": "Purpose and category do not match" },
|
|
7338
|
+
"status": { "const": 422 },
|
|
7339
|
+
"code": { "const": "category_purpose_mismatch" },
|
|
7340
|
+
"retryable": { "const": false }
|
|
7341
|
+
}
|
|
7342
|
+
},
|
|
7343
|
+
{
|
|
7344
|
+
"type": "object",
|
|
7345
|
+
"properties": {
|
|
7346
|
+
"type": {
|
|
7347
|
+
"const": "https://whooshbang.flowxo.com/problems/category_turned_off"
|
|
7348
|
+
},
|
|
7349
|
+
"title": { "const": "Message category turned off" },
|
|
7350
|
+
"status": { "const": 422 },
|
|
7351
|
+
"code": { "const": "category_turned_off" },
|
|
7352
|
+
"retryable": { "const": false }
|
|
7353
|
+
}
|
|
7354
|
+
},
|
|
7355
|
+
{
|
|
7356
|
+
"type": "object",
|
|
7357
|
+
"properties": {
|
|
7358
|
+
"type": {
|
|
7359
|
+
"const": "https://whooshbang.flowxo.com/problems/category_conflict"
|
|
7360
|
+
},
|
|
7361
|
+
"title": { "const": "Message category conflict" },
|
|
7362
|
+
"status": { "const": 409 },
|
|
7363
|
+
"code": { "const": "category_conflict" },
|
|
7364
|
+
"retryable": { "const": false }
|
|
7365
|
+
}
|
|
7106
7366
|
}
|
|
7107
7367
|
],
|
|
7108
7368
|
"additionalProperties": false
|
|
@@ -10031,6 +10291,10 @@
|
|
|
10031
10291
|
"notifier_id": {
|
|
10032
10292
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
10033
10293
|
},
|
|
10294
|
+
"category": {
|
|
10295
|
+
"$ref": "#/$defs/MessageCategorySnapshot",
|
|
10296
|
+
"description": "Category as accepted. Absent on messages accepted before categories existed."
|
|
10297
|
+
},
|
|
10034
10298
|
"state": {
|
|
10035
10299
|
"$ref": "#/$defs/MessageState"
|
|
10036
10300
|
},
|
|
@@ -11849,6 +12113,10 @@
|
|
|
11849
12113
|
"enum": ["service", "marketing"],
|
|
11850
12114
|
"default": "service",
|
|
11851
12115
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12116
|
+
},
|
|
12117
|
+
"category_key": {
|
|
12118
|
+
"$ref": "#/$defs/MessageCategoryKey",
|
|
12119
|
+
"description": "Optional project category. Omitted service sends use Updates; omitted marketing sends use Marketing."
|
|
11852
12120
|
}
|
|
11853
12121
|
},
|
|
11854
12122
|
"additionalProperties": false,
|
|
@@ -12434,6 +12702,9 @@
|
|
|
12434
12702
|
"enum": ["service", "marketing"],
|
|
12435
12703
|
"default": "service",
|
|
12436
12704
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12705
|
+
},
|
|
12706
|
+
"category_key": {
|
|
12707
|
+
"$ref": "#/$defs/MessageCategoryKey"
|
|
12437
12708
|
}
|
|
12438
12709
|
},
|
|
12439
12710
|
"allOf": [
|
|
@@ -12489,6 +12760,9 @@
|
|
|
12489
12760
|
"enum": ["service", "marketing"],
|
|
12490
12761
|
"default": "service",
|
|
12491
12762
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12763
|
+
},
|
|
12764
|
+
"category_key": {
|
|
12765
|
+
"$ref": "#/$defs/MessageCategoryKey"
|
|
12492
12766
|
}
|
|
12493
12767
|
},
|
|
12494
12768
|
"additionalProperties": false
|
|
@@ -12525,6 +12799,9 @@
|
|
|
12525
12799
|
"enum": ["service", "marketing"],
|
|
12526
12800
|
"default": "service",
|
|
12527
12801
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12802
|
+
},
|
|
12803
|
+
"category_key": {
|
|
12804
|
+
"$ref": "#/$defs/MessageCategoryKey"
|
|
12528
12805
|
}
|
|
12529
12806
|
},
|
|
12530
12807
|
"additionalProperties": false
|