Edits history of script submission #2772 for ' Post checkout sessions (stripe)'

  • nativets
    One script reply has been approved by the moderators
    Ap­pro­ved
    type Stripe = {
      token: string;
    };
    /**
     * Post checkout sessions
     * Creates a Session object.
     */
    export async function main(
      auth: Stripe,
      body: {
        after_expiration?: {
          recovery?: {
            allow_promotion_codes?: boolean;
            enabled: boolean;
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        allow_promotion_codes?: boolean;
        automatic_tax?: {
          enabled: boolean;
          liability?: {
            account?: string;
            type: "account" | "self";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        billing_address_collection?: "auto" | "required";
        cancel_url?: string;
        client_reference_id?: string;
        consent_collection?: {
          payment_method_reuse_agreement?: {
            position: "auto" | "hidden";
            [k: string]: unknown;
          };
          promotions?: "auto" | "none";
          terms_of_service?: "none" | "required";
          [k: string]: unknown;
        };
        currency?: string;
        custom_fields?: {
          dropdown?: {
            options: { label: string; value: string; [k: string]: unknown }[];
            [k: string]: unknown;
          };
          key: string;
          label: { custom: string; type: "custom"; [k: string]: unknown };
          numeric?: {
            maximum_length?: number;
            minimum_length?: number;
            [k: string]: unknown;
          };
          optional?: boolean;
          text?: {
            maximum_length?: number;
            minimum_length?: number;
            [k: string]: unknown;
          };
          type: "dropdown" | "numeric" | "text";
          [k: string]: unknown;
        }[];
        custom_text?: {
          after_submit?: { message: string; [k: string]: unknown } | "";
          shipping_address?: { message: string; [k: string]: unknown } | "";
          submit?: { message: string; [k: string]: unknown } | "";
          terms_of_service_acceptance?:
            | { message: string; [k: string]: unknown }
            | "";
          [k: string]: unknown;
        };
        customer?: string;
        customer_creation?: "always" | "if_required";
        customer_email?: string;
        customer_update?: {
          address?: "auto" | "never";
          name?: "auto" | "never";
          shipping?: "auto" | "never";
          [k: string]: unknown;
        };
        discounts?: {
          coupon?: string;
          promotion_code?: string;
          [k: string]: unknown;
        }[];
        expand?: string[];
        expires_at?: number;
        invoice_creation?: {
          enabled: boolean;
          invoice_data?: {
            account_tax_ids?: string[] | "";
            custom_fields?:
              | { name: string; value: string; [k: string]: unknown }[]
              | "";
            description?: string;
            footer?: string;
            issuer?: {
              account?: string;
              type: "account" | "self";
              [k: string]: unknown;
            };
            metadata?: { [k: string]: string };
            rendering_options?:
              | {
                  amount_tax_display?: "" | "exclude_tax" | "include_inclusive_tax";
                  [k: string]: unknown;
                }
              | "";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        line_items?: {
          adjustable_quantity?: {
            enabled: boolean;
            maximum?: number;
            minimum?: number;
            [k: string]: unknown;
          };
          dynamic_tax_rates?: string[];
          price?: string;
          price_data?: {
            currency: string;
            product?: string;
            product_data?: {
              description?: string;
              images?: string[];
              metadata?: { [k: string]: string };
              name: string;
              tax_code?: string;
              [k: string]: unknown;
            };
            recurring?: {
              interval: "day" | "month" | "week" | "year";
              interval_count?: number;
              [k: string]: unknown;
            };
            tax_behavior?: "exclusive" | "inclusive" | "unspecified";
            unit_amount?: number;
            unit_amount_decimal?: string;
            [k: string]: unknown;
          };
          quantity?: number;
          tax_rates?: string[];
          [k: string]: unknown;
        }[];
        locale?:
          | "auto"
          | "bg"
          | "cs"
          | "da"
          | "de"
          | "el"
          | "en"
          | "en-GB"
          | "es"
          | "es-419"
          | "et"
          | "fi"
          | "fil"
          | "fr"
          | "fr-CA"
          | "hr"
          | "hu"
          | "id"
          | "it"
          | "ja"
          | "ko"
          | "lt"
          | "lv"
          | "ms"
          | "mt"
          | "nb"
          | "nl"
          | "pl"
          | "pt"
          | "pt-BR"
          | "ro"
          | "ru"
          | "sk"
          | "sl"
          | "sv"
          | "th"
          | "tr"
          | "vi"
          | "zh"
          | "zh-HK"
          | "zh-TW";
        metadata?: { [k: string]: string };
        mode?: "payment" | "setup" | "subscription";
        payment_intent_data?: {
          application_fee_amount?: number;
          capture_method?: "automatic" | "automatic_async" | "manual";
          description?: string;
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          receipt_email?: string;
          setup_future_usage?: "off_session" | "on_session";
          shipping?: {
            address: {
              city?: string;
              country?: string;
              line1: string;
              line2?: string;
              postal_code?: string;
              state?: string;
              [k: string]: unknown;
            };
            carrier?: string;
            name: string;
            phone?: string;
            tracking_number?: string;
            [k: string]: unknown;
          };
          statement_descriptor?: string;
          statement_descriptor_suffix?: string;
          transfer_data?: {
            amount?: number;
            destination: string;
            [k: string]: unknown;
          };
          transfer_group?: string;
          [k: string]: unknown;
        };
        payment_method_collection?: "always" | "if_required";
        payment_method_configuration?: string;
        payment_method_options?: {
          acss_debit?: {
            currency?: "cad" | "usd";
            mandate_options?: {
              custom_mandate_url?: string | "";
              default_for?: ("invoice" | "subscription")[];
              interval_description?: string;
              payment_schedule?: "combined" | "interval" | "sporadic";
              transaction_type?: "business" | "personal";
              [k: string]: unknown;
            };
            setup_future_usage?: "none" | "off_session" | "on_session";
            verification_method?: "automatic" | "instant" | "microdeposits";
            [k: string]: unknown;
          };
          affirm?: { setup_future_usage?: "none"; [k: string]: unknown };
          afterpay_clearpay?: { setup_future_usage?: "none"; [k: string]: unknown };
          alipay?: { setup_future_usage?: "none"; [k: string]: unknown };
          au_becs_debit?: { setup_future_usage?: "none"; [k: string]: unknown };
          bacs_debit?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          bancontact?: { setup_future_usage?: "none"; [k: string]: unknown };
          boleto?: {
            expires_after_days?: number;
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          card?: {
            installments?: { enabled?: boolean; [k: string]: unknown };
            request_three_d_secure?: "any" | "automatic" | "challenge";
            setup_future_usage?: "off_session" | "on_session";
            statement_descriptor_suffix_kana?: string;
            statement_descriptor_suffix_kanji?: string;
            [k: string]: unknown;
          };
          cashapp?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          customer_balance?: {
            bank_transfer?: {
              eu_bank_transfer?: { country: string; [k: string]: unknown };
              requested_address_types?: (
                | "aba"
                | "iban"
                | "sepa"
                | "sort_code"
                | "spei"
                | "swift"
                | "zengin"
              )[];
              type:
                | "eu_bank_transfer"
                | "gb_bank_transfer"
                | "jp_bank_transfer"
                | "mx_bank_transfer"
                | "us_bank_transfer";
              [k: string]: unknown;
            };
            funding_type?: "bank_transfer";
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          eps?: { setup_future_usage?: "none"; [k: string]: unknown };
          fpx?: { setup_future_usage?: "none"; [k: string]: unknown };
          giropay?: { setup_future_usage?: "none"; [k: string]: unknown };
          grabpay?: { setup_future_usage?: "none"; [k: string]: unknown };
          ideal?: { setup_future_usage?: "none"; [k: string]: unknown };
          klarna?: { setup_future_usage?: "none"; [k: string]: unknown };
          konbini?: {
            expires_after_days?: number;
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          link?: {
            setup_future_usage?: "none" | "off_session";
            [k: string]: unknown;
          };
          oxxo?: {
            expires_after_days?: number;
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          p24?: {
            setup_future_usage?: "none";
            tos_shown_and_accepted?: boolean;
            [k: string]: unknown;
          };
          paynow?: { setup_future_usage?: "none"; [k: string]: unknown };
          paypal?: {
            capture_method?: "" | "manual";
            preferred_locale?:
              | "cs-CZ"
              | "da-DK"
              | "de-AT"
              | "de-DE"
              | "de-LU"
              | "el-GR"
              | "en-GB"
              | "en-US"
              | "es-ES"
              | "fi-FI"
              | "fr-BE"
              | "fr-FR"
              | "fr-LU"
              | "hu-HU"
              | "it-IT"
              | "nl-BE"
              | "nl-NL"
              | "pl-PL"
              | "pt-PT"
              | "sk-SK"
              | "sv-SE";
            reference?: string;
            risk_correlation_id?: string;
            setup_future_usage?: "" | "none" | "off_session";
            [k: string]: unknown;
          };
          pix?: { expires_after_seconds?: number; [k: string]: unknown };
          revolut_pay?: {
            setup_future_usage?: "none" | "off_session";
            [k: string]: unknown;
          };
          sepa_debit?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          sofort?: { setup_future_usage?: "none"; [k: string]: unknown };
          swish?: { reference?: string | ""; [k: string]: unknown };
          us_bank_account?: {
            financial_connections?: {
              permissions?: (
                | "balances"
                | "ownership"
                | "payment_method"
                | "transactions"
              )[];
              prefetch?: ("balances" | "transactions")[];
              [k: string]: unknown;
            };
            setup_future_usage?: "none" | "off_session" | "on_session";
            verification_method?: "automatic" | "instant";
            [k: string]: unknown;
          };
          wechat_pay?: {
            app_id?: string;
            client: "android" | "ios" | "web";
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        payment_method_types?: (
          | "acss_debit"
          | "affirm"
          | "afterpay_clearpay"
          | "alipay"
          | "au_becs_debit"
          | "bacs_debit"
          | "bancontact"
          | "blik"
          | "boleto"
          | "card"
          | "cashapp"
          | "customer_balance"
          | "eps"
          | "fpx"
          | "giropay"
          | "grabpay"
          | "ideal"
          | "klarna"
          | "konbini"
          | "link"
          | "oxxo"
          | "p24"
          | "paynow"
          | "paypal"
          | "pix"
          | "promptpay"
          | "revolut_pay"
          | "sepa_debit"
          | "sofort"
          | "swish"
          | "us_bank_account"
          | "wechat_pay"
          | "zip"
        )[];
        phone_number_collection?: { enabled: boolean; [k: string]: unknown };
        redirect_on_completion?: "always" | "if_required" | "never";
        return_url?: string;
        setup_intent_data?: {
          description?: string;
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          [k: string]: unknown;
        };
        shipping_address_collection?: {
          allowed_countries: (
            | "AC"
            | "AD"
            | "AE"
            | "AF"
            | "AG"
            | "AI"
            | "AL"
            | "AM"
            | "AO"
            | "AQ"
            | "AR"
            | "AT"
            | "AU"
            | "AW"
            | "AX"
            | "AZ"
            | "BA"
            | "BB"
            | "BD"
            | "BE"
            | "BF"
            | "BG"
            | "BH"
            | "BI"
            | "BJ"
            | "BL"
            | "BM"
            | "BN"
            | "BO"
            | "BQ"
            | "BR"
            | "BS"
            | "BT"
            | "BV"
            | "BW"
            | "BY"
            | "BZ"
            | "CA"
            | "CD"
            | "CF"
            | "CG"
            | "CH"
            | "CI"
            | "CK"
            | "CL"
            | "CM"
            | "CN"
            | "CO"
            | "CR"
            | "CV"
            | "CW"
            | "CY"
            | "CZ"
            | "DE"
            | "DJ"
            | "DK"
            | "DM"
            | "DO"
            | "DZ"
            | "EC"
            | "EE"
            | "EG"
            | "EH"
            | "ER"
            | "ES"
            | "ET"
            | "FI"
            | "FJ"
            | "FK"
            | "FO"
            | "FR"
            | "GA"
            | "GB"
            | "GD"
            | "GE"
            | "GF"
            | "GG"
            | "GH"
            | "GI"
            | "GL"
            | "GM"
            | "GN"
            | "GP"
            | "GQ"
            | "GR"
            | "GS"
            | "GT"
            | "GU"
            | "GW"
            | "GY"
            | "HK"
            | "HN"
            | "HR"
            | "HT"
            | "HU"
            | "ID"
            | "IE"
            | "IL"
            | "IM"
            | "IN"
            | "IO"
            | "IQ"
            | "IS"
            | "IT"
            | "JE"
            | "JM"
            | "JO"
            | "JP"
            | "KE"
            | "KG"
            | "KH"
            | "KI"
            | "KM"
            | "KN"
            | "KR"
            | "KW"
            | "KY"
            | "KZ"
            | "LA"
            | "LB"
            | "LC"
            | "LI"
            | "LK"
            | "LR"
            | "LS"
            | "LT"
            | "LU"
            | "LV"
            | "LY"
            | "MA"
            | "MC"
            | "MD"
            | "ME"
            | "MF"
            | "MG"
            | "MK"
            | "ML"
            | "MM"
            | "MN"
            | "MO"
            | "MQ"
            | "MR"
            | "MS"
            | "MT"
            | "MU"
            | "MV"
            | "MW"
            | "MX"
            | "MY"
            | "MZ"
            | "NA"
            | "NC"
            | "NE"
            | "NG"
            | "NI"
            | "NL"
            | "NO"
            | "NP"
            | "NR"
            | "NU"
            | "NZ"
            | "OM"
            | "PA"
            | "PE"
            | "PF"
            | "PG"
            | "PH"
            | "PK"
            | "PL"
            | "PM"
            | "PN"
            | "PR"
            | "PS"
            | "PT"
            | "PY"
            | "QA"
            | "RE"
            | "RO"
            | "RS"
            | "RU"
            | "RW"
            | "SA"
            | "SB"
            | "SC"
            | "SE"
            | "SG"
            | "SH"
            | "SI"
            | "SJ"
            | "SK"
            | "SL"
            | "SM"
            | "SN"
            | "SO"
            | "SR"
            | "SS"
            | "ST"
            | "SV"
            | "SX"
            | "SZ"
            | "TA"
            | "TC"
            | "TD"
            | "TF"
            | "TG"
            | "TH"
            | "TJ"
            | "TK"
            | "TL"
            | "TM"
            | "TN"
            | "TO"
            | "TR"
            | "TT"
            | "TV"
            | "TW"
            | "TZ"
            | "UA"
            | "UG"
            | "US"
            | "UY"
            | "UZ"
            | "VA"
            | "VC"
            | "VE"
            | "VG"
            | "VN"
            | "VU"
            | "WF"
            | "WS"
            | "XK"
            | "YE"
            | "YT"
            | "ZA"
            | "ZM"
            | "ZW"
            | "ZZ"
          )[];
          [k: string]: unknown;
        };
        shipping_options?: {
          shipping_rate?: string;
          shipping_rate_data?: {
            delivery_estimate?: {
              maximum?: {
                unit: "business_day" | "day" | "hour" | "month" | "week";
                value: number;
                [k: string]: unknown;
              };
              minimum?: {
                unit: "business_day" | "day" | "hour" | "month" | "week";
                value: number;
                [k: string]: unknown;
              };
              [k: string]: unknown;
            };
            display_name: string;
            fixed_amount?: {
              amount: number;
              currency: string;
              currency_options?: {
                [k: string]: {
                  amount: number;
                  tax_behavior?: "exclusive" | "inclusive" | "unspecified";
                  [k: string]: unknown;
                };
              };
              [k: string]: unknown;
            };
            metadata?: { [k: string]: string };
            tax_behavior?: "exclusive" | "inclusive" | "unspecified";
            tax_code?: string;
            type?: "fixed_amount";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        }[];
        submit_type?: "auto" | "book" | "donate" | "pay";
        subscription_data?: {
          application_fee_percent?: number;
          billing_cycle_anchor?: number;
          default_tax_rates?: string[];
          description?: string;
          invoice_settings?: {
            issuer?: {
              account?: string;
              type: "account" | "self";
              [k: string]: unknown;
            };
            [k: string]: unknown;
          };
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          proration_behavior?: "create_prorations" | "none";
          transfer_data?: {
            amount_percent?: number;
            destination: string;
            [k: string]: unknown;
          };
          trial_end?: number;
          trial_period_days?: number;
          trial_settings?: {
            end_behavior: {
              missing_payment_method: "cancel" | "create_invoice" | "pause";
              [k: string]: unknown;
            };
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        success_url?: string;
        tax_id_collection?: { enabled: boolean; [k: string]: unknown };
        ui_mode?: "embedded" | "hosted";
      }
    ) {
      const url = new URL(`https://api.stripe.com/v1/checkout/sessions`);
    
      const response = await fetch(url, {
        method: "POST",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded",
          Authorization: "Bearer " + auth.token,
        },
        body: encodeParams(body),
      });
      if (!response.ok) {
        const text = await response.text();
        throw new Error(`${response.status} ${text}`);
      }
      return await response.json();
    }
    
    function encodeParams(o: any) {
      function iter(o: any, path: string) {
        if (Array.isArray(o)) {
          o.forEach(function (a) {
            iter(a, path + "[]");
          });
          return;
        }
        if (o !== null && typeof o === "object") {
          Object.keys(o).forEach(function (k) {
            iter(o[k], path + "[" + k + "]");
          });
          return;
        }
        data.push(path + "=" + o);
      }
      const data: string[] = [];
      Object.keys(o).forEach(function (k) {
        if (o[k] !== undefined) {
          iter(o[k], k);
        }
      });
      return new URLSearchParams(data.join("&"));
    }
    

    Submitted by hugo697 368 days ago

  • nativets
    type Stripe = {
      token: string;
    };
    /**
     * Post checkout sessions
     * Creates a Session object.
     */
    export async function main(
      auth: Stripe,
      body: {
        after_expiration?: {
          recovery?: {
            allow_promotion_codes?: boolean;
            enabled: boolean;
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        allow_promotion_codes?: boolean;
        automatic_tax?: {
          enabled: boolean;
          liability?: {
            account?: string;
            type: "account" | "self";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        billing_address_collection?: "auto" | "required";
        cancel_url?: string;
        client_reference_id?: string;
        consent_collection?: {
          payment_method_reuse_agreement?: {
            position: "auto" | "hidden";
            [k: string]: unknown;
          };
          promotions?: "auto" | "none";
          terms_of_service?: "none" | "required";
          [k: string]: unknown;
        };
        currency?: string;
        custom_fields?: {
          dropdown?: {
            options: { label: string; value: string; [k: string]: unknown }[];
            [k: string]: unknown;
          };
          key: string;
          label: { custom: string; type: "custom"; [k: string]: unknown };
          numeric?: {
            maximum_length?: number;
            minimum_length?: number;
            [k: string]: unknown;
          };
          optional?: boolean;
          text?: {
            maximum_length?: number;
            minimum_length?: number;
            [k: string]: unknown;
          };
          type: "dropdown" | "numeric" | "text";
          [k: string]: unknown;
        }[];
        custom_text?: {
          after_submit?: { message: string; [k: string]: unknown } | "";
          shipping_address?: { message: string; [k: string]: unknown } | "";
          submit?: { message: string; [k: string]: unknown } | "";
          terms_of_service_acceptance?:
            | { message: string; [k: string]: unknown }
            | "";
          [k: string]: unknown;
        };
        customer?: string;
        customer_creation?: "always" | "if_required";
        customer_email?: string;
        customer_update?: {
          address?: "auto" | "never";
          name?: "auto" | "never";
          shipping?: "auto" | "never";
          [k: string]: unknown;
        };
        discounts?: {
          coupon?: string;
          promotion_code?: string;
          [k: string]: unknown;
        }[];
        expand?: string[];
        expires_at?: number;
        invoice_creation?: {
          enabled: boolean;
          invoice_data?: {
            account_tax_ids?: string[] | "";
            custom_fields?:
              | { name: string; value: string; [k: string]: unknown }[]
              | "";
            description?: string;
            footer?: string;
            issuer?: {
              account?: string;
              type: "account" | "self";
              [k: string]: unknown;
            };
            metadata?: { [k: string]: string };
            rendering_options?:
              | {
                  amount_tax_display?: "" | "exclude_tax" | "include_inclusive_tax";
                  [k: string]: unknown;
                }
              | "";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        line_items?: {
          adjustable_quantity?: {
            enabled: boolean;
            maximum?: number;
            minimum?: number;
            [k: string]: unknown;
          };
          dynamic_tax_rates?: string[];
          price?: string;
          price_data?: {
            currency: string;
            product?: string;
            product_data?: {
              description?: string;
              images?: string[];
              metadata?: { [k: string]: string };
              name: string;
              tax_code?: string;
              [k: string]: unknown;
            };
            recurring?: {
              interval: "day" | "month" | "week" | "year";
              interval_count?: number;
              [k: string]: unknown;
            };
            tax_behavior?: "exclusive" | "inclusive" | "unspecified";
            unit_amount?: number;
            unit_amount_decimal?: string;
            [k: string]: unknown;
          };
          quantity?: number;
          tax_rates?: string[];
          [k: string]: unknown;
        }[];
        locale?:
          | "auto"
          | "bg"
          | "cs"
          | "da"
          | "de"
          | "el"
          | "en"
          | "en-GB"
          | "es"
          | "es-419"
          | "et"
          | "fi"
          | "fil"
          | "fr"
          | "fr-CA"
          | "hr"
          | "hu"
          | "id"
          | "it"
          | "ja"
          | "ko"
          | "lt"
          | "lv"
          | "ms"
          | "mt"
          | "nb"
          | "nl"
          | "pl"
          | "pt"
          | "pt-BR"
          | "ro"
          | "ru"
          | "sk"
          | "sl"
          | "sv"
          | "th"
          | "tr"
          | "vi"
          | "zh"
          | "zh-HK"
          | "zh-TW";
        metadata?: { [k: string]: string };
        mode?: "payment" | "setup" | "subscription";
        payment_intent_data?: {
          application_fee_amount?: number;
          capture_method?: "automatic" | "automatic_async" | "manual";
          description?: string;
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          receipt_email?: string;
          setup_future_usage?: "off_session" | "on_session";
          shipping?: {
            address: {
              city?: string;
              country?: string;
              line1: string;
              line2?: string;
              postal_code?: string;
              state?: string;
              [k: string]: unknown;
            };
            carrier?: string;
            name: string;
            phone?: string;
            tracking_number?: string;
            [k: string]: unknown;
          };
          statement_descriptor?: string;
          statement_descriptor_suffix?: string;
          transfer_data?: {
            amount?: number;
            destination: string;
            [k: string]: unknown;
          };
          transfer_group?: string;
          [k: string]: unknown;
        };
        payment_method_collection?: "always" | "if_required";
        payment_method_configuration?: string;
        payment_method_options?: {
          acss_debit?: {
            currency?: "cad" | "usd";
            mandate_options?: {
              custom_mandate_url?: string | "";
              default_for?: ("invoice" | "subscription")[];
              interval_description?: string;
              payment_schedule?: "combined" | "interval" | "sporadic";
              transaction_type?: "business" | "personal";
              [k: string]: unknown;
            };
            setup_future_usage?: "none" | "off_session" | "on_session";
            verification_method?: "automatic" | "instant" | "microdeposits";
            [k: string]: unknown;
          };
          affirm?: { setup_future_usage?: "none"; [k: string]: unknown };
          afterpay_clearpay?: { setup_future_usage?: "none"; [k: string]: unknown };
          alipay?: { setup_future_usage?: "none"; [k: string]: unknown };
          au_becs_debit?: { setup_future_usage?: "none"; [k: string]: unknown };
          bacs_debit?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          bancontact?: { setup_future_usage?: "none"; [k: string]: unknown };
          boleto?: {
            expires_after_days?: number;
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          card?: {
            installments?: { enabled?: boolean; [k: string]: unknown };
            request_three_d_secure?: "any" | "automatic" | "challenge";
            setup_future_usage?: "off_session" | "on_session";
            statement_descriptor_suffix_kana?: string;
            statement_descriptor_suffix_kanji?: string;
            [k: string]: unknown;
          };
          cashapp?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          customer_balance?: {
            bank_transfer?: {
              eu_bank_transfer?: { country: string; [k: string]: unknown };
              requested_address_types?: (
                | "aba"
                | "iban"
                | "sepa"
                | "sort_code"
                | "spei"
                | "swift"
                | "zengin"
              )[];
              type:
                | "eu_bank_transfer"
                | "gb_bank_transfer"
                | "jp_bank_transfer"
                | "mx_bank_transfer"
                | "us_bank_transfer";
              [k: string]: unknown;
            };
            funding_type?: "bank_transfer";
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          eps?: { setup_future_usage?: "none"; [k: string]: unknown };
          fpx?: { setup_future_usage?: "none"; [k: string]: unknown };
          giropay?: { setup_future_usage?: "none"; [k: string]: unknown };
          grabpay?: { setup_future_usage?: "none"; [k: string]: unknown };
          ideal?: { setup_future_usage?: "none"; [k: string]: unknown };
          klarna?: { setup_future_usage?: "none"; [k: string]: unknown };
          konbini?: {
            expires_after_days?: number;
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          link?: {
            setup_future_usage?: "none" | "off_session";
            [k: string]: unknown;
          };
          oxxo?: {
            expires_after_days?: number;
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          p24?: {
            setup_future_usage?: "none";
            tos_shown_and_accepted?: boolean;
            [k: string]: unknown;
          };
          paynow?: { setup_future_usage?: "none"; [k: string]: unknown };
          paypal?: {
            capture_method?: "" | "manual";
            preferred_locale?:
              | "cs-CZ"
              | "da-DK"
              | "de-AT"
              | "de-DE"
              | "de-LU"
              | "el-GR"
              | "en-GB"
              | "en-US"
              | "es-ES"
              | "fi-FI"
              | "fr-BE"
              | "fr-FR"
              | "fr-LU"
              | "hu-HU"
              | "it-IT"
              | "nl-BE"
              | "nl-NL"
              | "pl-PL"
              | "pt-PT"
              | "sk-SK"
              | "sv-SE";
            reference?: string;
            risk_correlation_id?: string;
            setup_future_usage?: "" | "none" | "off_session";
            [k: string]: unknown;
          };
          pix?: { expires_after_seconds?: number; [k: string]: unknown };
          revolut_pay?: {
            setup_future_usage?: "none" | "off_session";
            [k: string]: unknown;
          };
          sepa_debit?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          sofort?: { setup_future_usage?: "none"; [k: string]: unknown };
          swish?: { reference?: string | ""; [k: string]: unknown };
          us_bank_account?: {
            financial_connections?: {
              permissions?: (
                | "balances"
                | "ownership"
                | "payment_method"
                | "transactions"
              )[];
              prefetch?: ("balances" | "transactions")[];
              [k: string]: unknown;
            };
            setup_future_usage?: "none" | "off_session" | "on_session";
            verification_method?: "automatic" | "instant";
            [k: string]: unknown;
          };
          wechat_pay?: {
            app_id?: string;
            client: "android" | "ios" | "web";
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        payment_method_types?: (
          | "acss_debit"
          | "affirm"
          | "afterpay_clearpay"
          | "alipay"
          | "au_becs_debit"
          | "bacs_debit"
          | "bancontact"
          | "blik"
          | "boleto"
          | "card"
          | "cashapp"
          | "customer_balance"
          | "eps"
          | "fpx"
          | "giropay"
          | "grabpay"
          | "ideal"
          | "klarna"
          | "konbini"
          | "link"
          | "oxxo"
          | "p24"
          | "paynow"
          | "paypal"
          | "pix"
          | "promptpay"
          | "revolut_pay"
          | "sepa_debit"
          | "sofort"
          | "swish"
          | "us_bank_account"
          | "wechat_pay"
          | "zip"
        )[];
        phone_number_collection?: { enabled: boolean; [k: string]: unknown };
        redirect_on_completion?: "always" | "if_required" | "never";
        return_url?: string;
        setup_intent_data?: {
          description?: string;
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          [k: string]: unknown;
        };
        shipping_address_collection?: {
          allowed_countries: (
            | "AC"
            | "AD"
            | "AE"
            | "AF"
            | "AG"
            | "AI"
            | "AL"
            | "AM"
            | "AO"
            | "AQ"
            | "AR"
            | "AT"
            | "AU"
            | "AW"
            | "AX"
            | "AZ"
            | "BA"
            | "BB"
            | "BD"
            | "BE"
            | "BF"
            | "BG"
            | "BH"
            | "BI"
            | "BJ"
            | "BL"
            | "BM"
            | "BN"
            | "BO"
            | "BQ"
            | "BR"
            | "BS"
            | "BT"
            | "BV"
            | "BW"
            | "BY"
            | "BZ"
            | "CA"
            | "CD"
            | "CF"
            | "CG"
            | "CH"
            | "CI"
            | "CK"
            | "CL"
            | "CM"
            | "CN"
            | "CO"
            | "CR"
            | "CV"
            | "CW"
            | "CY"
            | "CZ"
            | "DE"
            | "DJ"
            | "DK"
            | "DM"
            | "DO"
            | "DZ"
            | "EC"
            | "EE"
            | "EG"
            | "EH"
            | "ER"
            | "ES"
            | "ET"
            | "FI"
            | "FJ"
            | "FK"
            | "FO"
            | "FR"
            | "GA"
            | "GB"
            | "GD"
            | "GE"
            | "GF"
            | "GG"
            | "GH"
            | "GI"
            | "GL"
            | "GM"
            | "GN"
            | "GP"
            | "GQ"
            | "GR"
            | "GS"
            | "GT"
            | "GU"
            | "GW"
            | "GY"
            | "HK"
            | "HN"
            | "HR"
            | "HT"
            | "HU"
            | "ID"
            | "IE"
            | "IL"
            | "IM"
            | "IN"
            | "IO"
            | "IQ"
            | "IS"
            | "IT"
            | "JE"
            | "JM"
            | "JO"
            | "JP"
            | "KE"
            | "KG"
            | "KH"
            | "KI"
            | "KM"
            | "KN"
            | "KR"
            | "KW"
            | "KY"
            | "KZ"
            | "LA"
            | "LB"
            | "LC"
            | "LI"
            | "LK"
            | "LR"
            | "LS"
            | "LT"
            | "LU"
            | "LV"
            | "LY"
            | "MA"
            | "MC"
            | "MD"
            | "ME"
            | "MF"
            | "MG"
            | "MK"
            | "ML"
            | "MM"
            | "MN"
            | "MO"
            | "MQ"
            | "MR"
            | "MS"
            | "MT"
            | "MU"
            | "MV"
            | "MW"
            | "MX"
            | "MY"
            | "MZ"
            | "NA"
            | "NC"
            | "NE"
            | "NG"
            | "NI"
            | "NL"
            | "NO"
            | "NP"
            | "NR"
            | "NU"
            | "NZ"
            | "OM"
            | "PA"
            | "PE"
            | "PF"
            | "PG"
            | "PH"
            | "PK"
            | "PL"
            | "PM"
            | "PN"
            | "PR"
            | "PS"
            | "PT"
            | "PY"
            | "QA"
            | "RE"
            | "RO"
            | "RS"
            | "RU"
            | "RW"
            | "SA"
            | "SB"
            | "SC"
            | "SE"
            | "SG"
            | "SH"
            | "SI"
            | "SJ"
            | "SK"
            | "SL"
            | "SM"
            | "SN"
            | "SO"
            | "SR"
            | "SS"
            | "ST"
            | "SV"
            | "SX"
            | "SZ"
            | "TA"
            | "TC"
            | "TD"
            | "TF"
            | "TG"
            | "TH"
            | "TJ"
            | "TK"
            | "TL"
            | "TM"
            | "TN"
            | "TO"
            | "TR"
            | "TT"
            | "TV"
            | "TW"
            | "TZ"
            | "UA"
            | "UG"
            | "US"
            | "UY"
            | "UZ"
            | "VA"
            | "VC"
            | "VE"
            | "VG"
            | "VN"
            | "VU"
            | "WF"
            | "WS"
            | "XK"
            | "YE"
            | "YT"
            | "ZA"
            | "ZM"
            | "ZW"
            | "ZZ"
          )[];
          [k: string]: unknown;
        };
        shipping_options?: {
          shipping_rate?: string;
          shipping_rate_data?: {
            delivery_estimate?: {
              maximum?: {
                unit: "business_day" | "day" | "hour" | "month" | "week";
                value: number;
                [k: string]: unknown;
              };
              minimum?: {
                unit: "business_day" | "day" | "hour" | "month" | "week";
                value: number;
                [k: string]: unknown;
              };
              [k: string]: unknown;
            };
            display_name: string;
            fixed_amount?: {
              amount: number;
              currency: string;
              currency_options?: {
                [k: string]: {
                  amount: number;
                  tax_behavior?: "exclusive" | "inclusive" | "unspecified";
                  [k: string]: unknown;
                };
              };
              [k: string]: unknown;
            };
            metadata?: { [k: string]: string };
            tax_behavior?: "exclusive" | "inclusive" | "unspecified";
            tax_code?: string;
            type?: "fixed_amount";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        }[];
        submit_type?: "auto" | "book" | "donate" | "pay";
        subscription_data?: {
          application_fee_percent?: number;
          billing_cycle_anchor?: number;
          default_tax_rates?: string[];
          description?: string;
          invoice_settings?: {
            issuer?: {
              account?: string;
              type: "account" | "self";
              [k: string]: unknown;
            };
            [k: string]: unknown;
          };
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          proration_behavior?: "create_prorations" | "none";
          transfer_data?: {
            amount_percent?: number;
            destination: string;
            [k: string]: unknown;
          };
          trial_end?: number;
          trial_period_days?: number;
          trial_settings?: {
            end_behavior: {
              missing_payment_method: "cancel" | "create_invoice" | "pause";
              [k: string]: unknown;
            };
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        success_url?: string;
        tax_id_collection?: { enabled: boolean; [k: string]: unknown };
        ui_mode?: "embedded" | "hosted";
      }
    ) {
      const url = new URL(`https://api.stripe.com/v1/checkout/sessions`);
    
      const response = await fetch(url, {
        method: "POST",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded",
          Authorization: "Bearer " + auth.token,
        },
        body: encodeParams(body),
      });
      if (!response.ok) {
        const text = await response.text();
        throw new Error(`${response.status} ${text}`);
      }
      return await response.json();
    }
    
    function encodeParams(o: any) {
      function iter(o: any, path: string) {
        if (Array.isArray(o)) {
          o.forEach(function (a) {
            iter(a, path + "[]");
          });
          return;
        }
        if (o !== null && typeof o === "object") {
          Object.keys(o).forEach(function (k) {
            iter(o[k], path + "[" + k + "]");
          });
          return;
        }
        data.push(path + "=" + o);
      }
      const data: string[] = [];
      Object.keys(o).forEach(function (k) {
        if (o[k] !== undefined) {
          iter(o[k], k);
        }
      });
      return new URLSearchParams(data.join("&"));
    }
    

    Submitted by hugo697 795 days ago

  • nativets
    type Stripe = {
      token: string;
    };
    /**
     * Post checkout sessions
     * <p>Creates a Session object.</p>
     */
    export async function main(
      auth: Stripe,
      body: {
        after_expiration?: {
          recovery?: {
            allow_promotion_codes?: boolean;
            enabled: boolean;
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        allow_promotion_codes?: boolean;
        automatic_tax?: { enabled: boolean; [k: string]: unknown };
        billing_address_collection?: "auto" | "required";
        cancel_url?: string;
        client_reference_id?: string;
        consent_collection?: {
          promotions?: "auto" | "none";
          terms_of_service?: "none" | "required";
          [k: string]: unknown;
        };
        currency?: string;
        custom_fields?: {
          dropdown?: {
            options: { label: string; value: string; [k: string]: unknown }[];
            [k: string]: unknown;
          };
          key: string;
          label: { custom: string; type: "custom"; [k: string]: unknown };
          numeric?: {
            maximum_length?: number;
            minimum_length?: number;
            [k: string]: unknown;
          };
          optional?: boolean;
          text?: {
            maximum_length?: number;
            minimum_length?: number;
            [k: string]: unknown;
          };
          type: "dropdown" | "numeric" | "text";
          [k: string]: unknown;
        }[];
        custom_text?: {
          shipping_address?: { message: string; [k: string]: unknown } | "";
          submit?: { message: string; [k: string]: unknown } | "";
          terms_of_service_acceptance?:
            | { message: string; [k: string]: unknown }
            | "";
          [k: string]: unknown;
        };
        customer?: string;
        customer_creation?: "always" | "if_required";
        customer_email?: string;
        customer_update?: {
          address?: "auto" | "never";
          name?: "auto" | "never";
          shipping?: "auto" | "never";
          [k: string]: unknown;
        };
        discounts?: {
          coupon?: string;
          promotion_code?: string;
          [k: string]: unknown;
        }[];
        expand?: string[];
        expires_at?: number;
        invoice_creation?: {
          enabled: boolean;
          invoice_data?: {
            account_tax_ids?: string[] | "";
            custom_fields?:
              | { name: string; value: string; [k: string]: unknown }[]
              | "";
            description?: string;
            footer?: string;
            metadata?: { [k: string]: string };
            rendering_options?:
              | {
                  amount_tax_display?: "" | "exclude_tax" | "include_inclusive_tax";
                  [k: string]: unknown;
                }
              | "";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        line_items?: {
          adjustable_quantity?: {
            enabled: boolean;
            maximum?: number;
            minimum?: number;
            [k: string]: unknown;
          };
          dynamic_tax_rates?: string[];
          price?: string;
          price_data?: {
            currency: string;
            product?: string;
            product_data?: {
              description?: string;
              images?: string[];
              metadata?: { [k: string]: string };
              name: string;
              tax_code?: string;
              [k: string]: unknown;
            };
            recurring?: {
              interval: "day" | "month" | "week" | "year";
              interval_count?: number;
              [k: string]: unknown;
            };
            tax_behavior?: "exclusive" | "inclusive" | "unspecified";
            unit_amount?: number;
            unit_amount_decimal?: string;
            [k: string]: unknown;
          };
          quantity?: number;
          tax_rates?: string[];
          [k: string]: unknown;
        }[];
        locale?:
          | "auto"
          | "bg"
          | "cs"
          | "da"
          | "de"
          | "el"
          | "en"
          | "en-GB"
          | "es"
          | "es-419"
          | "et"
          | "fi"
          | "fil"
          | "fr"
          | "fr-CA"
          | "hr"
          | "hu"
          | "id"
          | "it"
          | "ja"
          | "ko"
          | "lt"
          | "lv"
          | "ms"
          | "mt"
          | "nb"
          | "nl"
          | "pl"
          | "pt"
          | "pt-BR"
          | "ro"
          | "ru"
          | "sk"
          | "sl"
          | "sv"
          | "th"
          | "tr"
          | "vi"
          | "zh"
          | "zh-HK"
          | "zh-TW";
        metadata?: { [k: string]: string };
        mode?: "payment" | "setup" | "subscription";
        payment_intent_data?: {
          application_fee_amount?: number;
          capture_method?: "automatic" | "automatic_async" | "manual";
          description?: string;
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          receipt_email?: string;
          setup_future_usage?: "off_session" | "on_session";
          shipping?: {
            address: {
              city?: string;
              country?: string;
              line1: string;
              line2?: string;
              postal_code?: string;
              state?: string;
              [k: string]: unknown;
            };
            carrier?: string;
            name: string;
            phone?: string;
            tracking_number?: string;
            [k: string]: unknown;
          };
          statement_descriptor?: string;
          statement_descriptor_suffix?: string;
          transfer_data?: {
            amount?: number;
            destination: string;
            [k: string]: unknown;
          };
          transfer_group?: string;
          [k: string]: unknown;
        };
        payment_method_collection?: "always" | "if_required";
        payment_method_configuration?: string;
        payment_method_options?: {
          acss_debit?: {
            currency?: "cad" | "usd";
            mandate_options?: {
              custom_mandate_url?: string | "";
              default_for?: ("invoice" | "subscription")[];
              interval_description?: string;
              payment_schedule?: "combined" | "interval" | "sporadic";
              transaction_type?: "business" | "personal";
              [k: string]: unknown;
            };
            setup_future_usage?: "none" | "off_session" | "on_session";
            verification_method?: "automatic" | "instant" | "microdeposits";
            [k: string]: unknown;
          };
          affirm?: { setup_future_usage?: "none"; [k: string]: unknown };
          afterpay_clearpay?: { setup_future_usage?: "none"; [k: string]: unknown };
          alipay?: { setup_future_usage?: "none"; [k: string]: unknown };
          au_becs_debit?: { setup_future_usage?: "none"; [k: string]: unknown };
          bacs_debit?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          bancontact?: { setup_future_usage?: "none"; [k: string]: unknown };
          boleto?: {
            expires_after_days?: number;
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          card?: {
            installments?: { enabled?: boolean; [k: string]: unknown };
            setup_future_usage?: "off_session" | "on_session";
            statement_descriptor_suffix_kana?: string;
            statement_descriptor_suffix_kanji?: string;
            [k: string]: unknown;
          };
          cashapp?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          customer_balance?: {
            bank_transfer?: {
              eu_bank_transfer?: { country: string; [k: string]: unknown };
              requested_address_types?: (
                | "aba"
                | "iban"
                | "sepa"
                | "sort_code"
                | "spei"
                | "swift"
                | "zengin"
              )[];
              type:
                | "eu_bank_transfer"
                | "gb_bank_transfer"
                | "jp_bank_transfer"
                | "mx_bank_transfer"
                | "us_bank_transfer";
              [k: string]: unknown;
            };
            funding_type?: "bank_transfer";
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          eps?: { setup_future_usage?: "none"; [k: string]: unknown };
          fpx?: { setup_future_usage?: "none"; [k: string]: unknown };
          giropay?: { setup_future_usage?: "none"; [k: string]: unknown };
          grabpay?: { setup_future_usage?: "none"; [k: string]: unknown };
          ideal?: { setup_future_usage?: "none"; [k: string]: unknown };
          klarna?: { setup_future_usage?: "none"; [k: string]: unknown };
          konbini?: {
            expires_after_days?: number;
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          link?: {
            setup_future_usage?: "none" | "off_session";
            [k: string]: unknown;
          };
          oxxo?: {
            expires_after_days?: number;
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          p24?: {
            setup_future_usage?: "none";
            tos_shown_and_accepted?: boolean;
            [k: string]: unknown;
          };
          paynow?: { setup_future_usage?: "none"; [k: string]: unknown };
          paypal?: {
            capture_method?: "" | "manual";
            preferred_locale?:
              | "cs-CZ"
              | "da-DK"
              | "de-AT"
              | "de-DE"
              | "de-LU"
              | "el-GR"
              | "en-GB"
              | "en-US"
              | "es-ES"
              | "fi-FI"
              | "fr-BE"
              | "fr-FR"
              | "fr-LU"
              | "hu-HU"
              | "it-IT"
              | "nl-BE"
              | "nl-NL"
              | "pl-PL"
              | "pt-PT"
              | "sk-SK"
              | "sv-SE";
            reference?: string;
            risk_correlation_id?: string;
            setup_future_usage?: "" | "none" | "off_session";
            [k: string]: unknown;
          };
          pix?: { expires_after_seconds?: number; [k: string]: unknown };
          sepa_debit?: {
            setup_future_usage?: "none" | "off_session" | "on_session";
            [k: string]: unknown;
          };
          sofort?: { setup_future_usage?: "none"; [k: string]: unknown };
          us_bank_account?: {
            financial_connections?: {
              permissions?: (
                | "balances"
                | "ownership"
                | "payment_method"
                | "transactions"
              )[];
              prefetch?: "balances"[];
              [k: string]: unknown;
            };
            setup_future_usage?: "none" | "off_session" | "on_session";
            verification_method?: "automatic" | "instant";
            [k: string]: unknown;
          };
          wechat_pay?: {
            app_id?: string;
            client: "android" | "ios" | "web";
            setup_future_usage?: "none";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        payment_method_types?: (
          | "acss_debit"
          | "affirm"
          | "afterpay_clearpay"
          | "alipay"
          | "au_becs_debit"
          | "bacs_debit"
          | "bancontact"
          | "blik"
          | "boleto"
          | "card"
          | "cashapp"
          | "customer_balance"
          | "eps"
          | "fpx"
          | "giropay"
          | "grabpay"
          | "ideal"
          | "klarna"
          | "konbini"
          | "link"
          | "oxxo"
          | "p24"
          | "paynow"
          | "paypal"
          | "pix"
          | "promptpay"
          | "sepa_debit"
          | "sofort"
          | "us_bank_account"
          | "wechat_pay"
          | "zip"
        )[];
        phone_number_collection?: { enabled: boolean; [k: string]: unknown };
        redirect_on_completion?: "always" | "if_required" | "never";
        return_url?: string;
        setup_intent_data?: {
          description?: string;
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          [k: string]: unknown;
        };
        shipping_address_collection?: {
          allowed_countries: (
            | "AC"
            | "AD"
            | "AE"
            | "AF"
            | "AG"
            | "AI"
            | "AL"
            | "AM"
            | "AO"
            | "AQ"
            | "AR"
            | "AT"
            | "AU"
            | "AW"
            | "AX"
            | "AZ"
            | "BA"
            | "BB"
            | "BD"
            | "BE"
            | "BF"
            | "BG"
            | "BH"
            | "BI"
            | "BJ"
            | "BL"
            | "BM"
            | "BN"
            | "BO"
            | "BQ"
            | "BR"
            | "BS"
            | "BT"
            | "BV"
            | "BW"
            | "BY"
            | "BZ"
            | "CA"
            | "CD"
            | "CF"
            | "CG"
            | "CH"
            | "CI"
            | "CK"
            | "CL"
            | "CM"
            | "CN"
            | "CO"
            | "CR"
            | "CV"
            | "CW"
            | "CY"
            | "CZ"
            | "DE"
            | "DJ"
            | "DK"
            | "DM"
            | "DO"
            | "DZ"
            | "EC"
            | "EE"
            | "EG"
            | "EH"
            | "ER"
            | "ES"
            | "ET"
            | "FI"
            | "FJ"
            | "FK"
            | "FO"
            | "FR"
            | "GA"
            | "GB"
            | "GD"
            | "GE"
            | "GF"
            | "GG"
            | "GH"
            | "GI"
            | "GL"
            | "GM"
            | "GN"
            | "GP"
            | "GQ"
            | "GR"
            | "GS"
            | "GT"
            | "GU"
            | "GW"
            | "GY"
            | "HK"
            | "HN"
            | "HR"
            | "HT"
            | "HU"
            | "ID"
            | "IE"
            | "IL"
            | "IM"
            | "IN"
            | "IO"
            | "IQ"
            | "IS"
            | "IT"
            | "JE"
            | "JM"
            | "JO"
            | "JP"
            | "KE"
            | "KG"
            | "KH"
            | "KI"
            | "KM"
            | "KN"
            | "KR"
            | "KW"
            | "KY"
            | "KZ"
            | "LA"
            | "LB"
            | "LC"
            | "LI"
            | "LK"
            | "LR"
            | "LS"
            | "LT"
            | "LU"
            | "LV"
            | "LY"
            | "MA"
            | "MC"
            | "MD"
            | "ME"
            | "MF"
            | "MG"
            | "MK"
            | "ML"
            | "MM"
            | "MN"
            | "MO"
            | "MQ"
            | "MR"
            | "MS"
            | "MT"
            | "MU"
            | "MV"
            | "MW"
            | "MX"
            | "MY"
            | "MZ"
            | "NA"
            | "NC"
            | "NE"
            | "NG"
            | "NI"
            | "NL"
            | "NO"
            | "NP"
            | "NR"
            | "NU"
            | "NZ"
            | "OM"
            | "PA"
            | "PE"
            | "PF"
            | "PG"
            | "PH"
            | "PK"
            | "PL"
            | "PM"
            | "PN"
            | "PR"
            | "PS"
            | "PT"
            | "PY"
            | "QA"
            | "RE"
            | "RO"
            | "RS"
            | "RU"
            | "RW"
            | "SA"
            | "SB"
            | "SC"
            | "SE"
            | "SG"
            | "SH"
            | "SI"
            | "SJ"
            | "SK"
            | "SL"
            | "SM"
            | "SN"
            | "SO"
            | "SR"
            | "SS"
            | "ST"
            | "SV"
            | "SX"
            | "SZ"
            | "TA"
            | "TC"
            | "TD"
            | "TF"
            | "TG"
            | "TH"
            | "TJ"
            | "TK"
            | "TL"
            | "TM"
            | "TN"
            | "TO"
            | "TR"
            | "TT"
            | "TV"
            | "TW"
            | "TZ"
            | "UA"
            | "UG"
            | "US"
            | "UY"
            | "UZ"
            | "VA"
            | "VC"
            | "VE"
            | "VG"
            | "VN"
            | "VU"
            | "WF"
            | "WS"
            | "XK"
            | "YE"
            | "YT"
            | "ZA"
            | "ZM"
            | "ZW"
            | "ZZ"
          )[];
          [k: string]: unknown;
        };
        shipping_options?: {
          shipping_rate?: string;
          shipping_rate_data?: {
            delivery_estimate?: {
              maximum?: {
                unit: "business_day" | "day" | "hour" | "month" | "week";
                value: number;
                [k: string]: unknown;
              };
              minimum?: {
                unit: "business_day" | "day" | "hour" | "month" | "week";
                value: number;
                [k: string]: unknown;
              };
              [k: string]: unknown;
            };
            display_name: string;
            fixed_amount?: {
              amount: number;
              currency: string;
              currency_options?: {
                [k: string]: {
                  amount: number;
                  tax_behavior?: "exclusive" | "inclusive" | "unspecified";
                  [k: string]: unknown;
                };
              };
              [k: string]: unknown;
            };
            metadata?: { [k: string]: string };
            tax_behavior?: "exclusive" | "inclusive" | "unspecified";
            tax_code?: string;
            type?: "fixed_amount";
            [k: string]: unknown;
          };
          [k: string]: unknown;
        }[];
        submit_type?: "auto" | "book" | "donate" | "pay";
        subscription_data?: {
          application_fee_percent?: number;
          billing_cycle_anchor?: number;
          default_tax_rates?: string[];
          description?: string;
          metadata?: { [k: string]: string };
          on_behalf_of?: string;
          proration_behavior?: "create_prorations" | "none";
          transfer_data?: {
            amount_percent?: number;
            destination: string;
            [k: string]: unknown;
          };
          trial_end?: number;
          trial_period_days?: number;
          trial_settings?: {
            end_behavior: {
              missing_payment_method: "cancel" | "create_invoice" | "pause";
              [k: string]: unknown;
            };
            [k: string]: unknown;
          };
          [k: string]: unknown;
        };
        success_url?: string;
        tax_id_collection?: { enabled: boolean; [k: string]: unknown };
        ui_mode?: "embedded" | "hosted";
      }
    ) {
      const url = new URL(`https://api.stripe.com/v1/checkout/sessions`);
    
      const response = await fetch(url, {
        method: "POST",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded",
          Authorization: "Bearer " + auth.token,
        },
        body: encodeParams(body),
      });
      if (!response.ok) {
        const text = await response.text();
        throw new Error(`${response.status} ${text}`);
      }
      return await response.json();
    }
    
    function encodeParams(o: any) {
      function iter(o: any, path: string) {
        if (Array.isArray(o)) {
          o.forEach(function (a) {
            iter(a, path + "[]");
          });
          return;
        }
        if (o !== null && typeof o === "object") {
          Object.keys(o).forEach(function (k) {
            iter(o[k], path + "[" + k + "]");
          });
          return;
        }
        data.push(path + "=" + o);
      }
      const data: string[] = [];
      Object.keys(o).forEach(function (k) {
        if (o[k] !== undefined) {
          iter(o[k], k);
        }
      });
      return new URLSearchParams(data.join("&"));
    }
    

    Submitted by hugo697 922 days ago