@fuzdev/fuz_app 0.139.0 → 0.141.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 (182) hide show
  1. package/dist/actions/CLAUDE.md +62 -17
  2. package/dist/actions/action_rpc.d.ts +5 -1
  3. package/dist/actions/action_rpc.d.ts.map +1 -1
  4. package/dist/actions/action_rpc.js +9 -1
  5. package/dist/actions/connection_closer.d.ts +25 -2
  6. package/dist/actions/connection_closer.d.ts.map +1 -1
  7. package/dist/actions/connection_closer.js +8 -1
  8. package/dist/actions/register_action_ws.d.ts +42 -6
  9. package/dist/actions/register_action_ws.d.ts.map +1 -1
  10. package/dist/actions/register_action_ws.js +87 -19
  11. package/dist/actions/register_ws_endpoint.d.ts +15 -6
  12. package/dist/actions/register_ws_endpoint.d.ts.map +1 -1
  13. package/dist/actions/register_ws_endpoint.js +5 -2
  14. package/dist/actions/socket.svelte.d.ts +19 -4
  15. package/dist/actions/socket.svelte.d.ts.map +1 -1
  16. package/dist/actions/socket.svelte.js +31 -4
  17. package/dist/actions/transports.d.ts +30 -1
  18. package/dist/actions/transports.d.ts.map +1 -1
  19. package/dist/actions/transports.js +30 -1
  20. package/dist/actions/transports_ws_auth_guard.d.ts +13 -6
  21. package/dist/actions/transports_ws_auth_guard.d.ts.map +1 -1
  22. package/dist/actions/transports_ws_auth_guard.js +24 -10
  23. package/dist/actions/transports_ws_backend.d.ts +51 -5
  24. package/dist/actions/transports_ws_backend.d.ts.map +1 -1
  25. package/dist/actions/transports_ws_backend.js +62 -9
  26. package/dist/actions/ws_endpoint_spec.d.ts +11 -10
  27. package/dist/actions/ws_endpoint_spec.d.ts.map +1 -1
  28. package/dist/auth/CLAUDE.md +11 -9
  29. package/dist/auth/account_route_schema.d.ts +1 -0
  30. package/dist/auth/account_route_schema.d.ts.map +1 -1
  31. package/dist/auth/account_route_schema.js +4 -0
  32. package/dist/auth/api_token.d.ts +20 -0
  33. package/dist/auth/api_token.d.ts.map +1 -1
  34. package/dist/auth/api_token.js +21 -1
  35. package/dist/auth/api_token_queries.d.ts +22 -4
  36. package/dist/auth/api_token_queries.d.ts.map +1 -1
  37. package/dist/auth/api_token_queries.js +11 -6
  38. package/dist/auth/audit_log_routes.d.ts +10 -0
  39. package/dist/auth/audit_log_routes.d.ts.map +1 -1
  40. package/dist/auth/audit_log_routes.js +20 -0
  41. package/dist/auth/audit_log_schema.d.ts +30 -5
  42. package/dist/auth/audit_log_schema.d.ts.map +1 -1
  43. package/dist/auth/audit_log_schema.js +30 -0
  44. package/dist/auth/bearer_auth.d.ts +4 -2
  45. package/dist/auth/bearer_auth.d.ts.map +1 -1
  46. package/dist/auth/bearer_auth.js +19 -8
  47. package/dist/auth/bootstrap_route_schema.d.ts +1 -0
  48. package/dist/auth/bootstrap_route_schema.d.ts.map +1 -1
  49. package/dist/auth/bootstrap_route_schema.js +1 -0
  50. package/dist/auth/cleanup.d.ts +9 -9
  51. package/dist/auth/cleanup.js +9 -9
  52. package/dist/auth/credential_deadline.d.ts +95 -0
  53. package/dist/auth/credential_deadline.d.ts.map +1 -0
  54. package/dist/auth/credential_deadline.js +139 -0
  55. package/dist/auth/daemon_token_middleware.d.ts.map +1 -1
  56. package/dist/auth/daemon_token_middleware.js +4 -1
  57. package/dist/auth/middleware.d.ts +90 -12
  58. package/dist/auth/middleware.d.ts.map +1 -1
  59. package/dist/auth/middleware.js +115 -16
  60. package/dist/auth/request_context.d.ts +4 -2
  61. package/dist/auth/request_context.d.ts.map +1 -1
  62. package/dist/auth/request_context.js +14 -3
  63. package/dist/auth/resolved_auth.d.ts +13 -2
  64. package/dist/auth/resolved_auth.d.ts.map +1 -1
  65. package/dist/auth/resolved_auth.js +5 -4
  66. package/dist/auth/session_cookie.d.ts +4 -0
  67. package/dist/auth/session_cookie.d.ts.map +1 -1
  68. package/dist/auth/session_cookie.js +3 -2
  69. package/dist/auth/session_middleware.d.ts +1 -1
  70. package/dist/auth/session_middleware.d.ts.map +1 -1
  71. package/dist/auth/session_middleware.js +4 -1
  72. package/dist/auth/session_queries.d.ts +19 -2
  73. package/dist/auth/session_queries.d.ts.map +1 -1
  74. package/dist/auth/session_queries.js +8 -2
  75. package/dist/auth/signup_route_schema.d.ts.map +1 -1
  76. package/dist/auth/signup_route_schema.js +1 -0
  77. package/dist/hono_context.d.ts +23 -0
  78. package/dist/hono_context.d.ts.map +1 -1
  79. package/dist/hono_context.js +19 -0
  80. package/dist/http/CLAUDE.md +41 -15
  81. package/dist/http/middleware_spec.d.ts +16 -0
  82. package/dist/http/middleware_spec.d.ts.map +1 -1
  83. package/dist/http/origin.d.ts +113 -18
  84. package/dist/http/origin.d.ts.map +1 -1
  85. package/dist/http/origin.js +247 -127
  86. package/dist/http/route_spec.d.ts +21 -0
  87. package/dist/http/route_spec.d.ts.map +1 -1
  88. package/dist/http/schema_helpers.d.ts +22 -0
  89. package/dist/http/schema_helpers.d.ts.map +1 -1
  90. package/dist/http/schema_helpers.js +24 -0
  91. package/dist/http/surface.d.ts +6 -1
  92. package/dist/http/surface.d.ts.map +1 -1
  93. package/dist/http/surface.js +12 -5
  94. package/dist/realtime/sse_auth_guard.d.ts +22 -6
  95. package/dist/realtime/sse_auth_guard.d.ts.map +1 -1
  96. package/dist/realtime/sse_auth_guard.js +31 -12
  97. package/dist/realtime/subscriber_registry.d.ts +10 -1
  98. package/dist/realtime/subscriber_registry.d.ts.map +1 -1
  99. package/dist/realtime/subscriber_registry.js +10 -1
  100. package/dist/server/app_server.d.ts +20 -7
  101. package/dist/server/app_server.d.ts.map +1 -1
  102. package/dist/server/app_server.js +8 -3
  103. package/dist/server/env.d.ts +2 -1
  104. package/dist/server/env.d.ts.map +1 -1
  105. package/dist/server/env.js +7 -17
  106. package/dist/server/serve_fact_route.d.ts.map +1 -1
  107. package/dist/server/serve_fact_route.js +1 -0
  108. package/dist/testing/CLAUDE.md +154 -22
  109. package/dist/testing/adversarial_headers.d.ts.map +1 -1
  110. package/dist/testing/adversarial_headers.js +13 -6
  111. package/dist/testing/connection_closer_helpers.d.ts +6 -1
  112. package/dist/testing/connection_closer_helpers.d.ts.map +1 -1
  113. package/dist/testing/connection_closer_helpers.js +4 -0
  114. package/dist/testing/cross_backend/body_size.d.ts.map +1 -1
  115. package/dist/testing/cross_backend/body_size.js +14 -65
  116. package/dist/testing/cross_backend/capabilities.d.ts +26 -2
  117. package/dist/testing/cross_backend/capabilities.d.ts.map +1 -1
  118. package/dist/testing/cross_backend/capabilities.js +9 -3
  119. package/dist/testing/cross_backend/conformance_case.d.ts +11 -3
  120. package/dist/testing/cross_backend/conformance_case.d.ts.map +1 -1
  121. package/dist/testing/cross_backend/conformance_case.js +6 -0
  122. package/dist/testing/cross_backend/conformance_table.d.ts.map +1 -1
  123. package/dist/testing/cross_backend/conformance_table.js +20 -19
  124. package/dist/testing/cross_backend/credential_deadline.d.ts +25 -0
  125. package/dist/testing/cross_backend/credential_deadline.d.ts.map +1 -0
  126. package/dist/testing/cross_backend/credential_deadline.js +185 -0
  127. package/dist/testing/cross_backend/default_backend_configs.d.ts.map +1 -1
  128. package/dist/testing/cross_backend/default_backend_configs.js +13 -2
  129. package/dist/testing/cross_backend/full_spine_mount.d.ts +3 -0
  130. package/dist/testing/cross_backend/full_spine_mount.d.ts.map +1 -1
  131. package/dist/testing/cross_backend/full_spine_mount.js +7 -1
  132. package/dist/testing/cross_backend/narrowed_api_token.d.ts +23 -0
  133. package/dist/testing/cross_backend/narrowed_api_token.d.ts.map +1 -0
  134. package/dist/testing/cross_backend/narrowed_api_token.js +40 -0
  135. package/dist/testing/cross_backend/origin.d.ts.map +1 -1
  136. package/dist/testing/cross_backend/origin.js +6 -26
  137. package/dist/testing/cross_backend/origin_conformance.d.ts +152 -0
  138. package/dist/testing/cross_backend/origin_conformance.d.ts.map +1 -0
  139. package/dist/testing/cross_backend/origin_conformance.js +136 -0
  140. package/dist/testing/cross_backend/origin_conformance.json +1679 -0
  141. package/dist/testing/cross_backend/origin_scope.d.ts +16 -0
  142. package/dist/testing/cross_backend/origin_scope.d.ts.map +1 -0
  143. package/dist/testing/cross_backend/origin_scope.js +140 -0
  144. package/dist/testing/cross_backend/role_grant_cross_helpers.d.ts +35 -0
  145. package/dist/testing/cross_backend/role_grant_cross_helpers.d.ts.map +1 -0
  146. package/dist/testing/cross_backend/role_grant_cross_helpers.js +64 -0
  147. package/dist/testing/cross_backend/role_grant_offer_notification_ws.d.ts +8 -0
  148. package/dist/testing/cross_backend/role_grant_offer_notification_ws.d.ts.map +1 -1
  149. package/dist/testing/cross_backend/role_grant_offer_notification_ws.js +44 -33
  150. package/dist/testing/cross_backend/rust_spine_stub_backend_config.d.ts.map +1 -1
  151. package/dist/testing/cross_backend/rust_spine_stub_backend_config.js +6 -4
  152. package/dist/testing/cross_backend/spine_surface_constants.d.ts +19 -0
  153. package/dist/testing/cross_backend/spine_surface_constants.d.ts.map +1 -1
  154. package/dist/testing/cross_backend/spine_surface_constants.js +22 -0
  155. package/dist/testing/cross_backend/testing_backdoor.d.ts.map +1 -1
  156. package/dist/testing/cross_backend/testing_backdoor.js +20 -7
  157. package/dist/testing/cross_backend/testing_reset_actions.d.ts +180 -5
  158. package/dist/testing/cross_backend/testing_reset_actions.d.ts.map +1 -1
  159. package/dist/testing/cross_backend/testing_reset_actions.js +154 -5
  160. package/dist/testing/cross_backend/token_scope_surface.d.ts.map +1 -1
  161. package/dist/testing/cross_backend/token_scope_surface.js +25 -21
  162. package/dist/testing/cross_backend/transport_composition.d.ts +60 -0
  163. package/dist/testing/cross_backend/transport_composition.d.ts.map +1 -0
  164. package/dist/testing/cross_backend/transport_composition.js +364 -0
  165. package/dist/testing/cross_backend/ts_spine_backend_config.d.ts.map +1 -1
  166. package/dist/testing/cross_backend/ts_spine_backend_config.js +21 -6
  167. package/dist/testing/cross_backend/ws_role_gated.d.ts +38 -0
  168. package/dist/testing/cross_backend/ws_role_gated.d.ts.map +1 -0
  169. package/dist/testing/cross_backend/ws_role_gated.js +142 -0
  170. package/dist/testing/entities.d.ts +23 -0
  171. package/dist/testing/entities.d.ts.map +1 -1
  172. package/dist/testing/entities.js +37 -0
  173. package/dist/testing/integration.d.ts.map +1 -1
  174. package/dist/testing/integration.js +3 -1
  175. package/dist/testing/middleware.d.ts +10 -0
  176. package/dist/testing/middleware.d.ts.map +1 -1
  177. package/dist/testing/middleware.js +31 -7
  178. package/dist/testing/stubs.d.ts +16 -3
  179. package/dist/testing/stubs.d.ts.map +1 -1
  180. package/dist/testing/stubs.js +20 -7
  181. package/dist/testing/surface_invariants.js +2 -2
  182. package/package.json +12 -12
@@ -0,0 +1,1679 @@
1
+ {
2
+ "parse": [
3
+ {
4
+ "raw": "http://localhost:5460",
5
+ "ok": true
6
+ },
7
+ {
8
+ "raw": "HTTP://LocalHost:5460",
9
+ "ok": true,
10
+ "note": "scheme and host are case-insensitive"
11
+ },
12
+ {
13
+ "raw": "https://app.example.com",
14
+ "ok": true
15
+ },
16
+ {
17
+ "raw": "https://app.example.com:8443",
18
+ "ok": true
19
+ },
20
+ {
21
+ "raw": "http://localhost:443",
22
+ "ok": true,
23
+ "note": "the other scheme's default port is a port like any other"
24
+ },
25
+ {
26
+ "raw": "https://app.example.com:80",
27
+ "ok": true
28
+ },
29
+ {
30
+ "raw": "http://example.com:65535",
31
+ "ok": true
32
+ },
33
+ {
34
+ "raw": "http://192.168.1.10:5460",
35
+ "ok": true
36
+ },
37
+ {
38
+ "raw": "http://127.0.0.1:4460",
39
+ "ok": true
40
+ },
41
+ {
42
+ "raw": "http://[::1]:5460",
43
+ "ok": true
44
+ },
45
+ {
46
+ "raw": "http://[::1]",
47
+ "ok": true
48
+ },
49
+ {
50
+ "raw": "http://[2001:db8::1]:5460",
51
+ "ok": true
52
+ },
53
+ {
54
+ "raw": "http://[2001:DB8::1]:5460",
55
+ "ok": true,
56
+ "note": "hex digits are case-insensitive"
57
+ },
58
+ {
59
+ "raw": "http://[fe80::1:0:0:1]",
60
+ "ok": true
61
+ },
62
+ {
63
+ "raw": "http://[::ffff:102:304]",
64
+ "ok": true,
65
+ "note": "an IPv4-mapped address in the hex form a browser sends"
66
+ },
67
+ {
68
+ "raw": "http://[1:2:3:4:5:6:7:8]",
69
+ "ok": true
70
+ },
71
+ {
72
+ "raw": "http://[1:0:2:3:4:5:6:7]",
73
+ "ok": true,
74
+ "note": "a single zero group is not compressed"
75
+ },
76
+ {
77
+ "raw": "http://[1::2:3:0:0:4]",
78
+ "ok": true,
79
+ "note": "of two equal zero runs the first is the one compressed"
80
+ },
81
+ {
82
+ "raw": "http://[::]",
83
+ "ok": true
84
+ },
85
+ {
86
+ "raw": "http://localhost",
87
+ "ok": true
88
+ },
89
+ {
90
+ "raw": "http://localhost.",
91
+ "ok": true,
92
+ "note": "a trailing dot on a name is kept as written"
93
+ },
94
+ {
95
+ "raw": "https://xn--bcher-kva.example",
96
+ "ok": true,
97
+ "note": "punycode is accepted as written"
98
+ },
99
+ {
100
+ "raw": "https://my_host.example",
101
+ "ok": true
102
+ },
103
+ {
104
+ "raw": "https://ex-ample.com",
105
+ "ok": true
106
+ },
107
+ {
108
+ "raw": "https://1.2.3.4a",
109
+ "ok": true,
110
+ "note": "a last label that only starts with a digit is a name"
111
+ },
112
+ {
113
+ "raw": "https://0xg.example",
114
+ "ok": true
115
+ },
116
+ {
117
+ "raw": "http://localhost:*",
118
+ "ok": true
119
+ },
120
+ {
121
+ "raw": "http://[::1]:*",
122
+ "ok": true
123
+ },
124
+ {
125
+ "raw": "https://*.example.com",
126
+ "ok": true
127
+ },
128
+ {
129
+ "raw": "https://*.*.corp.example.com",
130
+ "ok": true
131
+ },
132
+ {
133
+ "raw": "https://*.example.com:*",
134
+ "ok": true
135
+ },
136
+ {
137
+ "raw": "https://example.*",
138
+ "ok": true
139
+ },
140
+ {
141
+ "raw": "https://api.*.example.com",
142
+ "ok": true
143
+ },
144
+ {
145
+ "raw": "http://192.168.1.*",
146
+ "ok": true
147
+ },
148
+ {
149
+ "raw": "http://*.168.1.10:5460",
150
+ "ok": true
151
+ },
152
+ {
153
+ "raw": "http://*",
154
+ "ok": true
155
+ },
156
+ {
157
+ "raw": "http://*:*",
158
+ "ok": true
159
+ },
160
+ {
161
+ "raw": "https://*.*",
162
+ "ok": true
163
+ },
164
+ {
165
+ "raw": "http://*.*.*.*",
166
+ "ok": true
167
+ },
168
+ {
169
+ "raw": " http://localhost:5173 ,\thttps://app.example.com\n",
170
+ "ok": true,
171
+ "note": "entries are trimmed of ASCII whitespace"
172
+ },
173
+ {
174
+ "raw": "http://localhost:3000,https://*.example.com,http://[::1]:3000,https://[2001:db8::1]:*",
175
+ "ok": true
176
+ },
177
+ {
178
+ "raw": "",
179
+ "errors": [
180
+ {
181
+ "kind": "no_origins"
182
+ }
183
+ ]
184
+ },
185
+ {
186
+ "raw": " ",
187
+ "errors": [
188
+ {
189
+ "kind": "no_origins"
190
+ }
191
+ ]
192
+ },
193
+ {
194
+ "raw": "\t\n",
195
+ "errors": [
196
+ {
197
+ "kind": "no_origins"
198
+ }
199
+ ]
200
+ },
201
+ {
202
+ "raw": ",",
203
+ "errors": [
204
+ {
205
+ "index": 1,
206
+ "kind": "empty_entry"
207
+ },
208
+ {
209
+ "index": 2,
210
+ "kind": "empty_entry"
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "raw": " , ",
216
+ "errors": [
217
+ {
218
+ "index": 1,
219
+ "kind": "empty_entry"
220
+ },
221
+ {
222
+ "index": 2,
223
+ "kind": "empty_entry"
224
+ }
225
+ ]
226
+ },
227
+ {
228
+ "raw": "http://localhost:4460,",
229
+ "errors": [
230
+ {
231
+ "index": 2,
232
+ "kind": "empty_entry"
233
+ }
234
+ ]
235
+ },
236
+ {
237
+ "raw": ",http://localhost:4460",
238
+ "errors": [
239
+ {
240
+ "index": 1,
241
+ "kind": "empty_entry"
242
+ }
243
+ ]
244
+ },
245
+ {
246
+ "raw": "http://localhost:4460,,http://127.0.0.1:4460",
247
+ "errors": [
248
+ {
249
+ "index": 2,
250
+ "kind": "empty_entry"
251
+ }
252
+ ]
253
+ },
254
+ {
255
+ "raw": "http://localhost:3000,,https://example.com,",
256
+ "errors": [
257
+ {
258
+ "index": 2,
259
+ "kind": "empty_entry"
260
+ },
261
+ {
262
+ "index": 4,
263
+ "kind": "empty_entry"
264
+ }
265
+ ],
266
+ "note": "every refused entry is reported"
267
+ },
268
+ {
269
+ "raw": "http://localhost:5173, null,https://a.example/ ,ftp://x",
270
+ "errors": [
271
+ {
272
+ "index": 2,
273
+ "kind": "missing_scheme"
274
+ },
275
+ {
276
+ "index": 3,
277
+ "kind": "has_path"
278
+ },
279
+ {
280
+ "index": 4,
281
+ "kind": "unsupported_scheme"
282
+ }
283
+ ]
284
+ },
285
+ {
286
+ "raw": "http://local host:5460",
287
+ "errors": [
288
+ {
289
+ "index": 1,
290
+ "kind": "not_printable_ascii"
291
+ }
292
+ ]
293
+ },
294
+ {
295
+ "raw": "http://local\u007fhost:5460",
296
+ "errors": [
297
+ {
298
+ "index": 1,
299
+ "kind": "not_printable_ascii"
300
+ }
301
+ ]
302
+ },
303
+ {
304
+ "raw": "http://local\u001bhost",
305
+ "errors": [
306
+ {
307
+ "index": 1,
308
+ "kind": "not_printable_ascii"
309
+ }
310
+ ]
311
+ },
312
+ {
313
+ "raw": "https://b\u00fccher.example",
314
+ "errors": [
315
+ {
316
+ "index": 1,
317
+ "kind": "not_printable_ascii"
318
+ }
319
+ ],
320
+ "note": "an IDN host is refused; write its punycode"
321
+ },
322
+ {
323
+ "raw": "https://\u4f8b\u3048.jp",
324
+ "errors": [
325
+ {
326
+ "index": 1,
327
+ "kind": "not_printable_ascii"
328
+ }
329
+ ]
330
+ },
331
+ {
332
+ "raw": "\u00a0http://localhost:5173",
333
+ "errors": [
334
+ {
335
+ "index": 1,
336
+ "kind": "not_printable_ascii"
337
+ }
338
+ ],
339
+ "note": "only ASCII whitespace is trimmed"
340
+ },
341
+ {
342
+ "raw": "\ufeffhttp://localhost:5173",
343
+ "errors": [
344
+ {
345
+ "index": 1,
346
+ "kind": "not_printable_ascii"
347
+ }
348
+ ]
349
+ },
350
+ {
351
+ "raw": "http://localhost:5173\u0085",
352
+ "errors": [
353
+ {
354
+ "index": 1,
355
+ "kind": "not_printable_ascii"
356
+ }
357
+ ]
358
+ },
359
+ {
360
+ "raw": "localhost:5460",
361
+ "errors": [
362
+ {
363
+ "index": 1,
364
+ "kind": "missing_scheme"
365
+ }
366
+ ]
367
+ },
368
+ {
369
+ "raw": "localhost",
370
+ "errors": [
371
+ {
372
+ "index": 1,
373
+ "kind": "missing_scheme"
374
+ }
375
+ ]
376
+ },
377
+ {
378
+ "raw": "example.com",
379
+ "errors": [
380
+ {
381
+ "index": 1,
382
+ "kind": "missing_scheme"
383
+ }
384
+ ]
385
+ },
386
+ {
387
+ "raw": "*.example.com",
388
+ "errors": [
389
+ {
390
+ "index": 1,
391
+ "kind": "missing_scheme"
392
+ }
393
+ ]
394
+ },
395
+ {
396
+ "raw": "not-a-url",
397
+ "errors": [
398
+ {
399
+ "index": 1,
400
+ "kind": "missing_scheme"
401
+ }
402
+ ]
403
+ },
404
+ {
405
+ "raw": "*",
406
+ "errors": [
407
+ {
408
+ "index": 1,
409
+ "kind": "missing_scheme"
410
+ }
411
+ ]
412
+ },
413
+ {
414
+ "raw": "null",
415
+ "errors": [
416
+ {
417
+ "index": 1,
418
+ "kind": "missing_scheme"
419
+ }
420
+ ],
421
+ "note": "an opaque origin is never allowed"
422
+ },
423
+ {
424
+ "raw": "//localhost:5460",
425
+ "errors": [
426
+ {
427
+ "index": 1,
428
+ "kind": "missing_scheme"
429
+ }
430
+ ]
431
+ },
432
+ {
433
+ "raw": "http:/localhost",
434
+ "errors": [
435
+ {
436
+ "index": 1,
437
+ "kind": "missing_scheme"
438
+ }
439
+ ]
440
+ },
441
+ {
442
+ "raw": "ws://localhost:5460",
443
+ "errors": [
444
+ {
445
+ "index": 1,
446
+ "kind": "unsupported_scheme"
447
+ }
448
+ ]
449
+ },
450
+ {
451
+ "raw": "ftp://example.com",
452
+ "errors": [
453
+ {
454
+ "index": 1,
455
+ "kind": "unsupported_scheme"
456
+ }
457
+ ]
458
+ },
459
+ {
460
+ "raw": "file://localhost",
461
+ "errors": [
462
+ {
463
+ "index": 1,
464
+ "kind": "unsupported_scheme"
465
+ }
466
+ ]
467
+ },
468
+ {
469
+ "raw": "file:///etc/passwd",
470
+ "errors": [
471
+ {
472
+ "index": 1,
473
+ "kind": "unsupported_scheme"
474
+ }
475
+ ]
476
+ },
477
+ {
478
+ "raw": "chrome-extension://abcdefghijklmnopabcdefghijklmnop",
479
+ "errors": [
480
+ {
481
+ "index": 1,
482
+ "kind": "unsupported_scheme"
483
+ }
484
+ ]
485
+ },
486
+ {
487
+ "raw": "moz-extension://0d4b8f3e-1234-4cde-9abc-0123456789ab",
488
+ "errors": [
489
+ {
490
+ "index": 1,
491
+ "kind": "unsupported_scheme"
492
+ }
493
+ ]
494
+ },
495
+ {
496
+ "raw": "://localhost",
497
+ "errors": [
498
+ {
499
+ "index": 1,
500
+ "kind": "unsupported_scheme"
501
+ }
502
+ ]
503
+ },
504
+ {
505
+ "raw": "http://localhost:5460/",
506
+ "errors": [
507
+ {
508
+ "index": 1,
509
+ "kind": "has_path"
510
+ }
511
+ ],
512
+ "note": "the trailing slash a pasted URL carries"
513
+ },
514
+ {
515
+ "raw": "http://localhost:5460/chats",
516
+ "errors": [
517
+ {
518
+ "index": 1,
519
+ "kind": "has_path"
520
+ }
521
+ ]
522
+ },
523
+ {
524
+ "raw": "http://example.com/api",
525
+ "errors": [
526
+ {
527
+ "index": 1,
528
+ "kind": "has_path"
529
+ }
530
+ ]
531
+ },
532
+ {
533
+ "raw": "https://app.example.com?x=1",
534
+ "errors": [
535
+ {
536
+ "index": 1,
537
+ "kind": "has_path"
538
+ }
539
+ ]
540
+ },
541
+ {
542
+ "raw": "https://app.example.com#top",
543
+ "errors": [
544
+ {
545
+ "index": 1,
546
+ "kind": "has_path"
547
+ }
548
+ ]
549
+ },
550
+ {
551
+ "raw": "http://user@localhost:5460",
552
+ "errors": [
553
+ {
554
+ "index": 1,
555
+ "kind": "has_userinfo"
556
+ }
557
+ ]
558
+ },
559
+ {
560
+ "raw": "http://user:pass@localhost",
561
+ "errors": [
562
+ {
563
+ "index": 1,
564
+ "kind": "has_userinfo"
565
+ }
566
+ ]
567
+ },
568
+ {
569
+ "raw": "http://",
570
+ "errors": [
571
+ {
572
+ "index": 1,
573
+ "kind": "missing_host"
574
+ }
575
+ ]
576
+ },
577
+ {
578
+ "raw": "http://:5460",
579
+ "errors": [
580
+ {
581
+ "index": 1,
582
+ "kind": "missing_host"
583
+ }
584
+ ]
585
+ },
586
+ {
587
+ "raw": "http://::1:5460",
588
+ "errors": [
589
+ {
590
+ "index": 1,
591
+ "kind": "unbracketed_ipv6"
592
+ }
593
+ ]
594
+ },
595
+ {
596
+ "raw": "http://2001:db8::1",
597
+ "errors": [
598
+ {
599
+ "index": 1,
600
+ "kind": "unbracketed_ipv6"
601
+ }
602
+ ]
603
+ },
604
+ {
605
+ "raw": "https://app%2eexample.com",
606
+ "errors": [
607
+ {
608
+ "index": 1,
609
+ "kind": "invalid_host_char"
610
+ }
611
+ ]
612
+ },
613
+ {
614
+ "raw": "https://exa%6dple.com",
615
+ "errors": [
616
+ {
617
+ "index": 1,
618
+ "kind": "invalid_host_char"
619
+ }
620
+ ]
621
+ },
622
+ {
623
+ "raw": "http://local\\host:5460",
624
+ "errors": [
625
+ {
626
+ "index": 1,
627
+ "kind": "invalid_host_char"
628
+ }
629
+ ],
630
+ "note": "a backslash"
631
+ },
632
+ {
633
+ "raw": "http://a|b",
634
+ "errors": [
635
+ {
636
+ "index": 1,
637
+ "kind": "invalid_host_char"
638
+ }
639
+ ]
640
+ },
641
+ {
642
+ "raw": "http://a^b",
643
+ "errors": [
644
+ {
645
+ "index": 1,
646
+ "kind": "invalid_host_char"
647
+ }
648
+ ]
649
+ },
650
+ {
651
+ "raw": "http://a<b>",
652
+ "errors": [
653
+ {
654
+ "index": 1,
655
+ "kind": "invalid_host_char"
656
+ }
657
+ ]
658
+ },
659
+ {
660
+ "raw": "http://a]:5460",
661
+ "errors": [
662
+ {
663
+ "index": 1,
664
+ "kind": "invalid_host_char"
665
+ }
666
+ ]
667
+ },
668
+ {
669
+ "raw": "http://a[b",
670
+ "errors": [
671
+ {
672
+ "index": 1,
673
+ "kind": "invalid_host_char"
674
+ }
675
+ ]
676
+ },
677
+ {
678
+ "raw": "https://*foo.example.com",
679
+ "errors": [
680
+ {
681
+ "index": 1,
682
+ "kind": "partial_wildcard"
683
+ }
684
+ ]
685
+ },
686
+ {
687
+ "raw": "http://ex*ample.com",
688
+ "errors": [
689
+ {
690
+ "index": 1,
691
+ "kind": "partial_wildcard"
692
+ }
693
+ ]
694
+ },
695
+ {
696
+ "raw": "http://example*.com",
697
+ "errors": [
698
+ {
699
+ "index": 1,
700
+ "kind": "partial_wildcard"
701
+ }
702
+ ]
703
+ },
704
+ {
705
+ "raw": "http://example.*com",
706
+ "errors": [
707
+ {
708
+ "index": 1,
709
+ "kind": "partial_wildcard"
710
+ }
711
+ ]
712
+ },
713
+ {
714
+ "raw": "http://**.example.com",
715
+ "errors": [
716
+ {
717
+ "index": 1,
718
+ "kind": "partial_wildcard"
719
+ }
720
+ ]
721
+ },
722
+ {
723
+ "raw": "http://127.1:5460",
724
+ "errors": [
725
+ {
726
+ "index": 1,
727
+ "kind": "non_canonical_ipv4"
728
+ }
729
+ ]
730
+ },
731
+ {
732
+ "raw": "http://127.1",
733
+ "errors": [
734
+ {
735
+ "index": 1,
736
+ "kind": "non_canonical_ipv4"
737
+ }
738
+ ]
739
+ },
740
+ {
741
+ "raw": "http://127.0.0.01:5460",
742
+ "errors": [
743
+ {
744
+ "index": 1,
745
+ "kind": "non_canonical_ipv4"
746
+ }
747
+ ]
748
+ },
749
+ {
750
+ "raw": "http://0x7f.0.0.1:5460",
751
+ "errors": [
752
+ {
753
+ "index": 1,
754
+ "kind": "non_canonical_ipv4"
755
+ }
756
+ ]
757
+ },
758
+ {
759
+ "raw": "http://127.0.0.0x1",
760
+ "errors": [
761
+ {
762
+ "index": 1,
763
+ "kind": "non_canonical_ipv4"
764
+ }
765
+ ]
766
+ },
767
+ {
768
+ "raw": "http://127.0.0.0X1",
769
+ "errors": [
770
+ {
771
+ "index": 1,
772
+ "kind": "non_canonical_ipv4"
773
+ }
774
+ ]
775
+ },
776
+ {
777
+ "raw": "http://0x",
778
+ "errors": [
779
+ {
780
+ "index": 1,
781
+ "kind": "non_canonical_ipv4"
782
+ }
783
+ ]
784
+ },
785
+ {
786
+ "raw": "http://2130706433",
787
+ "errors": [
788
+ {
789
+ "index": 1,
790
+ "kind": "non_canonical_ipv4"
791
+ }
792
+ ]
793
+ },
794
+ {
795
+ "raw": "http://127.0.0.1.:5460",
796
+ "errors": [
797
+ {
798
+ "index": 1,
799
+ "kind": "non_canonical_ipv4"
800
+ }
801
+ ]
802
+ },
803
+ {
804
+ "raw": "http://256.0.0.1",
805
+ "errors": [
806
+ {
807
+ "index": 1,
808
+ "kind": "non_canonical_ipv4"
809
+ }
810
+ ]
811
+ },
812
+ {
813
+ "raw": "http://1.2.3.4.5",
814
+ "errors": [
815
+ {
816
+ "index": 1,
817
+ "kind": "non_canonical_ipv4"
818
+ }
819
+ ]
820
+ },
821
+ {
822
+ "raw": "http://*.1:5460",
823
+ "errors": [
824
+ {
825
+ "index": 1,
826
+ "kind": "non_canonical_ipv4"
827
+ }
828
+ ]
829
+ },
830
+ {
831
+ "raw": "http://example.123",
832
+ "errors": [
833
+ {
834
+ "index": 1,
835
+ "kind": "non_canonical_ipv4"
836
+ }
837
+ ]
838
+ },
839
+ {
840
+ "raw": "http://[0:0:0:0:0:0:0:1]:5460",
841
+ "errors": [
842
+ {
843
+ "index": 1,
844
+ "kind": "invalid_ipv6"
845
+ }
846
+ ]
847
+ },
848
+ {
849
+ "raw": "http://[::0001]:5460",
850
+ "errors": [
851
+ {
852
+ "index": 1,
853
+ "kind": "invalid_ipv6"
854
+ }
855
+ ]
856
+ },
857
+ {
858
+ "raw": "http://[::0:1]",
859
+ "errors": [
860
+ {
861
+ "index": 1,
862
+ "kind": "invalid_ipv6"
863
+ }
864
+ ]
865
+ },
866
+ {
867
+ "raw": "http://[2001:db8:0:0:0:0:0:1]",
868
+ "errors": [
869
+ {
870
+ "index": 1,
871
+ "kind": "invalid_ipv6"
872
+ }
873
+ ]
874
+ },
875
+ {
876
+ "raw": "https://[2001:db8:0:0:8a2e:370:7334]",
877
+ "errors": [
878
+ {
879
+ "index": 1,
880
+ "kind": "invalid_ipv6"
881
+ }
882
+ ]
883
+ },
884
+ {
885
+ "raw": "http://[::ffff:1.2.3.4]",
886
+ "errors": [
887
+ {
888
+ "index": 1,
889
+ "kind": "invalid_ipv6"
890
+ }
891
+ ],
892
+ "note": "a dotted-quad tail"
893
+ },
894
+ {
895
+ "raw": "http://[::ffff:127.0.0.1]:3000",
896
+ "errors": [
897
+ {
898
+ "index": 1,
899
+ "kind": "invalid_ipv6"
900
+ }
901
+ ]
902
+ },
903
+ {
904
+ "raw": "http://[1:0:0:2:0:0:0:3]",
905
+ "errors": [
906
+ {
907
+ "index": 1,
908
+ "kind": "invalid_ipv6"
909
+ }
910
+ ],
911
+ "note": "the longest zero run is the one compressed"
912
+ },
913
+ {
914
+ "raw": "http://[1::2:3:4:5:6:7]",
915
+ "errors": [
916
+ {
917
+ "index": 1,
918
+ "kind": "invalid_ipv6"
919
+ }
920
+ ],
921
+ "note": "a single zero group is written as `0`, not `::`"
922
+ },
923
+ {
924
+ "raw": "http://[1:0:0:2:3::4]",
925
+ "errors": [
926
+ {
927
+ "index": 1,
928
+ "kind": "invalid_ipv6"
929
+ }
930
+ ],
931
+ "note": "of two equal zero runs the first is the one compressed"
932
+ },
933
+ {
934
+ "raw": "http://[localhost]:5460",
935
+ "errors": [
936
+ {
937
+ "index": 1,
938
+ "kind": "invalid_ipv6"
939
+ }
940
+ ]
941
+ },
942
+ {
943
+ "raw": "http://[::*]:5460",
944
+ "errors": [
945
+ {
946
+ "index": 1,
947
+ "kind": "invalid_ipv6"
948
+ }
949
+ ]
950
+ },
951
+ {
952
+ "raw": "http://[*::1]:3000",
953
+ "errors": [
954
+ {
955
+ "index": 1,
956
+ "kind": "invalid_ipv6"
957
+ }
958
+ ]
959
+ },
960
+ {
961
+ "raw": "https://[2001:db8:*::1]",
962
+ "errors": [
963
+ {
964
+ "index": 1,
965
+ "kind": "invalid_ipv6"
966
+ }
967
+ ]
968
+ },
969
+ {
970
+ "raw": "http://[fe80::1%eth0]",
971
+ "errors": [
972
+ {
973
+ "index": 1,
974
+ "kind": "invalid_ipv6"
975
+ }
976
+ ],
977
+ "note": "a zone"
978
+ },
979
+ {
980
+ "raw": "http://[fe80::1%25eth0]",
981
+ "errors": [
982
+ {
983
+ "index": 1,
984
+ "kind": "invalid_ipv6"
985
+ }
986
+ ]
987
+ },
988
+ {
989
+ "raw": "http://[]",
990
+ "errors": [
991
+ {
992
+ "index": 1,
993
+ "kind": "invalid_ipv6"
994
+ }
995
+ ]
996
+ },
997
+ {
998
+ "raw": "http://[1:2:3:4:5:6:7:8:9]",
999
+ "errors": [
1000
+ {
1001
+ "index": 1,
1002
+ "kind": "invalid_ipv6"
1003
+ }
1004
+ ]
1005
+ },
1006
+ {
1007
+ "raw": "http://[::1",
1008
+ "errors": [
1009
+ {
1010
+ "index": 1,
1011
+ "kind": "unclosed_ipv6"
1012
+ }
1013
+ ]
1014
+ },
1015
+ {
1016
+ "raw": "http://[::1]5460",
1017
+ "errors": [
1018
+ {
1019
+ "index": 1,
1020
+ "kind": "invalid_after_ipv6"
1021
+ }
1022
+ ]
1023
+ },
1024
+ {
1025
+ "raw": "http://[::1]x",
1026
+ "errors": [
1027
+ {
1028
+ "index": 1,
1029
+ "kind": "invalid_after_ipv6"
1030
+ }
1031
+ ]
1032
+ },
1033
+ {
1034
+ "raw": "http://localhost:",
1035
+ "errors": [
1036
+ {
1037
+ "index": 1,
1038
+ "kind": "invalid_port"
1039
+ }
1040
+ ]
1041
+ },
1042
+ {
1043
+ "raw": "http://localhost:abc",
1044
+ "errors": [
1045
+ {
1046
+ "index": 1,
1047
+ "kind": "invalid_port"
1048
+ }
1049
+ ]
1050
+ },
1051
+ {
1052
+ "raw": "http://localhost:0",
1053
+ "errors": [
1054
+ {
1055
+ "index": 1,
1056
+ "kind": "invalid_port"
1057
+ }
1058
+ ]
1059
+ },
1060
+ {
1061
+ "raw": "http://localhost:65536",
1062
+ "errors": [
1063
+ {
1064
+ "index": 1,
1065
+ "kind": "invalid_port"
1066
+ }
1067
+ ]
1068
+ },
1069
+ {
1070
+ "raw": "http://localhost:05460",
1071
+ "errors": [
1072
+ {
1073
+ "index": 1,
1074
+ "kind": "invalid_port"
1075
+ }
1076
+ ],
1077
+ "note": "a leading zero"
1078
+ },
1079
+ {
1080
+ "raw": "http://localhost:08080",
1081
+ "errors": [
1082
+ {
1083
+ "index": 1,
1084
+ "kind": "invalid_port"
1085
+ }
1086
+ ]
1087
+ },
1088
+ {
1089
+ "raw": "http://localhost:+80",
1090
+ "errors": [
1091
+ {
1092
+ "index": 1,
1093
+ "kind": "invalid_port"
1094
+ }
1095
+ ]
1096
+ },
1097
+ {
1098
+ "raw": "http://example.com:*000",
1099
+ "errors": [
1100
+ {
1101
+ "index": 1,
1102
+ "kind": "invalid_port"
1103
+ }
1104
+ ]
1105
+ },
1106
+ {
1107
+ "raw": "http://example.com:3*",
1108
+ "errors": [
1109
+ {
1110
+ "index": 1,
1111
+ "kind": "invalid_port"
1112
+ }
1113
+ ]
1114
+ },
1115
+ {
1116
+ "raw": "http://example.com:**",
1117
+ "errors": [
1118
+ {
1119
+ "index": 1,
1120
+ "kind": "invalid_port"
1121
+ }
1122
+ ]
1123
+ },
1124
+ {
1125
+ "raw": "http://[::1]:",
1126
+ "errors": [
1127
+ {
1128
+ "index": 1,
1129
+ "kind": "invalid_port"
1130
+ }
1131
+ ]
1132
+ },
1133
+ {
1134
+ "raw": "http://[::1]:05460",
1135
+ "errors": [
1136
+ {
1137
+ "index": 1,
1138
+ "kind": "invalid_port"
1139
+ }
1140
+ ]
1141
+ },
1142
+ {
1143
+ "raw": "http://localhost:80",
1144
+ "errors": [
1145
+ {
1146
+ "index": 1,
1147
+ "kind": "default_port"
1148
+ }
1149
+ ]
1150
+ },
1151
+ {
1152
+ "raw": "https://app.example.com:443",
1153
+ "errors": [
1154
+ {
1155
+ "index": 1,
1156
+ "kind": "default_port"
1157
+ }
1158
+ ]
1159
+ },
1160
+ {
1161
+ "raw": "https://*.example.com:443",
1162
+ "errors": [
1163
+ {
1164
+ "index": 1,
1165
+ "kind": "default_port"
1166
+ }
1167
+ ]
1168
+ },
1169
+ {
1170
+ "raw": "http://[::1]:80",
1171
+ "errors": [
1172
+ {
1173
+ "index": 1,
1174
+ "kind": "default_port"
1175
+ }
1176
+ ]
1177
+ },
1178
+ {
1179
+ "raw": "HTTPS://app.example.com:443",
1180
+ "errors": [
1181
+ {
1182
+ "index": 1,
1183
+ "kind": "default_port"
1184
+ }
1185
+ ]
1186
+ }
1187
+ ],
1188
+ "match": [
1189
+ {
1190
+ "patterns": "https://app.example.com",
1191
+ "origin": null,
1192
+ "allowed": true,
1193
+ "note": "an absent Origin passes"
1194
+ },
1195
+ {
1196
+ "patterns": "https://app.example.com",
1197
+ "origin": "https://app.example.com",
1198
+ "allowed": true,
1199
+ "note": "an exact entry matches itself"
1200
+ },
1201
+ {
1202
+ "patterns": "http://localhost:5460",
1203
+ "origin": "http://localhost:5460",
1204
+ "allowed": true
1205
+ },
1206
+ {
1207
+ "patterns": "http://[::1]:5460",
1208
+ "origin": "http://[::1]:5460",
1209
+ "allowed": true
1210
+ },
1211
+ {
1212
+ "patterns": "http://[2001:db8::1]",
1213
+ "origin": "http://[2001:db8::1]",
1214
+ "allowed": true
1215
+ },
1216
+ {
1217
+ "patterns": "http://127.0.0.1:4460",
1218
+ "origin": "http://127.0.0.1:4460",
1219
+ "allowed": true
1220
+ },
1221
+ {
1222
+ "patterns": "https://app.example.com",
1223
+ "origin": "https://App.Example.COM",
1224
+ "allowed": true
1225
+ },
1226
+ {
1227
+ "patterns": "https://app.example.com",
1228
+ "origin": "HTTPS://app.example.com",
1229
+ "allowed": true
1230
+ },
1231
+ {
1232
+ "patterns": "https://app.example.com",
1233
+ "origin": "https://evil.example.com",
1234
+ "allowed": false
1235
+ },
1236
+ {
1237
+ "patterns": "https://app.example.com",
1238
+ "origin": "http://app.example.com",
1239
+ "allowed": false
1240
+ },
1241
+ {
1242
+ "patterns": "https://app.example.com",
1243
+ "origin": "https://app.example.org",
1244
+ "allowed": false
1245
+ },
1246
+ {
1247
+ "patterns": "https://app.example.com",
1248
+ "origin": "https://sub.app.example.com",
1249
+ "allowed": false
1250
+ },
1251
+ {
1252
+ "patterns": "https://app.example.com",
1253
+ "origin": "https://app.example.com.evil.com",
1254
+ "allowed": false
1255
+ },
1256
+ {
1257
+ "patterns": "https://app.example.com",
1258
+ "origin": "https://app.example.com:443",
1259
+ "allowed": false,
1260
+ "note": "a browser never sends the default port"
1261
+ },
1262
+ {
1263
+ "patterns": "https://app.example.com",
1264
+ "origin": "https://app.example.com.",
1265
+ "allowed": false
1266
+ },
1267
+ {
1268
+ "patterns": "https://app.example.com",
1269
+ "origin": "https://app.example.com/",
1270
+ "allowed": false
1271
+ },
1272
+ {
1273
+ "patterns": "https://app.example.com",
1274
+ "origin": "https://appXexample.com",
1275
+ "allowed": false
1276
+ },
1277
+ {
1278
+ "patterns": "http://localhost.",
1279
+ "origin": "http://localhost.",
1280
+ "allowed": true
1281
+ },
1282
+ {
1283
+ "patterns": "http://localhost.",
1284
+ "origin": "http://localhost",
1285
+ "allowed": false
1286
+ },
1287
+ {
1288
+ "patterns": "https://ex-ample.com",
1289
+ "origin": "https://ex_ample.com",
1290
+ "allowed": false
1291
+ },
1292
+ {
1293
+ "patterns": "https://xn--bcher-kva.example",
1294
+ "origin": "https://xn--bcher-kva.example",
1295
+ "allowed": true
1296
+ },
1297
+ {
1298
+ "patterns": "https://xn--bcher-kva.example",
1299
+ "origin": "https://b\u00fccher.example",
1300
+ "allowed": false,
1301
+ "note": "the Unicode form never matches its punycode entry"
1302
+ },
1303
+ {
1304
+ "patterns": "http://localhost:3000",
1305
+ "origin": "http://localhost:3000",
1306
+ "allowed": true
1307
+ },
1308
+ {
1309
+ "patterns": "http://localhost:3000",
1310
+ "origin": "http://localhost",
1311
+ "allowed": false
1312
+ },
1313
+ {
1314
+ "patterns": "http://localhost:3000",
1315
+ "origin": "http://localhost:3001",
1316
+ "allowed": false
1317
+ },
1318
+ {
1319
+ "patterns": "http://localhost:3000",
1320
+ "origin": "http://localhost:03000",
1321
+ "allowed": false
1322
+ },
1323
+ {
1324
+ "patterns": "http://localhost:3000",
1325
+ "origin": "https://localhost:3000",
1326
+ "allowed": false
1327
+ },
1328
+ {
1329
+ "patterns": "http://localhost",
1330
+ "origin": "http://localhost:5173",
1331
+ "allowed": false
1332
+ },
1333
+ {
1334
+ "patterns": "http://localhost:*",
1335
+ "origin": "http://localhost",
1336
+ "allowed": true
1337
+ },
1338
+ {
1339
+ "patterns": "http://localhost:*",
1340
+ "origin": "http://localhost:5173",
1341
+ "allowed": true
1342
+ },
1343
+ {
1344
+ "patterns": "http://localhost:*",
1345
+ "origin": "http://localhost:65535",
1346
+ "allowed": true
1347
+ },
1348
+ {
1349
+ "patterns": "http://localhost:*",
1350
+ "origin": "http://localhost:",
1351
+ "allowed": false
1352
+ },
1353
+ {
1354
+ "patterns": "http://localhost:*",
1355
+ "origin": "http://localhost:abc",
1356
+ "allowed": false
1357
+ },
1358
+ {
1359
+ "patterns": "http://localhost:*",
1360
+ "origin": "http://localhost:5173:5173",
1361
+ "allowed": false
1362
+ },
1363
+ {
1364
+ "patterns": "http://localhost:*",
1365
+ "origin": "https://localhost:5173",
1366
+ "allowed": false
1367
+ },
1368
+ {
1369
+ "patterns": "http://localhost:*",
1370
+ "origin": "http://127.0.0.1:5173",
1371
+ "allowed": false
1372
+ },
1373
+ {
1374
+ "patterns": "https://api.example.com:*",
1375
+ "origin": "https://api.example.com:443",
1376
+ "allowed": true
1377
+ },
1378
+ {
1379
+ "patterns": "https://*.fuz.dev",
1380
+ "origin": "https://staging.fuz.dev",
1381
+ "allowed": true
1382
+ },
1383
+ {
1384
+ "patterns": "https://*.fuz.dev",
1385
+ "origin": "https://API.fuz.dev",
1386
+ "allowed": true
1387
+ },
1388
+ {
1389
+ "patterns": "https://*.fuz.dev",
1390
+ "origin": "https://fuz.dev",
1391
+ "allowed": false,
1392
+ "note": "the bare parent"
1393
+ },
1394
+ {
1395
+ "patterns": "https://*.fuz.dev",
1396
+ "origin": "https://evilfuz.dev",
1397
+ "allowed": false
1398
+ },
1399
+ {
1400
+ "patterns": "https://*.fuz.dev",
1401
+ "origin": "https://evil.user-content.fuz.dev",
1402
+ "allowed": false,
1403
+ "note": "one label, never a suffix"
1404
+ },
1405
+ {
1406
+ "patterns": "https://*.fuz.dev",
1407
+ "origin": "https://..fuz.dev",
1408
+ "allowed": false
1409
+ },
1410
+ {
1411
+ "patterns": "https://*.fuz.dev",
1412
+ "origin": "https://.fuz.dev",
1413
+ "allowed": false
1414
+ },
1415
+ {
1416
+ "patterns": "https://*.fuz.dev",
1417
+ "origin": "https://a/b.fuz.dev",
1418
+ "allowed": false
1419
+ },
1420
+ {
1421
+ "patterns": "https://*.fuz.dev",
1422
+ "origin": "http://staging.fuz.dev",
1423
+ "allowed": false
1424
+ },
1425
+ {
1426
+ "patterns": "https://*.fuz.dev",
1427
+ "origin": "https://staging.fuz.dev:8443",
1428
+ "allowed": false
1429
+ },
1430
+ {
1431
+ "patterns": "https://*.fuz.dev",
1432
+ "origin": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.fuz.dev",
1433
+ "allowed": true
1434
+ },
1435
+ {
1436
+ "patterns": "http://*.localhost",
1437
+ "origin": "http://api.localhost",
1438
+ "allowed": true
1439
+ },
1440
+ {
1441
+ "patterns": "https://*.*.corp.fuz.dev",
1442
+ "origin": "https://a.b.corp.fuz.dev",
1443
+ "allowed": true
1444
+ },
1445
+ {
1446
+ "patterns": "https://*.*.corp.fuz.dev",
1447
+ "origin": "https://b.corp.fuz.dev",
1448
+ "allowed": false
1449
+ },
1450
+ {
1451
+ "patterns": "https://*.*.corp.fuz.dev",
1452
+ "origin": "https://a.b.c.corp.fuz.dev",
1453
+ "allowed": false
1454
+ },
1455
+ {
1456
+ "patterns": "https://api.*.example.com",
1457
+ "origin": "https://api.staging.example.com",
1458
+ "allowed": true
1459
+ },
1460
+ {
1461
+ "patterns": "https://api.*.example.com",
1462
+ "origin": "https://staging.api.example.com",
1463
+ "allowed": false
1464
+ },
1465
+ {
1466
+ "patterns": "https://example.*",
1467
+ "origin": "https://example.evil",
1468
+ "allowed": true
1469
+ },
1470
+ {
1471
+ "patterns": "http://192.168.1.*",
1472
+ "origin": "http://192.168.1.77",
1473
+ "allowed": true
1474
+ },
1475
+ {
1476
+ "patterns": "http://*",
1477
+ "origin": "http://localhost",
1478
+ "allowed": true
1479
+ },
1480
+ {
1481
+ "patterns": "http://*",
1482
+ "origin": "http://intranet",
1483
+ "allowed": true
1484
+ },
1485
+ {
1486
+ "patterns": "http://*",
1487
+ "origin": "http://a.b",
1488
+ "allowed": false
1489
+ },
1490
+ {
1491
+ "patterns": "http://*.*.*.*",
1492
+ "origin": "http://10.0.0.7",
1493
+ "allowed": true
1494
+ },
1495
+ {
1496
+ "patterns": "https://*.fuz.dev:*",
1497
+ "origin": "https://api.fuz.dev:8443",
1498
+ "allowed": true
1499
+ },
1500
+ {
1501
+ "patterns": "https://*.fuz.dev:*",
1502
+ "origin": "https://api.fuz.dev",
1503
+ "allowed": true
1504
+ },
1505
+ {
1506
+ "patterns": "https://*.fuz.dev:*",
1507
+ "origin": "https://a.b.fuz.dev:8443",
1508
+ "allowed": false
1509
+ },
1510
+ {
1511
+ "patterns": "http://*:*",
1512
+ "origin": "http://localhost:5173",
1513
+ "allowed": true
1514
+ },
1515
+ {
1516
+ "patterns": "http://*:*",
1517
+ "origin": "http://a:b:80",
1518
+ "allowed": false
1519
+ },
1520
+ {
1521
+ "patterns": "http://*:*",
1522
+ "origin": "http://[::1]:80",
1523
+ "allowed": false
1524
+ },
1525
+ {
1526
+ "patterns": "http://[::1]:3000",
1527
+ "origin": "http://[::1]:3000",
1528
+ "allowed": true
1529
+ },
1530
+ {
1531
+ "patterns": "http://[::1]:3000",
1532
+ "origin": "http://[::1]:3001",
1533
+ "allowed": false
1534
+ },
1535
+ {
1536
+ "patterns": "http://[::1]:3000",
1537
+ "origin": "http://[::1]",
1538
+ "allowed": false
1539
+ },
1540
+ {
1541
+ "patterns": "http://[::1]:3000",
1542
+ "origin": "http://::1:3000",
1543
+ "allowed": false
1544
+ },
1545
+ {
1546
+ "patterns": "http://[::1]:3000",
1547
+ "origin": "http://[0:0:0:0:0:0:0:1]:3000",
1548
+ "allowed": false
1549
+ },
1550
+ {
1551
+ "patterns": "http://[::1]:*",
1552
+ "origin": "http://[::1]",
1553
+ "allowed": true
1554
+ },
1555
+ {
1556
+ "patterns": "http://[::1]:*",
1557
+ "origin": "http://[::1]:65535",
1558
+ "allowed": true
1559
+ },
1560
+ {
1561
+ "patterns": "http://[::1]:*",
1562
+ "origin": "http://[::1:3000",
1563
+ "allowed": false
1564
+ },
1565
+ {
1566
+ "patterns": "https://[2001:DB8::1]",
1567
+ "origin": "https://[2001:db8::1]",
1568
+ "allowed": true
1569
+ },
1570
+ {
1571
+ "patterns": "https://[2001:db8::1]",
1572
+ "origin": "https://[2001:DB8::1]",
1573
+ "allowed": true
1574
+ },
1575
+ {
1576
+ "patterns": "http://[::ffff:7f00:1]:3000",
1577
+ "origin": "http://127.0.0.1:3000",
1578
+ "allowed": false
1579
+ },
1580
+ {
1581
+ "patterns": "http://localhost:*",
1582
+ "origin": "http://localhost:*",
1583
+ "allowed": false,
1584
+ "note": "an entry is not an origin: no identical-string shortcut"
1585
+ },
1586
+ {
1587
+ "patterns": "https://*.fuz.dev:*",
1588
+ "origin": "https://*.fuz.dev:*",
1589
+ "allowed": false
1590
+ },
1591
+ {
1592
+ "patterns": "HTTP://LocalHost:5460",
1593
+ "origin": "HTTP://LocalHost:5460",
1594
+ "allowed": true,
1595
+ "note": "an exact entry still matches itself, case-insensitively"
1596
+ },
1597
+ {
1598
+ "patterns": "http://localhost:3000,https://example.com",
1599
+ "origin": "https://example.com",
1600
+ "allowed": true
1601
+ },
1602
+ {
1603
+ "patterns": "http://localhost:3000,https://example.com",
1604
+ "origin": "http://other.com",
1605
+ "allowed": false
1606
+ },
1607
+ {
1608
+ "patterns": "http://localhost:*",
1609
+ "origin": "null",
1610
+ "allowed": false,
1611
+ "note": "the opaque origin"
1612
+ },
1613
+ {
1614
+ "patterns": "http://localhost:*",
1615
+ "origin": "",
1616
+ "allowed": false,
1617
+ "note": "an empty Origin is present, and matches nothing"
1618
+ },
1619
+ {
1620
+ "patterns": "http://localhost:*",
1621
+ "origin": "file://",
1622
+ "allowed": false
1623
+ },
1624
+ {
1625
+ "patterns": "http://localhost:5173",
1626
+ "origin": "http://localhost:5173, http://localhost:5173",
1627
+ "allowed": false,
1628
+ "note": "a duplicated Origin as Node and Deno join it"
1629
+ },
1630
+ {
1631
+ "patterns": "http://localhost:5173",
1632
+ "origin": "http://localhost:5173,http://localhost:5173",
1633
+ "allowed": false
1634
+ },
1635
+ {
1636
+ "patterns": "http://*",
1637
+ "origin": "http://caf\u00e9",
1638
+ "allowed": false,
1639
+ "note": "not visible ASCII"
1640
+ },
1641
+ {
1642
+ "patterns": "http://localhost:*",
1643
+ "origin": "http://localhost:5173\u00e9",
1644
+ "allowed": false
1645
+ },
1646
+ {
1647
+ "patterns": "http://localhost:*",
1648
+ "origin": "http://localhost\t",
1649
+ "allowed": false
1650
+ },
1651
+ {
1652
+ "patterns": "http://localhost:*",
1653
+ "origin": " http://localhost",
1654
+ "allowed": false
1655
+ },
1656
+ {
1657
+ "patterns": "http://*",
1658
+ "origin": "http://\u212a",
1659
+ "allowed": false,
1660
+ "note": "the Kelvin sign case-folds to k in some matchers"
1661
+ },
1662
+ {
1663
+ "patterns": "http://k",
1664
+ "origin": "http://\u212a",
1665
+ "allowed": false
1666
+ },
1667
+ {
1668
+ "patterns": "https://*.example.com",
1669
+ "origin": "https://\u017f.example.com",
1670
+ "allowed": false
1671
+ },
1672
+ {
1673
+ "patterns": "http://localhost:*",
1674
+ "origin": "http://localhost:\uff11\uff12",
1675
+ "allowed": false,
1676
+ "note": "fullwidth digits are not digits"
1677
+ }
1678
+ ]
1679
+ }