@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
@@ -24,7 +24,6 @@ Feature: Optimistic concurrency control
24
24
  Then the following reply is sent:
25
25
  """
26
26
  201 Created
27
- etag: "1"
28
27
 
29
28
  id: ${{ id }}
30
29
  """
@@ -74,88 +73,6 @@ Feature: Optimistic concurrency control
74
73
  Then the following reply is sent:
75
74
  """
76
75
  200 OK
77
- etag: "2"
78
- """
79
-
80
- Scenario: Using etag with enumeration
81
- Given the `pots` is running with the following manifest:
82
- """yaml
83
- exposition:
84
- /:
85
- io:output: true
86
- GET: enumerate
87
- """
88
- # sorted and bounded, or the collection does not enumerate the same way twice
89
- When the following request is received:
90
- """
91
- GET /pots/?sort=id:asc&limit=2 HTTP/1.1
92
- host: nex.toa.io
93
- accept: application/yaml
94
- """
95
- Then the following reply is sent:
96
- """
97
- 200 OK
98
- etag: "${{ etag }}"
99
- """
100
- # the same representation must be asked for, the tag identifies it
101
- When the following request is received:
102
- """
103
- GET /pots/?sort=id:asc&limit=2 HTTP/1.1
104
- host: nex.toa.io
105
- accept: application/yaml
106
- if-none-match: "${{ etag }}"
107
- """
108
- Then the following reply is sent:
109
- """
110
- 304 Not Modified
111
- etag: "${{ etag }}"
112
- """
113
-
114
- Scenario: `etag` of a reply that carries no version
115
- Given the `echo` is running with the following manifest:
116
- """yaml
117
- exposition:
118
- /:name:
119
- io:output: true
120
- GET: compute
121
- """
122
- When the following request is received:
123
- """
124
- GET /echo/Bob/ HTTP/1.1
125
- host: nex.toa.io
126
- accept: text/plain
127
- """
128
- Then the following reply is sent:
129
- """
130
- 200 OK
131
- etag: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
132
-
133
- Hello Bob
134
- """
135
- When the following request is received:
136
- """
137
- GET /echo/Bob/ HTTP/1.1
138
- host: nex.toa.io
139
- accept: text/plain
140
- if-none-match: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
141
- """
142
- Then the following reply is sent:
143
- """
144
- 304 Not Modified
145
- etag: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
146
- """
147
- # the tag identifies the representation, which is what `vary: accept` says
148
- When the following request is received:
149
- """
150
- GET /echo/Bob/ HTTP/1.1
151
- host: nex.toa.io
152
- accept: application/yaml
153
- if-none-match: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
154
- """
155
- Then the following reply is sent:
156
- """
157
- 200 OK
158
- etag: "360c52c694c418b4a793a4815e611206ab17fe04836351a65638a15d1491810b"
159
76
  """
160
77
 
161
78
  Scenario: Weak `etag`
@@ -182,7 +99,6 @@ Feature: Optimistic concurrency control
182
99
  Then the following reply is sent:
183
100
  """
184
101
  201 Created
185
- etag: "1"
186
102
 
187
103
  id: ${{ id }}
188
104
  """
@@ -232,7 +148,6 @@ Feature: Optimistic concurrency control
232
148
  Then the following reply is sent:
233
149
  """
234
150
  200 OK
235
- etag: "2"
236
151
  """
237
152
 
238
153
  Scenario: Hash `if-none-match` on versioned resource
@@ -258,7 +173,6 @@ Feature: Optimistic concurrency control
258
173
  Then the following reply is sent:
259
174
  """
260
175
  201 Created
261
- etag: "1"
262
176
 
263
177
  id: ${{ id }}
264
178
  """
@@ -5,9 +5,9 @@ Feature: Bans
5
5
  Given the `identity.basic` database contains:
6
6
  # developer:secret
7
7
  # user:12345
8
- | _id | authority | username | password | _deleted |
9
- | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | null |
10
- | e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK | null |
8
+ | _id | authority | username | password | DELETED |
9
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | null |
10
+ | e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK | null |
11
11
  And the `identity.bans` database is empty
12
12
 
13
13
  Scenario: Banning an Identity
@@ -132,8 +132,8 @@ Feature: Basic authentication
132
132
  access: granted!
133
133
  """
134
134
  And the `identity.basic` database contains:
135
- | _id | _version | authority | username | password |
136
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
135
+ | _id | VERSION | authority | username | password |
136
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
137
137
  When the following request is received:
138
138
  """
139
139
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
@@ -173,9 +173,9 @@ Feature: Basic authentication
173
173
 
174
174
  Scenario: Changing other identity's password
175
175
  Given the `identity.basic` database contains:
176
- | _id | authority | username | password | _version |
177
- | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
178
- | 6c0be50cbfb043acafe69cc7d3895f84 | nex | attacker | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
176
+ | _id | authority | username | password | VERSION |
177
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
178
+ | 6c0be50cbfb043acafe69cc7d3895f84 | nex | attacker | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
179
179
  When the following request is received:
180
180
  """
181
181
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
@@ -222,8 +222,8 @@ Feature: Basic authentication
222
222
  - ^[^A]{1,16}$ # should not contain 'A'
223
223
  """
224
224
  And the `identity.basic` database contains:
225
- | _id | _version | authority | username | password |
226
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
225
+ | _id | VERSION | authority | username | password |
226
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
227
227
  When the following request is received:
228
228
  """
229
229
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
@@ -508,8 +508,8 @@ Feature: Basic authentication
508
508
 
509
509
  Scenario: Check if username is available
510
510
  Given the `identity.basic` database contains:
511
- | _id | authority | username | password | _version |
512
- | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
511
+ | _id | authority | username | password | VERSION |
512
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
513
513
  When the following request is received:
514
514
  """
515
515
  GET /identity/basic/usernames/ZGV2ZWxvcGVy/ HTTP/1.1
@@ -9,7 +9,7 @@ Feature: Identity Federation
9
9
  Given the `identity.federation` configuration:
10
10
  """yaml
11
11
  trust:
12
- - iss: http://localhost:44444
12
+ - iss: http://localhost:31005
13
13
  aud: test
14
14
  """
15
15
  And the IDP token for User is issued
@@ -68,14 +68,14 @@ Feature: Identity Federation
68
68
  200 OK
69
69
 
70
70
  - id: ${{ User.credential }}
71
- iss: http://localhost:44444
71
+ iss: http://localhost:31005
72
72
  """
73
73
 
74
74
  Scenario: Creating an Identity using inception
75
75
  Given the `identity.federation` configuration:
76
76
  """yaml
77
77
  trust:
78
- - iss: http://localhost:44444
78
+ - iss: http://localhost:31005
79
79
  aud: test
80
80
  assert: false
81
81
  """
@@ -150,7 +150,7 @@ Feature: Identity Federation
150
150
  200 OK
151
151
 
152
152
  - id: ${{ Bill.credential }}
153
- iss: http://localhost:44444
153
+ iss: http://localhost:31005
154
154
  """
155
155
  And the following request is received:
156
156
  # same credentials
@@ -171,11 +171,11 @@ Feature: Identity Federation
171
171
  Given the `identity.federation` configuration:
172
172
  """yaml
173
173
  trust:
174
- - iss: http://localhost:44444
174
+ - iss: http://localhost:31005
175
175
  aud: test
176
176
  principal:
177
177
  authority: nex
178
- iss: http://localhost:44444
178
+ iss: http://localhost:31005
179
179
  sub: root
180
180
  """
181
181
  And the IDP token for root is issued
@@ -218,7 +218,7 @@ Feature: Identity Federation
218
218
  Given the `identity.federation` configuration:
219
219
  """yaml
220
220
  trust:
221
- - iss: http://localhost:44444
221
+ - iss: http://localhost:31005
222
222
  aud: test
223
223
  """
224
224
  And the `identity.basic` database is empty
@@ -260,7 +260,7 @@ Feature: Identity Federation
260
260
  201 Created
261
261
 
262
262
  id: ${{ Bob.credential }}
263
- iss: http://localhost:44444
263
+ iss: http://localhost:31005
264
264
  """
265
265
  # the created credential is listed as is
266
266
  When the following request is received:
@@ -275,7 +275,7 @@ Feature: Identity Federation
275
275
  200 OK
276
276
 
277
277
  - id: ${{ Bob.credential }}
278
- iss: http://localhost:44444
278
+ iss: http://localhost:31005
279
279
  """
280
280
  And the following request is received:
281
281
  """
@@ -335,7 +335,7 @@ Feature: Identity Federation
335
335
  Given the `identity.federation` configuration:
336
336
  """yaml
337
337
  trust:
338
- - iss: http://localhost:44444
338
+ - iss: http://localhost:31005
339
339
  aud: nex
340
340
  secret: $IDP_SECRET
341
341
  """
@@ -363,7 +363,7 @@ Feature: Identity Federation
363
363
  Given the `identity.federation` configuration:
364
364
  """yaml
365
365
  trust:
366
- - iss: http://localhost:44444
366
+ - iss: http://localhost:31005
367
367
  aud: nex
368
368
  signature:
369
369
  iss: io.toa.nex.id
@@ -82,8 +82,8 @@ Feature: Custom tokens
82
82
  | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
83
83
  | e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
84
84
  And the `identity.roles` database contains:
85
- | _id | identity | role |
86
- | 9c4702490ff84f2a9e1b1da2ab64bdd4 | efe3a65ebbee47ed95a73edd911ea328 | system:identity:tokens |
85
+ | _id | identity | role |
86
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | efe3a65ebbee47ed95a73edd911ea328 | system:identity:tokens |
87
87
  When the following request is received:
88
88
  """
89
89
  POST /identity/tokens/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
@@ -258,7 +258,7 @@ Feature: Custom tokens
258
258
  200 OK
259
259
 
260
260
  - id: ${{ kid }}
261
- _created: ${{ created }}
261
+ CREATED: ${{ created }}
262
262
  label: One-time token
263
263
  expires: ${{ expires }}
264
264
  """
@@ -369,8 +369,8 @@ Feature: Custom tokens
369
369
 
370
370
  Scenario: Changing the password revokes custom tokens
371
371
  Given the `identity.basic` database contains:
372
- | _id | _version | authority | username | password |
373
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
372
+ | _id | VERSION | authority | username | password |
373
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
374
374
  And the `identity.tokens` configuration:
375
375
  """yaml
376
376
  cache:
@@ -92,8 +92,8 @@ Feature: Tokens lifecycle
92
92
  refresh: 1
93
93
  """
94
94
  And the `identity.basic` database contains:
95
- | _id | _version | authority | username | password |
96
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
95
+ | _id | VERSION | authority | username | password |
96
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
97
97
  When the following request is received:
98
98
  """
99
99
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
@@ -1,3 +1,4 @@
1
+ @timing
1
2
  Feature: Request interruptions
2
3
 
3
4
  Scenario: Connection reset while processing a request
@@ -20,8 +20,8 @@ Feature: Reading the introspection map
20
20
 
21
21
  Scenario: Reading the nodes
22
22
  Given the `introspection.nodes` database contains:
23
- | _id | namespace | component | version | _version | _deleted |
24
- | 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1 | null |
23
+ | _id | namespace | component | version | VERSION | DELETED |
24
+ | 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1 | null |
25
25
  When the following request is received:
26
26
  """
27
27
  GET /introspection/nodes/ HTTP/1.1
@@ -42,8 +42,8 @@ Feature: Reading the introspection map
42
42
 
43
43
  Scenario: Reading one node
44
44
  Given the `introspection.nodes` database contains:
45
- | _id | namespace | component | version | _version | _deleted |
46
- | 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1 | null |
45
+ | _id | namespace | component | version | VERSION | DELETED |
46
+ | 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1 | null |
47
47
  When the following request is received:
48
48
  """
49
49
  GET /introspection/nodes/70e1a6551346c6932657cdb2526df0fa/ HTTP/1.1
@@ -1,3 +1,4 @@
1
+ @timing
1
2
  Feature: Request throttling
2
3
 
3
4
  Scenario: Throttle requests to a path
@@ -234,7 +234,7 @@ Feature: HTTP context mapping
234
234
  And the `identity.federation` configuration:
235
235
  """yaml
236
236
  trust:
237
- - iss: http://localhost:44444
237
+ - iss: http://localhost:31005
238
238
  aud: test
239
239
  """
240
240
  And the `echo` is running with the following manifest:
@@ -269,7 +269,7 @@ Feature: HTTP context mapping
269
269
  And the `identity.federation` configuration:
270
270
  """yaml
271
271
  trust:
272
- - iss: http://localhost:44444
272
+ - iss: http://localhost:31005
273
273
  aud: test
274
274
  assert: false
275
275
  """
@@ -1,4 +1,4 @@
1
- @cloudinary
1
+ @manual @cloudinary
2
2
  Feature: Octets with Cloudinary storage
3
3
 
4
4
  Background:
@@ -1,3 +1,4 @@
1
+ @network
1
2
  Feature: Download external resources
2
3
 
3
4
  Scenario Outline: Download from trusted location defined as <type>
@@ -27,7 +27,6 @@ Feature: Request requirements
27
27
  Then the following reply is sent:
28
28
  """
29
29
  201 Created
30
- etag: "${{ etag }}"
31
30
 
32
31
  id: ${{ id }}
33
32
  """
@@ -53,7 +52,7 @@ Feature: Request requirements
53
52
  host: nex.toa.io
54
53
  content-type: application/yaml
55
54
  accept: text/plain
56
- if-match: "${{ etag }}"
55
+ if-match: "1"
57
56
 
58
57
  title: Bye
59
58
  """
@@ -5,7 +5,7 @@ const { binding } = tsflow
5
5
 
6
6
  @binding()
7
7
  export class Captures extends http.Captures {
8
- public constructor () {
8
+ public constructor() {
9
9
  super(functions)
10
10
  }
11
11
  }
@@ -8,6 +8,5 @@ import { Before } from '@cucumber/cucumber'
8
8
  * fresh machine; with one they run, no flag to remember.
9
9
  */
10
10
  Before({ tags: '@cloudinary' }, function () {
11
- if (process.env.CLOUDINARY_ENVIRONMENT === undefined)
12
- return 'skipped'
11
+ if (process.env.CLOUDINARY_ENVIRONMENT === undefined) return 'skipped'
13
12
  })
@@ -9,25 +9,24 @@ const { binding, given } = tsflow
9
9
  export class Common {
10
10
  private readonly captures: Captures
11
11
 
12
- public constructor (captures: Captures) {
12
+ public constructor(captures: Captures) {
13
13
  this.captures = captures
14
14
  }
15
15
 
16
16
  @given('after {float} second(s)')
17
- public async timeout (interval: number): Promise<void> {
17
+ public async timeout(interval: number): Promise<void> {
18
18
  await timeout(interval * 1000)
19
19
  }
20
20
 
21
21
  @given('the process is running')
22
- public async noop (): Promise<void> {
23
- }
22
+ public async noop(): Promise<void> {}
24
23
 
25
24
  /**
26
25
  * A remote resource is whatever it is today. A scenario downloading one compares the reply
27
26
  * against what the origin actually serves, not against a literal that goes stale when it changes.
28
27
  */
29
28
  @given('the length of `{}` is captured as `{word}`')
30
- public async length (url: string, name: string): Promise<void> {
29
+ public async length(url: string, name: string): Promise<void> {
31
30
  const response = await fetch(url)
32
31
 
33
32
  assert.equal(response.status, 200, `${url} answered ${response.status}`)
@@ -23,18 +23,18 @@ export class Components {
23
23
  private readonly gateway: Gateway
24
24
  private compositions: Record<string, Connector> = {}
25
25
 
26
- public constructor (workspace: Workspace, gateway: Gateway) {
26
+ public constructor(workspace: Workspace, gateway: Gateway) {
27
27
  this.workspace = workspace
28
28
  this.gateway = gateway
29
29
  }
30
30
 
31
31
  @given('the `{word}` is running')
32
- public async run (name: string): Promise<void> {
32
+ public async run(name: string): Promise<void> {
33
33
  await this.runComponent(name)
34
34
  }
35
35
 
36
36
  @given('the `{word}` is running with the following manifest:')
37
- public async patchAndRun (name: string, yaml: string): Promise<void> {
37
+ public async patchAndRun(name: string, yaml: string): Promise<void> {
38
38
  const manifest = parse(yaml) as object
39
39
 
40
40
  await this.runComponent(name, manifest)
@@ -42,7 +42,7 @@ export class Components {
42
42
 
43
43
  /** One composition, as the explorer hosts them. */
44
44
  @given('the introspection components are running')
45
- public async runMap (): Promise<void> {
45
+ public async runMap(): Promise<void> {
46
46
  assert.ok(!(MAP in this.compositions), `Composition '${MAP}' is already running`)
47
47
 
48
48
  this.compositions[MAP] = await boot.composition(map())
@@ -52,8 +52,11 @@ export class Components {
52
52
 
53
53
  /** The values component, as the configuration extension ships it; the service hosts it alone. */
54
54
  @given('the configuration values are running')
55
- public async runValues (): Promise<void> {
56
- assert.ok(!(VALUES in this.compositions), `Composition '${VALUES}' is already running`)
55
+ public async runValues(): Promise<void> {
56
+ assert.ok(
57
+ !(VALUES in this.compositions),
58
+ `Composition '${VALUES}' is already running`
59
+ )
57
60
 
58
61
  await this.gateway.start()
59
62
 
@@ -64,12 +67,12 @@ export class Components {
64
67
 
65
68
  /** What the deployment would tell the values service, as the scenario needs it. */
66
69
  @given('the configuration values are deployed:')
67
- public deployValues (yaml: string): void {
70
+ public deployValues(yaml: string): void {
68
71
  process.env.TOA_CONFIGURATION_VALUES = JSON.stringify(parse(yaml))
69
72
  }
70
73
 
71
74
  @given('the `{word}` is stopped')
72
- public async stop (name: string): Promise<void> {
75
+ public async stop(name: string): Promise<void> {
73
76
  assert.ok(name in this.compositions, `Composition '${name}' is not running`)
74
77
 
75
78
  await this.compositions[name].disconnect()
@@ -77,15 +80,17 @@ export class Components {
77
80
  }
78
81
 
79
82
  @after()
80
- public async shutdown (): Promise<void> {
81
- const promises = Object.values(this.compositions).map((composition) => composition.disconnect())
83
+ public async shutdown(): Promise<void> {
84
+ const promises = Object.values(this.compositions).map((composition) =>
85
+ composition.disconnect()
86
+ )
82
87
 
83
88
  await Promise.all(promises)
84
89
 
85
90
  delete process.env.TOA_CONFIGURATION_VALUES
86
91
  }
87
92
 
88
- private async runComponent (name: string, manifest?: object): Promise<void> {
93
+ private async runComponent(name: string, manifest?: object): Promise<void> {
89
94
  assert.ok(!(name in this.compositions), `Composition '${name}' is already running`)
90
95
 
91
96
  // the gateway first: a component announces itself when it opens, and that only
@@ -101,7 +106,7 @@ export class Components {
101
106
  }
102
107
  }
103
108
 
104
- function values (): string {
109
+ function values(): string {
105
110
  const root = dirname(require.resolve('@toa.io/extensions.configuration/package.json'))
106
111
 
107
112
  return join(root, 'components', 'configuration.values')
@@ -11,66 +11,84 @@ export class Database {
11
11
  private static client: MongoClient
12
12
 
13
13
  @given('the `{word}` database contains:')
14
- public async upsert (id: string, table: DataTable): Promise<void> {
14
+ public async upsert(id: string, table: DataTable): Promise<void> {
15
15
  const collection = this.collection(id)
16
16
  const columns = table.raw()[0]
17
17
  const rows = table.rows()
18
18
  const documents: Document[] = []
19
19
 
20
20
  for (let r = 0; r < rows.length; r++) {
21
- const document: Document = {}
21
+ const document = {} as Document
22
22
 
23
23
  for (let c = 0; c < columns.length; c++) {
24
24
  const str = rows[r][c]
25
25
  const int = parseInt(str)
26
26
 
27
- document[columns[c]] = int.toString() === str
28
- ? int
29
- : str === 'null'
30
- ? null
31
- : str === 'true'
32
- ? true
33
- : str === 'false'
34
- ? false
35
- : str
27
+ document[columns[c]] =
28
+ int.toString() === str
29
+ ? int
30
+ : str === 'null'
31
+ ? null
32
+ : str === 'true'
33
+ ? true
34
+ : str === 'false'
35
+ ? false
36
+ : str
36
37
  }
37
38
 
38
39
  /*
39
40
  * A record that has never been written carries no timestamps, and the entity stamps
40
41
  * the ones it is missing as it is read — with the time it was read. The same row then
41
- * enumerates differently on every request, which is a moving `etag` and a collection
42
- * that is never unmodified.
42
+ * enumerates differently on every request, which is a `last-modified` that moves and a
43
+ * collection that is never unmodified.
43
44
  */
44
- document._created ??= Date.now()
45
- document._updated ??= document._created
45
+ document.CREATED ??= Date.now()
46
+ document.UPDATED ??= document.CREATED
46
47
 
47
48
  documents.push(document)
48
49
  }
49
50
 
50
- await collection.deleteMany({})
51
+ /*
52
+ * A component the scenario has already started writes to this collection too, and it may
53
+ * write the very row named here — introspection records a node under the same `_id` this
54
+ * derives. Emptying the collection and inserting leaves a window for it to land in
55
+ * between, and the insert then fails on a duplicate key. Replacing each row named, and
56
+ * deleting only what is not, has no such window.
57
+ */
58
+ const ids = documents.map((document) => document._id)
59
+
60
+ await collection.deleteMany({ _id: { $nin: ids } })
51
61
 
52
62
  if (documents.length > 0)
53
- await collection.insertMany(documents)
63
+ await collection.bulkWrite(
64
+ documents.map((document) => ({
65
+ replaceOne: {
66
+ filter: { _id: document._id },
67
+ replacement: document,
68
+ upsert: true
69
+ }
70
+ }))
71
+ )
54
72
  }
55
73
 
56
74
  @given('the `{word}` database is empty')
57
- public async truncate (id: string): Promise<void> {
75
+ public async truncate(id: string): Promise<void> {
58
76
  await this.collection(id).deleteMany({})
59
77
  }
60
78
 
61
79
  @beforeAll()
62
- public static async connect (): Promise<void> {
63
- this.client = new MongoClient('mongodb://developer:secret@localhost:27017')
80
+ public static async connect(): Promise<void> {
81
+ this.client = new MongoClient('mongodb://developer:secret@localhost:31020')
64
82
 
65
83
  await this.client.connect()
66
84
  }
67
85
 
68
86
  @afterAll()
69
- public static async disconnect (): Promise<void> {
87
+ public static async disconnect(): Promise<void> {
70
88
  await this.client.close()
71
89
  }
72
90
 
73
- private collection (id: string): Collection {
91
+ private collection(id: string): Collection<Document> {
74
92
  const [name, namespace = 'default'] = id.split('.').reverse()
75
93
  const collection = `${namespace}_${name}`.toLowerCase()
76
94
 
@@ -78,4 +96,5 @@ export class Database {
78
96
  }
79
97
  }
80
98
 
81
- type Document = Record<string, string | number | boolean | null>
99
+ /** Every fixture table names an `_id`, which is what a row is replaced by. */
100
+ type Document = Record<string, string | number | boolean | null> & { _id: string }