@toa.io/extensions.exposition 1.0.0-alpha.267 → 1.0.0-alpha.268
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.
- package/CHANGELOG.md +15 -0
- package/components/{octets.storage → exposition.octets}/manifest.toa.yaml +2 -2
- package/components/exposition.stash/manifest.toa.yaml +12 -0
- package/components/exposition.stash/operations/count.js +7 -0
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.credentials/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.keys/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.otp/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.passkeys/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/documentation/io.md +45 -17
- package/documentation/notes/throttling.md +6 -0
- package/features/io.throttle.feature +127 -0
- package/features/map.feature +5 -5
- package/features/octets.cloudinary.feature +12 -9
- package/features/octets.download.feature +4 -3
- package/features/octets.entries.feature +5 -3
- package/features/octets.feature +4 -4
- package/features/octets.head.feature +1 -1
- package/features/octets.location.feature +1 -1
- package/features/octets.meta.feature +2 -2
- package/features/octets.workflows.feature +7 -7
- package/package.json +8 -8
- package/schemas/io/throttle.cos.yaml +9 -2
- package/source/Directive.test.ts +72 -7
- package/source/Directive.ts +15 -5
- package/source/HTTP/messages.ts +5 -1
- package/source/Interception.ts +8 -0
- package/source/RTD/Context.ts +3 -0
- package/source/RTD/Directives.ts +1 -1
- package/source/RTD/Tree.ts +17 -0
- package/source/RTD/factory.ts +11 -1
- package/source/directives/cors/CORS.ts +26 -9
- package/source/directives/io/Directive.ts +4 -2
- package/source/directives/io/IO.ts +18 -7
- package/source/directives/io/Throttle.ts +8 -6
- package/source/directives/io/lib/throttle/Configuration.test.ts +21 -0
- package/source/directives/io/lib/throttle/Configuration.ts +11 -4
- package/source/directives/io/lib/throttle/Keys.ts +12 -11
- package/source/directives/io/lib/throttle/Quotas.test.ts +207 -46
- package/source/directives/io/lib/throttle/Quotas.ts +59 -35
- package/source/directives/io/lib/throttle/components/Component.ts +2 -1
- package/source/directives/io/lib/throttle/components/Identity.ts +19 -0
- package/source/directives/io/lib/throttle/components/Route.ts +19 -0
- package/source/directives/io/lib/throttle/components/Segment.ts +19 -0
- package/source/directives/io/lib/throttle/components/index.ts +8 -2
- package/source/directives/io/schemas.test.ts +16 -0
- package/source/directives/octets/Octets.ts +1 -1
- package/source/directives/octets/workflows/Execution.ts +4 -2
- package/transpiled/Directive.d.ts +3 -1
- package/transpiled/Directive.js +12 -3
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/HTTP/messages.js +4 -1
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Interception.d.ts +2 -0
- package/transpiled/Interception.js +4 -0
- package/transpiled/Interception.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +2 -0
- package/transpiled/RTD/Directives.d.ts +1 -1
- package/transpiled/RTD/Tree.js +14 -0
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.js +8 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/directives/cors/CORS.d.ts +8 -1
- package/transpiled/directives/cors/CORS.js +23 -9
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +4 -2
- package/transpiled/directives/io/IO.d.ts +6 -3
- package/transpiled/directives/io/IO.js +11 -5
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/io/Throttle.d.ts +5 -3
- package/transpiled/directives/io/Throttle.js +6 -6
- package/transpiled/directives/io/Throttle.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Configuration.d.ts +6 -2
- package/transpiled/directives/io/lib/throttle/Configuration.js +5 -2
- package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Keys.d.ts +4 -3
- package/transpiled/directives/io/lib/throttle/Keys.js +7 -10
- package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Quotas.d.ts +27 -8
- package/transpiled/directives/io/lib/throttle/Quotas.js +47 -31
- package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Component.d.ts +2 -1
- package/transpiled/directives/io/lib/throttle/components/Identity.d.ts +11 -0
- package/transpiled/directives/io/lib/throttle/components/Identity.js +16 -0
- package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/Route.d.ts +12 -0
- package/transpiled/directives/io/lib/throttle/components/Route.js +20 -0
- package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/Segment.d.ts +9 -0
- package/transpiled/directives/io/lib/throttle/components/Segment.js +20 -0
- package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/index.d.ts +1 -1
- package/transpiled/directives/io/lib/throttle/components/index.js +7 -1
- package/transpiled/directives/io/lib/throttle/components/index.js.map +1 -1
- package/transpiled/directives/octets/Octets.js +1 -1
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/workflows/Execution.js +3 -1
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/features/auth.issue.feature +0 -32
- package/source/directives/io/lib/throttle/Interval.ts +0 -40
- package/source/directives/io/lib/throttle/Quota.ts +0 -22
- package/transpiled/directives/io/lib/throttle/Interval.d.ts +0 -10
- package/transpiled/directives/io/lib/throttle/Interval.js +0 -39
- package/transpiled/directives/io/lib/throttle/Interval.js.map +0 -1
- package/transpiled/directives/io/lib/throttle/Quota.d.ts +0 -8
- package/transpiled/directives/io/lib/throttle/Quota.js +0 -22
- package/transpiled/directives/io/lib/throttle/Quota.js.map +0 -1
- /package/components/{octets.storage → exposition.octets}/operations/delete.js +0 -0
- /package/components/{octets.storage → exposition.octets}/operations/get.js +0 -0
- /package/components/{octets.storage → exposition.octets}/operations/head.js +0 -0
- /package/components/{octets.storage → exposition.octets}/operations/put.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Directive.js","sourceRoot":"","sources":["../source/Directive.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AAMpD,MAAa,UAAU;IACJ,IAAI,CAAoB;IAEzC,YAAoB,IAAwB;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAE,OAAgB,EAAE,UAA2B;QACnE,IAAI,MAAM,GAAG,IAAI,CAAA;QAEjB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;gBACpC,SAAQ;YAEV,MAAM,GAAG,GAAG,MAAM,kBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,EACtD,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,SAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;YAE/E,IAAI,GAAG,KAAK,IAAI;gBACd,SAAQ;YAEV,IAAI,MAAM,KAAK,IAAI;gBACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;;gBAE1D,MAAM,GAAG,GAAG,CAAA;QAChB,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,KAAK,CAAC,MAAM,CAAE,OAAgB,EAAE,QAAyB;QAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI;YACzB,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;gBACjC,MAAM,kBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,EACvC,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAChF,CAAC;IAEM,OAAO;QACZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI;YACzB,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;CACF;AAxCD,gCAwCC;AAED,MAAa,iBAAiB;IACX,OAAO,CAAS;IAChB,QAAQ,GAAwC,EAAE,CAAA;IAClD,SAAS,GAAa,EAAE,CAAA;IACxB,SAAS,GAAiB,EAAE,CAAA;IAE7C,YAAoB,QAA+B,EAAE,OAAgB;QACnE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;YAEnC,IAAI,MAAM,CAAC,SAAS;gBAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,MAAM,CAAE,YAAoC;
|
|
1
|
+
{"version":3,"file":"Directive.js","sourceRoot":"","sources":["../source/Directive.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,7 +75,10 @@ async function read(context) {
|
|
|
75
75
|
exports.read = read;
|
|
76
76
|
function send(message, context, response) {
|
|
77
77
|
if (message.body === undefined || message.body === null) {
|
|
78
|
-
|
|
78
|
+
// a HEAD reply carries no body but must still report the length a GET would
|
|
79
|
+
// have returned, so a length already set by a directive is left alone
|
|
80
|
+
if (!response.hasHeader('content-length'))
|
|
81
|
+
response.setHeader('content-length', '0');
|
|
79
82
|
response.end();
|
|
80
83
|
return;
|
|
81
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../source/HTTP/messages.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../source/HTTP/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ class Interception {
|
|
|
5
5
|
interceptors;
|
|
6
6
|
constructor(interceptors) {
|
|
7
7
|
this.interceptors = interceptors;
|
|
8
|
+
// interceptors are module singletons, so a second gateway in one process —
|
|
9
|
+
// which is how the features run — would otherwise inherit the first one's state
|
|
10
|
+
for (const interceptor of interceptors)
|
|
11
|
+
interceptor.reset?.();
|
|
8
12
|
}
|
|
9
13
|
async intercept(input) {
|
|
10
14
|
for (const interceptor of this.interceptors) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interception.js","sourceRoot":"","sources":["../source/Interception.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IACN,YAAY,CAAe;IAE5C,YAAoB,YAA2B;QAC7C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"Interception.js","sourceRoot":"","sources":["../source/Interception.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IACN,YAAY,CAAe;IAE5C,YAAoB,YAA2B;QAC7C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAEhC,2EAA2E;QAC3E,gFAAgF;QAChF,KAAK,MAAM,WAAW,IAAI,YAAY;YACpC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAA;IACzB,CAAC;IAEM,KAAK,CAAC,SAAS,CAAE,KAAY;QAClC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAEjD,IAAI,MAAM,KAAK,IAAI;gBACjB,OAAO,MAAM,CAAA;QACjB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAtBD,oCAsBC"}
|
|
@@ -8,7 +8,7 @@ export interface Directives {
|
|
|
8
8
|
dispose: () => void;
|
|
9
9
|
}
|
|
10
10
|
export interface DirectiveFactory {
|
|
11
|
-
create: (directives: syntax.Directive[]) => Directives;
|
|
11
|
+
create: (directives: syntax.Directive[], route: string) => Directives;
|
|
12
12
|
dispose: () => void;
|
|
13
13
|
}
|
|
14
14
|
export interface DirectiveSet {
|
package/transpiled/RTD/Tree.js
CHANGED
|
@@ -47,11 +47,25 @@ class Tree {
|
|
|
47
47
|
factory: this.directives,
|
|
48
48
|
stack: this.root.directives ?? []
|
|
49
49
|
},
|
|
50
|
+
path: label(extension),
|
|
50
51
|
extension
|
|
51
52
|
};
|
|
52
53
|
return (0, factory_1.createNode)(node, context);
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
exports.Tree = Tree;
|
|
57
|
+
/**
|
|
58
|
+
* A branch's routes are relative to wherever it is merged, and the mount point is not
|
|
59
|
+
* known while it is being built — so the component it came from is what keeps two
|
|
60
|
+
* branches from looking like the same route.
|
|
61
|
+
*/
|
|
62
|
+
function label(extension) {
|
|
63
|
+
if (extension === null || typeof extension !== 'object')
|
|
64
|
+
return '';
|
|
65
|
+
const { namespace, component } = extension;
|
|
66
|
+
return typeof namespace === 'string' && typeof component === 'string'
|
|
67
|
+
? `${namespace}.${component}`
|
|
68
|
+
: '';
|
|
69
|
+
}
|
|
56
70
|
const PROTECTED = true;
|
|
57
71
|
//# sourceMappingURL=Tree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.js","sourceRoot":"","sources":["../../source/RTD/Tree.ts"],"names":[],"mappings":";;;AAAA,uCAAiD;AACjD,uCAAoC;AAQpC,MAAa,IAAI;IACE,IAAI,CAAa;IACjB,KAAK,CAAM;IACX,SAAS,CAAkB;IAC3B,UAAU,CAAkB;IAE7C,YAAoB,IAAiB,EAAE,SAA2B,EAAE,UAA4B;QAC9F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;IAEM,KAAK,CAAE,IAAY;QACxB,IAAI,IAAI,KAAK,GAAG;YACd,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,UAAU,EAAE,EAAE;aACf,CAAA;QAEH,MAAM,SAAS,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAA;QAEhC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACpC,CAAC;IAEM,KAAK,CAAE,IAAiB,EAAE,SAAkB;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAE3D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED;;;OAGG;IACI,OAAO,CAAE,KAAa;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAA,mBAAS,GAAE,CAAA;QAE3C,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;IAEO,UAAU,CAAE,IAAiB,EAAE,OAAgB,EAAE,SAAmB;QAC1E,MAAM,OAAO,GAAY;YACvB,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE;gBACV,OAAO,EAAE,IAAI,CAAC,UAAU;gBACxB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;aAClC;YACD,SAAS;SACV,CAAA;QAED,OAAO,IAAA,oBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"Tree.js","sourceRoot":"","sources":["../../source/RTD/Tree.ts"],"names":[],"mappings":";;;AAAA,uCAAiD;AACjD,uCAAoC;AAQpC,MAAa,IAAI;IACE,IAAI,CAAa;IACjB,KAAK,CAAM;IACX,SAAS,CAAkB;IAC3B,UAAU,CAAkB;IAE7C,YAAoB,IAAiB,EAAE,SAA2B,EAAE,UAA4B;QAC9F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;IAEM,KAAK,CAAE,IAAY;QACxB,IAAI,IAAI,KAAK,GAAG;YACd,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,UAAU,EAAE,EAAE;aACf,CAAA;QAEH,MAAM,SAAS,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAA;QAEhC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACpC,CAAC;IAEM,KAAK,CAAE,IAAiB,EAAE,SAAkB;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAE3D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED;;;OAGG;IACI,OAAO,CAAE,KAAa;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAA,mBAAS,GAAE,CAAA;QAE3C,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;IAEO,UAAU,CAAE,IAAiB,EAAE,OAAgB,EAAE,SAAmB;QAC1E,MAAM,OAAO,GAAY;YACvB,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE;gBACV,OAAO,EAAE,IAAI,CAAC,UAAU;gBACxB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;aAClC;YACD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;YACtB,SAAS;SACV,CAAA;QAED,OAAO,IAAA,oBAAU,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;CACF;AA5DD,oBA4DC;AAED;;;;GAIG;AACH,SAAS,KAAK,CAAE,SAAkB;IAChC,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ;QACrD,OAAO,EAAE,CAAA;IAEX,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,SAAoC,CAAA;IAErE,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ;QACnE,CAAC,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE;QAC7B,CAAC,CAAC,EAAE,CAAA;AACR,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAA"}
|
|
@@ -34,14 +34,21 @@ function branchTTL() {
|
|
|
34
34
|
exports.branchTTL = branchTTL;
|
|
35
35
|
function createRoute(route, context) {
|
|
36
36
|
const stack = context.directives.stack.slice();
|
|
37
|
+
const path = context.path;
|
|
37
38
|
const segments = (0, segment_1.segment)(route.path);
|
|
39
|
+
context.path = join(path, route.path);
|
|
38
40
|
const node = createNode(route.node, context);
|
|
39
41
|
context.directives.stack = stack; // restore
|
|
42
|
+
context.path = path;
|
|
40
43
|
return new Route_1.Route(segments, node);
|
|
41
44
|
}
|
|
45
|
+
function join(base, path) {
|
|
46
|
+
// '/one/' and '/two/' would otherwise read as '/one//two/'
|
|
47
|
+
return (base + path).replace(/\/+/g, '/').replace(/(.)\/$/, '$1');
|
|
48
|
+
}
|
|
42
49
|
function createMethod(method, context) {
|
|
43
50
|
const stack = method.directives.concat(context.directives.stack);
|
|
44
|
-
const directives = context.directives.factory.create(stack);
|
|
51
|
+
const directives = context.directives.factory.create(stack, context.path);
|
|
45
52
|
const endpoint = method.mapping?.endpoint === undefined
|
|
46
53
|
? null
|
|
47
54
|
: context.endpoints.create(method, context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../source/RTD/factory.ts"],"names":[],"mappings":";;;AAAA,oCAAqC;AACrC,iCAA8C;AAC9C,mCAA+B;AAC/B,uCAAmC;AACnC,qCAA+C;AAI/C,SAAgB,UAAU,CAAE,IAAiB,EAAE,OAAgB;IAC7D,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QACxB,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAA;;QAE1C,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAE7E,MAAM,MAAM,GAAY,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/E,MAAM,OAAO,GAAY,EAAE,CAAA;IAE3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;QAC/B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEtD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAA;IAEnD,MAAM,UAAU,GAAe;QAC7B,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE;KAC1D,CAAA;IAED,OAAO,IAAI,WAAI,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;AAC9C,CAAC;AArBD,gCAqBC;AAED,SAAgB,SAAS;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAA;IAEzD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QACrC,OAAO,kBAAU,CAAA;IAEnB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAE5B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAU,CAAA;AACtD,CAAC;AATD,8BASC;AAED,SAAS,WAAW,CAAE,KAAmB,EAAE,OAAgB;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC9C,MAAM,QAAQ,GAAG,IAAA,iBAAO,EAAC,KAAK,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../source/RTD/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,16 @@ import type { Input, Output } from '../../io';
|
|
|
2
2
|
import type { Interceptor } from '../../Interception';
|
|
3
3
|
export declare class CORS implements Interceptor {
|
|
4
4
|
readonly name = "cors";
|
|
5
|
-
private
|
|
5
|
+
private requestHeaders;
|
|
6
6
|
private readonly headers;
|
|
7
7
|
intercept(input: Input): Output;
|
|
8
|
+
reset(): void;
|
|
8
9
|
allow(header: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Sorted, because the set is filled as branches merge and their order is not
|
|
12
|
+
* fixed — an unsorted value would differ between otherwise identical processes,
|
|
13
|
+
* and between one restart and the next.
|
|
14
|
+
*/
|
|
15
|
+
private allowedHeaders;
|
|
9
16
|
private preflightResponse;
|
|
10
17
|
}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CORS = void 0;
|
|
4
|
+
/** What is allowed before any directive asks for more. */
|
|
5
|
+
const REQUEST_HEADERS = [
|
|
6
|
+
'accept',
|
|
7
|
+
'authorization',
|
|
8
|
+
'content-type',
|
|
9
|
+
'if-match',
|
|
10
|
+
'if-none-match'
|
|
11
|
+
];
|
|
4
12
|
class CORS {
|
|
5
13
|
name = 'cors';
|
|
6
|
-
requestHeaders = new Set(
|
|
7
|
-
'accept',
|
|
8
|
-
'authorization',
|
|
9
|
-
'content-type',
|
|
10
|
-
'if-match',
|
|
11
|
-
'if-none-match'
|
|
12
|
-
]);
|
|
14
|
+
requestHeaders = new Set(REQUEST_HEADERS);
|
|
13
15
|
headers = new Headers({
|
|
14
16
|
'access-control-allow-methods': 'GET, POST, PUT, PATCH, DELETE, LOCK, UNLOCK',
|
|
15
17
|
'access-control-allow-credentials': 'true',
|
|
16
|
-
'access-control-allow-headers':
|
|
18
|
+
'access-control-allow-headers': this.allowedHeaders(),
|
|
17
19
|
'access-control-max-age': '3600',
|
|
18
20
|
'cache-control': 'max-age=3600',
|
|
19
21
|
vary: 'origin'
|
|
@@ -35,9 +37,21 @@ class CORS {
|
|
|
35
37
|
});
|
|
36
38
|
return null;
|
|
37
39
|
}
|
|
40
|
+
reset() {
|
|
41
|
+
this.requestHeaders = new Set(REQUEST_HEADERS);
|
|
42
|
+
this.headers.set('access-control-allow-headers', this.allowedHeaders());
|
|
43
|
+
}
|
|
38
44
|
allow(header) {
|
|
39
45
|
this.requestHeaders.add(header.toLowerCase());
|
|
40
|
-
this.headers.set('access-control-allow-headers',
|
|
46
|
+
this.headers.set('access-control-allow-headers', this.allowedHeaders());
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Sorted, because the set is filled as branches merge and their order is not
|
|
50
|
+
* fixed — an unsorted value would differ between otherwise identical processes,
|
|
51
|
+
* and between one restart and the next.
|
|
52
|
+
*/
|
|
53
|
+
allowedHeaders() {
|
|
54
|
+
return Array.from(this.requestHeaders).sort().join(', ');
|
|
41
55
|
}
|
|
42
56
|
preflightResponse(origin) {
|
|
43
57
|
this.headers.set('access-control-allow-origin', origin);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CORS.js","sourceRoot":"","sources":["../../../source/directives/cors/CORS.ts"],"names":[],"mappings":";;;AAGA,MAAa,IAAI;IACC,IAAI,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"CORS.js","sourceRoot":"","sources":["../../../source/directives/cors/CORS.ts"],"names":[],"mappings":";;;AAGA,0DAA0D;AAC1D,MAAM,eAAe,GAAG;IACtB,QAAQ;IACR,eAAe;IACf,cAAc;IACd,UAAU;IACV,eAAe;CAChB,CAAA;AAED,MAAa,IAAI;IACC,IAAI,GAAG,MAAM,CAAA;IAErB,cAAc,GAAG,IAAI,GAAG,CAAS,eAAe,CAAC,CAAA;IAExC,OAAO,GAAG,IAAI,OAAO,CAAC;QACrC,8BAA8B,EAAE,6CAA6C;QAC7E,kCAAkC,EAAE,MAAM;QAC1C,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE;QACrD,wBAAwB,EAAE,MAAM;QAChC,eAAe,EAAE,cAAc;QAC/B,IAAI,EAAE,QAAQ;KACf,CAAC,CAAA;IAEK,SAAS,CAAE,KAAY;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;QAE3C,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;YAC5D,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAEvC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACvC,MAAM,CAAC,OAAO,KAAK,IAAI,OAAO,EAAE,CAAA;YAEhC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;gBACzD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAA;gBAC9D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAChD,wEAAwE,CAAC,CAAA;YAC7E,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;YAEnC,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS;gBAC/D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;IACzE,CAAC;IAEM,KAAK,CAAE,MAAc;QAC1B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;IACzE,CAAC;IAED;;;;OAIG;IACK,cAAc;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC;IAEO,iBAAiB,CAAE,MAAc;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;QAEvD,OAAO;YACL,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAA;IACH,CAAC;CACF;AAlED,oBAkEC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import type { Remote } from '@toa.io/core';
|
|
2
|
+
import type { Parameter } from '../../RTD';
|
|
1
3
|
import type { Input as Context } from '../../io';
|
|
2
4
|
import type * as http from '../../HTTP';
|
|
3
5
|
export interface Directive {
|
|
4
|
-
preflight: (context: Context) => void;
|
|
6
|
+
preflight: (context: Context, parameters: Parameter[]) => void;
|
|
5
7
|
settle?: (context: Context, response: http.OutgoingMessage) => Promise<void> | void;
|
|
6
8
|
dispose?: () => void;
|
|
7
9
|
}
|
|
8
10
|
export interface Constructor {
|
|
9
11
|
validate: (value: unknown) => void;
|
|
10
|
-
new (value: any): Directive;
|
|
12
|
+
new (value: any, counter: Promise<Remote>, route: string): Directive;
|
|
11
13
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type * as http from '../../HTTP';
|
|
2
|
+
import type { Parameter, DirectiveFamily } from '../../RTD';
|
|
3
|
+
import type { Remotes } from '../../Remotes';
|
|
2
4
|
import type { Directive } from './Directive';
|
|
3
|
-
import type { DirectiveFamily } from '../../RTD';
|
|
4
5
|
export declare class IO implements DirectiveFamily<Directive> {
|
|
5
6
|
readonly name = "io";
|
|
6
7
|
readonly mandatory = true;
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
/** Throttling counts through a component, because only a component has a stash aspect. */
|
|
9
|
+
private counter;
|
|
10
|
+
create(name: string, value: unknown, remotes: Remotes, route: string): Directive;
|
|
11
|
+
preflight(directives: Directive[], context: http.Context, parameters: Parameter[]): null;
|
|
9
12
|
settle(directives: Directive[], context: http.Context, output: http.OutgoingMessage): Promise<void>;
|
|
10
13
|
dispose(directives: Directive[]): void;
|
|
11
14
|
}
|
|
@@ -7,21 +7,27 @@ const Throttle_1 = require("./Throttle");
|
|
|
7
7
|
class IO {
|
|
8
8
|
name = 'io';
|
|
9
9
|
mandatory = true;
|
|
10
|
-
|
|
10
|
+
/** Throttling counts through a component, because only a component has a stash aspect. */
|
|
11
|
+
counter = null;
|
|
12
|
+
// eslint-disable-next-line max-params
|
|
13
|
+
create(name, value, remotes, route) {
|
|
11
14
|
if (!(name in constructors))
|
|
12
15
|
throw new Error(`Directive 'io:${name}' is not implemented`);
|
|
13
16
|
const Directive = constructors[name];
|
|
14
17
|
Directive.validate(value);
|
|
15
|
-
|
|
18
|
+
// discovering boots the component, so nothing is discovered until something throttles
|
|
19
|
+
if (name === 'throttle')
|
|
20
|
+
this.counter ??= remotes.discover('exposition', 'stash');
|
|
21
|
+
return new Directive(value, this.counter, route);
|
|
16
22
|
}
|
|
17
|
-
preflight(directives, context) {
|
|
23
|
+
preflight(directives, context, parameters) {
|
|
18
24
|
let restricted = false;
|
|
19
25
|
for (const directive of directives) {
|
|
20
26
|
restricted ||= directive instanceof Output_1.Output;
|
|
21
|
-
directive.preflight(context);
|
|
27
|
+
directive.preflight(context, parameters);
|
|
22
28
|
}
|
|
23
29
|
if (!restricted)
|
|
24
|
-
DENIAL.preflight(context);
|
|
30
|
+
DENIAL.preflight(context, parameters);
|
|
25
31
|
return null;
|
|
26
32
|
}
|
|
27
33
|
async settle(directives, context, output) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IO.js","sourceRoot":"","sources":["../../../source/directives/io/IO.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AACjC,mCAA+B;AAC/B,yCAAqC;
|
|
1
|
+
{"version":3,"file":"IO.js","sourceRoot":"","sources":["../../../source/directives/io/IO.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AACjC,mCAA+B;AAC/B,yCAAqC;AAOrC,MAAa,EAAE;IACG,IAAI,GAAG,IAAI,CAAA;IACX,SAAS,GAAG,IAAI,CAAA;IAEhC,0FAA0F;IAClF,OAAO,GAA2B,IAAI,CAAA;IAE9C,sCAAsC;IAC/B,MAAM,CAAE,IAAY,EAAE,KAAc,EAAE,OAAgB,EAAE,KAAa;QAC1E,IAAI,CAAC,CAAC,IAAI,IAAI,YAAY,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,sBAAsB,CAAC,CAAA;QAE9D,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAEpC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEzB,sFAAsF;QACtF,IAAI,IAAI,KAAK,UAAU;YACrB,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAE1D,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAQ,EAAE,KAAK,CAAC,CAAA;IACnD,CAAC;IAEM,SAAS,CAAE,UAAuB,EAAE,OAAqB,EAC9D,UAAuB;QACvB,IAAI,UAAU,GAAG,KAAK,CAAA;QAEtB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,UAAU,KAAK,SAAS,YAAY,eAAM,CAAA;YAE1C,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,UAAU;YACb,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAEvC,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,KAAK,CAAC,MAAM,CAAE,UAAuB,EAAE,OAAqB,EAAE,MAA4B;QAC/F,KAAK,MAAM,SAAS,IAAI,UAAU;YAChC,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAEM,OAAO,CAAE,UAAuB;QACrC,KAAK,MAAM,SAAS,IAAI,UAAU;YAChC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAA;IACzB,CAAC;CACF;AAhDD,gBAgDC;AAED,MAAM,YAAY,GAAgC;IAChD,KAAK,EAAE,aAAK;IACZ,MAAM,EAAE,eAAM;IACd,QAAQ,EAAE,mBAAQ;CACnB,CAAA;AAED,MAAM,MAAM,GAAc,IAAI,eAAM,CAAC,EAAE,CAAC,CAAA"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { type Declaration } from './lib/throttle';
|
|
2
|
+
import type { Remote } from '@toa.io/core';
|
|
2
3
|
import type * as http from '../../HTTP';
|
|
4
|
+
import type { Parameter } from '../../RTD';
|
|
3
5
|
import type { Directive } from './Directive';
|
|
4
6
|
export declare class Throttle implements Directive {
|
|
5
7
|
private readonly quotas;
|
|
6
|
-
constructor(declaration: Declaration);
|
|
8
|
+
constructor(declaration: Declaration, counter: Promise<Remote>, route: string);
|
|
7
9
|
static validate(declaration: unknown): asserts declaration is Declaration;
|
|
8
|
-
preflight(context: http.Context): void;
|
|
9
|
-
settle(context: http.Context, output: http.OutgoingMessage): void
|
|
10
|
+
preflight(context: http.Context, parameters: Parameter[]): void;
|
|
11
|
+
settle(context: http.Context, output: http.OutgoingMessage): Promise<void>;
|
|
10
12
|
dispose(): void;
|
|
11
13
|
}
|
|
@@ -29,19 +29,19 @@ const schemas = __importStar(require("./schemas"));
|
|
|
29
29
|
const throttle_1 = require("./lib/throttle");
|
|
30
30
|
class Throttle {
|
|
31
31
|
quotas;
|
|
32
|
-
constructor(declaration) {
|
|
32
|
+
constructor(declaration, counter, route) {
|
|
33
33
|
const configuration = (0, throttle_1.parse)(declaration);
|
|
34
|
-
this.quotas = throttle_1.Quotas.create(configuration);
|
|
34
|
+
this.quotas = throttle_1.Quotas.create(configuration, counter, route);
|
|
35
35
|
}
|
|
36
36
|
static validate(declaration) {
|
|
37
37
|
schemas.throttle.validate(declaration, 'Incorrect \'io:throttle\' format');
|
|
38
38
|
}
|
|
39
|
-
preflight(context) {
|
|
40
|
-
if (!this.quotas.ok(context))
|
|
39
|
+
preflight(context, parameters) {
|
|
40
|
+
if (!this.quotas.ok(context, parameters))
|
|
41
41
|
throw new HTTP_1.TooManyRequests();
|
|
42
42
|
}
|
|
43
|
-
settle(context, output) {
|
|
44
|
-
this.quotas.use(context, output);
|
|
43
|
+
async settle(context, output) {
|
|
44
|
+
await this.quotas.use(context, output);
|
|
45
45
|
}
|
|
46
46
|
dispose() {
|
|
47
47
|
this.quotas.dispose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Throttle.js","sourceRoot":"","sources":["../../../source/directives/io/Throttle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA4C;AAC5C,mDAAoC;AACpC,6CAAgE;
|
|
1
|
+
{"version":3,"file":"Throttle.js","sourceRoot":"","sources":["../../../source/directives/io/Throttle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA4C;AAC5C,mDAAoC;AACpC,6CAAgE;AAMhE,MAAa,QAAQ;IACF,MAAM,CAAQ;IAE/B,YAAoB,WAAwB,EAAE,OAAwB,EAAE,KAAa;QACnF,MAAM,aAAa,GAAG,IAAA,gBAAK,EAAC,WAAW,CAAC,CAAA;QAExC,IAAI,CAAC,MAAM,GAAG,iBAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IAC5D,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAE,WAAoB;QAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAA;IAC5E,CAAC;IAEM,SAAS,CAAE,OAAqB,EAAE,UAAuB;QAC9D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;YACtC,MAAM,IAAI,sBAAe,EAAE,CAAA;IAC/B,CAAC;IAEM,KAAK,CAAC,MAAM,CAAE,OAAqB,EAAE,MAA4B;QACtE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACxC,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC;CACF;AAzBD,4BAyBC"}
|
|
@@ -9,11 +9,15 @@ interface Rule<T, K = unknown> {
|
|
|
9
9
|
method: T;
|
|
10
10
|
options?: K;
|
|
11
11
|
}
|
|
12
|
-
export type KeyComponentMethod = 'ip' | 'path';
|
|
12
|
+
export type KeyComponentMethod = 'ip' | 'path' | 'route' | 'identity' | 'segment';
|
|
13
13
|
export type KeyConditionMethod = 'status';
|
|
14
14
|
export type KeyComponent = Rule<KeyComponentMethod>;
|
|
15
15
|
export type KeyCondition = Rule<KeyConditionMethod>;
|
|
16
|
-
|
|
16
|
+
/** A bare component, or the one that takes an argument. */
|
|
17
|
+
type KeyEntry = KeyComponentMethod | {
|
|
18
|
+
segment: string;
|
|
19
|
+
};
|
|
20
|
+
type KeyDeclaration = KeyEntry | KeyEntry[];
|
|
17
21
|
type ConditionDeclaration = Record<KeyConditionMethod, unknown> | Array<Record<KeyConditionMethod, unknown>>;
|
|
18
22
|
export interface Declaration extends Omit<Configuration, 'key' | 'condition'> {
|
|
19
23
|
key: KeyDeclaration;
|
|
@@ -13,8 +13,11 @@ function parse(declaration) {
|
|
|
13
13
|
}
|
|
14
14
|
exports.parse = parse;
|
|
15
15
|
function mapKey(declaration) {
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
const entries = Array.isArray(declaration) ? declaration : [declaration];
|
|
17
|
+
// a bare `path`, or `segment: id` for the ones that take an argument
|
|
18
|
+
return entries.flatMap((entry) => typeof entry === 'string'
|
|
19
|
+
? [{ method: entry }]
|
|
20
|
+
: Object.entries(entry).map(([method, options]) => ({ method: method, options })));
|
|
18
21
|
}
|
|
19
22
|
function mapCondition(declaration) {
|
|
20
23
|
if (declaration === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../../../../source/directives/io/lib/throttle/Configuration.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../../../../source/directives/io/lib/throttle/Configuration.ts"],"names":[],"mappings":";;;AAgCA,SAAgB,KAAK,CAAE,WAAwB;IAC7C,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAA;IAEpE,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QAChB,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC;QAClC,QAAQ;QACR,QAAQ,EAAE,QAAQ,GAAG,IAAI;QACzB,QAAQ,EAAE,QAAQ,GAAG,IAAI;KAC1B,CAAA;AACH,CAAC;AAVD,sBAUC;AAED,SAAS,MAAM,CAAE,WAA2B;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAExE,qEAAqE;IACrE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAkB,EAAE,CAC/C,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAChD,CAAC,EAAE,MAAM,EAAE,MAA4B,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,YAAY,CAAE,WAAkC;IACvD,IAAI,WAAW,KAAK,SAAS;QAC3B,OAAM;IAER,uDAAuD;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IAEpF,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAmB,CAAA;AACnG,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type Component } from './components';
|
|
2
2
|
import { type Condition } from './conditions';
|
|
3
3
|
import type { KeyComponent, KeyCondition } from './Configuration';
|
|
4
|
+
import type { Parameter } from '../../../../RTD';
|
|
4
5
|
import type { Input as Context, Output } from '../../../../io';
|
|
5
6
|
export declare class Keys {
|
|
6
7
|
private readonly components;
|
|
7
8
|
private readonly conditions?;
|
|
8
9
|
constructor(components: Component[], conditions?: Condition[]);
|
|
9
|
-
static create(componentRules: KeyComponent[], conditionRules?: KeyCondition[]): Keys;
|
|
10
|
-
get(context: Context): string;
|
|
11
|
-
|
|
10
|
+
static create(componentRules: KeyComponent[], conditionRules?: KeyCondition[], route?: string): Keys;
|
|
11
|
+
get(context: Context, parameters?: Parameter[]): string;
|
|
12
|
+
matches(input: Context, output: Output): boolean;
|
|
12
13
|
}
|
|
@@ -4,6 +4,7 @@ exports.Keys = void 0;
|
|
|
4
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
5
|
const components_1 = require("./components");
|
|
6
6
|
const conditions_1 = require("./conditions");
|
|
7
|
+
const NONE = [];
|
|
7
8
|
class Keys {
|
|
8
9
|
components;
|
|
9
10
|
conditions;
|
|
@@ -11,23 +12,19 @@ class Keys {
|
|
|
11
12
|
this.components = components;
|
|
12
13
|
this.conditions = conditions;
|
|
13
14
|
}
|
|
14
|
-
static create(componentRules, conditionRules) {
|
|
15
|
-
const components = componentRules.map((rule) => new components_1.Components[rule.method](rule.options));
|
|
15
|
+
static create(componentRules, conditionRules, route = '') {
|
|
16
|
+
const components = componentRules.map((rule) => new components_1.Components[rule.method](rule.options, route));
|
|
16
17
|
const conditions = conditionRules?.map((rule) => new conditions_1.Conditions[rule.method](rule.options));
|
|
17
18
|
return new this(components, conditions);
|
|
18
19
|
}
|
|
19
|
-
get(context) {
|
|
20
|
+
get(context, parameters = NONE) {
|
|
20
21
|
const hash = (0, node_crypto_1.createHash)('sha256');
|
|
21
22
|
for (const component of this.components)
|
|
22
|
-
hash.update(component.get(context));
|
|
23
|
+
hash.update(component.get(context, parameters));
|
|
23
24
|
return hash.digest('hex');
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (miss === true)
|
|
28
|
-
return null;
|
|
29
|
-
else
|
|
30
|
-
return this.get(input);
|
|
26
|
+
matches(input, output) {
|
|
27
|
+
return this.conditions?.some((condition) => !condition.match(input, output)) !== true;
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
exports.Keys = Keys;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Keys.js","sourceRoot":"","sources":["../../../../../source/directives/io/lib/throttle/Keys.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AACxC,6CAAyD;AACzD,6CAAyD;
|
|
1
|
+
{"version":3,"file":"Keys.js","sourceRoot":"","sources":["../../../../../source/directives/io/lib/throttle/Keys.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AACxC,6CAAyD;AACzD,6CAAyD;AAKzD,MAAM,IAAI,GAAgB,EAAE,CAAA;AAE5B,MAAa,IAAI;IACE,UAAU,CAAa;IACvB,UAAU,CAAc;IAEzC,YAAoB,UAAuB,EAAE,UAAwB;QACnE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAEM,MAAM,CAAC,MAAM,CAAE,cAA8B,EAAE,cAA+B,EACnF,QAAgB,EAAE;QAClB,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7C,IAAI,uBAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;QAEnD,MAAM,UAAU,GAAG,cAAc,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,uBAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAE3F,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IACzC,CAAC;IAEM,GAAG,CAAE,OAAgB,EAAE,aAA0B,IAAI;QAC1D,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAA;QAEjC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU;YACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;QAEjD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAEM,OAAO,CAAE,KAAc,EAAE,MAAc;QAC5C,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,CAAA;IACvF,CAAC;CACF;AA/BD,oBA+BC"}
|
|
@@ -1,26 +1,45 @@
|
|
|
1
1
|
import { Keys } from './Keys';
|
|
2
|
-
import {
|
|
2
|
+
import type { Remote } from '@toa.io/core';
|
|
3
3
|
import type { Configuration } from './Configuration';
|
|
4
|
+
import type { Parameter } from '../../../../RTD';
|
|
4
5
|
import type { Input as Context, Output } from '../../../../io';
|
|
6
|
+
/**
|
|
7
|
+
* Quota usage counted across every gateway process, and blocking decided in this one.
|
|
8
|
+
*
|
|
9
|
+
* The count comes from the `exposition.stash` component, which counts through Redis
|
|
10
|
+
* and hands back a lower bound on what the whole group has reached. Blocking stays
|
|
11
|
+
* local: every process sees the same number and reaches the same conclusion on its
|
|
12
|
+
* own, and a process that cannot reach Redis still enforces what it has seen itself.
|
|
13
|
+
*/
|
|
5
14
|
export declare class Quotas {
|
|
6
15
|
private readonly requests;
|
|
7
|
-
private readonly cooldown;
|
|
8
16
|
private readonly interval;
|
|
17
|
+
private readonly cooldown;
|
|
9
18
|
private readonly keys;
|
|
10
|
-
private readonly
|
|
19
|
+
private readonly counter;
|
|
11
20
|
private readonly blocked;
|
|
21
|
+
private readonly timers;
|
|
22
|
+
/**
|
|
23
|
+
* The key computed at preflight, for settle to count against.
|
|
24
|
+
*
|
|
25
|
+
* `segment` reads the route parameters, which settle is not given, and `identity`
|
|
26
|
+
* can be refreshed between the two — so recomputing there would key a request
|
|
27
|
+
* differently than it was checked, and blocking would quietly stop working.
|
|
28
|
+
*/
|
|
29
|
+
private readonly keyed;
|
|
30
|
+
private remote;
|
|
12
31
|
constructor(options: Options);
|
|
13
|
-
static create(configuration: Configuration): Quotas;
|
|
14
|
-
ok(context: Context): boolean;
|
|
15
|
-
use(input: Context, output: Output): void
|
|
32
|
+
static create(configuration: Configuration, counter: Promise<Remote>, route?: string): Quotas;
|
|
33
|
+
ok(context: Context, parameters: Parameter[]): boolean;
|
|
34
|
+
use(input: Context, output: Output): Promise<void>;
|
|
16
35
|
dispose(): void;
|
|
17
|
-
private readonly reset;
|
|
18
36
|
private block;
|
|
19
37
|
}
|
|
20
38
|
interface Options {
|
|
21
39
|
keys: Keys;
|
|
22
40
|
requests: number;
|
|
41
|
+
interval: number;
|
|
23
42
|
cooldown: number;
|
|
24
|
-
|
|
43
|
+
counter: Promise<Remote>;
|
|
25
44
|
}
|
|
26
45
|
export {};
|