{"version":3,"sources":["../../src/utils/map-payment.ts","../../src/utils/idempotency.ts","../../src/errors.ts","../../src/server/webhook-handler.ts","../../src/server/express.ts","../../src/server/nextjs.ts","../../src/server/generic.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n  CreemWebhookRaw,\n  CreemCheckoutCompletedEvent,\n  CreemSubscriptionPaidEvent,\n  CreemRefundCreatedEvent,\n  CreemWebhookProduct,\n  CreemWebhookCustomer,\n} from '../types/creem.js';\nimport type { DataFastPaymentRequest } from '../types/datafast.js';\n\nconst ZERO_DECIMAL_CURRENCIES = new Set(['JPY', 'KRW', 'VND', 'IDR', 'CLP', 'ISK']);\nconst THREE_DECIMAL_CURRENCIES = new Set(['KWD', 'BHD', 'OMR', 'TND', 'JOD', 'IQD']);\n\nexport interface MappedPaymentData {\n  transactionId: string;\n  currency: string;\n  amount: number;\n  visitorId: string | null;\n  sessionId?: string;\n  customerId?: string;\n  customerEmail?: string;\n  customerName?: string;\n  isRenewal: boolean;\n  isRefunded: boolean;\n  timestamp: string;\n}\n\nexport function mapCreemEventToDataFast(\n  raw: CreemWebhookRaw\n): MappedPaymentData | null {\n  switch (raw.eventType) {\n    case 'checkout.completed':\n      return mapCheckoutCompleted(raw as unknown as CreemCheckoutCompletedEvent);\n    case 'subscription.paid':\n      return mapSubscriptionPaid(raw as unknown as CreemSubscriptionPaidEvent);\n    case 'refund.created':\n      return mapRefundCreated(raw as unknown as CreemRefundCreatedEvent);\n    default:\n      return null;\n  }\n}\n\nfunction mapCheckoutCompleted(\n  event: CreemCheckoutCompletedEvent\n): MappedPaymentData | null {\n  const obj = event.object;\n  if (!obj) return null;\n\n  const order = obj.order;\n  const product = obj.product;\n  const customer = obj.customer;\n  const metadata = obj.metadata;\n\n  const amountCents = order?.amount ?? product?.price ?? 0;\n  const currency = order?.currency ?? product?.currency ?? 'USD';\n\n  const transactionId = order?.id ?? obj.id;\n\n  return {\n    transactionId,\n    currency,\n    amount: centsToDecimal(amountCents, currency),\n    visitorId: extractVisitorId(metadata),\n    sessionId: extractSessionId(metadata),\n    customerId: customer?.id,\n    customerEmail: customer?.email,\n    customerName: customer?.name,\n    isRenewal: false,\n    isRefunded: false,\n    timestamp: order?.created_at ?? new Date(event.created_at).toISOString(),\n  };\n}\n\nfunction mapSubscriptionPaid(\n  event: CreemSubscriptionPaidEvent\n): MappedPaymentData | null {\n  const obj = event.object;\n  if (!obj) return null;\n\n  const product = resolveProduct(obj.product);\n  const customer = resolveCustomer(obj.customer);\n  const metadata = obj.metadata;\n\n  const amountCents = product?.price ?? 0;\n  const currency = product?.currency ?? 'USD';\n\n  const transactionId = obj.last_transaction_id ?? obj.id;\n\n  return {\n    transactionId,\n    currency,\n    amount: centsToDecimal(amountCents, currency),\n    visitorId: extractVisitorId(metadata),\n    sessionId: extractSessionId(metadata),\n    customerId: customer?.id,\n    customerEmail: customer?.email,\n    customerName: customer?.name,\n    isRenewal: true,\n    isRefunded: false,\n    timestamp:\n      obj.last_transaction_date ??\n      obj.current_period_start_date ??\n      new Date(event.created_at).toISOString(),\n  };\n}\n\nfunction mapRefundCreated(\n  event: CreemRefundCreatedEvent\n): MappedPaymentData | null {\n  const obj = event.object;\n  if (!obj) return null;\n\n  const order = obj.order;\n  const product = obj.product;\n  const customer = obj.customer;\n  const metadata = obj.metadata;\n\n  const amountCents = obj.amount ?? order?.amount ?? product?.price ?? 0;\n  const currency = order?.currency ?? product?.currency ?? 'USD';\n\n  return {\n    transactionId: obj.id,\n    currency,\n    amount: centsToDecimal(amountCents, currency),\n    visitorId: extractVisitorId(metadata),\n    sessionId: extractSessionId(metadata),\n    customerId: customer?.id,\n    customerEmail: customer?.email,\n    customerName: customer?.name,\n    isRenewal: false,\n    isRefunded: true,\n    timestamp: obj.created_at ?? new Date(event.created_at).toISOString(),\n  };\n}\n\nfunction extractVisitorId(metadata?: Record<string, unknown>): string | null {\n  if (!metadata) return null;\n  const id = metadata.datafast_visitor_id;\n  return typeof id === 'string' && id.length > 0 ? id : null;\n}\n\nfunction extractSessionId(metadata?: Record<string, unknown>): string | undefined {\n  if (!metadata) return undefined;\n  const id = metadata.datafast_session_id;\n  return typeof id === 'string' && id.length > 0 ? id : undefined;\n}\n\nfunction centsToDecimal(cents: number, currency: string): number {\n  if (ZERO_DECIMAL_CURRENCIES.has(currency.toUpperCase())) {\n    return cents;\n  }\n  if (THREE_DECIMAL_CURRENCIES.has(currency.toUpperCase())) {\n    return Math.round(cents) / 1000;\n  }\n  return Math.round(cents) / 100;\n}\n\nfunction resolveProduct(\n  p: string | CreemWebhookProduct | undefined\n): CreemWebhookProduct | undefined {\n  if (!p || typeof p === 'string') return undefined;\n  return p;\n}\n\nfunction resolveCustomer(\n  c: string | CreemWebhookCustomer | undefined\n): CreemWebhookCustomer | undefined {\n  if (!c || typeof c === 'string') return undefined;\n  return c;\n}\n\nexport function mapToDataFastPaymentRequest(\n  mapped: MappedPaymentData\n): DataFastPaymentRequest {\n  return {\n    transaction_id: mapped.transactionId,\n    currency: mapped.currency,\n    amount: mapped.amount,\n    timestamp: mapped.timestamp,\n    refunded: mapped.isRefunded,\n    renewal: mapped.isRenewal,\n    customer_id: mapped.customerId,\n    email: mapped.customerEmail,\n    name: mapped.customerName,\n    datafast_visitor_id: mapped.visitorId ?? undefined,\n    datafast_session_id: mapped.sessionId,\n  };\n}\n","import type { IdempotencyStore } from '../types/index.js';\n\nexport class MemoryIdempotencyStore implements IdempotencyStore {\n  private store = new Map<string, boolean>();\n  private ttl = new Map<string, number>();\n  private readonly defaultTtlSeconds = 86400;\n\n  async has(id: string): Promise<boolean> {\n    const expiry = this.ttl.get(id);\n    if (expiry && Date.now() > expiry) {\n      this.store.delete(id);\n      this.ttl.delete(id);\n      return false;\n    }\n    return this.store.has(id);\n  }\n\n  async set(id: string, ttlSeconds = this.defaultTtlSeconds): Promise<void> {\n    this.store.set(id, true);\n    this.ttl.set(id, Date.now() + ttlSeconds * 1000);\n  }\n}\n\nexport function createMemoryIdempotencyStore(): MemoryIdempotencyStore {\n  return new MemoryIdempotencyStore();\n}\n","export interface IDataFastRequestError {\n  retryable: boolean;\n  status: number;\n  requestId?: string;\n}\n\nexport class CreemDataFastError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'CreemDataFastError';\n    Error.captureStackTrace?.(this, this.constructor);\n  }\n}\n\nexport class InvalidCreemSignatureError extends CreemDataFastError {\n  constructor(message = 'Invalid webhook signature') {\n    super(message);\n    this.name = 'InvalidCreemSignatureError';\n  }\n}\n\nexport class MissingTrackingError extends CreemDataFastError {\n  constructor(message = 'Missing datafast_visitor_id') {\n    super(message);\n    this.name = 'MissingTrackingError';\n  }\n}\n\nexport class DataFastRequestError extends CreemDataFastError implements IDataFastRequestError {\n  retryable: boolean;\n  status: number;\n  requestId?: string;\n\n  constructor(\n    message: string,\n    options: { retryable: boolean; status: number; requestId?: string }\n  ) {\n    super(message);\n    this.name = 'DataFastRequestError';\n    this.retryable = options.retryable;\n    this.status = options.status;\n    this.requestId = options.requestId;\n  }\n}\n","import * as crypto from 'node:crypto';\nimport type { WebhookHandlerOptions, CreemWebhookRaw, Logger, IdempotencyStore } from '../types/index.js';\nimport type { DataFastPaymentResponse } from '../types/datafast.js';\nimport { mapCreemEventToDataFast, mapToDataFastPaymentRequest } from '../utils/map-payment.js';\nimport { createMemoryIdempotencyStore } from '../utils/idempotency.js';\nimport { DataFastRequestError as DFError } from '../errors.js';\n\nconst DATAFAST_API_URL = 'https://datafa.st/api/v1/payments';\n\nconst DEFAULT_TIMEOUT_MS = 8000;\nconst DEFAULT_RETRIES = 1;\nconst DEFAULT_BASE_DELAY_MS = 250;\nconst DEFAULT_MAX_DELAY_MS = 2000;\n\nexport class WebhookHandler {\n  private webhookSecret?: string;\n  private datafastApiKey: string;\n  private testMode: boolean;\n  private timeoutMs: number;\n  private retryRetries: number;\n  private retryBaseDelayMs: number;\n  private retryMaxDelayMs: number;\n  private strictTracking: boolean;\n  private idempotencyStore: IdempotencyStore;\n  private logger: Logger;\n  private onPaymentSuccess?: WebhookHandlerOptions['onPaymentSuccess'];\n  private onError?: WebhookHandlerOptions['onError'];\n\n  constructor(options: WebhookHandlerOptions) {\n    this.webhookSecret = options.webhookSecret;\n    this.datafastApiKey = options.datafastApiKey;\n    this.testMode = options.testMode ?? false;\n    this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n    this.retryRetries = options.retry?.retries ?? DEFAULT_RETRIES;\n    this.retryBaseDelayMs = options.retry?.baseDelayMs ?? DEFAULT_BASE_DELAY_MS;\n    this.retryMaxDelayMs = options.retry?.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n    this.strictTracking = options.strictTracking ?? false;\n    this.idempotencyStore = options.idempotencyStore ?? createMemoryIdempotencyStore();\n    this.logger = options.logger ?? createDefaultLogger();\n    this.onPaymentSuccess = options.onPaymentSuccess;\n    this.onError = options.onError;\n  }\n\n  async handleWebhook(\n    rawBody: string,\n    signature?: string\n  ): Promise<{ success: boolean; message: string; ignored?: boolean }> {\n    try {\n      if (this.webhookSecret) {\n        if (!signature) {\n          return { success: false, message: 'Missing creem-signature header' };\n        }\n        if (!this.verifySignature(rawBody, signature)) {\n          return { success: false, message: 'Invalid webhook signature' };\n        }\n      }\n\n      const raw = JSON.parse(rawBody) as CreemWebhookRaw;\n\n      const alreadyProcessed = await this.idempotencyStore.has(raw.id);\n      if (alreadyProcessed) {\n        this.logger.debug?.(`Webhook ${raw.id} already processed, skipping`);\n        return { success: true, message: 'Already processed', ignored: true };\n      }\n\n      if (!this.isSupportedEvent(raw.eventType)) {\n        return { success: true, message: `Event type \"${raw.eventType}\" ignored`, ignored: true };\n      }\n\n      const mappedData = mapCreemEventToDataFast(raw);\n      if (!mappedData) {\n        return { success: true, message: 'No payment data to forward' };\n      }\n\n      if (this.strictTracking && !mappedData.visitorId) {\n        throw new Error('Missing datafast_visitor_id');\n      }\n\n      const datafastRequest = mapToDataFastPaymentRequest(mappedData);\n\n      const response = await this.sendToDataFastWithRetry(datafastRequest as unknown as Record<string, unknown>);\n\n      await this.idempotencyStore.set(raw.id);\n\n      if (this.onPaymentSuccess) {\n        const event = JSON.parse(rawBody);\n        await this.onPaymentSuccess({\n          creemEvent: event,\n          datafastResponse: response,\n        });\n      }\n\n      return { success: true, message: 'Payment forwarded to DataFast' };\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n\n      if (this.onError) {\n        await this.onError(error instanceof Error ? error : new Error(errorMessage));\n      }\n\n      return { success: false, message: errorMessage };\n    }\n  }\n\n  verifySignature(payload: string, signature: string): boolean {\n    const expected = crypto\n      .createHmac('sha256', this.webhookSecret!)\n      .update(payload)\n      .digest('hex');\n\n    try {\n      return crypto.timingSafeEqual(\n        Buffer.from(expected, 'hex'),\n        Buffer.from(signature, 'hex')\n      );\n    } catch {\n      return false;\n    }\n  }\n\n  private isSupportedEvent(eventType: string): boolean {\n    return (\n      eventType === 'checkout.completed' ||\n      eventType === 'subscription.paid' ||\n      eventType === 'refund.created'\n    );\n  }\n\n  private async sendToDataFastWithRetry(\n    payment: Record<string, unknown>\n  ): Promise<DataFastPaymentResponse> {\n    let lastError: Error | null = null;\n    const maxAttempts = this.retryRetries + 1;\n\n    for (let attempt = 0; attempt < maxAttempts; attempt++) {\n      try {\n        return await this.sendToDataFast(payment);\n      } catch (error) {\n        lastError = error instanceof Error ? error : new Error(String(error));\n\n        const isRetryable = this.isRetryableError(error);\n\n        if (!isRetryable || attempt === maxAttempts - 1) {\n          throw error;\n        }\n\n        const delay = Math.min(\n          this.retryBaseDelayMs * Math.pow(2, attempt),\n          this.retryMaxDelayMs\n        );\n\n        this.logger.warn?.(`DataFast request failed, retrying in ${delay}ms`, {\n          attempt: attempt + 1,\n          maxAttempts,\n          error: lastError.message,\n        });\n\n        await this.sleep(delay);\n      }\n    }\n\n    throw lastError;\n  }\n\n  private isRetryableError(error: unknown): boolean {\n    if (error instanceof DFError) {\n      return error.retryable;\n    }\n    if (error instanceof TypeError && error.message.includes('fetch')) {\n      return true;\n    }\n    return false;\n  }\n\n  private async sendToDataFast(\n    payment: Record<string, unknown>\n  ): Promise<DataFastPaymentResponse> {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);\n\n    try {\n      const baseUrl = this.testMode\n        ? 'https://test-api.datafa.st/api/v1/payments'\n        : DATAFAST_API_URL;\n\n      const response = await fetch(baseUrl, {\n        method: 'POST',\n        headers: {\n          Authorization: `Bearer ${this.datafastApiKey}`,\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(payment),\n        signal: controller.signal,\n      });\n\n      if (!response.ok) {\n        const status = response.status;\n        const body = await response.text();\n        const retryable = status === 408 || status === 429 || status >= 500;\n\n        throw new DFError(`DataFast API error (${status}): ${body}`, {\n          retryable,\n          status,\n        });\n      }\n\n      return response.json() as Promise<DataFastPaymentResponse>;\n    } catch (error) {\n      if (error instanceof DFError) throw error;\n\n      const message = error instanceof Error ? error.message : 'Unknown error';\n      const retryable = message.includes('aborted') || message.includes('fetch');\n\n      throw new DFError(message, { retryable, status: 0 });\n    } finally {\n      clearTimeout(timeoutId);\n    }\n  }\n\n  private sleep(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n}\n\nexport function createWebhookHandler(options: WebhookHandlerOptions): WebhookHandler {\n  return new WebhookHandler(options);\n}\n\nfunction createDefaultLogger(): Logger {\n  return {\n    debug: console.debug.bind(console),\n    info: console.info.bind(console),\n    warn: console.warn.bind(console),\n    error: console.error.bind(console),\n  };\n}\n\nexport default WebhookHandler;\n","import type { Request, Response, NextFunction } from 'express';\nimport { createWebhookHandler } from './webhook-handler.js';\nimport type { WebhookHandlerOptions } from '../types/index.js';\n\nexport interface ExpressWebhookMiddlewareOptions extends WebhookHandlerOptions {}\n\n/**\n * Express middleware that handles incoming CREEM webhooks and forwards\n * payment events to DataFast.\n *\n * **Important:** The request body must be available as a raw string for\n * signature verification.  If you use `express.json()` globally, this\n * middleware will fall back to `JSON.stringify(req.body)`.  For proper\n * signature verification, register a raw body parser on this route:\n *\n * ```ts\n * app.post('/webhooks/creem',\n *   express.raw({ type: 'application/json' }),\n *   creemDataFastWebhook({ ... })\n * );\n * ```\n */\nexport function creemDataFastWebhook(options: ExpressWebhookMiddlewareOptions) {\n  const handler = createWebhookHandler(options);\n\n  return async (req: Request, res: Response, next: NextFunction) => {\n    try {\n      const signature = req.headers['creem-signature'] as string | undefined;\n\n      // Prefer the raw buffer if available (from express.raw()), otherwise\n      // fall back to stringifying the parsed body.\n      let rawBody: string;\n      if (Buffer.isBuffer(req.body)) {\n        rawBody = req.body.toString('utf-8');\n      } else if (typeof req.body === 'string') {\n        rawBody = req.body;\n      } else {\n        rawBody = JSON.stringify(req.body);\n      }\n\n      const result = await handler.handleWebhook(rawBody, signature);\n\n      if (result.success) {\n        res.status(200).json({ status: 'ok', message: result.message });\n      } else {\n        res.status(400).json({ status: 'error', message: result.message });\n      }\n    } catch (error) {\n      next(error);\n    }\n  };\n}\n\nexport default creemDataFastWebhook;\n","import { NextResponse } from 'next/server';\nimport type { NextRequest } from 'next/server';\nimport { createWebhookHandler } from './webhook-handler.js';\nimport type { WebhookHandlerOptions } from '../types/index.js';\n\nexport interface NextJsWebhookOptions extends WebhookHandlerOptions {}\n\n/**\n * Handle a CREEM webhook inside a Next.js App Router `POST` handler.\n *\n * ```ts\n * // app/api/webhooks/creem/route.ts\n * import { creemDataFastWebhookHandler } from 'creem-datafast-integration';\n *\n * export async function POST(request: NextRequest) {\n *   return creemDataFastWebhookHandler(request, { ... });\n * }\n * ```\n */\nexport async function creemDataFastWebhookHandler(\n  req: NextRequest,\n  options: NextJsWebhookOptions\n): Promise<NextResponse> {\n  try {\n    const handler = createWebhookHandler(options);\n\n    const signature = req.headers.get('creem-signature') || undefined;\n    const rawBody = await req.text();\n\n    const result = await handler.handleWebhook(rawBody, signature);\n\n    if (result.success) {\n      return NextResponse.json({ status: 'ok', message: result.message });\n    }\n\n    return NextResponse.json(\n      { status: 'error', message: result.message },\n      { status: 400 }\n    );\n  } catch (error) {\n    const message = error instanceof Error ? error.message : 'Unknown error';\n    return NextResponse.json(\n      { status: 'error', message },\n      { status: 500 }\n    );\n  }\n}\n\n/**\n * Create a reusable Next.js POST handler with baked-in options.\n */\nexport function createNextJsWebhookHandler(options: NextJsWebhookOptions) {\n  return (req: NextRequest) => creemDataFastWebhookHandler(req, options);\n}\n\nexport default creemDataFastWebhookHandler;\n","import { createWebhookHandler } from './webhook-handler.js';\nimport type { WebhookHandlerOptions } from '../types/index.js';\n\nexport interface GenericWebhookHandlerOptions extends WebhookHandlerOptions {\n  /** Return the raw request body as a string. */\n  getRawBody: () => Promise<string> | string;\n  /** Return the request headers. */\n  getHeaders: () => Record<string, string | string[] | undefined>;\n}\n\n/**\n * Framework-agnostic webhook handler.  Works with Hono, Fastify, Koa,\n * Cloudflare Workers, or anything else.\n *\n * ```ts\n * const result = await handleGenericWebhook({\n *   creemApiKey: '...',\n *   datafastApiKey: '...',\n *   webhookSecret: '...',\n *   getRawBody: () => rawBodyString,\n *   getHeaders: () => requestHeaders,\n * });\n * ```\n */\nexport async function handleGenericWebhook(\n  options: GenericWebhookHandlerOptions\n): Promise<{ success: boolean; message: string }> {\n  const handler = createWebhookHandler({\n    creemApiKey: options.creemApiKey,\n    datafastApiKey: options.datafastApiKey,\n    webhookSecret: options.webhookSecret,\n    cookieName: options.cookieName,\n    onPaymentSuccess: options.onPaymentSuccess,\n    onError: options.onError,\n  });\n\n  const headers = options.getHeaders();\n  const signature = headers['creem-signature'] as string | undefined;\n  const body = await options.getRawBody();\n\n  return handler.handleWebhook(body, signature);\n}\n\nexport default handleGenericWebhook;\n"]}