@toa.io/extensions.exposition 1.0.0-alpha.292 → 1.0.0-alpha.294

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 (443) 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 +24 -13
  6. package/transpiled/Endpoint.js +3 -0
  7. package/transpiled/Endpoint.js.map +1 -1
  8. package/transpiled/Introspection.d.ts +6 -0
  9. package/transpiled/Introspection.js +1 -0
  10. package/transpiled/Introspection.js.map +1 -1
  11. package/transpiled/MCP/schema.js +2 -2
  12. package/transpiled/Query.d.ts +2 -12
  13. package/transpiled/Query.js +2 -12
  14. package/transpiled/Query.js.map +1 -1
  15. package/transpiled/RTD/Endpoint.d.ts +2 -3
  16. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  17. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  18. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  19. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  20. package/ui/dist/_app/immutable/chunks/{aLpTDmOc.js → CEe-wL8u.js} +1 -1
  21. package/ui/dist/_app/immutable/chunks/CV9soJ0B.js +6 -0
  22. package/ui/dist/_app/immutable/chunks/Im4_dtgC.js +1 -0
  23. package/ui/dist/_app/immutable/chunks/UkDaEvqJ.js +86 -0
  24. package/ui/dist/_app/immutable/entry/app.BnWlwGtD.js +2 -0
  25. package/ui/dist/_app/immutable/entry/start.Cm--Gj58.js +1 -0
  26. package/ui/dist/_app/immutable/nodes/0.z7Qg-vYh.js +1 -0
  27. package/ui/dist/_app/immutable/nodes/1.DtKiO-Oq.js +1 -0
  28. package/ui/dist/_app/immutable/nodes/2.B8zoEhQx.js +8 -0
  29. package/ui/dist/_app/immutable/nodes/3.eHKOcSZr.js +1 -0
  30. package/ui/dist/_app/immutable/nodes/4.CXvilufZ.js +1 -0
  31. package/ui/dist/_app/immutable/nodes/5.CTa_nmvd.js +1 -0
  32. package/ui/dist/_app/version.json +1 -1
  33. package/ui/dist/index.html +12 -12
  34. package/CHANGELOG.md +0 -42
  35. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  36. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  37. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  38. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  39. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  40. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  41. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  42. package/components/identity.credentials/source/list.test.ts +0 -70
  43. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  44. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  45. package/components/identity.federation/source/list.test.ts +0 -41
  46. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  47. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  48. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  49. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  50. package/components/identity.passkeys/source/errors.test.ts +0 -34
  51. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  52. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  53. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  54. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  55. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  56. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  57. package/components/identity.tokens/source/issue.test.ts +0 -73
  58. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  59. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  60. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  61. package/context.toa.yaml +0 -31
  62. package/cucumber.mjs +0 -7
  63. package/documentation/.assets/ia3-dark.jpg +0 -0
  64. package/documentation/.assets/ia3-light.jpg +0 -0
  65. package/documentation/.assets/overview-dark.jpg +0 -0
  66. package/documentation/.assets/overview-light.jpg +0 -0
  67. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  68. package/documentation/.assets/role-scopes-light.jpg +0 -0
  69. package/documentation/.assets/rtd-dark.jpg +0 -0
  70. package/documentation/.assets/rtd-light.jpg +0 -0
  71. package/documentation/access.md +0 -350
  72. package/documentation/authorities.md +0 -51
  73. package/documentation/cache.md +0 -72
  74. package/documentation/components.md +0 -472
  75. package/documentation/consent.md +0 -101
  76. package/documentation/credentials.md +0 -88
  77. package/documentation/dev.md +0 -30
  78. package/documentation/discovery.md +0 -81
  79. package/documentation/flow.md +0 -44
  80. package/documentation/help.md +0 -122
  81. package/documentation/identity.md +0 -304
  82. package/documentation/introspection.md +0 -123
  83. package/documentation/io.md +0 -167
  84. package/documentation/ip.md +0 -24
  85. package/documentation/map.md +0 -123
  86. package/documentation/mcp.md +0 -183
  87. package/documentation/notes/desync.jpg +0 -0
  88. package/documentation/notes/peers.md +0 -59
  89. package/documentation/notes/sse.md +0 -71
  90. package/documentation/notes/throttling.md +0 -122
  91. package/documentation/oauth.md +0 -180
  92. package/documentation/octets.md +0 -334
  93. package/documentation/passkeys.md +0 -11
  94. package/documentation/protocol.md +0 -120
  95. package/documentation/query.md +0 -324
  96. package/documentation/require.md +0 -15
  97. package/documentation/rpc.md +0 -154
  98. package/documentation/tracing.md +0 -70
  99. package/documentation/tree.md +0 -199
  100. package/features/access.feature +0 -596
  101. package/features/annotation.feature +0 -32
  102. package/features/auth.assert.feature +0 -55
  103. package/features/auth.bearer.feature +0 -120
  104. package/features/auth.claims.feature +0 -171
  105. package/features/auth.incept.feature +0 -166
  106. package/features/auth.input.feature +0 -59
  107. package/features/authorities.basic.feature +0 -141
  108. package/features/authorities.feature +0 -71
  109. package/features/authorities.federation.feature +0 -100
  110. package/features/authorities.tokens.feature +0 -117
  111. package/features/body.feature +0 -76
  112. package/features/cache.feature +0 -368
  113. package/features/configuration.feature +0 -206
  114. package/features/cors.feature +0 -127
  115. package/features/credentials.feature +0 -106
  116. package/features/debug.feature +0 -34
  117. package/features/dev.feature +0 -90
  118. package/features/directives.feature +0 -61
  119. package/features/discovery.feature +0 -213
  120. package/features/discovery.ui.feature +0 -213
  121. package/features/dynamic.feature +0 -192
  122. package/features/errors.feature +0 -258
  123. package/features/etag.feature +0 -239
  124. package/features/flow.feature +0 -148
  125. package/features/help.feature +0 -512
  126. package/features/identity.bans.feature +0 -200
  127. package/features/identity.basic.feature +0 -666
  128. package/features/identity.feature +0 -240
  129. package/features/identity.federation.feature +0 -396
  130. package/features/identity.otp.feature +0 -142
  131. package/features/identity.roles.feature +0 -568
  132. package/features/identity.tokens.custom.feature +0 -430
  133. package/features/identity.tokens.feature +0 -131
  134. package/features/interruptions.feature +0 -20
  135. package/features/introspection.feature +0 -565
  136. package/features/introspection.map.feature +0 -108
  137. package/features/io.feature +0 -204
  138. package/features/io.throttle.feature +0 -166
  139. package/features/map.feature +0 -360
  140. package/features/mcp.feature +0 -753
  141. package/features/methods.feature +0 -48
  142. package/features/oauth.clients.feature +0 -195
  143. package/features/oauth.discovery.feature +0 -164
  144. package/features/oauth.grants.feature +0 -301
  145. package/features/octets.cloudinary.feature +0 -233
  146. package/features/octets.download.feature +0 -194
  147. package/features/octets.entries.feature +0 -83
  148. package/features/octets.feature +0 -306
  149. package/features/octets.head.feature +0 -40
  150. package/features/octets.location.feature +0 -83
  151. package/features/octets.meta.feature +0 -117
  152. package/features/octets.workflows.feature +0 -565
  153. package/features/passkeys.feature +0 -66
  154. package/features/probes.feature +0 -18
  155. package/features/query.feature +0 -389
  156. package/features/realtime.feature +0 -34
  157. package/features/require.feature +0 -66
  158. package/features/response.feature +0 -103
  159. package/features/routes.feature +0 -224
  160. package/features/rpc.feature +0 -429
  161. package/features/server.feature +0 -21
  162. package/features/site/_app/immutable/asset.js +0 -1
  163. package/features/site/favicon.ico +0 -0
  164. package/features/site/index.html +0 -10
  165. package/features/steps/.env.example +0 -5
  166. package/features/steps/Captures.ts +0 -20
  167. package/features/steps/Cloudinary.ts +0 -12
  168. package/features/steps/Common.ts +0 -38
  169. package/features/steps/Components.ts +0 -115
  170. package/features/steps/Database.ts +0 -106
  171. package/features/steps/Gateway.ts +0 -239
  172. package/features/steps/HTTP.ts +0 -96
  173. package/features/steps/IDP.ts +0 -361
  174. package/features/steps/Identity.ts +0 -54
  175. package/features/steps/OTP.ts +0 -42
  176. package/features/steps/Parameters.ts +0 -162
  177. package/features/steps/Probe.ts +0 -38
  178. package/features/steps/Realtime.ts +0 -175
  179. package/features/steps/Workspace.ts +0 -48
  180. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  181. package/features/steps/components/audit/operations/record.js +0 -5
  182. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  183. package/features/steps/components/echo/operations/affect.js +0 -3
  184. package/features/steps/components/echo/operations/compute.js +0 -3
  185. package/features/steps/components/echo/operations/echo.js +0 -3
  186. package/features/steps/components/echo/operations/error.js +0 -7
  187. package/features/steps/components/echo/operations/identity.js +0 -3
  188. package/features/steps/components/echo/operations/parameters.js +0 -3
  189. package/features/steps/components/echo/operations/ping.js +0 -3
  190. package/features/steps/components/echo/operations/unwrap.js +0 -3
  191. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  192. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  193. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  194. package/features/steps/components/greeter/operations/greet.js +0 -3
  195. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  196. package/features/steps/components/notify/operations/send.js +0 -5
  197. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  198. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  199. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  200. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  201. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  202. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  203. package/features/steps/components/octets.tester/operations/err.js +0 -14
  204. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  205. package/features/steps/components/octets.tester/operations/id.js +0 -5
  206. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  207. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  208. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  209. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  210. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  211. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  212. package/features/steps/components/orders/operations/create.js +0 -7
  213. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  214. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  215. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  216. package/features/steps/components/pricing/operations/quote.js +0 -3
  217. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  218. package/features/steps/components/sequences/operations/numbers.js +0 -5
  219. package/features/steps/components/sequences/operations/tokens.js +0 -14
  220. package/features/steps/components/users/manifest.toa.yaml +0 -30
  221. package/features/steps/components/users/operations/create.js +0 -11
  222. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  223. package/features/steps/map.ts +0 -30
  224. package/features/steps/tsconfig.json +0 -9
  225. package/features/streams.feature +0 -35
  226. package/features/timestamps.feature +0 -41
  227. package/features/timing.feature +0 -49
  228. package/features/tracing.feature +0 -123
  229. package/source/Branch.test.ts +0 -40
  230. package/source/Branch.ts +0 -44
  231. package/source/Composition.ts +0 -51
  232. package/source/Context.ts +0 -11
  233. package/source/Directive.test.ts +0 -199
  234. package/source/Directive.ts +0 -248
  235. package/source/Discovery/Explorer.ts +0 -34
  236. package/source/Discovery/Site.test.ts +0 -147
  237. package/source/Discovery/Site.ts +0 -202
  238. package/source/Discovery/index.ts +0 -3
  239. package/source/Discovery/tree.test.ts +0 -175
  240. package/source/Discovery/tree.ts +0 -77
  241. package/source/Discovery/trunk.ts +0 -33
  242. package/source/Endpoint.test.ts +0 -67
  243. package/source/Endpoint.ts +0 -157
  244. package/source/Factory.ts +0 -42
  245. package/source/Gateway.ts +0 -390
  246. package/source/HTTP/Context.ts +0 -143
  247. package/source/HTTP/Probe.ts +0 -99
  248. package/source/HTTP/Server.ts +0 -435
  249. package/source/HTTP/Timing.ts +0 -14
  250. package/source/HTTP/address.test.ts +0 -28
  251. package/source/HTTP/address.ts +0 -16
  252. package/source/HTTP/exceptions.ts +0 -99
  253. package/source/HTTP/formats/form.ts +0 -21
  254. package/source/HTTP/formats/index.ts +0 -36
  255. package/source/HTTP/formats/json.ts +0 -14
  256. package/source/HTTP/formats/msgpack.ts +0 -14
  257. package/source/HTTP/formats/text.ts +0 -10
  258. package/source/HTTP/formats/yaml.test.ts +0 -22
  259. package/source/HTTP/formats/yaml.ts +0 -40
  260. package/source/HTTP/index.ts +0 -6
  261. package/source/HTTP/messages.test.ts +0 -196
  262. package/source/HTTP/messages.ts +0 -186
  263. package/source/HTTP/types.ts +0 -39
  264. package/source/Interception.ts +0 -37
  265. package/source/Introspection.ts +0 -179
  266. package/source/MCP/Server.ts +0 -335
  267. package/source/MCP/discover.ts +0 -51
  268. package/source/MCP/errors.ts +0 -80
  269. package/source/MCP/index.ts +0 -1
  270. package/source/MCP/schema.test.ts +0 -91
  271. package/source/MCP/schema.ts +0 -94
  272. package/source/MCP/tools.ts +0 -144
  273. package/source/MCP/types.ts +0 -84
  274. package/source/Mapping.ts +0 -101
  275. package/source/Query.test.ts +0 -54
  276. package/source/Query.ts +0 -277
  277. package/source/RPC/Context.ts +0 -75
  278. package/source/RPC/Dispatcher.ts +0 -150
  279. package/source/RPC/errors.test.ts +0 -77
  280. package/source/RPC/errors.ts +0 -82
  281. package/source/RPC/index.ts +0 -1
  282. package/source/RPC/names.test.ts +0 -141
  283. package/source/RPC/names.ts +0 -176
  284. package/source/RPC/types.ts +0 -34
  285. package/source/RTD/Context.ts +0 -16
  286. package/source/RTD/Directives.ts +0 -126
  287. package/source/RTD/Endpoint.ts +0 -27
  288. package/source/RTD/Match.ts +0 -11
  289. package/source/RTD/Method.ts +0 -39
  290. package/source/RTD/Node.ts +0 -169
  291. package/source/RTD/Route.ts +0 -93
  292. package/source/RTD/Tree.ts +0 -137
  293. package/source/RTD/expiration.test.ts +0 -81
  294. package/source/RTD/factory.ts +0 -105
  295. package/source/RTD/index.ts +0 -8
  296. package/source/RTD/segment.test.ts +0 -35
  297. package/source/RTD/segment.ts +0 -51
  298. package/source/RTD/syntax/index.ts +0 -1
  299. package/source/RTD/walk.test.ts +0 -147
  300. package/source/Remotes.test.ts +0 -79
  301. package/source/Remotes.ts +0 -39
  302. package/source/Tenant.ts +0 -73
  303. package/source/directives/auth/Anonymous.test.ts +0 -70
  304. package/source/directives/auth/Anonymous.ts +0 -36
  305. package/source/directives/auth/Anyone.ts +0 -23
  306. package/source/directives/auth/Assert.ts +0 -43
  307. package/source/directives/auth/Authorization.test.ts +0 -24
  308. package/source/directives/auth/Authorization.ts +0 -388
  309. package/source/directives/auth/Delegate.test.ts +0 -36
  310. package/source/directives/auth/Delegate.ts +0 -54
  311. package/source/directives/auth/Echo.ts +0 -24
  312. package/source/directives/auth/Federation.ts +0 -104
  313. package/source/directives/auth/Id.ts +0 -37
  314. package/source/directives/auth/Incept.ts +0 -117
  315. package/source/directives/auth/Input.ts +0 -92
  316. package/source/directives/auth/Role.test.ts +0 -147
  317. package/source/directives/auth/Role.ts +0 -99
  318. package/source/directives/auth/Rule.ts +0 -59
  319. package/source/directives/auth/Scheme.ts +0 -31
  320. package/source/directives/auth/create.ts +0 -11
  321. package/source/directives/auth/index.ts +0 -3
  322. package/source/directives/auth/schemes.test.ts +0 -18
  323. package/source/directives/auth/schemes.ts +0 -39
  324. package/source/directives/auth/split.ts +0 -14
  325. package/source/directives/auth/types.ts +0 -75
  326. package/source/directives/cache/Cache.ts +0 -92
  327. package/source/directives/cache/Control.ts +0 -81
  328. package/source/directives/cache/Exact.ts +0 -7
  329. package/source/directives/cache/etag.ts +0 -38
  330. package/source/directives/cache/index.ts +0 -3
  331. package/source/directives/cache/types.ts +0 -9
  332. package/source/directives/cors/CORS.test.ts +0 -75
  333. package/source/directives/cors/CORS.ts +0 -88
  334. package/source/directives/cors/index.ts +0 -3
  335. package/source/directives/dev/Development.ts +0 -41
  336. package/source/directives/dev/Faulty.ts +0 -31
  337. package/source/directives/dev/Sleep.ts +0 -53
  338. package/source/directives/dev/Stub.ts +0 -14
  339. package/source/directives/dev/Throw.ts +0 -14
  340. package/source/directives/dev/index.ts +0 -3
  341. package/source/directives/dev/types.ts +0 -5
  342. package/source/directives/flow/Compose.ts +0 -98
  343. package/source/directives/flow/Fetch.ts +0 -86
  344. package/source/directives/flow/Flow.ts +0 -43
  345. package/source/directives/flow/index.ts +0 -3
  346. package/source/directives/flow/types.ts +0 -7
  347. package/source/directives/help/Family.ts +0 -122
  348. package/source/directives/help/Help.test.ts +0 -227
  349. package/source/directives/help/Help.ts +0 -47
  350. package/source/directives/help/Parameters.ts +0 -47
  351. package/source/directives/help/described.ts +0 -57
  352. package/source/directives/help/index.ts +0 -45
  353. package/source/directives/index.ts +0 -33
  354. package/source/directives/io/Directive.ts +0 -17
  355. package/source/directives/io/IO.ts +0 -118
  356. package/source/directives/io/Input.ts +0 -55
  357. package/source/directives/io/Message.ts +0 -1
  358. package/source/directives/io/Output.ts +0 -81
  359. package/source/directives/io/Status.test.ts +0 -88
  360. package/source/directives/io/Status.ts +0 -47
  361. package/source/directives/io/Throttle.ts +0 -30
  362. package/source/directives/io/index.ts +0 -3
  363. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  364. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  365. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  366. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  367. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  368. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  369. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  370. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  371. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  372. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  373. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  374. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  375. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  376. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  377. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  378. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  379. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  380. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  381. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  382. package/source/directives/io/lib/throttle/index.ts +0 -4
  383. package/source/directives/io/schemas.test.ts +0 -40
  384. package/source/directives/io/schemas.ts +0 -16
  385. package/source/directives/map/Authority.ts +0 -15
  386. package/source/directives/map/Buffer.ts +0 -15
  387. package/source/directives/map/Claims.ts +0 -63
  388. package/source/directives/map/Directive.ts +0 -4
  389. package/source/directives/map/Headers.ts +0 -60
  390. package/source/directives/map/Language.ts +0 -45
  391. package/source/directives/map/Languages.ts +0 -17
  392. package/source/directives/map/Map.ts +0 -85
  393. package/source/directives/map/Mapping.ts +0 -45
  394. package/source/directives/map/Properties.ts +0 -15
  395. package/source/directives/map/Segments.ts +0 -52
  396. package/source/directives/map/index.ts +0 -3
  397. package/source/directives/mcp/MCP.ts +0 -33
  398. package/source/directives/mcp/Tool.test.ts +0 -56
  399. package/source/directives/mcp/Tool.ts +0 -32
  400. package/source/directives/mcp/index.ts +0 -6
  401. package/source/directives/oauth/Discovery.ts +0 -66
  402. package/source/directives/oauth/documents.ts +0 -110
  403. package/source/directives/oauth/index.ts +0 -3
  404. package/source/directives/octets/Context.ts +0 -23
  405. package/source/directives/octets/Delete.ts +0 -96
  406. package/source/directives/octets/Directive.ts +0 -21
  407. package/source/directives/octets/Get.ts +0 -88
  408. package/source/directives/octets/Octets.ts +0 -82
  409. package/source/directives/octets/Put.ts +0 -186
  410. package/source/directives/octets/Workflow.ts +0 -60
  411. package/source/directives/octets/bytes.test.ts +0 -33
  412. package/source/directives/octets/bytes.ts +0 -18
  413. package/source/directives/octets/index.ts +0 -3
  414. package/source/directives/octets/schemas.test.ts +0 -20
  415. package/source/directives/octets/schemas.ts +0 -15
  416. package/source/directives/octets/types.ts +0 -9
  417. package/source/directives/octets/workflows/Execution.ts +0 -130
  418. package/source/directives/octets/workflows/Workflow.ts +0 -51
  419. package/source/directives/octets/workflows/index.ts +0 -1
  420. package/source/directives/require/Directive.ts +0 -5
  421. package/source/directives/require/Headers.ts +0 -19
  422. package/source/directives/require/Require.ts +0 -27
  423. package/source/directives/require/index.ts +0 -3
  424. package/source/discovery.ts +0 -1
  425. package/source/exceptions.ts +0 -47
  426. package/source/index.ts +0 -10
  427. package/source/io.ts +0 -4
  428. package/source/octets.d.ts +0 -17
  429. package/source/root.ts +0 -59
  430. package/source/service.ts +0 -95
  431. package/source/userland.ts +0 -47
  432. package/tsconfig.json +0 -13
  433. package/tsconfig.tsbuildinfo +0 -1
  434. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  435. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  436. package/ui/dist/_app/immutable/chunks/BaWe3aOV.js +0 -1
  437. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  438. package/ui/dist/_app/immutable/chunks/GZTfV0ks.js +0 -6
  439. package/ui/dist/_app/immutable/entry/app.D5v4JoUx.js +0 -2
  440. package/ui/dist/_app/immutable/entry/start.CWxFoIyZ.js +0 -1
  441. package/ui/dist/_app/immutable/nodes/0.DIh5T_5-.js +0 -1
  442. package/ui/dist/_app/immutable/nodes/1.CY-bFzHC.js +0 -1
  443. package/ui/dist/_app/immutable/nodes/2.6Ubd1ItY.js +0 -14
@@ -1,137 +0,0 @@
1
- import { console } from 'openspan'
2
- import { refusal, template } from '../RPC/names.js'
3
- import { DISCOVERY } from '@toa.io/definitions/extensions.exposition'
4
- import { branchTTL, createNode } from './factory.js'
5
- import { fragment } from './segment.js'
6
- import type { Mount, Node } from './Node.js'
7
- import type { Match } from './Match.js'
8
- import type { Context } from './Context.js'
9
- import type { DirectiveFactory } from './Directives.js'
10
- import type { EndpointsFactory } from './Endpoint.js'
11
- import type * as syntax from './syntax/index.js'
12
-
13
- export class Tree {
14
- private readonly root: syntax.Node
15
- private readonly trunk: Node
16
- private readonly endpoints: EndpointsFactory
17
- private readonly directives: DirectiveFactory
18
-
19
- public constructor(
20
- node: syntax.Node,
21
- endpoints: EndpointsFactory,
22
- directives: DirectiveFactory
23
- ) {
24
- this.endpoints = endpoints
25
- this.directives = directives
26
- this.root = node
27
- this.trunk = this.createNode(node, PROTECTED)
28
-
29
- announce(this.trunk)
30
- }
31
-
32
- public match(path: string): Match | null {
33
- if (path === '/')
34
- return {
35
- node: this.trunk,
36
- parameters: []
37
- }
38
-
39
- const fragments = fragment(path)
40
-
41
- return this.trunk.match(fragments)
42
- }
43
-
44
- /** Every method in the tree, with the template it answers at. */
45
- public walk(): Generator<Mount> {
46
- return this.trunk.walk([], TRUNK)
47
- }
48
-
49
- public merge(node: syntax.Node, extension: unknown): Node[] {
50
- const branch = this.createNode(node, !PROTECTED, extension)
51
-
52
- announce(branch)
53
-
54
- return this.trunk.merge(branch)
55
- }
56
-
57
- /**
58
- * Extends the expiration of an already merged branch, leaving its endpoints
59
- * and their remotes intact.
60
- */
61
- public refresh(nodes: Node[]): void {
62
- const expiration = Date.now() + branchTTL()
63
-
64
- for (const node of nodes) node.touch(expiration)
65
- }
66
-
67
- public dispose(): void {
68
- this.directives.dispose()
69
- }
70
-
71
- private createNode(node: syntax.Node, protect: boolean, extension?: unknown): Node {
72
- const context: Context = {
73
- protected: protect,
74
- endpoints: this.endpoints,
75
- directives: {
76
- factory: this.directives,
77
- // A merged branch is mounted under the root, so it inherits the root's
78
- // directives. The trunk is the root: createNode adds them itself, and
79
- // seeding them here too would apply every one of them twice.
80
- stack: node === this.root ? [] : (this.root.directives ?? [])
81
- },
82
- path: label(extension),
83
- extension
84
- }
85
-
86
- return createNode(node, context)
87
- }
88
- }
89
-
90
- /**
91
- * What is served but cannot be reached as it reads. Said once per route as it is built,
92
- * because either of these is otherwise noticed only by the caller who cannot find it.
93
- */
94
- function announce(node: Node): void {
95
- const said = new Set<string>()
96
-
97
- for (const { segments } of node.walk([], TRUNK)) {
98
- const route = template(segments)
99
-
100
- if (said.has(route)) continue
101
-
102
- // the page is served under this prefix, before a request is routed at all
103
- if (route === DISCOVERY || route.startsWith(DISCOVERY + '/')) {
104
- said.add(route)
105
-
106
- console.warn('Route is shadowed by the discovery endpoint', { route })
107
-
108
- continue
109
- }
110
-
111
- const segment = refusal(segments)
112
-
113
- if (segment === null) continue
114
-
115
- said.add(route)
116
-
117
- console.warn('Route cannot be addressed as a procedure', { route, segment })
118
- }
119
- }
120
-
121
- /**
122
- * A branch's routes are relative to wherever it is merged, and the mount point is not
123
- * known while it is being built — so the component it came from is what keeps two
124
- * branches from looking like the same route.
125
- */
126
- function label(extension: unknown): string {
127
- if (extension === null || typeof extension !== 'object') return ''
128
-
129
- const { namespace, component } = extension as Record<string, unknown>
130
-
131
- return typeof namespace === 'string' && typeof component === 'string'
132
- ? `${namespace}.${component}`
133
- : ''
134
- }
135
-
136
- const PROTECTED = true
137
- const TRUNK = true
@@ -1,81 +0,0 @@
1
- import { it, mock } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { Tree } from './Tree.js'
5
- import type { EndpointsFactory } from '../Endpoint.js'
6
- import type { DirectiveFactory } from './Directives.js'
7
- import type * as syntax from './syntax/index.js'
8
-
9
- const endpoints = {} as unknown as EndpointsFactory
10
-
11
- const directives = {
12
- create: () => ({
13
- precall: async () => null,
14
- settle: async () => undefined,
15
- dispose: () => undefined
16
- }),
17
- dispose: mock.fn()
18
- } as unknown as DirectiveFactory
19
-
20
- const root: syntax.Node = {
21
- routes: [],
22
- methods: [],
23
- directives: []
24
- }
25
-
26
- const pots: syntax.Node = {
27
- routes: [
28
- {
29
- path: '/pots',
30
- node: {
31
- routes: [],
32
- methods: [{ verb: 'GET', directives: [] }],
33
- directives: []
34
- }
35
- }
36
- ],
37
- methods: [],
38
- directives: []
39
- }
40
-
41
- it('should extend expiration without rebuilding the branch', () => {
42
- process.env.__TESTING_EXPOSITION_BRANCH_TTL = '1000'
43
-
44
- const now = mock.method(Date, 'now', () => 10_000)
45
- const tree = new Tree(root, endpoints, directives)
46
- const nodes = tree.merge(pots, { namespace: 'default', component: 'pots' })
47
- const match = tree.match('/pots/')
48
-
49
- assert.notStrictEqual(match, null)
50
-
51
- now.mock.mockImplementation(() => 10_900)
52
- tree.refresh(nodes)
53
-
54
- now.mock.mockImplementation(() => 11_500)
55
-
56
- const refreshed = tree.match('/pots/')
57
-
58
- assert.notStrictEqual(refreshed, null)
59
- assert.strictEqual(refreshed?.node, match?.node)
60
-
61
- now.mock.restore()
62
- delete process.env.__TESTING_EXPOSITION_BRANCH_TTL
63
- })
64
-
65
- it('should ignore expired nodes during match', () => {
66
- process.env.__TESTING_EXPOSITION_BRANCH_TTL = '1000'
67
-
68
- const now = mock.method(Date, 'now', () => 10_000)
69
- const tree = new Tree(root, endpoints, directives)
70
-
71
- tree.merge(pots, { namespace: 'default', component: 'pots' })
72
-
73
- assert.notStrictEqual(tree.match('/pots/'), null)
74
-
75
- now.mock.mockImplementation(() => 11_000)
76
-
77
- assert.strictEqual(tree.match('/pots/'), null)
78
-
79
- now.mock.restore()
80
- delete process.env.__TESTING_EXPOSITION_BRANCH_TTL
81
- })
@@ -1,105 +0,0 @@
1
- import assert from 'node:assert'
2
- import { BRANCH_TTL } from '@toa.io/definitions/extensions.exposition'
3
- import { Node, type Properties } from './Node.js'
4
- import { Route } from './Route.js'
5
- import { fragment, segment } from './segment.js'
6
- import { Method, type Methods } from './Method.js'
7
- import type { Context } from './Context.js'
8
- import type * as syntax from './syntax/index.js'
9
-
10
- export function createNode(node: syntax.Node, context: Context): Node {
11
- if (node.isolated === true) context.directives.stack = node.directives
12
- else context.directives.stack = node.directives.concat(context.directives.stack)
13
-
14
- described(node, context)
15
-
16
- const routes: Route[] = node.routes.map((route) => createRoute(route, context))
17
- const methods: Methods = {}
18
-
19
- for (const method of node.methods) methods[method.verb] = createMethod(method, context)
20
-
21
- const protect = node.protected ?? context.protected
22
-
23
- const properties: Properties = {
24
- protected: protect,
25
- forward: node.forward,
26
- expiration: protect ? Infinity : Date.now() + branchTTL()
27
- }
28
-
29
- return new Node(routes, methods, properties)
30
- }
31
-
32
- export function branchTTL(): number {
33
- const value = process.env.__TESTING_EXPOSITION_BRANCH_TTL
34
-
35
- if (value === undefined || value === '') return BRANCH_TTL
36
-
37
- const parsed = Number(value)
38
-
39
- return Number.isFinite(parsed) ? parsed : BRANCH_TTL
40
- }
41
-
42
- function createRoute(route: syntax.Route, context: Context): Route {
43
- const stack = context.directives.stack.slice()
44
- const path = context.path
45
- const segments = segment(route.path)
46
-
47
- context.path = join(path, route.path)
48
-
49
- /*
50
- * What a node says of itself is not said of what is under it. Its own `/` is the
51
- * exception: an intermediate node is never what a path matches, because that route
52
- * answers in its place — so the two are one resource and what describes it carries.
53
- */
54
- if (route.path !== ROOT)
55
- context.directives.stack = stack.filter((directive) =>
56
- context.directives.factory.inheritable(directive)
57
- )
58
-
59
- const node = createNode(route.node, context)
60
-
61
- context.directives.stack = stack // restore
62
- context.path = path
63
-
64
- return new Route(segments, node)
65
- }
66
-
67
- function join(base: string, path: string): string {
68
- // '/one/' and '/two/' would otherwise read as '/one//two/'
69
- return (base + path).replace(/\/+/g, '/').replace(/(.)\/$/, '$1')
70
- }
71
-
72
- function createMethod(method: syntax.Method, context: Context): Method {
73
- const stack = method.directives.concat(context.directives.stack)
74
- const directives = context.directives.factory.create(stack, context.path)
75
-
76
- const endpoint =
77
- method.mapping?.endpoint === undefined
78
- ? null
79
- : context.endpoints.create(method, context)
80
-
81
- return new Method(endpoint, directives)
82
- }
83
-
84
- /**
85
- * A resource is what it is described beside: a node with no methods of its own is never
86
- * what a path answers, so nothing would carry what it says about itself. Refused where the
87
- * declaration is, rather than left to be noticed by whoever cannot find it in the answer.
88
- */
89
- function described(node: syntax.Node, context: Context): void {
90
- const help = node.directives.find(
91
- (directive) => directive.family === HELP && directive.name === 'node'
92
- )
93
-
94
- if (help === undefined || node.methods.length > 0) return
95
-
96
- // an intermediate node's `/` answers in its place, and carries what it says
97
- if (node.routes.some((route) => route.path === ROOT)) return
98
-
99
- const route = '/' + fragment(context.path).join('/')
100
-
101
- assert.fail(`Directive help:node: '${route}' serves no methods`)
102
- }
103
-
104
- const ROOT = '/'
105
- const HELP = 'help'
@@ -1,8 +0,0 @@
1
- export * from './Tree.js'
2
- export * from './Node.js'
3
- export * from './Match.js'
4
- export * from './Method.js'
5
- export * from './Context.js'
6
- export * from './Endpoint.js'
7
- export * from './Directives.js'
8
- export * as syntax from './syntax/index.js'
@@ -1,35 +0,0 @@
1
- import { it } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { segment, fragment } from './segment.js'
5
-
6
- it('should return segments', async () => {
7
- const segments = segment('/foo/bar/')
8
-
9
- assert.strictEqual(segments.length, 2)
10
- assert.strictEqual(segments[0].fragment, 'foo')
11
- assert.strictEqual(segments[1].fragment, 'bar')
12
- })
13
-
14
- it('should parse placeholders', async () => {
15
- const segments = segment('/foo/:id/')
16
-
17
- assert.strictEqual(segments.length, 2)
18
- assert.strictEqual(segments[0].fragment, 'foo')
19
- assert.strictEqual(segments[1].fragment, null)
20
-
21
- // helping typescript
22
- if (segments[1].fragment !== null) throw new Error('?')
23
-
24
- assert.strictEqual(segments[1].placeholder, 'id')
25
- })
26
-
27
- it('should handle root path', async () => {
28
- assert.deepStrictEqual(segment('/'), [])
29
- })
30
-
31
- it('should split', async () => {
32
- const parts = fragment('/foo/bar/')
33
-
34
- assert.deepStrictEqual(parts, ['foo', 'bar'])
35
- })
@@ -1,51 +0,0 @@
1
- import type { Parameter } from './Match.js'
2
-
3
- export function segment(path: string): Segment[] {
4
- return fragment(path).map(parse)
5
- }
6
-
7
- export function fragment(path: string): string[] {
8
- const parts = path.split('/')
9
-
10
- // trailing slash
11
- if (parts[parts.length - 1] === '') parts.length--
12
-
13
- // leading slash
14
- return parts.splice(1)
15
- }
16
-
17
- function parse(segment: string): Segment {
18
- if (segment[0] === ':') return { fragment: null, placeholder: segment.substring(1) }
19
- else if (segment === '*') return { fragment: null, placeholder: null }
20
- else if (segment === '**') return { fragment: null, placeholder: null, wildcard: true }
21
- else return { fragment: segment }
22
- }
23
-
24
- export type Segment =
25
- | {
26
- fragment: string
27
- }
28
- | {
29
- fragment: null
30
- placeholder: string | null
31
- wildcard?: boolean
32
- }
33
-
34
- /**
35
- * What a route template takes, by name. Describing has no values for them — a template is
36
- * not a path — and nothing that describes a method reads one. A `*` is skipped: it stands
37
- * for a segment the caller cannot name, so there is nothing to substitute.
38
- */
39
- export function variables(segments: Segment[]): Parameter[] {
40
- const params: Parameter[] = []
41
-
42
- for (const segment of segments) {
43
- if (segment.fragment !== null) continue
44
-
45
- if (segment.wildcard === true) params.push({ name: '**', value: '' })
46
- else if (segment.placeholder !== null)
47
- params.push({ name: segment.placeholder, value: '' })
48
- }
49
-
50
- return params
51
- }
@@ -1 +0,0 @@
1
- export * from '@toa.io/definitions/extensions.exposition/syntax'
@@ -1,147 +0,0 @@
1
- import { describe, it, mock } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { Tree } from './Tree.js'
5
- import { address, name } from '../RPC/names.js'
6
- import type { EndpointsFactory } from '../Endpoint.js'
7
- import type { DirectiveFactory } from './Directives.js'
8
- import type * as syntax from './syntax/index.js'
9
-
10
- const endpoints = {} as unknown as EndpointsFactory
11
-
12
- const directives = {
13
- create: () => ({
14
- precall: async () => null,
15
- settle: async () => undefined,
16
- dispose: () => undefined
17
- }),
18
- dispose: mock.fn()
19
- } as unknown as DirectiveFactory
20
-
21
- const node = (
22
- path: string,
23
- verbs: string[] = [],
24
- routes: syntax.Route[] = []
25
- ): syntax.Route => ({
26
- path,
27
- node: {
28
- routes,
29
- methods: verbs.map((verb) => ({ verb, directives: [] })),
30
- directives: []
31
- }
32
- })
33
-
34
- const trunk = (routes: syntax.Route[], verbs: string[] = []): syntax.Node => ({
35
- routes,
36
- methods: verbs.map((verb) => ({ verb, directives: [] })),
37
- directives: []
38
- })
39
-
40
- /** What a walk names, which is what a caller of `/.rpc` would write. */
41
- function names(tree: Tree): string[] {
42
- return [...tree.walk()]
43
- .map(({ segments, verb }) => name(segments, verb))
44
- .filter((named): named is string => named !== null)
45
- }
46
-
47
- describe('walk', () => {
48
- it('should name the trunk by its verb alone', () => {
49
- const tree = new Tree(trunk([], ['GET']), endpoints, directives)
50
-
51
- assert.deepEqual(names(tree), ['GET'])
52
- })
53
-
54
- it('should name every method of every route', () => {
55
- const tree = new Tree(
56
- trunk([node('/pots', ['GET', 'POST'], [node('/:id', ['GET', 'DELETE'])])]),
57
- endpoints,
58
- directives
59
- )
60
-
61
- assert.deepEqual(names(tree).sort(), [
62
- 'pots.GET',
63
- 'pots.POST',
64
- 'pots._id.DELETE',
65
- 'pots._id.GET'
66
- ])
67
- })
68
-
69
- it('should walk a branch that was merged', () => {
70
- const tree = new Tree(trunk([]), endpoints, directives)
71
-
72
- tree.merge(trunk([node('/pots', ['GET'])]), {
73
- namespace: 'default',
74
- component: 'pots'
75
- })
76
-
77
- assert.deepEqual(names(tree), ['pots.GET'])
78
- })
79
-
80
- it('should name a tail', () => {
81
- const tree = new Tree(
82
- trunk([node('/files', [], [node('/**', ['GET'])])]),
83
- endpoints,
84
- directives
85
- )
86
-
87
- assert.deepEqual(names(tree), ['files.__.GET'])
88
- })
89
-
90
- it('should skip an intermediate node, whose route answers in its place', () => {
91
- const tree = new Tree(
92
- trunk([
93
- // `/posts` is intermediate: `/posts/` is answered by its `/` route, not by itself
94
- node('/posts', ['PATCH'], [node('/', ['PUT'])])
95
- ]),
96
- endpoints,
97
- directives
98
- )
99
-
100
- assert.deepEqual(names(tree), ['posts.PUT'])
101
- })
102
-
103
- it('should name nothing where a segment cannot be spelled', () => {
104
- const tree = new Tree(
105
- trunk([node('/v1.0', ['GET']), node('/pots', ['GET'])]),
106
- endpoints,
107
- directives
108
- )
109
-
110
- assert.deepEqual(names(tree), ['pots.GET'])
111
- })
112
-
113
- it('should name what the tree then matches', () => {
114
- const tree = new Tree(
115
- trunk(
116
- [
117
- node('/pots', ['GET'], [node('/:id', ['GET']), node('/hot', ['GET'])]),
118
- node('/files', [], [node('/**', ['GET'])])
119
- ],
120
- ['GET']
121
- ),
122
- endpoints,
123
- directives
124
- )
125
-
126
- const params = { id: 'a1b2', '**': 'a/b/c' }
127
-
128
- for (const { segments, verb } of tree.walk()) {
129
- const named = name(segments, verb)
130
-
131
- assert.notStrictEqual(named, null, 'every walked method has a name')
132
-
133
- const { path } = address(named!, params)
134
- const match = tree.match(path)
135
-
136
- assert.notStrictEqual(
137
- match,
138
- null,
139
- `'${named!}' resolves to '${path}', which matches`
140
- )
141
- assert.ok(
142
- verb in match!.node.methods,
143
- `'${named!}' matches a node that answers ${verb}`
144
- )
145
- }
146
- })
147
- })
@@ -1,79 +0,0 @@
1
- import { it, beforeEach, mock } from 'node:test'
2
- import assert from 'node:assert/strict'
3
- import { isDeepStrictEqual } from 'node:util'
4
-
5
- import { generate } from 'randomstring'
6
- import { Connector } from '@toa.io/core'
7
- import { Remotes } from './Remotes.js'
8
- import type { Host } from './Factory.js'
9
-
10
- const host = {
11
- remote: mock.fn(async () => ({
12
- connect: mock.fn(() => undefined),
13
- link: mock.fn(() => undefined)
14
- }))
15
- } as unknown as Host
16
-
17
- const namespace = generate()
18
- const name = generate()
19
-
20
- let remotes: Remotes
21
-
22
- beforeEach(() => {
23
- remotes = new Remotes(host)
24
- })
25
-
26
- it('should create remote', async () => {
27
- const remote = await remotes.discover(namespace, name)
28
-
29
- assert.ok(
30
- host.remote.mock.calls.some(
31
- (call: any) =>
32
- call.arguments.length === 2 &&
33
- isPartial(call.arguments[0], { namespace, name }) &&
34
- call.arguments[1] !== null &&
35
- call.arguments[1] !== undefined
36
- )
37
- )
38
-
39
- assert.deepStrictEqual(remote, await host.remote.mock.calls[0].result)
40
- })
41
-
42
- it('should be instance of Connector', async () => {
43
- assert.ok(remotes instanceof Connector)
44
- })
45
-
46
- it('should depend on created remotes', async () => {
47
- const remote = await remotes.discover(namespace, name)
48
-
49
- assert.ok(
50
- remote.link.mock.calls.some(
51
- (call: any) =>
52
- call.arguments.length === 1 && isDeepStrictEqual(call.arguments[0], remotes)
53
- )
54
- )
55
- })
56
-
57
- it('should attribute calls to the gateway', async () => {
58
- await remotes.discover(namespace, name)
59
-
60
- assert.ok(
61
- host.remote.mock.calls.some(
62
- (call: any) =>
63
- call.arguments.length === 2 &&
64
- call.arguments[0] !== null &&
65
- call.arguments[0] !== undefined &&
66
- isDeepStrictEqual(call.arguments[1], { service: 'exposition' })
67
- )
68
- )
69
- })
70
-
71
- function isPartial(actual, expected) {
72
- try {
73
- assert.partialDeepStrictEqual(actual, expected)
74
-
75
- return true
76
- } catch {
77
- return false
78
- }
79
- }
package/source/Remotes.ts DELETED
@@ -1,39 +0,0 @@
1
- import { Locator, Connector, type Remote } from '@toa.io/core'
2
- import type { Source } from '@toa.io/core/types'
3
- import { type Host } from './Factory.js'
4
-
5
- export class Remotes extends Connector {
6
- private readonly host: Host
7
- private readonly cache: Record<string, Promise<Remote>> = {}
8
-
9
- public constructor(host: Host) {
10
- super()
11
- this.host = host
12
- }
13
-
14
- public async discover(
15
- namespace: string,
16
- name: string,
17
- version: string = 'local'
18
- ): Promise<Remote> {
19
- const locator = new Locator(name, namespace)
20
- const key = locator.id + ':' + version
21
-
22
- this.cache[key] ??= this.locate(locator)
23
-
24
- return this.cache[key]
25
- }
26
-
27
- private async locate(locator: Locator): Promise<Remote> {
28
- // the gateway is the origin of every call it forwards
29
- const remote = await this.host.remote(locator, SOURCE)
30
-
31
- this.depends(remote)
32
-
33
- await remote.connect()
34
-
35
- return remote
36
- }
37
- }
38
-
39
- const SOURCE: Source = { service: 'exposition' }