Post setup intents intent

Updates a SetupIntent object.

Script stripe Verified

by hugo697 ยท 10/30/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 368 days ago
1
type Stripe = {
2
  token: string;
3
};
4
/**
5
 * Post setup intents intent
6
 * Updates a SetupIntent object.
7
 */
8
export async function main(
9
  auth: Stripe,
10
  intent: string,
11
  body: {
12
    attach_to_self?: boolean;
13
    customer?: string;
14
    description?: string;
15
    expand?: string[];
16
    flow_directions?: ("inbound" | "outbound")[];
17
    metadata?: { [k: string]: string } | "";
18
    payment_method?: string;
19
    payment_method_configuration?: string;
20
    payment_method_data?: {
21
      acss_debit?: {
22
        account_number: string;
23
        institution_number: string;
24
        transit_number: string;
25
        [k: string]: unknown;
26
      };
27
      affirm?: { [k: string]: unknown };
28
      afterpay_clearpay?: { [k: string]: unknown };
29
      alipay?: { [k: string]: unknown };
30
      au_becs_debit?: {
31
        account_number: string;
32
        bsb_number: string;
33
        [k: string]: unknown;
34
      };
35
      bacs_debit?: {
36
        account_number?: string;
37
        sort_code?: string;
38
        [k: string]: unknown;
39
      };
40
      bancontact?: { [k: string]: unknown };
41
      billing_details?: {
42
        address?:
43
          | {
44
              city?: string;
45
              country?: string;
46
              line1?: string;
47
              line2?: string;
48
              postal_code?: string;
49
              state?: string;
50
              [k: string]: unknown;
51
            }
52
          | "";
53
        email?: string | "";
54
        name?: string | "";
55
        phone?: string | "";
56
        [k: string]: unknown;
57
      };
58
      blik?: { [k: string]: unknown };
59
      boleto?: { tax_id: string; [k: string]: unknown };
60
      cashapp?: { [k: string]: unknown };
61
      customer_balance?: { [k: string]: unknown };
62
      eps?: {
63
        bank?:
64
          | "arzte_und_apotheker_bank"
65
          | "austrian_anadi_bank_ag"
66
          | "bank_austria"
67
          | "bankhaus_carl_spangler"
68
          | "bankhaus_schelhammer_und_schattera_ag"
69
          | "bawag_psk_ag"
70
          | "bks_bank_ag"
71
          | "brull_kallmus_bank_ag"
72
          | "btv_vier_lander_bank"
73
          | "capital_bank_grawe_gruppe_ag"
74
          | "deutsche_bank_ag"
75
          | "dolomitenbank"
76
          | "easybank_ag"
77
          | "erste_bank_und_sparkassen"
78
          | "hypo_alpeadriabank_international_ag"
79
          | "hypo_bank_burgenland_aktiengesellschaft"
80
          | "hypo_noe_lb_fur_niederosterreich_u_wien"
81
          | "hypo_oberosterreich_salzburg_steiermark"
82
          | "hypo_tirol_bank_ag"
83
          | "hypo_vorarlberg_bank_ag"
84
          | "marchfelder_bank"
85
          | "oberbank_ag"
86
          | "raiffeisen_bankengruppe_osterreich"
87
          | "schoellerbank_ag"
88
          | "sparda_bank_wien"
89
          | "volksbank_gruppe"
90
          | "volkskreditbank_ag"
91
          | "vr_bank_braunau";
92
        [k: string]: unknown;
93
      };
94
      fpx?: {
95
        bank:
96
          | "affin_bank"
97
          | "agrobank"
98
          | "alliance_bank"
99
          | "ambank"
100
          | "bank_islam"
101
          | "bank_muamalat"
102
          | "bank_of_china"
103
          | "bank_rakyat"
104
          | "bsn"
105
          | "cimb"
106
          | "deutsche_bank"
107
          | "hong_leong_bank"
108
          | "hsbc"
109
          | "kfh"
110
          | "maybank2e"
111
          | "maybank2u"
112
          | "ocbc"
113
          | "pb_enterprise"
114
          | "public_bank"
115
          | "rhb"
116
          | "standard_chartered"
117
          | "uob";
118
        [k: string]: unknown;
119
      };
120
      giropay?: { [k: string]: unknown };
121
      grabpay?: { [k: string]: unknown };
122
      ideal?: {
123
        bank?:
124
          | "abn_amro"
125
          | "asn_bank"
126
          | "bunq"
127
          | "handelsbanken"
128
          | "ing"
129
          | "knab"
130
          | "moneyou"
131
          | "n26"
132
          | "nn"
133
          | "rabobank"
134
          | "regiobank"
135
          | "revolut"
136
          | "sns_bank"
137
          | "triodos_bank"
138
          | "van_lanschot"
139
          | "yoursafe";
140
        [k: string]: unknown;
141
      };
142
      interac_present?: { [k: string]: unknown };
143
      klarna?: {
144
        dob?: {
145
          day: number;
146
          month: number;
147
          year: number;
148
          [k: string]: unknown;
149
        };
150
        [k: string]: unknown;
151
      };
152
      konbini?: { [k: string]: unknown };
153
      link?: { [k: string]: unknown };
154
      metadata?: { [k: string]: string };
155
      oxxo?: { [k: string]: unknown };
156
      p24?: {
157
        bank?:
158
          | "alior_bank"
159
          | "bank_millennium"
160
          | "bank_nowy_bfg_sa"
161
          | "bank_pekao_sa"
162
          | "banki_spbdzielcze"
163
          | "blik"
164
          | "bnp_paribas"
165
          | "boz"
166
          | "citi_handlowy"
167
          | "credit_agricole"
168
          | "envelobank"
169
          | "etransfer_pocztowy24"
170
          | "getin_bank"
171
          | "ideabank"
172
          | "ing"
173
          | "inteligo"
174
          | "mbank_mtransfer"
175
          | "nest_przelew"
176
          | "noble_pay"
177
          | "pbac_z_ipko"
178
          | "plus_bank"
179
          | "santander_przelew24"
180
          | "tmobile_usbugi_bankowe"
181
          | "toyota_bank"
182
          | "velobank"
183
          | "volkswagen_bank";
184
        [k: string]: unknown;
185
      };
186
      paynow?: { [k: string]: unknown };
187
      paypal?: { [k: string]: unknown };
188
      pix?: { [k: string]: unknown };
189
      promptpay?: { [k: string]: unknown };
190
      radar_options?: { session?: string; [k: string]: unknown };
191
      revolut_pay?: { [k: string]: unknown };
192
      sepa_debit?: { iban: string; [k: string]: unknown };
193
      sofort?: {
194
        country: "AT" | "BE" | "DE" | "ES" | "IT" | "NL";
195
        [k: string]: unknown;
196
      };
197
      swish?: { [k: string]: unknown };
198
      type:
199
        | "acss_debit"
200
        | "affirm"
201
        | "afterpay_clearpay"
202
        | "alipay"
203
        | "au_becs_debit"
204
        | "bacs_debit"
205
        | "bancontact"
206
        | "blik"
207
        | "boleto"
208
        | "cashapp"
209
        | "customer_balance"
210
        | "eps"
211
        | "fpx"
212
        | "giropay"
213
        | "grabpay"
214
        | "ideal"
215
        | "klarna"
216
        | "konbini"
217
        | "link"
218
        | "oxxo"
219
        | "p24"
220
        | "paynow"
221
        | "paypal"
222
        | "pix"
223
        | "promptpay"
224
        | "revolut_pay"
225
        | "sepa_debit"
226
        | "sofort"
227
        | "swish"
228
        | "us_bank_account"
229
        | "wechat_pay"
230
        | "zip";
231
      us_bank_account?: {
232
        account_holder_type?: "company" | "individual";
233
        account_number?: string;
234
        account_type?: "checking" | "savings";
235
        financial_connections_account?: string;
236
        routing_number?: string;
237
        [k: string]: unknown;
238
      };
239
      wechat_pay?: { [k: string]: unknown };
240
      zip?: { [k: string]: unknown };
241
      [k: string]: unknown;
242
    };
243
    payment_method_options?: {
244
      acss_debit?: {
245
        currency?: "cad" | "usd";
246
        mandate_options?: {
247
          custom_mandate_url?: string | "";
248
          default_for?: ("invoice" | "subscription")[];
249
          interval_description?: string;
250
          payment_schedule?: "combined" | "interval" | "sporadic";
251
          transaction_type?: "business" | "personal";
252
          [k: string]: unknown;
253
        };
254
        verification_method?: "automatic" | "instant" | "microdeposits";
255
        [k: string]: unknown;
256
      };
257
      card?: {
258
        mandate_options?: {
259
          amount: number;
260
          amount_type: "fixed" | "maximum";
261
          currency: string;
262
          description?: string;
263
          end_date?: number;
264
          interval: "day" | "month" | "sporadic" | "week" | "year";
265
          interval_count?: number;
266
          reference: string;
267
          start_date: number;
268
          supported_types?: "india"[];
269
          [k: string]: unknown;
270
        };
271
        network?:
272
          | "amex"
273
          | "cartes_bancaires"
274
          | "diners"
275
          | "discover"
276
          | "eftpos_au"
277
          | "interac"
278
          | "jcb"
279
          | "mastercard"
280
          | "unionpay"
281
          | "unknown"
282
          | "visa";
283
        request_three_d_secure?: "any" | "automatic" | "challenge";
284
        three_d_secure?: {
285
          ares_trans_status?: "A" | "C" | "I" | "N" | "R" | "U" | "Y";
286
          cryptogram?: string;
287
          electronic_commerce_indicator?: "01" | "02" | "05" | "06" | "07";
288
          network_options?: {
289
            cartes_bancaires?: {
290
              cb_avalgo: "0" | "1" | "2" | "3" | "4" | "A";
291
              cb_exemption?: string;
292
              cb_score?: number;
293
              [k: string]: unknown;
294
            };
295
            [k: string]: unknown;
296
          };
297
          requestor_challenge_indicator?: string;
298
          transaction_id?: string;
299
          version?: "1.0.2" | "2.1.0" | "2.2.0";
300
          [k: string]: unknown;
301
        };
302
        [k: string]: unknown;
303
      };
304
      link?: { [k: string]: unknown };
305
      paypal?: { billing_agreement_id?: string; [k: string]: unknown };
306
      sepa_debit?: {
307
        mandate_options?: { [k: string]: unknown };
308
        [k: string]: unknown;
309
      };
310
      us_bank_account?: {
311
        financial_connections?: {
312
          permissions?: (
313
            | "balances"
314
            | "ownership"
315
            | "payment_method"
316
            | "transactions"
317
          )[];
318
          prefetch?: ("balances" | "transactions")[];
319
          return_url?: string;
320
          [k: string]: unknown;
321
        };
322
        mandate_options?: {
323
          collection_method?: "" | "paper";
324
          [k: string]: unknown;
325
        };
326
        networks?: {
327
          requested?: ("ach" | "us_domestic_wire")[];
328
          [k: string]: unknown;
329
        };
330
        verification_method?: "automatic" | "instant" | "microdeposits";
331
        [k: string]: unknown;
332
      };
333
      [k: string]: unknown;
334
    };
335
    payment_method_types?: string[];
336
  }
337
) {
338
  const url = new URL(`https://api.stripe.com/v1/setup_intents/${intent}`);
339

340
  const response = await fetch(url, {
341
    method: "POST",
342
    headers: {
343
      "Content-Type": "application/x-www-form-urlencoded",
344
      Authorization: "Bearer " + auth.token,
345
    },
346
    body: encodeParams(body),
347
  });
348
  if (!response.ok) {
349
    const text = await response.text();
350
    throw new Error(`${response.status} ${text}`);
351
  }
352
  return await response.json();
353
}
354

355
function encodeParams(o: any) {
356
  function iter(o: any, path: string) {
357
    if (Array.isArray(o)) {
358
      o.forEach(function (a) {
359
        iter(a, path + "[]");
360
      });
361
      return;
362
    }
363
    if (o !== null && typeof o === "object") {
364
      Object.keys(o).forEach(function (k) {
365
        iter(o[k], path + "[" + k + "]");
366
      });
367
      return;
368
    }
369
    data.push(path + "=" + o);
370
  }
371
  const data: string[] = [];
372
  Object.keys(o).forEach(function (k) {
373
    if (o[k] !== undefined) {
374
      iter(o[k], k);
375
    }
376
  });
377
  return new URLSearchParams(data.join("&"));
378
}
379