@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,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A usage event to be recorded as the source of truth for metered billing.
|
|
3
|
+
*
|
|
4
|
+
* 従量課金の正本として記録される使用量イベント。
|
|
5
|
+
*/
|
|
6
|
+
export interface StripeUsageEvent {
|
|
7
|
+
/**
|
|
8
|
+
* Unique id of the event.
|
|
9
|
+
*
|
|
10
|
+
* イベントの一意なID。
|
|
11
|
+
*/
|
|
12
|
+
id: string;
|
|
13
|
+
/**
|
|
14
|
+
* Key identifying the customer on your side (e.g. API key id).
|
|
15
|
+
*
|
|
16
|
+
* 自側で顧客を識別するキー(例: APIキーID)。
|
|
17
|
+
*/
|
|
18
|
+
customerKey: string;
|
|
19
|
+
/**
|
|
20
|
+
* The endpoint or feature that consumed the units.
|
|
21
|
+
*
|
|
22
|
+
* ユニットを消費したエンドポイントや機能。
|
|
23
|
+
*/
|
|
24
|
+
endpoint: string;
|
|
25
|
+
/**
|
|
26
|
+
* Number of units consumed.
|
|
27
|
+
*
|
|
28
|
+
* 消費ユニット数。
|
|
29
|
+
*/
|
|
30
|
+
units: number;
|
|
31
|
+
/**
|
|
32
|
+
* Optional source label of the event.
|
|
33
|
+
*
|
|
34
|
+
* イベントのソースラベル(任意)。
|
|
35
|
+
*/
|
|
36
|
+
source: string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Creation time in milliseconds since epoch.
|
|
39
|
+
*
|
|
40
|
+
* 作成時刻(エポックからのミリ秒)。
|
|
41
|
+
*/
|
|
42
|
+
createdAt: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Storage for usage events. The store is the source of truth for billing.
|
|
46
|
+
*
|
|
47
|
+
* 使用量イベントのストレージ。課金の正本となる。
|
|
48
|
+
*/
|
|
49
|
+
export interface StripeUsageEventStore {
|
|
50
|
+
/**
|
|
51
|
+
* Persist a usage event with `flushed = false`.
|
|
52
|
+
*
|
|
53
|
+
* 使用量イベントを未送信状態で永続化します。
|
|
54
|
+
*/
|
|
55
|
+
insert(event: StripeUsageEvent): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* List events not yet flushed to Stripe for the given customer key.
|
|
58
|
+
*
|
|
59
|
+
* 指定した顧客キーのStripe未送信イベントを一覧します。
|
|
60
|
+
*/
|
|
61
|
+
listPending(customerKey: string): Promise<{
|
|
62
|
+
id: string;
|
|
63
|
+
units: number;
|
|
64
|
+
}[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Mark the given events as flushed to Stripe.
|
|
67
|
+
*
|
|
68
|
+
* 指定したイベントをStripe送信済みとして記録します。
|
|
69
|
+
*/
|
|
70
|
+
markFlushed(ids: string[]): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* State of the flush-trigger buffer for a customer.
|
|
74
|
+
*
|
|
75
|
+
* 顧客ごとのフラッシュトリガー用バッファの状態。
|
|
76
|
+
*/
|
|
77
|
+
export interface StripeUsageBufferState {
|
|
78
|
+
/**
|
|
79
|
+
* Accumulated units since the last flush.
|
|
80
|
+
*
|
|
81
|
+
* 前回フラッシュ以降に積み上がったユニット数。
|
|
82
|
+
*/
|
|
83
|
+
units: number;
|
|
84
|
+
/**
|
|
85
|
+
* Time in milliseconds when the buffer window started.
|
|
86
|
+
*
|
|
87
|
+
* バッファ窓が開始した時刻(ミリ秒)。
|
|
88
|
+
*/
|
|
89
|
+
since: number;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Buffer used only to decide when to flush. Billing accuracy does not depend on it.
|
|
93
|
+
*
|
|
94
|
+
* フラッシュタイミングの判定のみに使うバッファ。課金精度はこれに依存しない。
|
|
95
|
+
*/
|
|
96
|
+
export interface StripeUsageBuffer {
|
|
97
|
+
/**
|
|
98
|
+
* Get the buffer state for the customer key. Returns `null` if absent or corrupt.
|
|
99
|
+
*
|
|
100
|
+
* 顧客キーのバッファ状態を取得します。存在しない・壊れている場合は`null`。
|
|
101
|
+
*/
|
|
102
|
+
get(customerKey: string): Promise<StripeUsageBufferState | null>;
|
|
103
|
+
/**
|
|
104
|
+
* Store the buffer state for the customer key.
|
|
105
|
+
*
|
|
106
|
+
* 顧客キーのバッファ状態を保存します。
|
|
107
|
+
*/
|
|
108
|
+
put(customerKey: string, value: StripeUsageBufferState, ttlSeconds: number): Promise<void>;
|
|
109
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/lib/meter/interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { StripeUsageBuffer, StripeUsageBufferState } from "./interface";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal structural interface for a KV-like namespace.
|
|
4
|
+
*
|
|
5
|
+
* Cloudflare's `KVNamespace` satisfies this without depending on
|
|
6
|
+
* `@cloudflare/workers-types`.
|
|
7
|
+
*
|
|
8
|
+
* KV相当のネームスペースの最小の構造的インターフェース。
|
|
9
|
+
*
|
|
10
|
+
* `@cloudflare/workers-types`に依存せずCloudflareの`KVNamespace`が適合します。
|
|
11
|
+
*/
|
|
12
|
+
export interface KVNamespaceLike {
|
|
13
|
+
/**
|
|
14
|
+
* Get a JSON value for the key.
|
|
15
|
+
*
|
|
16
|
+
* キーに対応するJSON値を取得します。
|
|
17
|
+
*/
|
|
18
|
+
get(key: string, type: "json"): Promise<unknown | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Store a string value for the key.
|
|
21
|
+
*
|
|
22
|
+
* キーに対応する文字列値を保存します。
|
|
23
|
+
*/
|
|
24
|
+
put(key: string, value: string, options?: {
|
|
25
|
+
expirationTtl?: number | undefined;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* [StripeUsageBuffer] backed by Cloudflare KV.
|
|
30
|
+
*
|
|
31
|
+
* Cloudflare KVを用いた[StripeUsageBuffer]。
|
|
32
|
+
*/
|
|
33
|
+
export declare class KVUsageBuffer implements StripeUsageBuffer {
|
|
34
|
+
/**
|
|
35
|
+
* [StripeUsageBuffer] backed by Cloudflare KV.
|
|
36
|
+
*
|
|
37
|
+
* Cloudflare KVを用いた[StripeUsageBuffer]。
|
|
38
|
+
*/
|
|
39
|
+
constructor(kv: KVNamespaceLike, options?: {
|
|
40
|
+
prefix?: string | undefined;
|
|
41
|
+
});
|
|
42
|
+
private readonly _kv;
|
|
43
|
+
private readonly _prefix;
|
|
44
|
+
/**
|
|
45
|
+
* Get the buffer state for the customer key. Returns `null` if absent or corrupt.
|
|
46
|
+
*
|
|
47
|
+
* 顧客キーのバッファ状態を取得します。存在しない・壊れている場合は`null`。
|
|
48
|
+
*/
|
|
49
|
+
get(customerKey: string): Promise<StripeUsageBufferState | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Store the buffer state for the customer key.
|
|
52
|
+
*
|
|
53
|
+
* 顧客キーのバッファ状態を保存します。
|
|
54
|
+
*/
|
|
55
|
+
put(customerKey: string, value: StripeUsageBufferState, ttlSeconds: number): Promise<void>;
|
|
56
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KVUsageBuffer = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* [StripeUsageBuffer] backed by Cloudflare KV.
|
|
6
|
+
*
|
|
7
|
+
* Cloudflare KVを用いた[StripeUsageBuffer]。
|
|
8
|
+
*/
|
|
9
|
+
class KVUsageBuffer {
|
|
10
|
+
/**
|
|
11
|
+
* [StripeUsageBuffer] backed by Cloudflare KV.
|
|
12
|
+
*
|
|
13
|
+
* Cloudflare KVを用いた[StripeUsageBuffer]。
|
|
14
|
+
*/
|
|
15
|
+
constructor(kv, options = {}) {
|
|
16
|
+
this._kv = kv;
|
|
17
|
+
this._prefix = options.prefix ?? "usage:";
|
|
18
|
+
}
|
|
19
|
+
_kv;
|
|
20
|
+
_prefix;
|
|
21
|
+
/**
|
|
22
|
+
* Get the buffer state for the customer key. Returns `null` if absent or corrupt.
|
|
23
|
+
*
|
|
24
|
+
* 顧客キーのバッファ状態を取得します。存在しない・壊れている場合は`null`。
|
|
25
|
+
*/
|
|
26
|
+
async get(customerKey) {
|
|
27
|
+
try {
|
|
28
|
+
const stored = await this._kv.get(`${this._prefix}${customerKey}`, "json");
|
|
29
|
+
if (stored && typeof stored === "object") {
|
|
30
|
+
return stored;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// ignore corrupt buffer
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Store the buffer state for the customer key.
|
|
40
|
+
*
|
|
41
|
+
* 顧客キーのバッファ状態を保存します。
|
|
42
|
+
*/
|
|
43
|
+
async put(customerKey, value, ttlSeconds) {
|
|
44
|
+
await this._kv.put(`${this._prefix}${customerKey}`, JSON.stringify(value), {
|
|
45
|
+
expirationTtl: ttlSeconds,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.KVUsageBuffer = KVUsageBuffer;
|
|
50
|
+
//# sourceMappingURL=kv_usage_buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv_usage_buffer.js","sourceRoot":"","sources":["../../../src/lib/meter/kv_usage_buffer.ts"],"names":[],"mappings":";;;AAgCA;;;;GAIG;AACH,MAAa,aAAa;IACtB;;;;OAIG;IACH,YAAY,EAAmB,EAAE,UAA2C,EAAE;QAC1E,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC9C,CAAC;IAEgB,GAAG,CAAkB;IACrB,OAAO,CAAS;IAEjC;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,WAAmB;QACzB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;YAC3E,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,MAAgC,CAAC;YAC5C,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,KAA6B,EAAE,UAAkB;QAC5E,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,WAAW,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACvE,aAAa,EAAE,UAAU;SAC5B,CAAC,CAAC;IACP,CAAC;CACJ;AAzCD,sCAyCC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { StripeUsageBuffer, StripeUsageEventStore } from "./interface";
|
|
2
|
+
import { StripeMeterClient } from "./stripe_meter_client";
|
|
3
|
+
/**
|
|
4
|
+
* Record a usage event and flush to Stripe when the buffer is full or aged.
|
|
5
|
+
*
|
|
6
|
+
* The store (e.g. D1) is the source of truth. The buffer (e.g. KV) only decides
|
|
7
|
+
* flush timing — eventual-consistency races there never affect billing.
|
|
8
|
+
* When a flush fails the buffer is kept so the next request retries immediately;
|
|
9
|
+
* unsent units remain pending in the store and are sent together next time.
|
|
10
|
+
*
|
|
11
|
+
* 使用量イベントを記録し、バッファが満杯または時間経過でStripeへフラッシュします。
|
|
12
|
+
*
|
|
13
|
+
* 正本はストア(例: D1)。バッファ(例: KV)はフラッシュタイミングの判定のみで、
|
|
14
|
+
* 結果整合の競合があっても課金には影響しません。フラッシュ失敗時はバッファを残して
|
|
15
|
+
* 次のリクエストで即再送させます。未送信分はストアに残り、次回まとめて送られます。
|
|
16
|
+
*/
|
|
17
|
+
export declare function recordUsage(options: {
|
|
18
|
+
store: StripeUsageEventStore;
|
|
19
|
+
buffer: StripeUsageBuffer;
|
|
20
|
+
client: StripeMeterClient;
|
|
21
|
+
customerKey: string;
|
|
22
|
+
stripeCustomerId: string | null | undefined;
|
|
23
|
+
endpoint: string;
|
|
24
|
+
units?: number | undefined;
|
|
25
|
+
source?: string | undefined;
|
|
26
|
+
flushUnits?: number | undefined;
|
|
27
|
+
flushMs?: number | undefined;
|
|
28
|
+
bufferTtlSeconds?: number | undefined;
|
|
29
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordUsage = recordUsage;
|
|
4
|
+
const flush_meter_1 = require("./flush_meter");
|
|
5
|
+
/**
|
|
6
|
+
* Record a usage event and flush to Stripe when the buffer is full or aged.
|
|
7
|
+
*
|
|
8
|
+
* The store (e.g. D1) is the source of truth. The buffer (e.g. KV) only decides
|
|
9
|
+
* flush timing — eventual-consistency races there never affect billing.
|
|
10
|
+
* When a flush fails the buffer is kept so the next request retries immediately;
|
|
11
|
+
* unsent units remain pending in the store and are sent together next time.
|
|
12
|
+
*
|
|
13
|
+
* 使用量イベントを記録し、バッファが満杯または時間経過でStripeへフラッシュします。
|
|
14
|
+
*
|
|
15
|
+
* 正本はストア(例: D1)。バッファ(例: KV)はフラッシュタイミングの判定のみで、
|
|
16
|
+
* 結果整合の競合があっても課金には影響しません。フラッシュ失敗時はバッファを残して
|
|
17
|
+
* 次のリクエストで即再送させます。未送信分はストアに残り、次回まとめて送られます。
|
|
18
|
+
*/
|
|
19
|
+
async function recordUsage(options) {
|
|
20
|
+
const units = options.units ?? 1;
|
|
21
|
+
const flushUnits = options.flushUnits ?? 10;
|
|
22
|
+
const flushMs = options.flushMs ?? 60_000;
|
|
23
|
+
const bufferTtlSeconds = options.bufferTtlSeconds ?? 3600;
|
|
24
|
+
try {
|
|
25
|
+
await options.store.insert({
|
|
26
|
+
id: crypto.randomUUID(),
|
|
27
|
+
customerKey: options.customerKey,
|
|
28
|
+
endpoint: options.endpoint,
|
|
29
|
+
units: units,
|
|
30
|
+
source: options.source ?? null,
|
|
31
|
+
createdAt: Date.now(),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.warn("usage insert failed", error);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
let buffer = { units: 0, since: Date.now() };
|
|
39
|
+
try {
|
|
40
|
+
const stored = await options.buffer.get(options.customerKey);
|
|
41
|
+
if (stored && typeof stored === "object") {
|
|
42
|
+
buffer = stored;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// ignore corrupt buffer
|
|
47
|
+
}
|
|
48
|
+
buffer.units += units;
|
|
49
|
+
const aged = Date.now() - buffer.since >= flushMs;
|
|
50
|
+
const full = buffer.units >= flushUnits;
|
|
51
|
+
await options.buffer.put(options.customerKey, buffer, bufferTtlSeconds);
|
|
52
|
+
if (!full && !aged) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
let flushed = false;
|
|
56
|
+
try {
|
|
57
|
+
flushed = await (0, flush_meter_1.flushStripeMeter)({
|
|
58
|
+
store: options.store,
|
|
59
|
+
client: options.client,
|
|
60
|
+
customerKey: options.customerKey,
|
|
61
|
+
stripeCustomerId: options.stripeCustomerId,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.warn("stripe meter flush error", error);
|
|
66
|
+
}
|
|
67
|
+
if (!flushed) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
await options.buffer.put(options.customerKey, { units: 0, since: Date.now() }, bufferTtlSeconds);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=record_usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record_usage.js","sourceRoot":"","sources":["../../../src/lib/meter/record_usage.ts"],"names":[],"mappings":";;AAkBA,kCAoEC;AArFD,+CAAiD;AAGjD;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,WAAW,CAAC,OAYjC;IACG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAE1D,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACvB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;IACX,CAAC;IAED,IAAI,MAAM,GAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACrE,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC;QACpB,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,wBAAwB;IAC5B,CAAC;IACD,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;IACxC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAExE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO;IACX,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACD,OAAO,GAAG,MAAM,IAAA,8BAAgB,EAAC;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC7C,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;IACX,CAAC;IACD,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CACpB,OAAO,CAAC,WAAW,EACnB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAC/B,gBAAgB,CACnB,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
/**
|
|
3
|
+
* Options for [StripeMeterClient].
|
|
4
|
+
*
|
|
5
|
+
* [StripeMeterClient]のオプション。
|
|
6
|
+
*/
|
|
7
|
+
export interface StripeMeterClientOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Stripe secret key. When empty the client is disabled and sends nothing.
|
|
10
|
+
*
|
|
11
|
+
* Stripeのシークレットキー。空の場合クライアントは無効となり何も送信しません。
|
|
12
|
+
*/
|
|
13
|
+
secretKey?: string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Meter event name registered on Stripe (billing meters, basil or later).
|
|
16
|
+
*
|
|
17
|
+
* Stripeに登録したMeterイベント名(billing meters、basil以降)。
|
|
18
|
+
*/
|
|
19
|
+
eventName: string;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch implementation used by the Stripe SDK's fetch HTTP client.
|
|
22
|
+
* Defaults to the global `fetch`. Inject for tests.
|
|
23
|
+
*
|
|
24
|
+
* Stripe SDKのfetch HTTPクライアントが使用するfetch実装。
|
|
25
|
+
* デフォルトはグローバル`fetch`。テスト時に注入します。
|
|
26
|
+
*/
|
|
27
|
+
fetch?: typeof fetch | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Stripe SDK client instance. When specified, `secretKey` / `fetch` are not
|
|
30
|
+
* used to construct a client.
|
|
31
|
+
*
|
|
32
|
+
* Stripe SDKのクライアントインスタンス。指定した場合`secretKey` / `fetch`は
|
|
33
|
+
* クライアント生成に使用されません。
|
|
34
|
+
*/
|
|
35
|
+
stripeClient?: Stripe | undefined;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Client for the Stripe Meter Event API (`/v1/billing/meter_events`).
|
|
39
|
+
*
|
|
40
|
+
* Uses the Stripe SDK with the fetch HTTP client so it works on Cloudflare
|
|
41
|
+
* Workers.
|
|
42
|
+
*
|
|
43
|
+
* Stripe Meter Event API(`/v1/billing/meter_events`)用のクライアント。
|
|
44
|
+
*
|
|
45
|
+
* Cloudflare Workersで動作するようfetch HTTPクライアント付きのStripe SDKを
|
|
46
|
+
* 使用します。
|
|
47
|
+
*/
|
|
48
|
+
export declare class StripeMeterClient {
|
|
49
|
+
/**
|
|
50
|
+
* Client for the Stripe Meter Event API (`/v1/billing/meter_events`).
|
|
51
|
+
*
|
|
52
|
+
* Stripe Meter Event API(`/v1/billing/meter_events`)用のクライアント。
|
|
53
|
+
*/
|
|
54
|
+
constructor(options: StripeMeterClientOptions);
|
|
55
|
+
private readonly _secretKey;
|
|
56
|
+
private readonly _eventName;
|
|
57
|
+
private readonly _fetch;
|
|
58
|
+
private _client;
|
|
59
|
+
/**
|
|
60
|
+
* Whether the client can send meter events.
|
|
61
|
+
*
|
|
62
|
+
* Meterイベントを送信できる状態かどうか。
|
|
63
|
+
*/
|
|
64
|
+
get enabled(): boolean;
|
|
65
|
+
private get client();
|
|
66
|
+
/**
|
|
67
|
+
* Send one meter event. Returns `false` when Stripe responds with an error.
|
|
68
|
+
*
|
|
69
|
+
* Meterイベントを1件送信します。Stripeがエラーを返した場合は`false`を返します。
|
|
70
|
+
*/
|
|
71
|
+
sendMeterEvent(options: {
|
|
72
|
+
stripeCustomerId: string;
|
|
73
|
+
value: number;
|
|
74
|
+
identifier: string;
|
|
75
|
+
}): Promise<boolean>;
|
|
76
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StripeMeterClient = void 0;
|
|
4
|
+
const stripe_client_1 = require("../stripe_client");
|
|
5
|
+
/**
|
|
6
|
+
* Client for the Stripe Meter Event API (`/v1/billing/meter_events`).
|
|
7
|
+
*
|
|
8
|
+
* Uses the Stripe SDK with the fetch HTTP client so it works on Cloudflare
|
|
9
|
+
* Workers.
|
|
10
|
+
*
|
|
11
|
+
* Stripe Meter Event API(`/v1/billing/meter_events`)用のクライアント。
|
|
12
|
+
*
|
|
13
|
+
* Cloudflare Workersで動作するようfetch HTTPクライアント付きのStripe SDKを
|
|
14
|
+
* 使用します。
|
|
15
|
+
*/
|
|
16
|
+
class StripeMeterClient {
|
|
17
|
+
/**
|
|
18
|
+
* Client for the Stripe Meter Event API (`/v1/billing/meter_events`).
|
|
19
|
+
*
|
|
20
|
+
* Stripe Meter Event API(`/v1/billing/meter_events`)用のクライアント。
|
|
21
|
+
*/
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this._secretKey = options.secretKey ?? "";
|
|
24
|
+
this._eventName = options.eventName;
|
|
25
|
+
this._fetch = options.fetch;
|
|
26
|
+
this._client = options.stripeClient;
|
|
27
|
+
}
|
|
28
|
+
_secretKey;
|
|
29
|
+
_eventName;
|
|
30
|
+
_fetch;
|
|
31
|
+
_client;
|
|
32
|
+
/**
|
|
33
|
+
* Whether the client can send meter events.
|
|
34
|
+
*
|
|
35
|
+
* Meterイベントを送信できる状態かどうか。
|
|
36
|
+
*/
|
|
37
|
+
get enabled() {
|
|
38
|
+
return (this._client !== undefined || this._secretKey.length > 0) && this._eventName.length > 0;
|
|
39
|
+
}
|
|
40
|
+
get client() {
|
|
41
|
+
if (!this._client) {
|
|
42
|
+
this._client = (0, stripe_client_1.createStripeClient)({
|
|
43
|
+
secretKey: this._secretKey,
|
|
44
|
+
fetch: this._fetch,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return this._client;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Send one meter event. Returns `false` when Stripe responds with an error.
|
|
51
|
+
*
|
|
52
|
+
* Meterイベントを1件送信します。Stripeがエラーを返した場合は`false`を返します。
|
|
53
|
+
*/
|
|
54
|
+
async sendMeterEvent(options) {
|
|
55
|
+
try {
|
|
56
|
+
await this.client.billing.meterEvents.create({
|
|
57
|
+
event_name: this._eventName,
|
|
58
|
+
identifier: options.identifier,
|
|
59
|
+
payload: {
|
|
60
|
+
stripe_customer_id: options.stripeCustomerId,
|
|
61
|
+
value: String(options.value),
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
68
|
+
console.warn("stripe meter flush failed", message.slice(0, 240));
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.StripeMeterClient = StripeMeterClient;
|
|
74
|
+
//# sourceMappingURL=stripe_meter_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe_meter_client.js","sourceRoot":"","sources":["../../../src/lib/meter/stripe_meter_client.ts"],"names":[],"mappings":";;;AACA,oDAAsD;AAyCtD;;;;;;;;;;GAUG;AACH,MAAa,iBAAiB;IAC1B;;;;OAIG;IACH,YAAY,OAAiC;QACzC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IACxC,CAAC;IAEgB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,MAAM,CAA2B;IAC1C,OAAO,CAAqB;IAEpC;;;;OAIG;IACH,IAAI,OAAO;QACP,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACpG,CAAC;IAED,IAAY,MAAM;QACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,GAAG,IAAA,kCAAkB,EAAC;gBAC9B,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,KAAK,EAAE,IAAI,CAAC,MAAM;aACrB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,OAIpB;QACG,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;gBACzC,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO,EAAE;oBACL,kBAAkB,EAAE,OAAO,CAAC,gBAAgB;oBAC5C,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;iBAC/B;aACJ,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACjE,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ;AA/DD,8CA+DC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
import { Context } from "hono";
|
|
3
|
+
import { WorkersOptions } from "@mathrunet/masamune_cloudflare/dist/lib/src/workers_base";
|
|
4
|
+
import { D1StripePurchaseStoreOptions } from "./purchase/d1_purchase_store";
|
|
5
|
+
import { StripePurchaseStore } from "./purchase/interface";
|
|
6
|
+
/**
|
|
7
|
+
* Email content sent for 3D Secure authentication.
|
|
8
|
+
*
|
|
9
|
+
* 3Dセキュア認証用に送信するメールの内容。
|
|
10
|
+
*/
|
|
11
|
+
export interface StripePurchaseEmail {
|
|
12
|
+
/**
|
|
13
|
+
* Sender's email address.
|
|
14
|
+
*
|
|
15
|
+
* 送信元メールアドレス。
|
|
16
|
+
*/
|
|
17
|
+
from: string;
|
|
18
|
+
/**
|
|
19
|
+
* Email address to be sent to.
|
|
20
|
+
*
|
|
21
|
+
* 送信先メールアドレス。
|
|
22
|
+
*/
|
|
23
|
+
to: string;
|
|
24
|
+
/**
|
|
25
|
+
* Email title.
|
|
26
|
+
*
|
|
27
|
+
* メールタイトル。
|
|
28
|
+
*/
|
|
29
|
+
subject: string;
|
|
30
|
+
/**
|
|
31
|
+
* Email content.
|
|
32
|
+
*
|
|
33
|
+
* メール本文。
|
|
34
|
+
*/
|
|
35
|
+
text: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Options for the Stripe purchase workers.
|
|
39
|
+
*
|
|
40
|
+
* Stripe課金ワーカーのオプション。
|
|
41
|
+
*/
|
|
42
|
+
export interface StripePurchaseWorkersOptions extends WorkersOptions {
|
|
43
|
+
/**
|
|
44
|
+
* Stripe secret key.
|
|
45
|
+
*
|
|
46
|
+
* If not specified, it is resolved from the `PURCHASE_STRIPE_SECRETKEY` environment variable (Workers secret).
|
|
47
|
+
*
|
|
48
|
+
* Stripeのシークレットキー。
|
|
49
|
+
*
|
|
50
|
+
* 指定されていない場合は`PURCHASE_STRIPE_SECRETKEY`環境変数(Workersシークレット)から解決されます。
|
|
51
|
+
*/
|
|
52
|
+
secretKey?: string | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Meter event name registered on Stripe (billing meters, basil or later).
|
|
55
|
+
*
|
|
56
|
+
* If not specified, it is resolved from the `PURCHASE_STRIPE_METER_EVENT_NAME` environment variable.
|
|
57
|
+
*
|
|
58
|
+
* Stripeに登録したMeterイベント名(billing meters、basil以降)。
|
|
59
|
+
*
|
|
60
|
+
* 指定されていない場合は`PURCHASE_STRIPE_METER_EVENT_NAME`環境変数から解決されます。
|
|
61
|
+
*/
|
|
62
|
+
meterEventName?: string | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Signing secret for the main Stripe webhook.
|
|
65
|
+
*
|
|
66
|
+
* If not specified, it is resolved from the `PURCHASE_STRIPE_WEBHOOKSECRET` environment variable (Workers secret).
|
|
67
|
+
*
|
|
68
|
+
* StripeメインWebhookの署名シークレット。
|
|
69
|
+
*
|
|
70
|
+
* 指定されていない場合は`PURCHASE_STRIPE_WEBHOOKSECRET`環境変数(Workersシークレット)から解決されます。
|
|
71
|
+
*/
|
|
72
|
+
webhookSecret?: string | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Signing secret for the Stripe Connect webhook.
|
|
75
|
+
*
|
|
76
|
+
* If not specified, it is resolved from the `PURCHASE_STRIPE_WEBHOOKCONNECTSECRET` environment variable (Workers secret).
|
|
77
|
+
*
|
|
78
|
+
* Stripe Connect用Webhookの署名シークレット。
|
|
79
|
+
*
|
|
80
|
+
* 指定されていない場合は`PURCHASE_STRIPE_WEBHOOKCONNECTSECRET`環境変数(Workersシークレット)から解決されます。
|
|
81
|
+
*/
|
|
82
|
+
webhookConnectSecret?: string | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* Purchase data store factory. Defaults to [D1StripePurchaseStore] on the D1
|
|
85
|
+
* binding named by [d1Binding] (default `DB`).
|
|
86
|
+
*
|
|
87
|
+
* 購入データストアのファクトリ。デフォルトは[d1Binding](既定`DB`)で指定した
|
|
88
|
+
* D1バインディング上の[D1StripePurchaseStore]。
|
|
89
|
+
*/
|
|
90
|
+
store?: ((context: Context) => StripePurchaseStore) | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Name of the D1 binding used by the default store. Defaults to `DB`.
|
|
93
|
+
*
|
|
94
|
+
* デフォルトストアが使用するD1バインディング名。デフォルトは`DB`。
|
|
95
|
+
*/
|
|
96
|
+
d1Binding?: string | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Table name options for the default [D1StripePurchaseStore].
|
|
99
|
+
*
|
|
100
|
+
* デフォルトの[D1StripePurchaseStore]のテーブル名オプション。
|
|
101
|
+
*/
|
|
102
|
+
tables?: D1StripePurchaseStoreOptions | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Resolve the email address of an application user (parity with
|
|
105
|
+
* `admin.auth().getUser()` in the Firebase implementation). When not
|
|
106
|
+
* specified, the `email` field of the stored user document and the billing
|
|
107
|
+
* details of the default payment method are used as fallbacks.
|
|
108
|
+
*
|
|
109
|
+
* アプリケーションユーザーのメールアドレスを解決します(Firebase実装の
|
|
110
|
+
* `admin.auth().getUser()`相当)。未指定の場合は保存済みユーザードキュメントの
|
|
111
|
+
* `email`フィールドとデフォルト支払い方法のbilling detailsをフォールバックとして
|
|
112
|
+
* 使用します。
|
|
113
|
+
*/
|
|
114
|
+
resolveUserEmail?: ((context: Context, userId: string) => Promise<string | null | undefined>) | undefined;
|
|
115
|
+
/**
|
|
116
|
+
* Send an email for 3D Secure authentication. When not specified, the
|
|
117
|
+
* provider resolved from `PURCHASE_STRIPE_EMAILPROVIDER` (default
|
|
118
|
+
* `sendgrid`, using the `MAIL_SENDGRID_APIKEY` Workers secret) is used.
|
|
119
|
+
*
|
|
120
|
+
* 3Dセキュア認証用のメールを送信します。未指定の場合は
|
|
121
|
+
* `PURCHASE_STRIPE_EMAILPROVIDER`(既定`sendgrid`、`MAIL_SENDGRID_APIKEY`の
|
|
122
|
+
* Workersシークレットを使用)から解決したプロバイダーを使用します。
|
|
123
|
+
*/
|
|
124
|
+
sendEmail?: ((context: Context, email: StripePurchaseEmail) => Promise<void>) | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* Stripe SDK client factory. Defaults to [createStripeClient] with the
|
|
127
|
+
* resolved secret key. Inject for tests.
|
|
128
|
+
*
|
|
129
|
+
* Stripe SDKクライアントのファクトリ。デフォルトは解決したシークレットキー
|
|
130
|
+
* を用いた[createStripeClient]。テスト時に注入します。
|
|
131
|
+
*/
|
|
132
|
+
stripeClient?: ((context: Context, secretKey: string) => Stripe) | undefined;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Resolve the Stripe SDK client from options and the resolved secret key.
|
|
136
|
+
*
|
|
137
|
+
* オプションと解決済みシークレットキーからStripe SDKクライアントを解決します。
|
|
138
|
+
*/
|
|
139
|
+
export declare function resolveStripeClient(context: Context, options: StripePurchaseWorkersOptions, secretKey: string): Stripe;
|
|
140
|
+
/**
|
|
141
|
+
* Resolve the Stripe secret key from options and `context.env`.
|
|
142
|
+
*
|
|
143
|
+
* オプションと`context.env`からStripeのシークレットキーを解決します。
|
|
144
|
+
*/
|
|
145
|
+
export declare function resolveStripeSecretKey(context: Context, options: StripePurchaseWorkersOptions): string;
|
|
146
|
+
/**
|
|
147
|
+
* Resolve the Stripe meter event name from options and `context.env`.
|
|
148
|
+
*
|
|
149
|
+
* オプションと`context.env`からStripeのMeterイベント名を解決します。
|
|
150
|
+
*/
|
|
151
|
+
export declare function resolveStripeMeterEventName(context: Context, options: StripePurchaseWorkersOptions): string | undefined;
|
|
152
|
+
/**
|
|
153
|
+
* Resolve the main webhook signing secret from options and `context.env`.
|
|
154
|
+
*
|
|
155
|
+
* オプションと`context.env`からメインWebhookの署名シークレットを解決します。
|
|
156
|
+
*/
|
|
157
|
+
export declare function resolveStripeWebhookSecret(context: Context, options: StripePurchaseWorkersOptions): string;
|
|
158
|
+
/**
|
|
159
|
+
* Resolve the Connect webhook signing secret from options and `context.env`.
|
|
160
|
+
*
|
|
161
|
+
* オプションと`context.env`からConnect用Webhookの署名シークレットを解決します。
|
|
162
|
+
*/
|
|
163
|
+
export declare function resolveStripeWebhookConnectSecret(context: Context, options: StripePurchaseWorkersOptions): string;
|
|
164
|
+
/**
|
|
165
|
+
* Resolve the purchase data store from options and `context.env`.
|
|
166
|
+
*
|
|
167
|
+
* オプションと`context.env`から購入データストアを解決します。
|
|
168
|
+
*/
|
|
169
|
+
export declare function resolveStripePurchaseStore(context: Context, options: StripePurchaseWorkersOptions): StripePurchaseStore;
|
|
170
|
+
/**
|
|
171
|
+
* Resolve the email sender from options and `context.env`.
|
|
172
|
+
*
|
|
173
|
+
* Returns `null` when no provider is configured.
|
|
174
|
+
*
|
|
175
|
+
* オプションと`context.env`からメール送信手段を解決します。
|
|
176
|
+
*
|
|
177
|
+
* プロバイダーが未設定の場合は`null`を返します。
|
|
178
|
+
*/
|
|
179
|
+
export declare function resolveStripeEmailSender(context: Context, options: StripePurchaseWorkersOptions): ((email: StripePurchaseEmail) => Promise<void>) | null;
|