@distilled.cloud/stripe 1.0.0-rc.1 → 1.0.0-rc.2

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.
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Stripe SDK trait surface — hand-written.
3
+ *
4
+ * Re-exports the generic protocol traits from core (so generated operations
5
+ * import everything from one place). The only Stripe-specific piece is the
6
+ * widened `Http` trait: nearly every Stripe operation's request body is
7
+ * `application/x-www-form-urlencoded` (with Stripe's deep bracket
8
+ * expansion), which core's `HttpTrait` doesn't model — the Stripe protocol
9
+ * keys its body encoding on `contentType: "form-urlencoded"`.
10
+ */
11
+ import { type HttpTrait as CoreHttpTrait } from "@distilled.cloud/core/trait";
12
+ export { Body, Header, Query, Label, ResponseCode, HttpBody, FormDataFile, KeyDictionary, UnionCases, applyErrorMatchers, getErrorMatchers, type ErrorMatcher, bodySymbol, headerSymbol, querySymbol, labelSymbol, httpSymbol, responseCodeSymbol, httpBodySymbol, formDataFileSymbol, keyDictionarySymbol, unionCasesSymbol, } from "@distilled.cloud/core/trait";
13
+ export { RawResponse, RawResponseRoot, SensitiveValue, rawResponseSymbol, rawResponseRootSymbol, sensitiveValueSymbol, } from "@distilled.cloud/core/protocol-rest";
14
+ /**
15
+ * Core's `HttpTrait` widened with Stripe's `"form-urlencoded"` body
16
+ * encoding (core itself only models `"multipart"`).
17
+ */
18
+ export interface HttpTrait extends Omit<CoreHttpTrait, "contentType"> {
19
+ readonly contentType?: "form-urlencoded" | "multipart";
20
+ }
21
+ /** Operation-level HTTP binding (see {@link HttpTrait}). */
22
+ export declare const Http: (trait: HttpTrait) => import("@distilled.cloud/core/trait").Annotation;
23
+ //# sourceMappingURL=traits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAEL,KAAK,SAAS,IAAI,aAAa,EAChC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,YAAY,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,qCAAqC,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAC;CACxD;AAED,4DAA4D;AAC5D,eAAO,MAAM,IAAI,UAAW,SAAS,qDAAqC,CAAC"}
package/lib/traits.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Stripe SDK trait surface — hand-written.
3
+ *
4
+ * Re-exports the generic protocol traits from core (so generated operations
5
+ * import everything from one place). The only Stripe-specific piece is the
6
+ * widened `Http` trait: nearly every Stripe operation's request body is
7
+ * `application/x-www-form-urlencoded` (with Stripe's deep bracket
8
+ * expansion), which core's `HttpTrait` doesn't model — the Stripe protocol
9
+ * keys its body encoding on `contentType: "form-urlencoded"`.
10
+ */
11
+ import { Http as CoreHttp, } from "@distilled.cloud/core/trait";
12
+ export { Body, Header, Query, Label, ResponseCode, HttpBody, FormDataFile, KeyDictionary, UnionCases, applyErrorMatchers, getErrorMatchers, bodySymbol, headerSymbol, querySymbol, labelSymbol, httpSymbol, responseCodeSymbol, httpBodySymbol, formDataFileSymbol, keyDictionarySymbol, unionCasesSymbol, } from "@distilled.cloud/core/trait";
13
+ export { RawResponse, RawResponseRoot, SensitiveValue, rawResponseSymbol, rawResponseRootSymbol, sensitiveValueSymbol, } from "@distilled.cloud/core/protocol-rest";
14
+ /** Operation-level HTTP binding (see {@link HttpTrait}). */
15
+ export const Http = (trait) => CoreHttp(trait);
16
+ //# sourceMappingURL=traits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.js","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,IAAI,IAAI,QAAQ,GAEjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAEhB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,qCAAqC,CAAC;AAU7C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAsB,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Redacted from "effect/Redacted";
3
+ import { StripeWebhookPayloadParseError, StripeWebhookSignatureError } from "./errors.ts";
4
+ export declare const DEFAULT_WEBHOOK_TOLERANCE_SECONDS = 300;
5
+ export type WebhookPayload = string | Uint8Array | ArrayBuffer;
6
+ export type WebhookSecret = string | Redacted.Redacted<string>;
7
+ export interface StripeEvent {
8
+ readonly id?: string;
9
+ readonly object?: string;
10
+ readonly api_version?: string;
11
+ readonly created?: number;
12
+ readonly data?: unknown;
13
+ readonly livemode?: boolean;
14
+ readonly pending_webhooks?: number;
15
+ readonly request?: unknown;
16
+ readonly type?: string;
17
+ readonly [key: string]: unknown;
18
+ }
19
+ export interface VerifySignatureOptions {
20
+ /**
21
+ * Raw request body exactly as Stripe sent it. Do not pass parsed or
22
+ * reserialized JSON.
23
+ */
24
+ readonly payload: WebhookPayload;
25
+ readonly signature: string | null | undefined;
26
+ readonly secret: WebhookSecret;
27
+ /**
28
+ * Maximum allowed webhook age in seconds. Pass `0` to skip timestamp
29
+ * tolerance verification for tests or offline reprocessing.
30
+ */
31
+ readonly toleranceSeconds?: number | undefined;
32
+ }
33
+ export interface ConstructEventOptions extends VerifySignatureOptions {
34
+ }
35
+ export declare const verifySignature: ({ payload, signature, secret, toleranceSeconds, }: VerifySignatureOptions) => Effect.Effect<void, StripeWebhookSignatureError>;
36
+ export declare const constructEvent: ({ payload, signature, secret, toleranceSeconds, }: ConstructEventOptions) => Effect.Effect<StripeEvent, StripeWebhookSignatureError | StripeWebhookPayloadParseError>;
37
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;CAAG;AAyMxE,eAAO,MAAM,eAAe,sDAKzB,sBAAsB,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,CA6BvE,CAAC;AAKL,eAAO,MAAM,cAAc,sDAKxB,qBAAqB,KAAG,MAAM,CAAC,MAAM,CACtC,WAAW,EACX,2BAA2B,GAAG,8BAA8B,CAmB3D,CAAC"}
@@ -0,0 +1,161 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Redacted from "effect/Redacted";
3
+ import { StripeWebhookPayloadParseError, StripeWebhookSignatureError, } from "./errors.js";
4
+ export const DEFAULT_WEBHOOK_TOLERANCE_SECONDS = 300;
5
+ const textEncoder = new TextEncoder();
6
+ const textDecoder = new TextDecoder("utf-8", { fatal: true });
7
+ const payloadToBytes = (payload) => {
8
+ if (typeof payload === "string") {
9
+ return textEncoder.encode(payload);
10
+ }
11
+ if (payload instanceof ArrayBuffer) {
12
+ return new Uint8Array(payload);
13
+ }
14
+ return payload;
15
+ };
16
+ const payloadToString = (payload) => {
17
+ if (typeof payload === "string") {
18
+ return payload;
19
+ }
20
+ return textDecoder.decode(payloadToBytes(payload));
21
+ };
22
+ const secretToString = (secret) => Redacted.isRedacted(secret) ? Redacted.value(secret) : secret;
23
+ const parseSignatureHeader = (signature) => {
24
+ if (signature == null || signature.trim() === "") {
25
+ return new StripeWebhookSignatureError({
26
+ message: "Stripe-Signature header is required",
27
+ });
28
+ }
29
+ let timestamp;
30
+ const signatures = [];
31
+ for (const part of signature.split(",")) {
32
+ const separatorIndex = part.indexOf("=");
33
+ if (separatorIndex === -1) {
34
+ continue;
35
+ }
36
+ const key = part.slice(0, separatorIndex).trim();
37
+ const value = part.slice(separatorIndex + 1).trim();
38
+ if (key === "t" && timestamp === undefined) {
39
+ timestamp = value;
40
+ }
41
+ else if (key === "v1") {
42
+ signatures.push(value);
43
+ }
44
+ }
45
+ if (timestamp === undefined || timestamp === "") {
46
+ return new StripeWebhookSignatureError({
47
+ message: "Stripe-Signature header is missing a timestamp",
48
+ });
49
+ }
50
+ const timestampSeconds = Number(timestamp);
51
+ if (!Number.isSafeInteger(timestampSeconds) ||
52
+ timestampSeconds < 0 ||
53
+ String(timestampSeconds) !== timestamp) {
54
+ return new StripeWebhookSignatureError({
55
+ message: "Stripe-Signature header timestamp is invalid",
56
+ });
57
+ }
58
+ if (signatures.length === 0) {
59
+ return new StripeWebhookSignatureError({
60
+ message: "Stripe-Signature header is missing a v1 signature",
61
+ });
62
+ }
63
+ return { timestamp, timestampSeconds, signatures };
64
+ };
65
+ const signedPayloadBytes = (timestamp, payload) => {
66
+ const timestampBytes = textEncoder.encode(`${timestamp}.`);
67
+ const bodyBytes = payloadToBytes(payload);
68
+ const signedPayload = new Uint8Array(timestampBytes.byteLength + bodyBytes.byteLength);
69
+ signedPayload.set(timestampBytes, 0);
70
+ signedPayload.set(bodyBytes, timestampBytes.byteLength);
71
+ return signedPayload.buffer;
72
+ };
73
+ const hmacSha256 = (secret, timestamp, payload) => Effect.tryPromise({
74
+ try: async () => {
75
+ const key = await crypto.subtle.importKey("raw", textEncoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
76
+ const signature = await crypto.subtle.sign("HMAC", key, signedPayloadBytes(timestamp, payload));
77
+ return new Uint8Array(signature);
78
+ },
79
+ catch: (cause) => new StripeWebhookSignatureError({
80
+ message: "Unable to compute Stripe webhook signature",
81
+ cause,
82
+ }),
83
+ });
84
+ const hexToBytes = (hex) => {
85
+ if (hex.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(hex)) {
86
+ return undefined;
87
+ }
88
+ const bytes = new Uint8Array(hex.length / 2);
89
+ for (let index = 0; index < bytes.length; index += 1) {
90
+ bytes[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);
91
+ }
92
+ return bytes;
93
+ };
94
+ const constantTimeEqual = (expected, candidate) => {
95
+ // JavaScript cannot guarantee CPU-level constant time, but length mismatches
96
+ // are folded into the accumulator so a matching prefix can never succeed.
97
+ let difference = expected.byteLength ^ candidate.byteLength;
98
+ const byteLength = Math.max(expected.byteLength, candidate.byteLength);
99
+ for (let index = 0; index < byteLength; index += 1) {
100
+ const expectedByte = index < expected.byteLength ? expected[index] : 0;
101
+ const candidateByte = index < candidate.byteLength ? candidate[index] : 0;
102
+ difference |= expectedByte ^ candidateByte;
103
+ }
104
+ return difference === 0;
105
+ };
106
+ const hasMatchingSignature = (expectedSignature, signatures) => {
107
+ let matched = false;
108
+ for (const signature of signatures) {
109
+ const candidate = hexToBytes(signature) ?? new Uint8Array(0);
110
+ matched = constantTimeEqual(expectedSignature, candidate) || matched;
111
+ }
112
+ return matched;
113
+ };
114
+ const validateTolerance = (timestampSeconds, toleranceSeconds) => {
115
+ if (!Number.isFinite(toleranceSeconds) || toleranceSeconds < 0) {
116
+ return new StripeWebhookSignatureError({
117
+ message: "Stripe webhook tolerance must be a non-negative number",
118
+ });
119
+ }
120
+ if (toleranceSeconds === 0) {
121
+ return undefined;
122
+ }
123
+ const ageSeconds = Math.abs(Math.floor(Date.now() / 1000) - timestampSeconds);
124
+ if (ageSeconds > toleranceSeconds) {
125
+ return new StripeWebhookSignatureError({
126
+ message: `Stripe webhook timestamp is outside the tolerance window of ${toleranceSeconds} seconds`,
127
+ });
128
+ }
129
+ return undefined;
130
+ };
131
+ export const verifySignature = ({ payload, signature, secret, toleranceSeconds = DEFAULT_WEBHOOK_TOLERANCE_SECONDS, }) => Effect.gen(function* () {
132
+ const parsed = parseSignatureHeader(signature);
133
+ if (parsed instanceof StripeWebhookSignatureError) {
134
+ return yield* Effect.fail(parsed);
135
+ }
136
+ const expectedSignature = yield* hmacSha256(secretToString(secret), parsed.timestamp, payload);
137
+ if (!hasMatchingSignature(expectedSignature, parsed.signatures)) {
138
+ return yield* Effect.fail(new StripeWebhookSignatureError({
139
+ message: "No v1 signature matches the expected Stripe webhook signature",
140
+ }));
141
+ }
142
+ const toleranceError = validateTolerance(parsed.timestampSeconds, toleranceSeconds);
143
+ if (toleranceError !== undefined) {
144
+ return yield* Effect.fail(toleranceError);
145
+ }
146
+ });
147
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
148
+ export const constructEvent = ({ payload, signature, secret, toleranceSeconds, }) => verifySignature({ payload, signature, secret, toleranceSeconds }).pipe(Effect.flatMap(() => Effect.try({
149
+ try: () => {
150
+ const parsed = JSON.parse(payloadToString(payload));
151
+ if (!isRecord(parsed)) {
152
+ throw new Error("Stripe webhook payload must be a JSON object");
153
+ }
154
+ return parsed;
155
+ },
156
+ catch: (cause) => new StripeWebhookPayloadParseError({
157
+ message: "Unable to parse Stripe webhook payload as JSON",
158
+ cause,
159
+ }),
160
+ })));
161
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@distilled.cloud/stripe",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/alchemy-run/distilled",
@@ -10,6 +10,7 @@
10
10
  "type": "module",
11
11
  "sideEffects": false,
12
12
  "files": [
13
+ "lib",
13
14
  "src"
14
15
  ],
15
16
  "exports": {
@@ -77,7 +78,7 @@
77
78
  "specs:update": "git -C specs/stripe-openapi fetch && git -C specs/stripe-openapi checkout master && git -C specs/stripe-openapi pull"
78
79
  },
79
80
  "dependencies": {
80
- "@distilled.cloud/core": "1.0.0-rc.1",
81
+ "@distilled.cloud/core": "1.0.0-rc.2",
81
82
  "@effect/platform-bun": ">=4.0.0-beta.102 || >=4.0.0",
82
83
  "effect": ">=4.0.0-beta.102 || >=4.0.0"
83
84
  },