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 |
|