@toa.io/extensions.exposition 0.23.0-dev.0 → 0.24.0-alpha.0

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 (252) hide show
  1. package/documentation/access.md +2 -3
  2. package/documentation/cache.md +42 -0
  3. package/documentation/octets.md +3 -3
  4. package/documentation/tree.md +1 -5
  5. package/features/cache.feature +160 -0
  6. package/features/steps/HTTP.ts +8 -2
  7. package/features/steps/Parameters.ts +1 -2
  8. package/features/steps/Workspace.ts +5 -3
  9. package/package.json +13 -10
  10. package/readme.md +1 -0
  11. package/source/HTTP/Server.test.ts +5 -3
  12. package/source/HTTP/Server.ts +30 -18
  13. package/source/HTTP/messages.ts +4 -4
  14. package/source/RTD/syntax/parse.ts +2 -1
  15. package/source/Tenant.ts +5 -0
  16. package/source/directives/auth/Family.ts +2 -2
  17. package/source/directives/cache/Control.ts +59 -0
  18. package/source/directives/cache/Exact.ts +7 -0
  19. package/source/directives/cache/Family.ts +36 -0
  20. package/source/directives/cache/index.ts +3 -0
  21. package/source/directives/cache/types.ts +9 -0
  22. package/source/directives/index.ts +2 -1
  23. package/source/directives/octets/Fetch.ts +3 -3
  24. package/transpiled/Annotation.d.ts +7 -0
  25. package/transpiled/Annotation.js +3 -0
  26. package/transpiled/Annotation.js.map +1 -0
  27. package/transpiled/Branch.d.ts +7 -0
  28. package/transpiled/Branch.js +3 -0
  29. package/transpiled/Branch.js.map +1 -0
  30. package/transpiled/Composition.d.ts +14 -0
  31. package/transpiled/Composition.js +43 -0
  32. package/transpiled/Composition.js.map +1 -0
  33. package/transpiled/Context.d.ts +5 -0
  34. package/transpiled/Context.js +3 -0
  35. package/transpiled/Context.js.map +1 -0
  36. package/transpiled/Directive.d.ts +32 -0
  37. package/transpiled/Directive.js +76 -0
  38. package/transpiled/Directive.js.map +1 -0
  39. package/transpiled/Endpoint.d.ts +20 -0
  40. package/transpiled/Endpoint.js +45 -0
  41. package/transpiled/Endpoint.js.map +1 -0
  42. package/transpiled/Factory.d.ts +10 -0
  43. package/transpiled/Factory.js +66 -0
  44. package/transpiled/Factory.js.map +1 -0
  45. package/transpiled/Gateway.d.ts +19 -0
  46. package/transpiled/Gateway.js +92 -0
  47. package/transpiled/Gateway.js.map +1 -0
  48. package/transpiled/HTTP/Server.d.ts +22 -0
  49. package/transpiled/HTTP/Server.fixtures.d.ts +11 -0
  50. package/transpiled/HTTP/Server.fixtures.js +32 -0
  51. package/transpiled/HTTP/Server.fixtures.js.map +1 -0
  52. package/transpiled/HTTP/Server.js +131 -0
  53. package/transpiled/HTTP/Server.js.map +1 -0
  54. package/transpiled/HTTP/exceptions.d.ts +34 -0
  55. package/transpiled/HTTP/exceptions.js +71 -0
  56. package/transpiled/HTTP/exceptions.js.map +1 -0
  57. package/transpiled/HTTP/formats/index.d.ts +10 -0
  58. package/transpiled/HTTP/formats/index.js +38 -0
  59. package/transpiled/HTTP/formats/index.js.map +1 -0
  60. package/transpiled/HTTP/formats/json.d.ts +6 -0
  61. package/transpiled/HTTP/formats/json.js +17 -0
  62. package/transpiled/HTTP/formats/json.js.map +1 -0
  63. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  64. package/transpiled/HTTP/formats/msgpack.js +38 -0
  65. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  66. package/transpiled/HTTP/formats/text.d.ts +6 -0
  67. package/transpiled/HTTP/formats/text.js +15 -0
  68. package/transpiled/HTTP/formats/text.js.map +1 -0
  69. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  70. package/transpiled/HTTP/formats/yaml.js +41 -0
  71. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  72. package/transpiled/HTTP/index.d.ts +3 -0
  73. package/transpiled/HTTP/index.js +20 -0
  74. package/transpiled/HTTP/index.js.map +1 -0
  75. package/transpiled/HTTP/messages.d.ts +28 -0
  76. package/transpiled/HTTP/messages.js +70 -0
  77. package/transpiled/HTTP/messages.js.map +1 -0
  78. package/transpiled/Mapping.d.ts +8 -0
  79. package/transpiled/Mapping.js +38 -0
  80. package/transpiled/Mapping.js.map +1 -0
  81. package/transpiled/Query.d.ts +13 -0
  82. package/transpiled/Query.js +107 -0
  83. package/transpiled/Query.js.map +1 -0
  84. package/transpiled/RTD/Context.d.ts +11 -0
  85. package/transpiled/RTD/Context.js +3 -0
  86. package/transpiled/RTD/Context.js.map +1 -0
  87. package/transpiled/RTD/Directives.d.ts +7 -0
  88. package/transpiled/RTD/Directives.js +3 -0
  89. package/transpiled/RTD/Directives.js.map +1 -0
  90. package/transpiled/RTD/Endpoint.d.ts +9 -0
  91. package/transpiled/RTD/Endpoint.js +3 -0
  92. package/transpiled/RTD/Endpoint.js.map +1 -0
  93. package/transpiled/RTD/Match.d.ts +11 -0
  94. package/transpiled/RTD/Match.js +3 -0
  95. package/transpiled/RTD/Match.js.map +1 -0
  96. package/transpiled/RTD/Method.d.ts +9 -0
  97. package/transpiled/RTD/Method.js +16 -0
  98. package/transpiled/RTD/Method.js.map +1 -0
  99. package/transpiled/RTD/Node.d.ts +21 -0
  100. package/transpiled/RTD/Node.js +61 -0
  101. package/transpiled/RTD/Node.js.map +1 -0
  102. package/transpiled/RTD/Route.d.ts +14 -0
  103. package/transpiled/RTD/Route.js +49 -0
  104. package/transpiled/RTD/Route.js.map +1 -0
  105. package/transpiled/RTD/Tree.d.ts +14 -0
  106. package/transpiled/RTD/Tree.js +40 -0
  107. package/transpiled/RTD/Tree.js.map +1 -0
  108. package/transpiled/RTD/factory.d.ts +6 -0
  109. package/transpiled/RTD/factory.js +36 -0
  110. package/transpiled/RTD/factory.js.map +1 -0
  111. package/transpiled/RTD/index.d.ts +8 -0
  112. package/transpiled/RTD/index.js +38 -0
  113. package/transpiled/RTD/index.js.map +1 -0
  114. package/transpiled/RTD/segment.d.ts +8 -0
  115. package/transpiled/RTD/segment.js +25 -0
  116. package/transpiled/RTD/segment.js.map +1 -0
  117. package/transpiled/RTD/syntax/index.d.ts +2 -0
  118. package/transpiled/RTD/syntax/index.js +19 -0
  119. package/transpiled/RTD/syntax/index.js.map +1 -0
  120. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  121. package/transpiled/RTD/syntax/parse.js +128 -0
  122. package/transpiled/RTD/syntax/parse.js.map +1 -0
  123. package/transpiled/RTD/syntax/types.d.ts +41 -0
  124. package/transpiled/RTD/syntax/types.js +5 -0
  125. package/transpiled/RTD/syntax/types.js.map +1 -0
  126. package/transpiled/Remotes.d.ts +9 -0
  127. package/transpiled/Remotes.js +25 -0
  128. package/transpiled/Remotes.js.map +1 -0
  129. package/transpiled/Tenant.d.ts +13 -0
  130. package/transpiled/Tenant.js +34 -0
  131. package/transpiled/Tenant.js.map +1 -0
  132. package/transpiled/deployment.d.ts +3 -0
  133. package/transpiled/deployment.js +67 -0
  134. package/transpiled/deployment.js.map +1 -0
  135. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  136. package/transpiled/directives/auth/Anonymous.js +17 -0
  137. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  138. package/transpiled/directives/auth/Echo.d.ts +6 -0
  139. package/transpiled/directives/auth/Echo.js +13 -0
  140. package/transpiled/directives/auth/Echo.js.map +1 -0
  141. package/transpiled/directives/auth/Family.d.ts +20 -0
  142. package/transpiled/directives/auth/Family.js +118 -0
  143. package/transpiled/directives/auth/Family.js.map +1 -0
  144. package/transpiled/directives/auth/Id.d.ts +7 -0
  145. package/transpiled/directives/auth/Id.js +17 -0
  146. package/transpiled/directives/auth/Id.js.map +1 -0
  147. package/transpiled/directives/auth/Incept.d.ts +10 -0
  148. package/transpiled/directives/auth/Incept.js +58 -0
  149. package/transpiled/directives/auth/Incept.js.map +1 -0
  150. package/transpiled/directives/auth/Role.d.ts +11 -0
  151. package/transpiled/directives/auth/Role.js +44 -0
  152. package/transpiled/directives/auth/Role.js.map +1 -0
  153. package/transpiled/directives/auth/Rule.d.ts +9 -0
  154. package/transpiled/directives/auth/Rule.js +22 -0
  155. package/transpiled/directives/auth/Rule.js.map +1 -0
  156. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  157. package/transpiled/directives/auth/Scheme.js +47 -0
  158. package/transpiled/directives/auth/Scheme.js.map +1 -0
  159. package/transpiled/directives/auth/index.d.ts +2 -0
  160. package/transpiled/directives/auth/index.js +7 -0
  161. package/transpiled/directives/auth/index.js.map +1 -0
  162. package/transpiled/directives/auth/schemes.d.ts +3 -0
  163. package/transpiled/directives/auth/schemes.js +9 -0
  164. package/transpiled/directives/auth/schemes.js.map +1 -0
  165. package/transpiled/directives/auth/split.d.ts +2 -0
  166. package/transpiled/directives/auth/split.js +38 -0
  167. package/transpiled/directives/auth/split.js.map +1 -0
  168. package/transpiled/directives/auth/types.d.ts +31 -0
  169. package/transpiled/directives/auth/types.js +3 -0
  170. package/transpiled/directives/auth/types.js.map +1 -0
  171. package/transpiled/directives/cache/Control.d.ts +9 -0
  172. package/transpiled/directives/cache/Control.js +42 -0
  173. package/transpiled/directives/cache/Control.js.map +1 -0
  174. package/transpiled/directives/cache/Exact.d.ts +4 -0
  175. package/transpiled/directives/cache/Exact.js +11 -0
  176. package/transpiled/directives/cache/Exact.js.map +1 -0
  177. package/transpiled/directives/cache/Family.d.ts +12 -0
  178. package/transpiled/directives/cache/Family.js +26 -0
  179. package/transpiled/directives/cache/Family.js.map +1 -0
  180. package/transpiled/directives/cache/index.d.ts +2 -0
  181. package/transpiled/directives/cache/index.js +7 -0
  182. package/transpiled/directives/cache/index.js.map +1 -0
  183. package/transpiled/directives/cache/types.d.ts +7 -0
  184. package/transpiled/directives/cache/types.js +3 -0
  185. package/transpiled/directives/cache/types.js.map +1 -0
  186. package/transpiled/directives/dev/Family.d.ts +10 -0
  187. package/transpiled/directives/dev/Family.js +27 -0
  188. package/transpiled/directives/dev/Family.js.map +1 -0
  189. package/transpiled/directives/dev/Stub.d.ts +7 -0
  190. package/transpiled/directives/dev/Stub.js +14 -0
  191. package/transpiled/directives/dev/Stub.js.map +1 -0
  192. package/transpiled/directives/dev/Throw.d.ts +7 -0
  193. package/transpiled/directives/dev/Throw.js +14 -0
  194. package/transpiled/directives/dev/Throw.js.map +1 -0
  195. package/transpiled/directives/dev/index.d.ts +2 -0
  196. package/transpiled/directives/dev/index.js +7 -0
  197. package/transpiled/directives/dev/index.js.map +1 -0
  198. package/transpiled/directives/dev/types.d.ts +4 -0
  199. package/transpiled/directives/dev/types.js +3 -0
  200. package/transpiled/directives/dev/types.js.map +1 -0
  201. package/transpiled/directives/index.d.ts +2 -0
  202. package/transpiled/directives/index.js +12 -0
  203. package/transpiled/directives/index.js.map +1 -0
  204. package/transpiled/directives/octets/Context.d.ts +8 -0
  205. package/transpiled/directives/octets/Context.js +40 -0
  206. package/transpiled/directives/octets/Context.js.map +1 -0
  207. package/transpiled/directives/octets/Delete.d.ts +10 -0
  208. package/transpiled/directives/octets/Delete.js +47 -0
  209. package/transpiled/directives/octets/Delete.js.map +1 -0
  210. package/transpiled/directives/octets/Family.d.ts +12 -0
  211. package/transpiled/directives/octets/Family.js +49 -0
  212. package/transpiled/directives/octets/Family.js.map +1 -0
  213. package/transpiled/directives/octets/Fetch.d.ts +18 -0
  214. package/transpiled/directives/octets/Fetch.js +77 -0
  215. package/transpiled/directives/octets/Fetch.js.map +1 -0
  216. package/transpiled/directives/octets/List.d.ts +10 -0
  217. package/transpiled/directives/octets/List.js +47 -0
  218. package/transpiled/directives/octets/List.js.map +1 -0
  219. package/transpiled/directives/octets/Permute.d.ts +10 -0
  220. package/transpiled/directives/octets/Permute.js +51 -0
  221. package/transpiled/directives/octets/Permute.js.map +1 -0
  222. package/transpiled/directives/octets/Store.d.ts +33 -0
  223. package/transpiled/directives/octets/Store.js +124 -0
  224. package/transpiled/directives/octets/Store.js.map +1 -0
  225. package/transpiled/directives/octets/index.d.ts +2 -0
  226. package/transpiled/directives/octets/index.js +7 -0
  227. package/transpiled/directives/octets/index.js.map +1 -0
  228. package/transpiled/directives/octets/schemas.d.ts +6 -0
  229. package/transpiled/directives/octets/schemas.js +17 -0
  230. package/transpiled/directives/octets/schemas.js.map +1 -0
  231. package/transpiled/directives/octets/types.d.ts +9 -0
  232. package/transpiled/directives/octets/types.js +3 -0
  233. package/transpiled/directives/octets/types.js.map +1 -0
  234. package/transpiled/discovery.d.ts +1 -0
  235. package/transpiled/discovery.js +3 -0
  236. package/transpiled/discovery.js.map +1 -0
  237. package/transpiled/exceptions.d.ts +2 -0
  238. package/transpiled/exceptions.js +39 -0
  239. package/transpiled/exceptions.js.map +1 -0
  240. package/transpiled/index.d.ts +5 -0
  241. package/transpiled/index.js +12 -0
  242. package/transpiled/index.js.map +1 -0
  243. package/transpiled/manifest.d.ts +3 -0
  244. package/transpiled/manifest.js +61 -0
  245. package/transpiled/manifest.js.map +1 -0
  246. package/transpiled/root.d.ts +2 -0
  247. package/transpiled/root.js +39 -0
  248. package/transpiled/root.js.map +1 -0
  249. package/transpiled/schemas.d.ts +3 -0
  250. package/transpiled/schemas.js +14 -0
  251. package/transpiled/schemas.js.map +1 -0
  252. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Incept = void 0;
27
+ const http = __importStar(require("../../HTTP"));
28
+ const split_1 = require("./split");
29
+ const schemes_1 = require("./schemes");
30
+ class Incept {
31
+ property;
32
+ discovery;
33
+ schemes = {};
34
+ constructor(property, discovery) {
35
+ this.property = property;
36
+ this.discovery = discovery;
37
+ }
38
+ authorize(identity, input) {
39
+ return identity === null && 'authorization' in input.headers;
40
+ }
41
+ async settle(request, response) {
42
+ const id = response.body?.[this.property];
43
+ if (id === undefined)
44
+ throw new http.Conflict('Identity inception has failed as the response body ' +
45
+ ` does not contain the '${this.property}' property.`);
46
+ const [scheme, credentials] = (0, split_1.split)(request.headers.authorization);
47
+ const provider = schemes_1.PROVIDERS[scheme];
48
+ this.schemes[scheme] ??= await this.discovery[provider];
49
+ const identity = await this.schemes[scheme]
50
+ .invoke('create', { input: { id, credentials } });
51
+ if (identity instanceof Error)
52
+ throw new http.Conflict(identity);
53
+ request.identity = identity;
54
+ request.identity.scheme = scheme;
55
+ }
56
+ }
57
+ exports.Incept = Incept;
58
+ //# sourceMappingURL=Incept.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Incept.js","sourceRoot":"","sources":["../../../source/directives/auth/Incept.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iDAAkC;AAElC,mCAA+B;AAC/B,uCAAqC;AAErC,MAAa,MAAM;IACA,QAAQ,CAAQ;IAChB,SAAS,CAAW;IACpB,OAAO,GAAY,EAAwB,CAAA;IAE5D,YAAoB,QAAgB,EAAE,SAAoB;QACxD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEM,SAAS,CAAE,QAAyB,EAAE,KAAY;QACvD,OAAO,QAAQ,KAAK,IAAI,IAAI,eAAe,IAAI,KAAK,CAAC,OAAO,CAAA;IAC9D,CAAC;IAEM,KAAK,CAAC,MAAM,CAAE,OAAc,EAAE,QAA8B;QACjE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEzC,IAAI,EAAE,KAAK,SAAS;YAClB,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,qDAAqD;gBAC3E,0BAA0B,IAAI,CAAC,QAAQ,aAAa,CAAC,CAAA;QAEzD,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAA,aAAK,EAAC,OAAO,CAAC,OAAO,CAAC,aAAuB,CAAC,CAAA;QAC5E,MAAM,QAAQ,GAAG,mBAAS,CAAC,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAEvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;aACxC,MAAM,CAAkB,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QAEpE,IAAI,QAAQ,YAAY,KAAK;YAC3B,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAEnC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAA;IAClC,CAAC;CACF;AAnCD,wBAmCC"}
@@ -0,0 +1,11 @@
1
+ import { type Component } from '@toa.io/core';
2
+ import { type Directive, type Identity } from './types';
3
+ export declare class Role implements Directive {
4
+ static remote: Component | null;
5
+ private readonly roles;
6
+ private readonly discovery;
7
+ constructor(roles: string | string[], discovery: Promise<Component>);
8
+ static set(identity: Identity, discovery: Promise<Component>): Promise<void>;
9
+ authorize(identity: Identity | null): Promise<boolean>;
10
+ private match;
11
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Role = void 0;
4
+ class Role {
5
+ static remote = null;
6
+ roles;
7
+ discovery;
8
+ constructor(roles, discovery) {
9
+ this.roles = typeof roles === 'string' ? [roles] : roles;
10
+ this.discovery = discovery;
11
+ }
12
+ static async set(identity, discovery) {
13
+ this.remote ??= await discovery;
14
+ const query = { criteria: `identity==${identity.id}`, limit: 1024 };
15
+ const roles = await this.remote.invoke('list', { query });
16
+ identity.roles = roles;
17
+ }
18
+ async authorize(identity) {
19
+ if (identity === null)
20
+ return false;
21
+ await Role.set(identity, this.discovery);
22
+ if (identity.roles === undefined)
23
+ return false;
24
+ return this.match(identity.roles);
25
+ }
26
+ match(roles) {
27
+ for (const role of roles) {
28
+ const index = this.roles.findIndex((expected) => compare(expected, role));
29
+ if (index !== -1)
30
+ return true;
31
+ }
32
+ return false;
33
+ }
34
+ }
35
+ exports.Role = Role;
36
+ function compare(expected, actual) {
37
+ const exp = expected.split(':');
38
+ const act = actual.split(':');
39
+ for (let i = 0; i < act.length; i++)
40
+ if (exp[i] !== act[i])
41
+ return false;
42
+ return true;
43
+ }
44
+ //# sourceMappingURL=Role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Role.js","sourceRoot":"","sources":["../../../source/directives/auth/Role.ts"],"names":[],"mappings":";;;AAGA,MAAa,IAAI;IACR,MAAM,CAAC,MAAM,GAAqB,IAAI,CAAA;IAC5B,KAAK,CAAU;IACf,SAAS,CAAoB;IAE9C,YAAoB,KAAwB,EAAE,SAA6B;QACzE,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACxD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAE,QAAkB,EAAE,SAA6B;QACxE,IAAI,CAAC,MAAM,KAAK,MAAM,SAAS,CAAA;QAE/B,MAAM,KAAK,GAAU,EAAE,QAAQ,EAAE,aAAa,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QAC1E,MAAM,KAAK,GAAa,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAEnE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAE,QAAyB;QAC/C,IAAI,QAAQ,KAAK,IAAI;YACnB,OAAO,KAAK,CAAA;QAEd,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAExC,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YAC9B,OAAO,KAAK,CAAA;QAEd,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAEO,KAAK,CAAE,KAAe;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;YAEzE,IAAI,KAAK,KAAK,CAAC,CAAC;gBACd,OAAO,IAAI,CAAA;SACd;QAED,OAAO,KAAK,CAAA;IACd,CAAC;;AAxCH,oBAyCC;AAED,SAAS,OAAO,CAAE,QAAgB,EAAE,MAAc;IAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QACjC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACnB,OAAO,KAAK,CAAA;IAEhB,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type Parameter } from '../../RTD';
2
+ import { type Directive, type Identity } from './types';
3
+ export declare class Rule implements Directive {
4
+ private readonly directives;
5
+ constructor(directives: Record<string, any>, create: Create);
6
+ authorize(identity: Identity | null, input: any, parameters: Parameter[]): Promise<boolean>;
7
+ }
8
+ type Create = (name: string, value: any, ...args: any[]) => Directive;
9
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Rule = void 0;
4
+ class Rule {
5
+ directives = [];
6
+ constructor(directives, create) {
7
+ for (const [name, value] of Object.entries(directives)) {
8
+ const directive = create(name, value);
9
+ this.directives.push(directive);
10
+ }
11
+ }
12
+ async authorize(identity, input, parameters) {
13
+ for (const directive of this.directives) {
14
+ const authorized = await directive.authorize(identity, input, parameters);
15
+ if (!authorized)
16
+ return false;
17
+ }
18
+ return true;
19
+ }
20
+ }
21
+ exports.Rule = Rule;
22
+ //# sourceMappingURL=Rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../source/directives/auth/Rule.ts"],"names":[],"mappings":";;;AAGA,MAAa,IAAI;IACE,UAAU,GAAgB,EAAE,CAAA;IAE7C,YAAoB,UAA+B,EAAE,MAAc;QACjE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACtD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAErC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;SAChC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS,CACrB,QAAyB,EAAE,KAAU,EAAE,UAAuB;QAC7D,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACvC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;YAEzE,IAAI,CAAC,UAAU;gBACb,OAAO,KAAK,CAAA;SACf;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAtBD,oBAsBC"}
@@ -0,0 +1,7 @@
1
+ import { type Directive, type Identity, type Input } from './types';
2
+ export declare class Scheme implements Directive {
3
+ private readonly scheme;
4
+ private readonly Scheme;
5
+ constructor(scheme: string);
6
+ authorize(_: Identity | null, input: Input): boolean;
7
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Scheme = void 0;
27
+ const http = __importStar(require("../../HTTP"));
28
+ const split_1 = require("./split");
29
+ class Scheme {
30
+ scheme;
31
+ Scheme;
32
+ constructor(scheme) {
33
+ this.scheme = scheme.toLowerCase();
34
+ this.Scheme = scheme[0].toUpperCase() + scheme.substring(1);
35
+ }
36
+ authorize(_, input) {
37
+ if (input.headers.authorization === undefined)
38
+ return false;
39
+ const [scheme] = (0, split_1.split)(input.headers.authorization);
40
+ if (scheme !== this.scheme)
41
+ throw new http.Forbidden(this.Scheme +
42
+ ' authentication scheme is required to access this resource.');
43
+ return false;
44
+ }
45
+ }
46
+ exports.Scheme = Scheme;
47
+ //# sourceMappingURL=Scheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scheme.js","sourceRoot":"","sources":["../../../source/directives/auth/Scheme.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAElC,mCAA+B;AAE/B,MAAa,MAAM;IACA,MAAM,CAAQ;IACd,MAAM,CAAQ;IAE/B,YAAoB,MAAc;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC7D,CAAC;IAEM,SAAS,CAAE,CAAkB,EAAE,KAAY;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS;YAC3C,OAAO,KAAK,CAAA;QAEd,MAAM,CAAC,MAAM,CAAC,GAAG,IAAA,aAAK,EAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAEnD,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM;YACxB,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM;gBAClC,6DAA6D,CAAC,CAAA;QAElE,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AArBD,wBAqBC"}
@@ -0,0 +1,2 @@
1
+ import Family from './Family';
2
+ export = Family;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const Family_1 = __importDefault(require("./Family"));
6
+ module.exports = Family_1.default;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/directives/auth/index.ts"],"names":[],"mappings":";;;;AAAA,sDAA6B;AAE7B,iBAAS,gBAAM,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type Remote, type Scheme } from './types';
2
+ export declare const PROVIDERS: Record<Scheme, Remote>;
3
+ export declare const PRIMARY: Scheme;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRIMARY = exports.PROVIDERS = void 0;
4
+ exports.PROVIDERS = {
5
+ basic: 'basic',
6
+ token: 'tokens'
7
+ };
8
+ exports.PRIMARY = 'token';
9
+ //# sourceMappingURL=schemes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemes.js","sourceRoot":"","sources":["../../../source/directives/auth/schemes.ts"],"names":[],"mappings":";;;AAEa,QAAA,SAAS,GAA2B;IAC/C,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,QAAQ;CAChB,CAAA;AAEY,QAAA,OAAO,GAAW,OAAO,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { type Scheme } from './types';
2
+ export declare function split(authorization: string): [Scheme, string];
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.split = void 0;
27
+ const http = __importStar(require("../../HTTP"));
28
+ function split(authorization) {
29
+ const space = authorization.indexOf(' ');
30
+ if (space === -1)
31
+ throw new http.Unauthorized('Malformed authorization header.');
32
+ const Scheme = authorization.slice(0, space);
33
+ const scheme = Scheme.toLowerCase();
34
+ const value = authorization.slice(space + 1);
35
+ return [scheme, value];
36
+ }
37
+ exports.split = split;
38
+ //# sourceMappingURL=split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.js","sourceRoot":"","sources":["../../../source/directives/auth/split.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAGlC,SAAgB,KAAK,CAAE,aAAqB;IAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAExC,IAAI,KAAK,KAAK,CAAC,CAAC;QACd,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAY,CAAA;IAC7C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IAE5C,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AACxB,CAAC;AAXD,sBAWC"}
@@ -0,0 +1,31 @@
1
+ import { type Component } from '@toa.io/core';
2
+ import { type Maybe } from '@toa.io/types';
3
+ import { type Parameter } from '../../RTD';
4
+ import type * as http from '../../HTTP';
5
+ import type * as directive from '../../Directive';
6
+ export interface Directive {
7
+ authorize: (identity: Identity | null, input: Input, parameters: Parameter[]) => boolean | Promise<boolean>;
8
+ reply?: (identity: Identity | null) => http.OutgoingMessage;
9
+ settle?: (request: Input, response: http.OutgoingMessage) => Promise<void>;
10
+ }
11
+ export interface Identity {
12
+ readonly id: string;
13
+ scheme: string;
14
+ roles?: string[];
15
+ refresh: boolean;
16
+ }
17
+ export interface Extension {
18
+ identity: Identity | null;
19
+ }
20
+ export interface Ban {
21
+ banned: boolean;
22
+ }
23
+ export type Input = directive.Input & Extension;
24
+ export type AuthenticationResult = Maybe<{
25
+ identity: Identity;
26
+ refresh: boolean;
27
+ }>;
28
+ export type Scheme = 'basic' | 'token';
29
+ export type Remote = 'basic' | 'tokens' | 'roles' | 'bans';
30
+ export type Discovery = Record<Remote, Promise<Component>>;
31
+ export type Schemes = Record<Scheme, Component>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../source/directives/auth/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { AuthenticatedRequest, Directive } from './types';
2
+ export declare class Control implements Directive {
3
+ protected readonly value: string;
4
+ private cache;
5
+ constructor(value: string);
6
+ set(request: AuthenticatedRequest, headers: Headers): void;
7
+ protected resolve(request: AuthenticatedRequest): string;
8
+ private mask;
9
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Control = void 0;
4
+ const matchacho_1 = require("matchacho");
5
+ class Control {
6
+ value;
7
+ cache = null;
8
+ constructor(value) {
9
+ this.value = value;
10
+ }
11
+ set(request, headers) {
12
+ if (!['GET', 'HEAD', 'OPTIONS'].includes(request.method))
13
+ return;
14
+ this.cache ??= this.resolve(request);
15
+ headers.set('cache-control', this.cache);
16
+ }
17
+ resolve(request) {
18
+ if (request.identity === null)
19
+ return this.value;
20
+ const directives = this.mask();
21
+ if ((directives & (PUBLIC | NO_CACHE)) === PUBLIC)
22
+ return 'no-cache, ' + this.value;
23
+ if ((directives & (PUBLIC | PRIVATE)) === 0)
24
+ return 'private, ' + this.value;
25
+ return this.value;
26
+ }
27
+ mask() {
28
+ const directives = this.value.match(DIRECTIVES_RX);
29
+ if (directives === null)
30
+ return 0;
31
+ let mask = 0;
32
+ for (const directive of directives)
33
+ mask |= (0, matchacho_1.match)(directive, 'private', PRIVATE, 'public', PUBLIC, 'no-cache', NO_CACHE, 0);
34
+ return mask;
35
+ }
36
+ }
37
+ exports.Control = Control;
38
+ const DIRECTIVES_RX = /\b(private|public|no-cache)\b/ig;
39
+ const PUBLIC = 1;
40
+ const PRIVATE = 2;
41
+ const NO_CACHE = 4;
42
+ //# sourceMappingURL=Control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Control.js","sourceRoot":"","sources":["../../../source/directives/cache/Control.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAGjC,MAAa,OAAO;IACC,KAAK,CAAQ;IACxB,KAAK,GAAkB,IAAI,CAAA;IAEnC,YAAoB,KAAa;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAEM,GAAG,CAAE,OAA6B,EAAE,OAAgB;QACzD,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;YACtD,OAAM;QAER,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAEpC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;IAES,OAAO,CAAE,OAA6B;QAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAA;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE9B,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,KAAK,MAAM;YAC/C,OAAO,YAAY,GAAG,IAAI,CAAC,KAAK,CAAA;QAElC,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC;YACzC,OAAO,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;QAEjC,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAEO,IAAI;QACV,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAElD,IAAI,UAAU,KAAK,IAAI;YACrB,OAAO,CAAC,CAAA;QAEV,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,KAAK,MAAM,SAAS,IAAI,UAAU;YAChC,IAAI,IAAI,IAAA,iBAAK,EAAS,SAAS,EAC7B,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,QAAQ,EACpB,CAAC,CAAC,CAAA;QAEN,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAjDD,0BAiDC;AAED,MAAM,aAAa,GAAG,iCAAiC,CAAA;AAEvD,MAAM,MAAM,GAAG,CAAC,CAAA;AAChB,MAAM,OAAO,GAAG,CAAC,CAAA;AACjB,MAAM,QAAQ,GAAG,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Control } from './Control';
2
+ export declare class Exact extends Control {
3
+ protected resolve(): string;
4
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Exact = void 0;
4
+ const Control_1 = require("./Control");
5
+ class Exact extends Control_1.Control {
6
+ resolve() {
7
+ return this.value;
8
+ }
9
+ }
10
+ exports.Exact = Exact;
11
+ //# sourceMappingURL=Exact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Exact.js","sourceRoot":"","sources":["../../../source/directives/cache/Exact.ts"],"names":[],"mappings":";;;AAAA,uCAAmC;AAEnC,MAAa,KAAM,SAAQ,iBAAO;IACb,OAAO;QACxB,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF;AAJD,sBAIC"}
@@ -0,0 +1,12 @@
1
+ import { type Input, type Output, type Family } from '../../Directive';
2
+ import { type Directive } from './types';
3
+ import type * as http from '../../HTTP';
4
+ declare class Cache implements Family<Directive> {
5
+ readonly name: string;
6
+ readonly mandatory: boolean;
7
+ create(name: string, value: any): Directive;
8
+ preflight(): Output;
9
+ settle(directives: Directive[], request: Input, response: http.OutgoingMessage): Promise<void>;
10
+ }
11
+ declare const _default: Cache;
12
+ export = _default;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ const Control_1 = require("./Control");
3
+ const Exact_1 = require("./Exact");
4
+ class Cache {
5
+ name = 'cache';
6
+ mandatory = false;
7
+ create(name, value) {
8
+ const Class = constructors[name];
9
+ if (Class === undefined)
10
+ throw new Error(`Directive '${name}' is not provided by the '${this.name}' family.`);
11
+ return new Class(value);
12
+ }
13
+ preflight() {
14
+ return null;
15
+ }
16
+ async settle(directives, request, response) {
17
+ response.headers ??= new Headers();
18
+ directives[0]?.set(request, response.headers);
19
+ }
20
+ }
21
+ const constructors = {
22
+ control: Control_1.Control,
23
+ exact: Exact_1.Exact
24
+ };
25
+ module.exports = new Cache();
26
+ //# sourceMappingURL=Family.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Family.js","sourceRoot":"","sources":["../../../source/directives/cache/Family.ts"],"names":[],"mappings":";AACA,uCAAmC;AAEnC,mCAA+B;AAG/B,MAAM,KAAK;IACO,IAAI,GAAW,OAAO,CAAA;IACtB,SAAS,GAAY,KAAK,CAAA;IAEnC,MAAM,CAAE,IAAY,EAAE,KAAU;QACrC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,KAAK,KAAK,SAAS;YACrB,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,6BAA6B,IAAI,CAAC,IAAI,WAAW,CAAC,CAAA;QAEtF,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,KAAK,CAAC,MAAM,CAClB,UAAuB,EAAE,OAAc,EAAE,QAA8B;QACtE,QAAQ,CAAC,OAAO,KAAK,IAAI,OAAO,EAAE,CAAA;QAClC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;CACF;AAED,MAAM,YAAY,GAAkD;IAClE,OAAO,EAAE,iBAAO;IAChB,KAAK,EAAE,aAAK;CACb,CAAA;AAED,iBAAS,IAAI,KAAK,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ import Family from './Family';
2
+ export = Family;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const Family_1 = __importDefault(require("./Family"));
6
+ module.exports = Family_1.default;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/directives/cache/index.ts"],"names":[],"mappings":";;;;AAAA,sDAA6B;AAE7B,iBAAS,gBAAM,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type Input } from '../../Directive';
2
+ export interface Directive {
3
+ set: (input: Input, headers: Headers) => void;
4
+ }
5
+ export interface AuthenticatedRequest extends Input {
6
+ identity?: unknown | null;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../source/directives/cache/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { type Input, type Output, type Family } from '../../Directive';
2
+ import { type Directive } from './types';
3
+ declare class Development implements Family<Directive> {
4
+ readonly name: string;
5
+ readonly mandatory: boolean;
6
+ create(name: string, value: any): Directive;
7
+ preflight(directives: Directive[], input: Input): Output;
8
+ }
9
+ declare const _default: Development;
10
+ export = _default;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ const Stub_1 = require("./Stub");
3
+ const Throw_1 = require("./Throw");
4
+ class Development {
5
+ name = 'dev';
6
+ mandatory = false;
7
+ create(name, value) {
8
+ const Class = constructors[name];
9
+ if (Class === undefined)
10
+ throw new Error(`Directive '${name}' is not provided by the '${this.name}' family.`);
11
+ return new Class(value);
12
+ }
13
+ preflight(directives, input) {
14
+ for (const directive of directives) {
15
+ const output = directive.apply(input);
16
+ if (output !== null)
17
+ return output;
18
+ }
19
+ return null;
20
+ }
21
+ }
22
+ const constructors = {
23
+ stub: Stub_1.Stub,
24
+ throw: Throw_1.Throw
25
+ };
26
+ module.exports = new Development();
27
+ //# sourceMappingURL=Family.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Family.js","sourceRoot":"","sources":["../../../source/directives/dev/Family.ts"],"names":[],"mappings":";AACA,iCAA6B;AAC7B,mCAA+B;AAG/B,MAAM,WAAW;IACC,IAAI,GAAW,KAAK,CAAA;IACpB,SAAS,GAAY,KAAK,CAAA;IAEnC,MAAM,CAAE,IAAY,EAAE,KAAU;QACrC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,KAAK,KAAK,SAAS;YACrB,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,6BAA6B,IAAI,CAAC,IAAI,WAAW,CAAC,CAAA;QAEtF,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAEM,SAAS,CAAE,UAAuB,EAAE,KAAY;QACrD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAErC,IAAI,MAAM,KAAK,IAAI;gBACjB,OAAO,MAAM,CAAA;SAChB;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,MAAM,YAAY,GAAkD;IAClE,IAAI,EAAE,WAAI;IACV,KAAK,EAAE,aAAK;CACb,CAAA;AAED,iBAAS,IAAI,WAAW,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type Output } from '../../Directive';
2
+ import { type Directive } from './types';
3
+ export declare class Stub implements Directive {
4
+ private readonly value;
5
+ constructor(value: any);
6
+ apply(): Output;
7
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Stub = void 0;
4
+ class Stub {
5
+ value;
6
+ constructor(value) {
7
+ this.value = value;
8
+ }
9
+ apply() {
10
+ return { body: this.value };
11
+ }
12
+ }
13
+ exports.Stub = Stub;
14
+ //# sourceMappingURL=Stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stub.js","sourceRoot":"","sources":["../../../source/directives/dev/Stub.ts"],"names":[],"mappings":";;;AAGA,MAAa,IAAI;IACE,KAAK,CAAK;IAE3B,YAAoB,KAAU;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAEM,KAAK;QACV,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;CACF;AAVD,oBAUC"}
@@ -0,0 +1,7 @@
1
+ import { type Output } from '../../Directive';
2
+ import { type Directive } from './types';
3
+ export declare class Throw implements Directive {
4
+ private readonly message;
5
+ constructor(message: any);
6
+ apply(): Output;
7
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Throw = void 0;
4
+ class Throw {
5
+ message;
6
+ constructor(message) {
7
+ this.message = message;
8
+ }
9
+ apply() {
10
+ throw new Error(this.message);
11
+ }
12
+ }
13
+ exports.Throw = Throw;
14
+ //# sourceMappingURL=Throw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Throw.js","sourceRoot":"","sources":["../../../source/directives/dev/Throw.ts"],"names":[],"mappings":";;;AAGA,MAAa,KAAK;IACC,OAAO,CAAK;IAE7B,YAAoB,OAAY;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,KAAK;QACV,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;CACF;AAVD,sBAUC"}
@@ -0,0 +1,2 @@
1
+ import Family from './Family';
2
+ export = Family;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const Family_1 = __importDefault(require("./Family"));
6
+ module.exports = Family_1.default;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/directives/dev/index.ts"],"names":[],"mappings":";;;;AAAA,sDAA6B;AAE7B,iBAAS,gBAAM,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { type Input, type Output } from '../../Directive';
2
+ export interface Directive {
3
+ apply: (input: Input) => Output;
4
+ }