@greatwait/contracts 0.1.0-alpha.1

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.
Files changed (241) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -0
  3. package/dist/authority.d.ts +217 -0
  4. package/dist/authority.js +261 -0
  5. package/dist/callback-ownership.d.ts +58 -0
  6. package/dist/callback-ownership.js +71 -0
  7. package/dist/callback-safety.d.ts +38 -0
  8. package/dist/callback-safety.js +403 -0
  9. package/dist/compatibility.d.ts +82 -0
  10. package/dist/compatibility.js +115 -0
  11. package/dist/delivery.d.ts +401 -0
  12. package/dist/delivery.js +311 -0
  13. package/dist/endpoints.d.ts +305 -0
  14. package/dist/endpoints.js +179 -0
  15. package/dist/events.d.ts +62 -0
  16. package/dist/events.js +38 -0
  17. package/dist/first-value-journey.d.ts +305 -0
  18. package/dist/first-value-journey.js +466 -0
  19. package/dist/forecast.d.ts +443 -0
  20. package/dist/forecast.js +729 -0
  21. package/dist/identifiers.d.ts +109 -0
  22. package/dist/identifiers.js +131 -0
  23. package/dist/identity.d.ts +196 -0
  24. package/dist/identity.js +182 -0
  25. package/dist/index.d.ts +27 -0
  26. package/dist/index.js +27 -0
  27. package/dist/mcp.d.ts +51 -0
  28. package/dist/mcp.js +56 -0
  29. package/dist/oauth.d.ts +796 -0
  30. package/dist/oauth.js +708 -0
  31. package/dist/operations.d.ts +3985 -0
  32. package/dist/operations.js +1837 -0
  33. package/dist/partition.d.ts +771 -0
  34. package/dist/partition.js +206 -0
  35. package/dist/policy.d.ts +93 -0
  36. package/dist/policy.js +180 -0
  37. package/dist/problems.d.ts +158 -0
  38. package/dist/problems.js +104 -0
  39. package/dist/protocol.d.ts +308 -0
  40. package/dist/protocol.js +515 -0
  41. package/dist/scheduling-records.d.ts +395 -0
  42. package/dist/scheduling-records.js +284 -0
  43. package/dist/scheduling.d.ts +1098 -0
  44. package/dist/scheduling.js +1116 -0
  45. package/dist/secrets.d.ts +383 -0
  46. package/dist/secrets.js +272 -0
  47. package/dist/signatures.d.ts +704 -0
  48. package/dist/signatures.js +867 -0
  49. package/dist/tenancy.d.ts +178 -0
  50. package/dist/tenancy.js +145 -0
  51. package/dist/test-sink.d.ts +986 -0
  52. package/dist/test-sink.js +755 -0
  53. package/dist/time.d.ts +45 -0
  54. package/dist/time.js +128 -0
  55. package/dist/usage.d.ts +121 -0
  56. package/dist/usage.js +200 -0
  57. package/dist/webhooks.d.ts +116 -0
  58. package/dist/webhooks.js +161 -0
  59. package/dist/workspace.d.ts +92 -0
  60. package/dist/workspace.js +59 -0
  61. package/generated/v1/callback-delivery-signature.json +467 -0
  62. package/generated/v1/callback-endpoint-verification.json +59 -0
  63. package/generated/v1/callback-receiver.json +241 -0
  64. package/generated/v1/examples/attempts.list.response.json +24 -0
  65. package/generated/v1/examples/attempts.read.response.json +20 -0
  66. package/generated/v1/examples/credentials.create.request.json +5 -0
  67. package/generated/v1/examples/credentials.create.response.json +10 -0
  68. package/generated/v1/examples/credentials.list.response.json +17 -0
  69. package/generated/v1/examples/credentials.revoke.response.json +11 -0
  70. package/generated/v1/examples/credentials.rotate.request.json +3 -0
  71. package/generated/v1/examples/credentials.rotate.response.json +22 -0
  72. package/generated/v1/examples/endpoints.create.request.json +3 -0
  73. package/generated/v1/examples/endpoints.create.response.json +16 -0
  74. package/generated/v1/examples/endpoints.disable.response.json +15 -0
  75. package/generated/v1/examples/endpoints.list.response.json +21 -0
  76. package/generated/v1/examples/endpoints.read.response.json +14 -0
  77. package/generated/v1/examples/endpoints.rotateSigningKey.request.json +3 -0
  78. package/generated/v1/examples/endpoints.rotateSigningKey.response.json +23 -0
  79. package/generated/v1/examples/endpoints.update.request.json +3 -0
  80. package/generated/v1/examples/endpoints.update.response.json +13 -0
  81. package/generated/v1/examples/endpoints.verify.response.json +15 -0
  82. package/generated/v1/examples/forecast.read.response.json +28 -0
  83. package/generated/v1/examples/forecast.windows.response.json +21 -0
  84. package/generated/v1/examples/grants.list.response.json +17 -0
  85. package/generated/v1/examples/grants.revoke.response.json +16 -0
  86. package/generated/v1/examples/meta.scaffold.response.json +5 -0
  87. package/generated/v1/examples/meta.version.response.json +5 -0
  88. package/generated/v1/examples/occurrences.list.response.json +17 -0
  89. package/generated/v1/examples/occurrences.read.response.json +15 -0
  90. package/generated/v1/examples/occurrences.redeliver.response.json +16 -0
  91. package/generated/v1/examples/projects.create.request.json +3 -0
  92. package/generated/v1/examples/projects.create.response.json +5 -0
  93. package/generated/v1/examples/projects.list.response.json +9 -0
  94. package/generated/v1/examples/schedules.archive.response.json +25 -0
  95. package/generated/v1/examples/schedules.cancel.response.json +24 -0
  96. package/generated/v1/examples/schedules.create.request.json +9 -0
  97. package/generated/v1/examples/schedules.create.response.json +25 -0
  98. package/generated/v1/examples/schedules.list.response.json +23 -0
  99. package/generated/v1/examples/schedules.pause.response.json +23 -0
  100. package/generated/v1/examples/schedules.read.response.json +25 -0
  101. package/generated/v1/examples/schedules.replace.request.json +8 -0
  102. package/generated/v1/examples/schedules.replace.response.json +25 -0
  103. package/generated/v1/examples/schedules.resume.response.json +23 -0
  104. package/generated/v1/examples/sinkdeliveries.list.response.json +19 -0
  105. package/generated/v1/examples/sinkdeliveries.read.response.json +16 -0
  106. package/generated/v1/examples/testsinks.configure.request.json +3 -0
  107. package/generated/v1/examples/testsinks.configure.response.json +13 -0
  108. package/generated/v1/examples/testsinks.create.request.json +8 -0
  109. package/generated/v1/examples/testsinks.create.response.json +13 -0
  110. package/generated/v1/examples/testsinks.delete.response.json +13 -0
  111. package/generated/v1/examples/testsinks.list.response.json +20 -0
  112. package/generated/v1/examples/testsinks.read.response.json +14 -0
  113. package/generated/v1/examples/usage.read.response.json +20 -0
  114. package/generated/v1/first-value-journey.json +436 -0
  115. package/generated/v1/manifest.json +1037 -0
  116. package/generated/v1/openapi.json +23665 -0
  117. package/generated/v1/policy-matrix.json +305 -0
  118. package/generated/v1/schemas/attempts.list.query.json +16 -0
  119. package/generated/v1/schemas/attempts.list.response.json +175 -0
  120. package/generated/v1/schemas/attempts.read.response.json +168 -0
  121. package/generated/v1/schemas/credentials.create.request.json +39 -0
  122. package/generated/v1/schemas/credentials.create.response.json +88 -0
  123. package/generated/v1/schemas/credentials.list.query.json +16 -0
  124. package/generated/v1/schemas/credentials.list.response.json +124 -0
  125. package/generated/v1/schemas/credentials.revoke.response.json +84 -0
  126. package/generated/v1/schemas/credentials.rotate.request.json +11 -0
  127. package/generated/v1/schemas/credentials.rotate.response.json +171 -0
  128. package/generated/v1/schemas/endpoints.create.request.json +12 -0
  129. package/generated/v1/schemas/endpoints.create.response.json +115 -0
  130. package/generated/v1/schemas/endpoints.disable.response-headers.json +11 -0
  131. package/generated/v1/schemas/endpoints.disable.response.json +100 -0
  132. package/generated/v1/schemas/endpoints.list.query.json +16 -0
  133. package/generated/v1/schemas/endpoints.list.response.json +146 -0
  134. package/generated/v1/schemas/endpoints.read.response-headers.json +11 -0
  135. package/generated/v1/schemas/endpoints.read.response.json +100 -0
  136. package/generated/v1/schemas/endpoints.rotateSigningKey.request-headers.json +10 -0
  137. package/generated/v1/schemas/endpoints.rotateSigningKey.request.json +11 -0
  138. package/generated/v1/schemas/endpoints.rotateSigningKey.response-headers.json +11 -0
  139. package/generated/v1/schemas/endpoints.rotateSigningKey.response.json +118 -0
  140. package/generated/v1/schemas/endpoints.update.request-headers.json +10 -0
  141. package/generated/v1/schemas/endpoints.update.request.json +12 -0
  142. package/generated/v1/schemas/endpoints.update.response-headers.json +11 -0
  143. package/generated/v1/schemas/endpoints.update.response.json +100 -0
  144. package/generated/v1/schemas/endpoints.verify.request-headers.json +10 -0
  145. package/generated/v1/schemas/endpoints.verify.response-headers.json +11 -0
  146. package/generated/v1/schemas/endpoints.verify.response.json +100 -0
  147. package/generated/v1/schemas/forecast.read.query.json +26 -0
  148. package/generated/v1/schemas/forecast.read.response.json +100 -0
  149. package/generated/v1/schemas/forecast.windows.query.json +26 -0
  150. package/generated/v1/schemas/forecast.windows.response.json +94 -0
  151. package/generated/v1/schemas/grants.list.response.json +98 -0
  152. package/generated/v1/schemas/grants.revoke.response.json +95 -0
  153. package/generated/v1/schemas/meta.scaffold.response.json +36 -0
  154. package/generated/v1/schemas/meta.version.response.json +19 -0
  155. package/generated/v1/schemas/occurrences.list.query.json +16 -0
  156. package/generated/v1/schemas/occurrences.list.response.json +83 -0
  157. package/generated/v1/schemas/occurrences.read.response.json +76 -0
  158. package/generated/v1/schemas/occurrences.redeliver.request-headers.json +13 -0
  159. package/generated/v1/schemas/occurrences.redeliver.response-headers.json +10 -0
  160. package/generated/v1/schemas/occurrences.redeliver.response.json +168 -0
  161. package/generated/v1/schemas/projects.create.request.json +12 -0
  162. package/generated/v1/schemas/projects.create.response.json +25 -0
  163. package/generated/v1/schemas/projects.list.response.json +35 -0
  164. package/generated/v1/schemas/schedules.archive.request-headers.json +10 -0
  165. package/generated/v1/schemas/schedules.archive.response-headers.json +11 -0
  166. package/generated/v1/schemas/schedules.archive.response.json +189 -0
  167. package/generated/v1/schemas/schedules.cancel.request-headers.json +10 -0
  168. package/generated/v1/schemas/schedules.cancel.response-headers.json +11 -0
  169. package/generated/v1/schemas/schedules.cancel.response.json +189 -0
  170. package/generated/v1/schemas/schedules.create.request-headers.json +12 -0
  171. package/generated/v1/schemas/schedules.create.request.json +99 -0
  172. package/generated/v1/schemas/schedules.create.response-headers.json +15 -0
  173. package/generated/v1/schemas/schedules.create.response.json +189 -0
  174. package/generated/v1/schemas/schedules.list.query.json +16 -0
  175. package/generated/v1/schemas/schedules.list.response.json +170 -0
  176. package/generated/v1/schemas/schedules.pause.request-headers.json +10 -0
  177. package/generated/v1/schemas/schedules.pause.response-headers.json +11 -0
  178. package/generated/v1/schemas/schedules.pause.response.json +189 -0
  179. package/generated/v1/schemas/schedules.read.response-headers.json +11 -0
  180. package/generated/v1/schemas/schedules.read.response.json +189 -0
  181. package/generated/v1/schemas/schedules.replace.request-headers.json +10 -0
  182. package/generated/v1/schemas/schedules.replace.request.json +99 -0
  183. package/generated/v1/schemas/schedules.replace.response-headers.json +11 -0
  184. package/generated/v1/schemas/schedules.replace.response.json +189 -0
  185. package/generated/v1/schemas/schedules.resume.request-headers.json +10 -0
  186. package/generated/v1/schemas/schedules.resume.response-headers.json +11 -0
  187. package/generated/v1/schemas/schedules.resume.response.json +189 -0
  188. package/generated/v1/schemas/sinkdeliveries.list.query.json +16 -0
  189. package/generated/v1/schemas/sinkdeliveries.list.response.json +126 -0
  190. package/generated/v1/schemas/sinkdeliveries.read.response.json +98 -0
  191. package/generated/v1/schemas/testsinks.configure.request.json +66 -0
  192. package/generated/v1/schemas/testsinks.configure.response.json +115 -0
  193. package/generated/v1/schemas/testsinks.create.request.json +76 -0
  194. package/generated/v1/schemas/testsinks.create.response.json +115 -0
  195. package/generated/v1/schemas/testsinks.delete.response.json +115 -0
  196. package/generated/v1/schemas/testsinks.list.query.json +16 -0
  197. package/generated/v1/schemas/testsinks.list.response.json +161 -0
  198. package/generated/v1/schemas/testsinks.read.response.json +115 -0
  199. package/generated/v1/schemas/usage.read.query.json +15 -0
  200. package/generated/v1/schemas/usage.read.response.json +71 -0
  201. package/generated/v1/snippets/attempts.list.json +5 -0
  202. package/generated/v1/snippets/attempts.read.json +5 -0
  203. package/generated/v1/snippets/credentials.create.json +5 -0
  204. package/generated/v1/snippets/credentials.list.json +5 -0
  205. package/generated/v1/snippets/credentials.revoke.json +5 -0
  206. package/generated/v1/snippets/credentials.rotate.json +5 -0
  207. package/generated/v1/snippets/endpoints.create.json +5 -0
  208. package/generated/v1/snippets/endpoints.disable.json +5 -0
  209. package/generated/v1/snippets/endpoints.list.json +5 -0
  210. package/generated/v1/snippets/endpoints.read.json +5 -0
  211. package/generated/v1/snippets/endpoints.rotateSigningKey.json +5 -0
  212. package/generated/v1/snippets/endpoints.update.json +5 -0
  213. package/generated/v1/snippets/endpoints.verify.json +5 -0
  214. package/generated/v1/snippets/forecast.read.json +5 -0
  215. package/generated/v1/snippets/forecast.windows.json +5 -0
  216. package/generated/v1/snippets/grants.list.json +5 -0
  217. package/generated/v1/snippets/grants.revoke.json +5 -0
  218. package/generated/v1/snippets/meta.scaffold.json +5 -0
  219. package/generated/v1/snippets/meta.version.json +5 -0
  220. package/generated/v1/snippets/occurrences.list.json +5 -0
  221. package/generated/v1/snippets/occurrences.read.json +5 -0
  222. package/generated/v1/snippets/occurrences.redeliver.json +5 -0
  223. package/generated/v1/snippets/projects.create.json +5 -0
  224. package/generated/v1/snippets/projects.list.json +5 -0
  225. package/generated/v1/snippets/schedules.archive.json +5 -0
  226. package/generated/v1/snippets/schedules.cancel.json +5 -0
  227. package/generated/v1/snippets/schedules.create.json +5 -0
  228. package/generated/v1/snippets/schedules.list.json +5 -0
  229. package/generated/v1/snippets/schedules.pause.json +5 -0
  230. package/generated/v1/snippets/schedules.read.json +5 -0
  231. package/generated/v1/snippets/schedules.replace.json +5 -0
  232. package/generated/v1/snippets/schedules.resume.json +5 -0
  233. package/generated/v1/snippets/sinkdeliveries.list.json +5 -0
  234. package/generated/v1/snippets/sinkdeliveries.read.json +5 -0
  235. package/generated/v1/snippets/testsinks.configure.json +5 -0
  236. package/generated/v1/snippets/testsinks.create.json +5 -0
  237. package/generated/v1/snippets/testsinks.delete.json +5 -0
  238. package/generated/v1/snippets/testsinks.list.json +5 -0
  239. package/generated/v1/snippets/testsinks.read.json +5 -0
  240. package/generated/v1/snippets/usage.read.json +5 -0
  241. package/package.json +153 -0
@@ -0,0 +1,467 @@
1
+ {
2
+ "envelope": {
3
+ "propertyOrder": [
4
+ "version",
5
+ "type",
6
+ "scheduleId",
7
+ "occurrenceId",
8
+ "plannedFor",
9
+ "attempt",
10
+ "completion",
11
+ "trigger",
12
+ "data"
13
+ ],
14
+ "completionPropertyOrder": ["token", "url", "deadline"],
15
+ "propertyOrder_2026_08_08": [
16
+ "version",
17
+ "type",
18
+ "scheduleId",
19
+ "occurrenceId",
20
+ "plannedFor",
21
+ "attempt",
22
+ "completion",
23
+ "trigger",
24
+ "data"
25
+ ],
26
+ "propertyOrder_2026_07_01": [
27
+ "version",
28
+ "type",
29
+ "scheduleId",
30
+ "occurrenceId",
31
+ "plannedFor",
32
+ "attempt",
33
+ "data"
34
+ ],
35
+ "serialization": "compact UTF-8 JSON with the stated top-level property order",
36
+ "trigger": {
37
+ "automatic": "A first attempt or a retry the system chose. Nobody asked for it, it may repeat work already done, and a receiver must run the occurrence at most once.",
38
+ "default": "An envelope with no trigger field is automatic. Only 2026-07-01 can omit it.",
39
+ "propertyOrder": ["kind", "sourceAttemptId"],
40
+ "ordinal": "attempt. It only ever increases within an occurrence and every copy of one redelivery carries the same value, so a receiver recognises a repeat by keeping the highest it has run to completion rather than by keeping them all.",
41
+ "redelivery": "A person ordered this delivery under the occurrences:redeliver scope. sourceAttemptId names the retained attempt they chose to follow and is there to show them, not to decide whether the work runs — attempt is what decides that. It is a request for the work to happen again, and a receiver that suppresses it as a duplicate answers a deliberate instruction with silence.",
42
+ "requirement": "run the handler again for a redelivery whose attempt is above the highest this receiver has run to completion for the occurrence, keep suppressing every automatic delivery of a completed occurrence, and suppress every redelivery at or below that high-water mark"
43
+ },
44
+ "version": "2026-08-23",
45
+ "versions": ["2026-07-01", "2026-08-08", "2026-08-23"]
46
+ },
47
+ "headers": {
48
+ "contentType": "application/json",
49
+ "required": [
50
+ "Content-Type",
51
+ "Callback-Delivery-Id",
52
+ "Callback-Occurrence-Id",
53
+ "Callback-Timestamp",
54
+ "Callback-Key-Id",
55
+ "Callback-Signature"
56
+ ]
57
+ },
58
+ "replay": {
59
+ "identity": "Callback-Delivery-Id",
60
+ "requirement": "atomically reject a previously accepted delivery id before parsing"
61
+ },
62
+ "signature": {
63
+ "algorithm": "HMAC-SHA-256",
64
+ "format": "v1=<64 lowercase hexadecimal characters>",
65
+ "input": "ASCII <Callback-Timestamp>.<Callback-Delivery-Id>. followed by the exact raw request body bytes",
66
+ "scheme": "v1",
67
+ "timestampToleranceSeconds": 300
68
+ },
69
+ "legacyTestVector": {
70
+ "envelope": {
71
+ "attempt": 1,
72
+ "data": {},
73
+ "occurrenceId": "occ_0123456789abcdefghjkmnpqrs",
74
+ "plannedFor": "2026-07-28T15:00:00.000Z",
75
+ "scheduleId": "sch_0123456789abcdefghjkmnpqrs",
76
+ "type": "schedule.occurrence",
77
+ "version": "2026-07-01"
78
+ },
79
+ "exactBodyBase64": "eyJ2ZXJzaW9uIjoiMjAyNi0wNy0wMSIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJkYXRhIjp7fX0=",
80
+ "exactBodyUtf8": "{\"version\":\"2026-07-01\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"data\":{}}",
81
+ "headers": {
82
+ "Callback-Delivery-Id": "dlv_0123456789abcdefghjkmnpqrs",
83
+ "Callback-Key-Id": "csk_0123456789abcdefghjkmnpqrs",
84
+ "Callback-Occurrence-Id": "occ_0123456789abcdefghjkmnpqrs",
85
+ "Callback-Signature": "v1=11135fdfc0bc5d49ebcc9d3a0d8df1116179097cefe961c6eca281339e5cfab3",
86
+ "Callback-Timestamp": "2026-07-28T15:00:00.000Z",
87
+ "Content-Type": "application/json"
88
+ },
89
+ "secret": "greatwait-signature-vector-key-not-a-credential",
90
+ "signingInputBase64": "MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA3LTAxIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImRhdGEiOnt9fQ==",
91
+ "signingInputUtf8": "2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{\"version\":\"2026-07-01\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"data\":{}}"
92
+ },
93
+ "triggerTestVector": {
94
+ "envelope": {
95
+ "attempt": 1,
96
+ "data": {},
97
+ "occurrenceId": "occ_0123456789abcdefghjkmnpqrs",
98
+ "plannedFor": "2026-07-28T15:00:00.000Z",
99
+ "scheduleId": "sch_0123456789abcdefghjkmnpqrs",
100
+ "trigger": {
101
+ "kind": "automatic"
102
+ },
103
+ "type": "schedule.occurrence",
104
+ "version": "2026-08-08"
105
+ },
106
+ "exactBodyBase64": "eyJ2ZXJzaW9uIjoiMjAyNi0wOC0wOCIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6e319",
107
+ "exactBodyUtf8": "{\"version\":\"2026-08-08\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"trigger\":{\"kind\":\"automatic\"},\"data\":{}}",
108
+ "headers": {
109
+ "Callback-Delivery-Id": "dlv_0123456789abcdefghjkmnpqrs",
110
+ "Callback-Key-Id": "csk_0123456789abcdefghjkmnpqrs",
111
+ "Callback-Occurrence-Id": "occ_0123456789abcdefghjkmnpqrs",
112
+ "Callback-Signature": "v1=bd96c6d68a5c0521c18600d92913ce4dcf32036f2c930d0f9db9de55da9280e7",
113
+ "Callback-Timestamp": "2026-07-28T15:00:00.000Z",
114
+ "Content-Type": "application/json"
115
+ },
116
+ "secret": "greatwait-signature-vector-key-not-a-credential",
117
+ "signingInputBase64": "MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTA4IiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsInRyaWdnZXIiOnsia2luZCI6ImF1dG9tYXRpYyJ9LCJkYXRhIjp7fX0=",
118
+ "signingInputUtf8": "2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{\"version\":\"2026-08-08\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"trigger\":{\"kind\":\"automatic\"},\"data\":{}}"
119
+ },
120
+ "completionTestVector": {
121
+ "envelope": {
122
+ "attempt": 1,
123
+ "completion": {
124
+ "token": "v1.example-claim-not-a-real-token.example-mac",
125
+ "url": "https://greatwait-scheduler.example/callbacks/completion"
126
+ },
127
+ "data": {},
128
+ "occurrenceId": "occ_0123456789abcdefghjkmnpqrs",
129
+ "plannedFor": "2026-07-28T15:00:00.000Z",
130
+ "scheduleId": "sch_0123456789abcdefghjkmnpqrs",
131
+ "trigger": {
132
+ "kind": "automatic"
133
+ },
134
+ "type": "schedule.occurrence",
135
+ "version": "2026-08-08"
136
+ },
137
+ "exactBodyBase64": "eyJ2ZXJzaW9uIjoiMjAyNi0wOC0wOCIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjEuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24ifSwidHJpZ2dlciI6eyJraW5kIjoiYXV0b21hdGljIn0sImRhdGEiOnt9fQ==",
138
+ "exactBodyUtf8": "{\"version\":\"2026-08-08\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"completion\":{\"token\":\"v1.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\"},\"trigger\":{\"kind\":\"automatic\"},\"data\":{}}",
139
+ "headers": {
140
+ "Callback-Delivery-Id": "dlv_0123456789abcdefghjkmnpqrs",
141
+ "Callback-Key-Id": "csk_0123456789abcdefghjkmnpqrs",
142
+ "Callback-Occurrence-Id": "occ_0123456789abcdefghjkmnpqrs",
143
+ "Callback-Signature": "v1=38c6d854051087ed408a5f6252d90375859f305aeb0bca1c3f3a5bb63135e138",
144
+ "Callback-Timestamp": "2026-07-28T15:00:00.000Z",
145
+ "Content-Type": "application/json"
146
+ },
147
+ "secret": "greatwait-signature-vector-key-not-a-credential",
148
+ "signingInputBase64": "MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTA4IiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2MS5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6e319",
149
+ "signingInputUtf8": "2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{\"version\":\"2026-08-08\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"completion\":{\"token\":\"v1.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\"},\"trigger\":{\"kind\":\"automatic\"},\"data\":{}}"
150
+ },
151
+ "redeliveryTestVector": {
152
+ "envelope": {
153
+ "attempt": 2,
154
+ "completion": {
155
+ "deadline": "2026-07-28T15:00:05.000Z",
156
+ "token": "v2.example-claim-not-a-real-token.example-mac",
157
+ "url": "https://greatwait-scheduler.example/callbacks/completion"
158
+ },
159
+ "data": {},
160
+ "occurrenceId": "occ_0123456789abcdefghjkmnpqrs",
161
+ "plannedFor": "2026-07-28T15:00:00.000Z",
162
+ "scheduleId": "sch_0123456789abcdefghjkmnpqrs",
163
+ "trigger": {
164
+ "kind": "redelivery",
165
+ "sourceAttemptId": "att_0123456789abcdefghjkmnpqrs"
166
+ },
167
+ "type": "schedule.occurrence",
168
+ "version": "2026-08-23"
169
+ },
170
+ "exactBodyBase64": "eyJ2ZXJzaW9uIjoiMjAyNi0wOC0yMyIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoyLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjIuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24iLCJkZWFkbGluZSI6IjIwMjYtMDctMjhUMTU6MDA6MDUuMDAwWiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJyZWRlbGl2ZXJ5Iiwic291cmNlQXR0ZW1wdElkIjoiYXR0XzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIn0sImRhdGEiOnt9fQ==",
171
+ "exactBodyUtf8": "{\"version\":\"2026-08-23\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":2,\"completion\":{\"token\":\"v2.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\",\"deadline\":\"2026-07-28T15:00:05.000Z\"},\"trigger\":{\"kind\":\"redelivery\",\"sourceAttemptId\":\"att_0123456789abcdefghjkmnpqrs\"},\"data\":{}}",
172
+ "headers": {
173
+ "Callback-Delivery-Id": "dlv_0123456789abcdefghjkmnpqrs",
174
+ "Callback-Key-Id": "csk_0123456789abcdefghjkmnpqrs",
175
+ "Callback-Occurrence-Id": "occ_0123456789abcdefghjkmnpqrs",
176
+ "Callback-Signature": "v1=9d698aed6d05dcd964f00d6e6796aab238f4f50e6f5cfeb61751fd7850778a04",
177
+ "Callback-Timestamp": "2026-07-28T15:00:00.000Z",
178
+ "Content-Type": "application/json"
179
+ },
180
+ "secret": "greatwait-signature-vector-key-not-a-credential",
181
+ "signingInputBase64": "MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTIzIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjIsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2Mi5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiIsImRlYWRsaW5lIjoiMjAyNi0wNy0yOFQxNTowMDowNS4wMDBaIn0sInRyaWdnZXIiOnsia2luZCI6InJlZGVsaXZlcnkiLCJzb3VyY2VBdHRlbXB0SWQiOiJhdHRfMDEyMzQ1Njc4OWFiY2RlZmdoamttbnBxcnMifSwiZGF0YSI6e319",
182
+ "signingInputUtf8": "2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{\"version\":\"2026-08-23\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":2,\"completion\":{\"token\":\"v2.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\",\"deadline\":\"2026-07-28T15:00:05.000Z\"},\"trigger\":{\"kind\":\"redelivery\",\"sourceAttemptId\":\"att_0123456789abcdefghjkmnpqrs\"},\"data\":{}}"
183
+ },
184
+ "testVector": {
185
+ "envelope": {
186
+ "attempt": 1,
187
+ "completion": {
188
+ "deadline": "2026-07-28T15:00:05.000Z",
189
+ "token": "v2.example-claim-not-a-real-token.example-mac",
190
+ "url": "https://greatwait-scheduler.example/callbacks/completion"
191
+ },
192
+ "data": {},
193
+ "occurrenceId": "occ_0123456789abcdefghjkmnpqrs",
194
+ "plannedFor": "2026-07-28T15:00:00.000Z",
195
+ "scheduleId": "sch_0123456789abcdefghjkmnpqrs",
196
+ "trigger": {
197
+ "kind": "automatic"
198
+ },
199
+ "type": "schedule.occurrence",
200
+ "version": "2026-08-23"
201
+ },
202
+ "exactBodyBase64": "eyJ2ZXJzaW9uIjoiMjAyNi0wOC0yMyIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjIuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24iLCJkZWFkbGluZSI6IjIwMjYtMDctMjhUMTU6MDA6MDUuMDAwWiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6e319",
203
+ "exactBodyUtf8": "{\"version\":\"2026-08-23\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"completion\":{\"token\":\"v2.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\",\"deadline\":\"2026-07-28T15:00:05.000Z\"},\"trigger\":{\"kind\":\"automatic\"},\"data\":{}}",
204
+ "headers": {
205
+ "Callback-Delivery-Id": "dlv_0123456789abcdefghjkmnpqrs",
206
+ "Callback-Key-Id": "csk_0123456789abcdefghjkmnpqrs",
207
+ "Callback-Occurrence-Id": "occ_0123456789abcdefghjkmnpqrs",
208
+ "Callback-Signature": "v1=5bf68b786fbac1afa7e3474ae5039ad27900b0185bca43a3e45185d56315a312",
209
+ "Callback-Timestamp": "2026-07-28T15:00:00.000Z",
210
+ "Content-Type": "application/json"
211
+ },
212
+ "secret": "greatwait-signature-vector-key-not-a-credential",
213
+ "signingInputBase64": "MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTIzIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2Mi5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiIsImRlYWRsaW5lIjoiMjAyNi0wNy0yOFQxNTowMDowNS4wMDBaIn0sInRyaWdnZXIiOnsia2luZCI6ImF1dG9tYXRpYyJ9LCJkYXRhIjp7fX0=",
214
+ "signingInputUtf8": "2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{\"version\":\"2026-08-23\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"completion\":{\"token\":\"v2.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\",\"deadline\":\"2026-07-28T15:00:05.000Z\"},\"trigger\":{\"kind\":\"automatic\"},\"data\":{}}"
215
+ },
216
+ "unicodeTestVector": {
217
+ "envelope": {
218
+ "attempt": 1,
219
+ "completion": {
220
+ "deadline": "2026-07-28T15:00:05.000Z",
221
+ "token": "v2.example-claim-not-a-real-token.example-mac",
222
+ "url": "https://greatwait-scheduler.example/callbacks/completion"
223
+ },
224
+ "data": {
225
+ "note": "café ☃"
226
+ },
227
+ "occurrenceId": "occ_0123456789abcdefghjkmnpqrs",
228
+ "plannedFor": "2026-07-28T15:00:00.000Z",
229
+ "scheduleId": "sch_0123456789abcdefghjkmnpqrs",
230
+ "trigger": {
231
+ "kind": "automatic"
232
+ },
233
+ "type": "schedule.occurrence",
234
+ "version": "2026-08-23"
235
+ },
236
+ "exactBodyBase64": "eyJ2ZXJzaW9uIjoiMjAyNi0wOC0yMyIsInR5cGUiOiJzY2hlZHVsZS5vY2N1cnJlbmNlIiwic2NoZWR1bGVJZCI6InNjaF8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsIm9jY3VycmVuY2VJZCI6Im9jY18wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycyIsInBsYW5uZWRGb3IiOiIyMDI2LTA3LTI4VDE1OjAwOjAwLjAwMFoiLCJhdHRlbXB0IjoxLCJjb21wbGV0aW9uIjp7InRva2VuIjoidjIuZXhhbXBsZS1jbGFpbS1ub3QtYS1yZWFsLXRva2VuLmV4YW1wbGUtbWFjIiwidXJsIjoiaHR0cHM6Ly9ncmVhdHdhaXQtc2NoZWR1bGVyLmV4YW1wbGUvY2FsbGJhY2tzL2NvbXBsZXRpb24iLCJkZWFkbGluZSI6IjIwMjYtMDctMjhUMTU6MDA6MDUuMDAwWiJ9LCJ0cmlnZ2VyIjp7ImtpbmQiOiJhdXRvbWF0aWMifSwiZGF0YSI6eyJub3RlIjoiY2Fmw6kg4piDIn19",
237
+ "exactBodyUtf8": "{\"version\":\"2026-08-23\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"completion\":{\"token\":\"v2.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\",\"deadline\":\"2026-07-28T15:00:05.000Z\"},\"trigger\":{\"kind\":\"automatic\"},\"data\":{\"note\":\"café ☃\"}}",
238
+ "headers": {
239
+ "Callback-Delivery-Id": "dlv_0123456789abcdefghjkmnpqrs",
240
+ "Callback-Key-Id": "csk_0123456789abcdefghjkmnpqrs",
241
+ "Callback-Occurrence-Id": "occ_0123456789abcdefghjkmnpqrs",
242
+ "Callback-Signature": "v1=18a8d1c50ea54bd0a5ec27abe80d1c98e44a7f358ecf8f06615c174075100e72",
243
+ "Callback-Timestamp": "2026-07-28T15:00:00.000Z",
244
+ "Content-Type": "application/json"
245
+ },
246
+ "secret": "greatwait-signature-vector-key-not-a-credential",
247
+ "signingInputBase64": "MjAyNi0wNy0yOFQxNTowMDowMC4wMDBaLmRsdl8wMTIzNDU2Nzg5YWJjZGVmZ2hqa21ucHFycy57InZlcnNpb24iOiIyMDI2LTA4LTIzIiwidHlwZSI6InNjaGVkdWxlLm9jY3VycmVuY2UiLCJzY2hlZHVsZUlkIjoic2NoXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwib2NjdXJyZW5jZUlkIjoib2NjXzAxMjM0NTY3ODlhYmNkZWZnaGprbW5wcXJzIiwicGxhbm5lZEZvciI6IjIwMjYtMDctMjhUMTU6MDA6MDAuMDAwWiIsImF0dGVtcHQiOjEsImNvbXBsZXRpb24iOnsidG9rZW4iOiJ2Mi5leGFtcGxlLWNsYWltLW5vdC1hLXJlYWwtdG9rZW4uZXhhbXBsZS1tYWMiLCJ1cmwiOiJodHRwczovL2dyZWF0d2FpdC1zY2hlZHVsZXIuZXhhbXBsZS9jYWxsYmFja3MvY29tcGxldGlvbiIsImRlYWRsaW5lIjoiMjAyNi0wNy0yOFQxNTowMDowNS4wMDBaIn0sInRyaWdnZXIiOnsia2luZCI6ImF1dG9tYXRpYyJ9LCJkYXRhIjp7Im5vdGUiOiJjYWbDqSDimIMifX0=",
248
+ "signingInputUtf8": "2026-07-28T15:00:00.000Z.dlv_0123456789abcdefghjkmnpqrs.{\"version\":\"2026-08-23\",\"type\":\"schedule.occurrence\",\"scheduleId\":\"sch_0123456789abcdefghjkmnpqrs\",\"occurrenceId\":\"occ_0123456789abcdefghjkmnpqrs\",\"plannedFor\":\"2026-07-28T15:00:00.000Z\",\"attempt\":1,\"completion\":{\"token\":\"v2.example-claim-not-a-real-token.example-mac\",\"url\":\"https://greatwait-scheduler.example/callbacks/completion\",\"deadline\":\"2026-07-28T15:00:05.000Z\"},\"trigger\":{\"kind\":\"automatic\"},\"data\":{\"note\":\"café ☃\"}}"
249
+ },
250
+ "version": "2026-08-23",
251
+ "envelopeSchema": {
252
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
253
+ "oneOf": [
254
+ {
255
+ "type": "object",
256
+ "properties": {
257
+ "attempt": {
258
+ "type": "integer",
259
+ "exclusiveMinimum": 0,
260
+ "maximum": 9007199254740991
261
+ },
262
+ "data": {},
263
+ "occurrenceId": {
264
+ "type": "string",
265
+ "pattern": "^occ_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
266
+ },
267
+ "plannedFor": {
268
+ "type": "string",
269
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
270
+ },
271
+ "scheduleId": {
272
+ "type": "string",
273
+ "pattern": "^sch_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
274
+ },
275
+ "type": {
276
+ "type": "string",
277
+ "const": "schedule.occurrence"
278
+ },
279
+ "version": {
280
+ "type": "string",
281
+ "const": "2026-07-01"
282
+ }
283
+ },
284
+ "required": [
285
+ "attempt",
286
+ "data",
287
+ "occurrenceId",
288
+ "plannedFor",
289
+ "scheduleId",
290
+ "type",
291
+ "version"
292
+ ]
293
+ },
294
+ {
295
+ "type": "object",
296
+ "properties": {
297
+ "attempt": {
298
+ "type": "integer",
299
+ "exclusiveMinimum": 0,
300
+ "maximum": 9007199254740991
301
+ },
302
+ "data": {},
303
+ "occurrenceId": {
304
+ "type": "string",
305
+ "pattern": "^occ_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
306
+ },
307
+ "plannedFor": {
308
+ "type": "string",
309
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
310
+ },
311
+ "scheduleId": {
312
+ "type": "string",
313
+ "pattern": "^sch_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
314
+ },
315
+ "type": {
316
+ "type": "string",
317
+ "const": "schedule.occurrence"
318
+ },
319
+ "completion": {
320
+ "type": "object",
321
+ "properties": {
322
+ "token": {
323
+ "type": "string",
324
+ "minLength": 1
325
+ },
326
+ "url": {
327
+ "type": "string",
328
+ "format": "uri"
329
+ }
330
+ },
331
+ "required": ["token", "url"]
332
+ },
333
+ "trigger": {
334
+ "oneOf": [
335
+ {
336
+ "type": "object",
337
+ "properties": {
338
+ "kind": {
339
+ "type": "string",
340
+ "const": "automatic"
341
+ }
342
+ },
343
+ "required": ["kind"]
344
+ },
345
+ {
346
+ "type": "object",
347
+ "properties": {
348
+ "kind": {
349
+ "type": "string",
350
+ "const": "redelivery"
351
+ },
352
+ "sourceAttemptId": {
353
+ "type": "string",
354
+ "pattern": "^att_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
355
+ }
356
+ },
357
+ "required": ["kind", "sourceAttemptId"]
358
+ }
359
+ ]
360
+ },
361
+ "version": {
362
+ "type": "string",
363
+ "const": "2026-08-08"
364
+ }
365
+ },
366
+ "required": [
367
+ "attempt",
368
+ "data",
369
+ "occurrenceId",
370
+ "plannedFor",
371
+ "scheduleId",
372
+ "type",
373
+ "trigger",
374
+ "version"
375
+ ]
376
+ },
377
+ {
378
+ "type": "object",
379
+ "properties": {
380
+ "attempt": {
381
+ "type": "integer",
382
+ "exclusiveMinimum": 0,
383
+ "maximum": 9007199254740991
384
+ },
385
+ "data": {},
386
+ "occurrenceId": {
387
+ "type": "string",
388
+ "pattern": "^occ_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
389
+ },
390
+ "plannedFor": {
391
+ "type": "string",
392
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
393
+ },
394
+ "scheduleId": {
395
+ "type": "string",
396
+ "pattern": "^sch_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
397
+ },
398
+ "type": {
399
+ "type": "string",
400
+ "const": "schedule.occurrence"
401
+ },
402
+ "completion": {
403
+ "type": "object",
404
+ "properties": {
405
+ "deadline": {
406
+ "type": "string",
407
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
408
+ },
409
+ "token": {
410
+ "type": "string",
411
+ "minLength": 1
412
+ },
413
+ "url": {
414
+ "type": "string",
415
+ "format": "uri"
416
+ }
417
+ },
418
+ "required": ["deadline", "token", "url"]
419
+ },
420
+ "trigger": {
421
+ "oneOf": [
422
+ {
423
+ "type": "object",
424
+ "properties": {
425
+ "kind": {
426
+ "type": "string",
427
+ "const": "automatic"
428
+ }
429
+ },
430
+ "required": ["kind"]
431
+ },
432
+ {
433
+ "type": "object",
434
+ "properties": {
435
+ "kind": {
436
+ "type": "string",
437
+ "const": "redelivery"
438
+ },
439
+ "sourceAttemptId": {
440
+ "type": "string",
441
+ "pattern": "^att_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
442
+ }
443
+ },
444
+ "required": ["kind", "sourceAttemptId"]
445
+ }
446
+ ]
447
+ },
448
+ "version": {
449
+ "type": "string",
450
+ "const": "2026-08-23"
451
+ }
452
+ },
453
+ "required": [
454
+ "attempt",
455
+ "data",
456
+ "occurrenceId",
457
+ "plannedFor",
458
+ "scheduleId",
459
+ "type",
460
+ "completion",
461
+ "trigger",
462
+ "version"
463
+ ]
464
+ }
465
+ ]
466
+ }
467
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "purpose": "Prove that the receiver possesses the one-time endpoint secret before Greatwait marks the endpoint verified.",
3
+ "request": {
4
+ "bodyEncoding": "UTF-8 bytes of the compact JSON object in schema property order: challenge, endpointId, type, version.",
5
+ "contentType": "application/json",
6
+ "method": "POST",
7
+ "redirectPolicy": "manual; every 3xx response is refused",
8
+ "signature": {
9
+ "algorithm": "HMAC-SHA-256",
10
+ "format": "v1=<64 lowercase hexadecimal characters>",
11
+ "header": "Callback-Verification-Signature",
12
+ "input": "the exact request body bytes",
13
+ "key": "the one-time endpoint secret returned by REST endpoint creation"
14
+ }
15
+ },
16
+ "response": {
17
+ "body": "ignored after enforcing the 1024-byte response limit; return an empty body",
18
+ "proof": {
19
+ "algorithm": "HMAC-SHA-256",
20
+ "format": "v1=<64 lowercase hexadecimal characters>",
21
+ "header": "Callback-Verification-Response",
22
+ "input": "the UTF-8 bytes of the challenge string",
23
+ "key": "the same endpoint secret"
24
+ },
25
+ "status": "any 2xx status"
26
+ },
27
+ "testVector": {
28
+ "challenge": "cvc_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
29
+ "endpointId": "ep_00000000000000000000000000",
30
+ "exactBodyBase64": "eyJjaGFsbGVuZ2UiOiJjdmNfQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIsImVuZHBvaW50SWQiOiJlcF8wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInR5cGUiOiJjYWxsYmFjay5lbmRwb2ludC52ZXJpZmljYXRpb24iLCJ2ZXJzaW9uIjoiMjAyNi0wOC0wNSJ9",
31
+ "requestSignature": "v1=0d24c7fed4d752411b88025a9923627b329e0eb9d53978a6ebcf92c0678c731e",
32
+ "responseSignature": "v1=efc690a23f1870930ff3388313162c0e06406902a7a4d3f9273ffe0abcef86bd",
33
+ "secret": "verification-vector-secret"
34
+ },
35
+ "version": "2026-08-05",
36
+ "challengeSchema": {
37
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
38
+ "type": "object",
39
+ "properties": {
40
+ "challenge": {
41
+ "type": "string",
42
+ "pattern": "^cvc_[A-Za-z0-9_-]{43}$"
43
+ },
44
+ "endpointId": {
45
+ "type": "string",
46
+ "pattern": "^ep_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
47
+ },
48
+ "type": {
49
+ "type": "string",
50
+ "const": "callback.endpoint.verification"
51
+ },
52
+ "version": {
53
+ "type": "string",
54
+ "const": "2026-08-05"
55
+ }
56
+ },
57
+ "required": ["challenge", "endpointId", "type", "version"]
58
+ }
59
+ }