priceos 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -1
- package/dist/{chunk-SMK7KTGQ.js → chunk-E3XCMBGY.js} +70 -26
- package/dist/chunk-E3XCMBGY.js.map +1 -0
- package/dist/client.d.ts +2 -3
- package/dist/embed/pricing-table.global.js +7 -7
- package/dist/gen/openapi.d.ts +192 -312
- package/dist/index.cjs +69 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/next.cjs +215 -38
- package/dist/next.cjs.map +1 -1
- package/dist/next.js +147 -14
- package/dist/next.js.map +1 -1
- package/dist/react.cjs +104 -73
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.ts +29 -6
- package/dist/react.js +102 -73
- package/dist/react.js.map +1 -1
- package/dist/types.d.ts +3 -6
- package/package.json +1 -1
- package/dist/chunk-SMK7KTGQ.js.map +0 -1
package/dist/next.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/next.ts"],"sourcesContent":["import { PriceOS, PriceOSError } from \"./client\";\nimport type { CreateCheckoutRequest, TrackUsageResponse } from \"./types\";\n\nexport type PriceOSGetCustomerId = (\n request: Request\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSPagesRequest = {\n method?: string;\n headers?: Record<string, string | string[] | undefined>;\n url?: string;\n socket?: { encrypted?: boolean };\n body?: unknown;\n};\n\nexport type PriceOSPagesResponse = {\n status?: (code: number) => PriceOSPagesResponse;\n setHeader?: (name: string, value: string | string[]) => void;\n end?: (body?: string) => void;\n statusCode?: number;\n};\n\nexport type PriceOSPagesGetCustomerId = (\n request: PriceOSPagesRequest,\n normalizedRequest: Request\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSNextHandlerOptions = {\n apiKey?: string;\n basePath?: string;\n getCustomerId?: PriceOSGetCustomerId;\n};\n\nexport type PriceOSRouteHandler = (request: Request) => Promise<Response>;\nexport type PriceOSRouteMethodHandlers = PriceOSRouteHandler & {\n GET: PriceOSRouteHandler;\n POST: PriceOSRouteHandler;\n};\n\nexport type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, \"getCustomerId\"> & {\n getCustomerId?: PriceOSPagesGetCustomerId;\n};\n\ntype TrackUsageRequestBody = {\n featureKey: string;\n amount?: number;\n idempotencyKey?: string;\n eventKey?: string;\n occurredAt?: number;\n metadata?: Record<string, string>;\n};\n\ntype CheckoutRequestBody = {\n stripePriceId: string;\n successUrl: string;\n cancelUrl?: string;\n customerId?: string;\n metadata?: Record<string, string>;\n};\n\nconst DEFAULT_BASE_PATH = \"/api/priceos\";\nconst CUSTOMER_PATH = \"v1/customer\";\nconst FEATURE_ACCESS_PATH = \"v1/feature-access\";\nconst TRACK_USAGE_PATH = \"v1/usage\";\nconst PRICING_TABLE_PATH = \"v1/pricing-table\";\nconst CHECKOUT_PATH = \"v1/checkout\";\n\nconst normalizePath = (value: string) => value.replace(/^\\/+/, \"\");\nconst logTrackUsageError = (message: string, details?: Record<string, unknown>) => {\n if (details === undefined) {\n console.error(\"[priceos/next][trackUsage]\", message);\n return;\n }\n console.error(\"[priceos/next][trackUsage]\", message, details);\n};\n\nconst jsonResponse = (status: number, body: unknown) =>\n new Response(JSON.stringify(body), {\n status,\n headers: { \"content-type\": \"application/json\" },\n });\n\nconst normalizeCustomerId = (value: string | null | undefined) => {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim();\n return normalized.length ? normalized : null;\n};\n\nconst parseTrackUsageBody = async (request: Request): Promise<{ data?: TrackUsageRequestBody; error?: string }> => {\n let rawBody: unknown;\n try {\n rawBody = await request.json();\n } catch {\n return { error: \"Invalid JSON body\" };\n }\n\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return { error: \"Invalid JSON body\" };\n }\n\n const body = rawBody as Record<string, unknown>;\n\n if (\"customerId\" in body) {\n return { error: \"customerId must be set via getCustomerId\" };\n }\n\n const featureKey = typeof body.featureKey === \"string\" ? body.featureKey.trim() : \"\";\n if (!featureKey) {\n return { error: \"featureKey is required\" };\n }\n\n const amountRaw = body.amount;\n const amount = amountRaw === undefined ? 1 : Number(amountRaw);\n if (!Number.isFinite(amount) || amount <= 0) {\n return { error: \"amount must be a positive number\" };\n }\n\n const idempotencyKeyRaw = body.idempotencyKey ?? body.eventKey;\n const idempotencyKey =\n idempotencyKeyRaw === undefined\n ? undefined\n : typeof idempotencyKeyRaw === \"string\" && idempotencyKeyRaw.trim().length > 0\n ? idempotencyKeyRaw.trim()\n : null;\n if (idempotencyKey === null) {\n return { error: \"idempotencyKey must be a non-empty string\" };\n }\n\n const occurredAtRaw = body.occurredAt;\n const occurredAt = occurredAtRaw === undefined ? undefined : Number(occurredAtRaw);\n if (occurredAtRaw !== undefined && !Number.isFinite(occurredAt)) {\n return { error: \"occurredAt must be a valid Unix timestamp (ms)\" };\n }\n\n const metadataRaw = body.metadata;\n if (metadataRaw !== undefined) {\n if (!metadataRaw || typeof metadataRaw !== \"object\" || Array.isArray(metadataRaw)) {\n return { error: \"metadata must be an object of string values\" };\n }\n for (const [key, value] of Object.entries(metadataRaw as Record<string, unknown>)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n return { error: \"metadata must be an object of string values\" };\n }\n }\n }\n\n return {\n data: {\n featureKey,\n amount,\n ...(idempotencyKey ? { idempotencyKey } : {}),\n ...(occurredAt !== undefined ? { occurredAt } : {}),\n ...(metadataRaw ? { metadata: metadataRaw as Record<string, string> } : {}),\n },\n };\n};\n\nconst resolveCustomerId = async (\n getCustomerId: PriceOSGetCustomerId,\n request: Request\n): Promise<{ customerId?: string; errorResponse?: Response }> => {\n let customerId: string | null | undefined;\n try {\n customerId = await getCustomerId(request);\n } catch {\n return { errorResponse: jsonResponse(500, { error: \"Failed to resolve customerId\" }) };\n }\n\n const normalizedCustomerId = normalizeCustomerId(customerId);\n if (!normalizedCustomerId) {\n return { errorResponse: jsonResponse(401, { error: \"Customer not identified\" }) };\n }\n\n return { customerId: normalizedCustomerId };\n};\n\nconst resolveOptionalCustomerId = async (\n getCustomerId: PriceOSGetCustomerId | undefined,\n request: Request\n): Promise<{ customerId: string | null; errorResponse?: Response }> => {\n if (!getCustomerId) return { customerId: null };\n let customerId: string | null | undefined;\n try {\n customerId = await getCustomerId(request);\n } catch {\n return { customerId: null, errorResponse: jsonResponse(500, { error: \"Failed to resolve customerId\" }) };\n }\n return { customerId: normalizeCustomerId(customerId) };\n};\n\nconst parseCheckoutBody = async (request: Request): Promise<{ data?: CheckoutRequestBody; error?: string }> => {\n let rawBody: unknown;\n try {\n rawBody = await request.json();\n } catch {\n return { error: \"Invalid JSON body\" };\n }\n\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return { error: \"Invalid JSON body\" };\n }\n\n const body = rawBody as Record<string, unknown>;\n const stripePriceId =\n typeof body.stripePriceId === \"string\" && body.stripePriceId.trim().length > 0\n ? body.stripePriceId.trim()\n : \"\";\n if (!stripePriceId) {\n return { error: \"stripePriceId is required\" };\n }\n\n const successUrl =\n typeof body.successUrl === \"string\" && body.successUrl.trim().length > 0\n ? body.successUrl.trim()\n : \"\";\n if (!successUrl) {\n return { error: \"successUrl is required\" };\n }\n\n const cancelUrl =\n typeof body.cancelUrl === \"string\" && body.cancelUrl.trim().length > 0\n ? body.cancelUrl.trim()\n : undefined;\n const customerId =\n typeof body.customerId === \"string\" && body.customerId.trim().length > 0\n ? body.customerId.trim()\n : undefined;\n\n const metadataRaw = body.metadata;\n if (metadataRaw !== undefined) {\n if (!metadataRaw || typeof metadataRaw !== \"object\" || Array.isArray(metadataRaw)) {\n return { error: \"metadata must be an object of string values\" };\n }\n for (const [key, value] of Object.entries(metadataRaw as Record<string, unknown>)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n return { error: \"metadata must be an object of string values\" };\n }\n }\n }\n\n return {\n data: {\n stripePriceId,\n successUrl,\n ...(cancelUrl ? { cancelUrl } : {}),\n ...(customerId ? { customerId } : {}),\n ...(metadataRaw ? { metadata: metadataRaw as Record<string, string> } : {}),\n },\n };\n};\n\nconst handleGetCustomer = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n const { customerId, errorResponse } = await resolveCustomerId(getCustomerId, request);\n if (errorResponse || !customerId) {\n return errorResponse ?? jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.customers.get(customerId);\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleTrackUsage = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId: PriceOSGetCustomerId\n) => {\n try {\n if (request.method.toUpperCase() !== \"POST\") {\n logTrackUsageError(\"Method not allowed\", {\n path: url.pathname,\n method: request.method,\n });\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n logTrackUsageError(\"Rejected request with customerId query param\", {\n path: url.pathname,\n method: request.method,\n });\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n const parsed = await parseTrackUsageBody(request);\n if (!parsed.data) {\n logTrackUsageError(\"Invalid request body\", {\n path: url.pathname,\n method: request.method,\n error: parsed.error ?? \"Invalid request body\",\n });\n return jsonResponse(400, { error: parsed.error ?? \"Invalid request body\" });\n }\n\n const { customerId, errorResponse } = await resolveCustomerId(getCustomerId, request);\n if (errorResponse || !customerId) {\n logTrackUsageError(\"Failed to resolve customerId\", {\n path: url.pathname,\n method: request.method,\n status: errorResponse?.status ?? 401,\n });\n return errorResponse ?? jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.usage.track({\n customerId,\n ...parsed.data,\n });\n return jsonResponse(200, data as TrackUsageResponse);\n } catch (error) {\n logTrackUsageError(\"Upstream trackUsage call failed\", {\n path: url.pathname,\n method: request.method,\n customerId,\n featureKey: parsed.data.featureKey,\n amount: parsed.data.amount,\n error,\n });\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n } catch (error) {\n logTrackUsageError(\"Unexpected unhandled error\", {\n path: url.pathname,\n method: request.method,\n error,\n });\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleGetFeatureAccess = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n const { customerId, errorResponse } = await resolveCustomerId(getCustomerId, request);\n if (errorResponse || !customerId) {\n return errorResponse ?? jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.features.getAccess(customerId);\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleGetPricingTable = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId?: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n const queryCustomerId = normalizeCustomerId(url.searchParams.get(\"customerId\"));\n const queryPricingTableKey = normalizeCustomerId(url.searchParams.get(\"pricingTableKey\"));\n const { customerId: resolvedCustomerId, errorResponse } = await resolveOptionalCustomerId(\n getCustomerId,\n request\n );\n if (errorResponse) return errorResponse;\n\n const customerId = queryCustomerId ?? resolvedCustomerId;\n\n try {\n const data = await client.pricing.getTable({\n ...(customerId ? { customerId } : {}),\n ...(queryPricingTableKey ? { pricingTableKey: queryPricingTableKey } : {}),\n });\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleCreateCheckout = async (\n request: Request,\n client: PriceOS,\n getCustomerId?: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"POST\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n const parsed = await parseCheckoutBody(request);\n if (!parsed.data) {\n return jsonResponse(400, { error: parsed.error ?? \"Invalid request body\" });\n }\n\n const { customerId: resolvedCustomerId, errorResponse } = await resolveOptionalCustomerId(\n getCustomerId,\n request\n );\n if (errorResponse) return errorResponse;\n\n const body: CreateCheckoutRequest = {\n ...parsed.data,\n ...(parsed.data.customerId ?? resolvedCustomerId\n ? { customerId: parsed.data.customerId ?? resolvedCustomerId ?? undefined }\n : {}),\n };\n\n try {\n const data = await client.checkout.create(body);\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nexport function priceosHandler(options: PriceOSNextHandlerOptions = {}): PriceOSRouteMethodHandlers {\n const envApiKey = (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.PRICEOS_API_KEY;\n const apiKey = options.apiKey ?? envApiKey;\n const getCustomerId = options.getCustomerId;\n const basePath = (options.basePath ?? DEFAULT_BASE_PATH).replace(/\\/+$/, \"\");\n\n const handler: PriceOSRouteHandler = async (request: Request) => {\n if (!apiKey) {\n return new Response(\"Missing PRICEOS_API_KEY.\", { status: 500 });\n }\n\n let path = \"\";\n const url = new URL(request.url);\n const pathname = url.pathname;\n if (pathname.startsWith(basePath)) {\n path = normalizePath(pathname.slice(basePath.length));\n }\n\n const client = new PriceOS(apiKey);\n\n if (path === CUSTOMER_PATH) {\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n return handleGetCustomer(request, url, client, getCustomerId);\n }\n\n if (path === FEATURE_ACCESS_PATH) {\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n return handleGetFeatureAccess(request, url, client, getCustomerId);\n }\n\n if (path === TRACK_USAGE_PATH) {\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n return handleTrackUsage(request, url, client, getCustomerId);\n }\n\n if (path === PRICING_TABLE_PATH) {\n return handleGetPricingTable(request, url, client, getCustomerId);\n }\n\n if (path === CHECKOUT_PATH) {\n return handleCreateCheckout(request, client, getCustomerId);\n }\n\n return new Response(\"Not found.\", { status: 404 });\n };\n\n return Object.assign(handler, {\n GET: handler,\n POST: handler,\n });\n}\n\nconst getHeaderValue = (\n headers: Record<string, string | string[] | undefined> | undefined,\n key: string\n) => {\n if (!headers) return undefined;\n const value = headers[key] ?? headers[key.toLowerCase()] ?? headers[key.toUpperCase()];\n if (value !== undefined) {\n if (Array.isArray(value)) return value.join(\",\");\n return value;\n }\n const entry = Object.entries(headers).find(([headerKey]) => headerKey.toLowerCase() === key.toLowerCase());\n if (!entry) return undefined;\n const [, entryValue] = entry;\n if (Array.isArray(entryValue)) return entryValue.join(\",\");\n return entryValue;\n};\n\nconst toHeaders = (headers: Record<string, string | string[] | undefined> | undefined) => {\n const result = new Headers();\n if (!headers) return result;\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") result.set(key, value);\n if (Array.isArray(value)) result.set(key, value.join(\",\"));\n }\n return result;\n};\n\nconst buildRequest = (req: PriceOSPagesRequest) => {\n const headers = req.headers ?? {};\n const forwardedProto = getHeaderValue(headers, \"x-forwarded-proto\");\n const protocol =\n forwardedProto?.split(\",\")[0]?.trim() ?? (req.socket?.encrypted ? \"https\" : \"http\");\n const host =\n getHeaderValue(headers, \"x-forwarded-host\") ??\n getHeaderValue(headers, \"host\") ??\n \"localhost\";\n const url = new URL(req.url ?? \"/\", `${protocol}://${host}`);\n\n const method = (req.method ?? \"GET\").toUpperCase();\n const normalizedHeaders = toHeaders(headers);\n const init: RequestInit = {\n method,\n headers: normalizedHeaders,\n };\n\n if (method !== \"GET\" && method !== \"HEAD\" && req.body !== undefined) {\n if (typeof req.body === \"string\") {\n init.body = req.body;\n } else {\n init.body = JSON.stringify(req.body);\n if (!normalizedHeaders.has(\"content-type\")) {\n normalizedHeaders.set(\"content-type\", \"application/json\");\n }\n }\n }\n\n return new Request(url, init);\n};\n\nconst sendResponse = async (res: PriceOSPagesResponse, response: Response) => {\n if (typeof res.status === \"function\") {\n res.status(response.status);\n } else {\n res.statusCode = response.status;\n }\n\n if (typeof res.setHeader === \"function\") {\n response.headers.forEach((value, key) => {\n res.setHeader?.(key, value);\n });\n }\n\n const body = await response.text();\n res.end?.(body || undefined);\n};\n\nexport function priceosPagesHandler(options: PriceOSPagesHandlerOptions = {}) {\n return async (req: PriceOSPagesRequest, res: PriceOSPagesResponse) => {\n const getCustomerId = options.getCustomerId;\n const request = buildRequest(req);\n const handler = priceosHandler({\n ...options,\n getCustomerId: getCustomerId ? (normalizedRequest) => getCustomerId(req, normalizedRequest) : undefined,\n });\n const response = await handler(request);\n await sendResponse(res, response);\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/next.ts"],"sourcesContent":["import { PriceOS, PriceOSError } from \"./client\";\nimport type {\n CreateCheckoutResponse,\n CreateCustomerCheckoutRequest,\n CreateCustomerCheckoutResponse,\n CreateCustomerPortalResponse,\n TrackUsageResponse,\n} from \"./types\";\n\nexport type PriceOSGetCustomerId = (\n request: Request\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSPagesRequest = {\n method?: string;\n headers?: Record<string, string | string[] | undefined>;\n url?: string;\n socket?: { encrypted?: boolean };\n body?: unknown;\n};\n\nexport type PriceOSPagesResponse = {\n status?: (code: number) => PriceOSPagesResponse;\n setHeader?: (name: string, value: string | string[]) => void;\n end?: (body?: string) => void;\n statusCode?: number;\n};\n\nexport type PriceOSPagesGetCustomerId = (\n request: PriceOSPagesRequest,\n normalizedRequest: Request\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSNextHandlerOptions = {\n apiKey?: string;\n basePath?: string;\n getCustomerId?: PriceOSGetCustomerId;\n};\n\nexport type PriceOSRouteHandler = (request: Request) => Promise<Response>;\nexport type PriceOSRouteMethodHandlers = PriceOSRouteHandler & {\n GET: PriceOSRouteHandler;\n POST: PriceOSRouteHandler;\n};\n\nexport type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, \"getCustomerId\"> & {\n getCustomerId?: PriceOSPagesGetCustomerId;\n};\n\ntype TrackUsageRequestBody = {\n featureKey: string;\n amount?: number;\n idempotencyKey?: string;\n occurredAt?: number;\n metadata?: Record<string, string>;\n};\n\ntype CheckoutRequestBody = {\n stripeProductKey?: string;\n stripePriceId?: string;\n successUrl?: string;\n cancelUrl?: string;\n customerId?: string;\n metadata?: Record<string, string>;\n checkoutParams?: Record<string, unknown>;\n customerInfo?: {\n name?: string;\n email?: string;\n };\n};\n\ntype CustomerPortalRequestBody = {\n customerId?: string;\n};\n\nconst DEFAULT_BASE_PATH = \"/api/priceos\";\nconst CUSTOMER_PATH = \"v1/customer\";\nconst FEATURE_ACCESS_PATH = \"v1/feature-access\";\nconst TRACK_USAGE_PATH = \"v1/usage\";\nconst PRICING_TABLE_PATH = \"v1/pricing-table\";\nconst CHECKOUT_PATH = \"v1/checkout\";\nconst CUSTOMER_PORTAL_PATH = \"v1/customer-portal\";\n\nconst normalizePath = (value: string) => value.replace(/^\\/+/, \"\");\nconst logTrackUsageError = (message: string, details?: Record<string, unknown>) => {\n if (details === undefined) {\n console.error(\"[priceos/next][trackUsage]\", message);\n return;\n }\n console.error(\"[priceos/next][trackUsage]\", message, details);\n};\n\nconst jsonResponse = (status: number, body: unknown) =>\n new Response(JSON.stringify(body), {\n status,\n headers: { \"content-type\": \"application/json\" },\n });\n\nconst normalizeCustomerId = (value: string | null | undefined) => {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim();\n return normalized.length ? normalized : null;\n};\n\nconst parseTrackUsageBody = async (request: Request): Promise<{ data?: TrackUsageRequestBody; error?: string }> => {\n let rawBody: unknown;\n try {\n rawBody = await request.json();\n } catch {\n return { error: \"Invalid JSON body\" };\n }\n\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return { error: \"Invalid JSON body\" };\n }\n\n const body = rawBody as Record<string, unknown>;\n\n if (\"customerId\" in body) {\n return { error: \"customerId must be set via getCustomerId\" };\n }\n\n const featureKey = typeof body.featureKey === \"string\" ? body.featureKey.trim() : \"\";\n if (!featureKey) {\n return { error: \"featureKey is required\" };\n }\n\n const amountRaw = body.amount;\n const amount = amountRaw === undefined ? 1 : Number(amountRaw);\n if (!Number.isFinite(amount) || amount <= 0) {\n return { error: \"amount must be a positive number\" };\n }\n\n const idempotencyKeyRaw = body.idempotencyKey;\n const idempotencyKey =\n idempotencyKeyRaw === undefined\n ? undefined\n : typeof idempotencyKeyRaw === \"string\" && idempotencyKeyRaw.trim().length > 0\n ? idempotencyKeyRaw.trim()\n : null;\n if (idempotencyKey === null) {\n return { error: \"idempotencyKey must be a non-empty string\" };\n }\n\n const occurredAtRaw = body.occurredAt;\n const occurredAt = occurredAtRaw === undefined ? undefined : Number(occurredAtRaw);\n if (occurredAtRaw !== undefined && !Number.isFinite(occurredAt)) {\n return { error: \"occurredAt must be a valid Unix timestamp (ms)\" };\n }\n\n const metadataRaw = body.metadata;\n if (metadataRaw !== undefined) {\n if (!metadataRaw || typeof metadataRaw !== \"object\" || Array.isArray(metadataRaw)) {\n return { error: \"metadata must be an object of string values\" };\n }\n for (const [key, value] of Object.entries(metadataRaw as Record<string, unknown>)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n return { error: \"metadata must be an object of string values\" };\n }\n }\n }\n\n return {\n data: {\n featureKey,\n amount,\n ...(idempotencyKey ? { idempotencyKey } : {}),\n ...(occurredAt !== undefined ? { occurredAt } : {}),\n ...(metadataRaw ? { metadata: metadataRaw as Record<string, string> } : {}),\n },\n };\n};\n\nconst resolveCustomerId = async (\n getCustomerId: PriceOSGetCustomerId,\n request: Request\n): Promise<{ customerId?: string; errorResponse?: Response }> => {\n let customerId: string | null | undefined;\n try {\n customerId = await getCustomerId(request);\n } catch {\n return { errorResponse: jsonResponse(500, { error: \"Failed to resolve customerId\" }) };\n }\n\n const normalizedCustomerId = normalizeCustomerId(customerId);\n if (!normalizedCustomerId) {\n return { errorResponse: jsonResponse(401, { error: \"Customer not identified\" }) };\n }\n\n return { customerId: normalizedCustomerId };\n};\n\nconst resolveOptionalCustomerId = async (\n getCustomerId: PriceOSGetCustomerId | undefined,\n request: Request\n): Promise<{ customerId: string | null; errorResponse?: Response }> => {\n if (!getCustomerId) return { customerId: null };\n let customerId: string | null | undefined;\n try {\n customerId = await getCustomerId(request);\n } catch {\n return { customerId: null, errorResponse: jsonResponse(500, { error: \"Failed to resolve customerId\" }) };\n }\n return { customerId: normalizeCustomerId(customerId) };\n};\n\nconst parseCheckoutBody = async (request: Request): Promise<{ data?: CheckoutRequestBody; error?: string }> => {\n let rawBody: unknown;\n try {\n rawBody = await request.json();\n } catch {\n return { error: \"Invalid JSON body\" };\n }\n\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return { error: \"Invalid JSON body\" };\n }\n\n const body = rawBody as Record<string, unknown>;\n const stripeProductKey =\n typeof body.stripeProductKey === \"string\" && body.stripeProductKey.trim().length > 0\n ? body.stripeProductKey.trim()\n : undefined;\n const stripePriceId =\n typeof body.stripePriceId === \"string\" && body.stripePriceId.trim().length > 0\n ? body.stripePriceId.trim()\n : undefined;\n if (!stripeProductKey && !stripePriceId) {\n return { error: \"stripeProductKey or stripePriceId is required\" };\n }\n\n const successUrlRaw = body.successUrl;\n if (successUrlRaw !== undefined && typeof successUrlRaw !== \"string\") {\n return { error: \"successUrl must be a non-empty string\" };\n }\n const successUrl = normalizeCustomerId(\n typeof successUrlRaw === \"string\" ? successUrlRaw : undefined\n );\n if (successUrlRaw !== undefined && !successUrl) {\n return { error: \"successUrl must be a non-empty string\" };\n }\n\n const cancelUrl =\n typeof body.cancelUrl === \"string\" && body.cancelUrl.trim().length > 0\n ? body.cancelUrl.trim()\n : undefined;\n const customerId =\n typeof body.customerId === \"string\" && body.customerId.trim().length > 0\n ? body.customerId.trim()\n : undefined;\n\n const metadataRaw = body.metadata;\n if (metadataRaw !== undefined) {\n if (!metadataRaw || typeof metadataRaw !== \"object\" || Array.isArray(metadataRaw)) {\n return { error: \"metadata must be an object of string values\" };\n }\n for (const [key, value] of Object.entries(metadataRaw as Record<string, unknown>)) {\n if (typeof key !== \"string\" || typeof value !== \"string\") {\n return { error: \"metadata must be an object of string values\" };\n }\n }\n }\n\n const checkoutParamsRaw = body.checkoutParams;\n if (checkoutParamsRaw !== undefined && (!checkoutParamsRaw || typeof checkoutParamsRaw !== \"object\" || Array.isArray(checkoutParamsRaw))) {\n return { error: \"checkoutParams must be an object\" };\n }\n\n const customerInfoRaw = body.customerInfo;\n if (customerInfoRaw !== undefined && (!customerInfoRaw || typeof customerInfoRaw !== \"object\" || Array.isArray(customerInfoRaw))) {\n return { error: \"customerInfo must be an object\" };\n }\n const customerInfoRecord = customerInfoRaw as Record<string, unknown> | undefined;\n const customerName = normalizeCustomerId(\n typeof customerInfoRecord?.name === \"string\" ? customerInfoRecord.name : undefined\n );\n const customerEmail = normalizeCustomerId(\n typeof customerInfoRecord?.email === \"string\" ? customerInfoRecord.email : undefined\n );\n\n return {\n data: {\n ...(stripeProductKey ? { stripeProductKey } : {}),\n ...(stripePriceId ? { stripePriceId } : {}),\n ...(successUrl ? { successUrl } : {}),\n ...(cancelUrl ? { cancelUrl } : {}),\n ...(customerId ? { customerId } : {}),\n ...(metadataRaw ? { metadata: metadataRaw as Record<string, string> } : {}),\n ...(checkoutParamsRaw ? { checkoutParams: checkoutParamsRaw as Record<string, unknown> } : {}),\n ...(customerInfoRaw\n ? {\n customerInfo: {\n ...(customerName ? { name: customerName } : {}),\n ...(customerEmail ? { email: customerEmail } : {}),\n },\n }\n : {}),\n },\n };\n};\n\nconst parseCustomerPortalBody = async (\n request: Request\n): Promise<{ data?: CustomerPortalRequestBody; error?: string }> => {\n let rawText = \"\";\n try {\n rawText = await request.text();\n } catch {\n return { error: \"Invalid JSON body\" };\n }\n\n if (!rawText.trim()) return { data: {} };\n\n let rawBody: unknown;\n try {\n rawBody = JSON.parse(rawText);\n } catch {\n return { error: \"Invalid JSON body\" };\n }\n\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return { error: \"Invalid JSON body\" };\n }\n\n const body = rawBody as Record<string, unknown>;\n const customerIdRaw = body.customerId;\n if (customerIdRaw !== undefined && typeof customerIdRaw !== \"string\") {\n return { error: \"customerId must be a non-empty string\" };\n }\n const customerId = normalizeCustomerId(\n typeof customerIdRaw === \"string\" ? customerIdRaw : undefined\n );\n if (customerIdRaw !== undefined && !customerId) {\n return { error: \"customerId must be a non-empty string\" };\n }\n\n return {\n data: customerId ? { customerId } : {},\n };\n};\n\nconst handleGetCustomer = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n const { customerId, errorResponse } = await resolveCustomerId(getCustomerId, request);\n if (errorResponse || !customerId) {\n return errorResponse ?? jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.customers.get(customerId);\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleTrackUsage = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId: PriceOSGetCustomerId\n) => {\n try {\n if (request.method.toUpperCase() !== \"POST\") {\n logTrackUsageError(\"Method not allowed\", {\n path: url.pathname,\n method: request.method,\n });\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n logTrackUsageError(\"Rejected request with customerId query param\", {\n path: url.pathname,\n method: request.method,\n });\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n const parsed = await parseTrackUsageBody(request);\n if (!parsed.data) {\n logTrackUsageError(\"Invalid request body\", {\n path: url.pathname,\n method: request.method,\n error: parsed.error ?? \"Invalid request body\",\n });\n return jsonResponse(400, { error: parsed.error ?? \"Invalid request body\" });\n }\n\n const { customerId, errorResponse } = await resolveCustomerId(getCustomerId, request);\n if (errorResponse || !customerId) {\n logTrackUsageError(\"Failed to resolve customerId\", {\n path: url.pathname,\n method: request.method,\n status: errorResponse?.status ?? 401,\n });\n return errorResponse ?? jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.usage.track({\n customerId,\n ...parsed.data,\n });\n return jsonResponse(200, data as TrackUsageResponse);\n } catch (error) {\n logTrackUsageError(\"Upstream trackUsage call failed\", {\n path: url.pathname,\n method: request.method,\n customerId,\n featureKey: parsed.data.featureKey,\n amount: parsed.data.amount,\n error,\n });\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n } catch (error) {\n logTrackUsageError(\"Unexpected unhandled error\", {\n path: url.pathname,\n method: request.method,\n error,\n });\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleGetFeatureAccess = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n const { customerId, errorResponse } = await resolveCustomerId(getCustomerId, request);\n if (errorResponse || !customerId) {\n return errorResponse ?? jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.features.getAccess(customerId);\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleGetPricingTable = async (\n request: Request,\n url: URL,\n client: PriceOS,\n getCustomerId?: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n const queryCustomerId = normalizeCustomerId(url.searchParams.get(\"customerId\"));\n const queryPricingTableKey = normalizeCustomerId(url.searchParams.get(\"pricingTableKey\"));\n const { customerId: resolvedCustomerId, errorResponse } = await resolveOptionalCustomerId(\n getCustomerId,\n request\n );\n if (errorResponse) return errorResponse;\n\n const customerId = queryCustomerId ?? resolvedCustomerId;\n\n try {\n const data = await client.pricing.getTable({\n ...(customerId ? { customerId } : {}),\n ...(queryPricingTableKey ? { pricingTableKey: queryPricingTableKey } : {}),\n });\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleCreateCheckout = async (\n request: Request,\n client: PriceOS,\n getCustomerId?: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"POST\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n const parsed = await parseCheckoutBody(request);\n if (!parsed.data) {\n return jsonResponse(400, { error: parsed.error ?? \"Invalid request body\" });\n }\n\n const { customerId: resolvedCustomerId, errorResponse } = await resolveOptionalCustomerId(\n getCustomerId,\n request\n );\n if (errorResponse) return errorResponse;\n\n if (\n parsed.data.customerId &&\n resolvedCustomerId &&\n parsed.data.customerId !== resolvedCustomerId\n ) {\n return jsonResponse(403, { error: \"customerId must match authenticated customer\" });\n }\n\n const customerId = parsed.data.customerId ?? resolvedCustomerId;\n if (!customerId) {\n return jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n if (parsed.data.stripePriceId) {\n const requestOrigin = new URL(request.url).origin;\n const successUrl = parsed.data.successUrl ?? `${requestOrigin}/settings/billing?checkout=success`;\n const cancelUrl = parsed.data.cancelUrl ?? successUrl;\n try {\n const data = await client.checkout.create({\n stripePriceId: parsed.data.stripePriceId,\n successUrl,\n cancelUrl,\n ...(parsed.data.metadata ? { metadata: parsed.data.metadata } : {}),\n customerId,\n });\n return jsonResponse(200, data as CreateCheckoutResponse);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n }\n\n if (!parsed.data.stripeProductKey) {\n return jsonResponse(400, { error: \"stripeProductKey is required\" });\n }\n\n const checkoutParams: Record<string, unknown> = {\n ...(parsed.data.checkoutParams ?? {}),\n ...(parsed.data.cancelUrl ? { cancel_url: parsed.data.cancelUrl } : {}),\n ...(parsed.data.metadata ? { metadata: parsed.data.metadata } : {}),\n };\n\n const body: CreateCustomerCheckoutRequest = {\n stripeProductKey: parsed.data.stripeProductKey,\n ...(parsed.data.successUrl ? { successUrl: parsed.data.successUrl } : {}),\n ...(parsed.data.customerInfo ? { customerInfo: parsed.data.customerInfo } : {}),\n ...(Object.keys(checkoutParams).length ? { checkoutParams } : {}),\n };\n\n try {\n const data = await client.customers.createCheckout(customerId, body);\n return jsonResponse(200, data as CreateCustomerCheckoutResponse);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nconst handleCreateCustomerPortal = async (\n request: Request,\n client: PriceOS,\n getCustomerId?: PriceOSGetCustomerId\n) => {\n if (request.method.toUpperCase() !== \"POST\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n const parsed = await parseCustomerPortalBody(request);\n if (!parsed.data) {\n return jsonResponse(400, { error: parsed.error ?? \"Invalid request body\" });\n }\n\n const { customerId: resolvedCustomerId, errorResponse } = await resolveOptionalCustomerId(\n getCustomerId,\n request\n );\n if (errorResponse) return errorResponse;\n\n if (\n parsed.data.customerId &&\n resolvedCustomerId &&\n parsed.data.customerId !== resolvedCustomerId\n ) {\n return jsonResponse(403, { error: \"customerId must match authenticated customer\" });\n }\n\n const customerId = parsed.data.customerId ?? resolvedCustomerId;\n if (!customerId) {\n return jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.customers.createPortal(customerId);\n return jsonResponse(200, data as CreateCustomerPortalResponse);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n};\n\nexport function priceosHandler(options: PriceOSNextHandlerOptions = {}): PriceOSRouteMethodHandlers {\n const envApiKey = (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.PRICEOS_API_KEY;\n const apiKey = options.apiKey ?? envApiKey;\n const getCustomerId = options.getCustomerId;\n const basePath = (options.basePath ?? DEFAULT_BASE_PATH).replace(/\\/+$/, \"\");\n\n const handler: PriceOSRouteHandler = async (request: Request) => {\n if (!apiKey) {\n return new Response(\"Missing PRICEOS_API_KEY.\", { status: 500 });\n }\n\n let path = \"\";\n const url = new URL(request.url);\n const pathname = url.pathname;\n if (pathname.startsWith(basePath)) {\n path = normalizePath(pathname.slice(basePath.length));\n }\n\n const client = new PriceOS(apiKey);\n\n if (path === CUSTOMER_PATH) {\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n return handleGetCustomer(request, url, client, getCustomerId);\n }\n\n if (path === FEATURE_ACCESS_PATH) {\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n return handleGetFeatureAccess(request, url, client, getCustomerId);\n }\n\n if (path === TRACK_USAGE_PATH) {\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n return handleTrackUsage(request, url, client, getCustomerId);\n }\n\n if (path === PRICING_TABLE_PATH) {\n return handleGetPricingTable(request, url, client, getCustomerId);\n }\n\n if (path === CHECKOUT_PATH) {\n return handleCreateCheckout(request, client, getCustomerId);\n }\n\n if (path === CUSTOMER_PORTAL_PATH) {\n return handleCreateCustomerPortal(request, client, getCustomerId);\n }\n\n return new Response(\"Not found.\", { status: 404 });\n };\n\n return Object.assign(handler, {\n GET: handler,\n POST: handler,\n });\n}\n\nconst getHeaderValue = (\n headers: Record<string, string | string[] | undefined> | undefined,\n key: string\n) => {\n if (!headers) return undefined;\n const value = headers[key] ?? headers[key.toLowerCase()] ?? headers[key.toUpperCase()];\n if (value !== undefined) {\n if (Array.isArray(value)) return value.join(\",\");\n return value;\n }\n const entry = Object.entries(headers).find(([headerKey]) => headerKey.toLowerCase() === key.toLowerCase());\n if (!entry) return undefined;\n const [, entryValue] = entry;\n if (Array.isArray(entryValue)) return entryValue.join(\",\");\n return entryValue;\n};\n\nconst toHeaders = (headers: Record<string, string | string[] | undefined> | undefined) => {\n const result = new Headers();\n if (!headers) return result;\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") result.set(key, value);\n if (Array.isArray(value)) result.set(key, value.join(\",\"));\n }\n return result;\n};\n\nconst buildRequest = (req: PriceOSPagesRequest) => {\n const headers = req.headers ?? {};\n const forwardedProto = getHeaderValue(headers, \"x-forwarded-proto\");\n const protocol =\n forwardedProto?.split(\",\")[0]?.trim() ?? (req.socket?.encrypted ? \"https\" : \"http\");\n const host =\n getHeaderValue(headers, \"x-forwarded-host\") ??\n getHeaderValue(headers, \"host\") ??\n \"localhost\";\n const url = new URL(req.url ?? \"/\", `${protocol}://${host}`);\n\n const method = (req.method ?? \"GET\").toUpperCase();\n const normalizedHeaders = toHeaders(headers);\n const init: RequestInit = {\n method,\n headers: normalizedHeaders,\n };\n\n if (method !== \"GET\" && method !== \"HEAD\" && req.body !== undefined) {\n if (typeof req.body === \"string\") {\n init.body = req.body;\n } else {\n init.body = JSON.stringify(req.body);\n if (!normalizedHeaders.has(\"content-type\")) {\n normalizedHeaders.set(\"content-type\", \"application/json\");\n }\n }\n }\n\n return new Request(url, init);\n};\n\nconst sendResponse = async (res: PriceOSPagesResponse, response: Response) => {\n if (typeof res.status === \"function\") {\n res.status(response.status);\n } else {\n res.statusCode = response.status;\n }\n\n if (typeof res.setHeader === \"function\") {\n response.headers.forEach((value, key) => {\n res.setHeader?.(key, value);\n });\n }\n\n const body = await response.text();\n res.end?.(body || undefined);\n};\n\nexport function priceosPagesHandler(options: PriceOSPagesHandlerOptions = {}) {\n return async (req: PriceOSPagesRequest, res: PriceOSPagesResponse) => {\n const getCustomerId = options.getCustomerId;\n const request = buildRequest(req);\n const handler = priceosHandler({\n ...options,\n getCustomerId: getCustomerId ? (normalizedRequest) => getCustomerId(req, normalizedRequest) : undefined,\n });\n const response = await handler(request);\n await sendResponse(res, response);\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/react.cjs
CHANGED
|
@@ -34,7 +34,9 @@ __export(react_exports, {
|
|
|
34
34
|
PriceOSProvider: () => PriceOSProvider,
|
|
35
35
|
PricingTable: () => PricingTable,
|
|
36
36
|
PricingTableView: () => PricingTableView,
|
|
37
|
+
useCheckout: () => useCheckout,
|
|
37
38
|
useCustomer: () => useCustomer,
|
|
39
|
+
useCustomerPortal: () => useCustomerPortal,
|
|
38
40
|
useFeatureAccess: () => useFeatureAccess,
|
|
39
41
|
usePricingTable: () => usePricingTable,
|
|
40
42
|
useTrackUsage: () => useTrackUsage
|
|
@@ -61,12 +63,9 @@ var buildFeatureAccessUrl = (backendUrl) => {
|
|
|
61
63
|
const normalizedBase = normalizeBaseUrl(backendUrl);
|
|
62
64
|
return `${normalizedBase}/v1/feature-access`;
|
|
63
65
|
};
|
|
64
|
-
var buildPricingTableUrl = (backendUrl,
|
|
66
|
+
var buildPricingTableUrl = (backendUrl, pricingTableKey) => {
|
|
65
67
|
const normalizedBase = normalizeBaseUrl(backendUrl);
|
|
66
68
|
const params = new URLSearchParams();
|
|
67
|
-
if (customerId && customerId.trim().length > 0) {
|
|
68
|
-
params.set("customerId", customerId.trim());
|
|
69
|
-
}
|
|
70
69
|
if (pricingTableKey && pricingTableKey.trim().length > 0) {
|
|
71
70
|
params.set("pricingTableKey", pricingTableKey.trim());
|
|
72
71
|
}
|
|
@@ -77,18 +76,17 @@ var buildCheckoutUrl = (backendUrl) => {
|
|
|
77
76
|
const normalizedBase = normalizeBaseUrl(backendUrl);
|
|
78
77
|
return `${normalizedBase}/v1/checkout`;
|
|
79
78
|
};
|
|
80
|
-
var
|
|
79
|
+
var buildCustomerPortalUrl = (backendUrl) => {
|
|
81
80
|
const normalizedBase = normalizeBaseUrl(backendUrl);
|
|
82
|
-
return `${normalizedBase}/v1/portal`;
|
|
81
|
+
return `${normalizedBase}/v1/customer-portal`;
|
|
83
82
|
};
|
|
84
83
|
var buildTrackUsageUrl = (backendUrl) => {
|
|
85
84
|
const normalizedBase = normalizeBaseUrl(backendUrl);
|
|
86
85
|
return `${normalizedBase}/v1/usage`;
|
|
87
86
|
};
|
|
88
87
|
var resolveIdempotencyKey = (body) => {
|
|
89
|
-
const providedEventKey = typeof body.eventKey === "string" ? body.eventKey.trim() : "";
|
|
90
88
|
const providedIdempotencyKey = typeof body.idempotencyKey === "string" ? String(body.idempotencyKey).trim() : "";
|
|
91
|
-
return providedIdempotencyKey
|
|
89
|
+
return providedIdempotencyKey;
|
|
92
90
|
};
|
|
93
91
|
var normalizeTrackUsageInput = (input) => {
|
|
94
92
|
if (typeof input === "string") {
|
|
@@ -160,7 +158,6 @@ var requestTrackUsage = async (fetchFn, url, body, logLevel, bearerToken) => {
|
|
|
160
158
|
...idempotencyKey ? { idempotencyKey } : {},
|
|
161
159
|
amount: body.amount ?? 1
|
|
162
160
|
};
|
|
163
|
-
delete payload.eventKey;
|
|
164
161
|
const response = await fetchFn(url, {
|
|
165
162
|
method: "POST",
|
|
166
163
|
headers,
|
|
@@ -272,7 +269,7 @@ var requestPricingTable = async (fetchFn, url, logLevel, bearerToken) => {
|
|
|
272
269
|
var requestCheckoutSession = async (fetchFn, url, body, logLevel, bearerToken) => {
|
|
273
270
|
logMessage(logLevel, "debug", "Creating checkout session", {
|
|
274
271
|
url,
|
|
275
|
-
|
|
272
|
+
stripeProductKey: body.stripeProductKey,
|
|
276
273
|
hasCustomerId: Boolean(body.customerId)
|
|
277
274
|
});
|
|
278
275
|
const headers = {
|
|
@@ -314,8 +311,8 @@ var requestCheckoutSession = async (fetchFn, url, body, logLevel, bearerToken) =
|
|
|
314
311
|
}
|
|
315
312
|
return data;
|
|
316
313
|
};
|
|
317
|
-
var
|
|
318
|
-
logMessage(logLevel, "debug", "Creating
|
|
314
|
+
var requestCustomerPortalSession = async (fetchFn, url, body, logLevel, bearerToken) => {
|
|
315
|
+
logMessage(logLevel, "debug", "Creating customer portal session", {
|
|
319
316
|
url,
|
|
320
317
|
hasCustomerId: Boolean(body.customerId)
|
|
321
318
|
});
|
|
@@ -328,7 +325,7 @@ var requestBillingPortalSession = async (fetchFn, url, body, logLevel, bearerTok
|
|
|
328
325
|
headers,
|
|
329
326
|
body: JSON.stringify(body)
|
|
330
327
|
});
|
|
331
|
-
logMessage(logLevel, "info", "
|
|
328
|
+
logMessage(logLevel, "info", "Customer portal request completed", { url, status: response.status });
|
|
332
329
|
const text = await response.text();
|
|
333
330
|
let data = null;
|
|
334
331
|
let parseFailed = false;
|
|
@@ -337,7 +334,7 @@ var requestBillingPortalSession = async (fetchFn, url, body, logLevel, bearerTok
|
|
|
337
334
|
data = JSON.parse(text);
|
|
338
335
|
} catch {
|
|
339
336
|
parseFailed = true;
|
|
340
|
-
logMessage(logLevel, "warn", "
|
|
337
|
+
logMessage(logLevel, "warn", "Customer portal response is not JSON", {
|
|
341
338
|
url,
|
|
342
339
|
status: response.status,
|
|
343
340
|
bodyPreview: text.slice(0, 300)
|
|
@@ -346,7 +343,7 @@ var requestBillingPortalSession = async (fetchFn, url, body, logLevel, bearerTok
|
|
|
346
343
|
}
|
|
347
344
|
if (!response.ok) {
|
|
348
345
|
const message = !parseFailed && data && typeof data === "object" && "error" in data ? String(data.error) : text || response.statusText;
|
|
349
|
-
logMessage(logLevel, "error", "
|
|
346
|
+
logMessage(logLevel, "error", "Customer portal request failed", {
|
|
350
347
|
url,
|
|
351
348
|
status: response.status,
|
|
352
349
|
message
|
|
@@ -490,52 +487,111 @@ function useTrackUsage() {
|
|
|
490
487
|
}
|
|
491
488
|
return { trackUsage };
|
|
492
489
|
}
|
|
493
|
-
function
|
|
494
|
-
const {
|
|
490
|
+
function useCheckout(options = {}) {
|
|
491
|
+
const { customerId } = options;
|
|
495
492
|
const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = (0, import_react.useContext)(PriceOSContext);
|
|
496
|
-
const fetcher = async (url) => {
|
|
497
|
-
let bearerToken;
|
|
498
|
-
try {
|
|
499
|
-
bearerToken = getBearerToken ? await getBearerToken() : void 0;
|
|
500
|
-
} catch (error2) {
|
|
501
|
-
logMessage(logLevel, "error", "Failed to resolve bearer token", {
|
|
502
|
-
url,
|
|
503
|
-
error: error2 instanceof Error ? error2.message : String(error2)
|
|
504
|
-
});
|
|
505
|
-
throw error2;
|
|
506
|
-
}
|
|
507
|
-
return requestPricingTable(fetch, url, logLevel, bearerToken);
|
|
508
|
-
};
|
|
509
|
-
const key = enabled ? buildPricingTableUrl(backendUrl ?? DEFAULT_BACKEND_URL, customerId, pricingTableKey) : null;
|
|
510
|
-
const { data, error, isLoading, mutate } = (0, import_swr.default)(
|
|
511
|
-
key,
|
|
512
|
-
fetcher,
|
|
513
|
-
swr
|
|
514
|
-
);
|
|
515
493
|
const createCheckoutSession = async (body) => {
|
|
516
494
|
const url = buildCheckoutUrl(backendUrl ?? DEFAULT_BACKEND_URL);
|
|
517
495
|
let bearerToken;
|
|
518
496
|
try {
|
|
519
497
|
bearerToken = getBearerToken ? await getBearerToken() : void 0;
|
|
520
|
-
} catch (
|
|
498
|
+
} catch (error) {
|
|
521
499
|
logMessage(logLevel, "error", "Failed to resolve bearer token", {
|
|
522
500
|
url,
|
|
523
|
-
error:
|
|
501
|
+
error: error instanceof Error ? error.message : String(error)
|
|
524
502
|
});
|
|
525
|
-
throw
|
|
503
|
+
throw error;
|
|
526
504
|
}
|
|
527
505
|
const resolvedCustomerId = body.customerId ?? customerId;
|
|
506
|
+
const baseCheckoutParams = body.checkoutParams && typeof body.checkoutParams === "object" ? body.checkoutParams : {};
|
|
507
|
+
const checkoutParams = {
|
|
508
|
+
...baseCheckoutParams,
|
|
509
|
+
...body.cancelUrl ? { cancel_url: body.cancelUrl } : {},
|
|
510
|
+
...body.metadata ? { metadata: body.metadata } : {}
|
|
511
|
+
};
|
|
528
512
|
return requestCheckoutSession(
|
|
529
513
|
fetch,
|
|
530
514
|
url,
|
|
531
515
|
{
|
|
532
516
|
...body,
|
|
517
|
+
checkoutParams,
|
|
533
518
|
...resolvedCustomerId ? { customerId: resolvedCustomerId } : {}
|
|
534
519
|
},
|
|
535
520
|
logLevel,
|
|
536
521
|
bearerToken
|
|
537
522
|
);
|
|
538
523
|
};
|
|
524
|
+
const openCheckout = async (body) => {
|
|
525
|
+
const response = await createCheckoutSession(body);
|
|
526
|
+
if (typeof window !== "undefined") {
|
|
527
|
+
window.location.assign(response.url);
|
|
528
|
+
}
|
|
529
|
+
return response;
|
|
530
|
+
};
|
|
531
|
+
return {
|
|
532
|
+
createCheckoutSession,
|
|
533
|
+
openCheckout
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
function useCustomerPortal(options = {}) {
|
|
537
|
+
const { customerId } = options;
|
|
538
|
+
const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = (0, import_react.useContext)(PriceOSContext);
|
|
539
|
+
const createCustomerPortalSession = async (body) => {
|
|
540
|
+
const url = buildCustomerPortalUrl(backendUrl ?? DEFAULT_BACKEND_URL);
|
|
541
|
+
let bearerToken;
|
|
542
|
+
try {
|
|
543
|
+
bearerToken = getBearerToken ? await getBearerToken() : void 0;
|
|
544
|
+
} catch (error) {
|
|
545
|
+
logMessage(logLevel, "error", "Failed to resolve bearer token", {
|
|
546
|
+
url,
|
|
547
|
+
error: error instanceof Error ? error.message : String(error)
|
|
548
|
+
});
|
|
549
|
+
throw error;
|
|
550
|
+
}
|
|
551
|
+
const resolvedCustomerId = body?.customerId ?? customerId;
|
|
552
|
+
return requestCustomerPortalSession(
|
|
553
|
+
fetch,
|
|
554
|
+
url,
|
|
555
|
+
resolvedCustomerId ? { customerId: resolvedCustomerId } : {},
|
|
556
|
+
logLevel,
|
|
557
|
+
bearerToken
|
|
558
|
+
);
|
|
559
|
+
};
|
|
560
|
+
const openCustomerPortal = async (body) => {
|
|
561
|
+
const response = await createCustomerPortalSession(body);
|
|
562
|
+
if (typeof window !== "undefined") {
|
|
563
|
+
window.location.assign(response.url);
|
|
564
|
+
}
|
|
565
|
+
return response;
|
|
566
|
+
};
|
|
567
|
+
return {
|
|
568
|
+
createCustomerPortalSession,
|
|
569
|
+
openCustomerPortal
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
function usePricingTable(options = {}) {
|
|
573
|
+
const { enabled = true, pricingTableKey, swr } = options;
|
|
574
|
+
const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = (0, import_react.useContext)(PriceOSContext);
|
|
575
|
+
const { createCheckoutSession } = useCheckout();
|
|
576
|
+
const fetcher = async (url) => {
|
|
577
|
+
let bearerToken;
|
|
578
|
+
try {
|
|
579
|
+
bearerToken = getBearerToken ? await getBearerToken() : void 0;
|
|
580
|
+
} catch (error2) {
|
|
581
|
+
logMessage(logLevel, "error", "Failed to resolve bearer token", {
|
|
582
|
+
url,
|
|
583
|
+
error: error2 instanceof Error ? error2.message : String(error2)
|
|
584
|
+
});
|
|
585
|
+
throw error2;
|
|
586
|
+
}
|
|
587
|
+
return requestPricingTable(fetch, url, logLevel, bearerToken);
|
|
588
|
+
};
|
|
589
|
+
const key = enabled ? buildPricingTableUrl(backendUrl ?? DEFAULT_BACKEND_URL, pricingTableKey) : null;
|
|
590
|
+
const { data, error, isLoading, mutate } = (0, import_swr.default)(
|
|
591
|
+
key,
|
|
592
|
+
fetcher,
|
|
593
|
+
swr
|
|
594
|
+
);
|
|
539
595
|
return {
|
|
540
596
|
pricingTable: data ?? null,
|
|
541
597
|
error,
|
|
@@ -1396,7 +1452,6 @@ function PricingTableView({
|
|
|
1396
1452
|
);
|
|
1397
1453
|
}
|
|
1398
1454
|
function PriceOSPricingTable({
|
|
1399
|
-
customerId,
|
|
1400
1455
|
pricingTableKey,
|
|
1401
1456
|
className,
|
|
1402
1457
|
yearlyLabel = "Save with yearly billing",
|
|
@@ -1407,48 +1462,22 @@ function PriceOSPricingTable({
|
|
|
1407
1462
|
emptyFallback,
|
|
1408
1463
|
onCustomCtaClick
|
|
1409
1464
|
}) {
|
|
1410
|
-
const { pricingTable, isLoading, error
|
|
1411
|
-
customerId,
|
|
1465
|
+
const { pricingTable, isLoading, error } = usePricingTable({
|
|
1412
1466
|
pricingTableKey
|
|
1413
1467
|
});
|
|
1414
|
-
const {
|
|
1415
|
-
const
|
|
1468
|
+
const { openCheckout } = useCheckout();
|
|
1469
|
+
const { openCustomerPortal } = useCustomerPortal();
|
|
1470
|
+
const onCheckout = async ({ plan, price }) => {
|
|
1416
1471
|
const urls = getCheckoutUrls(successUrl, cancelUrl);
|
|
1417
|
-
|
|
1472
|
+
await openCheckout({
|
|
1473
|
+
stripeProductKey: plan.productKey,
|
|
1418
1474
|
stripePriceId: price.stripePriceId,
|
|
1419
1475
|
successUrl: urls.successUrl,
|
|
1420
1476
|
cancelUrl: urls.cancelUrl
|
|
1421
1477
|
});
|
|
1422
|
-
if (typeof window !== "undefined") {
|
|
1423
|
-
window.location.assign(response.url);
|
|
1424
|
-
}
|
|
1425
1478
|
};
|
|
1426
1479
|
const handleCustomCtaClick = onCustomCtaClick ? onCustomCtaClick : async () => {
|
|
1427
|
-
|
|
1428
|
-
let bearerToken;
|
|
1429
|
-
try {
|
|
1430
|
-
bearerToken = getBearerToken ? await getBearerToken() : void 0;
|
|
1431
|
-
} catch (error2) {
|
|
1432
|
-
logMessage(logLevel, "error", "Failed to resolve bearer token", {
|
|
1433
|
-
url,
|
|
1434
|
-
error: error2 instanceof Error ? error2.message : String(error2)
|
|
1435
|
-
});
|
|
1436
|
-
throw error2;
|
|
1437
|
-
}
|
|
1438
|
-
const returnUrl = typeof window !== "undefined" ? window.location.href : void 0;
|
|
1439
|
-
const response = await requestBillingPortalSession(
|
|
1440
|
-
fetch,
|
|
1441
|
-
url,
|
|
1442
|
-
{
|
|
1443
|
-
...customerId ? { customerId } : {},
|
|
1444
|
-
...returnUrl ? { returnUrl } : {}
|
|
1445
|
-
},
|
|
1446
|
-
logLevel,
|
|
1447
|
-
bearerToken
|
|
1448
|
-
);
|
|
1449
|
-
if (typeof window !== "undefined") {
|
|
1450
|
-
window.location.assign(response.url);
|
|
1451
|
-
}
|
|
1480
|
+
await openCustomerPortal();
|
|
1452
1481
|
};
|
|
1453
1482
|
return (0, import_react.createElement)(PricingTableView, {
|
|
1454
1483
|
pricingTable,
|
|
@@ -1470,7 +1499,9 @@ var PricingTable = PriceOSPricingTable;
|
|
|
1470
1499
|
PriceOSProvider,
|
|
1471
1500
|
PricingTable,
|
|
1472
1501
|
PricingTableView,
|
|
1502
|
+
useCheckout,
|
|
1473
1503
|
useCustomer,
|
|
1504
|
+
useCustomerPortal,
|
|
1474
1505
|
useFeatureAccess,
|
|
1475
1506
|
usePricingTable,
|
|
1476
1507
|
useTrackUsage
|