@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,361 +0,0 @@
1
- import { once } from 'node:events'
2
- import * as crypto from 'node:crypto'
3
- import * as http from 'node:http'
4
- import * as assert from 'node:assert'
5
- import * as util from 'node:util'
6
- import { buffer } from 'node:stream/consumers'
7
- import tsflow from 'cucumber-tsflow'
8
-
9
- import { Captures } from './Captures.js'
10
-
11
- import type { AddressInfo } from 'node:net'
12
-
13
- const { binding, given, afterAll } = tsflow
14
-
15
- @binding([Captures])
16
- export class IDP {
17
- private static server?: http.Server
18
- private static privateKey?: crypto.KeyObject
19
- private static issuer?: string
20
- private static authCodes = new Map<string, AuthCode>()
21
- private readonly captures: Captures
22
-
23
- public constructor(captures: Captures) {
24
- this.captures = captures
25
- }
26
-
27
- @afterAll()
28
- public static async stop(): Promise<void> {
29
- if (this.server instanceof http.Server) {
30
- this.server.close()
31
- await once(this.server, 'close')
32
- }
33
- }
34
-
35
- @given(/local IDP is running/i)
36
- public async start(): Promise<void> {
37
- if (IDP.server instanceof http.Server) return
38
-
39
- // creating the key
40
- const { publicKey, privateKey } = await util.promisify(crypto.generateKeyPair)(
41
- 'rsa',
42
- {
43
- modulusLength: 2048
44
- }
45
- )
46
-
47
- IDP.privateKey = privateKey
48
-
49
- const jwk = JSON.stringify({
50
- keys: [
51
- {
52
- use: 'sig',
53
- alg: 'RS256',
54
- ...publicKey.export({ format: 'jwk' })
55
- }
56
- ]
57
- })
58
-
59
- const JWK_ENDPOINT = '/.well-known/jwks'
60
- const TOKEN_ENDPOINT = '/token'
61
- const AUTH_ENDPOINT = '/authorize'
62
-
63
- const server = http.createServer(async (request, response) => {
64
- switch (request.url) {
65
- case JWK_ENDPOINT:
66
- response.writeHead(200, {
67
- 'Content-Type': 'application/json',
68
- 'Content-Length': jwk.length,
69
- 'Cache-Control': 'no-cache, no-store, must-revalidate',
70
- Pragma: 'no-cache',
71
- Expires: '0'
72
- })
73
- response.end(jwk)
74
- break
75
-
76
- case '/.well-known/openid-configuration':
77
- {
78
- const openIdConfiguration = JSON.stringify({
79
- issuer: IDP.issuer,
80
- jwks_uri: IDP.issuer + JWK_ENDPOINT,
81
- authorization_endpoint: IDP.issuer + AUTH_ENDPOINT,
82
- token_endpoint: IDP.issuer + TOKEN_ENDPOINT,
83
- response_types_supported: ['id_token', 'code'],
84
- grant_types_supported: ['authorization_code'],
85
- subject_types_supported: ['public'],
86
- id_token_signing_alg_values_supported: ['RS256'],
87
- scopes_supported: ['openid', 'email', 'profile']
88
- })
89
-
90
- response.writeHead(200, {
91
- 'Content-Type': 'application/json',
92
- 'Cache-Control': 'public, max-age=3600',
93
- 'Content-Length': openIdConfiguration.length
94
- })
95
-
96
- response.end(openIdConfiguration)
97
- }
98
-
99
- break
100
-
101
- case TOKEN_ENDPOINT:
102
- {
103
- if (request.method !== 'POST') {
104
- response.writeHead(405, { 'Content-Type': 'text/plain' })
105
- response.end('Method not allowed')
106
-
107
- return
108
- }
109
-
110
- const buf = await buffer(request)
111
- const body = buf.toString('utf8')
112
-
113
- const params = new URLSearchParams(body)
114
- const grantType = params.get('grant_type')!
115
- const code = params.get('code')!
116
- const redirectUri = params.get('redirect_uri')!
117
- const clientId = params.get('client_id')!
118
-
119
- if (grantType !== 'authorization_code' || !code || !clientId) {
120
- response.writeHead(400, { 'Content-Type': 'application/json' })
121
- response.end(JSON.stringify({ error: 'invalid_request' }))
122
- }
123
-
124
- const codeData = IDP.authCodes.get(code)
125
-
126
- if (
127
- !codeData ||
128
- codeData.expiresAt < Date.now() ||
129
- codeData.clientId !== clientId ||
130
- (redirectUri && codeData.redirectUri !== redirectUri)
131
- ) {
132
- response.writeHead(400, { 'Content-Type': 'application/json' })
133
- response.end(JSON.stringify({ error: 'invalid_grant' }))
134
-
135
- return
136
- }
137
-
138
- const accessToken = crypto.randomBytes(32).toString('hex')
139
- const idToken = this.generateIdToken(codeData.sub, codeData.email, clientId)
140
-
141
- IDP.authCodes.delete(code)
142
-
143
- response.writeHead(200, { 'Content-Type': 'application/json' }).end(
144
- JSON.stringify({
145
- access_token: accessToken,
146
- token_type: 'Bearer',
147
- id_token: idToken,
148
- expires_in: 3600
149
- })
150
- )
151
- }
152
-
153
- break
154
-
155
- default:
156
- response.writeHead(404, 'Not found')
157
- response.end()
158
- }
159
- })
160
-
161
- // in Toa's own block, and out of the ephemeral range an arbitrary port would sit in
162
- server.listen(31005, 'localhost')
163
- await once(server, 'listening')
164
-
165
- const address = server.address() as AddressInfo
166
-
167
- console.log('IdP is listening on %s:%s', address.address, address.port)
168
- IDP.server = server
169
- IDP.issuer = `http://localhost:${address.port}`
170
- }
171
-
172
- @given('the IDP token for {word} is issued')
173
- public async issueToken(user: string): Promise<void> {
174
- assert.ok(IDP.privateKey, 'IdP private key is not available')
175
-
176
- const jwt = [
177
- {
178
- typ: 'JWT',
179
- alg: 'RS256'
180
- },
181
- {
182
- iss: IDP.issuer,
183
- sub: user,
184
- aud: 'test',
185
- email: user + '@test.local',
186
- iat: Math.floor(Date.now() / 1000),
187
- exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
188
- }
189
- ]
190
- .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
191
- .join('.')
192
-
193
- const signature = crypto
194
- .createSign('RSA-SHA256')
195
- .end(jwt)
196
- .sign(IDP.privateKey, 'base64url')
197
-
198
- const idToken = `${jwt}.${signature}`
199
-
200
- this.captures.set(`${user}.id_token`, idToken)
201
- }
202
-
203
- @given('the IDP random token is issued')
204
- public async issueNewToken(): Promise<void> {
205
- assert.ok(IDP.privateKey, 'IdP private key is not available')
206
-
207
- const sub = Math.random().toString(36).substring(7)
208
-
209
- const jwt = [
210
- {
211
- typ: 'JWT',
212
- alg: 'RS256'
213
- },
214
- {
215
- iss: IDP.issuer,
216
- sub,
217
- aud: 'test',
218
- email: sub + '@test.local',
219
- iat: Math.floor(Date.now() / 1000),
220
- exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
221
- }
222
- ]
223
- .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
224
- .join('.')
225
-
226
- const signature = crypto
227
- .createSign('RSA-SHA256')
228
- .end(jwt)
229
- .sign(IDP.privateKey, 'base64url')
230
-
231
- const idToken = `${jwt}.${signature}`
232
-
233
- this.captures.set('random.sub', sub)
234
- this.captures.set('random.email', sub + '@test.local')
235
- this.captures.set('random.id_token', idToken)
236
- }
237
-
238
- @given('the IDP {word} token for {word} is issued with following secret:')
239
- public async issueSymmetricToken(
240
- alg: string,
241
- user: string,
242
- secret: string
243
- ): Promise<void> {
244
- const jwt = [
245
- {
246
- typ: 'JWT',
247
- alg
248
- },
249
- {
250
- iss: IDP.issuer,
251
- sub: user,
252
- aud: 'test',
253
- iat: Math.floor(Date.now() / 1000),
254
- exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
255
- }
256
- ]
257
- .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
258
- .join('.')
259
-
260
- const signature = crypto
261
- .createHmac(alg.replace(/^HS(\d{3})$/, 'sha$1'), secret)
262
- .update(jwt)
263
- .digest('base64url')
264
-
265
- const idToken = `${jwt}.${signature}`
266
-
267
- this.captures.set(`${user}.id_token`, idToken)
268
- }
269
-
270
- @given('ID token with jti is issued for {word}')
271
- public async issueTokenWithJti(user: string): Promise<void> {
272
- assert.ok(IDP.privateKey, 'IdP private key is not available')
273
-
274
- const jwt = [
275
- {
276
- typ: 'JWT',
277
- alg: 'RS256'
278
- },
279
- {
280
- iss: IDP.issuer,
281
- sub: user,
282
- aud: 'test',
283
- email: user + '@test.local',
284
- iat: Math.floor(Date.now() / 1000),
285
- exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000),
286
- jti: crypto.randomUUID()
287
- }
288
- ]
289
- .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
290
- .join('.')
291
-
292
- const signature = crypto
293
- .createSign('RSA-SHA256')
294
- .end(jwt)
295
- .sign(IDP.privateKey, 'base64url')
296
-
297
- const idToken = `${jwt}.${signature}`
298
-
299
- this.captures.set(`${user}.id_token`, idToken)
300
- }
301
-
302
- @given('auth code for {word} is issued for {word}')
303
- public async issueAuthCode(user: string, redirectUri: string): Promise<void> {
304
- const code = crypto.randomBytes(16).toString('hex')
305
- const email = user + '@test.local'
306
- const clientId = 'nex'
307
-
308
- IDP.authCodes.set(code, {
309
- code,
310
- sub: user,
311
- email,
312
- clientId,
313
- redirectUri,
314
- expiresAt: Date.now() + 60 * 1000
315
- })
316
-
317
- const json = JSON.stringify({ code, iss: IDP.issuer, for: redirectUri })
318
- const base64 = Buffer.from(json).toString('base64')
319
-
320
- this.captures.set(`${user}.auth_code`, code)
321
- this.captures.set(`${user}.code_credentials`, base64)
322
- }
323
-
324
- private generateIdToken(sub: string, email: string, clientId: string): string {
325
- assert.ok(IDP.privateKey, 'IdP private key is not available')
326
- assert.ok(IDP.issuer, 'IdP issuer is not available')
327
-
328
- const jwt = [
329
- {
330
- typ: 'JWT',
331
- alg: 'RS256'
332
- },
333
- {
334
- iss: IDP.issuer,
335
- sub,
336
- aud: clientId,
337
- email,
338
- iat: Math.floor(Date.now() / 1000),
339
- exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
340
- }
341
- ]
342
- .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
343
- .join('.')
344
-
345
- const signature = crypto
346
- .createSign('RSA-SHA256')
347
- .end(jwt)
348
- .sign(IDP.privateKey, 'base64url')
349
-
350
- return `${jwt}.${signature}`
351
- }
352
- }
353
-
354
- interface AuthCode {
355
- code: string
356
- sub: string
357
- email: string
358
- clientId: string
359
- redirectUri: string
360
- expiresAt: number
361
- }
@@ -1,54 +0,0 @@
1
- import tsflow from 'cucumber-tsflow'
2
-
3
- import * as http from '@toa.io/agent'
4
- import { Parameters } from './Parameters.js'
5
- import { Captures } from './Captures.js'
6
- import { Gateway } from './Gateway.js'
7
-
8
- const { binding, given } = tsflow
9
-
10
- @binding([Gateway, Parameters, Captures])
11
- export class Identity {
12
- private readonly gateway: Gateway
13
- private readonly http: http.Agent
14
- private readonly variables: Captures
15
-
16
- public constructor(gateway: Gateway, parameters: Parameters, captures: Captures) {
17
- this.gateway = gateway
18
- this.http = new http.Agent(parameters.origin, captures)
19
- this.variables = captures
20
- }
21
-
22
- @given('transient identity {word}')
23
- public async transient(as: string): Promise<Principal> {
24
- await this.gateway.start()
25
-
26
- await this.http.request(`
27
- GET /identity/ HTTP/1.1
28
- host: nex.toa.io
29
- accept: application/yaml
30
- `)
31
-
32
- this.http.responseIncludes(`
33
- 201 Created
34
- authorization: Token \${{ ${as}.token }}
35
-
36
- id: \${{ ${as}.id }}
37
- `)
38
-
39
- const id = this.variables.get(as + '.id')!
40
- const token = this.variables.get(as + '.token')!
41
-
42
- return { id, token }
43
- }
44
-
45
- @given('transient identity')
46
- public async anonymous(): Promise<Principal> {
47
- return await this.transient('identity')
48
- }
49
- }
50
-
51
- export interface Principal {
52
- id: string
53
- token: string
54
- }
@@ -1,42 +0,0 @@
1
- import * as assert from 'node:assert'
2
- import tsflow from 'cucumber-tsflow'
3
-
4
- import * as boot from '@toa.io/boot'
5
- import { Locator, type Remote } from '@toa.io/core'
6
- import { Captures } from './Captures.js'
7
-
8
- const { binding, given } = tsflow
9
-
10
- @binding([Captures])
11
- export class OTP {
12
- private captures: Captures
13
- private otp: Remote | null = null
14
-
15
- public constructor(captures: Captures) {
16
- this.captures = captures
17
- }
18
-
19
- @given('OTP for `{word}` in `{word}` authority is issued')
20
- public async issue(username: string, authority: string): Promise<void> {
21
- this.otp ??= await this.connect()
22
-
23
- const reply = await this.otp.invoke('issue', {
24
- input: {
25
- username,
26
- authority
27
- }
28
- })
29
-
30
- assert.ok(typeof reply.code === 'string')
31
-
32
- const credentials = btoa(`${username}:${reply.code}`)
33
-
34
- this.captures.set(`${username}.otp`, credentials)
35
- }
36
-
37
- private async connect(): Promise<Remote> {
38
- const locator = new Locator('otp', 'identity')
39
-
40
- return await boot.remote(locator)
41
- }
42
- }
@@ -1,162 +0,0 @@
1
- import { join } from 'node:path'
2
- import * as dotenv from 'dotenv'
3
- import { setDefaultTimeout } from '@cucumber/cucumber'
4
- import { environment as variables } from '@toa.io/generic'
5
-
6
- dotenv.config({ path: join(import.meta.dirname, '.env') })
7
-
8
- /**
9
- * Not `PORT` and `PROBE`, which a deployment serves the gateway on: an application built on
10
- * Toa is served on this machine too, and its own gateway holds those. See CONTRIBUTING.md.
11
- */
12
- export const PORT = 31000
13
- export const PROBE = 31004
14
-
15
- export class Parameters {
16
- public readonly origin: string
17
-
18
- public constructor() {
19
- this.origin = `http://127.0.0.1:${PORT}`
20
- }
21
- }
22
-
23
- setDefaultTimeout(60 * 1000)
24
-
25
- variables.set('TOA_DEV', '1')
26
-
27
- // a reply is checked against what the operation declares, so the suite runs Toa under the
28
- // contract it asks applications to keep
29
- if (!variables.has('TOA_ENV')) variables.set('TOA_ENV', 'local')
30
-
31
- // the gateway answers for itself, as it does in a deployment: telemetry's probe tracks the
32
- // nested composition, which connects before route discovery settles
33
- if (!variables.has('TOA_TELEMETRY_READY'))
34
- variables.set('TOA_TELEMETRY_READY', JSON.stringify(false))
35
-
36
- // export traces to the local Tempo (`docker compose up tempo grafana`),
37
- // unavailability of the endpoint is harmless
38
- if (!variables.has('TOA_TELEMETRY_TRACES'))
39
- variables.set(
40
- 'TOA_TELEMETRY_TRACES',
41
- JSON.stringify({
42
- exporters: {
43
- console: null,
44
- otlp: { endpoint: 'http://localhost:31061' }
45
- }
46
- })
47
- )
48
-
49
- /*
50
- * The page the gateway serves at `/.discovery/`, pointed at a fixture: the scenarios are
51
- * about the server, not the page, and none of them should need a UI build. Set here rather
52
- * than in a step because the gateway is not rebuilt between scenarios that share its
53
- * signature, so one flipping this would silently read whatever the last one left.
54
- */
55
- process.env.__TESTING_EXPOSITION_DISCOVERY_ROOT = join(
56
- import.meta.dirname,
57
- '..',
58
- 'site'
59
- )
60
-
61
- const environment = process.env.CLOUDINARY_ENVIRONMENT
62
-
63
- /**
64
- * A storage is built when a component's context is — for every scenario, not only for the ones
65
- * that reach for it — and a Cloudinary storage asks for the keys of a real account. A checkout
66
- * carries none, so these two are declared only where `features/steps/.env` names an environment.
67
- */
68
- const CLOUDINARY = {
69
- cloudinary: {
70
- provider: 'cloudinary',
71
- environment,
72
- type: 'image',
73
- prefix: 'toa-dev',
74
- transformations: [
75
- {
76
- extension: 'icon',
77
- transformation: [
78
- {
79
- width: 48,
80
- height: 48,
81
- crop: 'fill'
82
- },
83
- {
84
- border: '10px_solid_white'
85
- }
86
- ],
87
- optional: true
88
- },
89
- {
90
- extension: '(?<width>\\d*)x(?<height>\\d*)(z(?<zoom>\\d*))?',
91
- transformation: {
92
- width: '<width>',
93
- height: '<height>',
94
- zoom: '<zoom>',
95
- crop: 'thumb',
96
- gravity: 'face'
97
- },
98
- optional: true
99
- },
100
- {
101
- extension: '\\[(?<width>\\d*)x(?<height>\\d*)\\](z(?<zoom>\\d+))?',
102
- transformation: {
103
- width: '<width>',
104
- height: '<height>',
105
- zoom: '<zoom>',
106
- crop: 'fit'
107
- },
108
- optional: true
109
- },
110
- {
111
- extension: '(?<format>jpeg|webp)',
112
- transformation: {
113
- fetch_format: '<format>'
114
- },
115
- optional: true
116
- }
117
- ]
118
- },
119
- cloudinary_video: {
120
- provider: 'cloudinary',
121
- environment,
122
- type: 'video',
123
- prefix: 'toa-dev',
124
- eager: [
125
- {
126
- width: 200,
127
- height: 200,
128
- crop: 'fill'
129
- }
130
- ],
131
- transformations: [
132
- {
133
- extension: '200x200',
134
- transformation: {
135
- width: 200,
136
- height: 200,
137
- crop: 'fill'
138
- },
139
- optional: true
140
- },
141
- {
142
- extension: '(?<format>mp4|gif)',
143
- transformation: {
144
- quality: 'auto',
145
- fetch_format: '<format>'
146
- },
147
- optional: true
148
- }
149
- ]
150
- }
151
- }
152
-
153
- variables.set(
154
- 'TOA_STORAGES',
155
- JSON.stringify({
156
- octets: {
157
- provider: 'tmp',
158
- directory: Math.random().toString(36).substring(2)
159
- },
160
- ...(environment === undefined ? {} : CLOUDINARY)
161
- })
162
- )
@@ -1,38 +0,0 @@
1
- import assert from 'node:assert'
2
- import { Agent, request } from 'undici'
3
- import tsflow from 'cucumber-tsflow'
4
- import { PATH } from '../../source/HTTP/index.js'
5
- import { PROBE } from './Parameters.js'
6
-
7
- const { after, binding, then, when } = tsflow
8
-
9
- @binding()
10
- export class Probe {
11
- private readonly agent = new Agent()
12
- private status: number | null = null
13
- private headers: Record<string, string> = {}
14
-
15
- @when('the ready probe is requested')
16
- public async request(): Promise<void> {
17
- const response = await request(`http://127.0.0.1:${PROBE}${PATH}`, {
18
- dispatcher: this.agent
19
- })
20
-
21
- this.status = response.statusCode
22
- this.headers = response.headers as Record<string, string>
23
-
24
- await response.body.dump()
25
- }
26
-
27
- @then('the ready probe answers {int}')
28
- public answers(status: number): void {
29
- assert.equal(this.status, status)
30
-
31
- if (status === 200) assert.equal(this.headers['cache-control'], 'no-store')
32
- }
33
-
34
- @after()
35
- public async close(): Promise<void> {
36
- await this.agent.close()
37
- }
38
- }