@toa.io/extensions.exposition 1.0.0-alpha.291 → 1.0.0-alpha.293

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 (526) hide show
  1. package/components/identity.basic/package.json +8 -0
  2. package/components/identity.federation/package.json +8 -0
  3. package/components/identity.passkeys/package.json +8 -0
  4. package/components/identity.tokens/package.json +10 -0
  5. package/package.json +25 -13
  6. package/transpiled/Discovery/Explorer.js +1 -1
  7. package/transpiled/Discovery/Explorer.js.map +1 -1
  8. package/transpiled/Discovery/Site.js +1 -1
  9. package/transpiled/Discovery/Site.js.map +1 -1
  10. package/transpiled/Discovery/trunk.js +1 -1
  11. package/transpiled/Discovery/trunk.js.map +1 -1
  12. package/transpiled/Endpoint.js +3 -0
  13. package/transpiled/Endpoint.js.map +1 -1
  14. package/transpiled/Factory.js +1 -1
  15. package/transpiled/Factory.js.map +1 -1
  16. package/transpiled/Gateway.js +1 -1
  17. package/transpiled/Gateway.js.map +1 -1
  18. package/transpiled/HTTP/Server.d.ts +1 -1
  19. package/transpiled/HTTP/Server.js +1 -1
  20. package/transpiled/HTTP/Server.js.map +1 -1
  21. package/transpiled/Introspection.d.ts +6 -0
  22. package/transpiled/Introspection.js +1 -0
  23. package/transpiled/Introspection.js.map +1 -1
  24. package/transpiled/MCP/Server.d.ts +1 -1
  25. package/transpiled/MCP/Server.js +1 -1
  26. package/transpiled/MCP/Server.js.map +1 -1
  27. package/transpiled/MCP/discover.d.ts +1 -1
  28. package/transpiled/MCP/schema.js +2 -2
  29. package/transpiled/Query.d.ts +2 -12
  30. package/transpiled/Query.js +3 -13
  31. package/transpiled/Query.js.map +1 -1
  32. package/transpiled/RPC/Dispatcher.d.ts +1 -1
  33. package/transpiled/RPC/Dispatcher.js +2 -2
  34. package/transpiled/RPC/Dispatcher.js.map +1 -1
  35. package/transpiled/RTD/Endpoint.d.ts +2 -3
  36. package/transpiled/RTD/Tree.js +1 -1
  37. package/transpiled/RTD/Tree.js.map +1 -1
  38. package/transpiled/RTD/factory.js +1 -1
  39. package/transpiled/RTD/factory.js.map +1 -1
  40. package/transpiled/RTD/syntax/index.d.ts +1 -2
  41. package/transpiled/RTD/syntax/index.js +1 -2
  42. package/transpiled/RTD/syntax/index.js.map +1 -1
  43. package/transpiled/Tenant.js +1 -1
  44. package/transpiled/Tenant.js.map +1 -1
  45. package/transpiled/directives/auth/Authorization.js +1 -1
  46. package/transpiled/directives/auth/Authorization.js.map +1 -1
  47. package/transpiled/directives/io/IO.js +1 -1
  48. package/transpiled/directives/io/IO.js.map +1 -1
  49. package/transpiled/directives/oauth/documents.d.ts +1 -1
  50. package/transpiled/index.d.ts +0 -2
  51. package/transpiled/index.js +0 -2
  52. package/transpiled/index.js.map +1 -1
  53. package/transpiled/service.js +1 -1
  54. package/transpiled/service.js.map +1 -1
  55. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  56. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  57. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  58. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  59. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  60. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  61. package/ui/dist/_app/immutable/chunks/{D9tE1yyO.js → DVlaUfVU.js} +1 -1
  62. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  63. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  64. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  65. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  66. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  67. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  68. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  69. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  70. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  71. package/ui/dist/_app/version.json +1 -1
  72. package/ui/dist/index.html +12 -12
  73. package/CHANGELOG.md +0 -35
  74. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  75. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  76. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  77. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  78. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  79. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  80. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  81. package/components/identity.credentials/source/list.test.ts +0 -70
  82. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  83. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  84. package/components/identity.federation/source/list.test.ts +0 -41
  85. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  86. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  87. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  88. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  89. package/components/identity.passkeys/source/errors.test.ts +0 -34
  90. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  91. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  92. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  93. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  94. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  95. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  96. package/components/identity.tokens/source/issue.test.ts +0 -73
  97. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  98. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  99. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  100. package/context.toa.yaml +0 -31
  101. package/cucumber.mjs +0 -7
  102. package/documentation/.assets/ia3-dark.jpg +0 -0
  103. package/documentation/.assets/ia3-light.jpg +0 -0
  104. package/documentation/.assets/overview-dark.jpg +0 -0
  105. package/documentation/.assets/overview-light.jpg +0 -0
  106. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  107. package/documentation/.assets/role-scopes-light.jpg +0 -0
  108. package/documentation/.assets/rtd-dark.jpg +0 -0
  109. package/documentation/.assets/rtd-light.jpg +0 -0
  110. package/documentation/access.md +0 -350
  111. package/documentation/authorities.md +0 -51
  112. package/documentation/cache.md +0 -72
  113. package/documentation/components.md +0 -472
  114. package/documentation/consent.md +0 -101
  115. package/documentation/credentials.md +0 -88
  116. package/documentation/dev.md +0 -30
  117. package/documentation/discovery.md +0 -81
  118. package/documentation/flow.md +0 -44
  119. package/documentation/help.md +0 -122
  120. package/documentation/identity.md +0 -304
  121. package/documentation/introspection.md +0 -123
  122. package/documentation/io.md +0 -167
  123. package/documentation/ip.md +0 -24
  124. package/documentation/map.md +0 -123
  125. package/documentation/mcp.md +0 -183
  126. package/documentation/notes/desync.jpg +0 -0
  127. package/documentation/notes/peers.md +0 -59
  128. package/documentation/notes/sse.md +0 -71
  129. package/documentation/notes/throttling.md +0 -122
  130. package/documentation/oauth.md +0 -180
  131. package/documentation/octets.md +0 -334
  132. package/documentation/passkeys.md +0 -11
  133. package/documentation/protocol.md +0 -120
  134. package/documentation/query.md +0 -324
  135. package/documentation/require.md +0 -15
  136. package/documentation/rpc.md +0 -154
  137. package/documentation/tracing.md +0 -70
  138. package/documentation/tree.md +0 -199
  139. package/features/access.feature +0 -596
  140. package/features/annotation.feature +0 -32
  141. package/features/auth.assert.feature +0 -55
  142. package/features/auth.bearer.feature +0 -120
  143. package/features/auth.claims.feature +0 -171
  144. package/features/auth.incept.feature +0 -166
  145. package/features/auth.input.feature +0 -59
  146. package/features/authorities.basic.feature +0 -141
  147. package/features/authorities.feature +0 -71
  148. package/features/authorities.federation.feature +0 -100
  149. package/features/authorities.tokens.feature +0 -117
  150. package/features/body.feature +0 -76
  151. package/features/cache.feature +0 -368
  152. package/features/configuration.feature +0 -206
  153. package/features/cors.feature +0 -127
  154. package/features/credentials.feature +0 -106
  155. package/features/debug.feature +0 -34
  156. package/features/dev.feature +0 -90
  157. package/features/directives.feature +0 -61
  158. package/features/discovery.feature +0 -213
  159. package/features/discovery.ui.feature +0 -213
  160. package/features/dynamic.feature +0 -192
  161. package/features/errors.feature +0 -258
  162. package/features/etag.feature +0 -239
  163. package/features/flow.feature +0 -148
  164. package/features/help.feature +0 -512
  165. package/features/identity.bans.feature +0 -200
  166. package/features/identity.basic.feature +0 -666
  167. package/features/identity.feature +0 -240
  168. package/features/identity.federation.feature +0 -396
  169. package/features/identity.otp.feature +0 -142
  170. package/features/identity.roles.feature +0 -568
  171. package/features/identity.tokens.custom.feature +0 -430
  172. package/features/identity.tokens.feature +0 -131
  173. package/features/interruptions.feature +0 -20
  174. package/features/introspection.feature +0 -565
  175. package/features/introspection.map.feature +0 -108
  176. package/features/io.feature +0 -204
  177. package/features/io.throttle.feature +0 -166
  178. package/features/map.feature +0 -360
  179. package/features/mcp.feature +0 -753
  180. package/features/methods.feature +0 -48
  181. package/features/oauth.clients.feature +0 -195
  182. package/features/oauth.discovery.feature +0 -164
  183. package/features/oauth.grants.feature +0 -301
  184. package/features/octets.cloudinary.feature +0 -233
  185. package/features/octets.download.feature +0 -194
  186. package/features/octets.entries.feature +0 -83
  187. package/features/octets.feature +0 -306
  188. package/features/octets.head.feature +0 -40
  189. package/features/octets.location.feature +0 -83
  190. package/features/octets.meta.feature +0 -117
  191. package/features/octets.workflows.feature +0 -565
  192. package/features/passkeys.feature +0 -66
  193. package/features/probes.feature +0 -18
  194. package/features/query.feature +0 -389
  195. package/features/realtime.feature +0 -34
  196. package/features/require.feature +0 -66
  197. package/features/response.feature +0 -103
  198. package/features/routes.feature +0 -224
  199. package/features/rpc.feature +0 -429
  200. package/features/server.feature +0 -21
  201. package/features/site/_app/immutable/asset.js +0 -1
  202. package/features/site/favicon.ico +0 -0
  203. package/features/site/index.html +0 -10
  204. package/features/steps/.env.example +0 -5
  205. package/features/steps/Captures.ts +0 -20
  206. package/features/steps/Cloudinary.ts +0 -12
  207. package/features/steps/Common.ts +0 -38
  208. package/features/steps/Components.ts +0 -115
  209. package/features/steps/Database.ts +0 -106
  210. package/features/steps/Gateway.ts +0 -240
  211. package/features/steps/HTTP.ts +0 -96
  212. package/features/steps/IDP.ts +0 -361
  213. package/features/steps/Identity.ts +0 -54
  214. package/features/steps/OTP.ts +0 -42
  215. package/features/steps/Parameters.ts +0 -162
  216. package/features/steps/Probe.ts +0 -38
  217. package/features/steps/Realtime.ts +0 -175
  218. package/features/steps/Workspace.ts +0 -48
  219. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  220. package/features/steps/components/audit/operations/record.js +0 -5
  221. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  222. package/features/steps/components/echo/operations/affect.js +0 -3
  223. package/features/steps/components/echo/operations/compute.js +0 -3
  224. package/features/steps/components/echo/operations/echo.js +0 -3
  225. package/features/steps/components/echo/operations/error.js +0 -7
  226. package/features/steps/components/echo/operations/identity.js +0 -3
  227. package/features/steps/components/echo/operations/parameters.js +0 -3
  228. package/features/steps/components/echo/operations/ping.js +0 -3
  229. package/features/steps/components/echo/operations/unwrap.js +0 -3
  230. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  231. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  232. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  233. package/features/steps/components/greeter/operations/greet.js +0 -3
  234. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  235. package/features/steps/components/notify/operations/send.js +0 -5
  236. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  237. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  238. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  239. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  240. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  241. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  242. package/features/steps/components/octets.tester/operations/err.js +0 -14
  243. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  244. package/features/steps/components/octets.tester/operations/id.js +0 -5
  245. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  246. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  247. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  248. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  249. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  250. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  251. package/features/steps/components/orders/operations/create.js +0 -7
  252. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  253. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  254. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  255. package/features/steps/components/pricing/operations/quote.js +0 -3
  256. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  257. package/features/steps/components/sequences/operations/numbers.js +0 -5
  258. package/features/steps/components/sequences/operations/tokens.js +0 -14
  259. package/features/steps/components/users/manifest.toa.yaml +0 -30
  260. package/features/steps/components/users/operations/create.js +0 -11
  261. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  262. package/features/steps/map.ts +0 -30
  263. package/features/steps/tsconfig.json +0 -9
  264. package/features/streams.feature +0 -35
  265. package/features/timestamps.feature +0 -41
  266. package/features/timing.feature +0 -49
  267. package/features/tracing.feature +0 -123
  268. package/schemas/annotation.cos.yaml +0 -125
  269. package/schemas/call.cos.yaml +0 -18
  270. package/schemas/directive.cos.yaml +0 -7
  271. package/schemas/method.cos.yaml +0 -23
  272. package/schemas/node.cos.yaml +0 -22
  273. package/schemas/query.cos.yaml +0 -31
  274. package/schemas/querystring.cos.yaml +0 -19
  275. package/schemas/range.cos.yaml +0 -10
  276. package/schemas/route.cos.yaml +0 -6
  277. package/source/Annotation.ts +0 -89
  278. package/source/Branch.test.ts +0 -40
  279. package/source/Branch.ts +0 -44
  280. package/source/Composition.ts +0 -51
  281. package/source/Context.ts +0 -11
  282. package/source/Directive.test.ts +0 -199
  283. package/source/Directive.ts +0 -248
  284. package/source/Discovery/Explorer.ts +0 -34
  285. package/source/Discovery/Site.test.ts +0 -147
  286. package/source/Discovery/Site.ts +0 -202
  287. package/source/Discovery/index.ts +0 -3
  288. package/source/Discovery/tree.test.ts +0 -175
  289. package/source/Discovery/tree.ts +0 -77
  290. package/source/Discovery/trunk.ts +0 -33
  291. package/source/Endpoint.test.ts +0 -67
  292. package/source/Endpoint.ts +0 -157
  293. package/source/Factory.ts +0 -42
  294. package/source/Gateway.ts +0 -390
  295. package/source/HTTP/Context.ts +0 -143
  296. package/source/HTTP/Probe.ts +0 -99
  297. package/source/HTTP/Server.ts +0 -430
  298. package/source/HTTP/Timing.ts +0 -14
  299. package/source/HTTP/address.test.ts +0 -28
  300. package/source/HTTP/address.ts +0 -16
  301. package/source/HTTP/exceptions.ts +0 -99
  302. package/source/HTTP/formats/form.ts +0 -21
  303. package/source/HTTP/formats/index.ts +0 -36
  304. package/source/HTTP/formats/json.ts +0 -14
  305. package/source/HTTP/formats/msgpack.ts +0 -14
  306. package/source/HTTP/formats/text.ts +0 -10
  307. package/source/HTTP/formats/yaml.test.ts +0 -22
  308. package/source/HTTP/formats/yaml.ts +0 -40
  309. package/source/HTTP/index.ts +0 -6
  310. package/source/HTTP/messages.test.ts +0 -196
  311. package/source/HTTP/messages.ts +0 -186
  312. package/source/HTTP/types.ts +0 -39
  313. package/source/Interception.ts +0 -37
  314. package/source/Introspection.ts +0 -179
  315. package/source/MCP/Server.ts +0 -335
  316. package/source/MCP/discover.ts +0 -51
  317. package/source/MCP/errors.ts +0 -80
  318. package/source/MCP/index.ts +0 -1
  319. package/source/MCP/schema.test.ts +0 -91
  320. package/source/MCP/schema.ts +0 -94
  321. package/source/MCP/tools.ts +0 -144
  322. package/source/MCP/types.ts +0 -84
  323. package/source/Mapping.ts +0 -101
  324. package/source/Query.test.ts +0 -54
  325. package/source/Query.ts +0 -277
  326. package/source/RPC/Context.ts +0 -75
  327. package/source/RPC/Dispatcher.ts +0 -150
  328. package/source/RPC/errors.test.ts +0 -77
  329. package/source/RPC/errors.ts +0 -82
  330. package/source/RPC/index.ts +0 -1
  331. package/source/RPC/names.test.ts +0 -141
  332. package/source/RPC/names.ts +0 -176
  333. package/source/RPC/types.ts +0 -34
  334. package/source/RTD/Context.ts +0 -16
  335. package/source/RTD/Directives.ts +0 -126
  336. package/source/RTD/Endpoint.ts +0 -27
  337. package/source/RTD/Match.ts +0 -11
  338. package/source/RTD/Method.ts +0 -39
  339. package/source/RTD/Node.ts +0 -169
  340. package/source/RTD/Route.ts +0 -93
  341. package/source/RTD/Tree.ts +0 -137
  342. package/source/RTD/expiration.test.ts +0 -81
  343. package/source/RTD/factory.ts +0 -105
  344. package/source/RTD/index.ts +0 -8
  345. package/source/RTD/segment.test.ts +0 -35
  346. package/source/RTD/segment.ts +0 -51
  347. package/source/RTD/syntax/index.ts +0 -2
  348. package/source/RTD/syntax/parse.test.ts +0 -196
  349. package/source/RTD/syntax/parse.ts +0 -171
  350. package/source/RTD/syntax/types.ts +0 -69
  351. package/source/RTD/walk.test.ts +0 -147
  352. package/source/Remotes.test.ts +0 -79
  353. package/source/Remotes.ts +0 -39
  354. package/source/Tenant.ts +0 -73
  355. package/source/const.ts +0 -45
  356. package/source/deployment.ts +0 -96
  357. package/source/directives/auth/Anonymous.test.ts +0 -70
  358. package/source/directives/auth/Anonymous.ts +0 -36
  359. package/source/directives/auth/Anyone.ts +0 -23
  360. package/source/directives/auth/Assert.ts +0 -43
  361. package/source/directives/auth/Authorization.test.ts +0 -24
  362. package/source/directives/auth/Authorization.ts +0 -388
  363. package/source/directives/auth/Delegate.test.ts +0 -36
  364. package/source/directives/auth/Delegate.ts +0 -54
  365. package/source/directives/auth/Echo.ts +0 -24
  366. package/source/directives/auth/Federation.ts +0 -104
  367. package/source/directives/auth/Id.ts +0 -37
  368. package/source/directives/auth/Incept.ts +0 -117
  369. package/source/directives/auth/Input.ts +0 -92
  370. package/source/directives/auth/Role.test.ts +0 -147
  371. package/source/directives/auth/Role.ts +0 -99
  372. package/source/directives/auth/Rule.ts +0 -59
  373. package/source/directives/auth/Scheme.ts +0 -31
  374. package/source/directives/auth/create.ts +0 -11
  375. package/source/directives/auth/index.ts +0 -3
  376. package/source/directives/auth/schemes.test.ts +0 -18
  377. package/source/directives/auth/schemes.ts +0 -39
  378. package/source/directives/auth/split.ts +0 -14
  379. package/source/directives/auth/types.ts +0 -75
  380. package/source/directives/cache/Cache.ts +0 -92
  381. package/source/directives/cache/Control.ts +0 -81
  382. package/source/directives/cache/Exact.ts +0 -7
  383. package/source/directives/cache/etag.ts +0 -38
  384. package/source/directives/cache/index.ts +0 -3
  385. package/source/directives/cache/types.ts +0 -9
  386. package/source/directives/cors/CORS.test.ts +0 -75
  387. package/source/directives/cors/CORS.ts +0 -88
  388. package/source/directives/cors/index.ts +0 -3
  389. package/source/directives/dev/Development.ts +0 -41
  390. package/source/directives/dev/Faulty.ts +0 -31
  391. package/source/directives/dev/Sleep.ts +0 -53
  392. package/source/directives/dev/Stub.ts +0 -14
  393. package/source/directives/dev/Throw.ts +0 -14
  394. package/source/directives/dev/index.ts +0 -3
  395. package/source/directives/dev/types.ts +0 -5
  396. package/source/directives/flow/Compose.ts +0 -98
  397. package/source/directives/flow/Fetch.ts +0 -86
  398. package/source/directives/flow/Flow.ts +0 -43
  399. package/source/directives/flow/index.ts +0 -3
  400. package/source/directives/flow/types.ts +0 -7
  401. package/source/directives/help/Family.ts +0 -122
  402. package/source/directives/help/Help.test.ts +0 -227
  403. package/source/directives/help/Help.ts +0 -47
  404. package/source/directives/help/Parameters.ts +0 -47
  405. package/source/directives/help/described.ts +0 -57
  406. package/source/directives/help/index.ts +0 -45
  407. package/source/directives/index.ts +0 -33
  408. package/source/directives/io/Directive.ts +0 -17
  409. package/source/directives/io/IO.ts +0 -118
  410. package/source/directives/io/Input.ts +0 -55
  411. package/source/directives/io/Message.ts +0 -1
  412. package/source/directives/io/Output.ts +0 -81
  413. package/source/directives/io/Status.test.ts +0 -88
  414. package/source/directives/io/Status.ts +0 -47
  415. package/source/directives/io/Throttle.ts +0 -30
  416. package/source/directives/io/index.ts +0 -3
  417. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  418. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  419. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  420. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  421. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  422. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  423. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  424. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  425. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  426. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  427. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  428. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  429. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  430. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  431. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  432. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  433. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  434. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  435. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  436. package/source/directives/io/lib/throttle/index.ts +0 -4
  437. package/source/directives/io/schemas.test.ts +0 -40
  438. package/source/directives/io/schemas.ts +0 -16
  439. package/source/directives/map/Authority.ts +0 -15
  440. package/source/directives/map/Buffer.ts +0 -15
  441. package/source/directives/map/Claims.ts +0 -63
  442. package/source/directives/map/Directive.ts +0 -4
  443. package/source/directives/map/Headers.ts +0 -60
  444. package/source/directives/map/Language.ts +0 -45
  445. package/source/directives/map/Languages.ts +0 -17
  446. package/source/directives/map/Map.ts +0 -85
  447. package/source/directives/map/Mapping.ts +0 -45
  448. package/source/directives/map/Properties.ts +0 -15
  449. package/source/directives/map/Segments.ts +0 -52
  450. package/source/directives/map/index.ts +0 -3
  451. package/source/directives/mcp/MCP.ts +0 -33
  452. package/source/directives/mcp/Tool.test.ts +0 -56
  453. package/source/directives/mcp/Tool.ts +0 -32
  454. package/source/directives/mcp/index.ts +0 -6
  455. package/source/directives/oauth/Discovery.ts +0 -66
  456. package/source/directives/oauth/documents.ts +0 -110
  457. package/source/directives/oauth/index.ts +0 -3
  458. package/source/directives/octets/Context.ts +0 -23
  459. package/source/directives/octets/Delete.ts +0 -96
  460. package/source/directives/octets/Directive.ts +0 -21
  461. package/source/directives/octets/Get.ts +0 -88
  462. package/source/directives/octets/Octets.ts +0 -82
  463. package/source/directives/octets/Put.ts +0 -186
  464. package/source/directives/octets/Workflow.ts +0 -60
  465. package/source/directives/octets/bytes.test.ts +0 -33
  466. package/source/directives/octets/bytes.ts +0 -18
  467. package/source/directives/octets/index.ts +0 -3
  468. package/source/directives/octets/schemas.test.ts +0 -20
  469. package/source/directives/octets/schemas.ts +0 -15
  470. package/source/directives/octets/types.ts +0 -9
  471. package/source/directives/octets/workflows/Execution.ts +0 -130
  472. package/source/directives/octets/workflows/Workflow.ts +0 -51
  473. package/source/directives/octets/workflows/index.ts +0 -1
  474. package/source/directives/require/Directive.ts +0 -5
  475. package/source/directives/require/Headers.ts +0 -19
  476. package/source/directives/require/Require.ts +0 -27
  477. package/source/directives/require/index.ts +0 -3
  478. package/source/discovery.ts +0 -1
  479. package/source/exceptions.ts +0 -47
  480. package/source/index.ts +0 -12
  481. package/source/io.ts +0 -4
  482. package/source/manifest.test.ts +0 -56
  483. package/source/manifest.ts +0 -56
  484. package/source/octets.d.ts +0 -17
  485. package/source/root.ts +0 -59
  486. package/source/schemas.test.ts +0 -31
  487. package/source/schemas.ts +0 -15
  488. package/source/service.ts +0 -94
  489. package/source/shortcuts.ts +0 -14
  490. package/source/userland.ts +0 -47
  491. package/transpiled/Annotation.d.ts +0 -70
  492. package/transpiled/Annotation.js +0 -2
  493. package/transpiled/Annotation.js.map +0 -1
  494. package/transpiled/RTD/syntax/parse.d.ts +0 -4
  495. package/transpiled/RTD/syntax/parse.js +0 -112
  496. package/transpiled/RTD/syntax/parse.js.map +0 -1
  497. package/transpiled/RTD/syntax/types.d.ts +0 -52
  498. package/transpiled/RTD/syntax/types.js +0 -11
  499. package/transpiled/RTD/syntax/types.js.map +0 -1
  500. package/transpiled/const.d.ts +0 -36
  501. package/transpiled/const.js +0 -37
  502. package/transpiled/const.js.map +0 -1
  503. package/transpiled/deployment.d.ts +0 -6
  504. package/transpiled/deployment.js +0 -76
  505. package/transpiled/deployment.js.map +0 -1
  506. package/transpiled/manifest.d.ts +0 -3
  507. package/transpiled/manifest.js +0 -39
  508. package/transpiled/manifest.js.map +0 -1
  509. package/transpiled/schemas.d.ts +0 -9
  510. package/transpiled/schemas.js +0 -9
  511. package/transpiled/schemas.js.map +0 -1
  512. package/transpiled/shortcuts.d.ts +0 -3
  513. package/transpiled/shortcuts.js +0 -13
  514. package/transpiled/shortcuts.js.map +0 -1
  515. package/tsconfig.json +0 -13
  516. package/tsconfig.tsbuildinfo +0 -1
  517. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  518. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  519. package/ui/dist/_app/immutable/chunks/B_pK3U1C.js +0 -6
  520. package/ui/dist/_app/immutable/chunks/CiKbPLyY.js +0 -1
  521. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  522. package/ui/dist/_app/immutable/entry/app.DMqmL4NY.js +0 -2
  523. package/ui/dist/_app/immutable/entry/start.CRe7HWBI.js +0 -1
  524. package/ui/dist/_app/immutable/nodes/0.D9m-6cbM.js +0 -1
  525. package/ui/dist/_app/immutable/nodes/1.Cgi_RcSO.js +0 -1
  526. package/ui/dist/_app/immutable/nodes/2.D_Cbxgz4.js +0 -14
@@ -1,216 +0,0 @@
1
- import { it, beforeEach, mock } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { generate } from 'randomstring'
5
- import { EncryptFactory, ImportKeyFactory } from 'paseto/v3/local'
6
- import { Effect as Encrypt } from './encrypt.js'
7
- import { Computation as Decrypt } from './decrypt.js'
8
- import { type Configuration, type Context, type Identity } from './lib/index.js'
9
- import type { Secret } from '@toa.io/extensions.configuration'
10
-
11
- let configuration: Configuration
12
- let context: Context
13
- let encrypt: Encrypt
14
- let decrypt: Decrypt
15
-
16
- const remote = { identity: { keys: { observe: mock.fn(async () => null) } } }
17
- const authority = generate()
18
-
19
- beforeEach(() => {
20
- configuration = {
21
- keys: [
22
- { id: 'key0', key: secret('sTxL6qVOadKkUJwh3FveU53XgTEo3Sdfg7k2FfiIKfs') },
23
- // keys are secrets, and a secret is an object
24
- { id: 'key1', key: secret('5I0iSKw3yfBkQ4AXfA8eR-tWR0Q1dpn4x3bPrPzHkP0') },
25
- {
26
- id: 'legacy0',
27
- key: secret('k3.local.m28p8SrbS467t-2IUjQuSOqmjvi24TbXhyjAW_dOrog'),
28
- format: 'paseto'
29
- },
30
- {
31
- id: 'legacy1',
32
- key: secret('k3.local.-498jfWenrZH-Dqw3-zQJih_hKzDgBgUMfe37OCqSOA'),
33
- format: 'paseto'
34
- }
35
- ],
36
- lifetime: 1000,
37
- refresh: 500,
38
- cache: {
39
- max: 1024,
40
- ttl: 600
41
- }
42
- }
43
-
44
- context = {
45
- configuration,
46
- remote,
47
- logs: { debug: () => undefined }
48
- } as unknown as Context
49
-
50
- encrypt = new Encrypt()
51
- encrypt.mount(context)
52
-
53
- decrypt = new Decrypt()
54
- decrypt.mount(context)
55
- })
56
-
57
- it('should decrypt', async () => {
58
- const identity: Identity = { id: generate(), roles: [] }
59
- const lifetime = 100
60
-
61
- const reply = await encrypt.execute({ authority, identity, lifetime })
62
-
63
- if (reply instanceof Error) throw reply
64
-
65
- const decrypted = await decrypt.execute(reply)
66
-
67
- assert.partialDeepStrictEqual(decrypted, {
68
- iss: authority,
69
- identity,
70
- refresh: false,
71
- custom: false
72
- })
73
- })
74
-
75
- it('should mark a token encrypted with a custom key', async () => {
76
- const identity: Identity = { id: generate(), roles: [] }
77
- const key = {
78
- id: generate(),
79
- key: '5I0iSKw3yfBkQ4AXfA8eR-tWR0Q1dpn4x3bPrPzHkP0',
80
- label: 'custom'
81
- }
82
-
83
- remote.identity.keys.observe = mock.fn(async ({ query }: { query: { id: string } }) =>
84
- query.id === key.id ? { ...key, identity: identity.id } : null
85
- ) as any
86
-
87
- const encrypted = await encrypt.execute({ authority, identity, lifetime: 100, key })
88
-
89
- if (encrypted instanceof Error) throw encrypted
90
-
91
- const decrypted = await decrypt.execute(encrypted)
92
-
93
- assert.partialDeepStrictEqual(decrypted, { identity, refresh: false, custom: true })
94
- })
95
-
96
- it('should decrypt with key1', async () => {
97
- const k1context = {
98
- configuration: {
99
- keys: [configuration.keys[1]]
100
- }
101
- } as unknown as Context
102
-
103
- encrypt = new Encrypt()
104
- encrypt.mount(k1context)
105
-
106
- const identity: Identity = { id: generate(), roles: [] }
107
- const lifetime = 100
108
-
109
- const encrypted = await encrypt.execute({ authority, identity, lifetime })
110
-
111
- if (encrypted instanceof Error) throw encrypted
112
-
113
- const decrypted = await decrypt.execute(encrypted)
114
-
115
- assert.partialDeepStrictEqual(decrypted, { identity, refresh: true })
116
- })
117
-
118
- it('should decrypt legacy PASETO and require refresh', async () => {
119
- const identity: Identity = { id: generate(), roles: [] }
120
-
121
- const token = await paseto(
122
- configuration.keys[2].key.unwrap(),
123
- { iss: authority, identity },
124
- 'legacy0'
125
- )
126
-
127
- await assert.partialDeepStrictEqual(await decrypt.execute(token), {
128
- iss: authority,
129
- identity,
130
- refresh: true
131
- })
132
- })
133
-
134
- it('should separate JWE and PASETO keys with the same id by format', async () => {
135
- configuration.keys[2].id = 'key0'
136
-
137
- decrypt = new Decrypt()
138
- decrypt.mount(context)
139
-
140
- const identity: Identity = { id: generate(), roles: [] }
141
-
142
- const token = await paseto(
143
- configuration.keys[2].key.unwrap(),
144
- { iss: authority, identity },
145
- 'key0'
146
- )
147
-
148
- await assert.partialDeepStrictEqual(await decrypt.execute(token), {
149
- identity,
150
- refresh: true
151
- })
152
- })
153
-
154
- it('should reject a token under a revoked key', async () => {
155
- const identity: Identity = { id: generate(), roles: [] }
156
- const key = {
157
- id: generate(),
158
- key: '5I0iSKw3yfBkQ4AXfA8eR-tWR0Q1dpn4x3bPrPzHkP0',
159
- label: 'revoked'
160
- }
161
-
162
- remote.identity.keys.observe = mock.fn(async ({ query }: { query: { id: string } }) =>
163
- query.id === key.id ? { ...key, identity: identity.id, revokedAt: Date.now() } : null
164
- ) as any
165
-
166
- const encrypted = await encrypt.execute({ authority, identity, lifetime: 0, key })
167
-
168
- if (encrypted instanceof Error) throw encrypted
169
-
170
- const thrown: any = await decrypt.execute(encrypted)
171
-
172
- assert.deepStrictEqual(thrown.code, 'REVOKED_KEY')
173
- })
174
-
175
- it('should reject a tampered JWE', async () => {
176
- const token = await encrypt.execute({
177
- authority,
178
- identity: { id: generate(), roles: [] }
179
- })
180
-
181
- if (token instanceof Error) throw token
182
-
183
- const parts = token.split('.')
184
-
185
- parts[3] = (parts[3].startsWith('A') ? 'B' : 'A') + parts[3].slice(1)
186
-
187
- const tampered = parts.join('.')
188
-
189
- const thrown: any = await decrypt.execute(tampered)
190
- assert.deepStrictEqual(thrown.code, 'INVALID_TOKEN')
191
- })
192
-
193
- it('should reject JWE with an unknown key', async () => {
194
- const token = await encrypt.execute({
195
- authority,
196
- identity: { id: generate(), roles: [] },
197
- key: { id: 'missing', key: configuration.keys[0].key.unwrap(), label: 'missing' }
198
- })
199
-
200
- if (token instanceof Error) throw token
201
-
202
- const thrown: any = await decrypt.execute(token)
203
- assert.deepStrictEqual(thrown.code, 'INVALID_KEY')
204
- })
205
-
206
- function secret(value: string): Secret {
207
- return { unwrap: () => value }
208
- }
209
-
210
- async function paseto(key: string, claims: object, kid: string): Promise<string> {
211
- const imported = await ImportKeyFactory().run(key as `k3.local.${string}`)
212
-
213
- return await EncryptFactory().run(imported, claims, {
214
- footer: new TextEncoder().encode(JSON.stringify({ kid }))
215
- })
216
- }
@@ -1,150 +0,0 @@
1
- import { it, beforeEach } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { generate } from 'randomstring'
5
- import { timeout } from '@toa.io/generic'
6
- import { Effect as Encrypt } from './encrypt.js'
7
- import { Computation as Decrypt } from './decrypt.js'
8
- import { type Context, type Identity } from './lib/index.js'
9
- import type { Secret } from '@toa.io/extensions.configuration'
10
-
11
- let encrypt: Encrypt
12
- let decrypt: Decrypt
13
-
14
- const context: Context = {
15
- remote: { identity: { keys: null } },
16
- logs: { debug: () => undefined }
17
- } as unknown as Context
18
-
19
- const authority = generate()
20
-
21
- beforeEach(() => {
22
- context.configuration = {
23
- keys: [
24
- { id: 'key0', key: secret('sTxL6qVOadKkUJwh3FveU53XgTEo3Sdfg7k2FfiIKfs') },
25
- {
26
- id: 'legacy0',
27
- key: secret('k3.local.m28p8SrbS467t-2IUjQuSOqmjvi24TbXhyjAW_dOrog'),
28
- format: 'paseto'
29
- }
30
- ],
31
- lifetime: 1,
32
- refresh: 2,
33
- cache: {
34
- max: 1024,
35
- ttl: 3
36
- }
37
- }
38
-
39
- encrypt = new Encrypt()
40
- encrypt.mount(context)
41
-
42
- decrypt = new Decrypt()
43
- decrypt.mount(context)
44
- })
45
-
46
- it('should use the first encryption key as active and expose its id as kid', async () => {
47
- context.configuration.keys.unshift({
48
- id: 'legacy-first',
49
- key: secret('k3.local.m28p8SrbS467t-2IUjQuSOqmjvi24TbXhyjAW_dOrog'),
50
- format: 'paseto'
51
- })
52
- context.configuration.keys.push({
53
- id: 'key1',
54
- key: secret('5I0iSKw3yfBkQ4AXfA8eR-tWR0Q1dpn4x3bPrPzHkP0')
55
- })
56
-
57
- encrypt.mount(context)
58
-
59
- const encrypted = await encrypt.execute({
60
- authority,
61
- identity: { id: generate(), roles: [] }
62
- })
63
-
64
- if (encrypted instanceof Error) throw encrypted
65
-
66
- const header = JSON.parse(Buffer.from(encrypted.split('.')[0], 'base64url').toString())
67
-
68
- assert.partialDeepStrictEqual(header, { kid: 'key0', alg: 'dir', enc: 'A256GCM' })
69
- })
70
-
71
- it('should encrypt with configured lifetime by default', async () => {
72
- const identity: Identity = { id: generate(), roles: [] }
73
-
74
- const encrypted = await encrypt.execute({
75
- authority,
76
- identity
77
- })
78
-
79
- if (encrypted instanceof Error) throw encrypted
80
-
81
- await assert.partialDeepStrictEqual(await decrypt.execute(encrypted), {
82
- iss: authority,
83
- identity
84
- })
85
-
86
- await timeout(context.configuration.lifetime * 1000)
87
-
88
- const thrown: any = await decrypt.execute(encrypted)
89
- assert.deepStrictEqual(thrown.code, 'INVALID_TOKEN')
90
- })
91
-
92
- it('should encrypt with given lifetime', async () => {
93
- const identity: Identity = { id: generate(), roles: [] }
94
- const lifetime = 0.1
95
-
96
- const encrypted = await encrypt.execute({
97
- authority,
98
- identity,
99
- lifetime
100
- })
101
-
102
- if (encrypted instanceof Error) throw encrypted
103
-
104
- await assert.partialDeepStrictEqual(await decrypt.execute(encrypted), {
105
- iss: authority,
106
- identity
107
- })
108
-
109
- await timeout(lifetime * 1000)
110
-
111
- const thrown: any = await decrypt.execute(encrypted)
112
- assert.deepStrictEqual(thrown.code, 'INVALID_TOKEN')
113
- })
114
-
115
- it('should encrypt without lifetime INSECURE', async () => {
116
- const identity: Identity = { id: generate(), roles: [] }
117
- const lifetime = 0
118
-
119
- const encrypted = await encrypt.execute({
120
- authority,
121
- identity,
122
- lifetime
123
- })
124
-
125
- if (encrypted instanceof Error) throw encrypted
126
-
127
- const decrypted = await decrypt.execute(encrypted)
128
-
129
- assert.ok(!(decrypted instanceof Error))
130
-
131
- assert.partialDeepStrictEqual(decrypted.identity, identity)
132
- })
133
-
134
- it('should keep the identity permissions when none are given', async () => {
135
- const permissions = { '/notes/': ['GET'] }
136
- const identity: Identity = { id: generate(), roles: [], permissions }
137
-
138
- const encrypted = await encrypt.execute({ authority, identity, lifetime: 100 })
139
-
140
- if (encrypted instanceof Error) throw encrypted
141
-
142
- const decrypted = await decrypt.execute(encrypted)
143
-
144
- assert.ok(!(decrypted instanceof Error))
145
- assert.deepStrictEqual(decrypted.identity.permissions, permissions)
146
- })
147
-
148
- function secret(value: string): Secret {
149
- return { unwrap: () => value }
150
- }
@@ -1,73 +0,0 @@
1
- import { it, beforeEach, mock } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { generate } from 'randomstring'
5
- import { Effect as Issue } from './issue.js'
6
- import type { Context, EncryptInput } from './lib/index.js'
7
-
8
- const LIFETIME = 2592000 // seconds, the configured default
9
- const identity = generate()
10
- const authority = generate()
11
- const label = generate()
12
-
13
- let issue: Issue
14
- let encrypted: EncryptInput
15
-
16
- beforeEach(() => {
17
- const context = {
18
- configuration: { lifetime: LIFETIME },
19
- remote: {
20
- identity: {
21
- keys: { create: mock.fn(async () => ({ id: 'kid0', key: 'secret' })) },
22
- roles: { list: mock.fn(async () => []) }
23
- }
24
- },
25
- local: {
26
- encrypt: mock.fn(async ({ input }: { input: EncryptInput }) => {
27
- encrypted = input
28
-
29
- return 'token'
30
- })
31
- }
32
- } as unknown as Context
33
-
34
- issue = new Issue()
35
- issue.mount(context)
36
- })
37
-
38
- /**
39
- * The configured lifetime is seconds, as the schema says and as `encrypt` reads it. Storing
40
- * it as milliseconds and then multiplying again put the expiration some eighty thousand years
41
- * out, and only on this path — every scenario passes a lifetime of its own.
42
- */
43
- it('should expire a token issued without a lifetime as the configuration says', async () => {
44
- const now = Date.now()
45
- const reply: any = await issue.execute({ authority, identity, label })
46
-
47
- const seconds = (reply.exp - now) / 1000
48
-
49
- assert.ok(
50
- Math.abs(seconds - LIFETIME) < 10,
51
- `expected to expire in about ${LIFETIME} seconds, got ${seconds}`
52
- )
53
- })
54
-
55
- it('should hand the lifetime to `encrypt` in the seconds it reads', async () => {
56
- await issue.execute({ authority, identity, label })
57
-
58
- assert.equal(encrypted.lifetime, LIFETIME)
59
- })
60
-
61
- it('should expire a token as its own lifetime says', async () => {
62
- const now = Date.now()
63
- const reply: any = await issue.execute({ authority, identity, label, lifetime: 600 })
64
-
65
- assert.ok(Math.abs((reply.exp - now) / 1000 - 600) < 10)
66
- assert.equal(encrypted.lifetime, 600)
67
- })
68
-
69
- it('should issue a token that does not expire INSECURE', async () => {
70
- const reply: any = await issue.execute({ authority, identity, label, lifetime: 0 })
71
-
72
- assert.equal(reply.exp, undefined)
73
- })
@@ -1,25 +0,0 @@
1
- import { it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { form } from './form.js'
5
-
6
- it('should recognize a compact JWE by its five segments', () => {
7
- assert.equal(form('header.key.iv.ciphertext.tag'), 'jwe')
8
- })
9
-
10
- it('should recognize a legacy PASETO by its prefix', () => {
11
- assert.equal(form('v3.local.payload'), 'paseto')
12
- })
13
-
14
- it('should not recognize a JWS, which is what an id_token is', () => {
15
- assert.equal(form('header.payload.signature'), null)
16
- })
17
-
18
- it('should not recognize what is not a token at all', () => {
19
- for (const value of ['', 'token', 'header.key.iv.ciphertext.tag.extra'])
20
- assert.equal(form(value), null)
21
- })
22
-
23
- it('should read the shape and nothing else, leaving the rest to the verifier', () => {
24
- assert.equal(form('....'), 'jwe')
25
- })
@@ -1,62 +0,0 @@
1
- import { it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import {
5
- DecryptFactory,
6
- EncryptFactory,
7
- ExportKeyFactory,
8
- GenerateKeyFactory,
9
- ImportKeyFactory
10
- } from 'paseto/v3/local'
11
-
12
- const generateKey = GenerateKeyFactory().run
13
- const exportKey = ExportKeyFactory().run
14
- const importKey = ImportKeyFactory().run
15
- const encrypt = EncryptFactory().run
16
- const decrypt = DecryptFactory().run
17
-
18
- it('should export a generated key as PASERK', async () => {
19
- const paserk = await exportKey(await generateKey({ extractable: true }))
20
-
21
- assert.match(paserk, /^k3\.local\./)
22
- })
23
-
24
- it('should round trip a token', async () => {
25
- const key = await importKey(await exportKey(await generateKey({ extractable: true })))
26
- const token = await encrypt(key, { iss: 'test', sub: 'me' })
27
-
28
- assert.match(token, /^v3\.local\./)
29
-
30
- const { claims } = await decrypt(key, token, { allowNonExpiring: true })
31
-
32
- assert.partialDeepStrictEqual(claims, { iss: 'test', sub: 'me' })
33
- })
34
-
35
- it('should carry the key id in the footer, which is read without the key', async () => {
36
- const key = await importKey(await exportKey(await generateKey({ extractable: true })))
37
- const token = await encrypt(
38
- key,
39
- { iss: 'test' },
40
- { footer: new TextEncoder().encode(JSON.stringify({ kid: 'key0' })) }
41
- )
42
-
43
- // decrypt reads it, and so does anyone holding only the token
44
- const [, , , footer] = token.split('.')
45
-
46
- assert.deepStrictEqual(JSON.parse(Buffer.from(footer, 'base64url').toString()), {
47
- kid: 'key0'
48
- })
49
- })
50
-
51
- it('should decrypt a token issued under paseto 3', async () => {
52
- // both written by paseto 3.1.4: the legacy path exists to read tokens already in the wild
53
- const key = await importKey('k3.local.m28p8SrbS467t-2IUjQuSOqmjvi24TbXhyjAW_dOrog')
54
- const token =
55
- 'v3.local.Fm7vzrYSDh7Kc9j_2eNr4vwWw5jSEOIKrh_vCbteQQP57tFo5xxk7koNIJQNcH9b' +
56
- 'O4yH9ItoC-fWL3ycm-YqBIsadjfbSOvwhffP130-tw3MZZ5PNJzFe6afNa4wxbKpa1bWtOwwULJpAqmZ' +
57
- '.eyJraWQiOiJsZWdhY3kwIn0'
58
-
59
- const { claims } = await decrypt(key, token, { allowNonExpiring: true })
60
-
61
- assert.partialDeepStrictEqual(claims, { iss: 'legacy', sub: 'old' })
62
- })