@toa.io/extensions.exposition 0.20.0-alpha.1 → 0.20.0-alpha.2

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 (225) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/documentation/notes/sse.md +71 -0
  3. package/documentation/protocol.md +4 -1
  4. package/features/access.feature +48 -42
  5. package/features/annotation.feature +6 -4
  6. package/features/body.feature +24 -0
  7. package/features/directives.feature +2 -2
  8. package/features/dynamic.feature +11 -1
  9. package/features/errors.feature +14 -29
  10. package/features/identity.basic.feature +47 -6
  11. package/features/identity.tokens.feature +19 -16
  12. package/features/steps/Gateway.ts +26 -18
  13. package/features/steps/components/echo/manifest.toa.yaml +9 -0
  14. package/features/steps/components/echo/operations/affect.js +7 -0
  15. package/features/steps/components/echo/operations/compute.js +7 -0
  16. package/features/steps/components/greeter/manifest.toa.yaml +0 -4
  17. package/features/steps/components/greeter/operations/greet.js +1 -1
  18. package/features/steps/components/sequences/manifest.toa.yaml +10 -0
  19. package/features/steps/components/sequences/operations/numbers.js +7 -0
  20. package/features/steps/components/sequences/operations/tokens.js +16 -0
  21. package/features/streams.feature +26 -0
  22. package/package.json +7 -6
  23. package/readme.md +2 -0
  24. package/schemas/annotation.cos.yaml +5 -4
  25. package/schemas/method.cos.yaml +0 -1
  26. package/schemas/query.cos.yaml +1 -0
  27. package/source/Annotation.ts +1 -0
  28. package/source/Composition.ts +1 -2
  29. package/source/Endpoint.ts +5 -3
  30. package/source/Factory.ts +8 -10
  31. package/source/HTTP/Server.ts +1 -1
  32. package/source/HTTP/messages.ts +18 -6
  33. package/source/Mapping.ts +12 -9
  34. package/source/RTD/Node.ts +5 -5
  35. package/source/RTD/Route.ts +5 -4
  36. package/source/RTD/Tree.ts +2 -5
  37. package/source/RTD/syntax/parse.ts +1 -1
  38. package/source/Remotes.test.ts +2 -1
  39. package/source/Remotes.ts +2 -0
  40. package/source/deployment.ts +9 -2
  41. package/source/directives/dev/Family.ts +3 -1
  42. package/source/directives/dev/Throw.ts +14 -0
  43. package/source/manifest.test.ts +3 -1
  44. package/source/manifest.ts +22 -9
  45. package/transpiled/Annotation.d.ts +0 -6
  46. package/transpiled/Annotation.js +0 -3
  47. package/transpiled/Annotation.js.map +0 -1
  48. package/transpiled/Branch.d.ts +0 -7
  49. package/transpiled/Branch.js +0 -3
  50. package/transpiled/Branch.js.map +0 -1
  51. package/transpiled/Composition.d.ts +0 -14
  52. package/transpiled/Composition.js +0 -43
  53. package/transpiled/Composition.js.map +0 -1
  54. package/transpiled/Context.d.ts +0 -5
  55. package/transpiled/Context.js +0 -3
  56. package/transpiled/Context.js.map +0 -1
  57. package/transpiled/Directive.d.ts +0 -32
  58. package/transpiled/Directive.js +0 -76
  59. package/transpiled/Directive.js.map +0 -1
  60. package/transpiled/Endpoint.d.ts +0 -20
  61. package/transpiled/Endpoint.js +0 -44
  62. package/transpiled/Endpoint.js.map +0 -1
  63. package/transpiled/Factory.d.ts +0 -11
  64. package/transpiled/Factory.js +0 -67
  65. package/transpiled/Factory.js.map +0 -1
  66. package/transpiled/Gateway.d.ts +0 -19
  67. package/transpiled/Gateway.js +0 -90
  68. package/transpiled/Gateway.js.map +0 -1
  69. package/transpiled/HTTP/Server.d.ts +0 -22
  70. package/transpiled/HTTP/Server.fixtures.d.ts +0 -12
  71. package/transpiled/HTTP/Server.fixtures.js +0 -36
  72. package/transpiled/HTTP/Server.fixtures.js.map +0 -1
  73. package/transpiled/HTTP/Server.js +0 -111
  74. package/transpiled/HTTP/Server.js.map +0 -1
  75. package/transpiled/HTTP/exceptions.d.ts +0 -39
  76. package/transpiled/HTTP/exceptions.js +0 -78
  77. package/transpiled/HTTP/exceptions.js.map +0 -1
  78. package/transpiled/HTTP/formats/index.d.ts +0 -8
  79. package/transpiled/HTTP/formats/index.js +0 -38
  80. package/transpiled/HTTP/formats/index.js.map +0 -1
  81. package/transpiled/HTTP/formats/json.d.ts +0 -4
  82. package/transpiled/HTTP/formats/json.js +0 -15
  83. package/transpiled/HTTP/formats/json.js.map +0 -1
  84. package/transpiled/HTTP/formats/msgpack.d.ts +0 -4
  85. package/transpiled/HTTP/formats/msgpack.js +0 -36
  86. package/transpiled/HTTP/formats/msgpack.js.map +0 -1
  87. package/transpiled/HTTP/formats/text.d.ts +0 -4
  88. package/transpiled/HTTP/formats/text.js +0 -13
  89. package/transpiled/HTTP/formats/text.js.map +0 -1
  90. package/transpiled/HTTP/formats/yaml.d.ts +0 -4
  91. package/transpiled/HTTP/formats/yaml.js +0 -39
  92. package/transpiled/HTTP/formats/yaml.js.map +0 -1
  93. package/transpiled/HTTP/index.d.ts +0 -3
  94. package/transpiled/HTTP/index.js +0 -20
  95. package/transpiled/HTTP/index.js.map +0 -1
  96. package/transpiled/HTTP/messages.d.ts +0 -27
  97. package/transpiled/HTTP/messages.js +0 -49
  98. package/transpiled/HTTP/messages.js.map +0 -1
  99. package/transpiled/Mapping.d.ts +0 -8
  100. package/transpiled/Mapping.js +0 -35
  101. package/transpiled/Mapping.js.map +0 -1
  102. package/transpiled/Query.d.ts +0 -13
  103. package/transpiled/Query.js +0 -107
  104. package/transpiled/Query.js.map +0 -1
  105. package/transpiled/RTD/Context.d.ts +0 -11
  106. package/transpiled/RTD/Context.js +0 -3
  107. package/transpiled/RTD/Context.js.map +0 -1
  108. package/transpiled/RTD/Directives.d.ts +0 -7
  109. package/transpiled/RTD/Directives.js +0 -3
  110. package/transpiled/RTD/Directives.js.map +0 -1
  111. package/transpiled/RTD/Endpoint.d.ts +0 -9
  112. package/transpiled/RTD/Endpoint.js +0 -3
  113. package/transpiled/RTD/Endpoint.js.map +0 -1
  114. package/transpiled/RTD/Match.d.ts +0 -11
  115. package/transpiled/RTD/Match.js +0 -3
  116. package/transpiled/RTD/Match.js.map +0 -1
  117. package/transpiled/RTD/Method.d.ts +0 -9
  118. package/transpiled/RTD/Method.js +0 -16
  119. package/transpiled/RTD/Method.js.map +0 -1
  120. package/transpiled/RTD/Node.d.ts +0 -21
  121. package/transpiled/RTD/Node.js +0 -61
  122. package/transpiled/RTD/Node.js.map +0 -1
  123. package/transpiled/RTD/Route.d.ts +0 -14
  124. package/transpiled/RTD/Route.js +0 -48
  125. package/transpiled/RTD/Route.js.map +0 -1
  126. package/transpiled/RTD/Tree.d.ts +0 -14
  127. package/transpiled/RTD/Tree.js +0 -45
  128. package/transpiled/RTD/Tree.js.map +0 -1
  129. package/transpiled/RTD/factory.d.ts +0 -6
  130. package/transpiled/RTD/factory.js +0 -36
  131. package/transpiled/RTD/factory.js.map +0 -1
  132. package/transpiled/RTD/index.d.ts +0 -8
  133. package/transpiled/RTD/index.js +0 -38
  134. package/transpiled/RTD/index.js.map +0 -1
  135. package/transpiled/RTD/segment.d.ts +0 -8
  136. package/transpiled/RTD/segment.js +0 -23
  137. package/transpiled/RTD/segment.js.map +0 -1
  138. package/transpiled/RTD/syntax/index.d.ts +0 -2
  139. package/transpiled/RTD/syntax/index.js +0 -19
  140. package/transpiled/RTD/syntax/index.js.map +0 -1
  141. package/transpiled/RTD/syntax/parse.d.ts +0 -4
  142. package/transpiled/RTD/syntax/parse.js +0 -128
  143. package/transpiled/RTD/syntax/parse.js.map +0 -1
  144. package/transpiled/RTD/syntax/types.d.ts +0 -41
  145. package/transpiled/RTD/syntax/types.js +0 -5
  146. package/transpiled/RTD/syntax/types.js.map +0 -1
  147. package/transpiled/Remotes.d.ts +0 -7
  148. package/transpiled/Remotes.js +0 -19
  149. package/transpiled/Remotes.js.map +0 -1
  150. package/transpiled/Tenant.d.ts +0 -12
  151. package/transpiled/Tenant.js +0 -30
  152. package/transpiled/Tenant.js.map +0 -1
  153. package/transpiled/deployment.d.ts +0 -3
  154. package/transpiled/deployment.js +0 -61
  155. package/transpiled/deployment.js.map +0 -1
  156. package/transpiled/directives/auth/Anonymous.d.ts +0 -6
  157. package/transpiled/directives/auth/Anonymous.js +0 -17
  158. package/transpiled/directives/auth/Anonymous.js.map +0 -1
  159. package/transpiled/directives/auth/Echo.d.ts +0 -6
  160. package/transpiled/directives/auth/Echo.js +0 -13
  161. package/transpiled/directives/auth/Echo.js.map +0 -1
  162. package/transpiled/directives/auth/Family.d.ts +0 -20
  163. package/transpiled/directives/auth/Family.js +0 -125
  164. package/transpiled/directives/auth/Family.js.map +0 -1
  165. package/transpiled/directives/auth/Id.d.ts +0 -7
  166. package/transpiled/directives/auth/Id.js +0 -17
  167. package/transpiled/directives/auth/Id.js.map +0 -1
  168. package/transpiled/directives/auth/Incept.d.ts +0 -10
  169. package/transpiled/directives/auth/Incept.js +0 -59
  170. package/transpiled/directives/auth/Incept.js.map +0 -1
  171. package/transpiled/directives/auth/Role.d.ts +0 -11
  172. package/transpiled/directives/auth/Role.js +0 -44
  173. package/transpiled/directives/auth/Role.js.map +0 -1
  174. package/transpiled/directives/auth/Rule.d.ts +0 -9
  175. package/transpiled/directives/auth/Rule.js +0 -22
  176. package/transpiled/directives/auth/Rule.js.map +0 -1
  177. package/transpiled/directives/auth/Scheme.d.ts +0 -7
  178. package/transpiled/directives/auth/Scheme.js +0 -47
  179. package/transpiled/directives/auth/Scheme.js.map +0 -1
  180. package/transpiled/directives/auth/index.d.ts +0 -2
  181. package/transpiled/directives/auth/index.js +0 -7
  182. package/transpiled/directives/auth/index.js.map +0 -1
  183. package/transpiled/directives/auth/schemes.d.ts +0 -3
  184. package/transpiled/directives/auth/schemes.js +0 -9
  185. package/transpiled/directives/auth/schemes.js.map +0 -1
  186. package/transpiled/directives/auth/split.d.ts +0 -2
  187. package/transpiled/directives/auth/split.js +0 -38
  188. package/transpiled/directives/auth/split.js.map +0 -1
  189. package/transpiled/directives/auth/types.d.ts +0 -31
  190. package/transpiled/directives/auth/types.js +0 -3
  191. package/transpiled/directives/auth/types.js.map +0 -1
  192. package/transpiled/directives/dev/Family.d.ts +0 -10
  193. package/transpiled/directives/dev/Family.js +0 -25
  194. package/transpiled/directives/dev/Family.js.map +0 -1
  195. package/transpiled/directives/dev/Stub.d.ts +0 -7
  196. package/transpiled/directives/dev/Stub.js +0 -14
  197. package/transpiled/directives/dev/Stub.js.map +0 -1
  198. package/transpiled/directives/dev/index.d.ts +0 -2
  199. package/transpiled/directives/dev/index.js +0 -7
  200. package/transpiled/directives/dev/index.js.map +0 -1
  201. package/transpiled/directives/dev/types.d.ts +0 -4
  202. package/transpiled/directives/dev/types.js +0 -3
  203. package/transpiled/directives/dev/types.js.map +0 -1
  204. package/transpiled/directives/index.d.ts +0 -2
  205. package/transpiled/directives/index.js +0 -10
  206. package/transpiled/directives/index.js.map +0 -1
  207. package/transpiled/discovery.d.ts +0 -1
  208. package/transpiled/discovery.js +0 -3
  209. package/transpiled/discovery.js.map +0 -1
  210. package/transpiled/exceptions.d.ts +0 -2
  211. package/transpiled/exceptions.js +0 -39
  212. package/transpiled/exceptions.js.map +0 -1
  213. package/transpiled/index.d.ts +0 -5
  214. package/transpiled/index.js +0 -12
  215. package/transpiled/index.js.map +0 -1
  216. package/transpiled/manifest.d.ts +0 -3
  217. package/transpiled/manifest.js +0 -30
  218. package/transpiled/manifest.js.map +0 -1
  219. package/transpiled/root.d.ts +0 -2
  220. package/transpiled/root.js +0 -39
  221. package/transpiled/root.js.map +0 -1
  222. package/transpiled/schemas.d.ts +0 -3
  223. package/transpiled/schemas.js +0 -14
  224. package/transpiled/schemas.js.map +0 -1
  225. package/transpiled/tsconfig.tsbuildinfo +0 -1
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Remotes = void 0;
4
- const core_1 = require("@toa.io/core");
5
- class Remotes extends core_1.Connector {
6
- boot;
7
- constructor(boot) {
8
- super();
9
- this.boot = boot;
10
- }
11
- async discover(namespace, name) {
12
- const locator = new core_1.Locator(name, namespace);
13
- const remote = await this.boot.remote(locator);
14
- this.depends(remote);
15
- return remote;
16
- }
17
- }
18
- exports.Remotes = Remotes;
19
- //# sourceMappingURL=Remotes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Remotes.js","sourceRoot":"","sources":["../source/Remotes.ts"],"names":[],"mappings":";;;AAAA,uCAAiE;AAGjE,MAAa,OAAQ,SAAQ,gBAAS;IACnB,IAAI,CAAY;IAEjC,YAAoB,IAAgB;QAClC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAE,SAAiB,EAAE,IAAY;QACpD,MAAM,OAAO,GAAG,IAAI,cAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAEpB,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAhBD,0BAgBC"}
@@ -1,12 +0,0 @@
1
- import { Connector, type Locator, type bindings } from '@toa.io/core';
2
- import { type Label } from './discovery';
3
- import type * as RTD from './RTD/syntax';
4
- export declare class Tenant extends Connector {
5
- private readonly broadcast;
6
- private readonly branch;
7
- constructor(broadcast: Broadcast, locator: Locator, node: RTD.Node);
8
- open(): Promise<void>;
9
- private expose;
10
- }
11
- type Broadcast = bindings.Broadcast<Label>;
12
- export {};
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Tenant = void 0;
4
- const core_1 = require("@toa.io/core");
5
- class Tenant extends core_1.Connector {
6
- broadcast;
7
- branch;
8
- constructor(broadcast, locator, node) {
9
- super();
10
- this.broadcast = broadcast;
11
- this.branch = {
12
- namespace: locator.namespace,
13
- component: locator.name,
14
- isolated: locator.namespace === 'identity',
15
- node
16
- };
17
- this.depends(broadcast);
18
- }
19
- async open() {
20
- await this.expose();
21
- await this.broadcast.receive('ping', this.expose.bind(this));
22
- console.info('Exposition Tenant for ' +
23
- `'${this.branch.namespace}.${this.branch.component}' has started.`);
24
- }
25
- async expose() {
26
- await this.broadcast.transmit('expose', this.branch);
27
- }
28
- }
29
- exports.Tenant = Tenant;
30
- //# sourceMappingURL=Tenant.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tenant.js","sourceRoot":"","sources":["../source/Tenant.ts"],"names":[],"mappings":";;;AAAA,uCAAqE;AAKrE,MAAa,MAAO,SAAQ,gBAAS;IAClB,SAAS,CAAW;IACpB,MAAM,CAAQ;IAE/B,YAAoB,SAAoB,EAAE,OAAgB,EAAE,IAAc;QACxE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAE1B,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,IAAI;YACvB,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,UAAU;YAC1C,IAAI;SACL,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;IAEe,KAAK,CAAC,IAAI;QACxB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACnB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE5D,OAAO,CAAC,IAAI,CAAC,wBAAwB;YACnC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,gBAAgB,CAAC,CAAA;IACvE,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACtD,CAAC;CACF;AA9BD,wBA8BC"}
@@ -1,3 +0,0 @@
1
- import { type Dependency } from '@toa.io/operations';
2
- import { type Annotation } from './Annotation';
3
- export declare function deployment(_: unknown, annotation: Annotation | undefined): Dependency;
@@ -1,61 +0,0 @@
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.deployment = void 0;
27
- const generic_1 = require("@toa.io/generic");
28
- const schemas = __importStar(require("./schemas"));
29
- const Directive_1 = require("./Directive");
30
- const Composition_1 = require("./Composition");
31
- const syntax_1 = require("./RTD/syntax");
32
- function deployment(_, annotation) {
33
- const labels = (0, Composition_1.components)().labels;
34
- const service = {
35
- group: 'exposition',
36
- name: 'gateway',
37
- port: 8000,
38
- // eslint-disable-next-line @typescript-eslint/no-var-requires
39
- version: require('../package.json').version,
40
- variables: [],
41
- components: labels
42
- };
43
- if (annotation?.host !== undefined)
44
- service.ingress = {
45
- host: annotation.host,
46
- class: annotation.class,
47
- annotations: annotation.annotations
48
- };
49
- if (annotation?.['/'] !== undefined) {
50
- annotation['/'] = (0, syntax_1.parse)(annotation['/'], Directive_1.shortcuts);
51
- service.variables.push({
52
- name: 'TOA_EXPOSITION',
53
- value: (0, generic_1.encode)(annotation['/'])
54
- });
55
- }
56
- if (annotation !== undefined)
57
- schemas.annotaion.validate(annotation);
58
- return { services: [service] };
59
- }
60
- exports.deployment = deployment;
61
- //# sourceMappingURL=deployment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../source/deployment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAAwC;AAExC,mDAAoC;AACpC,2CAAuC;AACvC,+CAA0C;AAC1C,yCAAoC;AAEpC,SAAgB,UAAU,CAAE,CAAU,EAAE,UAAkC;IACxE,MAAM,MAAM,GAAG,IAAA,wBAAU,GAAE,CAAC,MAAM,CAAA;IAElC,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI;QACV,8DAA8D;QAC9D,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO;QAC3C,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,MAAM;KACnB,CAAA;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,SAAS;QAChC,OAAO,CAAC,OAAO,GAAG;YAChB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC,CAAA;IAEH,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;QACnC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAA,cAAK,EAAC,UAAU,CAAC,GAAG,CAAC,EAAE,qBAAS,CAAC,CAAA;QAEnD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,IAAA,gBAAM,EAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC/B,CAAC,CAAA;KACH;IAED,IAAI,UAAU,KAAK,SAAS;QAC1B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAExC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAA;AAChC,CAAC;AAjCD,gCAiCC"}
@@ -1,6 +0,0 @@
1
- import { type Directive, type Input } from './types';
2
- export declare class Anonymous implements Directive {
3
- private readonly allow;
4
- constructor(allow: boolean);
5
- authorize(_: any, input: Input): boolean;
6
- }
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Anonymous = void 0;
4
- class Anonymous {
5
- allow;
6
- constructor(allow) {
7
- this.allow = allow;
8
- }
9
- authorize(_, input) {
10
- if ('authorization' in input.headers)
11
- return false;
12
- else
13
- return this.allow;
14
- }
15
- }
16
- exports.Anonymous = Anonymous;
17
- //# sourceMappingURL=Anonymous.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Anonymous.js","sourceRoot":"","sources":["../../../source/directives/auth/Anonymous.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IACH,KAAK,CAAS;IAE/B,YAAoB,KAAc;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAEM,SAAS,CAAE,CAAM,EAAE,KAAY;QACpC,IAAI,eAAe,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;;YAC7C,OAAO,IAAI,CAAC,KAAK,CAAA;IACxB,CAAC;CACF;AAXD,8BAWC"}
@@ -1,6 +0,0 @@
1
- import { type OutgoingMessage } from '../../HTTP';
2
- import { type Directive, type Identity } from './types';
3
- export declare class Echo implements Directive {
4
- authorize(identity: Identity | null): boolean;
5
- reply(identity: Identity | null): OutgoingMessage;
6
- }
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Echo = void 0;
4
- class Echo {
5
- authorize(identity) {
6
- return identity !== null;
7
- }
8
- reply(identity) {
9
- return { body: identity };
10
- }
11
- }
12
- exports.Echo = Echo;
13
- //# sourceMappingURL=Echo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Echo.js","sourceRoot":"","sources":["../../../source/directives/auth/Echo.ts"],"names":[],"mappings":";;;AAGA,MAAa,IAAI;IACR,SAAS,CAAE,QAAyB;QACzC,OAAO,QAAQ,KAAK,IAAI,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAE,QAAyB;QACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3B,CAAC;CACF;AARD,oBAQC"}
@@ -1,20 +0,0 @@
1
- import { type Parameter } from '../../RTD';
2
- import { type Family, type Output } from '../../Directive';
3
- import { type Remotes } from '../../Remotes';
4
- import * as http from '../../HTTP';
5
- import { type Directive, type Extension, type Input } from './types';
6
- declare class Authorization implements Family<Directive, Extension> {
7
- readonly name: string;
8
- readonly mandatory: boolean;
9
- private readonly schemes;
10
- private readonly discovery;
11
- private tokens;
12
- private bans;
13
- create(name: string, value: any, remotes: Remotes): Directive;
14
- preflight(directives: Directive[], input: Input, parameters: Parameter[]): Promise<Output>;
15
- settle(directives: Directive[], request: Input, response: http.OutgoingMessage): Promise<void>;
16
- private resolve;
17
- private banned;
18
- }
19
- declare const _default: Authorization;
20
- export = _default;
@@ -1,125 +0,0 @@
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
- const nopeable_1 = require("nopeable");
26
- const http = __importStar(require("../../HTTP"));
27
- const Anonymous_1 = require("./Anonymous");
28
- const Id_1 = require("./Id");
29
- const Role_1 = require("./Role");
30
- const Rule_1 = require("./Rule");
31
- const Incept_1 = require("./Incept");
32
- const split_1 = require("./split");
33
- const schemes_1 = require("./schemes");
34
- const Scheme_1 = require("./Scheme");
35
- const Echo_1 = require("./Echo");
36
- class Authorization {
37
- name = 'auth';
38
- mandatory = true;
39
- schemes = {};
40
- discovery = {};
41
- tokens = null;
42
- bans = null;
43
- create(name, value, remotes) {
44
- const Class = CLASSES[name];
45
- if (Class === undefined)
46
- throw new Error(`Directive '${name}' is not provided by the '${this.name}' family.`);
47
- for (const name of REMOTES)
48
- this.discovery[name] ??= remotes.discover('identity', name);
49
- if (Class === Role_1.Role)
50
- return new Class(value, this.discovery.roles);
51
- else if (Class === Rule_1.Rule)
52
- return new Class(value, this.create.bind(this));
53
- else if (Class === Incept_1.Incept)
54
- return new Class(value, this.discovery);
55
- else
56
- return new Class(value);
57
- }
58
- async preflight(directives, input, parameters) {
59
- const identity = await this.resolve(input.headers.authorization);
60
- input.identity = identity;
61
- for (const directive of directives) {
62
- const allow = await directive.authorize(identity, input, parameters);
63
- if (allow)
64
- return directive.reply?.(identity) ?? null;
65
- }
66
- if (identity === null)
67
- throw new http.Unauthorized();
68
- else
69
- throw new http.Forbidden();
70
- }
71
- async settle(directives, request, response) {
72
- for (const directive of directives)
73
- await directive.settle?.(request, response);
74
- const identity = request.identity;
75
- if (identity === null)
76
- return;
77
- if (identity.scheme === schemes_1.PRIMARY && !identity.refresh)
78
- return;
79
- // Role directive may have already set the value
80
- if (identity.roles === undefined)
81
- await Role_1.Role.set(identity, this.discovery.roles);
82
- this.tokens ??= await this.discovery.tokens;
83
- const token = await this.tokens.invoke('encrypt', { input: { identity } });
84
- const authorization = `Token ${token}`;
85
- if (response.headers === undefined)
86
- response.headers = {};
87
- response.headers.authorization = authorization;
88
- }
89
- async resolve(authorization) {
90
- if (authorization === undefined)
91
- return null;
92
- const [scheme, credentials] = (0, split_1.split)(authorization);
93
- const provider = schemes_1.PROVIDERS[scheme];
94
- if (!(provider in this.discovery))
95
- throw new http.Unauthorized(`Unknown authentication scheme '${scheme}'.`);
96
- this.schemes[scheme] ??= await this.discovery[provider];
97
- const result = await this.schemes[scheme]
98
- .invoke('authenticate', { input: credentials });
99
- if (result instanceof nopeable_1.Nope)
100
- return null;
101
- const identity = result.identity;
102
- if (scheme !== schemes_1.PRIMARY && await this.banned(identity))
103
- throw new http.Unauthorized();
104
- identity.scheme = scheme;
105
- identity.refresh = result.refresh;
106
- return identity;
107
- }
108
- async banned(identity) {
109
- this.bans ??= await this.discovery.bans;
110
- const ban = await this.bans.invoke('observe', { query: { id: identity.id } });
111
- return ban.banned;
112
- }
113
- }
114
- const CLASSES = {
115
- anonymous: Anonymous_1.Anonymous,
116
- id: Id_1.Id,
117
- role: Role_1.Role,
118
- rule: Rule_1.Rule,
119
- incept: Incept_1.Incept,
120
- scheme: Scheme_1.Scheme,
121
- echo: Echo_1.Echo
122
- };
123
- const REMOTES = ['basic', 'tokens', 'roles', 'bans'];
124
- module.exports = new Authorization();
125
- //# sourceMappingURL=Family.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Family.js","sourceRoot":"","sources":["../../../source/directives/auth/Family.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { type Parameter } from '../../RTD';
2
- import { type Directive, type Identity } from './types';
3
- export declare class Id implements Directive {
4
- private readonly parameter;
5
- constructor(parameter: string);
6
- authorize(identity: Identity | null, _: any, parameters: Parameter[]): boolean;
7
- }
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Id = void 0;
4
- class Id {
5
- parameter;
6
- constructor(parameter) {
7
- this.parameter = parameter;
8
- }
9
- authorize(identity, _, parameters) {
10
- if (identity === null)
11
- return false;
12
- const parameter = parameters.find((parameter) => parameter.name === this.parameter);
13
- return parameter?.value === identity.id;
14
- }
15
- }
16
- exports.Id = Id;
17
- //# sourceMappingURL=Id.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Id.js","sourceRoot":"","sources":["../../../source/directives/auth/Id.ts"],"names":[],"mappings":";;;AAGA,MAAa,EAAE;IACI,SAAS,CAAQ;IAElC,YAAoB,SAAiB;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEM,SAAS,CAAE,QAAyB,EAAE,CAAM,EAAE,UAAuB;QAC1E,IAAI,QAAQ,KAAK,IAAI;YACnB,OAAO,KAAK,CAAA;QAEd,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAA;QAEnF,OAAO,SAAS,EAAE,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAA;IACzC,CAAC;CACF;AAfD,gBAeC"}
@@ -1,10 +0,0 @@
1
- import * as http from '../../HTTP';
2
- import { type Directive, type Discovery, type Identity, type Input } from './types';
3
- export declare class Incept implements Directive {
4
- private readonly property;
5
- private readonly discovery;
6
- private readonly schemes;
7
- constructor(property: string, discovery: Discovery);
8
- authorize(identity: Identity | null, input: Input): boolean;
9
- settle(request: Input, response: http.OutgoingMessage): Promise<void>;
10
- }
@@ -1,59 +0,0 @@
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 nopeable_1 = require("nopeable");
28
- const http = __importStar(require("../../HTTP"));
29
- const split_1 = require("./split");
30
- const schemes_1 = require("./schemes");
31
- class Incept {
32
- property;
33
- discovery;
34
- schemes = {};
35
- constructor(property, discovery) {
36
- this.property = property;
37
- this.discovery = discovery;
38
- }
39
- authorize(identity, input) {
40
- return identity === null && 'authorization' in input.headers;
41
- }
42
- async settle(request, response) {
43
- const id = response.body?.[this.property];
44
- if (id === undefined)
45
- throw new http.Conflict('Identity inception has failed as the response body ' +
46
- ` does not contain the '${this.property}' property.`);
47
- const [scheme, credentials] = (0, split_1.split)(request.headers.authorization);
48
- const provider = schemes_1.PROVIDERS[scheme];
49
- this.schemes[scheme] ??= await this.discovery[provider];
50
- const identity = await this.schemes[scheme]
51
- .invoke('create', { input: { id, credentials } });
52
- if (identity instanceof nopeable_1.Nope)
53
- throw new http.Conflict(identity);
54
- request.identity = identity;
55
- request.identity.scheme = scheme;
56
- }
57
- }
58
- exports.Incept = Incept;
59
- //# sourceMappingURL=Incept.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Incept.js","sourceRoot":"","sources":["../../../source/directives/auth/Incept.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA8C;AAC9C,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,CAAqB,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QAEvE,IAAI,QAAQ,YAAY,eAAI;YAC1B,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"}
@@ -1,11 +0,0 @@
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
- }
@@ -1,44 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,9 +0,0 @@
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) => Directive;
9
- export {};
@@ -1,22 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,7 +0,0 @@
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
- }
@@ -1,47 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- import Family from './Family';
2
- export = Family;
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/directives/auth/index.ts"],"names":[],"mappings":";;;;AAAA,sDAA6B;AAE7B,iBAAS,gBAAM,CAAA"}