@mathrunet/masamune_cloudflare_purchase_stripe 3.2.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 +3 -0
- package/LICENSE +21 -0
- package/README.md +174 -0
- package/dist/functions.d.ts +44 -0
- package/dist/functions.js +47 -0
- package/dist/functions.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/meter/d1_usage_event_store.d.ts +128 -0
- package/dist/lib/meter/d1_usage_event_store.js +78 -0
- package/dist/lib/meter/d1_usage_event_store.js.map +1 -0
- package/dist/lib/meter/flush_meter.d.ts +19 -0
- package/dist/lib/meter/flush_meter.js +38 -0
- package/dist/lib/meter/flush_meter.js.map +1 -0
- package/dist/lib/meter/interface.d.ts +109 -0
- package/dist/lib/meter/interface.js +3 -0
- package/dist/lib/meter/interface.js.map +1 -0
- package/dist/lib/meter/kv_usage_buffer.d.ts +56 -0
- package/dist/lib/meter/kv_usage_buffer.js +50 -0
- package/dist/lib/meter/kv_usage_buffer.js.map +1 -0
- package/dist/lib/meter/record_usage.d.ts +29 -0
- package/dist/lib/meter/record_usage.js +72 -0
- package/dist/lib/meter/record_usage.js.map +1 -0
- package/dist/lib/meter/stripe_meter_client.d.ts +76 -0
- package/dist/lib/meter/stripe_meter_client.js +74 -0
- package/dist/lib/meter/stripe_meter_client.js.map +1 -0
- package/dist/lib/options.d.ts +179 -0
- package/dist/lib/options.js +132 -0
- package/dist/lib/options.js.map +1 -0
- package/dist/lib/purchase/d1_purchase_store.d.ts +78 -0
- package/dist/lib/purchase/d1_purchase_store.js +194 -0
- package/dist/lib/purchase/d1_purchase_store.js.map +1 -0
- package/dist/lib/purchase/helpers.d.ts +36 -0
- package/dist/lib/purchase/helpers.js +64 -0
- package/dist/lib/purchase/helpers.js.map +1 -0
- package/dist/lib/purchase/interface.d.ts +182 -0
- package/dist/lib/purchase/interface.js +27 -0
- package/dist/lib/purchase/interface.js.map +1 -0
- package/dist/lib/purchase/sync_payment.d.ts +15 -0
- package/dist/lib/purchase/sync_payment.js +79 -0
- package/dist/lib/purchase/sync_payment.js.map +1 -0
- package/dist/lib/stripe_client.d.ts +55 -0
- package/dist/lib/stripe_client.js +50 -0
- package/dist/lib/stripe_client.js.map +1 -0
- package/dist/meter.d.ts +21 -0
- package/dist/meter.js +38 -0
- package/dist/meter.js.map +1 -0
- package/dist/purchase.d.ts +58 -0
- package/dist/purchase.js +48 -0
- package/dist/purchase.js.map +1 -0
- package/dist/workers/stripe.d.ts +1 -0
- package/dist/workers/stripe.js +861 -0
- package/dist/workers/stripe.js.map +1 -0
- package/dist/workers/stripe_webhook.d.ts +1 -0
- package/dist/workers/stripe_webhook.js +384 -0
- package/dist/workers/stripe_webhook.js.map +1 -0
- package/dist/workers/stripe_webhook_connect.d.ts +1 -0
- package/dist/workers/stripe_webhook_connect.js +97 -0
- package/dist/workers/stripe_webhook_connect.js.map +1 -0
- package/dist/workers/stripe_webhook_secure.d.ts +1 -0
- package/dist/workers/stripe_webhook_secure.js +82 -0
- package/dist/workers/stripe_webhook_secure.js.map +1 -0
- package/jest.config.json +19 -0
- package/package.json +56 -0
- package/src/functions.ts +48 -0
- package/src/index.ts +25 -0
- package/src/lib/meter/d1_usage_event_store.ts +176 -0
- package/src/lib/meter/flush_meter.ts +45 -0
- package/src/lib/meter/interface.ts +118 -0
- package/src/lib/meter/kv_usage_buffer.ts +79 -0
- package/src/lib/meter/record_usage.ts +87 -0
- package/src/lib/meter/stripe_meter_client.ts +117 -0
- package/src/lib/options.ts +299 -0
- package/src/lib/purchase/d1_purchase_store.ts +268 -0
- package/src/lib/purchase/helpers.ts +77 -0
- package/src/lib/purchase/interface.ts +215 -0
- package/src/lib/purchase/sync_payment.ts +95 -0
- package/src/lib/stripe_client.ts +76 -0
- package/src/meter.ts +21 -0
- package/src/purchase.ts +66 -0
- package/src/workers/stripe.ts +881 -0
- package/src/workers/stripe_webhook.ts +414 -0
- package/src/workers/stripe_webhook_connect.ts +107 -0
- package/src/workers/stripe_webhook_secure.ts +91 -0
- package/test/helpers/mem_store.ts +97 -0
- package/test/meter.test.ts +217 -0
- package/test/purchase_store.test.ts +154 -0
- package/test/stripe.test.ts +146 -0
- package/test/stripe_webhook.test.ts +174 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Free-form document data stored for Stripe users / payments / purchases.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Firestore document model of
|
|
5
|
+
* `@mathrunet/masamune_firebase_purchase_stripe`. Setting a key to `null` in an
|
|
6
|
+
* update deletes the key (equivalent to `FieldValue.delete()`).
|
|
7
|
+
*
|
|
8
|
+
* Stripeのユーザー・支払い方法・購入情報として保存する自由形式のドキュメントデータ。
|
|
9
|
+
*
|
|
10
|
+
* `@mathrunet/masamune_firebase_purchase_stripe`のFirestoreドキュメントモデルを
|
|
11
|
+
* 踏襲します。更新時にキーへ`null`を設定するとそのキーを削除します
|
|
12
|
+
* (`FieldValue.delete()`相当)。
|
|
13
|
+
*/
|
|
14
|
+
export type StripeDocumentData = {
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Stored Stripe user (customer / connect account) document.
|
|
19
|
+
*
|
|
20
|
+
* 保存されたStripeユーザー(カスタマー / Connectアカウント)ドキュメント。
|
|
21
|
+
*/
|
|
22
|
+
export interface StripeUserDocument {
|
|
23
|
+
/**
|
|
24
|
+
* Application user ID.
|
|
25
|
+
*
|
|
26
|
+
* アプリケーションのユーザーID。
|
|
27
|
+
*/
|
|
28
|
+
userId: string;
|
|
29
|
+
/**
|
|
30
|
+
* Document data (`customer`, `account`, `defaultPayment`, etc.).
|
|
31
|
+
*
|
|
32
|
+
* ドキュメントデータ(`customer`、`account`、`defaultPayment`など)。
|
|
33
|
+
*/
|
|
34
|
+
data: StripeDocumentData;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Stored Stripe payment method document.
|
|
38
|
+
*
|
|
39
|
+
* 保存されたStripe支払い方法ドキュメント。
|
|
40
|
+
*/
|
|
41
|
+
export interface StripePaymentDocument {
|
|
42
|
+
/**
|
|
43
|
+
* Application user ID.
|
|
44
|
+
*
|
|
45
|
+
* アプリケーションのユーザーID。
|
|
46
|
+
*/
|
|
47
|
+
userId: string;
|
|
48
|
+
/**
|
|
49
|
+
* Stripe payment method ID.
|
|
50
|
+
*
|
|
51
|
+
* Stripeの支払い方法ID。
|
|
52
|
+
*/
|
|
53
|
+
paymentId: string;
|
|
54
|
+
/**
|
|
55
|
+
* Document data (`type`, `brand`, `numberLast`, `default`, etc.).
|
|
56
|
+
*
|
|
57
|
+
* ドキュメントデータ(`type`、`brand`、`numberLast`、`default`など)。
|
|
58
|
+
*/
|
|
59
|
+
data: StripeDocumentData;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Stored Stripe purchase / subscription document.
|
|
63
|
+
*
|
|
64
|
+
* 保存されたStripe購入・サブスクリプションドキュメント。
|
|
65
|
+
*/
|
|
66
|
+
export interface StripePurchaseDocument {
|
|
67
|
+
/**
|
|
68
|
+
* Order ID (database key).
|
|
69
|
+
*
|
|
70
|
+
* 注文ID(データベースのキー)。
|
|
71
|
+
*/
|
|
72
|
+
orderId: string;
|
|
73
|
+
/**
|
|
74
|
+
* Application user ID. May be `null` for subscription records created from
|
|
75
|
+
* webhooks before the user is known.
|
|
76
|
+
*
|
|
77
|
+
* アプリケーションのユーザーID。ユーザーが未確定のWebhook起点の
|
|
78
|
+
* サブスクリプションレコードでは`null`になることがあります。
|
|
79
|
+
*/
|
|
80
|
+
userId: string | null;
|
|
81
|
+
/**
|
|
82
|
+
* Document data (`purchaseId`, `subscription`, `confirm`, `success`, etc.).
|
|
83
|
+
*
|
|
84
|
+
* ドキュメントデータ(`purchaseId`、`subscription`、`confirm`、`success`など)。
|
|
85
|
+
*/
|
|
86
|
+
data: StripeDocumentData;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Persistence boundary for Stripe purchase data.
|
|
90
|
+
*
|
|
91
|
+
* Replaces the Firestore paths (`PURCHASE_STRIPE_USERPATH` /
|
|
92
|
+
* `PURCHASE_STRIPE_PAYMENTPATH` / `PURCHASE_STRIPE_PURCHASEPATH`) of the
|
|
93
|
+
* Firebase implementation. All `save*` methods merge the update into the
|
|
94
|
+
* existing document; keys set to `null` are removed.
|
|
95
|
+
*
|
|
96
|
+
* Stripe購入データの永続化境界。
|
|
97
|
+
*
|
|
98
|
+
* Firebase実装のFirestoreパス(`PURCHASE_STRIPE_USERPATH` /
|
|
99
|
+
* `PURCHASE_STRIPE_PAYMENTPATH` / `PURCHASE_STRIPE_PURCHASEPATH`)を置き換えます。
|
|
100
|
+
* すべての`save*`メソッドは既存ドキュメントへ更新をマージし、`null`が設定された
|
|
101
|
+
* キーは削除されます。
|
|
102
|
+
*/
|
|
103
|
+
export interface StripePurchaseStore {
|
|
104
|
+
/**
|
|
105
|
+
* Get a user document by application user ID.
|
|
106
|
+
*
|
|
107
|
+
* アプリケーションのユーザーIDでユーザードキュメントを取得します。
|
|
108
|
+
*/
|
|
109
|
+
getUser(userId: string): Promise<StripeUserDocument | null>;
|
|
110
|
+
/**
|
|
111
|
+
* Find a user document by Stripe customer ID.
|
|
112
|
+
*
|
|
113
|
+
* StripeのカスタマーIDでユーザードキュメントを検索します。
|
|
114
|
+
*/
|
|
115
|
+
findUserByCustomerId(customerId: string): Promise<StripeUserDocument | null>;
|
|
116
|
+
/**
|
|
117
|
+
* Find a user document by Stripe connect account ID.
|
|
118
|
+
*
|
|
119
|
+
* StripeのConnectアカウントIDでユーザードキュメントを検索します。
|
|
120
|
+
*/
|
|
121
|
+
findUserByAccountId(accountId: string): Promise<StripeUserDocument | null>;
|
|
122
|
+
/**
|
|
123
|
+
* Merge-save a user document.
|
|
124
|
+
*
|
|
125
|
+
* ユーザードキュメントをマージ保存します。
|
|
126
|
+
*/
|
|
127
|
+
saveUser(userId: string, update: StripeDocumentData): Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* List payment method documents of a user.
|
|
130
|
+
*
|
|
131
|
+
* ユーザーの支払い方法ドキュメントを一覧します。
|
|
132
|
+
*/
|
|
133
|
+
listPayments(userId: string): Promise<StripePaymentDocument[]>;
|
|
134
|
+
/**
|
|
135
|
+
* Merge-save a payment method document.
|
|
136
|
+
*
|
|
137
|
+
* 支払い方法ドキュメントをマージ保存します。
|
|
138
|
+
*/
|
|
139
|
+
savePayment(userId: string, paymentId: string, update: StripeDocumentData): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Delete a payment method document.
|
|
142
|
+
*
|
|
143
|
+
* 支払い方法ドキュメントを削除します。
|
|
144
|
+
*/
|
|
145
|
+
deletePayment(userId: string, paymentId: string): Promise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Get a purchase document by order ID. When `userId` is given the document
|
|
148
|
+
* must belong to that user.
|
|
149
|
+
*
|
|
150
|
+
* 注文IDで購入ドキュメントを取得します。`userId`を指定した場合はその
|
|
151
|
+
* ユーザーの所有ドキュメントに限定します。
|
|
152
|
+
*/
|
|
153
|
+
getPurchase(orderId: string, userId?: string | undefined): Promise<StripePurchaseDocument | null>;
|
|
154
|
+
/**
|
|
155
|
+
* Find a purchase document by Stripe payment intent ID.
|
|
156
|
+
*
|
|
157
|
+
* StripeのPaymentIntent IDで購入ドキュメントを検索します。
|
|
158
|
+
*/
|
|
159
|
+
findPurchaseByPurchaseId(purchaseId: string): Promise<StripePurchaseDocument | null>;
|
|
160
|
+
/**
|
|
161
|
+
* Find a purchase document by Stripe subscription ID.
|
|
162
|
+
*
|
|
163
|
+
* StripeのサブスクリプションIDで購入ドキュメントを検索します。
|
|
164
|
+
*/
|
|
165
|
+
findPurchaseBySubscriptionId(subscriptionId: string): Promise<StripePurchaseDocument | null>;
|
|
166
|
+
/**
|
|
167
|
+
* Merge-save a purchase document.
|
|
168
|
+
*
|
|
169
|
+
* 購入ドキュメントをマージ保存します。
|
|
170
|
+
*/
|
|
171
|
+
savePurchase(orderId: string, update: StripeDocumentData, options?: {
|
|
172
|
+
userId?: string | undefined;
|
|
173
|
+
}): Promise<void>;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Apply a merge update to document data. Keys set to `null` are removed
|
|
177
|
+
* (equivalent to `FieldValue.delete()`), `undefined` keys are ignored.
|
|
178
|
+
*
|
|
179
|
+
* ドキュメントデータへマージ更新を適用します。`null`が設定されたキーは削除され
|
|
180
|
+
* (`FieldValue.delete()`相当)、`undefined`のキーは無視されます。
|
|
181
|
+
*/
|
|
182
|
+
export declare function mergeDocumentData(current: StripeDocumentData, update: StripeDocumentData): StripeDocumentData;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeDocumentData = mergeDocumentData;
|
|
4
|
+
/**
|
|
5
|
+
* Apply a merge update to document data. Keys set to `null` are removed
|
|
6
|
+
* (equivalent to `FieldValue.delete()`), `undefined` keys are ignored.
|
|
7
|
+
*
|
|
8
|
+
* ドキュメントデータへマージ更新を適用します。`null`が設定されたキーは削除され
|
|
9
|
+
* (`FieldValue.delete()`相当)、`undefined`のキーは無視されます。
|
|
10
|
+
*/
|
|
11
|
+
function mergeDocumentData(current, update) {
|
|
12
|
+
const merged = { ...current };
|
|
13
|
+
for (const key of Object.keys(update)) {
|
|
14
|
+
const value = update[key];
|
|
15
|
+
if (value === undefined) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (value === null) {
|
|
19
|
+
delete merged[key];
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
merged[key] = value;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return merged;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/lib/purchase/interface.ts"],"names":[],"mappings":";;AAqMA,8CAiBC;AAxBD;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAC7B,OAA2B,EAC3B,MAA0B;IAE1B,MAAM,MAAM,GAAuB,EAAE,GAAG,OAAO,EAAE,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
import { StripePurchaseStore } from "./interface";
|
|
3
|
+
/**
|
|
4
|
+
* Synchronize the payment methods of a Stripe customer into the store
|
|
5
|
+
* (parity with `syncStripePayment` in the Firebase implementation).
|
|
6
|
+
*
|
|
7
|
+
* Stripeカスタマーの支払い方法をストアへ同期します
|
|
8
|
+
* (Firebase実装の`syncStripePayment`相当)。
|
|
9
|
+
*/
|
|
10
|
+
export declare function syncStripePayment(options: {
|
|
11
|
+
stripeClient: Stripe;
|
|
12
|
+
store: StripePurchaseStore;
|
|
13
|
+
userId: string;
|
|
14
|
+
customerId: string;
|
|
15
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.syncStripePayment = syncStripePayment;
|
|
4
|
+
/**
|
|
5
|
+
* Synchronize the payment methods of a Stripe customer into the store
|
|
6
|
+
* (parity with `syncStripePayment` in the Firebase implementation).
|
|
7
|
+
*
|
|
8
|
+
* Stripeカスタマーの支払い方法をストアへ同期します
|
|
9
|
+
* (Firebase実装の`syncStripePayment`相当)。
|
|
10
|
+
*/
|
|
11
|
+
async function syncStripePayment(options) {
|
|
12
|
+
const { stripeClient, store, userId, customerId } = options;
|
|
13
|
+
const customer = await stripeClient.customers.retrieve(customerId);
|
|
14
|
+
let defaultSource = customer.invoice_settings.default_payment_method;
|
|
15
|
+
const paymentMethods = await stripeClient.customers.listPaymentMethods(customerId, {
|
|
16
|
+
type: "card",
|
|
17
|
+
});
|
|
18
|
+
if (!defaultSource && paymentMethods.data.length > 0) {
|
|
19
|
+
defaultSource = paymentMethods.data[0]?.id ?? null;
|
|
20
|
+
if (defaultSource) {
|
|
21
|
+
await stripeClient.customers.update(customerId, {
|
|
22
|
+
invoice_settings: {
|
|
23
|
+
default_payment_method: defaultSource,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const payments = await store.listPayments(userId);
|
|
29
|
+
for (const payment of payments) {
|
|
30
|
+
const method = paymentMethods.data.find((m) => m.id == payment.data["id"]);
|
|
31
|
+
if (!method) {
|
|
32
|
+
await store.deletePayment(userId, payment.paymentId);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const card = method.card;
|
|
36
|
+
if (!card) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const isDefault = method.id == defaultSource;
|
|
40
|
+
if (method.type === payment.data["type"] && card.exp_month === payment.data["expMonth"] && card.exp_year === payment.data["expYear"] && card.brand === payment.data["brand"] && card.last4 === payment.data["numberLast"] && isDefault === payment.data["default"]) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
await store.savePayment(userId, payment.paymentId, {
|
|
44
|
+
type: method.type,
|
|
45
|
+
expMonth: card.exp_month,
|
|
46
|
+
expYear: card.exp_year,
|
|
47
|
+
brand: card.brand,
|
|
48
|
+
numberLast: card.last4,
|
|
49
|
+
default: isDefault,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
for (const method of paymentMethods.data) {
|
|
53
|
+
const card = method.card;
|
|
54
|
+
if (!card) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const existing = payments.find((item) => item.data["id"] == method.id);
|
|
58
|
+
if (existing) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const uid = method.id;
|
|
62
|
+
const isDefault = method.id == defaultSource;
|
|
63
|
+
await store.savePayment(userId, uid, {
|
|
64
|
+
"@uid": uid,
|
|
65
|
+
"@time": new Date(),
|
|
66
|
+
id: uid,
|
|
67
|
+
type: method.type,
|
|
68
|
+
expMonth: card.exp_month,
|
|
69
|
+
expYear: card.exp_year,
|
|
70
|
+
brand: card.brand,
|
|
71
|
+
numberLast: card.last4,
|
|
72
|
+
default: isDefault,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
await store.saveUser(userId, {
|
|
76
|
+
defaultPayment: defaultSource ?? null,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=sync_payment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync_payment.js","sourceRoot":"","sources":["../../../src/lib/purchase/sync_payment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
/**
|
|
3
|
+
* Stripe API version used across this package (parity with
|
|
4
|
+
* `@mathrunet/masamune_firebase_purchase_stripe`).
|
|
5
|
+
*
|
|
6
|
+
* このパッケージ全体で使用するStripe APIバージョン
|
|
7
|
+
* (`@mathrunet/masamune_firebase_purchase_stripe`と同一)。
|
|
8
|
+
*/
|
|
9
|
+
export declare const STRIPE_API_VERSION = "2025-02-24.acacia";
|
|
10
|
+
/**
|
|
11
|
+
* Options for [createStripeClient].
|
|
12
|
+
*
|
|
13
|
+
* [createStripeClient]のオプション。
|
|
14
|
+
*/
|
|
15
|
+
export interface CreateStripeClientOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Stripe secret key.
|
|
18
|
+
*
|
|
19
|
+
* Stripeのシークレットキー。
|
|
20
|
+
*/
|
|
21
|
+
secretKey: string;
|
|
22
|
+
/**
|
|
23
|
+
* Fetch implementation. Defaults to the global `fetch`. Inject for tests.
|
|
24
|
+
*
|
|
25
|
+
* fetch実装。デフォルトはグローバル`fetch`。テスト時に注入します。
|
|
26
|
+
*/
|
|
27
|
+
fetch?: typeof fetch | undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a Stripe SDK client configured for Cloudflare Workers.
|
|
31
|
+
*
|
|
32
|
+
* Uses the fetch-based HTTP client so the SDK works without Node.js APIs.
|
|
33
|
+
*
|
|
34
|
+
* Cloudflare Workers用に構成したStripe SDKクライアントを作成します。
|
|
35
|
+
*
|
|
36
|
+
* fetchベースのHTTPクライアントを使うためNode.js APIなしで動作します。
|
|
37
|
+
*/
|
|
38
|
+
export declare function createStripeClient(options: CreateStripeClientOptions): Stripe;
|
|
39
|
+
/**
|
|
40
|
+
* Verify a Stripe webhook signature and construct the event.
|
|
41
|
+
*
|
|
42
|
+
* Uses `constructEventAsync` with the SubtleCrypto provider because the
|
|
43
|
+
* synchronous variant is not available on Cloudflare Workers.
|
|
44
|
+
*
|
|
45
|
+
* StripeのWebhook署名を検証しイベントを構築します。
|
|
46
|
+
*
|
|
47
|
+
* 同期版はCloudflare Workersで使用できないため、SubtleCryptoプロバイダ付きの
|
|
48
|
+
* `constructEventAsync`を使用します。
|
|
49
|
+
*/
|
|
50
|
+
export declare function constructStripeEvent(options: {
|
|
51
|
+
client: Stripe;
|
|
52
|
+
payload: string;
|
|
53
|
+
signature: string;
|
|
54
|
+
secret: string;
|
|
55
|
+
}): Promise<Stripe.Event>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.STRIPE_API_VERSION = void 0;
|
|
7
|
+
exports.createStripeClient = createStripeClient;
|
|
8
|
+
exports.constructStripeEvent = constructStripeEvent;
|
|
9
|
+
const stripe_1 = __importDefault(require("stripe"));
|
|
10
|
+
/**
|
|
11
|
+
* Stripe API version used across this package (parity with
|
|
12
|
+
* `@mathrunet/masamune_firebase_purchase_stripe`).
|
|
13
|
+
*
|
|
14
|
+
* このパッケージ全体で使用するStripe APIバージョン
|
|
15
|
+
* (`@mathrunet/masamune_firebase_purchase_stripe`と同一)。
|
|
16
|
+
*/
|
|
17
|
+
exports.STRIPE_API_VERSION = "2025-02-24.acacia";
|
|
18
|
+
/**
|
|
19
|
+
* Create a Stripe SDK client configured for Cloudflare Workers.
|
|
20
|
+
*
|
|
21
|
+
* Uses the fetch-based HTTP client so the SDK works without Node.js APIs.
|
|
22
|
+
*
|
|
23
|
+
* Cloudflare Workers用に構成したStripe SDKクライアントを作成します。
|
|
24
|
+
*
|
|
25
|
+
* fetchベースのHTTPクライアントを使うためNode.js APIなしで動作します。
|
|
26
|
+
*/
|
|
27
|
+
function createStripeClient(options) {
|
|
28
|
+
// 空キーだとSDKコンストラクタが例外を投げ、Webhook署名検証のような
|
|
29
|
+
// APIキー不要の処理まで実行できなくなるためプレースホルダを渡す。
|
|
30
|
+
// 実際のAPI呼び出しはStripe側の認証エラーとして返る。
|
|
31
|
+
return new stripe_1.default(options.secretKey || "sk_not_configured", {
|
|
32
|
+
apiVersion: exports.STRIPE_API_VERSION,
|
|
33
|
+
httpClient: stripe_1.default.createFetchHttpClient(options.fetch),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Verify a Stripe webhook signature and construct the event.
|
|
38
|
+
*
|
|
39
|
+
* Uses `constructEventAsync` with the SubtleCrypto provider because the
|
|
40
|
+
* synchronous variant is not available on Cloudflare Workers.
|
|
41
|
+
*
|
|
42
|
+
* StripeのWebhook署名を検証しイベントを構築します。
|
|
43
|
+
*
|
|
44
|
+
* 同期版はCloudflare Workersで使用できないため、SubtleCryptoプロバイダ付きの
|
|
45
|
+
* `constructEventAsync`を使用します。
|
|
46
|
+
*/
|
|
47
|
+
async function constructStripeEvent(options) {
|
|
48
|
+
return options.client.webhooks.constructEventAsync(options.payload, options.signature, options.secret, undefined, stripe_1.default.createSubtleCryptoProvider());
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=stripe_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe_client.js","sourceRoot":"","sources":["../../src/lib/stripe_client.ts"],"names":[],"mappings":";;;;;;AAyCA,gDAQC;AAaD,oDAaC;AA3ED,oDAA4B;AAE5B;;;;;;GAMG;AACU,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AAuBtD;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAC,OAAkC;IACjE,wCAAwC;IACxC,oCAAoC;IACpC,iCAAiC;IACjC,OAAO,IAAI,gBAAM,CAAC,OAAO,CAAC,SAAS,IAAI,mBAAmB,EAAE;QACxD,UAAU,EAAE,0BAAkB;QAC9B,UAAU,EAAE,gBAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;KAC1D,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,oBAAoB,CAAC,OAK1C;IACG,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAC9C,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,MAAM,EACd,SAAS,EACT,gBAAM,CAAC,0BAA0B,EAAE,CACtC,CAAC;AACN,CAAC"}
|
package/dist/meter.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 mathru. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Standalone entry point exposing only the Stripe Meter (metered billing)
|
|
5
|
+
* library. Import from `@mathrunet/masamune_cloudflare_purchase_stripe/dist/meter`
|
|
6
|
+
* to keep Workers bundles free of the full Masamune re-exports.
|
|
7
|
+
*
|
|
8
|
+
* Stripe Meter(従量課金)ライブラリのみを公開する単独エントリポイント。
|
|
9
|
+
* Masamune全体の再エクスポートをWorkersバンドルに含めたくない場合は
|
|
10
|
+
* `@mathrunet/masamune_cloudflare_purchase_stripe/dist/meter`からインポートしてください。
|
|
11
|
+
*
|
|
12
|
+
* [mathru.net]: https://mathru.net
|
|
13
|
+
* [YouTube]: https://www.youtube.com/c/mathrunetchannel
|
|
14
|
+
*/
|
|
15
|
+
export * from "./lib/stripe_client";
|
|
16
|
+
export * from "./lib/meter/interface";
|
|
17
|
+
export * from "./lib/meter/stripe_meter_client";
|
|
18
|
+
export * from "./lib/meter/flush_meter";
|
|
19
|
+
export * from "./lib/meter/record_usage";
|
|
20
|
+
export * from "./lib/meter/d1_usage_event_store";
|
|
21
|
+
export * from "./lib/meter/kv_usage_buffer";
|
package/dist/meter.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
/**
|
|
18
|
+
* Copyright (c) 2026 mathru. All rights reserved.
|
|
19
|
+
*
|
|
20
|
+
* Standalone entry point exposing only the Stripe Meter (metered billing)
|
|
21
|
+
* library. Import from `@mathrunet/masamune_cloudflare_purchase_stripe/dist/meter`
|
|
22
|
+
* to keep Workers bundles free of the full Masamune re-exports.
|
|
23
|
+
*
|
|
24
|
+
* Stripe Meter(従量課金)ライブラリのみを公開する単独エントリポイント。
|
|
25
|
+
* Masamune全体の再エクスポートをWorkersバンドルに含めたくない場合は
|
|
26
|
+
* `@mathrunet/masamune_cloudflare_purchase_stripe/dist/meter`からインポートしてください。
|
|
27
|
+
*
|
|
28
|
+
* [mathru.net]: https://mathru.net
|
|
29
|
+
* [YouTube]: https://www.youtube.com/c/mathrunetchannel
|
|
30
|
+
*/
|
|
31
|
+
__exportStar(require("./lib/stripe_client"), exports);
|
|
32
|
+
__exportStar(require("./lib/meter/interface"), exports);
|
|
33
|
+
__exportStar(require("./lib/meter/stripe_meter_client"), exports);
|
|
34
|
+
__exportStar(require("./lib/meter/flush_meter"), exports);
|
|
35
|
+
__exportStar(require("./lib/meter/record_usage"), exports);
|
|
36
|
+
__exportStar(require("./lib/meter/d1_usage_event_store"), exports);
|
|
37
|
+
__exportStar(require("./lib/meter/kv_usage_buffer"), exports);
|
|
38
|
+
//# sourceMappingURL=meter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meter.js","sourceRoot":"","sources":["../src/meter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,sDAAoC;AACpC,wDAAsC;AACtC,kEAAgD;AAChD,0DAAwC;AACxC,2DAAyC;AACzC,mEAAiD;AACjD,8DAA4C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 mathru. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Standalone entry point exposing the Stripe purchase library (mode actions,
|
|
5
|
+
* webhooks, stores) without the full Masamune re-exports. Import from
|
|
6
|
+
* `@mathrunet/masamune_cloudflare_purchase_stripe/dist/purchase` to keep
|
|
7
|
+
* Workers bundles small.
|
|
8
|
+
*
|
|
9
|
+
* Stripe購入ライブラリ(modeアクション、Webhook、ストア)のみを公開する単独
|
|
10
|
+
* エントリポイント。Masamune全体の再エクスポートをWorkersバンドルに含めたく
|
|
11
|
+
* ない場合は`@mathrunet/masamune_cloudflare_purchase_stripe/dist/purchase`から
|
|
12
|
+
* インポートしてください。
|
|
13
|
+
*
|
|
14
|
+
* [mathru.net]: https://mathru.net
|
|
15
|
+
* [YouTube]: https://www.youtube.com/c/mathrunetchannel
|
|
16
|
+
*/
|
|
17
|
+
import { Hono } from "hono";
|
|
18
|
+
import { StripePurchaseWorkersOptions } from "./lib/options";
|
|
19
|
+
export * from "./lib/options";
|
|
20
|
+
export * from "./lib/stripe_client";
|
|
21
|
+
export * from "./lib/purchase/interface";
|
|
22
|
+
export * from "./lib/purchase/d1_purchase_store";
|
|
23
|
+
export * from "./lib/purchase/helpers";
|
|
24
|
+
export * from "./lib/purchase/sync_payment";
|
|
25
|
+
/**
|
|
26
|
+
* Builder signature of the purchase workers (`stripe` / `stripeWebhook` /
|
|
27
|
+
* `stripeWebhookConnect` / `stripeWebhookSecure`).
|
|
28
|
+
*
|
|
29
|
+
* 購入ワーカー(`stripe` / `stripeWebhook` / `stripeWebhookConnect` /
|
|
30
|
+
* `stripeWebhookSecure`)のビルダーシグネチャ。
|
|
31
|
+
*/
|
|
32
|
+
export type StripeWorkerBuilder = (hono: Hono, options: StripePurchaseWorkersOptions, data: {
|
|
33
|
+
[key: string]: any;
|
|
34
|
+
}) => Hono;
|
|
35
|
+
/**
|
|
36
|
+
* Build the mode-based Stripe action handler onto a Hono app.
|
|
37
|
+
*
|
|
38
|
+
* mode分岐のStripeアクションハンドラをHonoアプリへ構築します。
|
|
39
|
+
*/
|
|
40
|
+
export declare const buildStripe: StripeWorkerBuilder;
|
|
41
|
+
/**
|
|
42
|
+
* Build the main Stripe webhook handler onto a Hono app.
|
|
43
|
+
*
|
|
44
|
+
* StripeメインWebhookハンドラをHonoアプリへ構築します。
|
|
45
|
+
*/
|
|
46
|
+
export declare const buildStripeWebhook: StripeWorkerBuilder;
|
|
47
|
+
/**
|
|
48
|
+
* Build the Stripe Connect webhook handler onto a Hono app.
|
|
49
|
+
*
|
|
50
|
+
* Stripe Connect用WebhookハンドラをHonoアプリへ構築します。
|
|
51
|
+
*/
|
|
52
|
+
export declare const buildStripeWebhookConnect: StripeWorkerBuilder;
|
|
53
|
+
/**
|
|
54
|
+
* Build the 3D Secure redirect webhook handler onto a Hono app.
|
|
55
|
+
*
|
|
56
|
+
* 3DセキュアリダイレクトWebhookハンドラをHonoアプリへ構築します。
|
|
57
|
+
*/
|
|
58
|
+
export declare const buildStripeWebhookSecure: StripeWorkerBuilder;
|
package/dist/purchase.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.buildStripeWebhookSecure = exports.buildStripeWebhookConnect = exports.buildStripeWebhook = exports.buildStripe = void 0;
|
|
18
|
+
__exportStar(require("./lib/options"), exports);
|
|
19
|
+
__exportStar(require("./lib/stripe_client"), exports);
|
|
20
|
+
__exportStar(require("./lib/purchase/interface"), exports);
|
|
21
|
+
__exportStar(require("./lib/purchase/d1_purchase_store"), exports);
|
|
22
|
+
__exportStar(require("./lib/purchase/helpers"), exports);
|
|
23
|
+
__exportStar(require("./lib/purchase/sync_payment"), exports);
|
|
24
|
+
/**
|
|
25
|
+
* Build the mode-based Stripe action handler onto a Hono app.
|
|
26
|
+
*
|
|
27
|
+
* mode分岐のStripeアクションハンドラをHonoアプリへ構築します。
|
|
28
|
+
*/
|
|
29
|
+
exports.buildStripe = require("./workers/stripe");
|
|
30
|
+
/**
|
|
31
|
+
* Build the main Stripe webhook handler onto a Hono app.
|
|
32
|
+
*
|
|
33
|
+
* StripeメインWebhookハンドラをHonoアプリへ構築します。
|
|
34
|
+
*/
|
|
35
|
+
exports.buildStripeWebhook = require("./workers/stripe_webhook");
|
|
36
|
+
/**
|
|
37
|
+
* Build the Stripe Connect webhook handler onto a Hono app.
|
|
38
|
+
*
|
|
39
|
+
* Stripe Connect用WebhookハンドラをHonoアプリへ構築します。
|
|
40
|
+
*/
|
|
41
|
+
exports.buildStripeWebhookConnect = require("./workers/stripe_webhook_connect");
|
|
42
|
+
/**
|
|
43
|
+
* Build the 3D Secure redirect webhook handler onto a Hono app.
|
|
44
|
+
*
|
|
45
|
+
* 3DセキュアリダイレクトWebhookハンドラをHonoアプリへ構築します。
|
|
46
|
+
*/
|
|
47
|
+
exports.buildStripeWebhookSecure = require("./workers/stripe_webhook_secure");
|
|
48
|
+
//# sourceMappingURL=purchase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purchase.js","sourceRoot":"","sources":["../src/purchase.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAmBA,gDAA8B;AAC9B,sDAAoC;AACpC,2DAAyC;AACzC,mEAAiD;AACjD,yDAAuC;AACvC,8DAA4C;AAe5C;;;;GAIG;AACU,QAAA,WAAW,GAAwB,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE5E;;;;GAIG;AACU,QAAA,kBAAkB,GAAwB,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAE3F;;;;GAIG;AACU,QAAA,yBAAyB,GAAwB,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAE1G;;;;GAIG;AACU,QAAA,wBAAwB,GAAwB,OAAO,CAAC,iCAAiC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@mathrunet/masamune";
|