@toa.io/extensions.exposition 1.0.0-alpha.285 → 1.0.0-alpha.286

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 (611) hide show
  1. package/components/exposition.octets/operations/delete.js +1 -1
  2. package/components/exposition.octets/operations/get.js +5 -2
  3. package/components/exposition.octets/operations/head.js +1 -1
  4. package/components/exposition.octets/operations/put.js +29 -37
  5. package/components/exposition.octets/types/toa.d.ts +1 -1
  6. package/components/identity.bans/manifest.toa.yaml +12 -13
  7. package/components/identity.bans/migrations/0001-system-properties.yaml +14 -0
  8. package/components/identity.bans/operations/transit.js +1 -1
  9. package/components/identity.bans/source/transit.ts +1 -1
  10. package/components/identity.bans/tsconfig.tsbuildinfo +1 -1
  11. package/components/identity.bans/types/toa.d.ts +5 -5
  12. package/components/identity.basic/events/principal.js +3 -1
  13. package/components/identity.basic/manifest.toa.yaml +17 -23
  14. package/components/identity.basic/migrations/0001-system-properties.yaml +14 -0
  15. package/components/identity.basic/migrations/0002-indexes.yaml +13 -0
  16. package/components/identity.basic/operations/add.js +1 -1
  17. package/components/identity.basic/operations/authenticate.js +2 -2
  18. package/components/identity.basic/operations/check.js +4 -2
  19. package/components/identity.basic/operations/delete.js +1 -1
  20. package/components/identity.basic/operations/incept.js +1 -1
  21. package/components/identity.basic/operations/info.js +1 -1
  22. package/components/identity.basic/operations/lib/credentials.js +1 -1
  23. package/components/identity.basic/operations/transit.js +7 -8
  24. package/components/identity.basic/source/add.ts +5 -2
  25. package/components/identity.basic/source/authenticate.ts +11 -13
  26. package/components/identity.basic/source/check.ts +9 -6
  27. package/components/identity.basic/source/delete.ts +4 -1
  28. package/components/identity.basic/source/incept.ts +13 -10
  29. package/components/identity.basic/source/info.ts +4 -1
  30. package/components/identity.basic/source/lib/credentials.ts +2 -3
  31. package/components/identity.basic/source/transit.ts +27 -21
  32. package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
  33. package/components/identity.basic/types/index.d.ts +7 -3
  34. package/components/identity.basic/types/toa.d.ts +5 -5
  35. package/components/identity.clients/manifest.toa.yaml +36 -40
  36. package/components/identity.clients/migrations/0001-system-properties.yaml +14 -0
  37. package/components/identity.clients/migrations/0002-indexes.yaml +4 -0
  38. package/components/identity.clients/operations/describe.js +1 -1
  39. package/components/identity.clients/operations/lib/canonical.js +1 -1
  40. package/components/identity.clients/operations/lib/cimd.js +3 -2
  41. package/components/identity.clients/operations/lib/redirect.js +7 -4
  42. package/components/identity.clients/operations/register.js +2 -2
  43. package/components/identity.clients/source/describe.ts +6 -8
  44. package/components/identity.clients/source/lib/Context.ts +6 -3
  45. package/components/identity.clients/source/lib/Entity.ts +1 -1
  46. package/components/identity.clients/source/lib/canonical.ts +1 -1
  47. package/components/identity.clients/source/lib/cimd.test.ts +8 -6
  48. package/components/identity.clients/source/lib/cimd.ts +24 -19
  49. package/components/identity.clients/source/lib/redirect.test.ts +8 -2
  50. package/components/identity.clients/source/lib/redirect.ts +12 -8
  51. package/components/identity.clients/source/register.ts +18 -18
  52. package/components/identity.clients/tsconfig.tsbuildinfo +1 -1
  53. package/components/identity.clients/types/toa.d.ts +5 -5
  54. package/components/identity.credentials/manifest.toa.yaml +4 -4
  55. package/components/identity.credentials/operations/list.js +8 -4
  56. package/components/identity.credentials/source/list.test.ts +39 -20
  57. package/components/identity.credentials/source/list.ts +12 -8
  58. package/components/identity.credentials/tsconfig.tsbuildinfo +1 -1
  59. package/components/identity.credentials/types/toa.d.ts +2 -2
  60. package/components/identity.federation/manifest.toa.yaml +23 -32
  61. package/components/identity.federation/migrations/0001-system-properties.yaml +14 -0
  62. package/components/identity.federation/migrations/0002-indexes.yaml +25 -0
  63. package/components/identity.federation/operations/authenticate.js +4 -2
  64. package/components/identity.federation/operations/create.js +2 -2
  65. package/components/identity.federation/operations/decode.js +1 -1
  66. package/components/identity.federation/operations/delete.js +1 -1
  67. package/components/identity.federation/operations/incept.js +1 -1
  68. package/components/identity.federation/operations/lib/decode.js +1 -1
  69. package/components/identity.federation/operations/lib/discovery.js +2 -2
  70. package/components/identity.federation/operations/lib/exchange.js +8 -4
  71. package/components/identity.federation/operations/lib/principal.js +1 -1
  72. package/components/identity.federation/operations/lib/resolve.js +1 -1
  73. package/components/identity.federation/operations/list.js +2 -2
  74. package/components/identity.federation/source/authenticate.ts +19 -17
  75. package/components/identity.federation/source/create.ts +6 -7
  76. package/components/identity.federation/source/decode.ts +4 -1
  77. package/components/identity.federation/source/delete.ts +4 -1
  78. package/components/identity.federation/source/incept.ts +2 -3
  79. package/components/identity.federation/source/lib/decode.ts +4 -7
  80. package/components/identity.federation/source/lib/discovery.test.ts +15 -5
  81. package/components/identity.federation/source/lib/discovery.ts +10 -9
  82. package/components/identity.federation/source/lib/exchange.ts +18 -15
  83. package/components/identity.federation/source/lib/jose.d.ts +1 -1
  84. package/components/identity.federation/source/lib/principal.ts +5 -3
  85. package/components/identity.federation/source/lib/resolve.ts +5 -1
  86. package/components/identity.federation/source/list.test.ts +26 -10
  87. package/components/identity.federation/source/list.ts +5 -2
  88. package/components/identity.federation/source/types/context.ts +5 -2
  89. package/components/identity.federation/source/types/entity.ts +2 -2
  90. package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
  91. package/components/identity.federation/types/toa.d.ts +5 -5
  92. package/components/identity.grants/manifest.toa.yaml +27 -31
  93. package/components/identity.grants/migrations/0001-system-properties.yaml +14 -0
  94. package/components/identity.grants/migrations/0002-indexes.yaml +5 -0
  95. package/components/identity.grants/operations/authorize.js +1 -1
  96. package/components/identity.grants/operations/exchange.js +5 -2
  97. package/components/identity.grants/operations/lib/code.js +1 -1
  98. package/components/identity.grants/operations/lib/identify.js +1 -1
  99. package/components/identity.grants/operations/list.js +1 -1
  100. package/components/identity.grants/operations/revoke.js +3 -2
  101. package/components/identity.grants/source/authorize.ts +27 -19
  102. package/components/identity.grants/source/exchange.ts +15 -11
  103. package/components/identity.grants/source/lib/code.ts +20 -8
  104. package/components/identity.grants/source/lib/identify.ts +1 -1
  105. package/components/identity.grants/source/list.ts +2 -2
  106. package/components/identity.grants/source/revoke.ts +9 -7
  107. package/components/identity.grants/tsconfig.tsbuildinfo +1 -1
  108. package/components/identity.grants/types/index.d.ts +3 -3
  109. package/components/identity.grants/types/toa.d.ts +5 -5
  110. package/components/identity.keys/manifest.toa.yaml +18 -23
  111. package/components/identity.keys/migrations/0001-system-properties.yaml +14 -0
  112. package/components/identity.keys/migrations/0002-indexes.yaml +4 -0
  113. package/components/identity.keys/operations/create.js +1 -1
  114. package/components/identity.keys/operations/disable.js +1 -1
  115. package/components/identity.keys/operations/revoke.js +1 -1
  116. package/components/identity.keys/source/create.ts +2 -3
  117. package/components/identity.keys/source/disable.ts +1 -1
  118. package/components/identity.keys/source/revoke.ts +2 -2
  119. package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
  120. package/components/identity.keys/types/toa.d.ts +5 -5
  121. package/components/identity.otp/manifest.toa.yaml +16 -24
  122. package/components/identity.otp/migrations/0001-system-properties.yaml +14 -0
  123. package/components/identity.otp/migrations/0002-indexes.yaml +5 -0
  124. package/components/identity.otp/operations/authenticate.js +1 -1
  125. package/components/identity.otp/operations/issue.js +1 -1
  126. package/components/identity.otp/source/authenticate.ts +4 -7
  127. package/components/identity.otp/source/issue.ts +1 -1
  128. package/components/identity.otp/source/lib/Context.ts +1 -1
  129. package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
  130. package/components/identity.otp/types/toa.d.ts +5 -5
  131. package/components/identity.passkeys/manifest.toa.yaml +45 -53
  132. package/components/identity.passkeys/migrations/0001-system-properties.yaml +14 -0
  133. package/components/identity.passkeys/migrations/0002-indexes.yaml +11 -0
  134. package/components/identity.passkeys/operations/authenticate.js +1 -1
  135. package/components/identity.passkeys/operations/challenge.js +6 -3
  136. package/components/identity.passkeys/operations/create.js +1 -1
  137. package/components/identity.passkeys/operations/delete.js +1 -1
  138. package/components/identity.passkeys/operations/list.js +1 -1
  139. package/components/identity.passkeys/operations/use.js +1 -1
  140. package/components/identity.passkeys/source/authenticate.ts +3 -4
  141. package/components/identity.passkeys/source/challenge.ts +29 -25
  142. package/components/identity.passkeys/source/create.ts +8 -6
  143. package/components/identity.passkeys/source/delete.ts +4 -1
  144. package/components/identity.passkeys/source/list.ts +4 -1
  145. package/components/identity.passkeys/source/types/Context.ts +1 -1
  146. package/components/identity.passkeys/source/use.ts +12 -10
  147. package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
  148. package/components/identity.passkeys/types/toa.d.ts +5 -5
  149. package/components/identity.roles/manifest.toa.yaml +12 -16
  150. package/components/identity.roles/migrations/0001-system-properties.yaml +14 -0
  151. package/components/identity.roles/migrations/0002-indexes.yaml +8 -0
  152. package/components/identity.roles/operations/grant.js +1 -1
  153. package/components/identity.roles/operations/list.js +1 -1
  154. package/components/identity.roles/operations/principal.js +2 -2
  155. package/components/identity.roles/source/grant.ts +7 -6
  156. package/components/identity.roles/source/list.ts +1 -1
  157. package/components/identity.roles/source/principal.ts +5 -7
  158. package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
  159. package/components/identity.roles/types/toa.d.ts +5 -5
  160. package/components/identity.tokens/manifest.toa.yaml +17 -15
  161. package/components/identity.tokens/migrations/0001-system-properties.yaml +14 -0
  162. package/components/identity.tokens/operations/authenticate.js +2 -2
  163. package/components/identity.tokens/operations/decrypt.js +11 -5
  164. package/components/identity.tokens/operations/encrypt.js +2 -2
  165. package/components/identity.tokens/operations/issue.js +2 -4
  166. package/components/identity.tokens/operations/lib/form.js +1 -1
  167. package/components/identity.tokens/operations/lib/key.js +1 -1
  168. package/components/identity.tokens/operations/revoke.js +1 -1
  169. package/components/identity.tokens/source/authenticate.test.ts +22 -16
  170. package/components/identity.tokens/source/authenticate.ts +7 -10
  171. package/components/identity.tokens/source/decrypt.test.ts +62 -29
  172. package/components/identity.tokens/source/decrypt.ts +30 -27
  173. package/components/identity.tokens/source/encrypt.test.ts +21 -16
  174. package/components/identity.tokens/source/encrypt.ts +8 -11
  175. package/components/identity.tokens/source/issue.test.ts +4 -2
  176. package/components/identity.tokens/source/issue.ts +6 -8
  177. package/components/identity.tokens/source/lib/form.ts +5 -9
  178. package/components/identity.tokens/source/lib/jose.d.ts +1 -1
  179. package/components/identity.tokens/source/lib/key.ts +1 -1
  180. package/components/identity.tokens/source/lib/paseto.test.ts +17 -6
  181. package/components/identity.tokens/source/revoke.ts +1 -1
  182. package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
  183. package/components/identity.tokens/types/index.d.ts +13 -4
  184. package/components/identity.tokens/types/toa.d.ts +5 -5
  185. package/context.toa.yaml +2 -2
  186. package/cucumber.mjs +3 -0
  187. package/documentation/access.md +4 -3
  188. package/documentation/cache.md +17 -3
  189. package/documentation/components.md +2 -2
  190. package/documentation/credentials.md +2 -2
  191. package/documentation/identity.md +7 -9
  192. package/documentation/map.md +2 -2
  193. package/documentation/mcp.md +16 -16
  194. package/documentation/notes/peers.md +1 -1
  195. package/documentation/notes/throttling.md +1 -1
  196. package/documentation/octets.md +4 -4
  197. package/documentation/protocol.md +3 -3
  198. package/documentation/query.md +14 -8
  199. package/documentation/rpc.md +31 -21
  200. package/documentation/tracing.md +3 -3
  201. package/documentation/tree.md +1 -1
  202. package/features/auth.assert.feature +2 -2
  203. package/features/auth.bearer.feature +1 -1
  204. package/features/auth.claims.feature +5 -5
  205. package/features/auth.incept.feature +2 -2
  206. package/features/authorities.federation.feature +1 -1
  207. package/features/configuration.feature +3 -4
  208. package/features/credentials.feature +9 -9
  209. package/features/dev.feature +1 -0
  210. package/features/dynamic.feature +1 -0
  211. package/features/errors.feature +21 -0
  212. package/features/etag.feature +0 -86
  213. package/features/identity.bans.feature +3 -3
  214. package/features/identity.basic.feature +9 -9
  215. package/features/identity.federation.feature +11 -11
  216. package/features/identity.tokens.custom.feature +5 -5
  217. package/features/identity.tokens.feature +2 -2
  218. package/features/interruptions.feature +1 -0
  219. package/features/introspection.map.feature +4 -4
  220. package/features/io.throttle.feature +1 -0
  221. package/features/map.feature +2 -2
  222. package/features/octets.cloudinary.feature +1 -1
  223. package/features/octets.download.feature +1 -0
  224. package/features/require.feature +1 -2
  225. package/features/steps/Captures.ts +1 -1
  226. package/features/steps/Cloudinary.ts +1 -2
  227. package/features/steps/Common.ts +4 -5
  228. package/features/steps/Components.ts +17 -12
  229. package/features/steps/Database.ts +42 -23
  230. package/features/steps/Gateway.ts +55 -72
  231. package/features/steps/HTTP.ts +12 -15
  232. package/features/steps/IDP.ts +118 -94
  233. package/features/steps/Identity.ts +3 -3
  234. package/features/steps/OTP.ts +3 -3
  235. package/features/steps/Parameters.ts +20 -10
  236. package/features/steps/Probe.ts +9 -7
  237. package/features/steps/Realtime.ts +40 -22
  238. package/features/steps/Workspace.ts +10 -7
  239. package/features/steps/components/audit/operations/record.js +1 -1
  240. package/features/steps/components/echo/operations/affect.js +1 -1
  241. package/features/steps/components/echo/operations/compute.js +1 -1
  242. package/features/steps/components/echo/operations/echo.js +1 -1
  243. package/features/steps/components/echo/operations/error.js +1 -1
  244. package/features/steps/components/echo/operations/identity.js +1 -1
  245. package/features/steps/components/echo/operations/parameters.js +1 -1
  246. package/features/steps/components/echo/operations/ping.js +1 -1
  247. package/features/steps/components/echo/operations/unwrap.js +1 -1
  248. package/features/steps/components/greeter/operations/greet.js +1 -1
  249. package/features/steps/components/notify/operations/send.js +1 -1
  250. package/features/steps/components/octets.tester/operations/authority.js +1 -1
  251. package/features/steps/components/octets.tester/operations/bar.js +1 -1
  252. package/features/steps/components/octets.tester/operations/baz.js +1 -1
  253. package/features/steps/components/octets.tester/operations/concat.js +1 -1
  254. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  255. package/features/steps/components/octets.tester/operations/err.js +1 -1
  256. package/features/steps/components/octets.tester/operations/foo.js +1 -1
  257. package/features/steps/components/octets.tester/operations/id.js +1 -1
  258. package/features/steps/components/octets.tester/operations/identity.js +1 -1
  259. package/features/steps/components/octets.tester/operations/redirect.js +6 -4
  260. package/features/steps/components/octets.tester/operations/yex.js +1 -1
  261. package/features/steps/components/octets.tester/operations/yield.js +1 -1
  262. package/features/steps/components/orders/manifest.toa.yaml +10 -12
  263. package/features/steps/components/orders/operations/create.js +4 -2
  264. package/features/steps/components/pots/manifest.toa.yaml +15 -20
  265. package/features/steps/components/pots/migrations/0002-indexes.yaml +4 -0
  266. package/features/steps/components/pricing/operations/quote.js +1 -1
  267. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  268. package/features/steps/components/sequences/operations/numbers.js +1 -1
  269. package/features/steps/components/sequences/operations/tokens.js +3 -3
  270. package/features/steps/components/users/manifest.toa.yaml +3 -5
  271. package/features/steps/components/users/operations/create.js +1 -1
  272. package/features/steps/components/users.properties/manifest.toa.yaml +5 -6
  273. package/features/steps/map.ts +2 -2
  274. package/features/timestamps.feature +1 -1
  275. package/package.json +7 -7
  276. package/readme.md +11 -11
  277. package/schemas/annotation.cos.yaml +1 -3
  278. package/schemas/method.cos.yaml +2 -0
  279. package/source/Branch.test.ts +2 -2
  280. package/source/Branch.ts +3 -5
  281. package/source/Composition.ts +5 -5
  282. package/source/Directive.test.ts +38 -20
  283. package/source/Directive.ts +61 -47
  284. package/source/Endpoint.test.ts +1 -1
  285. package/source/Endpoint.ts +27 -92
  286. package/source/Factory.ts +26 -12
  287. package/source/Gateway.ts +87 -76
  288. package/source/HTTP/Context.ts +23 -30
  289. package/source/HTTP/Probe.ts +7 -9
  290. package/source/HTTP/Server.ts +88 -69
  291. package/source/HTTP/Timing.ts +6 -21
  292. package/source/HTTP/address.test.ts +8 -2
  293. package/source/HTTP/address.ts +2 -3
  294. package/source/HTTP/exceptions.ts +20 -18
  295. package/source/HTTP/formats/form.ts +1 -1
  296. package/source/HTTP/formats/json.ts +2 -2
  297. package/source/HTTP/formats/msgpack.ts +3 -4
  298. package/source/HTTP/formats/text.ts +2 -2
  299. package/source/HTTP/formats/yaml.test.ts +4 -1
  300. package/source/HTTP/formats/yaml.ts +14 -11
  301. package/source/HTTP/messages.test.ts +38 -28
  302. package/source/HTTP/messages.ts +44 -98
  303. package/source/Interception.ts +3 -4
  304. package/source/Introspection.ts +26 -14
  305. package/source/MCP/Server.ts +114 -54
  306. package/source/MCP/discover.ts +6 -7
  307. package/source/MCP/errors.ts +7 -8
  308. package/source/MCP/schema.test.ts +9 -3
  309. package/source/MCP/schema.ts +12 -16
  310. package/source/MCP/tools.ts +33 -28
  311. package/source/Mapping.ts +25 -27
  312. package/source/Query.ts +58 -44
  313. package/source/RPC/Context.ts +8 -11
  314. package/source/RPC/Dispatcher.ts +46 -26
  315. package/source/RPC/errors.test.ts +41 -16
  316. package/source/RPC/errors.ts +9 -10
  317. package/source/RPC/names.test.ts +35 -16
  318. package/source/RPC/names.ts +22 -29
  319. package/source/RTD/Directives.ts +21 -10
  320. package/source/RTD/Endpoint.ts +4 -1
  321. package/source/RTD/Method.ts +8 -6
  322. package/source/RTD/Node.ts +32 -34
  323. package/source/RTD/Route.ts +18 -21
  324. package/source/RTD/Tree.ts +18 -18
  325. package/source/RTD/factory.ts +13 -16
  326. package/source/RTD/segment.ts +12 -10
  327. package/source/RTD/syntax/parse.test.ts +12 -6
  328. package/source/RTD/syntax/parse.ts +30 -26
  329. package/source/RTD/syntax/types.ts +17 -1
  330. package/source/RTD/walk.test.ts +59 -22
  331. package/source/Remotes.test.ts +25 -4
  332. package/source/Remotes.ts +9 -4
  333. package/source/Tenant.ts +12 -12
  334. package/source/deployment.ts +20 -20
  335. package/source/directives/auth/Anonymous.test.ts +8 -2
  336. package/source/directives/auth/Anonymous.ts +5 -8
  337. package/source/directives/auth/Anyone.ts +3 -3
  338. package/source/directives/auth/Assert.ts +10 -10
  339. package/source/directives/auth/Authorization.ts +83 -69
  340. package/source/directives/auth/Delegate.test.ts +2 -2
  341. package/source/directives/auth/Delegate.ts +8 -10
  342. package/source/directives/auth/Echo.ts +5 -8
  343. package/source/directives/auth/Federation.ts +30 -21
  344. package/source/directives/auth/Id.ts +7 -4
  345. package/source/directives/auth/Incept.ts +32 -26
  346. package/source/directives/auth/Input.ts +36 -20
  347. package/source/directives/auth/Role.test.ts +49 -23
  348. package/source/directives/auth/Role.ts +29 -22
  349. package/source/directives/auth/Rule.ts +13 -8
  350. package/source/directives/auth/Scheme.ts +7 -7
  351. package/source/directives/auth/create.ts +1 -1
  352. package/source/directives/auth/schemes.ts +1 -1
  353. package/source/directives/auth/split.ts +2 -3
  354. package/source/directives/auth/types.ts +5 -2
  355. package/source/directives/cache/Cache.ts +44 -9
  356. package/source/directives/cache/Control.ts +25 -26
  357. package/source/directives/cache/Exact.ts +1 -1
  358. package/source/directives/cache/etag.ts +38 -0
  359. package/source/directives/cors/CORS.ts +9 -7
  360. package/source/directives/dev/Development.ts +3 -4
  361. package/source/directives/dev/Faulty.ts +11 -6
  362. package/source/directives/dev/Sleep.ts +5 -7
  363. package/source/directives/dev/Stub.ts +2 -2
  364. package/source/directives/dev/Throw.ts +2 -2
  365. package/source/directives/flow/Compose.ts +26 -20
  366. package/source/directives/flow/Fetch.ts +15 -15
  367. package/source/directives/flow/Flow.ts +9 -8
  368. package/source/directives/index.ts +11 -2
  369. package/source/directives/io/IO.ts +29 -20
  370. package/source/directives/io/Input.ts +9 -12
  371. package/source/directives/io/Output.ts +20 -23
  372. package/source/directives/io/Status.test.ts +12 -8
  373. package/source/directives/io/Status.ts +9 -8
  374. package/source/directives/io/Throttle.ts +6 -7
  375. package/source/directives/io/lib/throttle/Configuration.test.ts +32 -23
  376. package/source/directives/io/lib/throttle/Configuration.ts +14 -9
  377. package/source/directives/io/lib/throttle/Keys.ts +15 -10
  378. package/source/directives/io/lib/throttle/Quotas.test.ts +33 -17
  379. package/source/directives/io/lib/throttle/Quotas.ts +20 -26
  380. package/source/directives/io/lib/throttle/Sync.test.ts +14 -10
  381. package/source/directives/io/lib/throttle/Sync.ts +9 -12
  382. package/source/directives/io/lib/throttle/Warning.ts +3 -4
  383. package/source/directives/io/lib/throttle/components/IP.ts +4 -5
  384. package/source/directives/io/lib/throttle/components/Identity.ts +1 -1
  385. package/source/directives/io/lib/throttle/components/Path.ts +1 -1
  386. package/source/directives/io/lib/throttle/components/Route.ts +2 -2
  387. package/source/directives/io/lib/throttle/components/Segment.ts +2 -2
  388. package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
  389. package/source/directives/io/schemas.test.ts +12 -6
  390. package/source/directives/map/Authority.ts +2 -2
  391. package/source/directives/map/Buffer.ts +2 -2
  392. package/source/directives/map/Claims.ts +25 -20
  393. package/source/directives/map/Headers.ts +17 -13
  394. package/source/directives/map/Language.ts +8 -5
  395. package/source/directives/map/Languages.ts +9 -3
  396. package/source/directives/map/Map.ts +25 -12
  397. package/source/directives/map/Mapping.ts +9 -6
  398. package/source/directives/map/Properties.ts +1 -1
  399. package/source/directives/map/Segments.ts +22 -15
  400. package/source/directives/mcp/MCP.ts +9 -7
  401. package/source/directives/mcp/Tool.test.ts +21 -9
  402. package/source/directives/mcp/Tool.ts +23 -11
  403. package/source/directives/oauth/Discovery.ts +7 -11
  404. package/source/directives/oauth/documents.ts +11 -14
  405. package/source/directives/octets/Context.ts +6 -3
  406. package/source/directives/octets/Delete.ts +33 -25
  407. package/source/directives/octets/Directive.ts +5 -1
  408. package/source/directives/octets/Get.ts +13 -21
  409. package/source/directives/octets/Octets.ts +20 -15
  410. package/source/directives/octets/Put.ts +62 -27
  411. package/source/directives/octets/Workflow.ts +18 -12
  412. package/source/directives/octets/bytes.ts +1 -1
  413. package/source/directives/octets/schemas.test.ts +8 -14
  414. package/source/directives/octets/workflows/Execution.ts +19 -21
  415. package/source/directives/octets/workflows/Workflow.ts +10 -7
  416. package/source/directives/require/Headers.ts +3 -4
  417. package/source/directives/require/Require.ts +3 -4
  418. package/source/exceptions.ts +19 -12
  419. package/source/index.ts +1 -1
  420. package/source/manifest.test.ts +4 -1
  421. package/source/manifest.ts +19 -13
  422. package/source/octets.d.ts +1 -1
  423. package/source/root.ts +3 -2
  424. package/source/schemas.test.ts +17 -3
  425. package/transpiled/Branch.js.map +1 -1
  426. package/transpiled/Composition.js.map +1 -1
  427. package/transpiled/Directive.js +6 -2
  428. package/transpiled/Directive.js.map +1 -1
  429. package/transpiled/Endpoint.d.ts +0 -2
  430. package/transpiled/Endpoint.js +11 -52
  431. package/transpiled/Endpoint.js.map +1 -1
  432. package/transpiled/Factory.d.ts +2 -1
  433. package/transpiled/Factory.js +1 -0
  434. package/transpiled/Factory.js.map +1 -1
  435. package/transpiled/Gateway.d.ts +2 -1
  436. package/transpiled/Gateway.js +24 -15
  437. package/transpiled/Gateway.js.map +1 -1
  438. package/transpiled/HTTP/Context.d.ts +0 -3
  439. package/transpiled/HTTP/Context.js +7 -9
  440. package/transpiled/HTTP/Context.js.map +1 -1
  441. package/transpiled/HTTP/Probe.js.map +1 -1
  442. package/transpiled/HTTP/Server.js +19 -4
  443. package/transpiled/HTTP/Server.js.map +1 -1
  444. package/transpiled/HTTP/Timing.d.ts +1 -2
  445. package/transpiled/HTTP/Timing.js +2 -10
  446. package/transpiled/HTTP/Timing.js.map +1 -1
  447. package/transpiled/HTTP/address.js.map +1 -1
  448. package/transpiled/HTTP/exceptions.js.map +1 -1
  449. package/transpiled/HTTP/formats/form.js.map +1 -1
  450. package/transpiled/HTTP/formats/json.js.map +1 -1
  451. package/transpiled/HTTP/formats/msgpack.js.map +1 -1
  452. package/transpiled/HTTP/formats/text.js.map +1 -1
  453. package/transpiled/HTTP/formats/yaml.js +4 -1
  454. package/transpiled/HTTP/formats/yaml.js.map +1 -1
  455. package/transpiled/HTTP/messages.d.ts +3 -2
  456. package/transpiled/HTTP/messages.js +1 -43
  457. package/transpiled/HTTP/messages.js.map +1 -1
  458. package/transpiled/Interception.js.map +1 -1
  459. package/transpiled/Introspection.js +13 -2
  460. package/transpiled/Introspection.js.map +1 -1
  461. package/transpiled/MCP/Server.js +15 -4
  462. package/transpiled/MCP/Server.js.map +1 -1
  463. package/transpiled/MCP/discover.js.map +1 -1
  464. package/transpiled/MCP/errors.js.map +1 -1
  465. package/transpiled/MCP/schema.js +1 -1
  466. package/transpiled/MCP/schema.js.map +1 -1
  467. package/transpiled/MCP/tools.js +10 -7
  468. package/transpiled/MCP/tools.js.map +1 -1
  469. package/transpiled/Mapping.d.ts +2 -2
  470. package/transpiled/Mapping.js +3 -5
  471. package/transpiled/Mapping.js.map +1 -1
  472. package/transpiled/Query.d.ts +6 -2
  473. package/transpiled/Query.js +23 -8
  474. package/transpiled/Query.js.map +1 -1
  475. package/transpiled/RPC/Context.js +0 -7
  476. package/transpiled/RPC/Context.js.map +1 -1
  477. package/transpiled/RPC/Dispatcher.js +4 -1
  478. package/transpiled/RPC/Dispatcher.js.map +1 -1
  479. package/transpiled/RPC/errors.js.map +1 -1
  480. package/transpiled/RPC/names.js.map +1 -1
  481. package/transpiled/RTD/Directives.d.ts +1 -1
  482. package/transpiled/RTD/Method.js +1 -3
  483. package/transpiled/RTD/Method.js.map +1 -1
  484. package/transpiled/RTD/Node.js +5 -4
  485. package/transpiled/RTD/Node.js.map +1 -1
  486. package/transpiled/RTD/Route.js +4 -1
  487. package/transpiled/RTD/Route.js.map +1 -1
  488. package/transpiled/RTD/Tree.js +1 -1
  489. package/transpiled/RTD/Tree.js.map +1 -1
  490. package/transpiled/RTD/factory.js.map +1 -1
  491. package/transpiled/RTD/segment.js.map +1 -1
  492. package/transpiled/RTD/syntax/parse.js.map +1 -1
  493. package/transpiled/RTD/syntax/types.d.ts +6 -0
  494. package/transpiled/RTD/syntax/types.js +10 -1
  495. package/transpiled/RTD/syntax/types.js.map +1 -1
  496. package/transpiled/Remotes.js.map +1 -1
  497. package/transpiled/Tenant.d.ts +1 -1
  498. package/transpiled/Tenant.js.map +1 -1
  499. package/transpiled/deployment.d.ts +3 -0
  500. package/transpiled/deployment.js +6 -1
  501. package/transpiled/deployment.js.map +1 -1
  502. package/transpiled/directives/auth/Anonymous.js +1 -3
  503. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  504. package/transpiled/directives/auth/Anyone.js.map +1 -1
  505. package/transpiled/directives/auth/Assert.js.map +1 -1
  506. package/transpiled/directives/auth/Authorization.js +7 -3
  507. package/transpiled/directives/auth/Authorization.js.map +1 -1
  508. package/transpiled/directives/auth/Delegate.js.map +1 -1
  509. package/transpiled/directives/auth/Echo.js +1 -3
  510. package/transpiled/directives/auth/Echo.js.map +1 -1
  511. package/transpiled/directives/auth/Federation.js +3 -7
  512. package/transpiled/directives/auth/Federation.js.map +1 -1
  513. package/transpiled/directives/auth/Id.js.map +1 -1
  514. package/transpiled/directives/auth/Incept.js +1 -1
  515. package/transpiled/directives/auth/Incept.js.map +1 -1
  516. package/transpiled/directives/auth/Input.js.map +1 -1
  517. package/transpiled/directives/auth/Role.js.map +1 -1
  518. package/transpiled/directives/auth/Rule.js.map +1 -1
  519. package/transpiled/directives/auth/Scheme.js +1 -2
  520. package/transpiled/directives/auth/Scheme.js.map +1 -1
  521. package/transpiled/directives/auth/create.js.map +1 -1
  522. package/transpiled/directives/auth/schemes.js.map +1 -1
  523. package/transpiled/directives/auth/split.js.map +1 -1
  524. package/transpiled/directives/auth/types.d.ts +3 -1
  525. package/transpiled/directives/cache/Cache.js +28 -2
  526. package/transpiled/directives/cache/Cache.js.map +1 -1
  527. package/transpiled/directives/cache/Control.js +1 -1
  528. package/transpiled/directives/cache/Control.js.map +1 -1
  529. package/transpiled/directives/cache/etag.d.ts +10 -0
  530. package/transpiled/directives/cache/etag.js +30 -0
  531. package/transpiled/directives/cache/etag.js.map +1 -0
  532. package/transpiled/directives/cors/CORS.js.map +1 -1
  533. package/transpiled/directives/dev/Development.js.map +1 -1
  534. package/transpiled/directives/dev/Faulty.js.map +1 -1
  535. package/transpiled/directives/dev/Sleep.js.map +1 -1
  536. package/transpiled/directives/dev/Stub.js.map +1 -1
  537. package/transpiled/directives/dev/Throw.js.map +1 -1
  538. package/transpiled/directives/flow/Compose.js +7 -3
  539. package/transpiled/directives/flow/Compose.js.map +1 -1
  540. package/transpiled/directives/flow/Fetch.js.map +1 -1
  541. package/transpiled/directives/flow/Flow.js.map +1 -1
  542. package/transpiled/directives/index.js +11 -1
  543. package/transpiled/directives/index.js.map +1 -1
  544. package/transpiled/directives/io/IO.d.ts +1 -1
  545. package/transpiled/directives/io/IO.js.map +1 -1
  546. package/transpiled/directives/io/Input.js +1 -1
  547. package/transpiled/directives/io/Input.js.map +1 -1
  548. package/transpiled/directives/io/Output.js +3 -3
  549. package/transpiled/directives/io/Output.js.map +1 -1
  550. package/transpiled/directives/io/Status.js.map +1 -1
  551. package/transpiled/directives/io/Throttle.js +1 -1
  552. package/transpiled/directives/io/Throttle.js.map +1 -1
  553. package/transpiled/directives/io/lib/throttle/Configuration.js +8 -2
  554. package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
  555. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
  556. package/transpiled/directives/io/lib/throttle/Quotas.js +4 -3
  557. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  558. package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
  559. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
  560. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -1
  561. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
  562. package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
  563. package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
  564. package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
  565. package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
  566. package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
  567. package/transpiled/directives/map/Authority.js.map +1 -1
  568. package/transpiled/directives/map/Buffer.js.map +1 -1
  569. package/transpiled/directives/map/Claims.js.map +1 -1
  570. package/transpiled/directives/map/Headers.js.map +1 -1
  571. package/transpiled/directives/map/Language.js.map +1 -1
  572. package/transpiled/directives/map/Languages.js.map +1 -1
  573. package/transpiled/directives/map/Map.js.map +1 -1
  574. package/transpiled/directives/map/Mapping.js.map +1 -1
  575. package/transpiled/directives/map/Properties.js.map +1 -1
  576. package/transpiled/directives/map/Segments.js.map +1 -1
  577. package/transpiled/directives/mcp/MCP.js +1 -1
  578. package/transpiled/directives/mcp/MCP.js.map +1 -1
  579. package/transpiled/directives/mcp/Tool.js +3 -1
  580. package/transpiled/directives/mcp/Tool.js.map +1 -1
  581. package/transpiled/directives/oauth/Discovery.js.map +1 -1
  582. package/transpiled/directives/oauth/documents.js.map +1 -1
  583. package/transpiled/directives/octets/Context.js +1 -1
  584. package/transpiled/directives/octets/Context.js.map +1 -1
  585. package/transpiled/directives/octets/Delete.js.map +1 -1
  586. package/transpiled/directives/octets/Directive.js.map +1 -1
  587. package/transpiled/directives/octets/Get.js.map +1 -1
  588. package/transpiled/directives/octets/Octets.js +1 -1
  589. package/transpiled/directives/octets/Octets.js.map +1 -1
  590. package/transpiled/directives/octets/Put.js.map +1 -1
  591. package/transpiled/directives/octets/Workflow.js.map +1 -1
  592. package/transpiled/directives/octets/bytes.js.map +1 -1
  593. package/transpiled/directives/octets/workflows/Execution.js +1 -2
  594. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  595. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  596. package/transpiled/directives/require/Headers.js.map +1 -1
  597. package/transpiled/directives/require/Require.js.map +1 -1
  598. package/transpiled/exceptions.js.map +1 -1
  599. package/transpiled/index.d.ts +1 -1
  600. package/transpiled/index.js +1 -1
  601. package/transpiled/index.js.map +1 -1
  602. package/transpiled/manifest.js +5 -1
  603. package/transpiled/manifest.js.map +1 -1
  604. package/transpiled/root.js.map +1 -1
  605. package/tsconfig.tsbuildinfo +1 -1
  606. package/CHANGELOG.md +0 -552
  607. package/source/redact.test.ts +0 -27
  608. package/source/redact.ts +0 -21
  609. package/transpiled/redact.d.ts +0 -5
  610. package/transpiled/redact.js +0 -17
  611. package/transpiled/redact.js.map +0 -1
@@ -13,14 +13,14 @@ export class Identity {
13
13
  private readonly http: http.Agent
14
14
  private readonly variables: Captures
15
15
 
16
- public constructor (gateway: Gateway, parameters: Parameters, captures: Captures) {
16
+ public constructor(gateway: Gateway, parameters: Parameters, captures: Captures) {
17
17
  this.gateway = gateway
18
18
  this.http = new http.Agent(parameters.origin, captures)
19
19
  this.variables = captures
20
20
  }
21
21
 
22
22
  @given('transient identity {word}')
23
- public async transient (as: string): Promise<Principal> {
23
+ public async transient(as: string): Promise<Principal> {
24
24
  await this.gateway.start()
25
25
 
26
26
  await this.http.request(`
@@ -43,7 +43,7 @@ export class Identity {
43
43
  }
44
44
 
45
45
  @given('transient identity')
46
- public async anonymous (): Promise<Principal> {
46
+ public async anonymous(): Promise<Principal> {
47
47
  return await this.transient('identity')
48
48
  }
49
49
  }
@@ -12,12 +12,12 @@ export class OTP {
12
12
  private captures: Captures
13
13
  private otp: Remote | null = null
14
14
 
15
- public constructor (captures: Captures) {
15
+ public constructor(captures: Captures) {
16
16
  this.captures = captures
17
17
  }
18
18
 
19
19
  @given('OTP for `{word}` in `{word}` authority is issued')
20
- public async issue (username: string, authority: string): Promise<void> {
20
+ public async issue(username: string, authority: string): Promise<void> {
21
21
  this.otp ??= await this.connect()
22
22
 
23
23
  const reply = await this.otp.invoke('issue', {
@@ -34,7 +34,7 @@ export class OTP {
34
34
  this.captures.set(`${username}.otp`, credentials)
35
35
  }
36
36
 
37
- private async connect (): Promise<Remote> {
37
+ private async connect(): Promise<Remote> {
38
38
  const locator = new Locator('otp', 'identity')
39
39
 
40
40
  return await boot.remote(locator)
@@ -4,11 +4,18 @@ import { setDefaultTimeout } from '@cucumber/cucumber'
4
4
 
5
5
  dotenv.config({ path: join(import.meta.dirname, '.env') })
6
6
 
7
+ /**
8
+ * Not `PORT` and `PROBE`, which a deployment serves the gateway on: an application built on
9
+ * Toa is served on this machine too, and its own gateway holds those. See CONTRIBUTING.md.
10
+ */
11
+ export const PORT = 31000
12
+ export const PROBE = 31004
13
+
7
14
  export class Parameters {
8
15
  public readonly origin: string
9
16
 
10
- public constructor () {
11
- this.origin = 'http://127.0.0.1:8000'
17
+ public constructor() {
18
+ this.origin = `http://127.0.0.1:${PORT}`
12
19
  }
13
20
  }
14
21
 
@@ -29,7 +36,7 @@ process.env.TOA_TELEMETRY_READY ??= JSON.stringify(false)
29
36
  process.env.TOA_TELEMETRY_TRACES ??= JSON.stringify({
30
37
  exporters: {
31
38
  console: null,
32
- otlp: { endpoint: 'http://localhost:4318' }
39
+ otlp: { endpoint: 'http://localhost:31061' }
33
40
  }
34
41
  })
35
42
 
@@ -49,13 +56,16 @@ const CLOUDINARY = {
49
56
  transformations: [
50
57
  {
51
58
  extension: 'icon',
52
- transformation: [{
53
- width: 48,
54
- height: 48,
55
- crop: 'fill'
56
- }, {
57
- border: '10px_solid_white'
58
- }],
59
+ transformation: [
60
+ {
61
+ width: 48,
62
+ height: 48,
63
+ crop: 'fill'
64
+ },
65
+ {
66
+ border: '10px_solid_white'
67
+ }
68
+ ],
59
69
  optional: true
60
70
  },
61
71
  {
@@ -1,7 +1,8 @@
1
1
  import assert from 'node:assert'
2
2
  import { Agent, request } from 'undici'
3
3
  import tsflow from 'cucumber-tsflow'
4
- import { PATH, PROBE } from '../../source/HTTP/index.js'
4
+ import { PATH } from '../../source/HTTP/index.js'
5
+ import { PROBE } from './Parameters.js'
5
6
 
6
7
  const { after, binding, then, when } = tsflow
7
8
 
@@ -12,8 +13,10 @@ export class Probe {
12
13
  private headers: Record<string, string> = {}
13
14
 
14
15
  @when('the ready probe is requested')
15
- public async request (): Promise<void> {
16
- const response = await request(`http://127.0.0.1:${PROBE}${PATH}`, { dispatcher: this.agent })
16
+ public async request(): Promise<void> {
17
+ const response = await request(`http://127.0.0.1:${PROBE}${PATH}`, {
18
+ dispatcher: this.agent
19
+ })
17
20
 
18
21
  this.status = response.statusCode
19
22
  this.headers = response.headers as Record<string, string>
@@ -22,15 +25,14 @@ export class Probe {
22
25
  }
23
26
 
24
27
  @then('the ready probe answers {int}')
25
- public answers (status: number): void {
28
+ public answers(status: number): void {
26
29
  assert.equal(this.status, status)
27
30
 
28
- if (status === 200)
29
- assert.equal(this.headers['cache-control'], 'no-store')
31
+ if (status === 200) assert.equal(this.headers['cache-control'], 'no-store')
30
32
  }
31
33
 
32
34
  @after()
33
- public async close (): Promise<void> {
35
+ public async close(): Promise<void> {
34
36
  await this.agent.close()
35
37
  }
36
38
  }
@@ -4,7 +4,7 @@ import tsflow from 'cucumber-tsflow'
4
4
 
5
5
  import { Factory } from '@toa.io/extensions.realtime'
6
6
  import * as boot from '@toa.io/boot'
7
- import { match } from '@toa.io/generic'
7
+ import { match, timeout } from '@toa.io/generic'
8
8
  import { load as parse } from 'js-yaml'
9
9
  import { Agent } from '@toa.io/agent'
10
10
  import { Parameters } from './Parameters.js'
@@ -23,13 +23,13 @@ export class Realtime {
23
23
  private log: Record<string, unknown[]> = {}
24
24
  private aborted = false
25
25
 
26
- public constructor (gateway: Gateway, parameters: Parameters, captures: Captures) {
26
+ public constructor(gateway: Gateway, parameters: Parameters, captures: Captures) {
27
27
  this.gateway = gateway
28
28
  this.agent = new Agent(parameters.origin, captures)
29
29
  }
30
30
 
31
31
  @given('the Realtime is running with the following annotation:')
32
- public async start (yaml: string): Promise<void> {
32
+ public async start(yaml: string): Promise<void> {
33
33
  await Realtime.stop()
34
34
 
35
35
  const annotation = parse(yaml) as Record<string, string>
@@ -50,25 +50,20 @@ export class Realtime {
50
50
  }
51
51
 
52
52
  @given('the identity {word} is consuming realtime events')
53
- public async connect (name: string): Promise<void> {
53
+ public async connect(name: string): Promise<void> {
54
54
  await this.gateway.start()
55
55
 
56
56
  const id = await this.createIdentity(name)
57
57
 
58
- const parts = await this.agent.parts(`
59
- GET /realtime/streams/\${{ ${name}.id }}/ HTTP/1.1
60
- authorization: Token \${{ ${name}.token }}
61
- accept: application/json
62
- `) as AsyncIterable<Uint8Array>
58
+ const parts = await this.open(name)
63
59
 
64
60
  void this.consume(id, parts).catch((e) => {
65
- if (!this.aborted)
66
- console.debug('Consumption interrupted', e)
61
+ if (!this.aborted) console.debug('Consumption interrupted', e)
67
62
  })
68
63
  }
69
64
 
70
65
  @then('the following event `{word}` is received by {word}:')
71
- public async received (label: string, name: string, yaml: string): Promise<void> {
66
+ public async received(label: string, name: string, yaml: string): Promise<void> {
72
67
  const id = this.agent.captures.get(`${name}.id`)
73
68
  const tag = `${id}:${label}`
74
69
  const expected = parse(yaml)
@@ -76,8 +71,7 @@ export class Realtime {
76
71
  if (this.log[tag] !== undefined)
77
72
  for (const data of this.log[tag])
78
73
  // eslint-disable-next-line max-depth
79
- if (match(data, expected))
80
- return
74
+ if (match(data, expected)) return
81
75
 
82
76
  const [event] = await once(this.events, tag)
83
77
 
@@ -85,7 +79,7 @@ export class Realtime {
85
79
  }
86
80
 
87
81
  @after()
88
- public abort (): void {
82
+ public abort(): void {
89
83
  this.aborted = true
90
84
  this.agent.abort()
91
85
  this.log = {}
@@ -93,9 +87,8 @@ export class Realtime {
93
87
  }
94
88
 
95
89
  @afterAll()
96
- public static async stop (): Promise<void> {
97
- if (this.instance === null)
98
- return
90
+ public static async stop(): Promise<void> {
91
+ if (this.instance === null) return
99
92
 
100
93
  await this.instance.disconnect()
101
94
 
@@ -103,7 +96,30 @@ export class Realtime {
103
96
  process.env.TOA_REALTIME = undefined
104
97
  }
105
98
 
106
- private async createIdentity (name: string): Promise<string> {
99
+ /**
100
+ * The stream is asked for until the gateway has the route, not once. The realtime service
101
+ * is started by the step before this one and its `connect` is not awaited there — so the
102
+ * branch that carries `/realtime/streams` is still being announced while this runs, and
103
+ * asking too early reads the 404 that precedes the route.
104
+ */
105
+ private async open(name: string): Promise<AsyncIterable<Uint8Array>> {
106
+ const deadline = Date.now() + DISCOVERY
107
+
108
+ for (;;)
109
+ try {
110
+ return (await this.agent.parts(`
111
+ GET /realtime/streams/\${{ ${name}.id }}/ HTTP/1.1
112
+ authorization: Token \${{ ${name}.token }}
113
+ accept: application/json
114
+ `)) as AsyncIterable<Uint8Array>
115
+ } catch (error) {
116
+ if (Date.now() > deadline) throw error
117
+
118
+ await timeout(POLL)
119
+ }
120
+ }
121
+
122
+ private async createIdentity(name: string): Promise<string> {
107
123
  const password = Math.random().toString(36).slice(2)
108
124
  const username = name + Math.random().toString(36).slice(2)
109
125
 
@@ -138,13 +154,12 @@ export class Realtime {
138
154
  return this.agent.captures.get(`${name}.id`) as string
139
155
  }
140
156
 
141
- private async consume (id: string, parts: any): Promise<void> {
157
+ private async consume(id: string, parts: any): Promise<void> {
142
158
  for await (const part of parts) {
143
159
  const text = Buffer.from(part.body).toString('utf8')
144
160
  const event = JSON.parse(text)
145
161
 
146
- if (typeof event === 'string')
147
- continue
162
+ if (typeof event === 'string') continue
148
163
 
149
164
  const tag = `${id}:${event.event}`
150
165
 
@@ -155,3 +170,6 @@ export class Realtime {
155
170
  }
156
171
  }
157
172
 
173
+ /** How long the route is waited for, and how often it is asked for. */
174
+ const DISCOVERY = 5000
175
+ const POLL = 50
@@ -7,12 +7,16 @@ import { overwrite } from '@toa.io/generic'
7
7
  export class Workspace {
8
8
  private root: string = devNull
9
9
 
10
- public static exists (_0: unknown, _1: unknown, descriptor: PropertyDescriptor): PropertyDescriptor {
10
+ public static exists(
11
+ _0: unknown,
12
+ _1: unknown,
13
+ descriptor: PropertyDescriptor
14
+ ): PropertyDescriptor {
11
15
  const method = descriptor.value
12
16
 
13
17
  descriptor.value = async function (this: Workspace, ...args: any[]): Promise<any> {
14
- if (this.root === devNull) this.root =
15
- await mkdtemp(join(tmpdir(), Math.random().toString(36).slice(2)))
18
+ if (this.root === devNull)
19
+ this.root = await mkdtemp(join(tmpdir(), Math.random().toString(36).slice(2)))
16
20
 
17
21
  return method.apply(this, args)
18
22
  }
@@ -21,19 +25,18 @@ export class Workspace {
21
25
  }
22
26
 
23
27
  @Workspace.exists
24
- public async addComponent (name: string, patch?: object): Promise<string> {
28
+ public async addComponent(name: string, patch?: object): Promise<string> {
25
29
  const source = join(import.meta.dirname, 'components', name)
26
30
  const target = join(this.root, name)
27
31
 
28
32
  await cp(source, target, { force: true, recursive: true })
29
33
 
30
- if (patch !== undefined)
31
- await this.patchManifest(target, patch)
34
+ if (patch !== undefined) await this.patchManifest(target, patch)
32
35
 
33
36
  return target
34
37
  }
35
38
 
36
- private async patchManifest (target: string, patch: object): Promise<void> {
39
+ private async patchManifest(target: string, patch: object): Promise<void> {
37
40
  const path = join(target, 'manifest.toa.yaml')
38
41
 
39
42
  const manifest = load(await readFile(path, 'utf8')) as object
@@ -1,4 +1,4 @@
1
- export async function effect (input) {
1
+ export async function effect(input) {
2
2
  await new Promise((resolve) => setTimeout(resolve, 500))
3
3
 
4
4
  return null
@@ -1,3 +1,3 @@
1
- export function effect (input) {
1
+ export function effect(input) {
2
2
  return `Hello ${input.name}`
3
3
  }
@@ -1,3 +1,3 @@
1
- export function computation (input) {
1
+ export function computation(input) {
2
2
  return `Hello ${input.name}`
3
3
  }
@@ -1,3 +1,3 @@
1
- export function computation (input) {
1
+ export function computation(input) {
2
2
  return input
3
3
  }
@@ -1,4 +1,4 @@
1
- export function computation () {
1
+ export function computation() {
2
2
  const err = { code: 'CODE', message: 'message' }
3
3
 
4
4
  Object.setPrototypeOf(err, Error.prototype)
@@ -1,3 +1,3 @@
1
- export function computation (input) {
1
+ export function computation(input) {
2
2
  return input
3
3
  }
@@ -1,3 +1,3 @@
1
- export function computation (input) {
1
+ export function computation(input) {
2
2
  return input
3
3
  }
@@ -1,3 +1,3 @@
1
- export function computation () {
1
+ export function computation() {
2
2
  return 'pong'
3
3
  }
@@ -1,3 +1,3 @@
1
- export function computation (input) {
1
+ export function computation(input) {
2
2
  return JSON.parse(input.buf)
3
3
  }
@@ -1,3 +1,3 @@
1
- export function computation () {
1
+ export function computation() {
2
2
  return 'Hello'
3
3
  }
@@ -1,4 +1,4 @@
1
- export async function effect (input) {
1
+ export async function effect(input) {
2
2
  await new Promise((resolve) => setTimeout(resolve, 800))
3
3
 
4
4
  return null
@@ -1,3 +1,3 @@
1
- export function computation (input) {
1
+ export function computation(input) {
2
2
  return input.authority
3
3
  }
@@ -1,6 +1,6 @@
1
1
  import { setTimeout } from 'node:timers/promises'
2
2
 
3
- async function bar (input, context) {
3
+ async function bar(input, context) {
4
4
  await setTimeout(10)
5
5
 
6
6
  return { bar: 'baz' }
@@ -1,6 +1,6 @@
1
1
  import { setTimeout } from 'node:timers/promises'
2
2
 
3
- async function baz (input, context) {
3
+ async function baz(input, context) {
4
4
  await setTimeout(30)
5
5
 
6
6
  return input.steps ?? null
@@ -1,4 +1,4 @@
1
- function concat (input) {
1
+ function concat(input) {
2
2
  return input.parameters.a + ' ' + input.parameters.b
3
3
  }
4
4
 
@@ -1,4 +1,4 @@
1
- function echo (input) {
1
+ function echo(input) {
2
2
  return input
3
3
  }
4
4
 
@@ -1,6 +1,6 @@
1
1
  import { setTimeout } from 'node:timers/promises'
2
2
 
3
- async function err (_) {
3
+ async function err(_) {
4
4
  await setTimeout(20)
5
5
 
6
6
  const err = Object.create(Error.prototype)
@@ -1,4 +1,4 @@
1
- async function foo (input, context) {
1
+ async function foo(input, context) {
2
2
  return { foo: 'bar' }
3
3
  }
4
4
 
@@ -1,4 +1,4 @@
1
- function id (input) {
1
+ function id(input) {
2
2
  return input.entry.id
3
3
  }
4
4
 
@@ -1,4 +1,4 @@
1
- function identity (input) {
1
+ function identity(input) {
2
2
  return input.identity
3
3
  }
4
4
 
@@ -1,5 +1,7 @@
1
- function redirect (input) {
2
- return input.parameters.type in urls ? { url: urls[input.parameters.type] } : ERR_UNKNOWN
1
+ function redirect(input) {
2
+ return input.parameters.type in urls
3
+ ? { url: urls[input.parameters.type] }
4
+ : ERR_UNKNOWN
3
5
  }
4
6
 
5
7
  // an error a caller is meant to see carries a code, always
@@ -8,8 +10,8 @@ const ERR_UNKNOWN = new (class UnknownError extends Error {
8
10
  })()
9
11
 
10
12
  const urls = {
11
- 'rfc': 'https://www.rfc-editor.org/rfc/rfc9564.txt',
12
- 'img': 'https://www.w3.org/assets/logos/w3c/w3c-no-bars.svg'
13
+ rfc: 'https://www.rfc-editor.org/rfc/rfc9564.txt',
14
+ img: 'https://www.w3.org/assets/logos/w3c/w3c-no-bars.svg'
13
15
  }
14
16
 
15
17
  export { redirect as computation }
@@ -1,6 +1,6 @@
1
1
  import { setTimeout } from 'node:timers/promises'
2
2
 
3
- async function * effect (_) {
3
+ async function* effect(_) {
4
4
  await setTimeout(10)
5
5
  yield 'hello'
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { setTimeout } from 'node:timers/promises'
2
2
 
3
- async function * effect (_) {
3
+ async function* effect(_) {
4
4
  await setTimeout(10)
5
5
  yield 'hello'
6
6
 
@@ -1,18 +1,16 @@
1
1
  name: orders
2
2
 
3
3
  entity:
4
- schema:
5
- properties:
6
- title:
7
- type: string
8
- volume:
9
- type: number
10
- price:
11
- type: number
12
- type: object
13
- required:
14
- - title
15
- - volume
4
+ properties:
5
+ title:
6
+ type: string
7
+ volume:
8
+ type: number
9
+ price:
10
+ type: number
11
+ required:
12
+ - title
13
+ - volume
16
14
 
17
15
  operations:
18
16
  create:
@@ -1,5 +1,7 @@
1
- export async function transition (input, object, context) {
2
- const price = await context.remote.default.pricing.quote({ input: { volume: input.volume } })
1
+ export async function transition(input, object, context) {
2
+ const price = await context.remote.default.pricing.quote({
3
+ input: { volume: input.volume }
4
+ })
3
5
 
4
6
  return Object.assign(object, { ...input, price })
5
7
  }
@@ -1,26 +1,21 @@
1
1
  name: pots
2
2
 
3
3
  entity:
4
- schema:
5
- properties:
6
- title:
7
- type: string
8
- maxLength: 64
9
- volume:
10
- type: number
11
- exclusiveMinimum: 0
12
- maximum: 1000
13
- temperature:
14
- type: number
15
- exclusiveMinimum: 0
16
- maximum: 300
17
- type: object
18
- required:
19
- - title
20
- - volume
21
- index:
22
- text:
23
- title: text
4
+ properties:
5
+ title:
6
+ type: string
7
+ maxLength: 64
8
+ volume:
9
+ type: number
10
+ exclusiveMinimum: 0
11
+ maximum: 1000
12
+ temperature:
13
+ type: number
14
+ exclusiveMinimum: 0
15
+ maximum: 300
16
+ required:
17
+ - title
18
+ - volume
24
19
 
25
20
  operations:
26
21
  create:
@@ -0,0 +1,4 @@
1
+ - index:
2
+ name: index_text
3
+ keys:
4
+ title: text
@@ -1,3 +1,3 @@
1
- export async function computation (input) {
1
+ export async function computation(input) {
2
2
  return input.volume * 42
3
3
  }
@@ -4,7 +4,6 @@ operations:
4
4
  numbers:
5
5
  input:
6
6
  type: number
7
- default: 5
8
7
 
9
8
  exposition:
10
9
  /tokens:
@@ -1,4 +1,4 @@
1
- function * effect (amount) {
1
+ function* effect(amount) {
2
2
  for (let i = 0; i < amount; i++) yield i
3
3
  }
4
4
 
@@ -1,14 +1,14 @@
1
1
  import { randomBytes } from 'node:crypto'
2
2
 
3
- async function * computation () {
3
+ async function* computation() {
4
4
  while (true) {
5
5
  await timeout(Math.floor(Math.random() * 100) + 10)
6
6
  yield randomBytes(4).toString('hex')
7
7
  }
8
8
  }
9
9
 
10
- function timeout (ms) {
11
- return new Promise(resolve => setTimeout(resolve, ms))
10
+ function timeout(ms) {
11
+ return new Promise((resolve) => setTimeout(resolve, ms))
12
12
  }
13
13
 
14
14
  export { computation }
@@ -1,11 +1,9 @@
1
1
  name: users
2
2
 
3
3
  entity:
4
- schema:
5
- properties:
6
- name:
7
- type: string
8
- type: object
4
+ properties:
5
+ name:
6
+ type: string
9
7
 
10
8
  operations:
11
9
  transit: