@toa.io/extensions.exposition 1.0.0-alpha.5 → 1.0.0-alpha.51

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/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +15 -7
  3. package/components/identity.bans/operations/transit.d.ts +14 -0
  4. package/components/identity.bans/operations/transit.js +11 -0
  5. package/components/identity.bans/operations/transit.js.map +1 -0
  6. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  7. package/components/identity.bans/source/transit.ts +21 -0
  8. package/components/identity.bans/tsconfig.json +9 -0
  9. package/components/identity.basic/manifest.toa.yaml +22 -9
  10. package/components/identity.basic/operations/authenticate.d.ts +5 -1
  11. package/components/identity.basic/operations/authenticate.js +5 -2
  12. package/components/identity.basic/operations/authenticate.js.map +1 -1
  13. package/components/identity.basic/operations/incept.d.ts +12 -0
  14. package/components/identity.basic/operations/incept.js +26 -0
  15. package/components/identity.basic/operations/incept.js.map +1 -0
  16. package/components/identity.basic/operations/transit.d.ts +4 -4
  17. package/components/identity.basic/operations/transit.js +5 -3
  18. package/components/identity.basic/operations/transit.js.map +1 -1
  19. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  20. package/components/identity.basic/operations/types.d.ts +8 -4
  21. package/components/identity.basic/source/authenticate.ts +16 -5
  22. package/components/identity.basic/source/incept.ts +38 -0
  23. package/components/identity.basic/source/transit.ts +8 -6
  24. package/components/identity.basic/source/types.ts +8 -4
  25. package/components/identity.federation/manifest.toa.yaml +32 -22
  26. package/components/identity.federation/operations/authenticate.d.ts +2 -2
  27. package/components/identity.federation/operations/authenticate.js +4 -11
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/incept.d.ts +11 -0
  30. package/components/identity.federation/operations/{create.js → incept.js} +6 -7
  31. package/components/identity.federation/operations/incept.js.map +1 -0
  32. package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
  33. package/components/identity.federation/operations/lib/jwt.js +12 -7
  34. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  35. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  36. package/components/identity.federation/operations/types/configuration.d.ts +14 -0
  37. package/components/identity.federation/operations/types/configuration.js +3 -0
  38. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  39. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +15 -7
  40. package/components/identity.federation/operations/types/context.js +3 -0
  41. package/components/identity.federation/operations/types/context.js.map +1 -0
  42. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  43. package/components/identity.federation/operations/types/entity.js +3 -0
  44. package/components/identity.federation/operations/types/entity.js.map +1 -0
  45. package/components/identity.federation/operations/types/index.d.ts +3 -0
  46. package/components/identity.federation/operations/types/index.js +20 -0
  47. package/components/identity.federation/operations/types/index.js.map +1 -0
  48. package/components/identity.federation/source/authenticate.ts +6 -19
  49. package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
  50. package/components/identity.federation/source/lib/jwt.test.ts +50 -4
  51. package/components/identity.federation/source/lib/jwt.ts +20 -12
  52. package/components/identity.federation/source/types/configuration.ts +15 -0
  53. package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
  54. package/components/identity.federation/source/types/entity.ts +6 -0
  55. package/components/identity.federation/source/types/index.ts +3 -0
  56. package/components/identity.federation/tsconfig.json +2 -2
  57. package/components/identity.roles/manifest.toa.yaml +18 -6
  58. package/components/identity.roles/operations/grant.d.ts +10 -0
  59. package/components/identity.roles/operations/grant.js +21 -0
  60. package/components/identity.roles/operations/grant.js.map +1 -0
  61. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  62. package/components/identity.roles/operations/lib/Entity.js +3 -0
  63. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  64. package/components/identity.roles/operations/list.d.ts +1 -4
  65. package/components/identity.roles/operations/list.js.map +1 -1
  66. package/components/identity.roles/operations/principal.d.ts +4 -6
  67. package/components/identity.roles/operations/principal.js +6 -1
  68. package/components/identity.roles/operations/principal.js.map +1 -1
  69. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  70. package/components/identity.roles/source/grant.ts +32 -0
  71. package/components/identity.roles/source/lib/Entity.ts +5 -0
  72. package/components/identity.roles/source/list.ts +2 -4
  73. package/components/identity.roles/source/principal.ts +10 -8
  74. package/components/identity.tokens/manifest.toa.yaml +19 -5
  75. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  76. package/components/identity.tokens/operations/authenticate.js +12 -5
  77. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  78. package/components/identity.tokens/operations/decrypt.js +1 -0
  79. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  80. package/components/identity.tokens/operations/encrypt.js +5 -1
  81. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  82. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  83. package/components/identity.tokens/operations/types.d.ts +8 -2
  84. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  85. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  86. package/components/identity.tokens/source/authenticate.ts +14 -6
  87. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  88. package/components/identity.tokens/source/decrypt.ts +9 -8
  89. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  90. package/components/identity.tokens/source/encrypt.ts +5 -1
  91. package/components/identity.tokens/source/types.ts +9 -2
  92. package/components/octets.storage/manifest.toa.yaml +0 -7
  93. package/documentation/access.md +75 -38
  94. package/documentation/authorities.md +49 -0
  95. package/documentation/cache.md +8 -1
  96. package/documentation/components.md +47 -22
  97. package/documentation/flow.md +31 -0
  98. package/documentation/identity.md +17 -22
  99. package/documentation/introspection.md +68 -0
  100. package/documentation/io.md +56 -0
  101. package/documentation/octets.md +34 -23
  102. package/documentation/protocol.md +3 -0
  103. package/documentation/query.md +17 -11
  104. package/documentation/require.md +15 -0
  105. package/documentation/tree.md +35 -4
  106. package/documentation/vary.md +14 -14
  107. package/features/access.feature +89 -47
  108. package/features/annotation.feature +2 -0
  109. package/features/auth.claim.feature +170 -0
  110. package/features/authorities.basic.feature +141 -0
  111. package/features/authorities.feature +32 -0
  112. package/features/authorities.federation.feature +100 -0
  113. package/features/authorities.tokens.feature +117 -0
  114. package/features/body.feature +4 -0
  115. package/features/cache.feature +112 -5
  116. package/features/cors.feature +5 -0
  117. package/features/debug.feature +34 -0
  118. package/features/directives.feature +5 -0
  119. package/features/dynamic.feature +18 -7
  120. package/features/errors.feature +18 -4
  121. package/features/etag.feature +7 -0
  122. package/features/flow.feature +45 -0
  123. package/features/identity.bans.feature +137 -0
  124. package/features/identity.basic.feature +142 -19
  125. package/features/identity.feature +7 -2
  126. package/features/identity.federation.feature +68 -15
  127. package/features/identity.roles.feature +251 -7
  128. package/features/identity.tokens.feature +57 -4
  129. package/features/introspection.feature +76 -0
  130. package/features/io.feature +205 -0
  131. package/features/octets.entries.feature +10 -1
  132. package/features/octets.feature +60 -64
  133. package/features/octets.meta.feature +7 -3
  134. package/features/octets.workflows.feature +240 -19
  135. package/features/probes.feature +14 -0
  136. package/features/{queries.feature → query.feature} +50 -3
  137. package/features/require.feature +67 -0
  138. package/features/response.feature +12 -3
  139. package/features/routes.feature +110 -12
  140. package/features/steps/Database.ts +17 -10
  141. package/features/steps/Gateway.ts +23 -6
  142. package/features/steps/IdP.ts +30 -25
  143. package/features/steps/components/echo/manifest.toa.yaml +12 -1
  144. package/features/steps/components/echo/operations/identity.js +7 -0
  145. package/features/steps/components/echo/operations/parameters.js +7 -0
  146. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  147. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  148. package/features/steps/components/octets.tester/manifest.toa.yaml +22 -1
  149. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  150. package/features/steps/components/octets.tester/operations/baz.js +1 -2
  151. package/features/steps/components/octets.tester/operations/diversify.js +3 -1
  152. package/features/steps/components/octets.tester/operations/foo.js +2 -2
  153. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  154. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  155. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  156. package/features/steps/components/pots/manifest.toa.yaml +16 -3
  157. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  158. package/features/streams.feature +1 -0
  159. package/features/timing.feature +27 -1
  160. package/features/vary.feature +104 -3
  161. package/package.json +12 -11
  162. package/readme.md +19 -14
  163. package/schemas/annotation.cos.yaml +1 -1
  164. package/schemas/io/input.cos.yaml +3 -0
  165. package/schemas/io/message.cos.yaml +5 -0
  166. package/schemas/io/output.cos.yaml +5 -0
  167. package/schemas/node.cos.yaml +1 -0
  168. package/source/Annotation.ts +3 -3
  169. package/source/Composition.ts +2 -2
  170. package/source/Directive.ts +4 -5
  171. package/source/Endpoint.ts +18 -12
  172. package/source/Factory.ts +10 -11
  173. package/source/Gateway.ts +55 -20
  174. package/source/HTTP/Context.ts +24 -2
  175. package/source/HTTP/Server.ts +51 -43
  176. package/source/HTTP/exceptions.ts +7 -1
  177. package/source/HTTP/messages.test.ts +39 -2
  178. package/source/HTTP/messages.ts +7 -3
  179. package/source/Mapping.ts +6 -1
  180. package/source/Query.test.ts +1 -1
  181. package/source/Query.ts +35 -24
  182. package/source/RTD/Endpoint.ts +3 -0
  183. package/source/RTD/Method.ts +4 -0
  184. package/source/RTD/Node.ts +10 -2
  185. package/source/RTD/Route.ts +5 -4
  186. package/source/RTD/factory.ts +5 -2
  187. package/source/RTD/syntax/parse.ts +37 -24
  188. package/source/RTD/syntax/types.ts +2 -1
  189. package/source/Remotes.ts +4 -4
  190. package/source/Tenant.ts +0 -8
  191. package/source/deployment.ts +32 -22
  192. package/source/directives/auth/Authorization.ts +40 -17
  193. package/source/directives/auth/Delegate.ts +42 -0
  194. package/source/directives/auth/Federation.ts +84 -0
  195. package/source/directives/auth/Incept.ts +4 -3
  196. package/source/directives/auth/Role.test.ts +53 -6
  197. package/source/directives/auth/Role.ts +22 -14
  198. package/source/directives/auth/types.ts +1 -1
  199. package/source/directives/cache/Cache.ts +13 -6
  200. package/source/directives/cache/Control.ts +42 -16
  201. package/source/directives/dev/Development.ts +1 -1
  202. package/source/directives/flow/Fetch.ts +88 -0
  203. package/source/directives/flow/Flow.ts +34 -0
  204. package/source/directives/flow/index.ts +3 -0
  205. package/source/directives/flow/types.ts +6 -0
  206. package/source/directives/index.ts +6 -3
  207. package/source/directives/io/Directive.ts +11 -0
  208. package/source/directives/io/IO.ts +43 -0
  209. package/source/directives/io/Input.ts +50 -0
  210. package/source/directives/io/Message.ts +1 -0
  211. package/source/directives/io/Output.ts +69 -0
  212. package/source/directives/io/index.ts +3 -0
  213. package/source/directives/io/schemas.ts +12 -0
  214. package/source/directives/octets/Context.ts +4 -3
  215. package/source/directives/octets/Delete.ts +4 -2
  216. package/source/directives/octets/Directive.ts +10 -0
  217. package/source/directives/octets/Fetch.ts +14 -12
  218. package/source/directives/octets/List.ts +9 -7
  219. package/source/directives/octets/Octets.ts +4 -5
  220. package/source/directives/octets/Store.ts +4 -2
  221. package/source/directives/octets/Workflow.ts +10 -3
  222. package/source/directives/octets/schemas.ts +4 -4
  223. package/source/directives/octets/types.ts +0 -7
  224. package/source/directives/octets/workflows/Execution.ts +59 -8
  225. package/source/directives/octets/workflows/Workflow.ts +2 -1
  226. package/source/directives/require/Directive.ts +5 -0
  227. package/source/directives/require/Headers.ts +20 -0
  228. package/source/directives/require/Require.ts +28 -0
  229. package/source/directives/require/index.ts +3 -0
  230. package/source/directives/vary/Directive.ts +2 -1
  231. package/source/directives/vary/Embed.ts +14 -8
  232. package/source/directives/vary/Vary.ts +6 -4
  233. package/source/directives/vary/embeddings/Authority.ts +8 -0
  234. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  235. package/source/directives/vary/embeddings/Header.ts +8 -6
  236. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  237. package/source/directives/vary/embeddings/index.ts +6 -4
  238. package/source/exceptions.ts +22 -11
  239. package/source/manifest.ts +8 -9
  240. package/source/root.ts +5 -0
  241. package/source/schemas.ts +1 -1
  242. package/transpiled/Annotation.d.ts +3 -3
  243. package/transpiled/Composition.js +2 -2
  244. package/transpiled/Composition.js.map +1 -1
  245. package/transpiled/Directive.js +4 -4
  246. package/transpiled/Directive.js.map +1 -1
  247. package/transpiled/Endpoint.d.ts +5 -4
  248. package/transpiled/Endpoint.js +8 -4
  249. package/transpiled/Endpoint.js.map +1 -1
  250. package/transpiled/Factory.d.ts +1 -1
  251. package/transpiled/Factory.js +9 -8
  252. package/transpiled/Factory.js.map +1 -1
  253. package/transpiled/Gateway.d.ts +2 -0
  254. package/transpiled/Gateway.js +39 -12
  255. package/transpiled/Gateway.js.map +1 -1
  256. package/transpiled/HTTP/Context.d.ts +8 -1
  257. package/transpiled/HTTP/Context.js +15 -2
  258. package/transpiled/HTTP/Context.js.map +1 -1
  259. package/transpiled/HTTP/Server.d.ts +13 -2
  260. package/transpiled/HTTP/Server.js +38 -35
  261. package/transpiled/HTTP/Server.js.map +1 -1
  262. package/transpiled/HTTP/exceptions.d.ts +4 -1
  263. package/transpiled/HTTP/exceptions.js +7 -1
  264. package/transpiled/HTTP/exceptions.js.map +1 -1
  265. package/transpiled/HTTP/messages.d.ts +1 -0
  266. package/transpiled/HTTP/messages.js +9 -3
  267. package/transpiled/HTTP/messages.js.map +1 -1
  268. package/transpiled/Mapping.js +4 -1
  269. package/transpiled/Mapping.js.map +1 -1
  270. package/transpiled/Query.d.ts +1 -0
  271. package/transpiled/Query.js +21 -20
  272. package/transpiled/Query.js.map +1 -1
  273. package/transpiled/RTD/Endpoint.d.ts +1 -0
  274. package/transpiled/RTD/Method.d.ts +1 -0
  275. package/transpiled/RTD/Method.js +3 -0
  276. package/transpiled/RTD/Method.js.map +1 -1
  277. package/transpiled/RTD/Node.d.ts +2 -0
  278. package/transpiled/RTD/Node.js +9 -2
  279. package/transpiled/RTD/Node.js.map +1 -1
  280. package/transpiled/RTD/Route.d.ts +1 -1
  281. package/transpiled/RTD/Route.js +0 -1
  282. package/transpiled/RTD/Route.js.map +1 -1
  283. package/transpiled/RTD/factory.js +5 -2
  284. package/transpiled/RTD/factory.js.map +1 -1
  285. package/transpiled/RTD/syntax/parse.js +34 -22
  286. package/transpiled/RTD/syntax/parse.js.map +1 -1
  287. package/transpiled/RTD/syntax/types.d.ts +1 -0
  288. package/transpiled/RTD/syntax/types.js +1 -1
  289. package/transpiled/RTD/syntax/types.js.map +1 -1
  290. package/transpiled/Remotes.d.ts +2 -2
  291. package/transpiled/Remotes.js.map +1 -1
  292. package/transpiled/Tenant.d.ts +0 -1
  293. package/transpiled/Tenant.js +0 -6
  294. package/transpiled/Tenant.js.map +1 -1
  295. package/transpiled/deployment.d.ts +1 -1
  296. package/transpiled/deployment.js +28 -20
  297. package/transpiled/deployment.js.map +1 -1
  298. package/transpiled/directives/auth/Authorization.js +28 -12
  299. package/transpiled/directives/auth/Authorization.js.map +1 -1
  300. package/transpiled/directives/auth/Delegate.d.ts +10 -0
  301. package/transpiled/directives/auth/Delegate.js +34 -0
  302. package/transpiled/directives/auth/Delegate.js.map +1 -0
  303. package/transpiled/directives/auth/Federation.d.ts +16 -0
  304. package/transpiled/directives/auth/Federation.js +57 -0
  305. package/transpiled/directives/auth/Federation.js.map +1 -0
  306. package/transpiled/directives/auth/Incept.js +4 -3
  307. package/transpiled/directives/auth/Incept.js.map +1 -1
  308. package/transpiled/directives/auth/Role.d.ts +4 -1
  309. package/transpiled/directives/auth/Role.js +20 -14
  310. package/transpiled/directives/auth/Role.js.map +1 -1
  311. package/transpiled/directives/cache/Cache.d.ts +3 -3
  312. package/transpiled/directives/cache/Cache.js +10 -4
  313. package/transpiled/directives/cache/Cache.js.map +1 -1
  314. package/transpiled/directives/cache/Control.d.ts +2 -1
  315. package/transpiled/directives/cache/Control.js +29 -12
  316. package/transpiled/directives/cache/Control.js.map +1 -1
  317. package/transpiled/directives/dev/Development.js +1 -1
  318. package/transpiled/directives/dev/Development.js.map +1 -1
  319. package/transpiled/directives/flow/Fetch.d.ts +13 -0
  320. package/transpiled/directives/flow/Fetch.js +59 -0
  321. package/transpiled/directives/flow/Fetch.js.map +1 -0
  322. package/transpiled/directives/flow/Flow.d.ts +10 -0
  323. package/transpiled/directives/flow/Flow.js +27 -0
  324. package/transpiled/directives/flow/Flow.js.map +1 -0
  325. package/transpiled/directives/flow/index.d.ts +2 -0
  326. package/transpiled/directives/flow/index.js +6 -0
  327. package/transpiled/directives/flow/index.js.map +1 -0
  328. package/transpiled/directives/flow/types.d.ts +5 -0
  329. package/transpiled/directives/flow/types.js.map +1 -0
  330. package/transpiled/directives/index.js +6 -3
  331. package/transpiled/directives/index.js.map +1 -1
  332. package/transpiled/directives/io/Directive.d.ts +8 -0
  333. package/transpiled/directives/io/Directive.js +3 -0
  334. package/transpiled/directives/io/Directive.js.map +1 -0
  335. package/transpiled/directives/io/IO.d.ts +9 -0
  336. package/transpiled/directives/io/IO.js +33 -0
  337. package/transpiled/directives/io/IO.js.map +1 -0
  338. package/transpiled/directives/io/Input.d.ts +11 -0
  339. package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -26
  340. package/transpiled/directives/io/Input.js.map +1 -0
  341. package/transpiled/directives/io/Message.d.ts +1 -0
  342. package/transpiled/directives/io/Message.js +3 -0
  343. package/transpiled/directives/io/Message.js.map +1 -0
  344. package/transpiled/directives/io/Output.d.ts +13 -0
  345. package/transpiled/directives/io/Output.js +76 -0
  346. package/transpiled/directives/io/Output.js.map +1 -0
  347. package/transpiled/directives/io/index.d.ts +2 -0
  348. package/transpiled/directives/io/index.js +6 -0
  349. package/transpiled/directives/io/index.js.map +1 -0
  350. package/transpiled/directives/io/schemas.d.ts +7 -0
  351. package/transpiled/directives/io/schemas.js +14 -0
  352. package/transpiled/directives/io/schemas.js.map +1 -0
  353. package/transpiled/directives/octets/Context.d.ts +3 -3
  354. package/transpiled/directives/octets/Context.js +4 -2
  355. package/transpiled/directives/octets/Context.js.map +1 -1
  356. package/transpiled/directives/octets/Delete.d.ts +3 -2
  357. package/transpiled/directives/octets/Delete.js +3 -1
  358. package/transpiled/directives/octets/Delete.js.map +1 -1
  359. package/transpiled/directives/octets/Directive.d.ts +8 -0
  360. package/transpiled/directives/octets/Directive.js +8 -0
  361. package/transpiled/directives/octets/Directive.js.map +1 -0
  362. package/transpiled/directives/octets/Fetch.d.ts +6 -5
  363. package/transpiled/directives/octets/Fetch.js +10 -8
  364. package/transpiled/directives/octets/Fetch.js.map +1 -1
  365. package/transpiled/directives/octets/List.d.ts +6 -5
  366. package/transpiled/directives/octets/List.js +6 -4
  367. package/transpiled/directives/octets/List.js.map +1 -1
  368. package/transpiled/directives/octets/Octets.d.ts +2 -1
  369. package/transpiled/directives/octets/Octets.js +2 -4
  370. package/transpiled/directives/octets/Octets.js.map +1 -1
  371. package/transpiled/directives/octets/Store.d.ts +3 -2
  372. package/transpiled/directives/octets/Store.js +3 -1
  373. package/transpiled/directives/octets/Store.js.map +1 -1
  374. package/transpiled/directives/octets/Workflow.d.ts +3 -2
  375. package/transpiled/directives/octets/Workflow.js +9 -2
  376. package/transpiled/directives/octets/Workflow.js.map +1 -1
  377. package/transpiled/directives/octets/schemas.d.ts +4 -4
  378. package/transpiled/directives/octets/schemas.js.map +1 -1
  379. package/transpiled/directives/octets/types.d.ts +0 -5
  380. package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
  381. package/transpiled/directives/octets/workflows/Execution.js +43 -9
  382. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  383. package/transpiled/directives/octets/workflows/Workflow.js +2 -1
  384. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  385. package/transpiled/directives/require/Directive.d.ts +4 -0
  386. package/transpiled/directives/require/Directive.js +3 -0
  387. package/transpiled/directives/require/Directive.js.map +1 -0
  388. package/transpiled/directives/require/Headers.d.ts +7 -0
  389. package/transpiled/directives/require/Headers.js +19 -0
  390. package/transpiled/directives/require/Headers.js.map +1 -0
  391. package/transpiled/directives/require/Require.d.ts +9 -0
  392. package/transpiled/directives/require/Require.js +27 -0
  393. package/transpiled/directives/require/Require.js.map +1 -0
  394. package/transpiled/directives/require/index.d.ts +2 -0
  395. package/transpiled/directives/require/index.js +6 -0
  396. package/transpiled/directives/require/index.js.map +1 -0
  397. package/transpiled/directives/vary/Directive.d.ts +2 -1
  398. package/transpiled/directives/vary/Embed.d.ts +2 -1
  399. package/transpiled/directives/vary/Embed.js +8 -6
  400. package/transpiled/directives/vary/Embed.js.map +1 -1
  401. package/transpiled/directives/vary/Vary.d.ts +2 -2
  402. package/transpiled/directives/vary/Vary.js +3 -3
  403. package/transpiled/directives/vary/Vary.js.map +1 -1
  404. package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
  405. package/transpiled/directives/vary/embeddings/Authority.js +10 -0
  406. package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
  407. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  408. package/transpiled/directives/vary/embeddings/Header.js +8 -6
  409. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  410. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  411. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  412. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  413. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  414. package/transpiled/directives/vary/embeddings/index.js +8 -4
  415. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  416. package/transpiled/exceptions.d.ts +3 -2
  417. package/transpiled/exceptions.js +13 -7
  418. package/transpiled/exceptions.js.map +1 -1
  419. package/transpiled/manifest.js +8 -9
  420. package/transpiled/manifest.js.map +1 -1
  421. package/transpiled/root.js +5 -0
  422. package/transpiled/root.js.map +1 -1
  423. package/transpiled/schemas.d.ts +1 -1
  424. package/transpiled/schemas.js +2 -2
  425. package/transpiled/schemas.js.map +1 -1
  426. package/transpiled/tsconfig.tsbuildinfo +1 -1
  427. package/components/identity.basic/operations/create.d.ts +0 -10
  428. package/components/identity.basic/operations/create.js +0 -10
  429. package/components/identity.basic/operations/create.js.map +0 -1
  430. package/components/identity.basic/source/create.ts +0 -18
  431. package/components/identity.federation/operations/create.d.ts +0 -10
  432. package/components/identity.federation/operations/create.js.map +0 -1
  433. package/components/identity.federation/operations/schemas.d.ts +0 -59
  434. package/components/identity.federation/operations/schemas.js +0 -9
  435. package/components/identity.federation/operations/schemas.js.map +0 -1
  436. package/components/identity.federation/operations/types.js.map +0 -1
  437. package/components/identity.federation/source/schemas.ts +0 -61
  438. package/components/octets.storage/operations/permute.js +0 -7
  439. package/source/HTTP/Server.test.ts +0 -126
  440. package/source/directives/octets/Permute.ts +0 -43
  441. package/transpiled/directives/octets/Permute.d.ts +0 -10
  442. package/transpiled/directives/octets/Permute.js.map +0 -1
  443. /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
@@ -0,0 +1,137 @@
1
+ @security
2
+ Feature: Bans
3
+
4
+ Background:
5
+ Given the `identity.basic` database contains:
6
+ # developer:secret
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 |
11
+ And the `identity.bans` database is empty
12
+
13
+ Scenario: Banning an Identity
14
+ Given the `identity.roles` database contains:
15
+ | _id | identity | role |
16
+ | 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | system:identity:bans |
17
+ And the annotation:
18
+ """yaml
19
+ /:
20
+ /:id:
21
+ io:output: true
22
+ auth:id: id
23
+ GET:
24
+ dev:stub:
25
+ access: granted!
26
+ """
27
+ And the `identity.tokens` configuration:
28
+ """yaml
29
+ refresh: 1
30
+ """
31
+ When the following request is received:
32
+ """
33
+ GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
34
+ host: nex.toa.io
35
+ authorization: Basic dXNlcjoxMjM0NQ==
36
+ """
37
+ Then the following reply is sent:
38
+ """
39
+ 200 OK
40
+ authorization: Token ${{ token }}
41
+ """
42
+ When the following request is received:
43
+ """
44
+ PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
45
+ host: nex.toa.io
46
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
47
+ content-type: application/yaml
48
+
49
+ banned: true
50
+ comment: Bye bye
51
+ """
52
+ Then the following reply is sent:
53
+ """
54
+ 200 OK
55
+ """
56
+ # accessing a resource with a banned Identity
57
+ When the following request is received:
58
+ """
59
+ GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
60
+ host: nex.toa.io
61
+ authorization: Basic dXNlcjoxMjM0NQ==
62
+ """
63
+ Then the following reply is sent:
64
+ """
65
+ 401 Unauthorized
66
+ """
67
+ Then after 1 second
68
+ When the following request is received:
69
+ """
70
+ GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
71
+ host: nex.toa.io
72
+ authorization: Token ${{ token }}
73
+ """
74
+ Then the following reply is sent:
75
+ """
76
+ 401 Unauthorized
77
+ """
78
+ When the following request is received:
79
+ """
80
+ PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
81
+ host: nex.toa.io
82
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
83
+ content-type: application/yaml
84
+
85
+ banned: false
86
+ """
87
+ Then the following reply is sent:
88
+ """
89
+ 200 OK
90
+ """
91
+ When the following request is received:
92
+ """
93
+ GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
94
+ host: nex.toa.io
95
+ authorization: Basic dXNlcjoxMjM0NQ==
96
+ """
97
+ Then the following reply is sent:
98
+ """
99
+ 200 OK
100
+
101
+ authorization: Token ${{ new_token }}
102
+ """
103
+ # re-ban
104
+ When the following request is received:
105
+ """
106
+ PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
107
+ host: nex.toa.io
108
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
109
+ content-type: application/yaml
110
+
111
+ banned: true
112
+ """
113
+ Then the following reply is sent:
114
+ """
115
+ 200 OK
116
+ """
117
+ When the following request is received:
118
+ """
119
+ GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
120
+ host: nex.toa.io
121
+ authorization: Basic dXNlcjoxMjM0NQ==
122
+ """
123
+ Then the following reply is sent:
124
+ """
125
+ 401 Unauthorized
126
+ """
127
+ Then after 1 second
128
+ When the following request is received:
129
+ """
130
+ GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
131
+ host: nex.toa.io
132
+ authorization: Token ${{ new_token }}
133
+ """
134
+ Then the following reply is sent:
135
+ """
136
+ 401 Unauthorized
137
+ """
@@ -1,3 +1,4 @@
1
+ @security
1
2
  Feature: Basic authentication
2
3
 
3
4
  Background:
@@ -7,6 +8,7 @@ Feature: Basic authentication
7
8
  When the following request is received:
8
9
  """
9
10
  POST /identity/basic/ HTTP/1.1
11
+ host: nex.toa.io
10
12
  content-type: application/yaml
11
13
 
12
14
  username: developer
@@ -16,24 +18,40 @@ Feature: Basic authentication
16
18
  """
17
19
  201 Created
18
20
  """
21
+ When the following request is received:
22
+ """
23
+ POST /identity/basic/ HTTP/1.1
24
+ host: nex.toa.io
25
+ content-type: application/yaml
26
+ accept: application/yaml
27
+
28
+ username: developer
29
+ password: secret#1234
30
+ """
31
+ Then the following reply is sent:
32
+ """
33
+ 409 Conflict
34
+ """
19
35
 
20
36
  Scenario: Creating new Identity using inception
21
37
  Given the `users` is running with the following manifest:
22
38
  """yaml
23
39
  exposition:
24
40
  /:
25
- anonymous: true # checking compatibility with anonymous access
41
+ io:output: true
42
+ anonymous: true # checking compatibility with anonymous access
26
43
  POST:
27
44
  incept: id
28
45
  endpoint: transit
29
46
  query: ~
30
- /:id: # credential testing route
31
- id: id
32
- GET: observe
47
+ /:id: # credential testing route
48
+ id: id
49
+ GET: observe
33
50
  """
34
51
  When the following request is received:
35
52
  """
36
53
  POST /users/ HTTP/1.1
54
+ host: nex.toa.io
37
55
  authorization: Basic dXNlcjpwYXNzMTIzNA==
38
56
  accept: application/yaml
39
57
  content-type: application/yaml
@@ -51,6 +69,7 @@ Feature: Basic authentication
51
69
  # basic credentials have been created
52
70
  """
53
71
  GET /users/${{ id }}/ HTTP/1.1
72
+ host: nex.toa.io
54
73
  authorization: Basic dXNlcjpwYXNzMTIzNA==
55
74
  """
56
75
  Then the following reply is sent:
@@ -61,17 +80,49 @@ Feature: Basic authentication
61
80
  # valid token has been issued
62
81
  """
63
82
  GET /users/${{ id }}/ HTTP/1.1
83
+ host: nex.toa.io
64
84
  authorization: Token ${{ token }}
65
85
  """
66
86
  Then the following reply is sent:
67
87
  """
68
88
  200 OK
69
89
  """
90
+ # username is taken
91
+ When the following request is received:
92
+ """
93
+ POST /users/ HTTP/1.1
94
+ host: nex.toa.io
95
+ authorization: Basic dXNlcjphbm90aGVycGFzczEyMzQ=
96
+ accept: application/yaml
97
+ content-type: application/yaml
98
+
99
+ name: Bill Smith
100
+ """
101
+ Then the following reply is sent:
102
+ """
103
+ 409 Conflict
104
+ """
105
+ # credentials already exists
106
+ When the following request is received:
107
+ """
108
+ POST /users/ HTTP/1.1
109
+ host: nex.toa.io
110
+ authorization: Basic dXNlcjpwYXNzMTIzNA==
111
+ accept: application/yaml
112
+ content-type: application/yaml
113
+
114
+ name: Bill Smith
115
+ """
116
+ Then the following reply is sent:
117
+ """
118
+ 409 Conflict
119
+ """
70
120
 
71
121
  Scenario: Changing the password
72
122
  Given the annotation:
73
123
  """yaml
74
124
  /:
125
+ io:output: true
75
126
  /:id:
76
127
  id: id
77
128
  GET:
@@ -79,11 +130,12 @@ Feature: Basic authentication
79
130
  access: granted!
80
131
  """
81
132
  And the `identity.basic` database contains:
82
- | _id | _version | username | password |
83
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
133
+ | _id | _version | authority | username | password |
134
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
84
135
  When the following request is received:
85
136
  """
86
137
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
138
+ host: nex.toa.io
87
139
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
88
140
  accept: application/yaml
89
141
  content-type: application/yaml
@@ -98,6 +150,7 @@ Feature: Basic authentication
98
150
  # old password
99
151
  """
100
152
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
153
+ host: nex.toa.io
101
154
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
102
155
  """
103
156
  Then the following reply is sent:
@@ -108,6 +161,7 @@ Feature: Basic authentication
108
161
  # new password
109
162
  """
110
163
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
164
+ host: nex.toa.io
111
165
  authorization: Basic ZGV2ZWxvcGVyOm5ldy1zZWNyZXQ=
112
166
  """
113
167
  Then the following reply is sent:
@@ -115,10 +169,31 @@ Feature: Basic authentication
115
169
  200 OK
116
170
  """
117
171
 
172
+ Scenario: Changing other identity's password
173
+ Given the `identity.basic` database contains:
174
+ | _id | authority | username | password | _version |
175
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
176
+ | 6c0be50cbfb043acafe69cc7d3895f84 | nex | attacker | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
177
+ When the following request is received:
178
+ """
179
+ PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
180
+ host: nex.toa.io
181
+ authorization: Basic YXR0YWNrZXI6c2VjcmV0
182
+ accept: application/yaml
183
+ content-type: application/yaml
184
+
185
+ password: new-secret
186
+ """
187
+ Then the following reply is sent:
188
+ """
189
+ 403 Forbidden
190
+ """
191
+
118
192
  Scenario Outline: <problem> not meeting the requirements
119
193
  When the following request is received:
120
194
  """
121
195
  POST /identity/basic/ HTTP/1.1
196
+ host: nex.toa.io
122
197
  accept: application/yaml
123
198
  content-type: application/yaml
124
199
 
@@ -127,17 +202,17 @@ Feature: Basic authentication
127
202
  """
128
203
  Then the following reply is sent:
129
204
  """
130
- 409 Conflict
205
+ 422 Unprocessable Entity
131
206
 
132
207
  code: <code>
133
208
  message: <problem> is not meeting the requirements.
134
209
  """
135
210
  Examples:
136
- | username | password | problem | code |
137
- | with whitespace | secret#1234 | Username | INVALID_USERNAME |
138
- | root | short | Password | INVALID_PASSWORD |
211
+ | username | password | problem | code |
212
+ | zYF8G6obtE3c5ARpZjnMwv0L7lX2dQUyJ1KiHS9ag4fThDPVxCsuIWmNeBqkOrzYF8G6obtE3c5ARpZjnMwv0L7lX2dQUyJ1KiHS9ag4fThDPVxCsuIWmNeBqkOris129 | secret#1234 | Username | INVALID_USERNAME |
213
+ | root | short | Password | INVALID_PASSWORD |
139
214
 
140
- Scenario Outline: Given <property> is not meeting one of requirements
215
+ Scenario Outline: <property> is not meeting one of requirements
141
216
  Given the `identity.basic` configuration:
142
217
  """yaml
143
218
  <property>:
@@ -145,11 +220,12 @@ Feature: Basic authentication
145
220
  - ^[^A]{1,16}$ # should not contain 'A'
146
221
  """
147
222
  And the `identity.basic` database contains:
148
- | _id | _version | username | password |
149
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
223
+ | _id | _version | authority | username | password |
224
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
150
225
  When the following request is received:
151
226
  """
152
227
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
228
+ host: nex.toa.io
153
229
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
154
230
  accept: application/yaml
155
231
  content-type: application/yaml
@@ -158,7 +234,7 @@ Feature: Basic authentication
158
234
  """
159
235
  Then the following reply is sent:
160
236
  """
161
- 409 Conflict
237
+ 422 Unprocessable Entity
162
238
  """
163
239
  Examples:
164
240
  | property |
@@ -173,6 +249,7 @@ Feature: Basic authentication
173
249
  And the annotation:
174
250
  """yaml
175
251
  /:
252
+ io:output: true
176
253
  GET:
177
254
  auth:role: system:stub
178
255
  dev:stub:
@@ -181,6 +258,7 @@ Feature: Basic authentication
181
258
  When the following request is received:
182
259
  """
183
260
  POST /identity/basic/ HTTP/1.1
261
+ host: nex.toa.io
184
262
  accept: application/yaml
185
263
  content-type: application/yaml
186
264
 
@@ -198,6 +276,7 @@ Feature: Basic authentication
198
276
  When the following request is received:
199
277
  """
200
278
  GET /identity/roles/${{ id }}/ HTTP/1.1
279
+ host: nex.toa.io
201
280
  authorization: Basic cm9vdDpzZWNyZXQjMTIzNA==
202
281
  accept: application/yaml
203
282
  """
@@ -211,6 +290,7 @@ Feature: Basic authentication
211
290
  When the following request is received:
212
291
  """
213
292
  GET / HTTP/1.1
293
+ host: nex.toa.io
214
294
  authorization: Token ${{ token }}
215
295
  accept: application/yaml
216
296
  """
@@ -224,6 +304,7 @@ Feature: Basic authentication
224
304
  When the following request is received:
225
305
  """
226
306
  PATCH /identity/basic/${{ id }}/ HTTP/1.1
307
+ host: nex.toa.io
227
308
  authorization: Token ${{ token }}
228
309
  accept: application/yaml
229
310
  content-type: application/yaml
@@ -232,27 +313,29 @@ Feature: Basic authentication
232
313
  """
233
314
  Then the following reply is sent:
234
315
  """
235
- 409 Conflict
316
+ 422 Unprocessable Entity
236
317
 
237
318
  code: PRINCIPAL_LOCKED
238
319
  message: Principal username cannot be changed.
239
320
  """
240
321
 
241
322
  Scenario: Creating an Identity using inception with existing credentials
242
- Given the `identity.basic` database is empty
243
- And the `users` is running with the following manifest:
323
+ Given the `users` is running with the following manifest:
244
324
  """yaml
245
325
  exposition:
246
326
  /:
327
+ io:output: true
247
328
  anonymous: true
248
329
  POST:
249
330
  incept: id
331
+ query: false
250
332
  endpoint: transit
251
333
  """
252
334
  When the following request is received:
253
335
  # identity inception
254
336
  """
255
337
  POST /users/ HTTP/1.1
338
+ host: nex.toa.io
256
339
  authorization: Basic dXNlcjpwYXNzMTIzNA==
257
340
  accept: application/yaml
258
341
  content-type: application/yaml
@@ -267,12 +350,52 @@ Feature: Basic authentication
267
350
  # same credentials
268
351
  """
269
352
  POST /users/ HTTP/1.1
353
+ host: nex.toa.io
270
354
  authorization: Basic dXNlcjpwYXNzMTIzNA==
271
- content-type: text/plain
355
+ content-type: application/yaml
272
356
 
273
357
  name: Mary Louis
274
358
  """
275
359
  Then the following reply is sent:
276
360
  """
277
- 403 Forbidden
361
+ 409 Conflict
362
+ """
363
+
364
+ Scenario: Incorrect credentials format
365
+ Given the `identity.basic` database is empty
366
+ And the `users` is running with the following manifest:
367
+ """yaml
368
+ exposition:
369
+ /:
370
+ io:output: true
371
+ anonymous: true
372
+ POST:
373
+ incept: id
374
+ endpoint: transit
375
+ """
376
+ When the following request is received:
377
+ """
378
+ GET /identity/ HTTP/1.1
379
+ host: nex.toa.io
380
+ authorization: Basic not-base64
381
+ """
382
+ Then the following reply is sent:
383
+ """
384
+ 401 Unauthorized
385
+ """
386
+ When the following request is received:
387
+ """
388
+ POST /users/ HTTP/1.1
389
+ host: nex.toa.io
390
+ authorization: Basic not-base64
391
+ accept: application/yaml
392
+ content-type: application/yaml
393
+
394
+ name: Bill Smith
395
+ """
396
+ Then the following reply is sent:
397
+ """
398
+ 422 Unprocessable Entity
399
+
400
+ code: INVALID_CREDENTIALS
278
401
  """
@@ -2,8 +2,8 @@ Feature: Identity resource
2
2
 
3
3
  Scenario: Requesting own Identity
4
4
  Given the `identity.basic` database contains:
5
- | _id | username | password |
6
- | efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
5
+ | _id | authority | username | password |
6
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
7
7
  And the `identity.roles` database contains:
8
8
  | _id | identity | role |
9
9
  | 9c4702490ff84f2a9e1b1da2ab64bdd4 | efe3a65ebbee47ed95a73edd911ea328 | developer |
@@ -11,6 +11,7 @@ Feature: Identity resource
11
11
  When the following request is received:
12
12
  """
13
13
  GET /identity/ HTTP/1.1
14
+ host: nex.toa.io
14
15
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
15
16
  accept: application/yaml
16
17
  """
@@ -27,6 +28,7 @@ Feature: Identity resource
27
28
  When the following request is received:
28
29
  """
29
30
  GET /identity/ HTTP/1.1
31
+ host: nex.toa.io
30
32
  authorization: Token ${{ User.token }}
31
33
  accept: application/yaml
32
34
  """
@@ -43,6 +45,7 @@ Feature: Identity resource
43
45
  When the following request is received:
44
46
  """
45
47
  GET /identity/ HTTP/1.1
48
+ host: nex.toa.io
46
49
  authorization: Token ${{ User.token }}
47
50
  accept: application/yaml
48
51
  """
@@ -61,6 +64,7 @@ Feature: Identity resource
61
64
  When the following request is received:
62
65
  """
63
66
  GET /identity/ HTTP/1.1
67
+ host: nex.toa.io
64
68
  authorization: Basic dXNlcjpwYXNzMTIzNA==
65
69
  """
66
70
  Then the following reply is sent:
@@ -70,6 +74,7 @@ Feature: Identity resource
70
74
  When the following request is received:
71
75
  """
72
76
  GET /identity/ HTTP/1.1
77
+ host: nex.toa.io
73
78
  """
74
79
  Then the following reply is sent:
75
80
  """