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

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 (78) hide show
  1. package/components/identity.basic/manifest.toa.yaml +2 -0
  2. package/components/identity.federation/manifest.toa.yaml +0 -6
  3. package/components/identity.roles/manifest.toa.yaml +1 -0
  4. package/documentation/io.md +56 -0
  5. package/documentation/query.md +9 -7
  6. package/documentation/tree.md +22 -4
  7. package/features/access.feature +11 -1
  8. package/features/annotation.feature +1 -0
  9. package/features/body.feature +1 -0
  10. package/features/cache.feature +3 -0
  11. package/features/directives.feature +2 -0
  12. package/features/dynamic.feature +14 -7
  13. package/features/errors.feature +3 -2
  14. package/features/etag.feature +1 -0
  15. package/features/identity.basic.feature +23 -0
  16. package/features/identity.federation.feature +3 -5
  17. package/features/identity.roles.feature +1 -0
  18. package/features/identity.tokens.feature +3 -0
  19. package/features/io.feature +167 -0
  20. package/features/octets.entries.feature +2 -0
  21. package/features/octets.feature +2 -0
  22. package/features/octets.meta.feature +4 -3
  23. package/features/octets.workflows.feature +1 -0
  24. package/features/queries.feature +9 -1
  25. package/features/response.feature +3 -0
  26. package/features/routes.feature +17 -10
  27. package/features/steps/components/pots/manifest.toa.yaml +2 -0
  28. package/features/steps/components/users/manifest.toa.yaml +1 -0
  29. package/features/steps/components/users.properties/manifest.toa.yaml +1 -0
  30. package/features/vary.feature +33 -3
  31. package/package.json +7 -7
  32. package/schemas/io/input.cos.yaml +3 -0
  33. package/schemas/io/message.cos.yaml +5 -0
  34. package/schemas/io/output.cos.yaml +5 -0
  35. package/source/HTTP/Server.ts +2 -2
  36. package/source/directives/auth/Authorization.ts +3 -3
  37. package/source/directives/index.ts +4 -3
  38. package/source/directives/io/Directive.ts +11 -0
  39. package/source/directives/io/IO.ts +43 -0
  40. package/source/directives/io/Input.ts +50 -0
  41. package/source/directives/io/Message.ts +1 -0
  42. package/source/directives/io/Output.ts +69 -0
  43. package/source/directives/io/index.ts +3 -0
  44. package/source/directives/io/schemas.ts +12 -0
  45. package/source/directives/vary/embeddings/Header.ts +8 -6
  46. package/source/root.ts +5 -0
  47. package/transpiled/HTTP/Server.js +2 -2
  48. package/transpiled/HTTP/Server.js.map +1 -1
  49. package/transpiled/directives/auth/Authorization.js +3 -3
  50. package/transpiled/directives/auth/Authorization.js.map +1 -1
  51. package/transpiled/directives/index.js +4 -3
  52. package/transpiled/directives/index.js.map +1 -1
  53. package/transpiled/directives/io/Directive.d.ts +8 -0
  54. package/transpiled/directives/io/Directive.js +3 -0
  55. package/transpiled/directives/io/Directive.js.map +1 -0
  56. package/transpiled/directives/io/IO.d.ts +9 -0
  57. package/transpiled/directives/io/IO.js +33 -0
  58. package/transpiled/directives/io/IO.js.map +1 -0
  59. package/transpiled/directives/io/Input.d.ts +11 -0
  60. package/transpiled/directives/io/Input.js +63 -0
  61. package/transpiled/directives/io/Input.js.map +1 -0
  62. package/transpiled/directives/io/Message.d.ts +1 -0
  63. package/transpiled/directives/io/Message.js +3 -0
  64. package/transpiled/directives/io/Message.js.map +1 -0
  65. package/transpiled/directives/io/Output.d.ts +13 -0
  66. package/transpiled/directives/io/Output.js +76 -0
  67. package/transpiled/directives/io/Output.js.map +1 -0
  68. package/transpiled/directives/io/index.d.ts +2 -0
  69. package/transpiled/directives/io/index.js +6 -0
  70. package/transpiled/directives/io/index.js.map +1 -0
  71. package/transpiled/directives/io/schemas.d.ts +7 -0
  72. package/transpiled/directives/io/schemas.js +14 -0
  73. package/transpiled/directives/io/schemas.js.map +1 -0
  74. package/transpiled/directives/vary/embeddings/Header.js +8 -6
  75. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  76. package/transpiled/root.js +5 -0
  77. package/transpiled/root.js.map +1 -1
  78. package/transpiled/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,50 @@
1
+ import { BadRequest } from '../../HTTP'
2
+ import * as schemas from './schemas'
3
+ import type { Message } from './Message'
4
+ import type { Directive } from './Directive'
5
+ import type { Input as Context } from '../../io'
6
+
7
+ export class Input implements Directive {
8
+ private readonly permissions: Permissions
9
+
10
+ public constructor (permissions: Permissions) {
11
+ this.permissions = permissions
12
+ }
13
+
14
+ public static validate (permissions: unknown): asserts permissions is Permissions {
15
+ schemas.input.validate(permissions, 'Incorrect \'io:input\' format')
16
+ }
17
+
18
+ public attach (context: Context): void {
19
+ context.pipelines.body.push((body) => this.check(body))
20
+ }
21
+
22
+ private check (body: unknown): unknown {
23
+ try {
24
+ schemas.message.validate(body)
25
+ } catch {
26
+ throw new BadRequest('Invalid request body.')
27
+ }
28
+
29
+ const property = this.violation(body)
30
+
31
+ if (property !== undefined)
32
+ throw new BadRequest(`Unexpected input: ${property}.`)
33
+
34
+ return body
35
+ }
36
+
37
+ private violation (value: Message | Message[]): string | undefined {
38
+ if (!Array.isArray(value))
39
+ return Object.keys(value).find((key) => !this.permissions.includes(key))
40
+
41
+ for (const item of value) {
42
+ const property = this.violation(item)
43
+
44
+ if (property !== undefined)
45
+ return property
46
+ }
47
+ }
48
+ }
49
+
50
+ export type Permissions = string[]
@@ -0,0 +1 @@
1
+ export type Message = Record<string, unknown>
@@ -0,0 +1,69 @@
1
+ import { Stream } from 'node:stream'
2
+ import * as schemas from './schemas'
3
+ import type { Message } from './Message'
4
+ import type { Directive } from './Directive'
5
+ import type { Input as Context } from '../../io'
6
+ import type { OutgoingMessage } from '../../HTTP'
7
+
8
+ export class Output implements Directive {
9
+ private readonly disabled: boolean = false
10
+ private readonly omitted: boolean = true
11
+ private readonly permissions: string[] = []
12
+
13
+ public constructor (permissions: Permissions) {
14
+ if (typeof permissions === 'boolean')
15
+ if (permissions)
16
+ this.disabled = true
17
+ else
18
+ this.omitted = false
19
+
20
+ else
21
+ this.permissions = permissions
22
+ }
23
+
24
+ public static validate (permissions: unknown): asserts permissions is Permissions {
25
+ schemas.output.validate(permissions, 'Incorrect \'io:output\' format')
26
+ }
27
+
28
+ public attach (context: Context): void {
29
+ context.pipelines.response.push(this.restriction(context))
30
+ }
31
+
32
+ private restriction (context: Context) {
33
+ return (message: OutgoingMessage): void => {
34
+ const error = message.status !== undefined && message.status >= 300
35
+ const stream = message.body instanceof Stream
36
+ const none = message.body === undefined || message.body === null
37
+
38
+ if (this.disabled || error || stream || none)
39
+ return
40
+
41
+ if (typeof message.body !== 'object' || this.permissions.length === 0) {
42
+ if (this.omitted)
43
+ console.warn('Permissions for \'io:output\' are not specified properly ' +
44
+ `(${context.request.url}). Response omitted.`)
45
+
46
+ delete message.body
47
+
48
+ return
49
+ }
50
+
51
+ schemas.message.validate(message.body,
52
+ '\'io:output\' expects response to be an object or array of objects')
53
+
54
+ if (Array.isArray(message.body))
55
+ message.body = message.body.map((entity) => this.fit(entity))
56
+ else
57
+ message.body = this.fit(message.body)
58
+ }
59
+ }
60
+
61
+ private fit (message: Message): Message | undefined {
62
+ const entries = Object.entries(message)
63
+ .filter(([key]) => this.permissions.includes(key))
64
+
65
+ return Object.fromEntries(entries)
66
+ }
67
+ }
68
+
69
+ export type Permissions = string[] | boolean
@@ -0,0 +1,3 @@
1
+ import { IO } from './IO'
2
+
3
+ export const io = new IO()
@@ -0,0 +1,12 @@
1
+ import { resolve } from 'node:path'
2
+ import schemas, { type Schema } from '@toa.io/schemas'
3
+ import type { Permissions as InputPermissions } from './Input'
4
+ import type { Permissions as OutputPermissions } from './Output'
5
+ import type { Message } from './Message'
6
+
7
+ const path = resolve(__dirname, '../../../schemas/io')
8
+ const namespace = schemas.namespace(path)
9
+
10
+ export const message: Schema<Message | Message[]> = namespace.schema('message')
11
+ export const input: Schema<InputPermissions> = namespace.schema('input')
12
+ export const output: Schema<OutputPermissions> = namespace.schema('output')
@@ -6,9 +6,10 @@ export class Header implements Embedding {
6
6
  private readonly name: string
7
7
 
8
8
  public constructor (name: string) {
9
- this.name = name
9
+ this.name = name.toLowerCase()
10
10
 
11
- cors.allow(this.name)
11
+ if (this.name !== 'host')
12
+ cors.allow(this.name)
12
13
  }
13
14
 
14
15
  public resolve (input: Input): string | undefined {
@@ -17,10 +18,11 @@ export class Header implements Embedding {
17
18
  if (value === undefined)
18
19
  return value
19
20
 
20
- input.pipelines.response.push((response) => {
21
- response.headers ??= new Headers()
22
- response.headers.append('vary', this.name)
23
- })
21
+ if (this.name !== 'host')
22
+ input.pipelines.response.push((response) => {
23
+ response.headers ??= new Headers()
24
+ response.headers.append('vary', this.name)
25
+ })
24
26
 
25
27
  if (Array.isArray(value))
26
28
  return value.join(', ')
package/source/root.ts CHANGED
@@ -25,6 +25,11 @@ const PREDEFINED: syntax.Node = {
25
25
  family: 'auth',
26
26
  name: 'echo',
27
27
  value: null
28
+ },
29
+ {
30
+ family: 'io',
31
+ name: 'output',
32
+ value: ['id', 'roles']
28
33
  }
29
34
  ]
30
35
  }
@@ -101,7 +101,7 @@ class Server extends core_1.Connector {
101
101
  status = 204;
102
102
  else
103
103
  status = 200;
104
- response.statusCode = status;
104
+ response.statusCode = message.status = status;
105
105
  (0, messages_1.write)(context, response, message);
106
106
  };
107
107
  }
@@ -112,7 +112,7 @@ class Server extends core_1.Connector {
112
112
  response.statusCode = exception instanceof exceptions_1.Exception
113
113
  ? exception.status
114
114
  : 500;
115
- const message = {};
115
+ const message = { status: response.statusCode };
116
116
  const verbose = exception instanceof exceptions_1.ClientError || this.properties.debug;
117
117
  if (verbose)
118
118
  message.body = exception instanceof exceptions_1.Exception
@@ -1 +1 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/HTTP/Server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/HTTP/Server.ts"],"names":[],"mappings":"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"}
@@ -48,8 +48,8 @@ class Authorization {
48
48
  tokens = null;
49
49
  bans = null;
50
50
  create(name, value, remotes) {
51
- node_assert_1.default.ok(name in CLASSES, `Directive '${name}' is not provided by the '${this.name}' family.`);
52
- const Class = CLASSES[name];
51
+ node_assert_1.default.ok(name in constructors, `Directive '${name}' is not provided by the '${this.name}' family.`);
52
+ const Class = constructors[name];
53
53
  for (const name of REMOTES)
54
54
  this.discovery[name] ??= remotes.discover('identity', name);
55
55
  return (0, matchacho_1.match)(Class, Role_1.Role, () => new Role_1.Role(value, this.discovery.roles), Rule_1.Rule, () => new Rule_1.Rule(value, this.create.bind(this)), Incept_1.Incept, () => new Incept_1.Incept(value, this.discovery), () => new Class(value));
@@ -112,7 +112,7 @@ class Authorization {
112
112
  }
113
113
  }
114
114
  exports.Authorization = Authorization;
115
- const CLASSES = {
115
+ const constructors = {
116
116
  anonymous: Anonymous_1.Anonymous,
117
117
  id: Id_1.Id,
118
118
  role: Role_1.Role,
@@ -1 +1 @@
1
- {"version":3,"file":"Authorization.js","sourceRoot":"","sources":["../../../source/directives/auth/Authorization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Authorization.js","sourceRoot":"","sources":["../../../source/directives/auth/Authorization.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.interceptors = exports.families = void 0;
4
- const dev_1 = require("./dev");
5
4
  const auth_1 = require("./auth");
6
5
  const cache_1 = require("./cache");
7
- const octets_1 = require("./octets");
8
6
  const cors_1 = require("./cors");
7
+ const dev_1 = require("./dev");
8
+ const octets_1 = require("./octets");
9
+ const io_1 = require("./io");
9
10
  const vary_1 = require("./vary");
10
- exports.families = [auth_1.authorization, cache_1.cache, octets_1.octets, vary_1.vary, dev_1.dev];
11
+ exports.families = [auth_1.authorization, io_1.io, cache_1.cache, vary_1.vary, octets_1.octets, dev_1.dev];
11
12
  exports.interceptors = [cors_1.cors];
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/directives/index.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAC3B,iCAAsC;AACtC,mCAA+B;AAC/B,qCAAiC;AACjC,iCAA6B;AAC7B,iCAA6B;AAIhB,QAAA,QAAQ,GAAsB,CAAC,oBAAa,EAAE,aAAK,EAAE,eAAM,EAAE,WAAI,EAAE,SAAG,CAAC,CAAA;AACvE,QAAA,YAAY,GAAkB,CAAC,WAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/directives/index.ts"],"names":[],"mappings":";;;AAAA,iCAAsC;AACtC,mCAA+B;AAC/B,iCAA6B;AAC7B,+BAA2B;AAC3B,qCAAiC;AACjC,6BAAyB;AACzB,iCAA6B;AAIhB,QAAA,QAAQ,GAAsB,CAAC,oBAAa,EAAE,OAAE,EAAE,aAAK,EAAE,WAAI,EAAE,eAAM,EAAE,SAAG,CAAC,CAAA;AAC3E,QAAA,YAAY,GAAkB,CAAC,WAAI,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { Input } from '../../io';
2
+ export interface Directive {
3
+ attach: (context: Input) => void;
4
+ }
5
+ export interface Constructor {
6
+ validate: (value: unknown) => void;
7
+ new (value: any): Directive;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Directive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Directive.js","sourceRoot":"","sources":["../../../source/directives/io/Directive.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { Directive } from './Directive';
2
+ import type { Input as Context } from '../../io';
3
+ import type { DirectiveFamily } from '../../RTD';
4
+ export declare class IO implements DirectiveFamily<Directive> {
5
+ readonly name = "io";
6
+ readonly mandatory = true;
7
+ create(name: string, value: unknown): Directive;
8
+ preflight(directives: Directive[], context: Context): null;
9
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IO = void 0;
4
+ const Output_1 = require("./Output");
5
+ const Input_1 = require("./Input");
6
+ class IO {
7
+ name = 'io';
8
+ mandatory = true;
9
+ create(name, value) {
10
+ if (!(name in constructors))
11
+ throw new Error(`Directive 'io:${name}' is not implemented.`);
12
+ const Directive = constructors[name];
13
+ Directive.validate(value);
14
+ return new Directive(value);
15
+ }
16
+ preflight(directives, context) {
17
+ let restricted = false;
18
+ for (const directive of directives) {
19
+ restricted ||= directive instanceof Output_1.Output;
20
+ directive.attach(context);
21
+ }
22
+ if (!restricted)
23
+ DENIAL.attach(context);
24
+ return null;
25
+ }
26
+ }
27
+ exports.IO = IO;
28
+ const constructors = {
29
+ output: Output_1.Output,
30
+ input: Input_1.Input
31
+ };
32
+ const DENIAL = new Output_1.Output([]);
33
+ //# sourceMappingURL=IO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IO.js","sourceRoot":"","sources":["../../../source/directives/io/IO.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AACjC,mCAA+B;AAK/B,MAAa,EAAE;IACG,IAAI,GAAG,IAAI,CAAA;IACX,SAAS,GAAG,IAAI,CAAA;IAEzB,MAAM,CAAE,IAAY,EAAE,KAAc;QACzC,IAAI,CAAC,CAAC,IAAI,IAAI,YAAY,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,uBAAuB,CAAC,CAAA;QAE/D,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAEpC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEzB,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;IAEM,SAAS,CAAE,UAAuB,EAAE,OAAgB;QACzD,IAAI,UAAU,GAAG,KAAK,CAAA;QAEtB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,UAAU,KAAK,SAAS,YAAY,eAAM,CAAA;YAE1C,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;QAED,IAAI,CAAC,UAAU;YACb,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAExB,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AA7BD,gBA6BC;AAED,MAAM,YAAY,GAAgC;IAChD,MAAM,EAAE,eAAM;IACd,KAAK,EAAE,aAAK;CACb,CAAA;AAED,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,EAAE,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Directive } from './Directive';
2
+ import type { Input as Context } from '../../io';
3
+ export declare class Input implements Directive {
4
+ private readonly permissions;
5
+ constructor(permissions: Permissions);
6
+ static validate(permissions: unknown): asserts permissions is Permissions;
7
+ attach(context: Context): void;
8
+ private check;
9
+ private violation;
10
+ }
11
+ export type Permissions = string[];
@@ -0,0 +1,63 @@
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.Input = void 0;
27
+ const HTTP_1 = require("../../HTTP");
28
+ const schemas = __importStar(require("./schemas"));
29
+ class Input {
30
+ permissions;
31
+ constructor(permissions) {
32
+ this.permissions = permissions;
33
+ }
34
+ static validate(permissions) {
35
+ schemas.input.validate(permissions, 'Incorrect \'io:input\' format');
36
+ }
37
+ attach(context) {
38
+ context.pipelines.body.push((body) => this.check(body));
39
+ }
40
+ check(body) {
41
+ try {
42
+ schemas.message.validate(body);
43
+ }
44
+ catch {
45
+ throw new HTTP_1.BadRequest('Invalid request body.');
46
+ }
47
+ const property = this.violation(body);
48
+ if (property !== undefined)
49
+ throw new HTTP_1.BadRequest(`Unexpected input: ${property}.`);
50
+ return body;
51
+ }
52
+ violation(value) {
53
+ if (!Array.isArray(value))
54
+ return Object.keys(value).find((key) => !this.permissions.includes(key));
55
+ for (const item of value) {
56
+ const property = this.violation(item);
57
+ if (property !== undefined)
58
+ return property;
59
+ }
60
+ }
61
+ }
62
+ exports.Input = Input;
63
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../source/directives/io/Input.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAuC;AACvC,mDAAoC;AAKpC,MAAa,KAAK;IACC,WAAW,CAAa;IAEzC,YAAoB,WAAwB;QAC1C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAE,WAAoB;QAC1C,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAA;IACtE,CAAC;IAEM,MAAM,CAAE,OAAgB;QAC7B,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACzD,CAAC;IAEO,KAAK,CAAE,IAAa;QAC1B,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,iBAAU,CAAC,uBAAuB,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAErC,IAAI,QAAQ,KAAK,SAAS;YACxB,MAAM,IAAI,iBAAU,CAAC,qBAAqB,QAAQ,GAAG,CAAC,CAAA;QAExD,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,SAAS,CAAE,KAA0B;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;QAE1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAErC,IAAI,QAAQ,KAAK,SAAS;gBACxB,OAAO,QAAQ,CAAA;QACnB,CAAC;IACH,CAAC;CACF;AAzCD,sBAyCC"}
@@ -0,0 +1 @@
1
+ export type Message = Record<string, unknown>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../../source/directives/io/Message.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { Directive } from './Directive';
2
+ import type { Input as Context } from '../../io';
3
+ export declare class Output implements Directive {
4
+ private readonly disabled;
5
+ private readonly omitted;
6
+ private readonly permissions;
7
+ constructor(permissions: Permissions);
8
+ static validate(permissions: unknown): asserts permissions is Permissions;
9
+ attach(context: Context): void;
10
+ private restriction;
11
+ private fit;
12
+ }
13
+ export type Permissions = string[] | boolean;
@@ -0,0 +1,76 @@
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.Output = void 0;
27
+ const node_stream_1 = require("node:stream");
28
+ const schemas = __importStar(require("./schemas"));
29
+ class Output {
30
+ disabled = false;
31
+ omitted = true;
32
+ permissions = [];
33
+ constructor(permissions) {
34
+ if (typeof permissions === 'boolean')
35
+ if (permissions)
36
+ this.disabled = true;
37
+ else
38
+ this.omitted = false;
39
+ else
40
+ this.permissions = permissions;
41
+ }
42
+ static validate(permissions) {
43
+ schemas.output.validate(permissions, 'Incorrect \'io:output\' format');
44
+ }
45
+ attach(context) {
46
+ context.pipelines.response.push(this.restriction(context));
47
+ }
48
+ restriction(context) {
49
+ return (message) => {
50
+ const error = message.status !== undefined && message.status >= 300;
51
+ const stream = message.body instanceof node_stream_1.Stream;
52
+ const none = message.body === undefined || message.body === null;
53
+ if (this.disabled || error || stream || none)
54
+ return;
55
+ if (typeof message.body !== 'object' || this.permissions.length === 0) {
56
+ if (this.omitted)
57
+ console.warn('Permissions for \'io:output\' are not specified properly ' +
58
+ `(${context.request.url}). Response omitted.`);
59
+ delete message.body;
60
+ return;
61
+ }
62
+ schemas.message.validate(message.body, '\'io:output\' expects response to be an object or array of objects');
63
+ if (Array.isArray(message.body))
64
+ message.body = message.body.map((entity) => this.fit(entity));
65
+ else
66
+ message.body = this.fit(message.body);
67
+ };
68
+ }
69
+ fit(message) {
70
+ const entries = Object.entries(message)
71
+ .filter(([key]) => this.permissions.includes(key));
72
+ return Object.fromEntries(entries);
73
+ }
74
+ }
75
+ exports.Output = Output;
76
+ //# sourceMappingURL=Output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Output.js","sourceRoot":"","sources":["../../../source/directives/io/Output.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAoC;AACpC,mDAAoC;AAMpC,MAAa,MAAM;IACA,QAAQ,GAAY,KAAK,CAAA;IACzB,OAAO,GAAY,IAAI,CAAA;IACvB,WAAW,GAAa,EAAE,CAAA;IAE3C,YAAoB,WAAwB;QAC1C,IAAI,OAAO,WAAW,KAAK,SAAS;YAClC,IAAI,WAAW;gBACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;;gBAEpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;;YAGtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAE,WAAoB;QAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAA;IACxE,CAAC;IAEM,MAAM,CAAE,OAAgB;QAC7B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5D,CAAC;IAEO,WAAW,CAAE,OAAgB;QACnC,OAAO,CAAC,OAAwB,EAAQ,EAAE;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,CAAA;YACnE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,YAAY,oBAAM,CAAA;YAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAA;YAEhE,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI;gBAC1C,OAAM;YAER,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtE,IAAI,IAAI,CAAC,OAAO;oBACd,OAAO,CAAC,IAAI,CAAC,2DAA2D;wBACtE,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,CAAA;gBAElD,OAAO,OAAO,CAAC,IAAI,CAAA;gBAEnB,OAAM;YACR,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EACnC,oEAAoE,CAAC,CAAA;YAEvE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;;gBAE7D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACzC,CAAC,CAAA;IACH,CAAC;IAEO,GAAG,CAAE,OAAgB;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;QAEpD,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;CACF;AA3DD,wBA2DC"}
@@ -0,0 +1,2 @@
1
+ import { IO } from './IO';
2
+ export declare const io: IO;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.io = void 0;
4
+ const IO_1 = require("./IO");
5
+ exports.io = new IO_1.IO();
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/directives/io/index.ts"],"names":[],"mappings":";;;AAAA,6BAAyB;AAEZ,QAAA,EAAE,GAAG,IAAI,OAAE,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type Schema } from '@toa.io/schemas';
2
+ import type { Permissions as InputPermissions } from './Input';
3
+ import type { Permissions as OutputPermissions } from './Output';
4
+ import type { Message } from './Message';
5
+ export declare const message: Schema<Message | Message[]>;
6
+ export declare const input: Schema<InputPermissions>;
7
+ export declare const output: Schema<OutputPermissions>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.output = exports.input = exports.message = void 0;
7
+ const node_path_1 = require("node:path");
8
+ const schemas_1 = __importDefault(require("@toa.io/schemas"));
9
+ const path = (0, node_path_1.resolve)(__dirname, '../../../schemas/io');
10
+ const namespace = schemas_1.default.namespace(path);
11
+ exports.message = namespace.schema('message');
12
+ exports.input = namespace.schema('input');
13
+ exports.output = namespace.schema('output');
14
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../source/directives/io/schemas.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAmC;AACnC,8DAAsD;AAKtD,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAA;AACtD,MAAM,SAAS,GAAG,iBAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAE5B,QAAA,OAAO,GAAgC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAClE,QAAA,KAAK,GAA6B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3D,QAAA,MAAM,GAA8B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA"}
@@ -5,17 +5,19 @@ const cors_1 = require("../../cors");
5
5
  class Header {
6
6
  name;
7
7
  constructor(name) {
8
- this.name = name;
9
- cors_1.cors.allow(this.name);
8
+ this.name = name.toLowerCase();
9
+ if (this.name !== 'host')
10
+ cors_1.cors.allow(this.name);
10
11
  }
11
12
  resolve(input) {
12
13
  const value = input.request.headers[this.name];
13
14
  if (value === undefined)
14
15
  return value;
15
- input.pipelines.response.push((response) => {
16
- response.headers ??= new Headers();
17
- response.headers.append('vary', this.name);
18
- });
16
+ if (this.name !== 'host')
17
+ input.pipelines.response.push((response) => {
18
+ response.headers ??= new Headers();
19
+ response.headers.append('vary', this.name);
20
+ });
19
21
  if (Array.isArray(value))
20
22
  return value.join(', ');
21
23
  else
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../source/directives/vary/embeddings/Header.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AAIjC,MAAa,MAAM;IACA,IAAI,CAAQ;IAE7B,YAAoB,IAAY;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,WAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAEM,OAAO,CAAE,KAAY;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9C,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,KAAK,CAAA;QAEd,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACzC,QAAQ,CAAC,OAAO,KAAK,IAAI,OAAO,EAAE,CAAA;YAClC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;YAEvB,OAAO,KAAK,CAAA;IAChB,CAAC;CACF;AAzBD,wBAyBC"}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../source/directives/vary/embeddings/Header.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AAIjC,MAAa,MAAM;IACA,IAAI,CAAQ;IAE7B,YAAoB,IAAY;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAE9B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YACtB,WAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAEM,OAAO,CAAE,KAAY;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9C,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,KAAK,CAAA;QAEd,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YACtB,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACzC,QAAQ,CAAC,OAAO,KAAK,IAAI,OAAO,EAAE,CAAA;gBAClC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;QAEJ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;YAEvB,OAAO,KAAK,CAAA;IAChB,CAAC;CACF;AA3BD,wBA2BC"}
@@ -25,6 +25,11 @@ const PREDEFINED = {
25
25
  family: 'auth',
26
26
  name: 'echo',
27
27
  value: null
28
+ },
29
+ {
30
+ family: 'io',
31
+ name: 'output',
32
+ value: ['id', 'roles']
28
33
  }
29
34
  ]
30
35
  }