@crvouga/mockingbird-service-stripe 3.10.3 → 3.10.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/CHANGELOG.md +6 -0
- package/dist/{chunk-SOIQVFQD.js → chunk-AL3LIES3.js} +3 -3
- package/dist/{chunk-KXNVS35C.js → chunk-BM3DUOET.js} +2 -2
- package/dist/{chunk-NUTYUHW7.js → chunk-HN7EI4ER.js} +48 -36
- package/dist/{chunk-NUTYUHW7.js.map → chunk-HN7EI4ER.js.map} +3 -3
- package/dist/{chunk-KHNJCSHG.js → chunk-RSTEXFHT.js} +3 -3
- package/dist/cli.js +4 -4
- package/dist/fleet.js +2 -2
- package/dist/index.js +2 -2
- package/dist/server.js +4 -4
- package/package.json +1 -1
- /package/dist/{chunk-SOIQVFQD.js.map → chunk-AL3LIES3.js.map} +0 -0
- /package/dist/{chunk-KXNVS35C.js.map → chunk-BM3DUOET.js.map} +0 -0
- /package/dist/{chunk-KHNJCSHG.js.map → chunk-RSTEXFHT.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog — @crvouga/mockingbird-service-stripe
|
|
2
2
|
|
|
3
|
+
## 3.10.4 (2026-11-02)
|
|
4
|
+
|
|
5
|
+
### Fixes and improvements
|
|
6
|
+
|
|
7
|
+
- compare the admin key in constant time ([2a43141](https://github.com/crvouga/mockingbird/commit/2a43141f50dab41e698c3bbce0c69bf65b40e24e))
|
|
8
|
+
|
|
3
9
|
## 3.10.3 (2026-11-02)
|
|
4
10
|
|
|
5
11
|
### Fixes and improvements
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createRuntime,
|
|
3
3
|
validateAccounts
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BM3DUOET.js";
|
|
5
5
|
import {
|
|
6
6
|
listen
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RSTEXFHT.js";
|
|
8
8
|
|
|
9
9
|
// src/server.ts
|
|
10
10
|
import { readFileSync } from "node:fs";
|
|
@@ -87,4 +87,4 @@ export {
|
|
|
87
87
|
createServer,
|
|
88
88
|
serveTarget
|
|
89
89
|
};
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-AL3LIES3.js.map
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
requestBaseUrl,
|
|
18
18
|
resolveSchema,
|
|
19
19
|
signers
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-HN7EI4ER.js";
|
|
21
21
|
|
|
22
22
|
// src/account.ts
|
|
23
23
|
var accountOfKey = (key) => `acct_${opaqueToken(key, 8)}`;
|
|
@@ -15879,4 +15879,4 @@ export {
|
|
|
15879
15879
|
createRuntime2 as createRuntime,
|
|
15880
15880
|
StripeAPI
|
|
15881
15881
|
};
|
|
15882
|
-
//# sourceMappingURL=chunk-
|
|
15882
|
+
//# sourceMappingURL=chunk-BM3DUOET.js.map
|
|
@@ -2482,6 +2482,46 @@ var createNamespaceControls = (options) => {
|
|
|
2482
2482
|
};
|
|
2483
2483
|
};
|
|
2484
2484
|
|
|
2485
|
+
// ../core/dist/signing.js
|
|
2486
|
+
var encoder = new TextEncoder();
|
|
2487
|
+
var toBase64 = (bytes) => {
|
|
2488
|
+
let binary = "";
|
|
2489
|
+
for (const byte of bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes)) {
|
|
2490
|
+
binary += String.fromCharCode(byte);
|
|
2491
|
+
}
|
|
2492
|
+
return btoa(binary);
|
|
2493
|
+
};
|
|
2494
|
+
var fromBase64 = (value) => Uint8Array.from(atob(value), (char) => char.charCodeAt(0));
|
|
2495
|
+
var toHex = (bytes) => [...bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
2496
|
+
var keyBytes = (key) => typeof key === "string" ? encoder.encode(key) : key;
|
|
2497
|
+
var hmac = async (algorithm, key, message, encoding = "hex") => {
|
|
2498
|
+
const imported = await crypto.subtle.importKey("raw", keyBytes(key), { name: "HMAC", hash: algorithm }, false, ["sign"]);
|
|
2499
|
+
const signed = await crypto.subtle.sign("HMAC", imported, typeof message === "string" ? encoder.encode(message) : message);
|
|
2500
|
+
return encoding === "hex" ? toHex(signed) : toBase64(signed);
|
|
2501
|
+
};
|
|
2502
|
+
var svixSecretBytes = (secret) => {
|
|
2503
|
+
const raw = secret.replace(/^f?whsec_/, "");
|
|
2504
|
+
try {
|
|
2505
|
+
return fromBase64(raw);
|
|
2506
|
+
} catch {
|
|
2507
|
+
throw new TypeError("webhook secret must be whsec_<base64> (as Svix issues it)");
|
|
2508
|
+
}
|
|
2509
|
+
};
|
|
2510
|
+
var signSvix = async (secret, messageId, timestampSeconds, body) => `v1,${await hmac("SHA-256", svixSecretBytes(secret), `${messageId}.${timestampSeconds}.${body}`, "base64")}`;
|
|
2511
|
+
var signTimestamped = async (secret, timestampSeconds, body) => `t=${timestampSeconds},v1=${await hmac("SHA-256", secret, `${timestampSeconds}.${body}`, "hex")}`;
|
|
2512
|
+
var signTwilio = async (authToken, url, params) => {
|
|
2513
|
+
const payload = url + Object.keys(params).sort().map((key) => `${key}${params[key]}`).join("");
|
|
2514
|
+
return hmac("SHA-1", authToken, payload, "base64");
|
|
2515
|
+
};
|
|
2516
|
+
var timingSafeEqual = (a, b) => {
|
|
2517
|
+
if (a.length !== b.length)
|
|
2518
|
+
return false;
|
|
2519
|
+
let diff = 0;
|
|
2520
|
+
for (let i = 0; i < a.length; i++)
|
|
2521
|
+
diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
|
|
2522
|
+
return diff === 0;
|
|
2523
|
+
};
|
|
2524
|
+
|
|
2485
2525
|
// ../core/dist/surface.js
|
|
2486
2526
|
var defineMock = (runtime) => runtime;
|
|
2487
2527
|
var ADMIN_ROUTE_REFERENCE = {
|
|
@@ -2600,6 +2640,10 @@ var assertAdminPrefixAvailable = (prefix, paths) => {
|
|
|
2600
2640
|
}
|
|
2601
2641
|
};
|
|
2602
2642
|
var ADMIN_KEY_HEADER = CONTROL_HEADERS.adminKey;
|
|
2643
|
+
var hasAdminKey = (headers, adminKey) => {
|
|
2644
|
+
const sent = headers.get(ADMIN_KEY_HEADER);
|
|
2645
|
+
return sent !== null && timingSafeEqual(sent, adminKey);
|
|
2646
|
+
};
|
|
2603
2647
|
var NAMESPACE_HEADER = CONTROL_HEADERS.namespace;
|
|
2604
2648
|
var ADMIN_DOCS_URL = "https://mockingbird.chrisvouga.dev/docs/admin-controls";
|
|
2605
2649
|
var ADMIN_CONTROL_PAGES = [
|
|
@@ -3073,7 +3117,7 @@ var createControlPlane = (context) => {
|
|
|
3073
3117
|
}
|
|
3074
3118
|
const path = url.pathname.slice(adminPrefix.length) || "/";
|
|
3075
3119
|
const shell = request.method === "GET" && (path === "/ui" || path === "/ui/");
|
|
3076
|
-
if (!shell && context.adminKey !== void 0 && request.headers
|
|
3120
|
+
if (!shell && context.adminKey !== void 0 && !hasAdminKey(request.headers, context.adminKey)) {
|
|
3077
3121
|
return adminError(401, `missing or wrong ${ADMIN_KEY_HEADER}`);
|
|
3078
3122
|
}
|
|
3079
3123
|
for (const route of routes) {
|
|
@@ -3874,39 +3918,7 @@ var stateAdminRoutes = (routes) => {
|
|
|
3874
3918
|
};
|
|
3875
3919
|
|
|
3876
3920
|
// ../core/dist/version.js
|
|
3877
|
-
var PACKAGE_VERSION = true ? "3.10.
|
|
3878
|
-
|
|
3879
|
-
// ../core/dist/signing.js
|
|
3880
|
-
var encoder = new TextEncoder();
|
|
3881
|
-
var toBase64 = (bytes) => {
|
|
3882
|
-
let binary = "";
|
|
3883
|
-
for (const byte of bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes)) {
|
|
3884
|
-
binary += String.fromCharCode(byte);
|
|
3885
|
-
}
|
|
3886
|
-
return btoa(binary);
|
|
3887
|
-
};
|
|
3888
|
-
var fromBase64 = (value) => Uint8Array.from(atob(value), (char) => char.charCodeAt(0));
|
|
3889
|
-
var toHex = (bytes) => [...bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
3890
|
-
var keyBytes = (key) => typeof key === "string" ? encoder.encode(key) : key;
|
|
3891
|
-
var hmac = async (algorithm, key, message, encoding = "hex") => {
|
|
3892
|
-
const imported = await crypto.subtle.importKey("raw", keyBytes(key), { name: "HMAC", hash: algorithm }, false, ["sign"]);
|
|
3893
|
-
const signed = await crypto.subtle.sign("HMAC", imported, typeof message === "string" ? encoder.encode(message) : message);
|
|
3894
|
-
return encoding === "hex" ? toHex(signed) : toBase64(signed);
|
|
3895
|
-
};
|
|
3896
|
-
var svixSecretBytes = (secret) => {
|
|
3897
|
-
const raw = secret.replace(/^f?whsec_/, "");
|
|
3898
|
-
try {
|
|
3899
|
-
return fromBase64(raw);
|
|
3900
|
-
} catch {
|
|
3901
|
-
throw new TypeError("webhook secret must be whsec_<base64> (as Svix issues it)");
|
|
3902
|
-
}
|
|
3903
|
-
};
|
|
3904
|
-
var signSvix = async (secret, messageId, timestampSeconds, body) => `v1,${await hmac("SHA-256", svixSecretBytes(secret), `${messageId}.${timestampSeconds}.${body}`, "base64")}`;
|
|
3905
|
-
var signTimestamped = async (secret, timestampSeconds, body) => `t=${timestampSeconds},v1=${await hmac("SHA-256", secret, `${timestampSeconds}.${body}`, "hex")}`;
|
|
3906
|
-
var signTwilio = async (authToken, url, params) => {
|
|
3907
|
-
const payload = url + Object.keys(params).sort().map((key) => `${key}${params[key]}`).join("");
|
|
3908
|
-
return hmac("SHA-1", authToken, payload, "base64");
|
|
3909
|
-
};
|
|
3921
|
+
var PACKAGE_VERSION = true ? "3.10.4" : UNRELEASED_VERSION;
|
|
3910
3922
|
|
|
3911
3923
|
// ../core/dist/webhooks.js
|
|
3912
3924
|
var signers = {
|
|
@@ -5303,7 +5315,7 @@ var createRuntime = (options) => {
|
|
|
5303
5315
|
throw error;
|
|
5304
5316
|
}
|
|
5305
5317
|
const rewinds = at !== void 0 && selectedBranch === "main" && MUTATING_METHODS.has(request.method);
|
|
5306
|
-
if ((requested || rewinds) && options.adminKey !== void 0 && request.headers
|
|
5318
|
+
if ((requested || rewinds) && options.adminKey !== void 0 && !hasAdminKey(request.headers, options.adminKey))
|
|
5307
5319
|
return refuse(401, `control headers need ${ADMIN_KEY_HEADER}`);
|
|
5308
5320
|
controls.ensure(namespace);
|
|
5309
5321
|
if (requested?.restore !== void 0 && !snapshotStore.get(namespace, requested.restore))
|
|
@@ -5837,4 +5849,4 @@ export {
|
|
|
5837
5849
|
createRuntime,
|
|
5838
5850
|
signV4
|
|
5839
5851
|
};
|
|
5840
|
-
//# sourceMappingURL=chunk-
|
|
5852
|
+
//# sourceMappingURL=chunk-HN7EI4ER.js.map
|