pipework 0.101.0 → 0.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/REFERENCE.md +2 -1
- package/dist/async/jobs/index.d.ts +1 -1
- package/dist/async/jobs/index.d.ts.map +1 -1
- package/dist/async/jobs/queue.d.ts +13 -0
- package/dist/async/jobs/queue.d.ts.map +1 -1
- package/dist/async/jobs/queue.js +24 -1
- package/dist/async/jobs/queue.js.map +1 -1
- package/dist/async/steps/graph.d.ts.map +1 -1
- package/dist/async/steps/graph.js +31 -3
- package/dist/async/steps/graph.js.map +1 -1
- package/dist/async/steps/index.d.ts +1 -1
- package/dist/async/steps/index.d.ts.map +1 -1
- package/dist/async/steps/types.d.ts +27 -0
- package/dist/async/steps/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/infra/alerts/handle.d.ts.map +1 -1
- package/dist/infra/alerts/handle.js +8 -1
- package/dist/infra/alerts/handle.js.map +1 -1
- package/dist/infra/alerts/sources.d.ts +9 -2
- package/dist/infra/alerts/sources.d.ts.map +1 -1
- package/dist/infra/alerts/sources.js +20 -11
- package/dist/infra/alerts/sources.js.map +1 -1
- package/package.json +1 -1
- package/dist/REFERENCE.md +0 -1477
- package/dist/infra/access-links/rate-limit.d.ts +0 -10
- package/dist/infra/access-links/rate-limit.d.ts.map +0 -1
- package/dist/infra/access-links/rate-limit.js +0 -28
- package/dist/infra/access-links/rate-limit.js.map +0 -1
- package/dist/infra/email/sigv4.d.ts +0 -24
- package/dist/infra/email/sigv4.d.ts.map +0 -1
- package/dist/infra/email/sigv4.js +0 -55
- package/dist/infra/email/sigv4.js.map +0 -1
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface RateLimitConfig {
|
|
2
|
-
readonly max: number;
|
|
3
|
-
readonly windowMs: number;
|
|
4
|
-
}
|
|
5
|
-
export interface RateLimiter {
|
|
6
|
-
/** Records a hit for `client`; false when the client is over the limit. */
|
|
7
|
-
hit(client: string, now?: number): boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare function createRateLimiter(config: RateLimitConfig): RateLimiter;
|
|
10
|
-
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/infra/access-links/rate-limit.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAuBtE"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// In-process sliding-window limiter. State lives in this process's memory:
|
|
2
|
-
// with N server processes the effective limit per client is up to N times
|
|
3
|
-
// `max`, and it resets on restart.
|
|
4
|
-
export function createRateLimiter(config) {
|
|
5
|
-
const hits = new Map();
|
|
6
|
-
let lastSweep = 0;
|
|
7
|
-
return {
|
|
8
|
-
hit(client, now = Date.now()) {
|
|
9
|
-
if (now - lastSweep > config.windowMs) {
|
|
10
|
-
lastSweep = now;
|
|
11
|
-
for (const [key, times] of hits) {
|
|
12
|
-
if (times.length === 0 || times[times.length - 1] <= now - config.windowMs)
|
|
13
|
-
hits.delete(key);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const cutoff = now - config.windowMs;
|
|
17
|
-
const times = (hits.get(client) ?? []).filter(t => t > cutoff);
|
|
18
|
-
if (times.length >= config.max) {
|
|
19
|
-
hits.set(client, times);
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
times.push(now);
|
|
23
|
-
hits.set(client, times);
|
|
24
|
-
return true;
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/infra/access-links/rate-limit.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,mCAAmC;AAYnC,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAA;IACxC,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,OAAO;QACL,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YAC1B,IAAI,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,SAAS,GAAG,GAAG,CAAA;gBACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;oBAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC/F,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA;YACpC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;YAC9D,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBACvB,OAAO,KAAK,CAAA;YACd,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export interface AwsCredentials {
|
|
2
|
-
readonly accessKeyId: string;
|
|
3
|
-
readonly secretAccessKey: string;
|
|
4
|
-
readonly sessionToken?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface SigV4Request {
|
|
7
|
-
readonly method: string;
|
|
8
|
-
readonly url: string;
|
|
9
|
-
/** Headers to sign and send, other than host and x-amz-date, which are added. */
|
|
10
|
-
readonly headers: Readonly<Record<string, string>>;
|
|
11
|
-
readonly body: string | Buffer;
|
|
12
|
-
readonly region: string;
|
|
13
|
-
readonly service: string;
|
|
14
|
-
readonly credentials: AwsCredentials;
|
|
15
|
-
readonly now?: Date;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Signs a request with AWS Signature Version 4 and returns the headers to send:
|
|
19
|
-
* the given ones, `x-amz-date`, `x-amz-security-token` when the credentials carry
|
|
20
|
-
* a session token, and `authorization`. `host` is signed but not returned; the
|
|
21
|
-
* HTTP client sets it from the URL.
|
|
22
|
-
*/
|
|
23
|
-
export declare function signV4(req: SigV4Request): Record<string, string>;
|
|
24
|
-
//# sourceMappingURL=sigv4.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sigv4.d.ts","sourceRoot":"","sources":["../../../src/infra/email/sigv4.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAA;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CACpB;AAkBD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwChE"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { createHash, createHmac } from 'node:crypto';
|
|
2
|
-
function sha256Hex(data) {
|
|
3
|
-
return createHash('sha256').update(data).digest('hex');
|
|
4
|
-
}
|
|
5
|
-
function hmac(key, data) {
|
|
6
|
-
return createHmac('sha256', key).update(data).digest();
|
|
7
|
-
}
|
|
8
|
-
function uriEncode(s) {
|
|
9
|
-
return encodeURIComponent(s).replace(/[!'()*]/g, c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
10
|
-
}
|
|
11
|
-
function amzDate(d) {
|
|
12
|
-
return d.toISOString().replace(/[-:]/g, '').replace(/\.\d{3}/, '');
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Signs a request with AWS Signature Version 4 and returns the headers to send:
|
|
16
|
-
* the given ones, `x-amz-date`, `x-amz-security-token` when the credentials carry
|
|
17
|
-
* a session token, and `authorization`. `host` is signed but not returned; the
|
|
18
|
-
* HTTP client sets it from the URL.
|
|
19
|
-
*/
|
|
20
|
-
export function signV4(req) {
|
|
21
|
-
const url = new URL(req.url);
|
|
22
|
-
const stamp = amzDate(req.now ?? new Date());
|
|
23
|
-
const day = stamp.slice(0, 8);
|
|
24
|
-
const headers = {};
|
|
25
|
-
for (const [name, value] of Object.entries(req.headers))
|
|
26
|
-
headers[name.toLowerCase()] = value.trim().replace(/\s+/g, ' ');
|
|
27
|
-
headers['x-amz-date'] = stamp;
|
|
28
|
-
if (req.credentials.sessionToken !== undefined)
|
|
29
|
-
headers['x-amz-security-token'] = req.credentials.sessionToken;
|
|
30
|
-
const signed = { ...headers, host: url.host };
|
|
31
|
-
const names = Object.keys(signed).sort();
|
|
32
|
-
const canonicalHeaders = names.map(n => `${n}:${signed[n]}\n`).join('');
|
|
33
|
-
const signedHeaders = names.join(';');
|
|
34
|
-
const canonicalPath = url.pathname.split('/').map(uriEncode).join('/');
|
|
35
|
-
const canonicalQuery = [...url.searchParams.entries()]
|
|
36
|
-
.map(([k, v]) => [uriEncode(k), uriEncode(v)])
|
|
37
|
-
.sort((a, b) => (a[0] === b[0] ? (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0) : (a[0] < b[0] ? -1 : 1)))
|
|
38
|
-
.map(([k, v]) => `${k}=${v}`)
|
|
39
|
-
.join('&');
|
|
40
|
-
const canonicalRequest = [
|
|
41
|
-
req.method.toUpperCase(), canonicalPath, canonicalQuery, canonicalHeaders, signedHeaders, sha256Hex(req.body),
|
|
42
|
-
].join('\n');
|
|
43
|
-
const scope = `${day}/${req.region}/${req.service}/aws4_request`;
|
|
44
|
-
const stringToSign = ['AWS4-HMAC-SHA256', stamp, scope, sha256Hex(canonicalRequest)].join('\n');
|
|
45
|
-
const kDate = hmac(`AWS4${req.credentials.secretAccessKey}`, day);
|
|
46
|
-
const kRegion = hmac(kDate, req.region);
|
|
47
|
-
const kService = hmac(kRegion, req.service);
|
|
48
|
-
const kSigning = hmac(kService, 'aws4_request');
|
|
49
|
-
const signature = createHmac('sha256', kSigning).update(stringToSign).digest('hex');
|
|
50
|
-
return {
|
|
51
|
-
...headers,
|
|
52
|
-
authorization: `AWS4-HMAC-SHA256 Credential=${req.credentials.accessKeyId}/${scope}, SignedHeaders=${signedHeaders}, Signature=${signature}`,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=sigv4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sigv4.js","sourceRoot":"","sources":["../../../src/infra/email/sigv4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAoBpD,SAAS,SAAS,CAAC,IAAqB;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,IAAI,CAAC,GAAoB,EAAE,IAAY;IAC9C,OAAO,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AACzG,CAAC;AAED,SAAS,OAAO,CAAC,CAAO;IACtB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,GAAiB;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAE7B,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxH,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK,CAAA;IAC7B,IAAI,GAAG,CAAC,WAAW,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,YAAY,CAAA;IAE9G,MAAM,MAAM,GAA2B,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAA;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACxC,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxE,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAErC,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtE,MAAM,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SACnD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAU,CAAC;SACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,GAAG,CAAC,CAAA;IAEZ,MAAM,gBAAgB,GAAG;QACvB,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;KAC9G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,eAAe,CAAA;IAChE,MAAM,YAAY,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE/F,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,CAAA;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAEnF,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EACX,+BAA+B,GAAG,CAAC,WAAW,CAAC,WAAW,IAAI,KAAK,mBAAmB,aAAa,eAAe,SAAS,EAAE;KAChI,CAAA;AACH,CAAC"}
|