@toa.io/extensions.exposition 1.0.0-alpha.278 → 1.0.0-alpha.282

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 (243) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/components/identity.basic/events/principal.js +5 -1
  3. package/components/identity.basic/manifest.toa.yaml +11 -1
  4. package/components/identity.basic/operations/authenticate.js +9 -5
  5. package/components/identity.basic/operations/authenticate.js.map +1 -1
  6. package/components/identity.basic/operations/check.js +2 -1
  7. package/components/identity.basic/operations/check.js.map +1 -1
  8. package/components/identity.basic/operations/incept.js +4 -5
  9. package/components/identity.basic/operations/incept.js.map +1 -1
  10. package/components/identity.basic/operations/lib/credentials.d.ts +5 -0
  11. package/components/identity.basic/operations/lib/credentials.js +12 -0
  12. package/components/identity.basic/operations/lib/credentials.js.map +1 -0
  13. package/components/identity.basic/operations/transit.d.ts +2 -0
  14. package/components/identity.basic/operations/transit.js +12 -2
  15. package/components/identity.basic/operations/transit.js.map +1 -1
  16. package/components/identity.basic/operations/types.d.ts +11 -1
  17. package/components/identity.basic/source/authenticate.ts +11 -5
  18. package/components/identity.basic/source/check.ts +2 -1
  19. package/components/identity.basic/source/incept.ts +5 -5
  20. package/components/identity.basic/source/lib/credentials.test.ts +18 -0
  21. package/components/identity.basic/source/lib/credentials.ts +13 -0
  22. package/components/identity.basic/source/transit.ts +16 -4
  23. package/components/identity.basic/source/types.ts +13 -1
  24. package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
  25. package/components/identity.federation/events/principal.js +1 -0
  26. package/components/identity.federation/manifest.toa.yaml +5 -1
  27. package/components/identity.federation/operations/authenticate.js +3 -3
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/create.js +5 -1
  30. package/components/identity.federation/operations/create.js.map +1 -1
  31. package/components/identity.federation/operations/lib/decode.js +5 -1
  32. package/components/identity.federation/operations/lib/decode.js.map +1 -1
  33. package/components/identity.federation/operations/lib/exchange.js +3 -3
  34. package/components/identity.federation/operations/lib/exchange.js.map +1 -1
  35. package/components/identity.federation/operations/list.js +2 -1
  36. package/components/identity.federation/operations/list.js.map +1 -1
  37. package/components/identity.federation/operations/types/configuration.d.ts +2 -1
  38. package/components/identity.federation/source/authenticate.ts +3 -3
  39. package/components/identity.federation/source/create.ts +5 -1
  40. package/components/identity.federation/source/lib/decode.ts +5 -1
  41. package/components/identity.federation/source/lib/exchange.ts +3 -3
  42. package/components/identity.federation/source/list.test.ts +1 -1
  43. package/components/identity.federation/source/list.ts +2 -1
  44. package/components/identity.federation/source/types/configuration.ts +2 -1
  45. package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
  46. package/components/identity.keys/manifest.toa.yaml +18 -1
  47. package/components/identity.keys/operations/disable.d.ts +5 -0
  48. package/components/identity.keys/operations/disable.js +5 -0
  49. package/components/identity.keys/operations/disable.js.map +1 -0
  50. package/components/identity.keys/operations/revoke.d.ts +15 -0
  51. package/components/identity.keys/operations/revoke.js +12 -0
  52. package/components/identity.keys/operations/revoke.js.map +1 -0
  53. package/components/identity.keys/receivers/identity.bans.created.js +1 -0
  54. package/components/identity.keys/receivers/identity.bans.updated.js +1 -0
  55. package/components/identity.keys/receivers/identity.roles.deleted.js +1 -0
  56. package/components/identity.keys/source/disable.ts +9 -0
  57. package/components/identity.keys/source/revoke.ts +30 -0
  58. package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
  59. package/components/identity.otp/manifest.toa.yaml +6 -0
  60. package/components/identity.otp/operations/authenticate.js +13 -1
  61. package/components/identity.otp/operations/authenticate.js.map +1 -1
  62. package/components/identity.otp/operations/issue.js +3 -2
  63. package/components/identity.otp/operations/issue.js.map +1 -1
  64. package/components/identity.otp/operations/lib/Context.d.ts +1 -0
  65. package/components/identity.otp/source/authenticate.ts +19 -1
  66. package/components/identity.otp/source/issue.ts +3 -2
  67. package/components/identity.otp/source/lib/Context.ts +1 -0
  68. package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
  69. package/components/identity.passkeys/operations/authenticate.js +2 -1
  70. package/components/identity.passkeys/operations/authenticate.js.map +1 -1
  71. package/components/identity.passkeys/operations/challenge.js +3 -3
  72. package/components/identity.passkeys/operations/challenge.js.map +1 -1
  73. package/components/identity.passkeys/operations/delete.js +2 -1
  74. package/components/identity.passkeys/operations/delete.js.map +1 -1
  75. package/components/identity.passkeys/operations/list.js +2 -1
  76. package/components/identity.passkeys/operations/list.js.map +1 -1
  77. package/components/identity.passkeys/source/authenticate.ts +2 -1
  78. package/components/identity.passkeys/source/challenge.ts +3 -3
  79. package/components/identity.passkeys/source/delete.ts +2 -1
  80. package/components/identity.passkeys/source/list.ts +2 -1
  81. package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
  82. package/components/identity.roles/manifest.toa.yaml +4 -0
  83. package/components/identity.roles/operations/grant.js +5 -2
  84. package/components/identity.roles/operations/grant.js.map +1 -1
  85. package/components/identity.roles/source/grant.ts +6 -2
  86. package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
  87. package/components/identity.tokens/manifest.toa.yaml +3 -0
  88. package/components/identity.tokens/operations/authenticate.js +4 -3
  89. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  90. package/components/identity.tokens/operations/decrypt.js +7 -1
  91. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  92. package/components/identity.tokens/operations/encrypt.js +3 -2
  93. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  94. package/components/identity.tokens/operations/issue.js +2 -1
  95. package/components/identity.tokens/operations/issue.js.map +1 -1
  96. package/components/identity.tokens/operations/lib/types.d.ts +3 -0
  97. package/components/identity.tokens/source/authenticate.test.ts +26 -2
  98. package/components/identity.tokens/source/authenticate.ts +4 -3
  99. package/components/identity.tokens/source/decrypt.test.ts +35 -1
  100. package/components/identity.tokens/source/decrypt.ts +10 -1
  101. package/components/identity.tokens/source/encrypt.test.ts +15 -0
  102. package/components/identity.tokens/source/encrypt.ts +4 -2
  103. package/components/identity.tokens/source/issue.ts +2 -1
  104. package/components/identity.tokens/source/lib/types.ts +4 -0
  105. package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
  106. package/documentation/authorities.md +3 -0
  107. package/documentation/components.md +31 -11
  108. package/documentation/identity.md +38 -6
  109. package/documentation/io.md +2 -2
  110. package/documentation/ip.md +24 -0
  111. package/documentation/passkeys.md +6 -0
  112. package/features/auth.assert.feature +2 -4
  113. package/features/auth.claims.feature +1 -0
  114. package/features/auth.incept.feature +46 -0
  115. package/features/authorities.feature +39 -0
  116. package/features/authorities.federation.feature +1 -0
  117. package/features/identity.bans.feature +63 -0
  118. package/features/identity.basic.feature +95 -3
  119. package/features/identity.feature +151 -0
  120. package/features/identity.federation.feature +5 -0
  121. package/features/identity.otp.feature +41 -0
  122. package/features/identity.roles.feature +252 -0
  123. package/features/identity.tokens.custom.feature +145 -0
  124. package/features/map.feature +2 -0
  125. package/features/steps/Gateway.ts +8 -2
  126. package/features/steps/Realtime.ts +1 -1
  127. package/package.json +5 -5
  128. package/readme.md +3 -0
  129. package/schemas/annotation.cos.yaml +16 -0
  130. package/source/Annotation.ts +14 -0
  131. package/source/Composition.ts +5 -5
  132. package/source/Directive.test.ts +3 -1
  133. package/source/Directive.ts +6 -2
  134. package/source/Endpoint.ts +4 -2
  135. package/source/Factory.ts +12 -9
  136. package/source/HTTP/Context.ts +12 -2
  137. package/source/HTTP/Server.ts +16 -3
  138. package/source/HTTP/address.test.ts +22 -0
  139. package/source/HTTP/address.ts +17 -0
  140. package/source/Query.test.ts +15 -1
  141. package/source/Query.ts +3 -1
  142. package/source/RTD/Directives.ts +10 -1
  143. package/source/Remotes.test.ts +7 -12
  144. package/source/Remotes.ts +5 -5
  145. package/source/const.ts +3 -0
  146. package/source/deployment.ts +7 -1
  147. package/source/directives/auth/Assert.ts +3 -0
  148. package/source/directives/auth/Authorization.test.ts +24 -0
  149. package/source/directives/auth/Authorization.ts +80 -11
  150. package/source/directives/auth/Incept.ts +9 -4
  151. package/source/directives/auth/Role.test.ts +1 -1
  152. package/source/directives/auth/Role.ts +2 -1
  153. package/source/directives/auth/schemes.test.ts +14 -0
  154. package/source/directives/auth/schemes.ts +14 -0
  155. package/source/directives/auth/types.ts +3 -0
  156. package/source/directives/io/IO.ts +10 -3
  157. package/source/directives/io/lib/throttle/Keys.ts +10 -3
  158. package/source/directives/io/lib/throttle/Quotas.test.ts +14 -4
  159. package/source/directives/io/lib/throttle/Quotas.ts +15 -2
  160. package/source/directives/io/lib/throttle/Sync.test.ts +7 -9
  161. package/source/directives/io/lib/throttle/Sync.ts +4 -7
  162. package/source/directives/io/lib/throttle/Warning.test.ts +32 -0
  163. package/source/directives/io/lib/throttle/Warning.ts +30 -0
  164. package/source/directives/io/lib/throttle/components/Component.ts +2 -1
  165. package/source/directives/io/lib/throttle/components/IP.ts +19 -28
  166. package/source/directives/io/lib/throttle/index.ts +1 -0
  167. package/source/redact.test.ts +27 -0
  168. package/source/redact.ts +21 -0
  169. package/source/schemas.test.ts +17 -0
  170. package/transpiled/Annotation.d.ts +10 -0
  171. package/transpiled/Composition.d.ts +3 -3
  172. package/transpiled/Composition.js +4 -4
  173. package/transpiled/Composition.js.map +1 -1
  174. package/transpiled/Directive.d.ts +3 -2
  175. package/transpiled/Directive.js +3 -1
  176. package/transpiled/Directive.js.map +1 -1
  177. package/transpiled/Endpoint.js +3 -2
  178. package/transpiled/Endpoint.js.map +1 -1
  179. package/transpiled/Factory.d.ts +3 -3
  180. package/transpiled/Factory.js +11 -8
  181. package/transpiled/Factory.js.map +1 -1
  182. package/transpiled/HTTP/Context.d.ts +4 -0
  183. package/transpiled/HTTP/Context.js +7 -2
  184. package/transpiled/HTTP/Context.js.map +1 -1
  185. package/transpiled/HTTP/Server.d.ts +5 -0
  186. package/transpiled/HTTP/Server.js +8 -3
  187. package/transpiled/HTTP/Server.js.map +1 -1
  188. package/transpiled/HTTP/address.d.ts +7 -0
  189. package/transpiled/HTTP/address.js +14 -0
  190. package/transpiled/HTTP/address.js.map +1 -0
  191. package/transpiled/Query.js +3 -1
  192. package/transpiled/Query.js.map +1 -1
  193. package/transpiled/RTD/Directives.d.ts +9 -1
  194. package/transpiled/Remotes.d.ts +3 -3
  195. package/transpiled/Remotes.js +4 -4
  196. package/transpiled/Remotes.js.map +1 -1
  197. package/transpiled/const.d.ts +2 -0
  198. package/transpiled/const.js +2 -0
  199. package/transpiled/const.js.map +1 -1
  200. package/transpiled/deployment.js +4 -0
  201. package/transpiled/deployment.js.map +1 -1
  202. package/transpiled/directives/auth/Assert.js +2 -0
  203. package/transpiled/directives/auth/Assert.js.map +1 -1
  204. package/transpiled/directives/auth/Authorization.d.ts +8 -0
  205. package/transpiled/directives/auth/Authorization.js +61 -11
  206. package/transpiled/directives/auth/Authorization.js.map +1 -1
  207. package/transpiled/directives/auth/Incept.d.ts +3 -1
  208. package/transpiled/directives/auth/Incept.js +8 -4
  209. package/transpiled/directives/auth/Incept.js.map +1 -1
  210. package/transpiled/directives/auth/Role.js +2 -1
  211. package/transpiled/directives/auth/Role.js.map +1 -1
  212. package/transpiled/directives/auth/schemes.d.ts +10 -0
  213. package/transpiled/directives/auth/schemes.js +12 -0
  214. package/transpiled/directives/auth/schemes.js.map +1 -1
  215. package/transpiled/directives/auth/types.d.ts +2 -0
  216. package/transpiled/directives/io/IO.d.ts +4 -1
  217. package/transpiled/directives/io/IO.js +7 -3
  218. package/transpiled/directives/io/IO.js.map +1 -1
  219. package/transpiled/directives/io/lib/throttle/Keys.d.ts +2 -1
  220. package/transpiled/directives/io/lib/throttle/Keys.js +7 -2
  221. package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
  222. package/transpiled/directives/io/lib/throttle/Quotas.d.ts +3 -2
  223. package/transpiled/directives/io/lib/throttle/Quotas.js +8 -1
  224. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  225. package/transpiled/directives/io/lib/throttle/Sync.d.ts +2 -3
  226. package/transpiled/directives/io/lib/throttle/Sync.js +1 -3
  227. package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
  228. package/transpiled/directives/io/lib/throttle/Warning.d.ts +11 -0
  229. package/transpiled/directives/io/lib/throttle/Warning.js +24 -0
  230. package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -0
  231. package/transpiled/directives/io/lib/throttle/components/Component.d.ts +2 -1
  232. package/transpiled/directives/io/lib/throttle/components/IP.d.ts +10 -2
  233. package/transpiled/directives/io/lib/throttle/components/IP.js +18 -23
  234. package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
  235. package/transpiled/directives/io/lib/throttle/index.d.ts +1 -0
  236. package/transpiled/directives/io/lib/throttle/index.js +1 -0
  237. package/transpiled/directives/io/lib/throttle/index.js.map +1 -1
  238. package/transpiled/redact.d.ts +5 -0
  239. package/transpiled/redact.js +17 -0
  240. package/transpiled/redact.js.map +1 -0
  241. package/tsconfig.tsbuildinfo +1 -1
  242. package/components/exposition.atom/manifest.toa.yaml +0 -21
  243. package/components/exposition.atom/operations/meter.js +0 -5
@@ -10,15 +10,16 @@ import { families, interceptors } from './directives/index.js';
10
10
  import { DirectivesFactory } from './Directive.js';
11
11
  import { Composition } from './Composition.js';
12
12
  import * as root from './root.js';
13
+ import { ATOM_GROUP } from './const.js';
13
14
  import { Interception } from './Interception.js';
14
15
  import * as http from './HTTP/index.js';
15
16
  export class Factory {
16
- boot;
17
- constructor(boot) {
18
- this.boot = boot;
17
+ host;
18
+ constructor(host) {
19
+ this.host = host;
19
20
  }
20
21
  async tenant(locator, node) {
21
- const broadcast = await this.boot.bindings.broadcast(CHANNEL, locator.id);
22
+ const broadcast = await this.host.broadcast(CHANNEL, locator.id);
22
23
  const hash = createHash('sha256').update(JSON.stringify(node)).digest('hex');
23
24
  // no timestamp: the tenant stamps each announcement with its own start time
24
25
  const branch = {
@@ -34,18 +35,20 @@ export class Factory {
34
35
  assert.ok(process.env.TOA_EXPOSITION_PROPERTIES, 'TOA_EXPOSITION_PROPERTIES is undefined');
35
36
  configureLogs();
36
37
  const options = JSON.parse(process.env.TOA_EXPOSITION_PROPERTIES);
37
- const broadcast = await this.boot.bindings.broadcast(CHANNEL);
38
+ const broadcast = await this.host.broadcast(CHANNEL);
38
39
  const server = http.Server.create({ ...options });
39
- const remotes = new Remotes(this.boot);
40
+ const remotes = new Remotes(this.host);
40
41
  const node = root.resolve();
41
42
  const methods = new EndpointsFactory(remotes);
42
- const directives = new DirectivesFactory(families, remotes);
43
+ const directives = new DirectivesFactory(families, remotes, this.host, options);
43
44
  const interception = new Interception(interceptors);
44
45
  const tree = new Tree(node, methods, directives);
45
- const composition = new Composition(this.boot);
46
+ const composition = new Composition(this.host);
46
47
  const gateway = new Gateway(broadcast, tree, interception);
47
48
  gateway.depends(remotes);
48
49
  gateway.depends(composition);
50
+ // what the directives meter through; one atom per process, connected once
51
+ gateway.depends(this.host.atom(ATOM_GROUP));
49
52
  server.attach(gateway.process.bind(gateway));
50
53
  server.depends(gateway);
51
54
  return server;
@@ -1 +1 @@
1
- {"version":3,"file":"Factory.js","sourceRoot":"","sources":["../source/Factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Factory.js","sourceRoot":"","sources":["../source/Factory.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export declare class Context {
6
6
  readonly id: string;
7
7
  readonly authority: string;
8
8
  readonly request: IncomingMessage;
9
+ /** the client address, read as the deployment says; none otherwise, see `documentation/ip.md` */
10
+ readonly ip: string | undefined;
9
11
  readonly url: URL;
10
12
  readonly subtype: string | null;
11
13
  readonly encoder: Format | null;
@@ -24,5 +26,7 @@ interface Pipelines {
24
26
  }
25
27
  interface Properties {
26
28
  debug: boolean;
29
+ /** the header the client address is read from; the connection's without one */
30
+ ip?: string;
27
31
  }
28
32
  export {};
@@ -5,10 +5,13 @@ import { console } from 'openspan';
5
5
  import { Timing } from './Timing.js';
6
6
  import { formats, types } from './formats/index.js';
7
7
  import { read } from './messages.js';
8
+ import { address } from './address.js';
8
9
  export class Context {
9
10
  id;
10
11
  authority;
11
12
  request;
13
+ /** the client address, read as the deployment says; none otherwise, see `documentation/ip.md` */
14
+ ip;
12
15
  url;
13
16
  subtype = null;
14
17
  encoder = null;
@@ -23,6 +26,7 @@ export class Context {
23
26
  constructor(authority, request, properties, url) {
24
27
  this.authority = authority;
25
28
  this.request = request;
29
+ this.ip = address(request, properties.ip);
26
30
  this.id = crypto.randomUUID();
27
31
  // parsed by the server, which had to parse it anyway to know the request is valid
28
32
  this.url = url;
@@ -55,11 +59,12 @@ export class Context {
55
59
  log(request) {
56
60
  const headers = { ...request.headers };
57
61
  if (headers.authorization !== undefined)
58
- // only scheme
59
- headers.authorization = headers.authorization.slice(0, headers.authorization.indexOf(' '));
62
+ headers.authorization = SCHEME.exec(headers.authorization)?.[1] ?? '[malformed]';
60
63
  console.debug('Received request', { method: request.method, url: request.url, headers });
61
64
  }
62
65
  }
66
+ /** The scheme of an `authorization` header; the value after it is a credential. */
67
+ const SCHEME = /^(\w{1,32})(?: |$)/;
63
68
  /**
64
69
  * Negotiation parses the header and sorts the candidates, and the value repeats:
65
70
  * clients send one of a handful of `accept` strings. Bounded, the header is theirs.
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../source/HTTP/Context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../source/HTTP/Context.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { Connector } from '@toa.io/core';
2
2
  import { type OutgoingMessage } from './messages.js';
3
3
  import { Context } from './Context.js';
4
4
  import type { Protocol } from './types.js';
5
+ import type { Bouncer } from '../Annotation.js';
5
6
  export declare class Server extends Connector {
6
7
  private readonly server;
7
8
  private readonly properties;
@@ -35,6 +36,10 @@ interface Properties {
35
36
  protocol: Protocol;
36
37
  /** Port of the readiness probe, which is HTTP/1.1 whatever the gateway serves. */
37
38
  probe: number;
39
+ /** The header the client address is read from; the connection's address without one. */
40
+ ip?: string;
41
+ /** Failed authentications an address may make; none are metered unless set. */
42
+ bouncer?: Bouncer;
38
43
  }
39
44
  export type Options = {
40
45
  authorities: Properties['authorities'];
@@ -100,9 +100,9 @@ export class Server extends Connector {
100
100
  });
101
101
  // no listener on `request.socket`: under HTTP/2 it is the session's socket, shared by
102
102
  // every concurrent stream, and removing listeners on it would strip the siblings'
103
- const host = authorityOf(request);
104
- if (host === undefined) {
105
- console.warn('Request without an authority', errorAttributes(request, new Error('No authority')));
103
+ const host = authorityOf(request)?.toLowerCase();
104
+ if (host === undefined || !HOST.test(host)) {
105
+ console.warn('Request without a valid authority', errorAttributes(request, new Error('Invalid authority')));
106
106
  response.writeHead(400).end();
107
107
  return;
108
108
  }
@@ -270,6 +270,11 @@ function trace(headers) {
270
270
  return { traceId: headers.ray.toLowerCase(), sampled: decide() };
271
271
  return null;
272
272
  }
273
+ /**
274
+ * A host name with an optional port, or a bracketed IPv6 literal. The URL parser admits
275
+ * `,` `;` `=` `(` `)` and quotes in a host, and the authority is written into criteria.
276
+ */
277
+ const HOST = /^(?:[a-z0-9.-]{1,253}|\[[0-9a-f:.]{2,45}\])(?::\d{1,5})?$/;
273
278
  const RAY = /^[\da-f]{32}$/i;
274
279
  const ZERO_RAY = '0'.repeat(32);
275
280
  const DEFAULTS = {
@@ -1 +1 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/HTTP/Server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAoB,MAAM,UAAU,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAwB,KAAK,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGzC,MAAM,OAAO,MAAO,SAAQ,SAAS;IAClB,MAAM,CAAiC;IACvC,UAAU,CAAY;IACtB,WAAW,CAAwB;IAEpD,0EAA0E;IACzD,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAA;IAE9C,KAAK,CAAO;IAErB,OAAO,CAAY;IAE3B,YAAqB,UAAsB;QACzC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;QACjH,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QAExC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACrC,IAAI,CAAC,QAAQ,CAAC,GAAiC,EAAE,GAAgC,CAAC,CAAC,CAAA;QAErF,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI;YAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAA;;YAChE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAA2B,CAAC,CAAA;IAChD,CAAC;IAEM,MAAM,CAAC,MAAM,CAAE,OAAgB;QACpC,MAAM,UAAU,GAAe,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAA;QAE1D,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;IAC/B,CAAC;IAEM,MAAM,CAAE,OAAkB;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEkB,KAAK,CAAC,IAAI;QAC3B,yFAAyF;QACzF,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;QAEzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAExC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAEpC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QAExC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;QAErB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC;IAEkB,KAAK,CAAC,KAAK;QAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAExB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QAEnB,oFAAoF;QACpF,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI;YAClC,IAAI,CAAC,MAAsB,CAAC,oBAAoB,EAAE,CAAA;;YAEnD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,KAAK,EAAE,CAAA;QAEtD,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;QAEjD,iFAAiF;QACjF,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;SAC7D,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI;YAClC,IAAI,CAAC,MAAsB,CAAC,mBAAmB,EAAE,CAAA;;YAElD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAExD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;IAED,uGAAuG;IAC/F,EAAE,CAAE,MAAmB;QAC7B,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACzC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAA;YAE9C,IAAI,MAAM,CAAC,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;;gBAC9D,MAAM,CAAC,OAAO,EAAE,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,2FAA2F;IACnF,EAAE,CAAE,MAAyB;QACnC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC1B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAA;QAC1E,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAA;QAExE,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE;YACtC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAChC,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,QAAQ,CAAE,OAAwB,EAAE,QAAwB;QAClE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;YAE9D,IAAI,CAAC,QAAQ,CAAC,aAAa;gBACzB,QAAQ,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,sFAAsF;QACtF,kFAAkF;QAElF,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;QAEjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YAEjG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YAE7B,OAAM;QACR,CAAC;QAED,uFAAuF;QACvF,0EAA0E;QAC1E,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAA;QAE7B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAEhC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;YAE9D,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YAE7B,OAAM;QACR,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjF,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YAE7B,OAAM;QACR,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,mCAAmC,CAAC,CAAA;QAEvE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;QAEhD,iEAAiE;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAErC,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI;YAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC;YAC/C,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAA;QAEhF,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAA;YAEjD,IAAI,CAAC,QAAQ,CAAC,aAAa;gBACzB,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,sCAAsC;IAC9B,KAAK,CAAC,KAAK,CAAE,OAAwB,EAC3C,QAAwB,EACxB,SAAiB,EACjB,GAAQ;QACR,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;YACxC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE;SACpE,EAAE,KAAK,IAAI,EAAE;YACZ,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAG,CAAC,OAAO,CAAC,CAAA;YAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YAErE,MAAM,IAAI,CAAC,OAAQ,CAAC,OAAO,CAAC;iBACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;iBACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;iBACnC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,OAAO,CAAE,OAAgB,EAAE,QAAwB;QACzD,OAAO,KAAK,EAAE,OAAwB,EAAE,EAAE;YACxC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAE3B,IAAI,MAAM,KAAK,SAAS;gBACtB,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;oBACvB,MAAM,GAAG,GAAG,CAAA;qBACT,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;oBACxC,MAAM,GAAG,GAAG,CAAA;qBACT,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;oBACtE,MAAM,GAAG,GAAG,CAAA;;oBAEZ,MAAM,GAAG,GAAG,CAAA;YAEhB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;YAEvB,MAAM,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QACzC,CAAC,CAAA;IACH,CAAC;IAEO,IAAI,CAAE,OAAgB,EAAE,QAAwB;QACtD,OAAO,KAAK,EAAE,SAAgB,EAAE,EAAE;YAChC,IAAI,CAAC;gBACH,oFAAoF;gBACpF,+EAA+E;gBAC/E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI;oBAChE,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAE7B,MAAM,MAAM,GAAG,SAAS,YAAY,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAA;gBACtE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;gBAEtB,sEAAsE;gBACtE,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,KAAK,SAAS;oBACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;gBAEvB,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;oBAC5B,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAA;oBAE5B,MAAM,OAAO,GAAoB,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAA;oBAEhE,qCAAqC;oBACrC,IAAI,SAAS,YAAY,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;wBACnE,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAA;oBAErC,qCAAqC;oBACrC,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;wBAC1B,OAAO,CAAC,IAAI,GAAG,SAAS,CAAA;yBACrB,IAAI,SAAS,YAAY,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK;wBAChE,OAAO,CAAC,IAAI;4BACV,SAAS,YAAY,SAAS;gCAC5B,CAAC,CAAC,SAAS,CAAC,IAAI;gCAChB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,CAAA;oBAEvE,MAAM,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;gBAE9C,IAAI,CAAC,QAAQ,CAAC,aAAa;oBACzB,IAAI,CAAC;wBACH,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;oBAC/B,CAAC;oBAAC,MAAM,CAAC;wBACP,yBAAyB;oBAC3B,CAAC;YACL,CAAC;QACH,CAAC,CAAA;IACH,CAAC;CACF;AAED,SAAS,WAAW,CAAE,QAAkB;IACtC,IAAI,QAAQ,KAAK,IAAI;QACnB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAA;IAE5B,OAAO,KAAK,CAAC,YAAY,CAAC;QACxB,0EAA0E;QAC1E,gBAAgB,EAAE,cAAc;QAChC,QAAQ,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE;KACxC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAE,OAAwB;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAA;AAC9D,CAAC;AAED,4FAA4F;AAC5F,SAAS,KAAK,CAAE,OAAwB,EAAE,SAAiB;IACzD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,SAAS,EAAE,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAc,CAAA;IACvB,CAAC;AACH,CAAC;AAED,8CAA8C;AAC9C,KAAK,UAAU,IAAI,CAAE,OAAwB;IAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IAEhD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAElD,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,eAAe,CAAE,OAAwB,EAAE,KAAkB;IACpE,MAAM,UAAU,GAA2B;QACzC,IAAI,EAAE,OAAO,CAAC,GAAG;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAA;IAED,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAChC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IAE9B,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QACjC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IAEhC,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAA;AAExB,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAA,CAAC,UAAU;AAElC,6EAA6E;AAC7E,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B,yFAAyF;AACzF,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;AAE1B;;;;;GAKG;AACH,SAAS,KAAK,CAAE,OAAmC;IACjD,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;QACzC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAEpC,kDAAkD;IAClD,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ;QACtF,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAA;IAElE,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,GAAG,GAAG,gBAAgB,CAAA;AAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAE/B,MAAM,QAAQ,GAAoC;IAChD,OAAO,EAAE,IAAI,GAAG,CAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxG,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK,GAAG,IAAI;IACnB,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,KAAK;CACb,CAAA"}
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/HTTP/Server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { IncomingMessage } from './types.js';
2
+ /**
3
+ * The client address: the value of the header the deployment names, and nothing otherwise.
4
+ * Of a header holding a list, the last value is the one the edge in front appended. The
5
+ * connection's address is never it: behind an edge it is the edge's.
6
+ */
7
+ export declare function address(request: IncomingMessage, header?: string): string | undefined;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The client address: the value of the header the deployment names, and nothing otherwise.
3
+ * Of a header holding a list, the last value is the one the edge in front appended. The
4
+ * connection's address is never it: behind an edge it is the edge's.
5
+ */
6
+ export function address(request, header) {
7
+ if (header === undefined)
8
+ return;
9
+ const value = request.headers[header];
10
+ const raw = Array.isArray(value) ? value[value.length - 1] : value;
11
+ const last = raw?.slice(raw.lastIndexOf(',') + 1).trim();
12
+ return last === '' ? undefined : last;
13
+ }
14
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../source/HTTP/address.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAE,OAAwB,EAAE,MAAe;IAChE,IAAI,MAAM,KAAK,SAAS;QACtB,OAAM;IAER,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAClE,MAAM,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAExD,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AACvC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import assert from 'node:assert';
2
+ import { quote } from '@toa.io/generic';
2
3
  import * as http from './HTTP/index.js';
3
4
  import * as schemas from './schemas.js';
4
5
  import { queryable } from './Mapping.js';
@@ -93,8 +94,9 @@ export class Query {
93
94
  parameters.splice(idx, 1);
94
95
  }
95
96
  if (parameters.length > 0) {
97
+ // a segment may carry `,` `;` `(` `)` `=`, which is criteria grammar when unquoted
96
98
  const criteria = parameters
97
- .map(({ name, value }) => `${name}==${value}`)
99
+ .map(({ name, value }) => `${name}==${quote(value)}`)
98
100
  .join(';');
99
101
  groups.push({ criteria, operator: this.prepend });
100
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Query.js","sourceRoot":"","sources":["../source/Query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Query.js","sourceRoot":"","sources":["../source/Query.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAEvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAKxC,MAAM,OAAO,KAAK;IACA,aAAa,CAAS;IAErB,KAAK,CAAc;IACnB,MAAM,GAAY,KAAK,CAAA;IACvB,OAAO,GAAc,GAAG,CAAA;IACxB,SAAS,CAAS;IAClB,UAAU,CAAS;IAEpC,YAAoB,KAAmB;QACrC,IAAI,CAAC,aAAa,GAAG,KAAK,EAAE,UAAU,KAAK,SAAS,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;QAExC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAA;YAC7C,KAAK,CAAC,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;YAE9C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,qCAAqC;gBACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC9B,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;;oBAE5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;gBAEpB,qCAAqC;gBACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAA;oBAE7C,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAEM,GAAG,CAAE,KAAiB,EAAE,UAAuB;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAE5B,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YAE/C,IAAI,KAAK,KAAK,IAAI;gBAChB,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;YAErD,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;YACtC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YACxB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YAEtB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS;gBACjC,EAAE,CAAC,KAAoB,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;QACzD,CAAC;QAED,OAAO;YACL,KAAK,EAAE,EAAE,CAAC,KAAmB;YAC7B,UAAU,EAAE,EAAE,CAAC,UAAU;SAC1B,CAAA;IACH,CAAC;IAEM,OAAO,CAAE,aAA4B;QAC1C,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ;YAChF,OAAO,IAAI,CAAA;QAEb,IAAI,KAAK,GAAkC,IAAI,CAAA;QAE/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;YAExD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,KAAK,KAAK,EAAE,CAAA;gBACZ,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAA;YAC3B,CAAC;YAED,OAAO,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAClD,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,KAAK,CAAE,KAAiB;QAI9B,IAAI,UAAU,GAAkC,IAAI,CAAA;QAEpD,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,SAAS;YACtC,KAAK,MAAM,GAAG,IAAI,KAAK;gBACrB,qCAAqC;gBACrC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,UAAU,KAAK,EAAE,CAAA;oBACjB,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAW,CAAA;oBAEtC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;gBACnB,CAAC;QAEL,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE/B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACjB,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;YAE1E,KAAK,GAAG,IAAK,CAAA;QACf,CAAC;QAED,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU;YACjD,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAA;QAE1D,OAAO;YACL,KAAK;YACL,UAAU;SACX,CAAA;IACH,CAAC;IAEO,WAAW,CAAE,KAAiB,EAAE,UAAuB;QAC7D,MAAM,MAAM,GAAoB,EAAE,CAAA;QAClC,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QAExE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;YAEhC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAC3B,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,mFAAmF;YACnF,MAAM,QAAQ,GAAG,UAAU;iBACxB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;iBACpD,IAAI,CAAC,GAAG,CAAC,CAAA;YAEZ,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS;YACnC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;QAE/D,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAC9B,IAAI,IAAI,CAAC,MAAM;gBACb,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAA;;gBAErD,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEjE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;gBAChE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;oBAC5B,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,GAAG;oBACvB,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAA;YACtC,CAAC,EAAE,EAAE,CAAC,CAAA;IACV,CAAC;IAEO,SAAS,CAAE,EAAc;QAC/B,MAAM,KAAK,GAAG,EAAgB,CAAA;QAE9B,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,6BAA6B,CAAC,CAAA;QACxE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,mCAAmC,CAAC,CAAA;QAE7E,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS;YACxB,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;;YAE5D,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAA;QAEtC,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS;YACvB,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC5D,CAAC;IAEO,OAAO,CAAE,EAAc;QAC7B,MAAM,KAAK,GAAG,EAAgB,CAAA;QAE9B,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;YACxD,OAAM;QAER,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAEtD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,SAAS,GAAG,CAAE,MAAc,EAAE,KAAuB,EAAE,IAAY;IACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAE/B,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,mBAAmB;YACxD,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAE5C,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA"}
@@ -1,7 +1,9 @@
1
1
  import type { Parameter } from './Match.js';
2
2
  import type * as syntax from './syntax/index.js';
3
- import type { Context, OutgoingMessage } from '../HTTP/index.js';
3
+ import type { Context, OutgoingMessage, Options } from '../HTTP/index.js';
4
4
  import type { Output } from '../io.js';
5
+ import type { extensions } from '@toa.io/core';
6
+ type Host = extensions.Host;
5
7
  export interface Directives {
6
8
  preflight: (context: Context, parameters: Parameter[]) => Promise<Output>;
7
9
  settle: (context: Context, response: OutgoingMessage) => Promise<void>;
@@ -21,6 +23,11 @@ export interface DirectiveFamily<TDirective = any, TExtension = any> {
21
23
  readonly name: string;
22
24
  readonly mandatory: boolean;
23
25
  create: (name: string, ...rest: any[]) => TDirective;
26
+ /**
27
+ * Called once per gateway with what the host provides and how the gateway is configured,
28
+ * before any directive is created.
29
+ */
30
+ mount?: (host: Host, options: Options) => void;
24
31
  /**
25
32
  * Puts the directives of one route in the order they must run in. Called once, when
26
33
  * the set is built — the order cannot depend on the request.
@@ -30,3 +37,4 @@ export interface DirectiveFamily<TDirective = any, TExtension = any> {
30
37
  settle?: (directives: TDirective[], request: Context & TExtension, response: OutgoingMessage) => void | Promise<void>;
31
38
  dispose?: (directives: TDirective[]) => void;
32
39
  }
40
+ export {};
@@ -1,9 +1,9 @@
1
1
  import { Connector, type Remote } from '@toa.io/core';
2
- import { type Bootloader } from './Factory.js';
2
+ import { type Host } from './Factory.js';
3
3
  export declare class Remotes extends Connector {
4
- private readonly boot;
4
+ private readonly host;
5
5
  private readonly cache;
6
- constructor(boot: Bootloader);
6
+ constructor(host: Host);
7
7
  discover(namespace: string, name: string, version?: string): Promise<Remote>;
8
8
  private locate;
9
9
  }
@@ -1,10 +1,10 @@
1
1
  import { Locator, Connector } from '@toa.io/core';
2
2
  export class Remotes extends Connector {
3
- boot;
3
+ host;
4
4
  cache = {};
5
- constructor(boot) {
5
+ constructor(host) {
6
6
  super();
7
- this.boot = boot;
7
+ this.host = host;
8
8
  }
9
9
  async discover(namespace, name, version = 'local') {
10
10
  const locator = new Locator(name, namespace);
@@ -14,7 +14,7 @@ export class Remotes extends Connector {
14
14
  }
15
15
  async locate(locator) {
16
16
  // the gateway is the origin of every call it forwards
17
- const remote = await this.boot.remote(locator, SOURCE);
17
+ const remote = await this.host.remote(locator, SOURCE);
18
18
  this.depends(remote);
19
19
  await remote.connect();
20
20
  return remote;
@@ -1 +1 @@
1
- {"version":3,"file":"Remotes.js","sourceRoot":"","sources":["../source/Remotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAA4B,MAAM,cAAc,CAAA;AAG3E,MAAM,OAAO,OAAQ,SAAQ,SAAS;IACnB,IAAI,CAAY;IAChB,KAAK,GAAoC,EAAE,CAAA;IAE5D,YAAoB,IAAgB;QAClC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAE,SAAiB,EAAE,IAAY,EAAE,UAAkB,OAAO;QAC/E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,OAAO,CAAA;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAExC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,MAAM,CAAE,OAAgB;QACpC,sDAAsD;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAEtD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAEpB,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QAEtB,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,MAAM,MAAM,GAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"Remotes.js","sourceRoot":"","sources":["../source/Remotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAA4B,MAAM,cAAc,CAAA;AAG3E,MAAM,OAAO,OAAQ,SAAQ,SAAS;IACnB,IAAI,CAAM;IACV,KAAK,GAAoC,EAAE,CAAA;IAE5D,YAAoB,IAAU;QAC5B,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAE,SAAiB,EAAE,IAAY,EAAE,UAAkB,OAAO;QAC/E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,OAAO,CAAA;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAExC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,MAAM,CAAE,OAAgB;QACpC,sDAAsD;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAEtD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAEpB,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QAEtB,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,MAAM,MAAM,GAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -1 +1,3 @@
1
1
  export declare const BRANCH_TTL = 1800000;
2
+ /** The replicas of the gateway decide together, whatever context they serve. */
3
+ export declare const ATOM_GROUP = "exposition";
@@ -1,2 +1,4 @@
1
1
  export const BRANCH_TTL = 1_800_000;
2
+ /** The replicas of the gateway decide together, whatever context they serve. */
3
+ export const ATOM_GROUP = 'exposition';
2
4
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../source/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA"}
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../source/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA;AAEnC,gFAAgF;AAChF,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA"}
@@ -45,6 +45,10 @@ export function deployment(_, annotation) {
45
45
  properties.debug = true;
46
46
  if (annotation.protocol !== undefined)
47
47
  properties.protocol = annotation.protocol;
48
+ if (annotation.ip !== undefined)
49
+ properties.ip = annotation.ip;
50
+ if (annotation.bouncer !== undefined)
51
+ properties.bouncer = annotation.bouncer;
48
52
  service.variables.push({
49
53
  name: 'TOA_EXPOSITION_PROPERTIES',
50
54
  value: JSON.stringify(properties)
@@ -1 +1 @@
1
- {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../source/deployment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../source/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,MAAM,MAAM,aAAa,CAAA;AAGhC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,UAAU,UAAU,CAAE,CAAU,EAAE,UAAuB;IAC7D,MAAM,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,EAAE,2CAA2C,CAAC,CAAA;IAChF,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,MAAM,CAAA;IAElC,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO;QAC9F,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACjC,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,KAAK;SACb;KACF,CAAA;IAED,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAA;QAE9C,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC5B,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,UAAU,CAAA;IAEzC,OAAO,CAAC,OAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAEnD,6EAA6E;IAC7E,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;QAChC,OAAO,CAAC,OAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;IAE3C,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS;QACtC,OAAO,CAAC,OAAQ,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAA;IAEvD,IAAI,UAAU,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS;QAC/C,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAA;IAEtD,MAAM,UAAU,GAAe,EAAE,WAAW,EAAE,CAAA;IAE9C,IAAI,KAAK,KAAK,IAAI;QAChB,UAAU,CAAC,KAAK,GAAG,IAAI,CAAA;IAEzB,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;QACnC,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IAE3C,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS;QAC7B,UAAU,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAA;IAE/B,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS;QAClC,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;IAEzC,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;KAClC,CAAC,CAAA;IAEF,2FAA2F;IAC3F,uFAAuF;IACvF,8EAA8E;IAC9E,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC7B,CAAC,CAAA;IAEF,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAA;AAChC,CAAC"}
@@ -17,6 +17,8 @@ export class Assert {
17
17
  if (context.request.headers.authorization === undefined)
18
18
  throw new http.Unauthorized();
19
19
  if (identity === null) {
20
+ if (!Incept.acceptable(context))
21
+ throw new http.Unauthorized();
20
22
  context.identity = await Incept.incept(context, newid());
21
23
  context.pipelines.response.push((response) => {
22
24
  response.status = 201;
@@ -1 +1 @@
1
- {"version":3,"file":"Assert.js","sourceRoot":"","sources":["../../../source/directives/auth/Assert.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,MAAM,OAAO,MAAM;IACA,QAAQ,CAAS;IAElC,YAAoB,OAAgB;QAClC,MAAM,CAAC,EAAE,CAAC,OAAO,OAAO,KAAK,SAAS,EAAE,iDAAiD,CAAC,CAAA;QAE1F,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,SAAS,CAAE,QAAyB,EAAE,OAAgB;QACjE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAEtC,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,KAAK,CAAC,MAAM,CAAE,OAAgB,EAAE,QAAyB;QAC/D,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS;YACrD,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;QAE/B,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YAExD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC3C,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"Assert.js","sourceRoot":"","sources":["../../../source/directives/auth/Assert.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,MAAM,OAAO,MAAM;IACA,QAAQ,CAAS;IAElC,YAAoB,OAAgB;QAClC,MAAM,CAAC,EAAE,CAAC,OAAO,OAAO,KAAK,SAAS,EAAE,iDAAiD,CAAC,CAAA;QAE1F,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,SAAS,CAAE,QAAyB,EAAE,OAAgB;QACjE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAEtC,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,KAAK,CAAC,MAAM,CAAE,OAAgB,EAAE,QAAyB;QAC/D,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS;YACrD,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;QAE/B,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7B,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;YAE/B,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YAExD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC3C,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -2,6 +2,7 @@ import * as http from '../../HTTP/index.js';
2
2
  import type { Output } from '../../io.js';
3
3
  import type { Remotes } from '../../Remotes.js';
4
4
  import type { Parameter, DirectiveFamily } from '../../RTD/index.js';
5
+ import type { Host } from '../../Factory.js';
5
6
  import type { Directive, Extension, Context } from './types.js';
6
7
  export declare class Authorization implements DirectiveFamily<Directive, Extension> {
7
8
  readonly depends: string[];
@@ -11,6 +12,11 @@ export declare class Authorization implements DirectiveFamily<Directive, Extensi
11
12
  private readonly discovery;
12
13
  private tokens;
13
14
  private bans;
15
+ /** Failed authentications per address, reconciled with the other gateways. */
16
+ private meter;
17
+ private sync;
18
+ mount(host: Host, options: http.Options): void;
19
+ dispose(): void;
14
20
  create(name: string, value: any, remotes: Remotes): Directive;
15
21
  arrange(directives: Directive[]): void;
16
22
  preflight(directives: Directive[], context: Context, parameters: Parameter[]): Promise<Output>;
@@ -19,3 +25,5 @@ export declare class Authorization implements DirectiveFamily<Directive, Extensi
19
25
  private permitted;
20
26
  private banned;
21
27
  }
28
+ /** Whether the permissions admit the method on the path the request is routed by. */
29
+ export declare function permits(permissions: Record<string, string[]>, method: string, pathname: string): boolean;
@@ -16,7 +16,10 @@ import { Federation } from './Federation.js';
16
16
  import { Anyone } from './Anyone.js';
17
17
  import { Input } from './Input.js';
18
18
  import { split } from './split.js';
19
- import { PRIMARY, PROVIDERS } from './schemes.js';
19
+ import { PRIMARY, provider as providerOf } from './schemes.js';
20
+ import { ATOM_GROUP } from '../../const.js';
21
+ import { Quotas, Sync } from '../io/lib/throttle/index.js';
22
+ import { Keys } from '../io/lib/throttle/Keys.js';
20
23
  export class Authorization {
21
24
  depends = ['Vary'];
22
25
  name = 'auth';
@@ -25,6 +28,30 @@ export class Authorization {
25
28
  discovery = {};
26
29
  tokens = null;
27
30
  bans = null;
31
+ /** Failed authentications per address, reconciled with the other gateways. */
32
+ meter = null;
33
+ sync = null;
34
+ mount(host, options) {
35
+ this.sync?.dispose();
36
+ this.sync = null;
37
+ this.meter = null;
38
+ const bouncer = options.bouncer;
39
+ // keyed by address, which is the deployment's to name, so off until it is set
40
+ if (bouncer === undefined)
41
+ return;
42
+ this.meter = new Quotas({
43
+ keys: Keys.create([{ method: 'ip', options: BOUNCER }]),
44
+ requests: bouncer.attempts ?? ATTEMPTS,
45
+ interval: (bouncer.interval ?? INTERVAL) * 1000,
46
+ conditional: true, // charged on a rejection, not on a check
47
+ name: METER
48
+ });
49
+ this.sync = new Sync(host.atom(ATOM_GROUP));
50
+ this.sync.register(this.meter);
51
+ }
52
+ dispose() {
53
+ this.sync?.dispose();
54
+ }
28
55
  create(name, value, remotes) {
29
56
  assert.ok(name in constructors, `Directive 'auth:${name}' is not implemented`);
30
57
  const Class = constructors[name];
@@ -36,7 +63,7 @@ export class Authorization {
36
63
  directives.sort((a, b) => (a.priority ?? 1) - (b.priority ?? 1));
37
64
  }
38
65
  async preflight(directives, context, parameters) {
39
- context.identity = await this.resolve(context.authority, context.request.headers.authorization);
66
+ context.identity = await this.resolve(context);
40
67
  for (const directive of directives) {
41
68
  const allow = await directive.authorize(context.identity, context, parameters);
42
69
  if (allow)
@@ -59,8 +86,12 @@ export class Authorization {
59
86
  return;
60
87
  if (await this.banned(identity))
61
88
  throw new http.Unauthorized();
62
- // Role directive may have already set the value
63
- identity.roles ??= await Role.get(identity, this.discovery.roles);
89
+ // a token carries the roles it was issued with, and the refresh is where they are read again;
90
+ // any other scheme has just read them, unless a Role directive already did
91
+ if (identity.scheme === PRIMARY)
92
+ identity.roles = await Role.get(identity, this.discovery.roles);
93
+ else
94
+ identity.roles ??= await Role.get(identity, this.discovery.roles);
64
95
  this.tokens ??= await this.discovery.tokens;
65
96
  const token = await this.tokens.invoke('encrypt', {
66
97
  input: { authority: context.authority, identity }
@@ -70,11 +101,16 @@ export class Authorization {
70
101
  response.headers.set('authorization', authorization);
71
102
  response.headers.set('cache-control', 'no-store');
72
103
  }
73
- async resolve(authority, authorization) {
104
+ async resolve(context) {
105
+ const { authority } = context;
106
+ const { authorization } = context.request.headers;
74
107
  if (authorization === undefined)
75
108
  return null;
109
+ const retry = this.meter?.check(context, NONE) ?? 0;
110
+ if (retry > 0)
111
+ throw new http.TooManyRequests(retry);
76
112
  const [scheme, credentials] = split(authorization);
77
- const provider = PROVIDERS[scheme];
113
+ const provider = providerOf(scheme);
78
114
  if (provider === undefined)
79
115
  throw new http.Unauthorized(`Unknown authentication scheme '${scheme}'`);
80
116
  this.schemes[scheme] ??= await this.discovery[provider];
@@ -87,8 +123,11 @@ export class Authorization {
87
123
  });
88
124
  if (result instanceof Error) {
89
125
  const code = result.code;
90
- if (typeof code === 'string')
126
+ if (typeof code === 'string') {
91
127
  console.info('Authentication failed', { code });
128
+ context.rejection = code;
129
+ }
130
+ this.meter?.use(context, null);
92
131
  return null;
93
132
  }
94
133
  const identity = result.identity;
@@ -102,10 +141,8 @@ export class Authorization {
102
141
  const permissions = context.identity?.permissions;
103
142
  if (permissions === undefined)
104
143
  return true;
105
- return Object.entries(permissions).some(([pattern, methods]) => {
106
- return methods.some((method) => method === '*' || method === context.request.method) &&
107
- glob(pattern).match(context.request.url);
108
- });
144
+ // the route is matched on the normalized path, so the permission is too
145
+ return permits(permissions, context.request.method, context.url.pathname);
109
146
  }
110
147
  async banned(identity) {
111
148
  this.bans ??= await this.discovery.bans;
@@ -113,6 +150,11 @@ export class Authorization {
113
150
  return ban.banned;
114
151
  }
115
152
  }
153
+ /** Whether the permissions admit the method on the path the request is routed by. */
154
+ export function permits(permissions, method, pathname) {
155
+ return Object.entries(permissions).some(([pattern, methods]) => methods.some((allowed) => allowed === '*' || allowed === method) &&
156
+ glob(pattern).match(pathname));
157
+ }
116
158
  /**
117
159
  * `minimatch(str, pattern)` compiles the pattern on every call, and a permission is
118
160
  * matched on every request the identity makes. Patterns arrive with an identity, hence
@@ -128,6 +170,14 @@ function glob(pattern) {
128
170
  }
129
171
  return compiled;
130
172
  }
173
+ /** What an address may fail at once, and the seconds it takes to earn them back. */
174
+ const ATTEMPTS = 20;
175
+ const INTERVAL = 60;
176
+ /** Who is speaking when a request cannot be keyed. */
177
+ const BOUNCER = 'Authentication bouncer';
178
+ /** The meter's name in the atom: `atom:exposition:meter:credentials:<address>`. */
179
+ const METER = 'credentials';
180
+ const NONE = [];
131
181
  const GLOBS = new Map();
132
182
  const GLOBS_LIMIT = 1024;
133
183
  const constructors = {