@authorizedretailers/spec 0.1.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.
Files changed (98) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-SPEC +396 -0
  3. package/README.md +130 -0
  4. package/dist/constants.d.ts +6 -0
  5. package/dist/constants.js +7 -0
  6. package/dist/identity.d.ts +27 -0
  7. package/dist/identity.js +92 -0
  8. package/dist/index.d.ts +8 -0
  9. package/dist/index.js +8 -0
  10. package/dist/jcs.d.ts +5 -0
  11. package/dist/jcs.js +47 -0
  12. package/dist/jws.d.ts +42 -0
  13. package/dist/jws.js +90 -0
  14. package/dist/published.d.ts +15 -0
  15. package/dist/published.js +15 -0
  16. package/dist/schemas.d.ts +519 -0
  17. package/dist/schemas.js +662 -0
  18. package/dist/timestamp.d.ts +6 -0
  19. package/dist/timestamp.js +26 -0
  20. package/dist/types.d.ts +116 -0
  21. package/dist/types.js +2 -0
  22. package/dist/validate.d.ts +28 -0
  23. package/dist/validate.js +147 -0
  24. package/fixtures/file/invalid/full-all-mixed.json +47 -0
  25. package/fixtures/file/invalid/full-amazon-missing-seller-id.json +45 -0
  26. package/fixtures/file/invalid/full-attached-jws.json +50 -0
  27. package/fixtures/file/invalid/full-authorization-expires-after-file.json +46 -0
  28. package/fixtures/file/invalid/full-duplicate-authorization-id.json +80 -0
  29. package/fixtures/file/invalid/full-empty-territories.json +43 -0
  30. package/fixtures/file/invalid/full-expires-before-issued.json +46 -0
  31. package/fixtures/file/invalid/full-expiry-over-180-days.json +46 -0
  32. package/fixtures/file/invalid/full-extra-property.json +47 -0
  33. package/fixtures/file/invalid/full-impossible-date.json +46 -0
  34. package/fixtures/file/invalid/full-lowercase-territory.json +45 -0
  35. package/fixtures/file/invalid/full-missing-authorization-expires.json +45 -0
  36. package/fixtures/file/invalid/full-missing-file-expires.json +45 -0
  37. package/fixtures/file/invalid/full-missing-product-lines.json +43 -0
  38. package/fixtures/file/invalid/full-missing-scope.json +37 -0
  39. package/fixtures/file/invalid/full-missing-territories.json +42 -0
  40. package/fixtures/file/invalid/full-name-only-retailer.json +30 -0
  41. package/fixtures/file/invalid/full-no-channels.json +31 -0
  42. package/fixtures/file/invalid/full-non-utc-timestamp.json +46 -0
  43. package/fixtures/file/invalid/full-physical-missing-country.json +50 -0
  44. package/fixtures/file/invalid/full-signature-missing-kid.json +49 -0
  45. package/fixtures/file/invalid/full-unknown-channel-type.json +50 -0
  46. package/fixtures/file/invalid/full-web-domain-is-url.json +46 -0
  47. package/fixtures/file/invalid/full-web-missing-domain.json +45 -0
  48. package/fixtures/file/invalid/full-wildcard-mixed.json +46 -0
  49. package/fixtures/file/invalid/full-wrong-spec.json +46 -0
  50. package/fixtures/file/invalid/pointer-http-url.json +9 -0
  51. package/fixtures/file/invalid/private-missing-verify.json +8 -0
  52. package/fixtures/file/invalid/private-with-authorizations.json +45 -0
  53. package/fixtures/file/invalid/unknown-form.json +9 -0
  54. package/fixtures/file/valid/full-fractional-seconds.json +46 -0
  55. package/fixtures/file/valid/full-max-expiry.json +46 -0
  56. package/fixtures/file/valid/full-no-authorizations.json +11 -0
  57. package/fixtures/file/valid/full-signed.json +50 -0
  58. package/fixtures/file/valid/full-unsigned-handwritten.json +46 -0
  59. package/fixtures/file/valid/full-worldwide-physical-proposed.json +82 -0
  60. package/fixtures/file/valid/pointer.json +9 -0
  61. package/fixtures/file/valid/private.json +9 -0
  62. package/fixtures/manifest.json +434 -0
  63. package/fixtures/verify-request/invalid/domain-with-scheme.json +10 -0
  64. package/fixtures/verify-request/invalid/missing-channel.json +5 -0
  65. package/fixtures/verify-request/invalid/physical-channel.json +10 -0
  66. package/fixtures/verify-request/invalid/retailer-name-only.json +6 -0
  67. package/fixtures/verify-request/invalid/wildcard-territory.json +10 -0
  68. package/fixtures/verify-request/valid/amazon.json +10 -0
  69. package/fixtures/verify-request/valid/web-no-product-line.json +8 -0
  70. package/fixtures/verify-response/invalid/authorized-missing-authorization-id.json +12 -0
  71. package/fixtures/verify-response/invalid/missing-observed.json +12 -0
  72. package/fixtures/verify-response/invalid/missing-signature.json +9 -0
  73. package/fixtures/verify-response/invalid/missing-valid-until.json +12 -0
  74. package/fixtures/verify-response/invalid/observed-without-last-seen.json +13 -0
  75. package/fixtures/verify-response/invalid/unknown-status.json +13 -0
  76. package/fixtures/verify-response/invalid/unlisted-observed.json +13 -0
  77. package/fixtures/verify-response/invalid/unlisted-with-authorization-id.json +12 -0
  78. package/fixtures/verify-response/invalid/unlisted-with-reason.json +12 -0
  79. package/fixtures/verify-response/invalid/valid-until-before-checked.json +13 -0
  80. package/fixtures/verify-response/invalid/valid-until-over-24h.json +13 -0
  81. package/fixtures/verify-response/invalid/with-tier.json +14 -0
  82. package/fixtures/verify-response/valid/authorized-observed.json +15 -0
  83. package/fixtures/verify-response/valid/authorized.json +13 -0
  84. package/fixtures/verify-response/valid/brand-unverified-no-reason.json +11 -0
  85. package/fixtures/verify-response/valid/brand-unverified-reason.json +12 -0
  86. package/fixtures/verify-response/valid/disputed.json +13 -0
  87. package/fixtures/verify-response/valid/expired.json +13 -0
  88. package/fixtures/verify-response/valid/unlisted.json +11 -0
  89. package/fixtures/verify-response/valid/with-signal.json +19 -0
  90. package/package.json +76 -0
  91. package/schemas/common.json +170 -0
  92. package/schemas/file-full.json +23 -0
  93. package/schemas/file-pointer.json +14 -0
  94. package/schemas/file-private.json +14 -0
  95. package/schemas/file.json +13 -0
  96. package/schemas/verify-request.json +18 -0
  97. package/schemas/verify-response.json +61 -0
  98. package/spec/spec-v0.1.md +282 -0
@@ -0,0 +1,434 @@
1
+ [
2
+ {
3
+ "path": "file/valid/full-signed.json",
4
+ "kind": "file",
5
+ "valid": true,
6
+ "note": "Section 5 example"
7
+ },
8
+ {
9
+ "path": "file/valid/full-unsigned-handwritten.json",
10
+ "kind": "file",
11
+ "valid": true,
12
+ "note": "Section 5: hand-written unsigned files are accepted"
13
+ },
14
+ {
15
+ "path": "file/valid/full-no-authorizations.json",
16
+ "kind": "file",
17
+ "valid": true,
18
+ "note": "A brand with nothing authorized"
19
+ },
20
+ {
21
+ "path": "file/valid/full-worldwide-physical-proposed.json",
22
+ "kind": "file",
23
+ "valid": true,
24
+ "note": "Worldwide scope, named product lines, eBay + physical, distributor-proposed"
25
+ },
26
+ {
27
+ "path": "file/valid/full-max-expiry.json",
28
+ "kind": "file",
29
+ "valid": true,
30
+ "note": "Exactly 180 days after issued (section 10)"
31
+ },
32
+ {
33
+ "path": "file/valid/full-fractional-seconds.json",
34
+ "kind": "file",
35
+ "valid": true,
36
+ "note": "Fractional seconds are allowed"
37
+ },
38
+ {
39
+ "path": "file/valid/pointer.json",
40
+ "kind": "file",
41
+ "valid": true,
42
+ "note": "Section 5 pointer form"
43
+ },
44
+ {
45
+ "path": "file/valid/private.json",
46
+ "kind": "file",
47
+ "valid": true,
48
+ "note": "Section 5 private form"
49
+ },
50
+ {
51
+ "path": "file/invalid/full-no-channels.json",
52
+ "kind": "file",
53
+ "valid": false,
54
+ "expect": "schema",
55
+ "note": "Section 6: at least one channel identifier"
56
+ },
57
+ {
58
+ "path": "file/invalid/full-name-only-retailer.json",
59
+ "kind": "file",
60
+ "valid": false,
61
+ "expect": "schema",
62
+ "note": "Section 6: a name alone is not verifiable"
63
+ },
64
+ {
65
+ "path": "file/invalid/full-missing-scope.json",
66
+ "kind": "file",
67
+ "valid": false,
68
+ "expect": "schema",
69
+ "note": "Section 3: every authorization MUST carry a scope"
70
+ },
71
+ {
72
+ "path": "file/invalid/full-missing-territories.json",
73
+ "kind": "file",
74
+ "valid": false,
75
+ "expect": "schema",
76
+ "note": "Section 3: scope needs territories"
77
+ },
78
+ {
79
+ "path": "file/invalid/full-missing-product-lines.json",
80
+ "kind": "file",
81
+ "valid": false,
82
+ "expect": "schema",
83
+ "note": "Section 3: scope needs product lines"
84
+ },
85
+ {
86
+ "path": "file/invalid/full-missing-authorization-expires.json",
87
+ "kind": "file",
88
+ "valid": false,
89
+ "expect": "schema",
90
+ "note": "Section 3: scope needs an expiry"
91
+ },
92
+ {
93
+ "path": "file/invalid/full-empty-territories.json",
94
+ "kind": "file",
95
+ "valid": false,
96
+ "expect": "schema",
97
+ "note": "Territories cannot be empty"
98
+ },
99
+ {
100
+ "path": "file/invalid/full-wildcard-mixed.json",
101
+ "kind": "file",
102
+ "valid": false,
103
+ "expect": "schema",
104
+ "note": "'*' must stand alone"
105
+ },
106
+ {
107
+ "path": "file/invalid/full-lowercase-territory.json",
108
+ "kind": "file",
109
+ "valid": false,
110
+ "expect": "schema",
111
+ "note": "Country codes are uppercase alpha-2"
112
+ },
113
+ {
114
+ "path": "file/invalid/full-all-mixed.json",
115
+ "kind": "file",
116
+ "valid": false,
117
+ "expect": "schema",
118
+ "note": "'all' must stand alone"
119
+ },
120
+ {
121
+ "path": "file/invalid/full-unknown-channel-type.json",
122
+ "kind": "file",
123
+ "valid": false,
124
+ "expect": "schema",
125
+ "note": "Section 6: unlisted channel type"
126
+ },
127
+ {
128
+ "path": "file/invalid/full-amazon-missing-seller-id.json",
129
+ "kind": "file",
130
+ "valid": false,
131
+ "expect": "schema",
132
+ "note": "Section 6: amazon needs seller_id"
133
+ },
134
+ {
135
+ "path": "file/invalid/full-web-missing-domain.json",
136
+ "kind": "file",
137
+ "valid": false,
138
+ "expect": "schema",
139
+ "note": "Section 6: web needs domain"
140
+ },
141
+ {
142
+ "path": "file/invalid/full-web-domain-is-url.json",
143
+ "kind": "file",
144
+ "valid": false,
145
+ "expect": "schema",
146
+ "note": "Domains are bare hostnames"
147
+ },
148
+ {
149
+ "path": "file/invalid/full-physical-missing-country.json",
150
+ "kind": "file",
151
+ "valid": false,
152
+ "expect": "schema",
153
+ "note": "Section 6: physical needs country"
154
+ },
155
+ {
156
+ "path": "file/invalid/full-wrong-spec.json",
157
+ "kind": "file",
158
+ "valid": false,
159
+ "expect": "schema",
160
+ "note": "Unknown spec version"
161
+ },
162
+ {
163
+ "path": "file/invalid/full-missing-file-expires.json",
164
+ "kind": "file",
165
+ "valid": false,
166
+ "expect": "schema",
167
+ "note": "File needs expires"
168
+ },
169
+ {
170
+ "path": "file/invalid/full-non-utc-timestamp.json",
171
+ "kind": "file",
172
+ "valid": false,
173
+ "expect": "schema",
174
+ "note": "Timestamps are UTC with Z"
175
+ },
176
+ {
177
+ "path": "file/invalid/full-extra-property.json",
178
+ "kind": "file",
179
+ "valid": false,
180
+ "expect": "schema",
181
+ "note": "Section 1: no pricing; unknown properties rejected"
182
+ },
183
+ {
184
+ "path": "file/invalid/full-attached-jws.json",
185
+ "kind": "file",
186
+ "valid": false,
187
+ "expect": "schema",
188
+ "note": "Section 8: JWS must be detached"
189
+ },
190
+ {
191
+ "path": "file/invalid/full-signature-missing-kid.json",
192
+ "kind": "file",
193
+ "valid": false,
194
+ "expect": "schema",
195
+ "note": "Section 8: every signature names its kid"
196
+ },
197
+ {
198
+ "path": "file/invalid/pointer-http-url.json",
199
+ "kind": "file",
200
+ "valid": false,
201
+ "expect": "schema",
202
+ "note": "Pointer must be HTTPS"
203
+ },
204
+ {
205
+ "path": "file/invalid/private-missing-verify.json",
206
+ "kind": "file",
207
+ "valid": false,
208
+ "expect": "schema",
209
+ "note": "Private form needs a verify endpoint"
210
+ },
211
+ {
212
+ "path": "file/invalid/private-with-authorizations.json",
213
+ "kind": "file",
214
+ "valid": false,
215
+ "expect": "schema",
216
+ "note": "Section 5: private form carries no retailers"
217
+ },
218
+ {
219
+ "path": "file/invalid/unknown-form.json",
220
+ "kind": "file",
221
+ "valid": false,
222
+ "expect": "schema",
223
+ "note": "Only full, pointer, private"
224
+ },
225
+ {
226
+ "path": "file/invalid/full-authorization-expires-after-file.json",
227
+ "kind": "file",
228
+ "valid": false,
229
+ "expect": "authorization_expires_after_file",
230
+ "note": "Section 5 MUST"
231
+ },
232
+ {
233
+ "path": "file/invalid/full-expiry-over-180-days.json",
234
+ "kind": "file",
235
+ "valid": false,
236
+ "expect": "file_expiry_exceeds_max",
237
+ "note": "Section 10: max 180 days"
238
+ },
239
+ {
240
+ "path": "file/invalid/full-expires-before-issued.json",
241
+ "kind": "file",
242
+ "valid": false,
243
+ "expect": "expires_not_after_issued",
244
+ "note": "Expiry must follow issue"
245
+ },
246
+ {
247
+ "path": "file/invalid/full-duplicate-authorization-id.json",
248
+ "kind": "file",
249
+ "valid": false,
250
+ "expect": "duplicate_authorization_id",
251
+ "note": "Authorization ids are unique within a file"
252
+ },
253
+ {
254
+ "path": "file/invalid/full-impossible-date.json",
255
+ "kind": "file",
256
+ "valid": false,
257
+ "expect": "schema",
258
+ "note": "Feb 30 does not exist (format date-time; parseTimestamp also rejects it)"
259
+ },
260
+ {
261
+ "path": "verify-request/valid/amazon.json",
262
+ "kind": "verify-request",
263
+ "valid": true,
264
+ "note": "Section 9 example"
265
+ },
266
+ {
267
+ "path": "verify-request/valid/web-no-product-line.json",
268
+ "kind": "verify-request",
269
+ "valid": true,
270
+ "note": "product_line defaults to all"
271
+ },
272
+ {
273
+ "path": "verify-request/invalid/physical-channel.json",
274
+ "kind": "verify-request",
275
+ "valid": false,
276
+ "expect": "schema",
277
+ "note": "Section 6: physical is not verifiable"
278
+ },
279
+ {
280
+ "path": "verify-request/invalid/wildcard-territory.json",
281
+ "kind": "verify-request",
282
+ "valid": false,
283
+ "expect": "schema",
284
+ "note": "A request names one territory"
285
+ },
286
+ {
287
+ "path": "verify-request/invalid/missing-channel.json",
288
+ "kind": "verify-request",
289
+ "valid": false,
290
+ "expect": "schema",
291
+ "note": "Channel is required"
292
+ },
293
+ {
294
+ "path": "verify-request/invalid/retailer-name-only.json",
295
+ "kind": "verify-request",
296
+ "valid": false,
297
+ "expect": "schema",
298
+ "note": "Section 6: agents match on identifiers, not names"
299
+ },
300
+ {
301
+ "path": "verify-request/invalid/domain-with-scheme.json",
302
+ "kind": "verify-request",
303
+ "valid": false,
304
+ "expect": "schema",
305
+ "note": "Bare hostname only"
306
+ },
307
+ {
308
+ "path": "verify-response/valid/authorized.json",
309
+ "kind": "verify-response",
310
+ "valid": true,
311
+ "note": "Section 9 example"
312
+ },
313
+ {
314
+ "path": "verify-response/valid/authorized-observed.json",
315
+ "kind": "verify-response",
316
+ "valid": true,
317
+ "note": "Section 7: seen selling within 30 days"
318
+ },
319
+ {
320
+ "path": "verify-response/valid/expired.json",
321
+ "kind": "verify-response",
322
+ "valid": true
323
+ },
324
+ {
325
+ "path": "verify-response/valid/disputed.json",
326
+ "kind": "verify-response",
327
+ "valid": true
328
+ },
329
+ {
330
+ "path": "verify-response/valid/unlisted.json",
331
+ "kind": "verify-response",
332
+ "valid": true
333
+ },
334
+ {
335
+ "path": "verify-response/valid/brand-unverified-reason.json",
336
+ "kind": "verify-response",
337
+ "valid": true,
338
+ "note": "Section 9 reason"
339
+ },
340
+ {
341
+ "path": "verify-response/valid/brand-unverified-no-reason.json",
342
+ "kind": "verify-response",
343
+ "valid": true,
344
+ "note": "reason is optional"
345
+ },
346
+ {
347
+ "path": "verify-response/valid/with-signal.json",
348
+ "kind": "verify-response",
349
+ "valid": true,
350
+ "note": "Section 7 signals"
351
+ },
352
+ {
353
+ "path": "verify-response/invalid/missing-observed.json",
354
+ "kind": "verify-response",
355
+ "valid": false,
356
+ "expect": "schema",
357
+ "note": "Section 7: every answer MUST carry observed"
358
+ },
359
+ {
360
+ "path": "verify-response/invalid/unlisted-observed.json",
361
+ "kind": "verify-response",
362
+ "valid": false,
363
+ "expect": "schema",
364
+ "note": "Section 7: observed is null unless authorized"
365
+ },
366
+ {
367
+ "path": "verify-response/invalid/observed-without-last-seen.json",
368
+ "kind": "verify-response",
369
+ "valid": false,
370
+ "expect": "schema",
371
+ "note": "Section 7: observed carries last_seen"
372
+ },
373
+ {
374
+ "path": "verify-response/invalid/with-tier.json",
375
+ "kind": "verify-response",
376
+ "valid": false,
377
+ "expect": "schema",
378
+ "note": "Evidence tiers were removed (section 7)"
379
+ },
380
+ {
381
+ "path": "verify-response/invalid/unlisted-with-reason.json",
382
+ "kind": "verify-response",
383
+ "valid": false,
384
+ "expect": "schema",
385
+ "note": "Section 9: reason only on brand_unverified"
386
+ },
387
+ {
388
+ "path": "verify-response/invalid/unlisted-with-authorization-id.json",
389
+ "kind": "verify-response",
390
+ "valid": false,
391
+ "expect": "schema",
392
+ "note": "Unlisted answers leak nothing about other authorizations"
393
+ },
394
+ {
395
+ "path": "verify-response/invalid/authorized-missing-authorization-id.json",
396
+ "kind": "verify-response",
397
+ "valid": false,
398
+ "expect": "schema"
399
+ },
400
+ {
401
+ "path": "verify-response/invalid/missing-valid-until.json",
402
+ "kind": "verify-response",
403
+ "valid": false,
404
+ "expect": "schema",
405
+ "note": "Section 9: valid_until is required"
406
+ },
407
+ {
408
+ "path": "verify-response/invalid/missing-signature.json",
409
+ "kind": "verify-response",
410
+ "valid": false,
411
+ "expect": "schema",
412
+ "note": "Answers are signed"
413
+ },
414
+ {
415
+ "path": "verify-response/invalid/unknown-status.json",
416
+ "kind": "verify-response",
417
+ "valid": false,
418
+ "expect": "schema",
419
+ "note": "Section 1: unlisted is not unlawful"
420
+ },
421
+ {
422
+ "path": "verify-response/invalid/valid-until-over-24h.json",
423
+ "kind": "verify-response",
424
+ "valid": false,
425
+ "expect": "valid_until_exceeds_max",
426
+ "note": "Section 9 MUST"
427
+ },
428
+ {
429
+ "path": "verify-response/invalid/valid-until-before-checked.json",
430
+ "kind": "verify-response",
431
+ "valid": false,
432
+ "expect": "valid_until_not_after_checked"
433
+ }
434
+ ]
@@ -0,0 +1,10 @@
1
+ {
2
+ "brand_domain": "https://brand.example",
3
+ "channel": {
4
+ "type": "amazon",
5
+ "marketplace": "US",
6
+ "seller_id": "A1B2C3D4E5F6G7"
7
+ },
8
+ "territory": "US",
9
+ "product_line": "all"
10
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "brand_domain": "brand.example",
3
+ "territory": "US",
4
+ "product_line": "all"
5
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "brand_domain": "brand.example",
3
+ "channel": {
4
+ "type": "physical",
5
+ "address": "1 Main St",
6
+ "country": "US"
7
+ },
8
+ "territory": "US",
9
+ "product_line": "all"
10
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "brand_domain": "brand.example",
3
+ "territory": "US",
4
+ "product_line": "all",
5
+ "retailer": "Example Retail LLC"
6
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "brand_domain": "brand.example",
3
+ "channel": {
4
+ "type": "amazon",
5
+ "marketplace": "US",
6
+ "seller_id": "A1B2C3D4E5F6G7"
7
+ },
8
+ "territory": "*",
9
+ "product_line": "all"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "brand_domain": "brand.example",
3
+ "channel": {
4
+ "type": "amazon",
5
+ "marketplace": "US",
6
+ "seller_id": "A1B2C3D4E5F6G7"
7
+ },
8
+ "territory": "US",
9
+ "product_line": "all"
10
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "brand_domain": "brand.example",
3
+ "channel": {
4
+ "type": "web",
5
+ "domain": "retailer.example"
6
+ },
7
+ "territory": "CA"
8
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "status": "authorized",
3
+ "expires": "2026-12-22T00:00:00Z",
4
+ "checked": "2026-09-23T14:02:11Z",
5
+ "valid_until": "2026-09-24T14:02:11Z",
6
+ "observed": null,
7
+ "signals": [],
8
+ "signature": {
9
+ "kid": "ar-2026-09",
10
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
11
+ }
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "status": "authorized",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "valid_until": "2026-09-24T14:02:11Z",
7
+ "signals": [],
8
+ "signature": {
9
+ "kid": "ar-2026-09",
10
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
11
+ }
12
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "status": "authorized",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "valid_until": "2026-09-24T14:02:11Z",
7
+ "observed": null,
8
+ "signals": []
9
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "status": "authorized",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "observed": null,
7
+ "signals": [],
8
+ "signature": {
9
+ "kid": "ar-2026-09",
10
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
11
+ }
12
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "authorized",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "valid_until": "2026-09-24T14:02:11Z",
7
+ "observed": {},
8
+ "signals": [],
9
+ "signature": {
10
+ "kid": "ar-2026-09",
11
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "unlawful",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "valid_until": "2026-09-24T14:02:11Z",
7
+ "observed": null,
8
+ "signals": [],
9
+ "signature": {
10
+ "kid": "ar-2026-09",
11
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "unlisted",
3
+ "checked": "2026-09-23T14:02:11Z",
4
+ "valid_until": "2026-09-24T14:02:11Z",
5
+ "observed": {
6
+ "last_seen": "2026-09-20T00:00:00Z"
7
+ },
8
+ "signals": [],
9
+ "signature": {
10
+ "kid": "ar-2026-09",
11
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
12
+ }
13
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "status": "unlisted",
3
+ "checked": "2026-09-23T14:02:11Z",
4
+ "valid_until": "2026-09-24T14:02:11Z",
5
+ "observed": null,
6
+ "signals": [],
7
+ "signature": {
8
+ "kid": "ar-2026-09",
9
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
10
+ },
11
+ "authorization_id": "auth_01J9X2"
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "status": "unlisted",
3
+ "checked": "2026-09-23T14:02:11Z",
4
+ "valid_until": "2026-09-24T14:02:11Z",
5
+ "observed": null,
6
+ "signals": [],
7
+ "signature": {
8
+ "kid": "ar-2026-09",
9
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
10
+ },
11
+ "reason": "domain_unlinked"
12
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "authorized",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "valid_until": "2026-09-23T14:02:11Z",
7
+ "observed": null,
8
+ "signals": [],
9
+ "signature": {
10
+ "kid": "ar-2026-09",
11
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "authorized",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "valid_until": "2026-09-24T14:02:12Z",
7
+ "observed": null,
8
+ "signals": [],
9
+ "signature": {
10
+ "kid": "ar-2026-09",
11
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
12
+ }
13
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "status": "authorized",
3
+ "authorization_id": "auth_01J9X2",
4
+ "expires": "2026-12-22T00:00:00Z",
5
+ "checked": "2026-09-23T14:02:11Z",
6
+ "valid_until": "2026-09-24T14:02:11Z",
7
+ "observed": null,
8
+ "signals": [],
9
+ "signature": {
10
+ "kid": "ar-2026-09",
11
+ "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImFyLTIwMjYtMDkifQ..c2lnbmF0dXJlLXBsYWNlaG9sZGVy"
12
+ },
13
+ "tier": "brand_attested"
14
+ }