payweave 0.0.0
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/LICENSE +21 -0
- package/README.md +272 -0
- package/dist/_tsup-dts-rollup.d.ts +19470 -0
- package/dist/chunk-4R5OGOCC.js +94 -0
- package/dist/chunk-4R5OGOCC.js.map +1 -0
- package/dist/chunk-535Q3GUN.js +175 -0
- package/dist/chunk-535Q3GUN.js.map +1 -0
- package/dist/chunk-67NRYGRC.js +192 -0
- package/dist/chunk-67NRYGRC.js.map +1 -0
- package/dist/chunk-CGQ73I4I.js +568 -0
- package/dist/chunk-CGQ73I4I.js.map +1 -0
- package/dist/chunk-CJEYDHY6.js +18 -0
- package/dist/chunk-CJEYDHY6.js.map +1 -0
- package/dist/chunk-CR63JAAS.js +3 -0
- package/dist/chunk-CR63JAAS.js.map +1 -0
- package/dist/chunk-E633MKVX.js +1507 -0
- package/dist/chunk-E633MKVX.js.map +1 -0
- package/dist/chunk-FBPOCXRZ.js +1135 -0
- package/dist/chunk-FBPOCXRZ.js.map +1 -0
- package/dist/chunk-HTRGMZFH.js +267 -0
- package/dist/chunk-HTRGMZFH.js.map +1 -0
- package/dist/chunk-IUVGM3K7.js +765 -0
- package/dist/chunk-IUVGM3K7.js.map +1 -0
- package/dist/chunk-JD4OZHRI.js +326 -0
- package/dist/chunk-JD4OZHRI.js.map +1 -0
- package/dist/chunk-NV3MZF7L.js +139 -0
- package/dist/chunk-NV3MZF7L.js.map +1 -0
- package/dist/chunk-NXQBP35U.js +13 -0
- package/dist/chunk-NXQBP35U.js.map +1 -0
- package/dist/chunk-QJHXDZYC.js +412 -0
- package/dist/chunk-QJHXDZYC.js.map +1 -0
- package/dist/chunk-TWZK62TZ.js +83 -0
- package/dist/chunk-TWZK62TZ.js.map +1 -0
- package/dist/cli/index.js +35381 -0
- package/dist/core/index.d.ts +85 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/db/drizzle/index.d.ts +6 -0
- package/dist/db/drizzle/index.js +1532 -0
- package/dist/db/drizzle/index.js.map +1 -0
- package/dist/db/index.d.ts +43 -0
- package/dist/db/index.js +3 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/mongodb/index.d.ts +3 -0
- package/dist/db/mongodb/index.js +934 -0
- package/dist/db/mongodb/index.js.map +1 -0
- package/dist/db/mysql/index.d.ts +1 -0
- package/dist/db/mysql/index.js +12 -0
- package/dist/db/mysql/index.js.map +1 -0
- package/dist/db/postgres/index.d.ts +5 -0
- package/dist/db/postgres/index.js +791 -0
- package/dist/db/postgres/index.js.map +1 -0
- package/dist/db/prisma/index.d.ts +1 -0
- package/dist/db/prisma/index.js +12 -0
- package/dist/db/prisma/index.js.map +1 -0
- package/dist/db/sqlite/index.d.ts +5 -0
- package/dist/db/sqlite/index.js +750 -0
- package/dist/db/sqlite/index.js.map +1 -0
- package/dist/express/index.d.ts +1 -0
- package/dist/express/index.js +3 -0
- package/dist/express/index.js.map +1 -0
- package/dist/fastify/index.d.ts +1 -0
- package/dist/fastify/index.js +3 -0
- package/dist/fastify/index.js.map +1 -0
- package/dist/flutterwave/index.d.ts +27 -0
- package/dist/flutterwave/index.js +9 -0
- package/dist/flutterwave/index.js.map +1 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +3677 -0
- package/dist/index.js.map +1 -0
- package/dist/next/index.d.ts +1 -0
- package/dist/next/index.js +3 -0
- package/dist/next/index.js.map +1 -0
- package/dist/paystack/index.d.ts +33 -0
- package/dist/paystack/index.js +9 -0
- package/dist/paystack/index.js.map +1 -0
- package/dist/products/index.d.ts +22 -0
- package/dist/products/index.js +7 -0
- package/dist/products/index.js.map +1 -0
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.js +69 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/unified/index.d.ts +41 -0
- package/dist/unified/index.js +6 -0
- package/dist/unified/index.js.map +1 -0
- package/dist/webhooks/index.d.ts +8 -0
- package/dist/webhooks/index.js +8 -0
- package/dist/webhooks/index.js.map +1 -0
- package/package.json +164 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/db/sqlite/errors.ts","../../../src/db/sqlite/id.ts","../../../src/db/sqlite/migrations-executor.ts","../../../src/db/sqlite/rows.ts","../../../src/db/sqlite/adapter.ts","../../../src/db/sqlite/drivers/better-sqlite3.ts","../../../src/db/sqlite/drivers/libsql.ts","../../../src/db/sqlite/runner.ts","../../../src/db/sqlite/url.ts","../../../src/db/sqlite/index.ts"],"names":["period","remaining","applied"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error helpers for the sqlite adapter (docs/v1/database.md §7, PW-706):\n * actionable install-hint errors when an optional peer driver is missing\n * (mirrors the PW-505 stub's message style: name the subpath, the missing\n * package, and an install command), and a thin wrapper turning raw driver\n * exceptions into {@link PayweaveError} subclasses (AGENTS.md §2: public SDK\n * methods only ever throw `PayweaveError` subclasses).\n */\nimport { PayweaveConfigError, PayweaveError, PayweaveValidationError } from \"../../core/errors\";\nimport type { SqliteDriverKind } from \"./url\";\n\nconst DRIVER_PACKAGE: Record<SqliteDriverKind, string> = {\n \"better-sqlite3\": \"better-sqlite3\",\n libsql: \"@libsql/client\",\n};\n\n/**\n * The optional peer driver required to open `url` is not installed. Named\n * per-URL (not a generic \"install a sqlite driver\" message) so the caller\n * knows exactly which of the two packages this specific URL needs\n * (database.md §4: \"TWO optional peer drivers behind one subpath\").\n */\nexport function installHintError(driver: SqliteDriverKind, url: string, cause: unknown): PayweaveConfigError {\n const pkg = DRIVER_PACKAGE[driver];\n return new PayweaveConfigError(\n `payweave/db/sqlite: opening ${JSON.stringify(url)} requires the \"${pkg}\" package, which is ` +\n `not installed (it is an optional peerDependency of \"payweave\"). Run \\`npm install ${pkg}\\` ` +\n \"(or your package manager's equivalent) and try again.\",\n { cause },\n );\n}\n\n/** SQLite/libSQL error `.code` values that mean \"a constraint was violated\". */\nfunction isConstraintViolation(error: unknown): boolean {\n const code = (error as { code?: unknown } | null)?.code;\n return typeof code === \"string\" && code.startsWith(\"SQLITE_CONSTRAINT\");\n}\n\n/**\n * Normalize a raw driver error into a {@link PayweaveError} subclass. Constraint\n * violations (e.g. the partial-unique active-subscription rule, `pw_customers\n * .external_id`) become {@link PayweaveValidationError} — the caller supplied\n * input that conflicts with existing state; anything else becomes a generic\n * {@link PayweaveError}, preserving the driver error as `cause` either way.\n */\nexport function wrapDriverError(error: unknown, message: string): PayweaveError {\n if (error instanceof PayweaveError) return error;\n if (isConstraintViolation(error)) {\n return new PayweaveValidationError(message, { cause: error });\n }\n return new PayweaveError(message, { cause: error, isRetryable: false });\n}\n","/**\n * `pwv_<ulid>` id generation for the SQLite adapter (docs/v1/database.md §2,\n * PW-706). `src/db/schema.ts`'s `pwIdSchema` requires `pwv_` followed by a\n * 26-character Crockford-Base32 ULID; no ULID generator exists anywhere in\n * `src/` (checked: `src/unified/reference.ts`'s `pwv_`-prefixed generator\n * strips dashes from a `randomUUID()` — 32 hex characters, not a 26-char\n * Crockford ULID, and serves a different purpose (cross-provider references,\n * not row ids), so it is not reused here.\n *\n * This is a minimal, dependency-free ULID implementation (spec:\n * https://github.com/ulid/spec) — no third-party `ulid` package, keeping the\n * SDK's zod-only `dependencies` rule intact. Monotonicity\n * within the same millisecond is NOT implemented (out of scope for row ids\n * that only need to be unique, not strictly sortable under sub-ms bursts);\n * randomness is `node:crypto`'s CSPRNG.\n */\nimport { randomInt } from \"node:crypto\";\n\n/** Crockford's Base32 alphabet (32 symbols; excludes I, L, O, U). */\nconst ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nconst ENCODING_LEN = ENCODING.length;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\nfunction encodeTime(timeMs: number, len: number): string {\n if (!Number.isSafeInteger(timeMs) || timeMs < 0) {\n throw new RangeError(`ulid: time must be a non-negative safe integer — got ${timeMs}`);\n }\n let remaining = timeMs;\n let out = \"\";\n for (let i = 0; i < len; i++) {\n const mod = remaining % ENCODING_LEN;\n out = ENCODING.charAt(mod) + out;\n remaining = Math.floor(remaining / ENCODING_LEN);\n }\n return out;\n}\n\nfunction encodeRandom(len: number): string {\n let out = \"\";\n for (let i = 0; i < len; i++) {\n out += ENCODING.charAt(randomInt(0, ENCODING_LEN));\n }\n return out;\n}\n\n/** A fresh ULID (26 chars: 10 time + 16 random), uppercase Crockford Base32. */\nexport function ulid(timeMs: number = Date.now()): string {\n return encodeTime(timeMs, TIME_LEN) + encodeRandom(RANDOM_LEN);\n}\n\n/**\n * A fresh Payweave row id: `pwv_` + a 26-char ULID — matches\n * `src/db/schema.ts`'s `pwIdSchema` exactly.\n */\nexport function generatePwId(timeMs: number = Date.now()): string {\n return `pwv_${ulid(timeMs)}`;\n}\n","/**\n * Bridges the sqlite adapter's {@link Runner} to PW-703's driver-agnostic\n * {@link MigrationExecutor} (docs/v1/database.md §4). The sqlite dialect\n * already emits `?` placeholders and expects epoch-millisecond binds for\n * timestamp columns (`src/db/migrations/ledger.ts`), so this bridge is a thin\n * pass-through — no dialect translation needed here.\n */\nimport type { MigrationExecutor, MigrationQueryResult } from \"../migrations/index\";\nimport type { Runner } from \"./runner\";\n\nexport class SqliteMigrationExecutor implements MigrationExecutor {\n readonly #runner: Runner;\n\n constructor(runner: Runner) {\n this.#runner = runner;\n }\n\n async query(sql: string, params: readonly unknown[] = []): Promise<MigrationQueryResult> {\n const { rows } = await this.#runner.execute(sql, params);\n return { rows };\n }\n\n async transaction<T>(fn: (tx: MigrationExecutor) => Promise<T>): Promise<T> {\n return this.#runner.transaction((tx) => fn(new SqliteMigrationExecutor(tx)));\n }\n}\n","/**\n * Row (de)serialization between the sqlite dialect's on-disk encoding and the\n * `z.infer` row types in `src/db/schema.ts` (docs/v1/database.md §4 storage\n * mapping): timestamps are epoch-millisecond `INTEGER`s, JSON columns are\n * `TEXT`, and booleans are `INTEGER` 0|1 (`src/db/migrations/ddl.ts` header).\n *\n * Every reader is defensive about column types (`noUncheckedIndexedAccess` —\n * driver rows are `Record<string, unknown>`) so a driver returning an\n * unexpected shape fails loudly here instead of silently corrupting a row\n * further up the stack.\n */\nimport type {\n PwCustomer,\n PwFeatureBalance,\n PwPlanVersion,\n PwSubscription,\n PwWebhookEvent,\n} from \"../schema\";\n\n/** One driver-returned row: column name -> raw value. */\nexport type SqlRow = Record<string, unknown>;\n\nfunction requireColumn(row: SqlRow, column: string): unknown {\n if (!(column in row)) {\n throw new Error(`sqlite adapter: row is missing expected column \"${column}\"`);\n }\n return row[column];\n}\n\nfunction str(row: SqlRow, column: string): string {\n const value = requireColumn(row, column);\n if (typeof value !== \"string\") {\n throw new Error(`sqlite adapter: expected column \"${column}\" to be a string, got ${typeof value}`);\n }\n return value;\n}\n\nfunction nullableStr(row: SqlRow, column: string): string | null {\n const value = requireColumn(row, column);\n if (value === null || value === undefined) return null;\n if (typeof value !== \"string\") {\n throw new Error(`sqlite adapter: expected column \"${column}\" to be a string or null, got ${typeof value}`);\n }\n return value;\n}\n\nfunction num(row: SqlRow, column: string): number {\n const value = requireColumn(row, column);\n if (typeof value === \"bigint\") return Number(value);\n if (typeof value !== \"number\") {\n throw new Error(`sqlite adapter: expected column \"${column}\" to be a number, got ${typeof value}`);\n }\n return value;\n}\n\nfunction bool(row: SqlRow, column: string): boolean {\n return num(row, column) !== 0;\n}\n\nfunction dateOf(row: SqlRow, column: string): Date {\n return new Date(num(row, column));\n}\n\nfunction nullableDateOf(row: SqlRow, column: string): Date | null {\n const value = requireColumn(row, column);\n if (value === null || value === undefined) return null;\n return new Date(num(row, column));\n}\n\nfunction json<T>(row: SqlRow, column: string): T {\n return JSON.parse(str(row, column)) as T;\n}\n\n// ── Encoders (JS row field -> sqlite bind param) ────────────────────────────\n\nexport const encodeDate = (date: Date): number => date.getTime();\nexport const encodeNullableDate = (date: Date | null): number | null =>\n date === null ? null : date.getTime();\nexport const encodeBool = (value: boolean): number => (value ? 1 : 0);\nexport const encodeJson = (value: unknown): string => JSON.stringify(value);\n\n// ── Row mappers ──────────────────────────────────────────────────────────────\n\nexport function rowToCustomer(row: SqlRow): PwCustomer {\n return {\n id: str(row, \"id\"),\n externalId: str(row, \"external_id\"),\n providerIds: json<Record<string, string>>(row, \"provider_ids\"),\n email: nullableStr(row, \"email\"),\n createdAt: dateOf(row, \"created_at\"),\n updatedAt: dateOf(row, \"updated_at\"),\n };\n}\n\nexport function rowToPlanVersion(row: SqlRow): PwPlanVersion {\n return {\n id: str(row, \"id\"),\n planId: str(row, \"plan_id\"),\n version: num(row, \"version\"),\n group: str(row, \"group\"),\n isDefault: bool(row, \"is_default\"),\n name: nullableStr(row, \"name\"),\n priceMinor: (() => {\n const v = requireColumn(row, \"price_minor\");\n return v === null ? null : num(row, \"price_minor\");\n })(),\n priceCurrency: nullableStr(row, \"price_currency\"),\n priceInterval: nullableStr(row, \"price_interval\") as PwPlanVersion[\"priceInterval\"],\n features: json(row, \"features\"),\n providerRefs: json(row, \"provider_refs\"),\n pushedAt: dateOf(row, \"pushed_at\"),\n };\n}\n\nexport function rowToSubscription(row: SqlRow): PwSubscription {\n return {\n id: str(row, \"id\"),\n customerId: str(row, \"customer_id\"),\n planId: str(row, \"plan_id\"),\n planVersion: num(row, \"plan_version\"),\n group: str(row, \"group\"),\n status: str(row, \"status\") as PwSubscription[\"status\"],\n provider: nullableStr(row, \"provider\"),\n providerSubscriptionRef: nullableStr(row, \"provider_subscription_ref\"),\n currentPeriodStart: dateOf(row, \"current_period_start\"),\n currentPeriodEnd: dateOf(row, \"current_period_end\"),\n cancelAtPeriodEnd: bool(row, \"cancel_at_period_end\"),\n createdAt: dateOf(row, \"created_at\"),\n updatedAt: dateOf(row, \"updated_at\"),\n };\n}\n\nexport function rowToFeatureBalance(row: SqlRow): PwFeatureBalance {\n return {\n id: str(row, \"id\"),\n customerId: str(row, \"customer_id\"),\n featureId: str(row, \"feature_id\"),\n group: str(row, \"group\"),\n used: num(row, \"used\"),\n limit: num(row, \"limit\"),\n resetInterval: str(row, \"reset_interval\") as PwFeatureBalance[\"resetInterval\"],\n anchor: dateOf(row, \"anchor\"),\n periodStart: dateOf(row, \"period_start\"),\n periodEnd: dateOf(row, \"period_end\"),\n planId: str(row, \"plan_id\"),\n planVersion: num(row, \"plan_version\"),\n updatedAt: dateOf(row, \"updated_at\"),\n };\n}\n\nexport function rowToWebhookEvent(row: SqlRow): PwWebhookEvent {\n return {\n dedupeKey: str(row, \"dedupe_key\"),\n provider: str(row, \"provider\"),\n type: str(row, \"type\"),\n receivedAt: dateOf(row, \"received_at\"),\n claimedAt: nullableDateOf(row, \"claimed_at\"),\n appliedAt: nullableDateOf(row, \"applied_at\"),\n };\n}\n","/**\n * Builds a `DatabaseAdapter` (docs/v1/database.md §3) over a {@link Runner} —\n * the sqlite dialect's store implementations. Driver-agnostic: works\n * identically whether `runner` is backed by `better-sqlite3` or\n * `@libsql/client` (see `./runner`'s header for the concurrency model this\n * relies on).\n *\n * ── `balances.consume` atomicity (spec-silent engineering decision) ────────\n * database.md §5's sqlite bullet says to \"express reset+decrement as one\n * statement.\" A literal single `INSERT … ON CONFLICT DO UPDATE … RETURNING`\n * is what this adapter uses for `webhookEvents.claim` (no calendar math\n * needed there — see below). For `consume`, doing the same would require\n * replicating `src/products/period.ts`'s clamp-once month/year arithmetic\n * (the conformance suite's oracle, `metered-usage.md §5`) as portable raw SQL\n * — and NEITHER driver offers a way to call back into that exact JS function\n * from inside a statement (`better-sqlite3` supports registering scalar\n * functions, but `@libsql/client` does not, and the two drivers must behave\n * identically — reimplementing the calendar math independently in SQL risks\n * silent drift from the oracle, which PW-704's own contract notes call out as\n * the one unacceptable outcome: \"if your SQL disagrees, the SQL is wrong\").\n * `init` is also a per-call CREATION template only — an\n * existing row's OWN stored `anchor`/`resetInterval` must drive its reset,\n * which the caller cannot know in advance, so a blind single write can't\n * express this correctly regardless of the calendar-math question.\n *\n * Instead: `consume` reads the current row, decides using `period.ts`\n * directly (exact parity with the oracle by construction), and writes the\n * result back inside `runner.transaction(...)` — atomic because the whole\n * read-decide-write sequence runs as one unit through the adapter's single\n * serialized connection (`./runner`), which is the mechanism database.md §5\n * itself names for sqlite (\"rely on serialized writes\"). `webhookEvents.claim`\n * needs no such read, so it stays a literal single INSERT…ON CONFLICT…\n * RETURNING statement, atomic by the engine's own guarantees regardless of\n * this adapter's serialization.\n */\nimport { PayweaveNotFoundError } from \"../../core/errors\";\nimport { applyMigrations, planMigrations } from \"../migrations/index\";\nimport { currentPeriod } from \"../../products/period\";\nimport type { DatabaseAdapter, PwConsumeInput, PwConsumeResult } from \"../index\";\nimport {\n DEFAULT_STALE_CLAIM_AFTER_MS,\n PW_ACTIVE_SUBSCRIPTION_STATUSES,\n PW_TABLES,\n type PwCustomerUpsert,\n type PwFeatureBalanceInit,\n type PwPlanVersion,\n type PwPlanVersionInput,\n type PwSubscription,\n type PwSubscriptionInput,\n type PwSubscriptionPatch,\n} from \"../schema\";\nimport { wrapDriverError } from \"./errors\";\nimport { generatePwId } from \"./id\";\nimport { SqliteMigrationExecutor } from \"./migrations-executor\";\nimport {\n encodeBool,\n encodeDate,\n encodeJson,\n rowToCustomer,\n rowToFeatureBalance,\n rowToPlanVersion,\n rowToSubscription,\n rowToWebhookEvent,\n} from \"./rows\";\nimport type { Runner } from \"./runner\";\n\nconst ACTIVE_STATUS_PLACEHOLDERS = PW_ACTIVE_SUBSCRIPTION_STATUSES.map(() => \"?\").join(\", \");\n\n/** Stable (sorted-key) JSON for order-independent structural comparison. */\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableStringify).join(\",\")}]`;\n if (value !== null && typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) =>\n a < b ? -1 : a > b ? 1 : 0,\n );\n return `{${entries.map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`).join(\",\")}}`;\n }\n return JSON.stringify(value);\n}\n\n/** The `pw_plans` fields that define plan \"content\" — everything except id/version/pushedAt. */\ninterface PlanContent {\n group: string;\n isDefault: boolean;\n name: string | null;\n priceMinor: number | null;\n priceCurrency: string | null;\n priceInterval: string | null;\n features: unknown;\n providerRefs: unknown;\n}\n\nconst planContent = (p: PwPlanVersion | PwPlanVersionInput): PlanContent => ({\n group: p.group,\n isDefault: p.isDefault,\n name: p.name,\n priceMinor: p.priceMinor,\n priceCurrency: p.priceCurrency,\n priceInterval: p.priceInterval,\n features: p.features,\n providerRefs: p.providerRefs,\n});\n\n/** Whether `input`'s comparable fields match `active`'s — the pushVersion no-op gate. */\nfunction planContentEquals(active: PwPlanVersion, input: PwPlanVersionInput): boolean {\n return stableStringify(planContent(active)) === stableStringify(planContent(input));\n}\n\nconst SUBSCRIPTION_PATCH_FIELDS: ReadonlyArray<{\n key: keyof PwSubscriptionPatch;\n column: string;\n encode: (value: unknown) => unknown;\n}> = [\n { key: \"planId\", column: \"plan_id\", encode: (v) => v },\n { key: \"planVersion\", column: \"plan_version\", encode: (v) => v },\n { key: \"status\", column: \"status\", encode: (v) => v },\n { key: \"provider\", column: \"provider\", encode: (v) => v },\n { key: \"providerSubscriptionRef\", column: \"provider_subscription_ref\", encode: (v) => v },\n { key: \"currentPeriodStart\", column: \"current_period_start\", encode: (v) => encodeDate(v as Date) },\n { key: \"currentPeriodEnd\", column: \"current_period_end\", encode: (v) => encodeDate(v as Date) },\n { key: \"cancelAtPeriodEnd\", column: \"cancel_at_period_end\", encode: (v) => encodeBool(v as boolean) },\n];\n\n/** Build a full `DatabaseAdapter` over `runner` (sqlite dialect). */\nexport function buildAdapter(runner: Runner): DatabaseAdapter {\n return {\n dialect: \"sqlite\",\n customers: {\n getByExternalId: (externalId) => customersGetByExternalId(runner, externalId),\n upsert: (input) => customersUpsert(runner, input),\n linkProviderRef: (externalId, provider, ref) =>\n customersLinkProviderRef(runner, externalId, provider, ref),\n },\n plans: {\n getActiveVersion: (planId) => plansGetActiveVersion(runner, planId),\n listActive: () => plansListActive(runner),\n pushVersion: (plan) => plansPushVersion(runner, plan),\n },\n subscriptions: {\n getActive: (customerId, group) => subscriptionsGetActive(runner, customerId, group),\n create: (input) => subscriptionsCreate(runner, input),\n update: (id, patch) => subscriptionsUpdate(runner, id, patch),\n },\n balances: {\n get: (customerId, featureId, group) => balancesGet(runner, customerId, featureId, group),\n consume: (input) => balancesConsume(runner, input),\n resetTo: (customerId, featureId, group, init) =>\n balancesResetTo(runner, customerId, featureId, group, init),\n },\n webhookEvents: {\n claim: (dedupeKey, meta) => webhookEventsClaim(runner, dedupeKey, meta),\n markApplied: (dedupeKey) => webhookEventsMarkApplied(runner, dedupeKey),\n },\n migrations: {\n status: () => planMigrations(new SqliteMigrationExecutor(runner), \"sqlite\"),\n apply: () => applyMigrations(new SqliteMigrationExecutor(runner), \"sqlite\"),\n },\n transaction: (fn) => runner.transaction((tx) => fn(buildAdapter(tx))),\n };\n}\n\n// ── customers ────────────────────────────────────────────────────────────────\n\nasync function customersGetByExternalId(runner: Runner, externalId: string) {\n const { rows } = await runner.execute(\n `SELECT * FROM ${PW_TABLES.customers} WHERE external_id = ?`,\n [externalId],\n );\n const row = rows[0];\n return row ? rowToCustomer(row) : null;\n}\n\nasync function customersUpsert(runner: Runner, input: PwCustomerUpsert) {\n const now = new Date();\n const id = generatePwId(now.getTime());\n try {\n const { rows } = await runner.execute(\n `INSERT INTO ${PW_TABLES.customers} (id, external_id, provider_ids, email, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(external_id) DO UPDATE SET\n email = COALESCE(excluded.email, ${PW_TABLES.customers}.email),\n updated_at = excluded.updated_at\n RETURNING *`,\n [id, input.externalId, encodeJson({}), input.email ?? null, encodeDate(now), encodeDate(now)],\n );\n const row = rows[0];\n if (!row) throw new Error(\"sqlite adapter: customers.upsert returned no row\");\n return rowToCustomer(row);\n } catch (error) {\n throw wrapDriverError(\n error,\n `payweave/db/sqlite: customers.upsert(${JSON.stringify(input.externalId)}) failed.`,\n );\n }\n}\n\nasync function customersLinkProviderRef(\n runner: Runner,\n externalId: string,\n provider: string,\n ref: string,\n): Promise<void> {\n await runner.transaction(async (tx) => {\n const { rows } = await tx.execute(\n `SELECT * FROM ${PW_TABLES.customers} WHERE external_id = ?`,\n [externalId],\n );\n const row = rows[0];\n if (!row) {\n throw new PayweaveNotFoundError(\n `payweave/db/sqlite: customers.linkProviderRef: no customer with externalId ` +\n `${JSON.stringify(externalId)}.`,\n );\n }\n const customer = rowToCustomer(row);\n const providerIds = { ...customer.providerIds, [provider]: ref };\n await tx.execute(\n `UPDATE ${PW_TABLES.customers} SET provider_ids = ?, updated_at = ? WHERE external_id = ?`,\n [encodeJson(providerIds), encodeDate(new Date()), externalId],\n );\n });\n}\n\n// ── plans ────────────────────────────────────────────────────────────────────\n\nasync function plansGetActiveVersion(runner: Runner, planId: string) {\n const { rows } = await runner.execute(\n `SELECT * FROM ${PW_TABLES.plans} WHERE plan_id = ? ORDER BY version DESC LIMIT 1`,\n [planId],\n );\n const row = rows[0];\n return row ? rowToPlanVersion(row) : null;\n}\n\nasync function plansListActive(runner: Runner) {\n const { rows } = await runner.execute(\n `SELECT p.* FROM ${PW_TABLES.plans} p\n INNER JOIN (\n SELECT plan_id, MAX(version) AS version FROM ${PW_TABLES.plans} GROUP BY plan_id\n ) latest ON latest.plan_id = p.plan_id AND latest.version = p.version`,\n );\n return rows.map(rowToPlanVersion);\n}\n\nasync function plansPushVersion(runner: Runner, plan: PwPlanVersionInput): Promise<PwPlanVersion> {\n return runner.transaction(async (tx) => {\n const { rows } = await tx.execute(\n `SELECT * FROM ${PW_TABLES.plans} WHERE plan_id = ? ORDER BY version DESC LIMIT 1`,\n [plan.planId],\n );\n const activeRow = rows[0];\n const active = activeRow ? rowToPlanVersion(activeRow) : null;\n if (active && planContentEquals(active, plan)) {\n return active;\n }\n const now = new Date();\n const id = generatePwId(now.getTime());\n const nextVersion = (active?.version ?? 0) + 1;\n const { rows: inserted } = await tx.execute(\n `INSERT INTO ${PW_TABLES.plans}\n (id, plan_id, version, \"group\", is_default, name, price_minor, price_currency, price_interval, features, provider_refs, pushed_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n RETURNING *`,\n [\n id,\n plan.planId,\n nextVersion,\n plan.group,\n encodeBool(plan.isDefault),\n plan.name,\n plan.priceMinor,\n plan.priceCurrency,\n plan.priceInterval,\n encodeJson(plan.features),\n encodeJson(plan.providerRefs),\n encodeDate(now),\n ],\n );\n const row = inserted[0];\n if (!row) throw new Error(\"sqlite adapter: plans.pushVersion returned no row\");\n return rowToPlanVersion(row);\n });\n}\n\n// ── subscriptions ────────────────────────────────────────────────────────────\n\nasync function subscriptionsGetActive(runner: Runner, customerId: string, group: string) {\n const { rows } = await runner.execute(\n `SELECT * FROM ${PW_TABLES.subscriptions}\n WHERE customer_id = ? AND \"group\" = ? AND status IN (${ACTIVE_STATUS_PLACEHOLDERS})`,\n [customerId, group, ...PW_ACTIVE_SUBSCRIPTION_STATUSES],\n );\n const row = rows[0];\n return row ? rowToSubscription(row) : null;\n}\n\nasync function subscriptionsCreate(\n runner: Runner,\n input: PwSubscriptionInput,\n): Promise<PwSubscription> {\n const now = new Date();\n const id = generatePwId(now.getTime());\n try {\n const { rows } = await runner.execute(\n `INSERT INTO ${PW_TABLES.subscriptions}\n (id, customer_id, plan_id, plan_version, \"group\", status, provider, provider_subscription_ref,\n current_period_start, current_period_end, cancel_at_period_end, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n RETURNING *`,\n [\n id,\n input.customerId,\n input.planId,\n input.planVersion,\n input.group,\n input.status,\n input.provider,\n input.providerSubscriptionRef,\n encodeDate(input.currentPeriodStart),\n encodeDate(input.currentPeriodEnd),\n encodeBool(input.cancelAtPeriodEnd),\n encodeDate(now),\n encodeDate(now),\n ],\n );\n const row = rows[0];\n if (!row) throw new Error(\"sqlite adapter: subscriptions.create returned no row\");\n return rowToSubscription(row);\n } catch (error) {\n throw wrapDriverError(\n error,\n `payweave/db/sqlite: subscriptions.create for customer ${JSON.stringify(input.customerId)} ` +\n `group ${JSON.stringify(input.group)} violated a uniqueness rule (an active-set ` +\n \"subscription already exists for this customer/group, or another constraint failed).\",\n );\n }\n}\n\nasync function subscriptionsUpdate(\n runner: Runner,\n id: string,\n patch: PwSubscriptionPatch,\n): Promise<PwSubscription> {\n const sets: string[] = [];\n const params: unknown[] = [];\n const patchRecord = patch as Record<string, unknown>;\n for (const field of SUBSCRIPTION_PATCH_FIELDS) {\n if (!(field.key in patch) || patchRecord[field.key] === undefined) continue;\n sets.push(`${field.column} = ?`);\n params.push(field.encode(patchRecord[field.key]));\n }\n sets.push(\"updated_at = ?\");\n params.push(encodeDate(new Date()));\n params.push(id);\n\n try {\n const { rows } = await runner.execute(\n `UPDATE ${PW_TABLES.subscriptions} SET ${sets.join(\", \")} WHERE id = ? RETURNING *`,\n params,\n );\n const row = rows[0];\n if (!row) {\n throw new PayweaveNotFoundError(\n `payweave/db/sqlite: subscriptions.update: no subscription with id ${JSON.stringify(id)}.`,\n );\n }\n return rowToSubscription(row);\n } catch (error) {\n if (error instanceof PayweaveNotFoundError) throw error;\n throw wrapDriverError(error, `payweave/db/sqlite: subscriptions.update(${JSON.stringify(id)}) failed.`);\n }\n}\n\n// ── balances ─────────────────────────────────────────────────────────────────\n\nasync function balancesGet(runner: Runner, customerId: string, featureId: string, group: string) {\n const { rows } = await runner.execute(\n `SELECT * FROM ${PW_TABLES.featureBalances} WHERE customer_id = ? AND feature_id = ? AND \"group\" = ?`,\n [customerId, featureId, group],\n );\n const row = rows[0];\n return row ? rowToFeatureBalance(row) : null;\n}\n\nasync function balancesConsume(runner: Runner, input: PwConsumeInput): Promise<PwConsumeResult> {\n return runner.transaction(async (tx) => {\n const { rows } = await tx.execute(\n `SELECT * FROM ${PW_TABLES.featureBalances} WHERE customer_id = ? AND feature_id = ? AND \"group\" = ?`,\n [input.customerId, input.featureId, input.group],\n );\n const existingRow = rows[0];\n const nowMs = input.now.getTime();\n\n if (!existingRow) {\n const period = currentPeriod(input.init.anchor.getTime(), input.init.resetInterval, nowMs);\n const remaining = input.init.limit; // baseUsed is 0 on creation\n const applied = input.conditional !== true || remaining >= input.amount;\n const used = applied ? input.amount : 0;\n const id = generatePwId(nowMs);\n const { rows: inserted } = await tx.execute(\n `INSERT INTO ${PW_TABLES.featureBalances}\n (id, customer_id, feature_id, \"group\", used, \"limit\", reset_interval, anchor, period_start, period_end, plan_id, plan_version, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n RETURNING *`,\n [\n id,\n input.customerId,\n input.featureId,\n input.group,\n used,\n input.init.limit,\n input.init.resetInterval,\n encodeDate(input.init.anchor),\n period.start,\n period.end,\n input.init.planId,\n input.init.planVersion,\n encodeDate(input.now),\n ],\n );\n const row = inserted[0];\n if (!row) throw new Error(\"sqlite adapter: balances.consume (create) returned no row\");\n return { ...rowToFeatureBalance(row), applied };\n }\n\n const existing = rowToFeatureBalance(existingRow);\n const resetDue = nowMs >= existing.periodEnd.getTime();\n const baseUsed = resetDue ? 0 : existing.used;\n const period = resetDue\n ? currentPeriod(existing.anchor.getTime(), existing.resetInterval, nowMs)\n : { start: existing.periodStart.getTime(), end: existing.periodEnd.getTime() };\n const remaining = existing.limit - baseUsed;\n const applied = input.conditional !== true || remaining >= input.amount;\n\n if (!applied && !resetDue) {\n // Denied and no reset was due: database.md §3 requires the row be left\n // COMPLETELY untouched — including `updatedAt` — so issue no write at all.\n return { ...existing, applied: false };\n }\n\n const finalUsed = applied ? baseUsed + input.amount : baseUsed;\n const { rows: updatedRows } = await tx.execute(\n `UPDATE ${PW_TABLES.featureBalances}\n SET used = ?, period_start = ?, period_end = ?, updated_at = ?\n WHERE id = ?\n RETURNING *`,\n [finalUsed, period.start, period.end, encodeDate(input.now), existing.id],\n );\n const updatedRow = updatedRows[0];\n if (!updatedRow) throw new Error(\"sqlite adapter: balances.consume (update) returned no row\");\n return { ...rowToFeatureBalance(updatedRow), applied };\n });\n}\n\nasync function balancesResetTo(\n runner: Runner,\n customerId: string,\n featureId: string,\n group: string,\n init: PwFeatureBalanceInit,\n): Promise<void> {\n const now = new Date();\n const period = currentPeriod(init.anchor.getTime(), init.resetInterval, now.getTime());\n const id = generatePwId(now.getTime());\n await runner.execute(\n `INSERT INTO ${PW_TABLES.featureBalances}\n (id, customer_id, feature_id, \"group\", used, \"limit\", reset_interval, anchor, period_start, period_end, plan_id, plan_version, updated_at)\n VALUES (?, ?, ?, ?, 0, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(customer_id, feature_id, \"group\") DO UPDATE SET\n used = 0,\n \"limit\" = excluded.\"limit\",\n reset_interval = excluded.reset_interval,\n anchor = excluded.anchor,\n period_start = excluded.period_start,\n period_end = excluded.period_end,\n plan_id = excluded.plan_id,\n plan_version = excluded.plan_version,\n updated_at = excluded.updated_at`,\n [\n id,\n customerId,\n featureId,\n group,\n init.limit,\n init.resetInterval,\n encodeDate(init.anchor),\n period.start,\n period.end,\n init.planId,\n init.planVersion,\n encodeDate(now),\n ],\n );\n}\n\n// ── webhookEvents ────────────────────────────────────────────────────────────\n\nasync function webhookEventsClaim(\n runner: Runner,\n dedupeKey: string,\n meta: { provider: string; type: string; now: Date; staleClaimAfterMs?: number },\n): Promise<boolean> {\n const staleClaimAfterMs = meta.staleClaimAfterMs ?? DEFAULT_STALE_CLAIM_AFTER_MS;\n const nowMs = meta.now.getTime();\n const staleThreshold = nowMs - staleClaimAfterMs;\n const { rows } = await runner.execute(\n `INSERT INTO ${PW_TABLES.webhookEvents} (dedupe_key, provider, type, received_at, claimed_at, applied_at)\n VALUES (?, ?, ?, ?, ?, NULL)\n ON CONFLICT(dedupe_key) DO UPDATE SET claimed_at = excluded.claimed_at\n WHERE ${PW_TABLES.webhookEvents}.applied_at IS NULL\n AND ${PW_TABLES.webhookEvents}.claimed_at <= ?\n RETURNING dedupe_key`,\n [dedupeKey, meta.provider, meta.type, nowMs, nowMs, staleThreshold],\n );\n return rows.length > 0;\n}\n\nasync function webhookEventsMarkApplied(runner: Runner, dedupeKey: string): Promise<void> {\n await runner.execute(\n `UPDATE ${PW_TABLES.webhookEvents} SET applied_at = ? WHERE dedupe_key = ?`,\n [Date.now(), dedupeKey],\n );\n}\n\n// Re-exported so tests can round-trip a raw row without duplicating the\n// mapping logic (e.g. asserting `rowToWebhookEvent` matches `claim`'s writes).\nexport { rowToWebhookEvent };\n","/**\n * `better-sqlite3` backend for the sqlite adapter (docs/v1/database.md §4,\n * PW-706). This module is the ONLY place that touches a `better-sqlite3`\n * `Database` instance; `../index.ts` dynamically imports the driver package\n * and passes the resulting instance in here, so core/`payweave` never pulls\n * `better-sqlite3` into its module graph.\n *\n * `better-sqlite3` executes synchronously — `exec` wraps it in an `async`\n * function so it satisfies the {@link RawDriver} surface, but never `await`s\n * mid-statement, so a synchronous driver throw always rejects the returned\n * promise rather than escaping an `await`-shaped call site.\n */\nimport type { RawDriver, RawResult } from \"../runner\";\nimport type { BetterSqlite3DatabaseLike } from \"../url\";\n\nexport class BetterSqlite3Raw implements RawDriver {\n readonly #db: BetterSqlite3DatabaseLike;\n\n constructor(db: BetterSqlite3DatabaseLike) {\n this.#db = db;\n }\n\n async exec(sql: string, params: readonly unknown[] = []): Promise<RawResult> {\n // Synchronous end-to-end (better-sqlite3); the `async` keyword only makes\n // the return value a promise, matching the uniform Runner/RawDriver\n // contract shared with the libSQL backend.\n const statement = this.#db.prepare(sql);\n if (statement.reader) {\n return { rows: statement.all(...params) as ReadonlyArray<Record<string, unknown>> };\n }\n statement.run(...params);\n return { rows: [] };\n }\n}\n\n/**\n * Convert a `file:` URL (database.md §1 example: `\"file:./payweave.db\"`) into\n * the plain filesystem path `better-sqlite3`'s constructor expects — it does\n * NOT parse `file:` URIs itself (verified empirically: passing the URI\n * literally is treated as a filename containing a colon and fails to open).\n * Handles the no-authority form (`file:./x`, `file:/abs/x`, the documented\n * example) and the double/triple-slash authority forms\n * (`file://./x`, `file:///abs/x`) by stripping one authority-marking `//`;\n * query strings / SQLite URI parameters are out of scope for v1 — pass an\n * already-open `Database` instance for anything fancier.\n */\nexport function sqliteFileUrlToPath(url: string): string {\n const withoutScheme = url.slice(\"file:\".length);\n return withoutScheme.startsWith(\"//\") ? withoutScheme.slice(2) : withoutScheme;\n}\n\n/**\n * Open (or reuse) a `better-sqlite3` `Database` for `url` (`:memory:`,\n * `file:...`, or a bare filesystem path — routing already resolved by\n * `../url.ts`). File-backed databases get WAL + a `busy_timeout` (PW-706\n * brief: cross-PROCESS contention on a shared file needs the engine's own\n * wait/retry, since this adapter's `AutoQueueRunner` only serializes writers\n * within THIS process). `:memory:` skips both — a private in-memory database\n * has no other process to contend with, and WAL is meaningless for it.\n */\nexport function openBetterSqlite3(\n DatabaseCtor: new (filename: string) => BetterSqlite3DatabaseLike,\n url: string,\n): BetterSqlite3DatabaseLike {\n const path = url === \":memory:\" ? \":memory:\" : url.startsWith(\"file:\") ? sqliteFileUrlToPath(url) : url;\n const db = new DatabaseCtor(path);\n if (path !== \":memory:\") {\n db.pragma(\"journal_mode = WAL\");\n db.pragma(\"busy_timeout = 5000\");\n }\n return db;\n}\n","/**\n * `@libsql/client` backend for the sqlite adapter (docs/v1/database.md §4,\n * PW-706). This module is the ONLY place that touches an `@libsql/client`\n * `Client` instance; `../index.ts` dynamically imports the driver package and\n * passes the resulting instance in here, so core/`payweave` never pulls\n * `@libsql/client` into its module graph.\n */\nimport type { RawDriver, RawResult } from \"../runner\";\nimport type { LibsqlClientLike } from \"../url\";\n\nexport class LibsqlRaw implements RawDriver {\n readonly #client: LibsqlClientLike;\n\n constructor(client: LibsqlClientLike) {\n this.#client = client;\n }\n\n async exec(sql: string, params: readonly unknown[] = []): Promise<RawResult> {\n const result = await this.#client.execute({ sql, args: params });\n return { rows: result.rows };\n }\n}\n","/**\n * Concurrency backbone for the sqlite adapter (docs/v1/database.md §5, PW-706).\n *\n * WHY THIS EXISTS (spec-silent engineering decision — see the module-level\n * comment on `consume` in `./adapter` for the full reasoning): `balances.consume`\n * must recompute the CURRENT billing window from the row's OWN stored `anchor`/\n * `resetInterval` (`init` is a creation template only — ignored once a row\n * exists, database.md §3), using the EXACT same clamp-once calendar arithmetic\n * as `src/products/period.ts` (the conformance suite's oracle). Replicating\n * that arithmetic as portable raw SQL (safe across both better-sqlite3 and\n * `@libsql/client`, neither of which exposes a way to call back into JS from\n * inside a statement for a remote/http libSQL connection) risks silent drift\n * from the oracle. Instead this adapter reads the current row, computes the\n * decision in JS via `period.ts` directly, and writes the result back — made\n * SAFE under concurrency by fully serializing every operation through the\n * adapter's single connection (below), exactly matching database.md §5's\n * framing for sqlite: \"rely on serialized writes.\" The PW-706 brief itself\n * says as much: \"An in-memory SQLite database is PER CONNECTION — the adapter\n * must hold exactly one connection... serialization makes it correct, but\n * only through one connection.\"\n *\n * `AutoQueueRunner` is that one connection's gatekeeper: every top-level call\n * (`execute` or `transaction`) is queued onto a single FIFO chain, so at most\n * one SQL \"unit of work\" — whether a bare statement or a whole\n * BEGIN…COMMIT/ROLLBACK block — is ever in flight. `transaction()` hands its\n * callback a `TransactionRunner` bound to the SAME physical connection: its\n * `execute()` runs directly (the queue slot is already held) and its own\n * `transaction()` is a reentrant passthrough (`fn(this)`, no nested BEGIN) —\n * this is what lets `balances.consume`/`plans.pushVersion` internally open\n * their own read-then-write transaction AND compose correctly when called\n * from inside the public `DatabaseAdapter.transaction(fn)` (which itself goes\n * through `AutoQueueRunner.transaction`), without ever double-BEGINning the\n * one connection SQLite disallows nesting on.\n *\n * Object identity (which `Runner` a call holds), not a shared mutable depth\n * counter, is what makes this reentrancy-safe: an UNRELATED concurrent call\n * always goes through `AutoQueueRunner` and therefore always queues behind\n * whatever transaction is currently running — it can never \"see\" someone\n * else's open transaction and mistakenly skip the queue.\n */\n\n/** One row batch from a single SQL statement execution. */\nexport interface RawResult {\n readonly rows: ReadonlyArray<Record<string, unknown>>;\n}\n\n/** The driver-specific execution primitive each backend implements. */\nexport interface RawDriver {\n exec(sql: string, params: readonly unknown[]): Promise<RawResult>;\n}\n\n/** The uniform surface adapter code is written against. */\nexport interface Runner {\n execute(sql: string, params?: readonly unknown[]): Promise<RawResult>;\n /**\n * Run `fn` as one atomic unit. Outermost callers get a real\n * BEGIN IMMEDIATE…COMMIT/ROLLBACK; a `Runner` already inside a transaction\n * (a `TransactionRunner`) treats this as a reentrant passthrough.\n */\n transaction<T>(fn: (tx: Runner) => Promise<T>): Promise<T>;\n}\n\n/**\n * The adapter's single connection gatekeeper. `getDriver` is invoked lazily\n * (memoized by the caller, e.g. `sqliteAdapter`'s connect-on-first-use) so\n * constructing this class never opens a connection itself.\n */\nexport class AutoQueueRunner implements Runner {\n #queue: Promise<void> = Promise.resolve();\n readonly #getDriver: () => Promise<RawDriver>;\n\n constructor(getDriver: () => Promise<RawDriver>) {\n this.#getDriver = getDriver;\n }\n\n #enqueue<T>(fn: () => Promise<T>): Promise<T> {\n const result = this.#queue.then(fn);\n // The queue chain itself must never reject, or every later-enqueued\n // operation would wedge behind one failure forever.\n this.#queue = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n execute(sql: string, params: readonly unknown[] = []): Promise<RawResult> {\n return this.#enqueue(async () => {\n const driver = await this.#getDriver();\n return driver.exec(sql, params);\n });\n }\n\n transaction<T>(fn: (tx: Runner) => Promise<T>): Promise<T> {\n return this.#enqueue(async () => {\n const driver = await this.#getDriver();\n await driver.exec(\"BEGIN IMMEDIATE\", []);\n const txRunner = new TransactionRunner(driver);\n try {\n const result = await fn(txRunner);\n await driver.exec(\"COMMIT\", []);\n return result;\n } catch (error) {\n await driver.exec(\"ROLLBACK\", []).catch(() => undefined);\n throw error;\n }\n });\n }\n}\n\n/** Bound to an already-open transaction on the adapter's one connection. */\nexport class TransactionRunner implements Runner {\n readonly #driver: RawDriver;\n\n constructor(driver: RawDriver) {\n this.#driver = driver;\n }\n\n execute(sql: string, params: readonly unknown[] = []): Promise<RawResult> {\n return this.#driver.exec(sql, params);\n }\n\n // Reentrant: already inside one atomic unit, so nested `transaction()`\n // calls (e.g. a user's `db.transaction(tx => tx.balances.consume(...))`)\n // just run inline rather than attempting a nested BEGIN.\n transaction<T>(fn: (tx: Runner) => Promise<T>): Promise<T> {\n return fn(this);\n }\n}\n","/**\n * Input routing for `sqliteAdapter(...)` (docs/v1/database.md §1/§4, PW-706).\n *\n * `sqliteAdapter` accepts EITHER `{ url }` (routed to the right driver by\n * scheme, database.md §4: \"TWO optional peer drivers behind one subpath\") OR\n * an already-constructed driver instance — a `better-sqlite3` `Database` or an\n * `@libsql/client` `Client` — matching how the postgres/mysql adapters accept\n * a caller-owned `Pool`. Detection is structural (no driver import needed to\n * classify — core pulls no driver code, database.md §7).\n *\n * URL scheme routing (PW-706 brief, backlog AC):\n * - `:memory:`, `file:...`, or a bare filesystem path (no `scheme://`) →\n * `better-sqlite3`.\n * - `libsql://`, `wss://`, `https://`, `http://` → `@libsql/client` (Turso /\n * remote libSQL; `http(s)://` also covers a local `sqld` server).\n * - Any other `scheme://...` is rejected EAGERLY (synchronously, at\n * `sqliteAdapter()` call time — database.md §1: adapters validate input\n * eagerly and connect lazily).\n *\n * All validation here is pure and synchronous — no driver import, no I/O.\n */\nimport { PayweaveConfigError } from \"../../core/errors\";\n\n/** Which optional peer driver a resolved SQLite target requires. */\nexport type SqliteDriverKind = \"better-sqlite3\" | \"libsql\";\n\n/** The minimal shape of a `better-sqlite3` `Statement` this adapter relies on. */\nexport interface BetterSqlite3StatementLike {\n readonly reader: boolean;\n run(...params: unknown[]): unknown;\n all(...params: unknown[]): unknown[];\n}\n\n/** The minimal shape of a `better-sqlite3` `Database` this adapter relies on. */\nexport interface BetterSqlite3DatabaseLike {\n prepare(sql: string): BetterSqlite3StatementLike;\n pragma(source: string): unknown;\n}\n\n/** The minimal shape of an `@libsql/client` `Client` this adapter relies on. */\nexport interface LibsqlClientLike {\n execute(\n stmt: { sql: string; args: readonly unknown[] } | string,\n ): Promise<{ rows: ReadonlyArray<Record<string, unknown>> }>;\n batch?: unknown;\n}\n\n/** Where `sqliteAdapter` should connect, resolved eagerly from its input. */\nexport type SqliteConnectTarget =\n | { readonly kind: \"url\"; readonly driver: SqliteDriverKind; readonly url: string }\n | { readonly kind: \"better-sqlite3-instance\"; readonly database: BetterSqlite3DatabaseLike }\n | { readonly kind: \"libsql-instance\"; readonly client: LibsqlClientLike };\n\nconst LIBSQL_URL_SCHEMES = [\"libsql://\", \"wss://\", \"https://\", \"http://\"];\n\n/**\n * Classify a `{ url }` string into the driver that must open it. Throws\n * {@link PayweaveConfigError} for any recognizable-but-unsupported\n * `scheme://` (e.g. `postgres://`) — the \"garbage scheme rejected eagerly\"\n * acceptance criterion.\n */\nexport function classifySqliteUrl(url: string): SqliteDriverKind {\n if (typeof url !== \"string\" || url.length === 0) {\n throw new PayweaveConfigError(\n \"payweave/db/sqlite: sqliteAdapter({ url }) requires a non-empty string url — \" +\n `got ${JSON.stringify(url)}.`,\n );\n }\n if (url === \":memory:\" || url.startsWith(\"file:\")) {\n return \"better-sqlite3\";\n }\n if (LIBSQL_URL_SCHEMES.some((scheme) => url.startsWith(scheme))) {\n return \"libsql\";\n }\n // Any other recognizable URI scheme (postgres://, mysql://, ftp://, ...) is\n // NOT a sqlite/libSQL URL — reject it eagerly rather than mis-routing it to\n // better-sqlite3 as a \"bare path\" that happens to contain a colon.\n if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\//.test(url)) {\n throw new PayweaveConfigError(\n `payweave/db/sqlite: unsupported URL scheme in ${JSON.stringify(url)} — expected ` +\n '\":memory:\", \"file:...\", a bare filesystem path, or a libSQL/Turso URL ' +\n '(\"libsql://\", \"wss://\", \"https://\", \"http://\").',\n );\n }\n // No recognized scheme and no \"scheme://\" pattern at all — treat as a bare\n // filesystem path (e.g. \"./payweave.db\", \"/var/data/payweave.db\").\n return \"better-sqlite3\";\n}\n\nfunction looksLikeBetterSqlite3(value: object): value is BetterSqlite3DatabaseLike {\n const candidate = value as Partial<BetterSqlite3DatabaseLike>;\n return typeof candidate.prepare === \"function\" && typeof candidate.pragma === \"function\";\n}\n\nfunction looksLikeLibsqlClient(value: object): value is LibsqlClientLike {\n const candidate = value as Partial<LibsqlClientLike> & { batch?: unknown };\n return typeof candidate.execute === \"function\" && typeof candidate.batch === \"function\";\n}\n\n/**\n * Resolve `sqliteAdapter`'s single argument into a {@link SqliteConnectTarget}.\n * Synchronous and side-effect-free — no driver import, no\n * connection opened.\n */\nexport function resolveSqliteInput(input: unknown): SqliteConnectTarget {\n if (input === null || typeof input !== \"object\") {\n throw new PayweaveConfigError(\n \"payweave/db/sqlite: sqliteAdapter(...) expects { url } (a file:/:memory:/bare-path/\" +\n \"libSQL URL), a better-sqlite3 Database instance, or an @libsql/client Client instance — \" +\n `got ${input === null ? \"null\" : typeof input}.`,\n );\n }\n if (\"url\" in input) {\n const url = (input as { url: unknown }).url;\n if (typeof url !== \"string\") {\n throw new PayweaveConfigError(\n `payweave/db/sqlite: sqliteAdapter({ url }) requires url to be a string — got ${typeof url}.`,\n );\n }\n return { kind: \"url\", driver: classifySqliteUrl(url), url };\n }\n if (looksLikeBetterSqlite3(input)) {\n return { kind: \"better-sqlite3-instance\", database: input };\n }\n if (looksLikeLibsqlClient(input)) {\n return { kind: \"libsql-instance\", client: input };\n }\n throw new PayweaveConfigError(\n \"payweave/db/sqlite: sqliteAdapter(...) expects { url } (a file:/:memory:/bare-path/libSQL \" +\n \"URL), a better-sqlite3 Database instance (has .prepare()/.pragma()), or an @libsql/client \" +\n \"Client instance (has .execute()/.batch()) — got an object matching none of these shapes.\",\n );\n}\n","/**\n * `payweave/db/sqlite` — SQLite / libSQL adapter (docs/v1/database.md §1/§4,\n * PW-706). Wraps EITHER `better-sqlite3` or `@libsql/client` behind one\n * `sqliteAdapter(...)` factory — both are OPTIONAL peerDependencies\n * : this module never imports either package at the top\n * level, only lazily inside `connect()` once a query actually runs, so\n * importing `payweave/db/sqlite` — let alone `payweave` core — never pulls\n * driver code into the graph unless a query is made.\n *\n * `sqliteAdapter(...)` accepts:\n * - `{ url }` — routed by scheme to the right driver (`./url.ts`):\n * `:memory:` / `file:...` / a bare filesystem path → `better-sqlite3`;\n * `libsql://` / `wss://` / `https://` / `http://` → `@libsql/client`.\n * - An already-constructed `better-sqlite3` `Database` instance.\n * - An already-constructed `@libsql/client` `Client` instance.\n *\n * Construction is synchronous and side-effect-free: the\n * input is validated (and the URL scheme classified) eagerly, but the driver\n * package is imported and the connection opened lazily, on the first store\n * call. An in-memory database is per-connection (better-sqlite3) or\n * per-client (`@libsql/client`) — this adapter holds exactly ONE connection\n * for the lifetime of the returned `DatabaseAdapter`, memoized on first use,\n * so `:memory:` data survives across calls (PW-706 brief).\n */\nimport { buildAdapter } from \"./adapter\";\nimport { BetterSqlite3Raw, openBetterSqlite3 } from \"./drivers/better-sqlite3\";\nimport { LibsqlRaw } from \"./drivers/libsql\";\nimport { installHintError } from \"./errors\";\nimport { AutoQueueRunner } from \"./runner\";\nimport {\n resolveSqliteInput,\n type BetterSqlite3DatabaseLike,\n type LibsqlClientLike,\n type SqliteConnectTarget,\n} from \"./url\";\nimport type { DatabaseAdapter } from \"../index\";\nimport type { RawDriver } from \"./runner\";\n\nexport type { BetterSqlite3DatabaseLike, LibsqlClientLike, SqliteDriverKind } from \"./url\";\n\n/** `sqliteAdapter(...)`'s single argument — see the module header for the three accepted shapes. */\nexport type SqliteAdapterInput = { url: string } | BetterSqlite3DatabaseLike | LibsqlClientLike;\n\nasync function openBetterSqlite3Driver(url: string): Promise<RawDriver> {\n // No explicit type annotation on `mod`: better-sqlite3 is a CJS `export =`\n // module, so its STATIC module type (`typeof import(\"better-sqlite3\")`) is\n // the constructor itself, while a DYNAMIC `import()` expression is typed by\n // TS as Node's ESM interop namespace (`{ default: Constructor, ...named }`)\n // — annotating `mod` with the former and assigning the latter is a real\n // type mismatch (`tsc` catches it), so this relies on inference from the\n // dynamic import expression itself.\n let mod;\n try {\n mod = await import(\"better-sqlite3\");\n } catch (cause) {\n throw installHintError(\"better-sqlite3\", url, cause);\n }\n const database = openBetterSqlite3(mod.default, url);\n return new BetterSqlite3Raw(database);\n}\n\nasync function openLibsqlDriver(url: string): Promise<RawDriver> {\n let mod: typeof import(\"@libsql/client\");\n try {\n mod = await import(\"@libsql/client\");\n } catch (cause) {\n throw installHintError(\"libsql\", url, cause);\n }\n const client = mod.createClient({ url });\n return new LibsqlRaw(client as unknown as LibsqlClientLike);\n}\n\nfunction connect(target: SqliteConnectTarget): Promise<RawDriver> {\n switch (target.kind) {\n case \"better-sqlite3-instance\":\n return Promise.resolve(new BetterSqlite3Raw(target.database));\n case \"libsql-instance\":\n return Promise.resolve(new LibsqlRaw(target.client));\n case \"url\":\n return target.driver === \"better-sqlite3\"\n ? openBetterSqlite3Driver(target.url)\n : openLibsqlDriver(target.url);\n }\n}\n\n/**\n * Create a SQLite/libSQL-backed {@link DatabaseAdapter}. See the module\n * header for the accepted input shapes and the eager-validate/lazy-connect\n * contract.\n *\n * @throws {PayweaveConfigError} synchronously for an unrecognized input shape\n * or an unsupported URL scheme; asynchronously (on first query) if the\n * required optional peer driver (`better-sqlite3` or `@libsql/client`) is\n * not installed.\n */\nexport function sqliteAdapter(input: SqliteAdapterInput): DatabaseAdapter {\n const target = resolveSqliteInput(input);\n let driverPromise: Promise<RawDriver> | undefined;\n const getDriver = (): Promise<RawDriver> => {\n driverPromise ??= connect(target);\n return driverPromise;\n };\n const runner = new AutoQueueRunner(getDriver);\n return buildAdapter(runner);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export { FlutterwaveClient_alias_2 as FlutterwaveClient } from '../_tsup-dts-rollup.js';
|
|
2
|
+
export { Payments } from '../_tsup-dts-rollup.js';
|
|
3
|
+
export { Transactions } from '../_tsup-dts-rollup.js';
|
|
4
|
+
export { Banks } from '../_tsup-dts-rollup.js';
|
|
5
|
+
export { Refunds } from '../_tsup-dts-rollup.js';
|
|
6
|
+
export { Charges } from '../_tsup-dts-rollup.js';
|
|
7
|
+
export { CardChargeOptions } from '../_tsup-dts-rollup.js';
|
|
8
|
+
export { Transfers } from '../_tsup-dts-rollup.js';
|
|
9
|
+
export { Beneficiaries } from '../_tsup-dts-rollup.js';
|
|
10
|
+
export { encryptCharge } from '../_tsup-dts-rollup.js';
|
|
11
|
+
export { decryptCharge } from '../_tsup-dts-rollup.js';
|
|
12
|
+
export { CreatePaymentReq } from '../_tsup-dts-rollup.js';
|
|
13
|
+
export { TransactionListQuery } from '../_tsup-dts-rollup.js';
|
|
14
|
+
export { TransactionFeesQuery } from '../_tsup-dts-rollup.js';
|
|
15
|
+
export { ResolveAccountReq } from '../_tsup-dts-rollup.js';
|
|
16
|
+
export { CreateRefundReq } from '../_tsup-dts-rollup.js';
|
|
17
|
+
export { ListRefundsQuery } from '../_tsup-dts-rollup.js';
|
|
18
|
+
export { CardChargeReq } from '../_tsup-dts-rollup.js';
|
|
19
|
+
export { BankTransferChargeReq } from '../_tsup-dts-rollup.js';
|
|
20
|
+
export { UssdChargeReq } from '../_tsup-dts-rollup.js';
|
|
21
|
+
export { NgAccountChargeReq } from '../_tsup-dts-rollup.js';
|
|
22
|
+
export { ValidateChargeReq } from '../_tsup-dts-rollup.js';
|
|
23
|
+
export { CreateTransferReq } from '../_tsup-dts-rollup.js';
|
|
24
|
+
export { ListTransfersQuery } from '../_tsup-dts-rollup.js';
|
|
25
|
+
export { TransferFeeQuery } from '../_tsup-dts-rollup.js';
|
|
26
|
+
export { CreateBeneficiaryReq } from '../_tsup-dts-rollup.js';
|
|
27
|
+
export { ListBeneficiariesQuery } from '../_tsup-dts-rollup.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Banks, Beneficiaries, Charges, FlutterwaveClient, Payments, Refunds, Transactions, Transfers, decryptCharge, encryptCharge } from '../chunk-FBPOCXRZ.js';
|
|
2
|
+
import '../chunk-IUVGM3K7.js';
|
|
3
|
+
import '../chunk-535Q3GUN.js';
|
|
4
|
+
import '../chunk-TWZK62TZ.js';
|
|
5
|
+
import '../chunk-CJEYDHY6.js';
|
|
6
|
+
import '../chunk-67NRYGRC.js';
|
|
7
|
+
import '../chunk-HTRGMZFH.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export { createPayweave } from './_tsup-dts-rollup.js';
|
|
2
|
+
export { VERSION } from './_tsup-dts-rollup.js';
|
|
3
|
+
export { UnifiedNamespace } from './_tsup-dts-rollup.js';
|
|
4
|
+
export { CheckoutCreateInput } from './_tsup-dts-rollup.js';
|
|
5
|
+
export { CheckoutCreateResult } from './_tsup-dts-rollup.js';
|
|
6
|
+
export { VerifyInput } from './_tsup-dts-rollup.js';
|
|
7
|
+
export { VerifyResult } from './_tsup-dts-rollup.js';
|
|
8
|
+
export { RefundCreateInput } from './_tsup-dts-rollup.js';
|
|
9
|
+
export { RefundCreateResult } from './_tsup-dts-rollup.js';
|
|
10
|
+
export { TransferRecipient } from './_tsup-dts-rollup.js';
|
|
11
|
+
export { TransferCreateInput } from './_tsup-dts-rollup.js';
|
|
12
|
+
export { TransferCreateResult } from './_tsup-dts-rollup.js';
|
|
13
|
+
export { BanksListInput } from './_tsup-dts-rollup.js';
|
|
14
|
+
export { UnifiedBank } from './_tsup-dts-rollup.js';
|
|
15
|
+
export { ResolveAccountInput } from './_tsup-dts-rollup.js';
|
|
16
|
+
export { ResolvedAccountResult } from './_tsup-dts-rollup.js';
|
|
17
|
+
export { UnifiedAmount } from './_tsup-dts-rollup.js';
|
|
18
|
+
export { UnifiedCustomer } from './_tsup-dts-rollup.js';
|
|
19
|
+
export { UnifiedCustomerInput } from './_tsup-dts-rollup.js';
|
|
20
|
+
export { UnifiedOpName } from './_tsup-dts-rollup.js';
|
|
21
|
+
export { UnifiedOpCapability } from './_tsup-dts-rollup.js';
|
|
22
|
+
export { SDKConfig } from './_tsup-dts-rollup.js';
|
|
23
|
+
export { PaystackConfig } from './_tsup-dts-rollup.js';
|
|
24
|
+
export { FlutterwaveConfig } from './_tsup-dts-rollup.js';
|
|
25
|
+
export { FlutterwaveV3Config } from './_tsup-dts-rollup.js';
|
|
26
|
+
export { FlutterwaveV4Config } from './_tsup-dts-rollup.js';
|
|
27
|
+
export { ResolvedConfig } from './_tsup-dts-rollup.js';
|
|
28
|
+
export { PayweaveConfig } from './_tsup-dts-rollup.js';
|
|
29
|
+
export { PayweaveProviderKey } from './_tsup-dts-rollup.js';
|
|
30
|
+
export { StripeProviderConfig } from './_tsup-dts-rollup.js';
|
|
31
|
+
export { PaystackProviderConfig } from './_tsup-dts-rollup.js';
|
|
32
|
+
export { FlutterwaveProviderConfig } from './_tsup-dts-rollup.js';
|
|
33
|
+
export { ResolvedPayweaveConfig } from './_tsup-dts-rollup.js';
|
|
34
|
+
export { ResolvedProviderConfig } from './_tsup-dts-rollup.js';
|
|
35
|
+
export { ResolvedProduct } from './_tsup-dts-rollup.js';
|
|
36
|
+
export { PayweaveError } from './_tsup-dts-rollup.js';
|
|
37
|
+
export { PayweaveConfigError } from './_tsup-dts-rollup.js';
|
|
38
|
+
export { PayweaveAuthError } from './_tsup-dts-rollup.js';
|
|
39
|
+
export { PayweaveValidationError } from './_tsup-dts-rollup.js';
|
|
40
|
+
export { PayweaveNotFoundError } from './_tsup-dts-rollup.js';
|
|
41
|
+
export { PayweaveRateLimitError } from './_tsup-dts-rollup.js';
|
|
42
|
+
export { PayweaveProviderError } from './_tsup-dts-rollup.js';
|
|
43
|
+
export { PayweaveNetworkError } from './_tsup-dts-rollup.js';
|
|
44
|
+
export { PayweaveWebhookVerificationError } from './_tsup-dts-rollup.js';
|
|
45
|
+
export { Money } from './_tsup-dts-rollup.js';
|
|
46
|
+
export { PaystackClient } from './_tsup-dts-rollup.js';
|
|
47
|
+
export { FlutterwaveClient } from './_tsup-dts-rollup.js';
|
|
48
|
+
export { StripeClient } from './_tsup-dts-rollup.js';
|
|
49
|
+
export { WebhookEvent } from './_tsup-dts-rollup.js';
|
|
50
|
+
export { feature } from './_tsup-dts-rollup.js';
|
|
51
|
+
export { plan } from './_tsup-dts-rollup.js';
|
|
52
|
+
export { BooleanFeatureInclusion } from './_tsup-dts-rollup.js';
|
|
53
|
+
export { FeatureDef } from './_tsup-dts-rollup.js';
|
|
54
|
+
export { FeatureDefInput } from './_tsup-dts-rollup.js';
|
|
55
|
+
export { FeatureFn } from './_tsup-dts-rollup.js';
|
|
56
|
+
export { FeatureInclusion } from './_tsup-dts-rollup.js';
|
|
57
|
+
export { FeatureType } from './_tsup-dts-rollup.js';
|
|
58
|
+
export { MeteredFeatureArg } from './_tsup-dts-rollup.js';
|
|
59
|
+
export { MeteredFeatureInclusion } from './_tsup-dts-rollup.js';
|
|
60
|
+
export { Plan } from './_tsup-dts-rollup.js';
|
|
61
|
+
export { PlanDefInput } from './_tsup-dts-rollup.js';
|
|
62
|
+
export { PlanPrice } from './_tsup-dts-rollup.js';
|
|
63
|
+
export { PlanPriceInput } from './_tsup-dts-rollup.js';
|
|
64
|
+
export { ResolvedPlanPrice } from './_tsup-dts-rollup.js';
|
|
65
|
+
export { SyncResult } from './_tsup-dts-rollup.js';
|
|
66
|
+
export { SyncPlanResult } from './_tsup-dts-rollup.js';
|
|
67
|
+
export { SyncProviderAction } from './_tsup-dts-rollup.js';
|
|
68
|
+
export { WebhookInput } from './_tsup-dts-rollup.js';
|
|
69
|
+
export { WebhooksNamespace } from './_tsup-dts-rollup.js';
|
|
70
|
+
export { ConfiguredProvider } from './_tsup-dts-rollup.js';
|
|
71
|
+
export { ProviderOverride } from './_tsup-dts-rollup.js';
|
|
72
|
+
export { PayweaveUnifiedOps } from './_tsup-dts-rollup.js';
|
|
73
|
+
export { FlutterwaveV3Client } from './_tsup-dts-rollup.js';
|
|
74
|
+
export { FlutterwaveV4Client } from './_tsup-dts-rollup.js';
|
|
75
|
+
export { PlanIds } from './_tsup-dts-rollup.js';
|
|
76
|
+
export { FeatureIds } from './_tsup-dts-rollup.js';
|
|
77
|
+
export { FeatureIdsOf } from './_tsup-dts-rollup.js';
|
|
78
|
+
export { SubscribeInput } from './_tsup-dts-rollup.js';
|
|
79
|
+
export { SubscribeResult } from './_tsup-dts-rollup.js';
|
|
80
|
+
export { CheckInput } from './_tsup-dts-rollup.js';
|
|
81
|
+
export { CheckResult } from './_tsup-dts-rollup.js';
|
|
82
|
+
export { ReportInput } from './_tsup-dts-rollup.js';
|
|
83
|
+
export { ReportResult } from './_tsup-dts-rollup.js';
|
|
84
|
+
export { PayweaveClientBase } from './_tsup-dts-rollup.js';
|
|
85
|
+
export { PayweaveClient } from './_tsup-dts-rollup.js';
|