pipework 0.1.2 → 0.1.4
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/README.md +26 -7
- package/dist/cli/commands/init.js +2 -2
- package/dist/cli/commands/migrate.d.ts +4 -2
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +21 -12
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +14 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/config/discover.d.ts +2 -2
- package/dist/config/discover.d.ts.map +1 -1
- package/dist/config/discover.js +13 -6
- package/dist/config/discover.js.map +1 -1
- package/dist/config/env.d.ts +2 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +32 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/namespace.d.ts +2 -2
- package/dist/config/namespace.d.ts.map +1 -1
- package/dist/config/namespace.js +2 -3
- package/dist/config/namespace.js.map +1 -1
- package/dist/di/builder.d.ts +4 -0
- package/dist/di/builder.d.ts.map +1 -1
- package/dist/di/builder.js +8 -0
- package/dist/di/builder.js.map +1 -1
- package/dist/di/resolve.d.ts +1 -0
- package/dist/di/resolve.d.ts.map +1 -1
- package/dist/di/resolve.js +7 -14
- package/dist/di/resolve.js.map +1 -1
- package/dist/di/types.d.ts +1 -0
- package/dist/di/types.d.ts.map +1 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +21 -1
- package/dist/http/server.js.map +1 -1
- package/dist/http/types.d.ts +1 -0
- package/dist/http/types.d.ts.map +1 -1
- package/dist/idempotency/index.d.ts +4 -0
- package/dist/idempotency/index.d.ts.map +1 -0
- package/dist/idempotency/index.js +3 -0
- package/dist/idempotency/index.js.map +1 -0
- package/dist/idempotency/middleware.d.ts +21 -0
- package/dist/idempotency/middleware.d.ts.map +1 -0
- package/dist/idempotency/middleware.js +56 -0
- package/dist/idempotency/middleware.js.map +1 -0
- package/dist/idempotency/store.d.ts +3 -0
- package/dist/idempotency/store.d.ts.map +1 -0
- package/dist/idempotency/store.js +63 -0
- package/dist/idempotency/store.js.map +1 -0
- package/dist/idempotency/types.d.ts +28 -0
- package/dist/idempotency/types.d.ts.map +1 -0
- package/dist/idempotency/types.js +2 -0
- package/dist/idempotency/types.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate/check.d.ts +14 -0
- package/dist/migrate/check.d.ts.map +1 -0
- package/dist/migrate/check.js +58 -0
- package/dist/migrate/check.js.map +1 -0
- package/dist/migrate/index.d.ts +3 -1
- package/dist/migrate/index.d.ts.map +1 -1
- package/dist/migrate/index.js +3 -1
- package/dist/migrate/index.js.map +1 -1
- package/dist/migrate/run.d.ts +13 -2
- package/dist/migrate/run.d.ts.map +1 -1
- package/dist/migrate/run.js +24 -3
- package/dist/migrate/run.js.map +1 -1
- package/dist/migrate/safety.d.ts +10 -0
- package/dist/migrate/safety.d.ts.map +1 -0
- package/dist/migrate/safety.js +115 -0
- package/dist/migrate/safety.js.map +1 -0
- package/dist/pipework.d.ts +1 -1
- package/dist/pipework.js +1 -1
- package/dist/test/auto-setup.js +4 -4
- package/dist/test/auto-setup.js.map +1 -1
- package/dist/test/vitest.js +2 -2
- package/dist/webhook/inbound.d.ts +16 -0
- package/dist/webhook/inbound.d.ts.map +1 -0
- package/dist/webhook/inbound.js +21 -0
- package/dist/webhook/inbound.js.map +1 -0
- package/dist/webhook/index.d.ts +5 -0
- package/dist/webhook/index.d.ts.map +1 -0
- package/dist/webhook/index.js +5 -0
- package/dist/webhook/index.js.map +1 -0
- package/dist/webhook/namespace.d.ts +15 -0
- package/dist/webhook/namespace.d.ts.map +1 -0
- package/dist/webhook/namespace.js +15 -0
- package/dist/webhook/namespace.js.map +1 -0
- package/dist/webhook/outbound.d.ts +48 -0
- package/dist/webhook/outbound.d.ts.map +1 -0
- package/dist/webhook/outbound.js +160 -0
- package/dist/webhook/outbound.js.map +1 -0
- package/dist/webhook/sign.d.ts +12 -0
- package/dist/webhook/sign.d.ts.map +1 -0
- package/dist/webhook/sign.js +12 -0
- package/dist/webhook/sign.js.map +1 -0
- package/dist/webhook/verify.d.ts +14 -0
- package/dist/webhook/verify.d.ts.map +1 -0
- package/dist/webhook/verify.js +61 -0
- package/dist/webhook/verify.js.map +1 -0
- package/package.json +20 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/webhook/sign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAcpD,MAAM,UAAU,WAAW,CACzB,OAAgB,EAChB,MAAc,EACd,UAAmC,EAAE;IAErC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAA;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;IAE1C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5E,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,SAAS,IAAI,IAAI,EAAE,CAAA;IAClD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAE/E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AAClD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface SignatureVerifier {
|
|
2
|
+
verify(rawBody: Buffer, headers: Readonly<Record<string, string | undefined>>): boolean;
|
|
3
|
+
}
|
|
4
|
+
export declare function hmacVerifier(options: {
|
|
5
|
+
secret: string;
|
|
6
|
+
algorithm?: string;
|
|
7
|
+
header: string;
|
|
8
|
+
prefix?: string;
|
|
9
|
+
encoding?: 'hex' | 'base64';
|
|
10
|
+
computePayload?: (rawBody: Buffer, headers: Readonly<Record<string, string | undefined>>) => Buffer;
|
|
11
|
+
}): SignatureVerifier;
|
|
12
|
+
export declare function stripeVerifier(secret: string): SignatureVerifier;
|
|
13
|
+
export declare function githubVerifier(secret: string): SignatureVerifier;
|
|
14
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/webhook/verify.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAAA;CACxF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAC3B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,KAAK,MAAM,CAAA;CACpG,GAAG,iBAAiB,CAuBpB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CA2BhE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAQhE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
export function hmacVerifier(options) {
|
|
3
|
+
const algorithm = options.algorithm ?? 'sha256';
|
|
4
|
+
const encoding = options.encoding ?? 'hex';
|
|
5
|
+
const prefix = options.prefix ?? '';
|
|
6
|
+
return {
|
|
7
|
+
verify(rawBody, headers) {
|
|
8
|
+
const headerValue = headers[options.header.toLowerCase()];
|
|
9
|
+
if (headerValue === undefined || headerValue === '')
|
|
10
|
+
return false;
|
|
11
|
+
const payload = options.computePayload !== undefined
|
|
12
|
+
? options.computePayload(rawBody, headers)
|
|
13
|
+
: rawBody;
|
|
14
|
+
const expected = prefix + createHmac(algorithm, options.secret).update(payload).digest(encoding);
|
|
15
|
+
try {
|
|
16
|
+
return timingSafeEqual(Buffer.from(headerValue), Buffer.from(expected));
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function stripeVerifier(secret) {
|
|
25
|
+
return {
|
|
26
|
+
verify(rawBody, headers) {
|
|
27
|
+
const sigHeader = headers['stripe-signature'];
|
|
28
|
+
if (sigHeader === undefined)
|
|
29
|
+
return false;
|
|
30
|
+
const parts = new Map();
|
|
31
|
+
for (const pair of sigHeader.split(',')) {
|
|
32
|
+
const eqIdx = pair.indexOf('=');
|
|
33
|
+
if (eqIdx === -1)
|
|
34
|
+
continue;
|
|
35
|
+
parts.set(pair.slice(0, eqIdx).trim(), pair.slice(eqIdx + 1).trim());
|
|
36
|
+
}
|
|
37
|
+
const timestamp = parts.get('t');
|
|
38
|
+
const v1Sig = parts.get('v1');
|
|
39
|
+
if (timestamp === undefined || v1Sig === undefined)
|
|
40
|
+
return false;
|
|
41
|
+
const signedPayload = Buffer.from(`${timestamp}.${rawBody.toString('utf-8')}`);
|
|
42
|
+
const expected = createHmac('sha256', secret).update(signedPayload).digest('hex');
|
|
43
|
+
try {
|
|
44
|
+
return timingSafeEqual(Buffer.from(v1Sig), Buffer.from(expected));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function githubVerifier(secret) {
|
|
53
|
+
return hmacVerifier({
|
|
54
|
+
secret,
|
|
55
|
+
algorithm: 'sha256',
|
|
56
|
+
header: 'x-hub-signature-256',
|
|
57
|
+
prefix: 'sha256=',
|
|
58
|
+
encoding: 'hex',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/webhook/verify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pipework",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"packageManager": "pnpm@9.15.4",
|
|
6
7
|
"license": "MIT",
|
|
7
8
|
"publishConfig": {
|
|
8
9
|
"access": "public"
|
|
@@ -47,6 +48,18 @@
|
|
|
47
48
|
"bin": {
|
|
48
49
|
"pipework": "bin/pipework.js"
|
|
49
50
|
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "tsc",
|
|
53
|
+
"type-check": "tsc --noEmit",
|
|
54
|
+
"lint": "eslint src --max-warnings 0",
|
|
55
|
+
"lint:boundaries": "node scripts/check-boundaries.js",
|
|
56
|
+
"test": "vitest run",
|
|
57
|
+
"test:isolation": "vitest run --config vitest.isolation.config.ts",
|
|
58
|
+
"test:property": "vitest run --config vitest.property.config.ts",
|
|
59
|
+
"test:stress": "vitest run --config vitest.stress.config.ts",
|
|
60
|
+
"test:all": "vitest run && vitest run --config vitest.isolation.config.ts && vitest run --config vitest.property.config.ts && vitest run --config vitest.stress.config.ts",
|
|
61
|
+
"mutate": "stryker run"
|
|
62
|
+
},
|
|
50
63
|
"pipework": {
|
|
51
64
|
"boundaries": {
|
|
52
65
|
"rules": {
|
|
@@ -112,6 +125,11 @@
|
|
|
112
125
|
"postgres": "^3.4.9",
|
|
113
126
|
"zod": "^4.4.3"
|
|
114
127
|
},
|
|
128
|
+
"pnpm": {
|
|
129
|
+
"overrides": {
|
|
130
|
+
"esbuild": ">=0.25.0"
|
|
131
|
+
}
|
|
132
|
+
},
|
|
115
133
|
"devDependencies": {
|
|
116
134
|
"@stryker-mutator/core": "^9.6.1",
|
|
117
135
|
"@stryker-mutator/typescript-checker": "^9.6.1",
|
|
@@ -125,17 +143,5 @@
|
|
|
125
143
|
"pino-pretty": "^13.1.3",
|
|
126
144
|
"typescript": "^6.0.3",
|
|
127
145
|
"vitest": "^4.1.5"
|
|
128
|
-
},
|
|
129
|
-
"scripts": {
|
|
130
|
-
"build": "tsc",
|
|
131
|
-
"type-check": "tsc --noEmit",
|
|
132
|
-
"lint": "eslint src --max-warnings 0",
|
|
133
|
-
"lint:boundaries": "node scripts/check-boundaries.js",
|
|
134
|
-
"test": "vitest run",
|
|
135
|
-
"test:isolation": "vitest run --config vitest.isolation.config.ts",
|
|
136
|
-
"test:property": "vitest run --config vitest.property.config.ts",
|
|
137
|
-
"test:stress": "vitest run --config vitest.stress.config.ts",
|
|
138
|
-
"test:all": "vitest run && vitest run --config vitest.isolation.config.ts && vitest run --config vitest.property.config.ts && vitest run --config vitest.stress.config.ts",
|
|
139
|
-
"mutate": "stryker run"
|
|
140
146
|
}
|
|
141
|
-
}
|
|
147
|
+
}
|