@happyvertical/payments 0.105.3 → 0.105.5

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 CHANGED
@@ -34,13 +34,152 @@ import { StripeAdapter } from '@happyvertical/payments/stripe';
34
34
  Greenfield client for billing integrations — see
35
35
  [BTCPay Greenfield client](#btcpay-greenfield-client).
36
36
  - `StripeAdapter`: Stripe Checkout URL settlement, webhook verification,
37
- refunds, Stripe Connect transfers, saved payment methods / card-on-file
37
+ refunds, Stripe Connect Standard direct charges, Connect onboarding and
38
+ account-routed Connect webhooks, transfers, saved payment methods / card-on-file
38
39
  (`createSetupSession` / `getSetupResult`), and the manual-capture card
39
40
  lifecycle (`authorizePayment` / `capturePayment` / `voidPayment`).
40
41
 
41
42
  The package does not depend on SMRT or a database. Consumers own quote
42
43
  persistence, webhook routing, and operational policy.
43
44
 
45
+ ### Stripe Connect Standard direct charges
46
+
47
+ Pass `stripeAccount` to a `StripeAdapter` for a fixed connected-account scope,
48
+ or to an individual Checkout, PaymentIntent, refund, status, or setup
49
+ call. The adapter sends it as Stripe's `Stripe-Account` header. With no account
50
+ configured or supplied, requests retain platform-account behavior.
51
+
52
+ ```ts
53
+ const workerCoopPayments = new StripeAdapter({
54
+ secretKey: process.env.STRIPE_SECRET_KEY!,
55
+ stripeAccount: 'acct_worker_coop',
56
+ successUrl,
57
+ cancelUrl,
58
+ });
59
+
60
+ await workerCoopPayments.createPaymentOption({
61
+ quoteId: 'project-revenue-42',
62
+ amount: 10_000,
63
+ currency: 'USD',
64
+ expiresAt,
65
+ applicationFeeAmount: 500,
66
+ });
67
+
68
+ await workerCoopPayments.refundPayment({
69
+ paymentId: 'pi_123',
70
+ amount: 10_000,
71
+ refundApplicationFee: true,
72
+ });
73
+ ```
74
+
75
+ Amounts, including `applicationFeeAmount`, are integer minor units. The fee is
76
+ collected by Stripe from the direct charge; downstream accounting must offset
77
+ the matching platform allocation so it is never a second payable. The SDK only
78
+ propagates provider flags and account scope; it does not calculate allocations
79
+ or post accounting entries. `refundApplicationFee` and `reverseTransfer` are
80
+ sent only when explicitly requested.
81
+
82
+ ### Stripe Connect onboarding and webhooks
83
+
84
+ Connect onboarding uses **Standard** accounts: the account holder (for example
85
+ a co-op tenant) owns its Stripe relationship and dashboard, and the platform
86
+ only connects to it. Onboarding and capability reads are platform calls; they
87
+ never send `Stripe-Account`, even on an account-scoped adapter.
88
+
89
+ ```ts
90
+ const platform = new StripeAdapter({
91
+ secretKey: process.env.STRIPE_SECRET_KEY!,
92
+ webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!, // platform endpoint
93
+ connectWebhookSecret: process.env.STRIPE_CONNECT_WEBHOOK_SECRET!, // Connect endpoint
94
+ });
95
+
96
+ // 1. Create the Standard account once and persist accountId with the tenant.
97
+ const account = await platform.createStandardAccount({
98
+ country: 'CA',
99
+ email: treasurerEmail,
100
+ metadata: { tenant: tenantId },
101
+ idempotencyKey: `connect-account:${tenantId}`,
102
+ });
103
+
104
+ // 2. Send the account holder through Stripe-hosted onboarding. Links are
105
+ // single use and short lived; refreshUrl should mint a new one.
106
+ const link = await platform.createOnboardingLink(
107
+ account.accountId,
108
+ 'https://app.example/connect/return',
109
+ 'https://app.example/connect/refresh',
110
+ );
111
+
112
+ // 3. On return (which does not mean onboarding finished), and on every
113
+ // account.updated webhook, read the capability state.
114
+ const state = await platform.getAccountCapabilities(account.accountId);
115
+ state.chargesEnabled; // charges_enabled
116
+ state.detailsSubmitted; // details_submitted
117
+ state.payoutsEnabled; // payouts_enabled
118
+ state.capabilities; // { card_payments: 'active', ... }
119
+ state.requirements; // { currentlyDue, eventuallyDue, pastDue, disabledReason }
120
+ ```
121
+
122
+ Treat the onboarding `url` as a bearer secret: redirect to it, but do not log
123
+ or store it.
124
+
125
+ Stripe delivers connected-account events to a separate **Connect** webhook
126
+ endpoint signed with its own secret. Route that endpoint through
127
+ `resolveConnectWebhookEvent`, which verifies the signature before reading the
128
+ payload, requires the event's `account`, and then calls your resolver to map
129
+ the account to its owner. An account the resolver does not recognize (it
130
+ returns `undefined` or `null`) is rejected with `PaymentNotOwnedError`; there
131
+ is no fallback to the platform account. An account-scoped adapter
132
+ (`stripeAccount` set) also rejects events for any other account.
133
+
134
+ ```ts
135
+ // POST /webhooks/stripe/connect
136
+ const { event, account, owner } = await platform.resolveConnectWebhookEvent(
137
+ rawBody,
138
+ request.headers.get('Stripe-Signature') ?? undefined,
139
+ { resolveAccount: (account) => tenants.findByStripeAccount(account) },
140
+ );
141
+
142
+ if (event.connect?.type === 'account.updated') {
143
+ await owner.saveStripeCapabilities(event.connect.account);
144
+ } else if (event.quoteId && event.status === 'confirmed') {
145
+ // The connected account chose quoteId; settle only the owner's own quote.
146
+ const quote = await owner.findQuote(event.quoteId);
147
+ if (!quote) throw new Error('quote does not belong to this account');
148
+ await quote.markPaid(event);
149
+ }
150
+ ```
151
+
152
+ **Bind quotes to the account before settling.** A connected account controls
153
+ the Checkout Sessions and PaymentIntents it creates, so the `quoteId` on a
154
+ Connect event is whatever that account chose, including another tenant's quote
155
+ id. Resolving `account` proves only who sent the event. Before marking a quote
156
+ paid, check that `event.quoteId` belongs to the resolved `owner` (reject the
157
+ event in `resolveAccount`, which receives it, or check it before settling), and
158
+ compare amount and currency with the stored quote.
159
+
160
+ `parseConnectWebhookEvent` performs the same verification without the
161
+ resolver and returns a `StripeConnectWebhookEvent` whose `account` is always
162
+ set. The platform endpoint (`parseWebhookEvent`) rejects any event carrying a
163
+ connected `account`, so a misrouted Connect delivery fails closed instead of
164
+ being processed as a platform payment.
165
+
166
+ Typed Connect payloads arrive on `event.connect`:
167
+
168
+ - `account.updated` (Connect endpoint): `{ type, account }` with the same
169
+ `StripeConnectAccountStatus` shape as `getAccountCapabilities`.
170
+ - `application_fee.created` / `application_fee.refunded` (platform endpoint,
171
+ because the fee belongs to the platform): `{ type, applicationFee }` with
172
+ `id`, `account` (the connected account charged), `amount`, `amountRefunded`,
173
+ `currency`, `refunded`, and `charge`. Route them with
174
+ `resolveConnectWebhookEvent(rawBody, signature, { endpoint: 'platform',
175
+ resolveAccount })`, which uses the fee's account and rejects platform events
176
+ that have none.
177
+
178
+ These events report `status: 'processing'`; they never mark a customer payment
179
+ refunded or failed. Duplicate detection records an event only after it
180
+ resolves, so a delivery rejected for an unmapped account is not reported as a
181
+ duplicate when Stripe retries it.
182
+
44
183
  ### BTCPay Greenfield client
45
184
 
46
185
  `BtcpayClient` is a stateless client for one BTCPay Server store (Greenfield
@@ -213,6 +352,11 @@ Webhook parsing now requires configured secrets. Callers that previously parsed
213
352
  Stripe or BTCPay webhooks without `webhookSecret` must configure the provider
214
353
  secret or handle trusted test fixtures outside `parseWebhookEvent`.
215
354
 
355
+ `StripeAdapter.parseWebhookEvent` now rejects events that carry a connected
356
+ `account` with `PaymentVerificationError`. Stripe sends those only to Connect
357
+ endpoints; verify them with `connectWebhookSecret` through
358
+ `parseConnectWebhookEvent` or `resolveConnectWebhookEvent`.
359
+
216
360
  Webhook parsing is fail-closed. `StripeAdapter.parseWebhookEvent` and
217
361
  `BtcAdapter.parseWebhookEvent` require a configured `webhookSecret` and a valid
218
362
  signature. BTCPay webhook payloads must include `deliveryId`; the exported
@@ -1,5 +1,5 @@
1
- import { a as PaymentVerificationError, r as PaymentProviderError, t as PaymentConfigurationError } from "../chunks/errors-feZrwnTy.js";
2
- import { _ as normalizeUrlString, b as rememberPaymentOption, d as normalizeFutureDate, f as normalizeMaxStoredPaymentOptions, h as normalizePositiveMinorUnitAmount, i as decimalToMinorUnitAmount, l as normalizeCurrency, m as normalizeNonEmptyString, n as currencyMinorUnitDecimals, o as getFetch, p as normalizeMinorUnitAmount, r as decimalToAtomicUnits, s as minorUnitsToDecimal, u as normalizeDate, v as pollPaymentStatus, y as readJsonResponse } from "../chunks/shared-DVl6UzD9.js";
1
+ import { i as PaymentProviderError, o as PaymentVerificationError, t as PaymentConfigurationError } from "../chunks/errors-zSmk_AYY.js";
2
+ import { _ as normalizeUrlString, b as rememberPaymentOption, d as normalizeFutureDate, f as normalizeMaxStoredPaymentOptions, h as normalizePositiveMinorUnitAmount, i as decimalToMinorUnitAmount, l as normalizeCurrency, m as normalizeNonEmptyString, n as currencyMinorUnitDecimals, o as getFetch, p as normalizeMinorUnitAmount, r as decimalToAtomicUnits, s as minorUnitsToDecimal, u as normalizeDate, v as pollPaymentStatus, y as readJsonResponse } from "../chunks/shared-oBgOhLsa.js";
3
3
  import { createHash } from "node:crypto";
4
4
  //#region src/adapters/base-usdc.ts
5
5
  var BASE_USDC_BACKEND_ID = "base-usdc";
@@ -1,5 +1,5 @@
1
- import { r as PaymentProviderError, t as PaymentConfigurationError } from "../chunks/errors-feZrwnTy.js";
2
- import { _ as normalizeUrlString, b as rememberPaymentOption, c as normalizeAmount, d as normalizeFutureDate, f as normalizeMaxStoredPaymentOptions, g as normalizePositivePaymentAmount, h as normalizePositiveMinorUnitAmount, i as decimalToMinorUnitAmount, m as normalizeNonEmptyString, n as currencyMinorUnitDecimals, o as getFetch, p as normalizeMinorUnitAmount, s as minorUnitsToDecimal, t as applyExpiryToPendingStatus, u as normalizeDate, v as pollPaymentStatus, y as readJsonResponse } from "../chunks/shared-DVl6UzD9.js";
1
+ import { i as PaymentProviderError, t as PaymentConfigurationError } from "../chunks/errors-zSmk_AYY.js";
2
+ import { _ as normalizeUrlString, b as rememberPaymentOption, c as normalizeAmount, d as normalizeFutureDate, f as normalizeMaxStoredPaymentOptions, g as normalizePositivePaymentAmount, h as normalizePositiveMinorUnitAmount, i as decimalToMinorUnitAmount, m as normalizeNonEmptyString, n as currencyMinorUnitDecimals, o as getFetch, p as normalizeMinorUnitAmount, s as minorUnitsToDecimal, t as applyExpiryToPendingStatus, u as normalizeDate, v as pollPaymentStatus, y as readJsonResponse } from "../chunks/shared-oBgOhLsa.js";
3
3
  import { createHmac, timingSafeEqual } from "node:crypto";
4
4
  //#region src/adapters/btc.ts
5
5
  var BTC_BACKEND_ID = "btc";
@@ -1,6 +1,6 @@
1
- import { a as PaymentVerificationError, r as PaymentProviderError, t as PaymentConfigurationError } from "../chunks/errors-feZrwnTy.js";
2
- import { t as CryptoCheckoutNotOwnedError } from "../chunks/checkout-gateway-DG-LY0oG.js";
3
- import { n as currencyMinorUnitDecimals, o as getFetch } from "../chunks/shared-DVl6UzD9.js";
1
+ import { i as PaymentProviderError, o as PaymentVerificationError, t as PaymentConfigurationError } from "../chunks/errors-zSmk_AYY.js";
2
+ import { t as CryptoCheckoutNotOwnedError } from "../chunks/checkout-gateway-Bb8UEwK8.js";
3
+ import { n as currencyMinorUnitDecimals, o as getFetch } from "../chunks/shared-oBgOhLsa.js";
4
4
  import { createHmac, timingSafeEqual } from "node:crypto";
5
5
  //#region src/adapters/btcpay-client.ts
6
6
  /**
@@ -12,9 +12,48 @@ export interface StripeAdapterOptions {
12
12
  cancelUrl?: string;
13
13
  checkoutMode?: string;
14
14
  webhookSecret?: string;
15
+ /**
16
+ * Signing secret of the Stripe Connect webhook endpoint. Stripe signs
17
+ * connected-account events with a different secret from the platform
18
+ * endpoint; see {@link StripeAdapter.parseConnectWebhookEvent}.
19
+ */
20
+ connectWebhookSecret?: string;
15
21
  pollIntervalMs?: number;
16
22
  maxStoredPaymentOptions?: number;
17
23
  maxStoredWebhookEventIds?: number;
24
+ /** Default Stripe Connect account for this adapter's provider requests. */
25
+ stripeAccount?: string;
26
+ }
27
+ /** Stripe Connect account scope for a request; omit it for the platform. */
28
+ export interface StripeAccountScope {
29
+ stripeAccount?: string;
30
+ }
31
+ export interface StripeCreatePaymentOptionInput extends CreatePaymentOptionInput, StripeAccountScope {
32
+ /** Stripe application fee in integer minor units for this direct charge. */
33
+ applicationFeeAmount?: number;
34
+ }
35
+ export interface StripePaymentStatusContext extends PaymentStatusContext, StripeAccountScope {
36
+ }
37
+ export interface StripeRefundPaymentInput extends RefundPaymentInput, StripeAccountScope {
38
+ /** Refund a Stripe application fee collected with the charge. */
39
+ refundApplicationFee?: boolean;
40
+ /** Reverse a destination transfer when the provider supports one. */
41
+ reverseTransfer?: boolean;
42
+ }
43
+ export interface StripeAuthorizePaymentInput extends AuthorizePaymentInput, StripeAccountScope {
44
+ /** Stripe application fee in integer minor units for this PaymentIntent. */
45
+ applicationFeeAmount?: number;
46
+ }
47
+ export interface StripeCapturePaymentInput extends CapturePaymentInput, StripeAccountScope {
48
+ }
49
+ export interface StripeVoidPaymentInput extends VoidPaymentInput, StripeAccountScope {
50
+ }
51
+ export interface StripeCreateSetupSessionInput extends CreateSetupSessionInput, StripeAccountScope {
52
+ }
53
+ export interface StripeGetSetupResultInput extends GetSetupResultInput, StripeAccountScope {
54
+ }
55
+ export interface StripeWatchPaymentInput extends Omit<WatchPaymentInput, 'statusContext'> {
56
+ statusContext?: StripePaymentStatusContext;
18
57
  }
19
58
  export interface StripeWebhookEvent extends PaymentWebhookEvent {
20
59
  id: string;
@@ -22,8 +61,106 @@ export interface StripeWebhookEvent extends PaymentWebhookEvent {
22
61
  status: PaymentStatus;
23
62
  quoteId?: string;
24
63
  providerPaymentId?: string;
64
+ /**
65
+ * Connected account (`acct_...`) the event originated from. Set only on
66
+ * events verified through {@link StripeAdapter.parseConnectWebhookEvent};
67
+ * platform-endpoint events never carry it.
68
+ */
69
+ account?: string;
70
+ /** Typed Connect payload for `account.updated` and `application_fee.*`. */
71
+ connect?: StripeConnectEventDetail;
25
72
  raw: unknown;
26
73
  }
74
+ /** A Connect endpoint event: always scoped to a connected account. */
75
+ export interface StripeConnectWebhookEvent extends StripeWebhookEvent {
76
+ account: string;
77
+ }
78
+ export type StripeConnectEventDetail = {
79
+ type: 'account.updated';
80
+ account: StripeConnectAccountStatus;
81
+ } | {
82
+ type: 'application_fee.created' | 'application_fee.refunded';
83
+ applicationFee: StripeApplicationFee;
84
+ };
85
+ /** Connected account onboarding and capability state. */
86
+ export interface StripeConnectAccountStatus {
87
+ accountId: string;
88
+ /** Stripe account type (`standard`, `express`, `custom`) when reported. */
89
+ type?: string;
90
+ /** Stripe `charges_enabled`. */
91
+ chargesEnabled: boolean;
92
+ /** Stripe `details_submitted`. */
93
+ detailsSubmitted: boolean;
94
+ /** Stripe `payouts_enabled`. */
95
+ payoutsEnabled: boolean;
96
+ /** Per-capability state, e.g. `{ card_payments: 'active' }`. */
97
+ capabilities: Record<string, string>;
98
+ requirements: {
99
+ currentlyDue: string[];
100
+ eventuallyDue: string[];
101
+ pastDue: string[];
102
+ disabledReason?: string;
103
+ };
104
+ country?: string;
105
+ defaultCurrency?: string;
106
+ raw: unknown;
107
+ }
108
+ export interface StripeApplicationFee {
109
+ id: string;
110
+ /** Connected account the fee was collected from. */
111
+ account?: string;
112
+ /** Fee amount in integer minor units. */
113
+ amount?: number;
114
+ /** Refunded portion in integer minor units. */
115
+ amountRefunded?: number;
116
+ currency?: string;
117
+ refunded: boolean;
118
+ charge?: string;
119
+ livemode?: boolean;
120
+ raw: unknown;
121
+ }
122
+ export interface StripeCreateStandardAccountInput {
123
+ /** Two-letter ISO country code of the account holder. */
124
+ country?: string;
125
+ /** Prefills the account holder's email in Stripe onboarding. */
126
+ email?: string;
127
+ businessType?: 'individual' | 'company' | 'non_profit' | 'government_entity';
128
+ metadata?: Record<string, string | number | boolean | null | undefined>;
129
+ idempotencyKey?: string;
130
+ }
131
+ export interface StripeOnboardingLink {
132
+ /** Single-use Stripe-hosted onboarding URL; treat it as a bearer secret. */
133
+ url: string;
134
+ expiresAt?: Date;
135
+ raw: unknown;
136
+ }
137
+ export interface StripeCreateOnboardingLinkOptions {
138
+ /** Which requirements to collect up front; Stripe defaults to `currently_due`. */
139
+ collect?: 'currently_due' | 'eventually_due';
140
+ idempotencyKey?: string;
141
+ }
142
+ /**
143
+ * Host mapping from a connected account to its owner. Return `undefined` or
144
+ * `null` for an account the host does not recognize; the event is then
145
+ * rejected with {@link PaymentNotOwnedError}.
146
+ */
147
+ export type StripeConnectAccountResolver<TOwner> = (account: string, event: StripeWebhookEvent) => TOwner | null | undefined | Promise<TOwner | null | undefined>;
148
+ export interface StripeResolveConnectWebhookOptions<TOwner> {
149
+ resolveAccount: StripeConnectAccountResolver<TOwner>;
150
+ /**
151
+ * Endpoint the delivery arrived on. `connect` (default) verifies with
152
+ * `connectWebhookSecret` and routes by the event's `account`. `platform`
153
+ * verifies with `webhookSecret` and routes `application_fee.*` events by the
154
+ * fee's connected account; other platform events are rejected.
155
+ */
156
+ endpoint?: 'connect' | 'platform';
157
+ }
158
+ export interface StripeResolvedConnectWebhookEvent<TOwner> {
159
+ event: StripeWebhookEvent;
160
+ /** Connected account the event was routed by. */
161
+ account: string;
162
+ owner: TOwner;
163
+ }
27
164
  export declare class StripeAdapter implements PaymentBackend {
28
165
  private readonly options;
29
166
  readonly capabilities: PaymentBackendCapabilities;
@@ -35,25 +172,81 @@ export declare class StripeAdapter implements PaymentBackend {
35
172
  private readonly supportedCurrencies;
36
173
  private readonly checkoutMode;
37
174
  private readonly webhookSecret;
175
+ private readonly connectWebhookSecret;
176
+ private readonly stripeAccount;
38
177
  private readonly maxStoredPaymentOptions;
39
178
  private readonly maxStoredWebhookEventIds;
40
179
  private readonly optionsByQuote;
41
180
  private readonly seenWebhookEventIds;
42
181
  constructor(options: StripeAdapterOptions);
43
- createPaymentOption(input: CreatePaymentOptionInput): Promise<PaymentOption>;
44
- watchPayment(input: WatchPaymentInput): AsyncIterable<PaymentEvent>;
45
- getStatus(quoteId: string, payTo: string, context?: PaymentStatusContext): Promise<PaymentStatusResult>;
182
+ createPaymentOption(input: StripeCreatePaymentOptionInput): Promise<PaymentOption>;
183
+ watchPayment(input: StripeWatchPaymentInput): AsyncIterable<PaymentEvent>;
184
+ getStatus(quoteId: string, payTo: string, context?: StripePaymentStatusContext): Promise<PaymentStatusResult>;
46
185
  sendPayout(input: SendPayoutInput): Promise<PayoutResult>;
47
- refundPayment(input: RefundPaymentInput): Promise<RefundResult>;
48
- authorizePayment(input: AuthorizePaymentInput): Promise<AuthorizationResult>;
49
- capturePayment(input: CapturePaymentInput): Promise<CaptureResult>;
50
- voidPayment(input: VoidPaymentInput): Promise<VoidResult>;
51
- createSetupSession(input: CreateSetupSessionInput): Promise<SetupSession>;
52
- getSetupResult(input: GetSetupResultInput): Promise<SavedPaymentMethod>;
186
+ refundPayment(input: StripeRefundPaymentInput): Promise<RefundResult>;
187
+ authorizePayment(input: StripeAuthorizePaymentInput): Promise<AuthorizationResult>;
188
+ capturePayment(input: StripeCapturePaymentInput): Promise<CaptureResult>;
189
+ voidPayment(input: StripeVoidPaymentInput): Promise<VoidResult>;
190
+ createSetupSession(input: StripeCreateSetupSessionInput): Promise<SetupSession>;
191
+ getSetupResult(input: StripeGetSetupResultInput): Promise<SavedPaymentMethod>;
192
+ /**
193
+ * Verify and parse a delivery to the platform webhook endpoint. Events that
194
+ * carry a connected `account` are rejected: they belong to the Connect
195
+ * endpoint and must never be processed as platform-account events.
196
+ */
53
197
  parseWebhookEvent(payload: string, signature?: string): StripeWebhookEvent;
198
+ /**
199
+ * Verify a Stripe Connect endpoint delivery with `connectWebhookSecret`,
200
+ * then parse it. The signature is checked before the payload is parsed, and
201
+ * an event without a connected `account` is rejected. When this adapter is
202
+ * scoped to a `stripeAccount`, events for any other account are rejected.
203
+ * The payload, including `quoteId`, is controlled by the connected account:
204
+ * bind `quoteId` to `account` before acting on it.
205
+ */
206
+ parseConnectWebhookEvent(payload: string, signature?: string): StripeConnectWebhookEvent;
207
+ /**
208
+ * Verify a webhook delivery, then map its connected account to an owner
209
+ * (for example a tenant) with the host's resolver. An account the resolver
210
+ * does not recognize is rejected with {@link PaymentNotOwnedError}; there is
211
+ * no fallback to the platform account. The event is recorded for duplicate
212
+ * detection only after it resolves, so a retried delivery that failed to
213
+ * resolve is not reported as a duplicate.
214
+ *
215
+ * Security: a connected account controls the objects it creates, so a
216
+ * Connect event's `quoteId` (and every other payload field) is chosen by
217
+ * that account. Resolving the account proves only who sent the event. The
218
+ * host must check that `event.quoteId` belongs to the resolved owner (for
219
+ * example inside `resolveAccount`, which receives the event, or before
220
+ * settling) and must never settle another owner's quote from it.
221
+ */
222
+ resolveConnectWebhookEvent<TOwner>(payload: string, signature: string | undefined, options: StripeResolveConnectWebhookOptions<TOwner>): Promise<StripeResolvedConnectWebhookEvent<TOwner>>;
223
+ /**
224
+ * Create a Stripe Connect **Standard** account. The account holder owns the
225
+ * Stripe relationship and dashboard; the platform only connects to it.
226
+ * Always issued on the platform account, never on a connected account.
227
+ */
228
+ createStandardAccount(input?: StripeCreateStandardAccountInput): Promise<StripeConnectAccountStatus>;
229
+ /**
230
+ * Create a single-use Account Link that sends the account holder through
231
+ * Stripe-hosted onboarding. `refreshUrl` is visited when the link expires or
232
+ * is reused, and should mint a new link; `returnUrl` does not mean
233
+ * onboarding finished, so read {@link getAccountCapabilities} afterwards.
234
+ */
235
+ createOnboardingLink(accountId: string, returnUrl: string, refreshUrl: string, options?: StripeCreateOnboardingLinkOptions): Promise<StripeOnboardingLink>;
236
+ /**
237
+ * Read a connected account's onboarding and capability state
238
+ * (`charges_enabled`, `details_submitted`, `payouts_enabled`, per-capability
239
+ * status, and outstanding requirements).
240
+ */
241
+ getAccountCapabilities(accountId: string): Promise<StripeConnectAccountStatus>;
242
+ private verifyWebhookEvent;
243
+ private recordWebhookEvent;
244
+ private assertAdapterAccount;
54
245
  private stripeRequest;
55
246
  private assertSupportedCurrency;
56
247
  private resolveStripeRefundReferenceParam;
248
+ private resolveStripeAccount;
249
+ private findStoredOptionBySessionId;
57
250
  }
58
251
  export declare function verifyStripeWebhookSignature(payload: string, signatureHeader: string, secret: string, toleranceSeconds?: number): void;
59
252
  //# sourceMappingURL=stripe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/adapters/stripe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/adapters/stripe.ts"],"names":[],"mappings":"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"}