{"version":3,"sources":["../src/index.ts","../src/checkout/checkout.ts","../src/customerPortal/customerPortal.ts","../src/webhooks/webhooks.ts"],"sourcesContent":["export * from \"./checkout/checkout\";\nexport * from \"./customerPortal/customerPortal\";\nexport * from \"./webhooks/webhooks\";\n","import { Polar } from \"@polar-sh/sdk\";\nimport { NextResponse } from \"next/server\";\nimport type { NextRequest } from \"next/server\";\n\nexport interface CheckoutConfig {\n\taccessToken?: string;\n\tsuccessUrl?: string;\n\treturnUrl?: string;\n\tincludeCheckoutId?: boolean;\n\tserver?: \"sandbox\" | \"production\";\n\ttheme?: \"light\" | \"dark\";\n}\n\nexport const Checkout = ({\n\taccessToken,\n\tsuccessUrl,\n\treturnUrl,\n\tserver,\n\ttheme,\n\tincludeCheckoutId = true,\n}: CheckoutConfig) => {\n\tconst polar = new Polar({\n\t\taccessToken,\n\t\tserver,\n\t});\n\n\treturn async (req: NextRequest) => {\n\t\tconst url = new URL(req.url);\n\t\tconst products = url.searchParams.getAll(\"products\");\n\n\t\tif (products.length === 0) {\n\t\t\treturn NextResponse.json(\n\t\t\t\t{ error: \"Missing products in query params\" },\n\t\t\t\t{ status: 400 },\n\t\t\t);\n\t\t}\n\n\t\tconst success = successUrl ? new URL(successUrl) : undefined;\n\n\t\tif (success && includeCheckoutId) {\n\t\t\tsuccess.searchParams.set(\"checkoutId\", \"{CHECKOUT_ID}\");\n\t\t}\n\n\t\tconst retUrl = returnUrl ? new URL(returnUrl) : undefined;\n\n\t\ttry {\n\t\t\tconst result = await polar.checkouts.create({\n\t\t\t\tproducts,\n\t\t\t\tsuccessUrl: success ? decodeURI(success.toString()) : undefined,\n\t\t\t\tcustomerId: url.searchParams.get(\"customerId\") ?? undefined,\n\t\t\t\texternalCustomerId:\n\t\t\t\t\turl.searchParams.get(\"customerExternalId\") ?? undefined,\n\t\t\t\tcustomerEmail: url.searchParams.get(\"customerEmail\") ?? undefined,\n\t\t\t\tcustomerName: url.searchParams.get(\"customerName\") ?? undefined,\n\t\t\t\tcustomerBillingAddress: url.searchParams.has(\"customerBillingAddress\")\n\t\t\t\t\t? JSON.parse(url.searchParams.get(\"customerBillingAddress\") ?? \"{}\")\n\t\t\t\t\t: undefined,\n\t\t\t\tcustomerTaxId: url.searchParams.get(\"customerTaxId\") ?? undefined,\n\t\t\t\tcustomerIpAddress:\n\t\t\t\t\turl.searchParams.get(\"customerIpAddress\") ?? undefined,\n\t\t\t\tcustomerMetadata: url.searchParams.has(\"customerMetadata\")\n\t\t\t\t\t? JSON.parse(url.searchParams.get(\"customerMetadata\") ?? \"{}\")\n\t\t\t\t\t: undefined,\n\t\t\t\tallowDiscountCodes: url.searchParams.has(\"allowDiscountCodes\")\n\t\t\t\t\t? url.searchParams.get(\"allowDiscountCodes\") === \"true\"\n\t\t\t\t\t: undefined,\n\t\t\t\tdiscountId: url.searchParams.get(\"discountId\") ?? undefined,\n\t\t\t\tmetadata: url.searchParams.has(\"metadata\")\n\t\t\t\t\t? JSON.parse(url.searchParams.get(\"metadata\") ?? \"{}\")\n\t\t\t\t\t: undefined,\n\t\t\t\tseats: url.searchParams.has(\"seats\")\n\t\t\t\t\t? Number.parseInt(url.searchParams.get(\"seats\") ?? \"1\", 10)\n\t\t\t\t\t: undefined,\n\t\t\t\treturnUrl: retUrl ? decodeURI(retUrl.toString()) : undefined,\n\t\t\t});\n\n\t\t\tconst redirectUrl = new URL(result.url);\n\n\t\t\tif (theme) {\n\t\t\t\tredirectUrl.searchParams.set(\"theme\", theme);\n\t\t\t}\n\n\t\t\treturn NextResponse.redirect(redirectUrl.toString());\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn NextResponse.error();\n\t\t}\n\t};\n};\n","import { Polar } from \"@polar-sh/sdk\";\nimport { type NextRequest, NextResponse } from \"next/server\";\n\ninterface CustomerPortalBaseConfig {\n\taccessToken: string;\n\tserver: \"sandbox\" | \"production\";\n\treturnUrl?: string;\n}\n\ninterface CustomerPortalCustomerIdConfig extends CustomerPortalBaseConfig {\n\tgetCustomerId: (req: NextRequest) => Promise<string>;\n\tgetExternalCustomerId?: never;\n}\n\ninterface CustomerPortalExternalCustomerIdConfig\n\textends CustomerPortalBaseConfig {\n\tgetCustomerId?: never;\n\tgetExternalCustomerId: (req: NextRequest) => Promise<string>;\n}\n\nfunction configIsExternalCustomerIdConfig(\n\tconfig: CustomerPortalConfig,\n): config is CustomerPortalExternalCustomerIdConfig {\n\treturn typeof config.getExternalCustomerId === \"function\";\n}\n\nexport type CustomerPortalConfig =\n\t| CustomerPortalCustomerIdConfig\n\t| CustomerPortalExternalCustomerIdConfig;\n\nexport const CustomerPortal = (config: CustomerPortalConfig) => {\n\tconst { accessToken, server, returnUrl } = config;\n\n\tconst polar = new Polar({\n\t\taccessToken,\n\t\tserver,\n\t});\n\n\treturn async (req: NextRequest) => {\n\t\tconst decodedReturnUrl = returnUrl\n\t\t\t? decodeURI(new URL(returnUrl).toString())\n\t\t\t: undefined;\n\n\t\tif (configIsExternalCustomerIdConfig(config)) {\n\t\t\tconst externalCustomerId = await config.getExternalCustomerId(req);\n\n\t\t\tif (!externalCustomerId) {\n\t\t\t\treturn NextResponse.json(\n\t\t\t\t\t{ error: \"externalCustomerId not defined\" },\n\t\t\t\t\t{ status: 400 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst { customerPortalUrl } = await polar.customerSessions.create({\n\t\t\t\t\treturnUrl: decodedReturnUrl,\n\t\t\t\t\texternalCustomerId,\n\t\t\t\t});\n\n\t\t\t\treturn NextResponse.redirect(customerPortalUrl);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t\treturn NextResponse.error();\n\t\t\t}\n\t\t}\n\n\t\tconst customerId = await config.getCustomerId(req);\n\n\t\tif (!customerId) {\n\t\t\treturn NextResponse.json(\n\t\t\t\t{ error: \"customerId not defined\" },\n\t\t\t\t{ status: 400 },\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { customerPortalUrl } = await polar.customerSessions.create({\n\t\t\t\treturnUrl: decodedReturnUrl,\n\t\t\t\tcustomerId,\n\t\t\t});\n\n\t\t\treturn NextResponse.redirect(customerPortalUrl);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn NextResponse.error();\n\t\t}\n\t};\n};\n","import {\n\ttype WebhooksConfig,\n\thandleWebhookPayload,\n} from \"@polar-sh/adapter-utils\";\nimport {\n\tWebhookVerificationError,\n\tvalidateEvent,\n} from \"@polar-sh/sdk/webhooks\";\nimport { type NextRequest, NextResponse } from \"next/server\";\n\nexport {\n\ttype EntitlementContext,\n\ttype EntitlementHandler,\n\ttype EntitlementProperties,\n\tEntitlementStrategy,\n\tEntitlements,\n} from \"@polar-sh/adapter-utils\";\n\nexport const Webhooks = ({\n\twebhookSecret,\n\tentitlements,\n\tonPayload,\n\t...eventHandlers\n}: WebhooksConfig) => {\n\treturn async (request: NextRequest) => {\n\t\tconst requestBody = await request.text();\n\n\t\tconst webhookHeaders = {\n\t\t\t\"webhook-id\": request.headers.get(\"webhook-id\") ?? \"\",\n\t\t\t\"webhook-timestamp\": request.headers.get(\"webhook-timestamp\") ?? \"\",\n\t\t\t\"webhook-signature\": request.headers.get(\"webhook-signature\") ?? \"\",\n\t\t};\n\n\t\tlet webhookPayload: ReturnType<typeof validateEvent>;\n\t\ttry {\n\t\t\twebhookPayload = validateEvent(\n\t\t\t\trequestBody,\n\t\t\t\twebhookHeaders,\n\t\t\t\twebhookSecret,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (error instanceof WebhookVerificationError) {\n\t\t\t\treturn NextResponse.json({ received: false }, { status: 403 });\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tawait handleWebhookPayload(webhookPayload, {\n\t\t\twebhookSecret,\n\t\t\tentitlements,\n\t\t\tonPayload,\n\t\t\t...eventHandlers,\n\t\t});\n\n\t\treturn NextResponse.json({ received: true });\n\t};\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAsB;AACtB,oBAA6B;AAYtB,IAAM,WAAW,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AACrB,MAAsB;AACrB,QAAM,QAAQ,IAAI,iBAAM;AAAA,IACvB;AAAA,IACA;AAAA,EACD,CAAC;AAED,SAAO,OAAO,QAAqB;AAClC,UAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,UAAM,WAAW,IAAI,aAAa,OAAO,UAAU;AAEnD,QAAI,SAAS,WAAW,GAAG;AAC1B,aAAO,2BAAa;AAAA,QACnB,EAAE,OAAO,mCAAmC;AAAA,QAC5C,EAAE,QAAQ,IAAI;AAAA,MACf;AAAA,IACD;AAEA,UAAM,UAAU,aAAa,IAAI,IAAI,UAAU,IAAI;AAEnD,QAAI,WAAW,mBAAmB;AACjC,cAAQ,aAAa,IAAI,cAAc,eAAe;AAAA,IACvD;AAEA,UAAM,SAAS,YAAY,IAAI,IAAI,SAAS,IAAI;AAEhD,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,UAAU,OAAO;AAAA,QAC3C;AAAA,QACA,YAAY,UAAU,UAAU,QAAQ,SAAS,CAAC,IAAI;AAAA,QACtD,YAAY,IAAI,aAAa,IAAI,YAAY,KAAK;AAAA,QAClD,oBACC,IAAI,aAAa,IAAI,oBAAoB,KAAK;AAAA,QAC/C,eAAe,IAAI,aAAa,IAAI,eAAe,KAAK;AAAA,QACxD,cAAc,IAAI,aAAa,IAAI,cAAc,KAAK;AAAA,QACtD,wBAAwB,IAAI,aAAa,IAAI,wBAAwB,IAClE,KAAK,MAAM,IAAI,aAAa,IAAI,wBAAwB,KAAK,IAAI,IACjE;AAAA,QACH,eAAe,IAAI,aAAa,IAAI,eAAe,KAAK;AAAA,QACxD,mBACC,IAAI,aAAa,IAAI,mBAAmB,KAAK;AAAA,QAC9C,kBAAkB,IAAI,aAAa,IAAI,kBAAkB,IACtD,KAAK,MAAM,IAAI,aAAa,IAAI,kBAAkB,KAAK,IAAI,IAC3D;AAAA,QACH,oBAAoB,IAAI,aAAa,IAAI,oBAAoB,IAC1D,IAAI,aAAa,IAAI,oBAAoB,MAAM,SAC/C;AAAA,QACH,YAAY,IAAI,aAAa,IAAI,YAAY,KAAK;AAAA,QAClD,UAAU,IAAI,aAAa,IAAI,UAAU,IACtC,KAAK,MAAM,IAAI,aAAa,IAAI,UAAU,KAAK,IAAI,IACnD;AAAA,QACH,OAAO,IAAI,aAAa,IAAI,OAAO,IAChC,OAAO,SAAS,IAAI,aAAa,IAAI,OAAO,KAAK,KAAK,EAAE,IACxD;AAAA,QACH,WAAW,SAAS,UAAU,OAAO,SAAS,CAAC,IAAI;AAAA,MACpD,CAAC;AAED,YAAM,cAAc,IAAI,IAAI,OAAO,GAAG;AAEtC,UAAI,OAAO;AACV,oBAAY,aAAa,IAAI,SAAS,KAAK;AAAA,MAC5C;AAEA,aAAO,2BAAa,SAAS,YAAY,SAAS,CAAC;AAAA,IACpD,SAAS,OAAO;AACf,cAAQ,MAAM,KAAK;AACnB,aAAO,2BAAa,MAAM;AAAA,IAC3B;AAAA,EACD;AACD;;;ACxFA,IAAAA,cAAsB;AACtB,IAAAC,iBAA+C;AAmB/C,SAAS,iCACR,QACmD;AACnD,SAAO,OAAO,OAAO,0BAA0B;AAChD;AAMO,IAAM,iBAAiB,CAAC,WAAiC;AAC/D,QAAM,EAAE,aAAa,QAAQ,UAAU,IAAI;AAE3C,QAAM,QAAQ,IAAI,kBAAM;AAAA,IACvB;AAAA,IACA;AAAA,EACD,CAAC;AAED,SAAO,OAAO,QAAqB;AAClC,UAAM,mBAAmB,YACtB,UAAU,IAAI,IAAI,SAAS,EAAE,SAAS,CAAC,IACvC;AAEH,QAAI,iCAAiC,MAAM,GAAG;AAC7C,YAAM,qBAAqB,MAAM,OAAO,sBAAsB,GAAG;AAEjE,UAAI,CAAC,oBAAoB;AACxB,eAAO,4BAAa;AAAA,UACnB,EAAE,OAAO,iCAAiC;AAAA,UAC1C,EAAE,QAAQ,IAAI;AAAA,QACf;AAAA,MACD;AAEA,UAAI;AACH,cAAM,EAAE,kBAAkB,IAAI,MAAM,MAAM,iBAAiB,OAAO;AAAA,UACjE,WAAW;AAAA,UACX;AAAA,QACD,CAAC;AAED,eAAO,4BAAa,SAAS,iBAAiB;AAAA,MAC/C,SAAS,OAAO;AACf,gBAAQ,MAAM,KAAK;AACnB,eAAO,4BAAa,MAAM;AAAA,MAC3B;AAAA,IACD;AAEA,UAAM,aAAa,MAAM,OAAO,cAAc,GAAG;AAEjD,QAAI,CAAC,YAAY;AAChB,aAAO,4BAAa;AAAA,QACnB,EAAE,OAAO,yBAAyB;AAAA,QAClC,EAAE,QAAQ,IAAI;AAAA,MACf;AAAA,IACD;AAEA,QAAI;AACH,YAAM,EAAE,kBAAkB,IAAI,MAAM,MAAM,iBAAiB,OAAO;AAAA,QACjE,WAAW;AAAA,QACX;AAAA,MACD,CAAC;AAED,aAAO,4BAAa,SAAS,iBAAiB;AAAA,IAC/C,SAAS,OAAO;AACf,cAAQ,MAAM,KAAK;AACnB,aAAO,4BAAa,MAAM;AAAA,IAC3B;AAAA,EACD;AACD;;;ACvFA,2BAGO;AACP,sBAGO;AACP,IAAAC,iBAA+C;AAE/C,IAAAC,wBAMO;AAEA,IAAM,WAAW,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,MAAsB;AACrB,SAAO,OAAO,YAAyB;AACtC,UAAM,cAAc,MAAM,QAAQ,KAAK;AAEvC,UAAM,iBAAiB;AAAA,MACtB,cAAc,QAAQ,QAAQ,IAAI,YAAY,KAAK;AAAA,MACnD,qBAAqB,QAAQ,QAAQ,IAAI,mBAAmB,KAAK;AAAA,MACjE,qBAAqB,QAAQ,QAAQ,IAAI,mBAAmB,KAAK;AAAA,IAClE;AAEA,QAAI;AACJ,QAAI;AACH,2BAAiB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD,SAAS,OAAO;AACf,UAAI,iBAAiB,0CAA0B;AAC9C,eAAO,4BAAa,KAAK,EAAE,UAAU,MAAM,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC9D;AAEA,YAAM;AAAA,IACP;AAEA,cAAM,2CAAqB,gBAAgB;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACJ,CAAC;AAED,WAAO,4BAAa,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,EAC5C;AACD;","names":["import_sdk","import_server","import_server","import_adapter_utils"]}