{"version":3,"sources":["../src/checkout.ts"],"sourcesContent":["/**\n * Interface for checkout operations\n */\nexport interface CheckoutOperations {\n  /**\n   * Creates a Shopify checkout URL with pre-filled customer information and cart items.\n   */\n  createUrl(params: {\n    email: string;\n    items: Array<{ productVariantId: string; quantity: string }>;\n    address: {\n      firstName: string;\n      lastName: string;\n      address1: string;\n      city: string;\n      zip: string;\n      country: string;\n      province: string;\n      phone: string;\n    };\n  }): string;\n}\n\n/**\n * Creates checkout operations for a store instance\n */\nexport function createCheckoutOperations(baseUrl: string): CheckoutOperations {\n  return {\n    /**\n     * Creates a Shopify checkout URL with pre-filled customer information and cart items.\n     *\n     * @param params - Checkout parameters\n     * @param params.email - Customer's email address (must be valid email format)\n     * @param params.items - Array of products to add to cart\n     * @param params.items[].productVariantId - Shopify product variant ID\n     * @param params.items[].quantity - Quantity as string (must be positive number)\n     * @param params.address - Customer's shipping address\n     * @param params.address.firstName - Customer's first name\n     * @param params.address.lastName - Customer's last name\n     * @param params.address.address1 - Street address\n     * @param params.address.city - City name\n     * @param params.address.zip - Postal/ZIP code\n     * @param params.address.country - Country name\n     * @param params.address.province - State/Province name\n     * @param params.address.phone - Phone number\n     *\n     * @returns {string} Complete Shopify checkout URL with pre-filled information\n     *\n     * @throws {Error} When email is invalid, items array is empty, or required address fields are missing\n     *\n     * @example\n     * ```typescript\n     * const shop = new ShopClient('https://exampleshop.com');\n     * const checkoutUrl = await shop.checkout.create([\n     *   { variantId: '123', quantity: 2 },\n     *   { variantId: '456', quantity: 1 }\n     * ]);\n     * console.log(checkoutUrl);\n     * ```\n     */\n    createUrl: ({\n      email,\n      items,\n      address,\n    }: {\n      email: string;\n      items: Array<{ productVariantId: string; quantity: string }>;\n      address: {\n        firstName: string;\n        lastName: string;\n        address1: string;\n        city: string;\n        zip: string;\n        country: string;\n        province: string;\n        phone: string;\n      };\n    }) => {\n      // Validate and sanitize inputs\n      if (!email || !email.includes(\"@\")) {\n        throw new Error(\"Invalid email address\");\n      }\n\n      if (!items || items.length === 0) {\n        throw new Error(\"Items array cannot be empty\");\n      }\n\n      // Validate items\n      for (const item of items) {\n        if (!item.productVariantId || !item.quantity) {\n          throw new Error(\"Each item must have productVariantId and quantity\");\n        }\n        // Ensure quantity is a positive number\n        const qty = Number.parseInt(item.quantity, 10);\n\n        if (Number.isNaN(qty) || qty <= 0) {\n          throw new Error(\"Quantity must be a positive number\");\n        }\n      }\n\n      // Validate required address fields\n      const requiredFields = [\n        \"firstName\",\n        \"lastName\",\n        \"address1\",\n        \"city\",\n        \"zip\",\n        \"country\",\n      ];\n\n      for (const field of requiredFields) {\n        if (!address[field as keyof typeof address]) {\n          throw new Error(`Address field '${field}' is required`);\n        }\n      }\n\n      // Properly encode all URL parameters to prevent injection attacks\n      const cartPath = items\n        .map(\n          (item) =>\n            `${encodeURIComponent(item.productVariantId)}:${encodeURIComponent(item.quantity)}`\n        )\n        .join(\",\");\n\n      const params = new URLSearchParams({\n        \"checkout[email]\": email,\n        \"checkout[shipping_address][first_name]\": address.firstName,\n        \"checkout[shipping_address][last_name]\": address.lastName,\n        \"checkout[shipping_address][address1]\": address.address1,\n        \"checkout[shipping_address][city]\": address.city,\n        \"checkout[shipping_address][zip]\": address.zip,\n        \"checkout[shipping_address][country]\": address.country,\n        \"checkout[shipping_address][province]\": address.province,\n        \"checkout[shipping_address][phone]\": address.phone,\n      });\n\n      return `${baseUrl}cart/${cartPath}?${params.toString()}`;\n    },\n  };\n}\n"],"mappings":";AA0BO,SAAS,yBAAyB,SAAqC;AAC5E,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiCL,WAAW,CAAC;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAaM;AAEJ,UAAI,CAAC,SAAS,CAAC,MAAM,SAAS,GAAG,GAAG;AAClC,cAAM,IAAI,MAAM,uBAAuB;AAAA,MACzC;AAEA,UAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAGA,iBAAW,QAAQ,OAAO;AACxB,YAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,UAAU;AAC5C,gBAAM,IAAI,MAAM,mDAAmD;AAAA,QACrE;AAEA,cAAM,MAAM,OAAO,SAAS,KAAK,UAAU,EAAE;AAE7C,YAAI,OAAO,MAAM,GAAG,KAAK,OAAO,GAAG;AACjC,gBAAM,IAAI,MAAM,oCAAoC;AAAA,QACtD;AAAA,MACF;AAGA,YAAM,iBAAiB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,iBAAW,SAAS,gBAAgB;AAClC,YAAI,CAAC,QAAQ,KAA6B,GAAG;AAC3C,gBAAM,IAAI,MAAM,kBAAkB,KAAK,eAAe;AAAA,QACxD;AAAA,MACF;AAGA,YAAM,WAAW,MACd;AAAA,QACC,CAAC,SACC,GAAG,mBAAmB,KAAK,gBAAgB,CAAC,IAAI,mBAAmB,KAAK,QAAQ,CAAC;AAAA,MACrF,EACC,KAAK,GAAG;AAEX,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,mBAAmB;AAAA,QACnB,0CAA0C,QAAQ;AAAA,QAClD,yCAAyC,QAAQ;AAAA,QACjD,wCAAwC,QAAQ;AAAA,QAChD,oCAAoC,QAAQ;AAAA,QAC5C,mCAAmC,QAAQ;AAAA,QAC3C,uCAAuC,QAAQ;AAAA,QAC/C,wCAAwC,QAAQ;AAAA,QAChD,qCAAqC,QAAQ;AAAA,MAC/C,CAAC;AAED,aAAO,GAAG,OAAO,QAAQ,QAAQ,IAAI,OAAO,SAAS,CAAC;AAAA,IACxD;AAAA,EACF;AACF;","names":[]}