@sanghosdk/js 0.1.2
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/CHANGELOG.md +57 -0
- package/README.md +366 -0
- package/dist/index.cjs +1395 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2559 -0
- package/dist/index.d.ts +2559 -0
- package/dist/index.js +1379 -0
- package/dist/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../core/errors.ts","../core/http.ts","../modules/base.ts","../modules/account.ts","../modules/apps.ts","../modules/addresses.ts","../modules/customers.ts","../modules/products.ts","../modules/payment-intents.ts","../modules/transactions.ts","../modules/refunds.ts","../modules/invoices.ts","../modules/payment-links.ts","../modules/checkout-sessions.ts","../modules/subscriptions.ts","../modules/payment-methods.ts","../modules/receipts.ts","../modules/webhooks.ts","../modules/security.ts","../modules/partners.ts","../modules/terminal.ts","../modules/sandbox.ts","../utils/webhook.ts","../utils/mixins.ts","../client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// =============================================================================\n// sangho-sdk-js — Core Errors\n// Hiérarchie complète d'erreurs, calquée sur l'API DRF Sangho\n// =============================================================================\n\n/**\n * Catégorie large de l'erreur (`err.type`).\n *\n * Les 7 premières valeurs sont exactement le taxonomie `type` renvoyée par\n * le backend (cf. `backend/api/exceptions.py`) sur toute réponse HTTP\n * d'erreur. `NETWORK_ERROR` et `TIMEOUT_ERROR` sont deux catégories\n * additionnelles, propres au SDK : elles ne correspondent à aucune réponse\n * HTTP puisque la requête n'a justement jamais abouti côté serveur.\n */\nexport type SanghoErrorType =\n | \"AUTHENTICATION_ERROR\"\n | \"PERMISSION_ERROR\"\n | \"NOT_FOUND_ERROR\"\n | \"CONFLICT_ERROR\"\n | \"VALIDATION_ERROR\"\n | \"RATE_LIMIT_ERROR\"\n | \"API_ERROR\"\n | \"NETWORK_ERROR\"\n | \"TIMEOUT_ERROR\";\n\nconst KNOWN_ERROR_TYPES: readonly SanghoErrorType[] = [\n \"AUTHENTICATION_ERROR\",\n \"PERMISSION_ERROR\",\n \"NOT_FOUND_ERROR\",\n \"CONFLICT_ERROR\",\n \"VALIDATION_ERROR\",\n \"RATE_LIMIT_ERROR\",\n \"API_ERROR\",\n \"NETWORK_ERROR\",\n \"TIMEOUT_ERROR\",\n];\n\n/**\n * Résout la catégorie finale d'une erreur : si le backend a renvoyé un\n * `type` reconnu dans le corps de la réponse, il prime (mapping 1:1) ;\n * sinon on retombe sur la catégorie déduite de la sous-classe utilisée.\n */\nfunction resolveErrorType(\n defaultType: SanghoErrorType,\n raw?: SanghoErrorResponse\n): SanghoErrorType {\n const backendType = raw?.type?.toUpperCase();\n if (backendType && (KNOWN_ERROR_TYPES as string[]).includes(backendType)) {\n return backendType as SanghoErrorType;\n }\n return defaultType;\n}\n\nexport interface SanghoErrorResponse {\n message: string;\n type?: string;\n code?: string;\n detail?: string | Record<string, string[]>;\n errors?: Record<string, string[]>;\n status?: number;\n param?: string;\n}\n\n/**\n * Classe de base — toutes les erreurs Sangho en héritent.\n */\nexport class SanghoError extends Error {\n /**\n * Catégorie large de l'erreur, une des 9 valeurs `SanghoErrorType`\n * (`VALIDATION_ERROR`, `RATE_LIMIT_ERROR`, `NETWORK_ERROR`, ...).\n * Utile pour un `switch`/branchement générique.\n */\n readonly type: SanghoErrorType;\n /**\n * Code métier précis renvoyé par le backend (`raw.code`), ex :\n * `AMOUNT_TOO_SMALL`, `INSUFFICIENT_FUNDS`, `CUSTOMER_NOT_FOUND`,\n * `INVALID_API_KEY`, `CURRENCY_NOT_IN_PLAN`... Le catalogue de codes est\n * possédé et versionné côté backend et continuera de grandir — c'est\n * pourquoi ce champ est typé `string` plutôt qu'une union fermée.\n *\n * Quand l'erreur n'a jamais atteint le backend (`SanghoNetworkError`,\n * `SanghoTimeoutError` — pas de corps de réponse à lire), `code` retombe\n * sur la même valeur que `type`.\n */\n readonly code: string;\n readonly statusCode?: number;\n readonly raw?: SanghoErrorResponse;\n\n constructor(\n message: string,\n type: SanghoErrorType = \"API_ERROR\",\n statusCode?: number,\n raw?: SanghoErrorResponse\n ) {\n super(message);\n this.name = \"SanghoError\";\n this.type = resolveErrorType(type, raw);\n this.code = raw?.code ?? this.type;\n this.statusCode = statusCode;\n this.raw = raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n// @/core/errors.ts\n\n/**\n * 401 — Clé API invalide, expirée ou absente.\n */\nexport class SanghoAuthError extends SanghoError {\n constructor(\n message = \"Invalid or missing API key.\",\n raw?: SanghoErrorResponse\n ) {\n super(message, \"AUTHENTICATION_ERROR\", 401, raw);\n this.name = \"SanghoAuthError\";\n }\n}\n\n/**\n * 403 — Clé publique utilisée pour une opération réservée aux clés secrètes.\n * Catégorie (`type`) : `PERMISSION_ERROR` — c'est bien un problème de\n * permission ; `code` reste `PUBLIC_KEY_NOT_ALLOWED` (ou équivalent envoyé\n * par le backend) pour distinguer précisément ce cas des autres 403.\n */\nexport class SanghoPublicKeyError extends SanghoError {\n constructor(message = \"Public key not allowed for this operation.\", raw?: SanghoErrorResponse) {\n super(\n message,\n \"PERMISSION_ERROR\",\n 403,\n raw // ← raw transmis\n );\n this.name = \"SanghoPublicKeyError\";\n }\n}\n\n/**\n * 403 — Permissions insuffisantes.\n */\nexport class SanghoPermissionError extends SanghoError {\n constructor(message = \"You do not have permission to perform this action.\", raw?: SanghoErrorResponse) {\n super(message, \"PERMISSION_ERROR\", 403, raw); // ← raw transmis\n this.name = \"SanghoPermissionError\";\n }\n}\n\n/**\n * 404 — Ressource introuvable.\n */\nexport class SanghoNotFoundError extends SanghoError {\n constructor(message = \"Resource not found.\", raw?: SanghoErrorResponse) {\n super(message, \"NOT_FOUND_ERROR\", 404, raw);\n this.name = \"SanghoNotFoundError\";\n }\n}\n\n/**\n * 422 — Données invalides (erreurs de validation champ par champ).\n */\nexport class SanghoValidationError extends SanghoError {\n readonly fieldErrors: Record<string, string[]>;\n readonly param?: string;\n\n constructor(raw: SanghoErrorResponse) {\n const fields =\n typeof raw.detail === \"object\"\n ? raw.detail\n : (raw.errors ?? {});\n const summary = Object.entries(fields)\n .map(([k, v]) => `${k}: ${v.join(\", \")}`)\n .join(\" | \");\n super(summary || raw.message || \"Validation error\", \"VALIDATION_ERROR\", 422, raw);\n this.name = \"SanghoValidationError\";\n this.fieldErrors = fields as Record<string, string[]>;\n }\n}\n\n/**\n * 429 — Trop de requêtes. `retryAfter` indique le délai (secondes) avant retry.\n */\nexport class SanghoRateLimitError extends SanghoError {\n readonly retryAfter?: number;\n\n constructor(retryAfter?: number, raw?: SanghoErrorResponse) {\n super(\n raw?.message ??\n `Rate limit exceeded.${retryAfter ? ` Retry after ${retryAfter}s.` : \"\"}`,\n \"RATE_LIMIT_ERROR\",\n 429,\n raw\n );\n this.name = \"SanghoRateLimitError\";\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * 409 — Clé d'idempotence réutilisée avec un payload différent.\n * Catégorie (`type`) : `CONFLICT_ERROR` — même famille que les autres 409.\n */\nexport class SanghoIdempotencyError extends SanghoError {\n constructor(raw?: SanghoErrorResponse) {\n super(\n \"Idempotency key reused with different request parameters.\",\n \"CONFLICT_ERROR\",\n 409,\n raw\n );\n this.name = \"SanghoIdempotencyError\";\n }\n}\n\n/**\n * Erreur réseau (pas de réponse du serveur). Catégorie SDK-only : la requête\n * n'a jamais atteint le backend, donc pas de `raw`/`code` métier précis —\n * `code` retombe sur `NETWORK_ERROR` (== `type`).\n */\nexport class SanghoNetworkError extends SanghoError {\n constructor(message = \"Network error. Please check your connection.\") {\n super(message, \"NETWORK_ERROR\");\n this.name = \"SanghoNetworkError\";\n }\n}\n\n/**\n * Timeout dépassé. Catégorie SDK-only, même raisonnement que\n * `SanghoNetworkError` : `code` retombe sur `TIMEOUT_ERROR` (== `type`).\n */\nexport class SanghoTimeoutError extends SanghoError {\n constructor(timeout: number) {\n super(`Request timed out after ${timeout}ms.`, \"TIMEOUT_ERROR\");\n this.name = \"SanghoTimeoutError\";\n }\n}\n","// =============================================================================\n// sangho-sdk-js — HttpClient\n// =============================================================================\n\nimport {\n SanghoAuthError,\n SanghoError,\n SanghoErrorResponse,\n SanghoIdempotencyError,\n SanghoNetworkError,\n SanghoNotFoundError,\n SanghoPermissionError,\n SanghoPublicKeyError,\n SanghoRateLimitError,\n SanghoTimeoutError,\n SanghoValidationError,\n} from \"./errors\";\n\nexport type ApiKeyType = \"public\" | \"secret\";\n\nexport interface HttpClientConfig {\n baseURL: string;\n timeout: number;\n maxRetries: number;\n sandbox: boolean;\n apiKey: string;\n}\n\nfunction generateUUID(): string {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nconst SDK_VERSION = \"__SDK_VERSION__\";\n\nexport class HttpClient {\n readonly keyType: ApiKeyType;\n private readonly config: HttpClientConfig;\n\n constructor(config: HttpClientConfig) {\n this.config = config;\n this.keyType = config.apiKey.startsWith(\"pk_\") ? \"public\" : \"secret\";\n }\n\n public assertSecretKey(methodName: string): void {\n // Si on est en clé publique (pk_), on interdit l'accès aux méthodes sensibles\n // sauf si le backend accepte aussi un Reader-Token (géré via les headers)\n if (this.keyType === \"public\") {\n throw new SanghoPublicKeyError(\n `The method \"${methodName}\" requires a Secret Key or a Terminal Session.`\n );\n }\n }\n\n async get<T, P extends object = object>(path: string, params?: P): Promise<T> {\n const url = this.buildURL(path, params);\n return this.request<T>(\"GET\", url);\n }\n\n async post<T>(path: string, body: unknown, idempotencyKey?: string): Promise<T> {\n const url = this.buildURL(path);\n return this.request<T>(\"POST\", url, body, {\n \"Idempotency-Key\": idempotencyKey ?? generateUUID(),\n });\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n const url = this.buildURL(path);\n return this.request<T>(\"PATCH\", url, body);\n }\n\n async put<T>(path: string, body: unknown): Promise<T> {\n const url = this.buildURL(path);\n return this.request<T>(\"PUT\", url, body);\n }\n\n async delete<T = void>(path: string): Promise<T> {\n const url = this.buildURL(path);\n return this.request<T>(\"DELETE\", url);\n }\n\n async options<T = unknown>(path: string): Promise<T> {\n const url = this.buildURL(path);\n return this.request<T>(\"OPTIONS\", url);\n }\n\n private buildURL<P extends object>(path: string, params?: P): string {\n const base = this.config.baseURL.replace(/\\/$/, \"\");\n const full = `${base}${path}`;\n if (!params || Object.keys(params).length === 0) return full;\n\n const search = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && v !== null) {\n search.set(k, String(v));\n }\n }\n const qs = search.toString();\n return qs ? `${full}?${qs}` : full;\n }\n\n private baseHeaders(extra?: Record<string, string>): Record<string, string> {\n return {\n Authorization: `Bearer ${this.config.apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-Sangho-SDK\": `js/${SDK_VERSION}`,\n \"X-Sangho-Environment\": this.config.sandbox ? \"sandbox\" : \"live\",\n ...extra,\n };\n }\n\n private async request<T>(\n method: string,\n url: string,\n body?: unknown,\n extraHeaders?: Record<string, string>,\n attempt = 0\n ): Promise<T> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await fetch(url, {\n method,\n headers: this.baseHeaders(extraHeaders),\n signal: controller.signal,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n\n clearTimeout(timer);\n return await this.handleResponse<T>(response);\n } catch (err: unknown) {\n clearTimeout(timer);\n\n if (err instanceof SanghoError) {\n // 429 et 5xx sont transitoires → retry avec backoff exponentiel\n // (ou le délai indiqué par le serveur pour un 429). Tout le reste\n // (400/401/403/404/409/422, ...) est un problème permanent côté\n // client : on ne retry jamais, on relance immédiatement.\n if (this.isRetryable(err) && attempt < this.config.maxRetries) {\n const delay =\n err instanceof SanghoRateLimitError && err.retryAfter\n ? err.retryAfter * 1000\n : Math.pow(2, attempt) * 500;\n await this.sleep(delay);\n return this.request<T>(method, url, body, extraHeaders, attempt + 1);\n }\n throw err;\n }\n\n if (err instanceof DOMException && err.name === \"AbortError\") {\n throw new SanghoTimeoutError(this.config.timeout);\n }\n\n if (err instanceof TypeError) {\n if (attempt < this.config.maxRetries) {\n await this.sleep(Math.pow(2, attempt) * 500);\n return this.request<T>(method, url, body, extraHeaders, attempt + 1);\n }\n throw new SanghoNetworkError((err as Error).message);\n }\n\n throw err;\n }\n }\n\n /**\n * Détermine si une SanghoError est transitoire et mérite un retry :\n * 429 (rate limit) ou 5xx (erreur serveur). Jamais les 4xx restants\n * (400/401/403/404/409/422) — ce sont des erreurs permanentes côté client.\n */\n private isRetryable(err: SanghoError): boolean {\n if (err instanceof SanghoRateLimitError) return true;\n return typeof err.statusCode === \"number\" && err.statusCode >= 500;\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (response.status === 204) return undefined as T;\n\n let data: unknown;\n try {\n data = await response.json();\n } catch {\n data = {};\n }\n\n if (response.ok) return data as T;\n\n const raw = data as Record<string, unknown>;\n\n const errorResponse: SanghoErrorResponse = {\n message: (raw[\"message\"] as string) ?? (raw[\"detail\"] as string) ?? \"API error\",\n type: raw[\"type\"] as string | undefined,\n code: raw[\"code\"] as string | undefined,\n detail: raw[\"detail\"] as string | Record<string, string[]> | undefined,\n errors: raw[\"errors\"] as Record<string, string[]> | undefined,\n status: response.status,\n param: raw[\"param\"] as string | undefined,\n };\n\n const message = errorResponse.message;\n // Insensible à la casse : le backend envoie tantôt \"PUBLIC_KEY_NOT_ALLOWED\"\n // (catalogue d'erreurs DRF moderne), tantôt \"public_key_not_allowed\"\n // (ancien décorateur Django) selon le chemin qui a rejeté la requête.\n const code = errorResponse.code?.toLowerCase();\n\n switch (response.status) {\n case 401:\n throw new SanghoAuthError(message, errorResponse);\n case 403:\n if (code === \"public_key_not_allowed\") {\n throw new SanghoPublicKeyError(message, errorResponse);\n }\n throw new SanghoPermissionError(message, errorResponse);\n case 404:\n throw new SanghoNotFoundError(message, errorResponse);\n case 409:\n throw new SanghoIdempotencyError(errorResponse);\n case 422:\n throw new SanghoValidationError(errorResponse);\n case 429: {\n const retryAfter =\n (raw[\"retry_after\"] as number | undefined) ??\n Number(response.headers.get(\"Retry-After\") ?? 60);\n throw new SanghoRateLimitError(retryAfter, errorResponse);\n }\n default:\n throw new SanghoError(message, \"API_ERROR\", response.status, errorResponse);\n }\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}","// =============================================================================\n// sangho-sdk-js — BaseModule\n// Classe parente de tous les modules du SDK.\n// Chaque module reçoit un HttpClient par injection (composition over inheritance).\n// =============================================================================\n\nimport type { HttpClient } from \"@/core/http\";\n\n/**\n * Classe de base dont héritent tous les modules Sangho.\n *\n * Pattern : composition via injection de `HttpClient`.\n * Jamais d'héritage multiple — un seul HttpClient partagé par instance Sangho.\n *\n * @example\n * ```typescript\n * export class CustomersModule extends BaseModule {\n * async create(params: CreateCustomerParams): Promise<Customer> {\n * this.http.assertSecretKey(\"customers.create\");\n * return this.http.post<Customer>(\"/customers/\", params);\n * }\n * }\n * ```\n */\nexport class BaseModule {\n /** Client HTTP partagé — ne jamais exposer publiquement. */\n protected readonly http: HttpClient;\n\n public constructor(http: HttpClient) {\n this.http = http;\n }\n}\n","// =============================================================================\n// sangho-sdk-js — @/modules/account.ts\n// =============================================================================\nimport { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { App } from \"@/types/resources/apps\";\n\nexport class AccountModule extends BaseModule {\n public account = {\n retrieve: () => this._retrieve(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n /**\n * Retourne l'application associée à la clé secrète utilisée pour la requête.\n * Équivalent de `apps.retrieve(id)` sans avoir à connaître l'ID au préalable —\n * pratique comme \"who am I\" / health-check d'introspection.\n */\n protected _retrieve(): Promise<App> {\n this.http.assertSecretKey(\"account.retrieve\");\n return this.http.get<App>(\"/account/\");\n }\n}\n","\n// =============================================================================\n// sangho-sdk-js — @/modules/apps.ts\n// =============================================================================\nimport { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { App, AppCriteria, AppKeys, Payloads } from \"@/types/resources/apps\";\nimport { DRFOptions } from \"@/types/common\";\n\nexport class AppsModule extends BaseModule {\n public apps = {\n list: (criteria?: AppCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: Payloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n keys: (id: string) => this._keys(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: AppCriteria): Promise<App[]> {\n this.http.assertSecretKey(\"apps.list\");\n return this.http.get<App[]>(\"/apps/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<App> {\n this.http.assertSecretKey(\"apps.retrieve\");\n return this.http.get<App>(`/apps/${id}/`);\n }\n\n protected _create(payloads: Payloads): Promise<App> {\n this.http.assertSecretKey(\"apps.create\");\n return this.http.post<App>(\"/apps/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<App> {\n this.http.assertSecretKey(\"apps.update\");\n return this.http.patch<App>(`/apps/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<void> {\n this.http.assertSecretKey(\"apps.delete\");\n return this.http.delete(`/apps/${id}/`);\n }\n\n protected _keys(id: string): Promise<AppKeys> {\n this.http.assertSecretKey(\"apps.keys\");\n return this.http.get<AppKeys>(`/apps/${id}/keys/`);\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/apps/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type {\n CompanyAddress,\n CreatePayloads,\n Payloads,\n AddressCriteria,\n} from \"@/types/resources/addresses\";\nimport { DRFOptions } from \"@/types/common\";\n\nexport class AddressesModule extends BaseModule {\n public addresses = {\n list: (criteria?: AddressCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: AddressCriteria): Promise<CompanyAddress[]> {\n this.http.assertSecretKey(\"addresses.list\");\n return this.http.get<CompanyAddress[]>(\"/addresses/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<CompanyAddress> {\n this.http.assertSecretKey(\"addresses.retrieve\");\n return this.http.get<CompanyAddress>(`/addresses/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<CompanyAddress> {\n this.http.assertSecretKey(\"addresses.create\");\n return this.http.post<CompanyAddress>(\"/addresses/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<CompanyAddress> {\n this.http.assertSecretKey(\"addresses.update\");\n return this.http.patch<CompanyAddress>(`/addresses/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<void> {\n this.http.assertSecretKey(\"addresses.delete\");\n return this.http.delete(`/addresses/${id}/`);\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/addresses/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n Customer,\n CreatePayloads,\n Payloads,\n CustomerCriteria,\n TransactionCriteria,\n} from \"@/types/resources/customers\";\nimport type { Transaction } from \"@/types/resources/transactions\";\nimport type { PaymentMethod } from \"@/types/resources/payment-methods\";\n\nexport class CustomersModule extends BaseModule {\n public customers = {\n list: (criteria?: CustomerCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n listTransactions: (id: string, criteria?: TransactionCriteria) => this._listTransactions(id, criteria),\n listPaymentMethods: (id: string) => this._listPaymentMethods(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: CustomerCriteria): Promise<ListResponse<Customer>> {\n this.http.assertSecretKey(\"customers.list\");\n return this.http.get<ListResponse<Customer>>(\"/customers/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Customer> {\n this.http.assertSecretKey(\"customers.retrieve\");\n return this.http.get<Customer>(`/customers/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<Customer> {\n this.http.assertSecretKey(\"customers.create\");\n return this.http.post<Customer>(\"/customers/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<Customer> {\n this.http.assertSecretKey(\"customers.update\");\n return this.http.patch<Customer>(`/customers/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<void> {\n this.http.assertSecretKey(\"customers.delete\");\n return this.http.delete(`/customers/${id}/`);\n }\n\n protected _listTransactions(\n id: string,\n criteria?: TransactionCriteria\n ): Promise<ListResponse<Transaction>> {\n this.http.assertSecretKey(\"customers.listTransactions\");\n return this.http.get<ListResponse<Transaction>>(\n `/customers/${id}/transactions/`,\n criteria\n );\n }\n\n protected _listPaymentMethods(id: string): Promise<ListResponse<PaymentMethod>> {\n this.http.assertSecretKey(\"customers.listPaymentMethods\");\n return this.http.get<ListResponse<PaymentMethod>>(\n `/customers/${id}/payment-methods/`\n );\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/customers/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n Product,\n CreatePayloads,\n Payloads,\n ProductCriteria,\n} from \"@/types/resources/products\";\n\nexport class ProductsModule extends BaseModule {\n public products = {\n list: (criteria?: ProductCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: ProductCriteria): Promise<ListResponse<Product>> {\n this.http.assertSecretKey(\"products.list\");\n return this.http.get<ListResponse<Product>>(\"/products/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Product> {\n this.http.assertSecretKey(\"products.retrieve\");\n return this.http.get<Product>(`/products/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<Product> {\n this.http.assertSecretKey(\"products.create\");\n return this.http.post<Product>(\"/products/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<Product> {\n this.http.assertSecretKey(\"products.update\");\n return this.http.patch<Product>(`/products/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<void> {\n this.http.assertSecretKey(\"products.delete\");\n return this.http.delete(`/products/${id}/`);\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/products/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n PaymentIntent,\n CreatePayloads,\n Payloads,\n ConfirmPayloads,\n CapturePayloads,\n CancelPayloads,\n PaymentIntentCriteria,\n} from \"@/types/resources/payment-intents\";\n\nexport class PaymentIntentsModule extends BaseModule {\n public paymentIntents = {\n list: (criteria?: PaymentIntentCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n confirm: (id: string, payloads?: ConfirmPayloads) => this._confirm(id, payloads),\n capture: (id: string, payloads?: CapturePayloads) => this._capture(id, payloads),\n cancel: (id: string, payloads?: CancelPayloads) => this._cancel(id, payloads),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: PaymentIntentCriteria): Promise<ListResponse<PaymentIntent>> {\n this.http.assertSecretKey(\"paymentIntents.list\");\n return this.http.get<ListResponse<PaymentIntent>>(\"/payment-intents/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<PaymentIntent> {\n this.http.assertSecretKey(\"paymentIntents.retrieve\");\n return this.http.get<PaymentIntent>(`/payment-intents/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<PaymentIntent> {\n this.http.assertSecretKey(\"paymentIntents.create\");\n return this.http.post<PaymentIntent>(\"/payment-intents/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<PaymentIntent> {\n this.http.assertSecretKey(\"paymentIntents.update\");\n return this.http.patch<PaymentIntent>(`/payment-intents/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<PaymentIntent> {\n this.http.assertSecretKey(\"paymentIntents.delete\");\n return this.http.delete<PaymentIntent>(`/payment-intents/${id}/`);\n }\n\n protected _confirm(id: string, payloads?: ConfirmPayloads): Promise<PaymentIntent> {\n this.http.assertSecretKey(\"paymentIntents.confirm\");\n return this.http.post<PaymentIntent>(`/payment-intents/${id}/confirm/`, payloads ?? {});\n }\n\n protected _capture(id: string, payloads?: CapturePayloads): Promise<PaymentIntent> {\n this.http.assertSecretKey(\"paymentIntents.capture\");\n return this.http.post<PaymentIntent>(`/payment-intents/${id}/capture/`, payloads ?? {});\n }\n\n protected _cancel(id: string, payloads?: CancelPayloads): Promise<PaymentIntent> {\n this.http.assertSecretKey(\"paymentIntents.cancel\");\n return this.http.post<PaymentIntent>(`/payment-intents/${id}/cancel/`, payloads ?? {});\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/payment-intents/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n Transaction,\n Payloads,\n TransactionCriteria,\n} from \"@/types/resources/transactions\";\n\nexport class TransactionsModule extends BaseModule {\n public transactions = {\n list: (criteria?: TransactionCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n cancel: (id: string) => this._cancel(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: TransactionCriteria): Promise<ListResponse<Transaction>> {\n this.http.assertSecretKey(\"transactions.list\");\n return this.http.get<ListResponse<Transaction>>(\"/transactions/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Transaction> {\n this.http.assertSecretKey(\"transactions.retrieve\");\n return this.http.get<Transaction>(`/transactions/${id}/`);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<Transaction> {\n this.http.assertSecretKey(\"transactions.update\");\n return this.http.patch<Transaction>(`/transactions/${id}/`, payloads);\n }\n\n protected _cancel(id: string): Promise<Transaction> {\n this.http.assertSecretKey(\"transactions.cancel\");\n return this.http.post<Transaction>(`/transactions/${id}/cancel/`, {});\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/transactions/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n Refund,\n CreatePayloads,\n RefundCriteria,\n} from \"@/types/resources/refunds\";\n\nexport class RefundsModule extends BaseModule {\n public refunds = {\n list: (criteria?: RefundCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n cancel: (id: string) => this._cancel(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: RefundCriteria): Promise<ListResponse<Refund>> {\n this.http.assertSecretKey(\"refunds.list\");\n return this.http.get<ListResponse<Refund>>(\"/refunds/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Refund> {\n this.http.assertSecretKey(\"refunds.retrieve\");\n return this.http.get<Refund>(`/refunds/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<Refund> {\n this.http.assertSecretKey(\"refunds.create\");\n return this.http.post<Refund>(\"/refunds/\", payloads);\n }\n\n protected _cancel(id: string): Promise<Refund> {\n this.http.assertSecretKey(\"refunds.cancel\");\n return this.http.post<Refund>(`/refunds/${id}/cancel/`, {});\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/refunds/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n Invoice,\n CreatePayloads,\n Payloads,\n InvoiceCriteria,\n} from \"@/types/resources/invoices\";\n\nexport class InvoicesModule extends BaseModule {\n public invoices = {\n list: (criteria?: InvoiceCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n send: (id: string) => this._send(id),\n pay: (id: string) => this._pay(id),\n void: (id: string) => this._void(id),\n markUncollectible: (id: string) => this._markUncollectible(id),\n getPdfUrl: (id: string) => this._getPdfUrl(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: InvoiceCriteria): Promise<ListResponse<Invoice>> {\n this.http.assertSecretKey(\"invoices.list\");\n return this.http.get<ListResponse<Invoice>>(\"/invoices/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Invoice> {\n this.http.assertSecretKey(\"invoices.retrieve\");\n return this.http.get<Invoice>(`/invoices/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<Invoice> {\n this.http.assertSecretKey(\"invoices.create\");\n return this.http.post<Invoice>(\"/invoices/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<Invoice> {\n this.http.assertSecretKey(\"invoices.update\");\n return this.http.patch<Invoice>(`/invoices/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<void> {\n this.http.assertSecretKey(\"invoices.delete\");\n return this.http.delete(`/invoices/${id}/`);\n }\n\n protected _send(id: string): Promise<Invoice> {\n this.http.assertSecretKey(\"invoices.send\");\n return this.http.post<Invoice>(`/invoices/${id}/send/`, {});\n }\n\n protected _pay(id: string): Promise<Invoice> {\n this.http.assertSecretKey(\"invoices.pay\");\n return this.http.post<Invoice>(`/invoices/${id}/pay/`, {});\n }\n\n protected _void(id: string): Promise<Invoice> {\n this.http.assertSecretKey(\"invoices.void\");\n return this.http.post<Invoice>(`/invoices/${id}/void/`, {});\n }\n\n protected _markUncollectible(id: string): Promise<Invoice> {\n this.http.assertSecretKey(\"invoices.markUncollectible\");\n return this.http.post<Invoice>(`/invoices/${id}/mark-uncollectible/`, {});\n }\n\n protected _getPdfUrl(id: string): Promise<{ url: string; expires_at: string }> {\n this.http.assertSecretKey(\"invoices.getPdfUrl\");\n return this.http.get<{ url: string; expires_at: string }>(`/invoices/${id}/pdf/`);\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/invoices/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n PaymentLink,\n CreatePayloads,\n Payloads,\n PaymentLinkCriteria,\n} from \"@/types/resources/payment-links\";\n\nexport class PaymentLinksModule extends BaseModule {\n public paymentLinks = {\n list: (criteria?: PaymentLinkCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n archive: (id: string) => this._archive(id),\n restore: (id: string) => this._restore(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: PaymentLinkCriteria): Promise<ListResponse<PaymentLink>> {\n this.http.assertSecretKey(\"paymentLinks.list\");\n return this.http.get<ListResponse<PaymentLink>>(\"/payment-links/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<PaymentLink> {\n this.http.assertSecretKey(\"paymentLinks.retrieve\");\n return this.http.get<PaymentLink>(`/payment-links/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<PaymentLink> {\n this.http.assertSecretKey(\"paymentLinks.create\");\n return this.http.post<PaymentLink>(\"/payment-links/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<PaymentLink> {\n this.http.assertSecretKey(\"paymentLinks.update\");\n return this.http.patch<PaymentLink>(`/payment-links/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<PaymentLink> {\n this.http.assertSecretKey(\"paymentLinks.delete\");\n return this.http.delete<PaymentLink>(`/payment-links/${id}/`);\n }\n\n protected _archive(id: string): Promise<PaymentLink> {\n this.http.assertSecretKey(\"paymentLinks.archive\");\n return this.http.post<PaymentLink>(`/payment-links/${id}/archive/`, {});\n }\n\n protected _restore(id: string): Promise<PaymentLink> {\n this.http.assertSecretKey(\"paymentLinks.restore\");\n return this.http.post<PaymentLink>(`/payment-links/${id}/restore/`, {});\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/payment-links/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n CheckoutSession,\n CreatePayloads,\n CheckoutSessionCriteria,\n} from \"@/types/resources/checkout-sessions\";\n\nexport class CheckoutSessionsModule extends BaseModule {\n public checkoutSessions = {\n list: (criteria?: CheckoutSessionCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n expire: (id: string) => this._expire(id),\n delete: (id: string) => this._delete(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: CheckoutSessionCriteria): Promise<ListResponse<CheckoutSession>> {\n this.http.assertSecretKey(\"checkoutSessions.list\");\n return this.http.get<ListResponse<CheckoutSession>>(\"/checkout-sessions/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<CheckoutSession> {\n // Le backend autorise explicitement la clé publique sur cette action\n // (page de confirmation côté navigateur) — ne pas la bloquer ici.\n return this.http.get<CheckoutSession>(`/checkout-sessions/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<CheckoutSession> {\n this.http.assertSecretKey(\"checkoutSessions.create\");\n return this.http.post<CheckoutSession>(\"/checkout-sessions/\", payloads);\n }\n\n protected _expire(id: string): Promise<CheckoutSession> {\n this.http.assertSecretKey(\"checkoutSessions.expire\");\n return this.http.post<CheckoutSession>(`/checkout-sessions/${id}/expire/`, {});\n }\n\n protected _delete(id: string): Promise<CheckoutSession> {\n this.http.assertSecretKey(\"checkoutSessions.delete\");\n return this.http.delete<CheckoutSession>(`/checkout-sessions/${id}/`);\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/checkout-sessions/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n Subscription,\n CreatePayloads,\n Payloads,\n SubscriptionCriteria,\n} from \"@/types/resources/subscriptions\";\n\nexport class SubscriptionsModule extends BaseModule {\n public subscriptions = {\n list: (criteria?: SubscriptionCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n cancel: (id: string, payloads?: { cancel_at_period_end?: boolean }) => this._cancel(id, payloads),\n reactivate: (id: string) => this._reactivate(id),\n pause: (id: string) => this._pause(id),\n resume: (id: string) => this._resume(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: SubscriptionCriteria): Promise<ListResponse<Subscription>> {\n this.http.assertSecretKey(\"subscriptions.list\");\n return this.http.get<ListResponse<Subscription>>(\"/subscriptions/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Subscription> {\n this.http.assertSecretKey(\"subscriptions.retrieve\");\n return this.http.get<Subscription>(`/subscriptions/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<Subscription> {\n this.http.assertSecretKey(\"subscriptions.create\");\n return this.http.post<Subscription>(\"/subscriptions/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<Subscription> {\n this.http.assertSecretKey(\"subscriptions.update\");\n return this.http.patch<Subscription>(`/subscriptions/${id}/`, payloads);\n }\n\n protected _cancel(\n id: string,\n payloads?: { cancel_at_period_end?: boolean }\n ): Promise<Subscription> {\n this.http.assertSecretKey(\"subscriptions.cancel\");\n return this.http.post<Subscription>(`/subscriptions/${id}/cancel/`, payloads ?? {});\n }\n\n protected _reactivate(id: string): Promise<Subscription> {\n this.http.assertSecretKey(\"subscriptions.reactivate\");\n return this.http.post<Subscription>(`/subscriptions/${id}/reactivate/`, {});\n }\n\n protected _pause(id: string): Promise<Subscription> {\n this.http.assertSecretKey(\"subscriptions.pause\");\n return this.http.post<Subscription>(`/subscriptions/${id}/pause/`, {});\n }\n\n protected _resume(id: string): Promise<Subscription> {\n this.http.assertSecretKey(\"subscriptions.resume\");\n return this.http.post<Subscription>(`/subscriptions/${id}/resume/`, {});\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/subscriptions/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n PaymentMethod,\n AttachPayloads,\n PaymentMethodCriteria,\n} from \"@/types/resources/payment-methods\";\n\nexport class PaymentMethodsModule extends BaseModule {\n public paymentMethods = {\n list: (criteria?: PaymentMethodCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n attach: (id: string, payloads: AttachPayloads) => this._attach(id, payloads),\n detach: (id: string) => this._detach(id),\n setDefault: (id: string) => this._setDefault(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: PaymentMethodCriteria): Promise<ListResponse<PaymentMethod>> {\n this.http.assertSecretKey(\"paymentMethods.list\");\n return this.http.get<ListResponse<PaymentMethod>>(\"/payment-methods/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<PaymentMethod> {\n this.http.assertSecretKey(\"paymentMethods.retrieve\");\n return this.http.get<PaymentMethod>(`/payment-methods/${id}/`);\n }\n\n protected _attach(id: string, payloads: AttachPayloads): Promise<PaymentMethod> {\n this.http.assertSecretKey(\"paymentMethods.attach\");\n return this.http.post<PaymentMethod>(`/payment-methods/${id}/attach/`, payloads);\n }\n\n protected _detach(id: string): Promise<PaymentMethod> {\n this.http.assertSecretKey(\"paymentMethods.detach\");\n return this.http.post<PaymentMethod>(`/payment-methods/${id}/detach/`, {});\n }\n\n protected _setDefault(id: string): Promise<PaymentMethod> {\n this.http.assertSecretKey(\"paymentMethods.setDefault\");\n return this.http.post<PaymentMethod>(`/payment-methods/${id}/set-default/`, {});\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/payment-methods/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type { Receipt, ReceiptCriteria } from \"@/types/resources/receipts\";\n\nexport class ReceiptsModule extends BaseModule {\n public receipts = {\n list: (criteria?: ReceiptCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n getPdfUrl: (id: string) => this._getPdfUrl(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: ReceiptCriteria): Promise<ListResponse<Receipt>> {\n this.http.assertSecretKey(\"receipts.list\");\n return this.http.get<ListResponse<Receipt>>(\"/receipts/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Receipt> {\n this.http.assertSecretKey(\"receipts.retrieve\");\n return this.http.get<Receipt>(`/receipts/${id}/`);\n }\n\n protected _getPdfUrl(id: string): Promise<{ url: string; expires_at: string }> {\n this.http.assertSecretKey(\"receipts.getPdfUrl\");\n return this.http.get<{ url: string; expires_at: string }>(`/receipts/${id}/pdf/`);\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/receipts/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n Webhook,\n WebhookDelivery,\n CreatePayloads,\n Payloads,\n WebhookCriteria,\n DeliveryCriteria,\n} from \"@/types/resources/webhooks\";\n\nexport class WebhooksModule extends BaseModule {\n public webhooks = {\n list: (criteria?: WebhookCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n create: (payloads: CreatePayloads) => this._create(payloads),\n update: (id: string, payloads: Payloads) => this._update(id, payloads),\n delete: (id: string) => this._delete(id),\n disable: (id: string) => this._disable(id),\n enable: (id: string) => this._enable(id),\n rollSecret: (id: string) => this._rollSecret(id),\n sendTestEvent: (id: string) => this._sendTestEvent(id),\n listDeliveries: (id: string, criteria?: DeliveryCriteria) => this._listDeliveries(id, criteria),\n retrieveDelivery: (webhookId: string, deliveryId: string) => this._retrieveDelivery(webhookId, deliveryId),\n retryDelivery: (webhookId: string, deliveryId: string) => this._retryDelivery(webhookId, deliveryId),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: WebhookCriteria): Promise<ListResponse<Webhook>> {\n this.http.assertSecretKey(\"webhooks.list\");\n return this.http.get<ListResponse<Webhook>>(\"/webhooks/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Webhook> {\n this.http.assertSecretKey(\"webhooks.retrieve\");\n return this.http.get<Webhook>(`/webhooks/${id}/`);\n }\n\n protected _create(payloads: CreatePayloads): Promise<Webhook & { secret: string }> {\n this.http.assertSecretKey(\"webhooks.create\");\n return this.http.post<Webhook & { secret: string }>(\"/webhooks/\", payloads);\n }\n\n protected _update(id: string, payloads: Payloads): Promise<Webhook> {\n this.http.assertSecretKey(\"webhooks.update\");\n return this.http.patch<Webhook>(`/webhooks/${id}/`, payloads);\n }\n\n protected _delete(id: string): Promise<void> {\n this.http.assertSecretKey(\"webhooks.delete\");\n return this.http.delete(`/webhooks/${id}/`);\n }\n\n protected _disable(id: string): Promise<Webhook> {\n this.http.assertSecretKey(\"webhooks.disable\");\n return this.http.post<Webhook>(`/webhooks/${id}/disable/`, {});\n }\n\n protected _enable(id: string): Promise<Webhook> {\n this.http.assertSecretKey(\"webhooks.enable\");\n return this.http.post<Webhook>(`/webhooks/${id}/enable/`, {});\n }\n\n protected _rollSecret(id: string): Promise<{ secret: string }> {\n this.http.assertSecretKey(\"webhooks.rollSecret\");\n return this.http.post<{ secret: string }>(`/webhooks/${id}/roll-secret/`, {});\n }\n\n protected _sendTestEvent(id: string): Promise<WebhookDelivery> {\n this.http.assertSecretKey(\"webhooks.sendTestEvent\");\n return this.http.post<WebhookDelivery>(`/webhooks/${id}/test/`, {});\n }\n\n protected _listDeliveries(\n id: string,\n criteria?: DeliveryCriteria\n ): Promise<ListResponse<WebhookDelivery>> {\n this.http.assertSecretKey(\"webhooks.listDeliveries\");\n return this.http.get<ListResponse<WebhookDelivery>>(\n `/webhooks/${id}/deliveries/`,\n criteria\n );\n }\n\n protected _retrieveDelivery(\n webhookId: string,\n deliveryId: string\n ): Promise<WebhookDelivery> {\n this.http.assertSecretKey(\"webhooks.retrieveDelivery\");\n return this.http.get<WebhookDelivery>(\n `/webhooks/${webhookId}/deliveries/${deliveryId}/`\n );\n }\n\n protected _retryDelivery(\n webhookId: string,\n deliveryId: string\n ): Promise<WebhookDelivery> {\n this.http.assertSecretKey(\"webhooks.retryDelivery\");\n return this.http.post<WebhookDelivery>(\n `/webhooks/${webhookId}/deliveries/${deliveryId}/retry/`,\n {}\n );\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/webhooks/\");\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { SecurityProfile, UpdateSecurityProfileParams } from \"@/types/resources/security\";\n\nexport class SecurityModule extends BaseModule {\n public security = {\n retrieve: () => this._retrieve(),\n update: (params: UpdateSecurityProfileParams) => this._update(params),\n addAllowedIps: (ips: string[]) => this._addAllowedIps(ips),\n removeAllowedIps: (ips: string[]) => this._removeAllowedIps(ips),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _retrieve(): Promise<SecurityProfile> {\n this.http.assertSecretKey(\"security.retrieve\");\n return this.http.get<SecurityProfile>(\"/security/me/\");\n }\n\n protected _update(params: UpdateSecurityProfileParams): Promise<SecurityProfile> {\n this.http.assertSecretKey(\"security.update\");\n return this.http.patch<SecurityProfile>(\"/security/update_me/\", params);\n }\n\n // Pas d'action dédiée côté backend pour l'ajout/retrait d'IPs : on relit le\n // profil, on recompose la liste complète, puis on la renvoie via update_me/.\n protected async _addAllowedIps(ips: string[]): Promise<SecurityProfile> {\n this.http.assertSecretKey(\"security.addAllowedIps\");\n const profile = await this._retrieve();\n const merged = Array.from(new Set([...profile.allowed_ips, ...ips]));\n return this._update({ allowed_ips: merged });\n }\n\n protected async _removeAllowedIps(ips: string[]): Promise<SecurityProfile> {\n this.http.assertSecretKey(\"security.removeAllowedIps\");\n const profile = await this._retrieve();\n const remaining = profile.allowed_ips.filter((ip) => !ips.includes(ip));\n return this._update({ allowed_ips: remaining });\n }\n}","import { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type { Partner, PartnerCriteria } from \"@/types/resources/partners\";\n\nexport class PartnersModule extends BaseModule {\n public partners = {\n list: (criteria?: PartnerCriteria) => this._list(criteria),\n retrieve: (id: string) => this._retrieve(id),\n options: () => this._options(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n protected _list(criteria?: PartnerCriteria): Promise<ListResponse<Partner>> {\n this.http.assertSecretKey(\"partners.list\");\n return this.http.get<ListResponse<Partner>>(\"/partners/\", criteria);\n }\n\n protected _retrieve(id: string): Promise<Partner> {\n this.http.assertSecretKey(\"partners.retrieve\");\n return this.http.get<Partner>(`/partners/${id}/`);\n }\n\n protected _options(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/partners/\");\n }\n}","// @/modules/terminal.ts\n\nimport { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { ListResponse, DRFOptions } from \"@/types/common\";\nimport type {\n TerminalReader,\n TerminalSession,\n OfflineTransaction,\n CreateReaderPayloads,\n CreateSessionPayloads,\n PresentPaymentPayloads,\n SessionStatus,\n SyncPayloads,\n SyncResponse,\n ReaderCriteria,\n SessionCriteria,\n} from \"@/types/resources/terminal\";\n\nexport class TerminalModule extends BaseModule {\n public terminal = {\n // ── Readers ───────────────────────────────────────────────────────\n readers: {\n list: (criteria?: ReaderCriteria) => this._listReaders(criteria),\n retrieve: (id: string) => this._retrieveReader(id),\n create: (payloads: CreateReaderPayloads) => this._createReader(payloads),\n update: (id: string, payloads: Partial<CreateReaderPayloads>) => this._updateReader(id, payloads),\n disable: (id: string) => this._disableReader(id),\n refreshToken: (id: string) => this._refreshToken(id),\n heartbeat: (id: string) => this._heartbeat(id),\n options: () => this._readerOptions(),\n },\n // ── Sessions ──────────────────────────────────────────────────────\n sessions: {\n list: (criteria?: SessionCriteria) => this._listSessions(criteria),\n retrieve: (id: string) => this._retrieveSession(id),\n create: (payloads: CreateSessionPayloads) => this._createSession(payloads),\n presentPaymentMethod: (id: string, payloads: PresentPaymentPayloads) => this._presentPayment(id, payloads),\n pollStatus: (id: string) => this._pollStatus(id),\n cancel: (id: string) => this._cancelSession(id),\n options: () => this._sessionOptions(),\n },\n // ── Offline sync ──────────────────────────────────────────────────\n offline: {\n sync: (payloads: SyncPayloads) => this._syncOffline(payloads),\n list: (criteria?: { sync_status?: string; page?: number }) => this._listOffline(criteria),\n options: () => this._offlineOptions(),\n },\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n // ── Reader methods ──────────────────────────────────────────────────────────\n\n protected _listReaders(criteria?: ReaderCriteria): Promise<ListResponse<TerminalReader>> {\n this.http.assertSecretKey(\"terminal.readers.list\");\n return this.http.get<ListResponse<TerminalReader>>(\"/terminal/readers/\", criteria);\n }\n\n protected _retrieveReader(id: string): Promise<TerminalReader> {\n this.http.assertSecretKey(\"terminal.readers.retrieve\");\n return this.http.get<TerminalReader>(`/terminal/readers/${id}/`);\n }\n\n protected _createReader(payloads: CreateReaderPayloads): Promise<TerminalReader> {\n this.http.assertSecretKey(\"terminal.readers.create\");\n return this.http.post<TerminalReader>(\"/terminal/readers/\", payloads);\n }\n\n protected _updateReader(\n id: string,\n payloads: Partial<CreateReaderPayloads>\n ): Promise<TerminalReader> {\n this.http.assertSecretKey(\"terminal.readers.update\");\n return this.http.patch<TerminalReader>(`/terminal/readers/${id}/`, payloads);\n }\n\n protected _disableReader(id: string): Promise<TerminalReader> {\n this.http.assertSecretKey(\"terminal.readers.disable\");\n return this.http.delete<TerminalReader>(`/terminal/readers/${id}/`);\n }\n\n protected _refreshToken(id: string): Promise<{ reader_token: string; reader_token_expires: string }> {\n this.http.assertSecretKey(\"terminal.readers.refreshToken\");\n return this.http.post<{ reader_token: string; reader_token_expires: string }>(\n `/terminal/readers/${id}/refresh-token/`, {}\n );\n }\n\n protected _heartbeat(id: string): Promise<{ status: string; last_seen_at: string }> {\n this.http.assertSecretKey(\"terminal.readers.heartbeat\");\n return this.http.post<{ status: string; last_seen_at: string }>(\n `/terminal/readers/${id}/heartbeat/`, {}\n );\n }\n\n protected _readerOptions(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/terminal/readers/\");\n }\n\n // ── Session methods ─────────────────────────────────────────────────────────\n\n protected _listSessions(criteria?: SessionCriteria): Promise<ListResponse<TerminalSession>> {\n this.http.assertSecretKey(\"terminal.sessions.list\");\n return this.http.get<ListResponse<TerminalSession>>(\"/terminal/sessions/\", criteria);\n }\n\n protected _retrieveSession(id: string): Promise<TerminalSession> {\n this.http.assertSecretKey(\"terminal.sessions.retrieve\");\n return this.http.get<TerminalSession>(`/terminal/sessions/${id}/`);\n }\n\n protected _createSession(payloads: CreateSessionPayloads): Promise<TerminalSession> {\n this.http.assertSecretKey(\"terminal.sessions.create\");\n return this.http.post<TerminalSession>(\"/terminal/sessions/\", payloads);\n }\n\n protected _presentPayment(\n id: string,\n payloads: PresentPaymentPayloads\n ): Promise<TerminalSession> {\n // Utilise assertSecretKey OU le reader_token — géré côté backend (IsTerminalToken)\n this.http.assertSecretKey(\"terminal.sessions.presentPaymentMethod\");\n return this.http.post<TerminalSession>(\n `/terminal/sessions/${id}/present-payment-method/`, payloads\n );\n }\n\n protected _pollStatus(id: string): Promise<SessionStatus> {\n this.http.assertSecretKey(\"terminal.sessions.pollStatus\");\n return this.http.get<SessionStatus>(`/terminal/sessions/${id}/status/`);\n }\n\n protected _cancelSession(id: string): Promise<TerminalSession> {\n this.http.assertSecretKey(\"terminal.sessions.cancel\");\n return this.http.post<TerminalSession>(`/terminal/sessions/${id}/cancel/`, {});\n }\n\n protected _sessionOptions(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/terminal/sessions/\");\n }\n\n // ── Offline methods ─────────────────────────────────────────────────────────\n\n protected _syncOffline(payloads: SyncPayloads): Promise<SyncResponse> {\n this.http.assertSecretKey(\"terminal.offline.sync\");\n return this.http.post<SyncResponse>(\"/terminal/offline/sync/\", payloads);\n }\n\n protected _listOffline(\n criteria?: { sync_status?: string; page?: number }\n ): Promise<ListResponse<OfflineTransaction>> {\n this.http.assertSecretKey(\"terminal.offline.list\");\n return this.http.get<ListResponse<OfflineTransaction>>(\n \"/terminal/offline/sync/\", criteria\n );\n }\n\n protected _offlineOptions(): Promise<DRFOptions> {\n return this.http.options<DRFOptions>(\"/terminal/offline/sync/\");\n }\n}","// =============================================================================\n// sangho-sdk-js — @/modules/sandbox.ts\n// =============================================================================\nimport { HttpClient } from \"@/core/http\";\nimport { BaseModule } from \"./base\";\nimport type { SandboxResetResult } from \"@/types/resources/sandbox\";\n\nexport class SandboxModule extends BaseModule {\n public sandbox = {\n reset: () => this._reset(),\n };\n\n public constructor(protected http: HttpClient) {\n super(http);\n }\n\n /**\n * Supprime toutes les données sandbox de l'application courante (customers,\n * products, payment_intents, transactions, refunds, invoices,\n * checkout_sessions, subscriptions, payment_methods, receipts).\n *\n * L'app elle-même, ses clés API et ses paramètres sont conservés.\n * Bloqué par le backend si la clé utilisée est une clé live (`sk_prod_*`).\n *\n * @example\n * await sangho.sandbox.reset()\n */\n protected _reset(): Promise<SandboxResetResult> {\n this.http.assertSecretKey(\"sandbox.reset\");\n return this.http.post<SandboxResetResult>(\"/reset/\", {});\n }\n}\n","// =============================================================================\n// sangho-sdk-js — Vérification des signatures Webhook\n// Permet de valider que les événements reçus proviennent bien de Sangho.\n// Compatible navigateur (SubtleCrypto) ET Node.js (crypto).\n// =============================================================================\n\nimport { SanghoError } from \"@/core/errors\";\n\nconst TOLERANCE_SECONDS = 300; // 5 minutes\n\n/**\n * Vérifie la signature HMAC-SHA256 d'un événement webhook Sangho.\n *\n * @example\n * ```typescript\n * // `constructEvent` est une méthode statique de `Sangho`, pas une méthode\n * // d'instance sur `sangho.webhooks` — pas besoin d'avoir instancié le client.\n * const event = await Sangho.constructEvent(\n * rawBody,\n * request.headers['sangho-signature'],\n * 'whsec_xxxxx'\n * )\n * ```\n */\nexport async function constructEvent<T = unknown>(\n payload: string | Uint8Array,\n signature: string,\n secret: string,\n tolerance = TOLERANCE_SECONDS\n): Promise<{ id: string; type: string; created: number; data: T }> {\n const rawPayload = typeof payload === \"string\"\n ? new TextEncoder().encode(payload)\n : payload;\n\n // Format header: t=timestamp,v1=signature\n const parts = Object.fromEntries(\n signature.split(\",\").map((part) => {\n const idx = part.indexOf(\"=\");\n return [part.slice(0, idx), part.slice(idx + 1)];\n })\n );\n\n const timestamp = Number(parts[\"t\"]);\n const expectedSig = parts[\"v1\"];\n\n if (!timestamp || !expectedSig) {\n throw new SanghoError(\n \"Invalid Sangho-Signature header format.\",\n \"API_ERROR\"\n );\n }\n\n // Rejet des replays (événements trop anciens)\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - timestamp) > tolerance) {\n throw new SanghoError(\n `Webhook timestamp too old (${Math.abs(now - timestamp)}s). ` +\n `Possible replay attack. Tolerance is ${tolerance}s.`,\n \"API_ERROR\"\n );\n }\n\n // Calcul HMAC-SHA256\n const signedPayload = `${timestamp}.${new TextDecoder().decode(rawPayload)}`;\n const computedSig = await hmacSha256(secret, signedPayload);\n\n if (!timingSafeEqual(computedSig, expectedSig)) {\n throw new SanghoError(\n \"Webhook signature mismatch. Verify your webhook secret.\",\n \"AUTHENTICATION_ERROR\",\n 401\n );\n }\n\n // Parse et retourne le payload validé\n const body = JSON.parse(new TextDecoder().decode(rawPayload));\n return body as { id: string; type: string; created: number; data: T };\n}\n\n// ─── Internals ────────────────────────────────────────────────────────────────\n\nasync function hmacSha256(secret: string, message: string): Promise<string> {\n const encoder = new TextEncoder();\n\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n // Navigateur ou Node.js 18+\n const key = await crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n );\n const sig = await crypto.subtle.sign(\"HMAC\", key, encoder.encode(message));\n return Array.from(new Uint8Array(sig))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n }\n\n // Fallback Node.js (import dynamique pour ne pas casser le bundle navigateur)\n const { createHmac } = await import(\"crypto\");\n return createHmac(\"sha256\", secret).update(message).digest(\"hex\");\n}\n\n/**\n * Comparaison en temps constant pour éviter les timing attacks.\n */\nfunction timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}","// eslint-disable-next-line @typescript-eslint/no-explicit-any -- pattern mixin officiel TS : les constructeurs mixés ont des signatures hétérogènes, unknown[] casse l'appel spread ci-dessous.\ntype Constructor<T = object> = new (...args: any[]) => T;\n\nexport function Mixins<TBase extends Constructor>(BaseClass: TBase, ...Bases: Constructor[]) {\n class MixinsClass extends BaseClass {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- même raison : args passés tel quel aux constructeurs de Bases.\n constructor(...args: any[]) {\n super(...args);\n Bases.forEach((Base) => {\n const instance = new Base(...args);\n Object.getOwnPropertyNames(instance).forEach((name) => {\n if (name !== 'constructor') {\n const descriptor = Object.getOwnPropertyDescriptor(instance, name);\n if (descriptor) {\n Object.defineProperty(this, name, descriptor);\n }\n }\n });\n \n // Copier les méthodes du prototype\n const proto = Base.prototype;\n Object.getOwnPropertyNames(proto).forEach((name) => {\n if (name !== 'constructor') {\n const descriptor = Object.getOwnPropertyDescriptor(proto, name);\n if (descriptor) {\n Object.defineProperty(MixinsClass.prototype, name, descriptor);\n }\n }\n });\n });\n }\n }\n\n return MixinsClass;\n}","// =============================================================================\n// sangho-sdk-js — SanghoClient\n// =============================================================================\nimport { HttpClient } from \"@/core/http\";\nimport {\n AccountModule,\n AppsModule,\n AddressesModule,\n CustomersModule,\n ProductsModule,\n PaymentIntentsModule,\n TransactionsModule,\n RefundsModule,\n InvoicesModule,\n PaymentLinksModule,\n CheckoutSessionsModule,\n SubscriptionsModule,\n PaymentMethodsModule,\n ReceiptsModule,\n WebhooksModule,\n SecurityModule,\n PartnersModule,\n TerminalModule,\n SandboxModule,\n} from \"@/modules\";\nimport { constructEvent } from \"@/utils/webhook\";\nimport { SanghoError } from \"@/core/errors\";\nimport { InterfaceOnly, SanghoOptions } from \"@/types/common\";\nimport {\n AccountProperties,\n AppsProperties,\n AddressesProperties,\n PaymentIntentsProperties,\n CustomersProperties,\n ProductsProperties,\n TransactionsProperties,\n RefundsProperties,\n InvoicesProperties,\n PaymentLinksProperties,\n CheckoutSessionsProperties,\n SubscriptionsProperties,\n PaymentMethodsProperties,\n ReceiptsProperties,\n WebhooksProperties,\n SecurityProperties,\n PartnersProperties,\n TerminalProperties,\n SandboxProperties,\n} from \"@/types/properties\";\nimport { BaseModule } from \"./modules/base\";\nimport { Mixins } from \"./utils/mixins\";\n\nconst VALID_KEY_PREFIXES = [\"pk_prod_\", \"sk_prod_\", \"pk_test_\", \"sk_test_\"] as const;\n\nfunction validateApiKey(key: string): void {\n if (!key || typeof key !== \"string\") {\n throw new SanghoError(\n \"API key must be a non-empty string. \" +\n \"Find your API keys at https://dash.sangho.ga/project/api-keys.\",\n \"AUTHENTICATION_ERROR\"\n );\n }\n if (!VALID_KEY_PREFIXES.some((prefix) => key.startsWith(prefix))) {\n throw new SanghoError(\n `Invalid API key format: \"${key.slice(0, 10)}...\". ` +\n `Keys must start with pk_prod_, sk_prod_, pk_test_, or sk_test_.`,\n \"AUTHENTICATION_ERROR\"\n );\n }\n if (key.length < 20) {\n throw new SanghoError(\"API key is too short.\", \"AUTHENTICATION_ERROR\");\n }\n}\n\nfunction validateBaseURL(baseURL: string): void {\n let url: URL;\n try {\n url = new URL(baseURL);\n } catch {\n throw new SanghoError(`Invalid baseURL: \"${baseURL}\".`, \"API_ERROR\");\n }\n const isLocal = url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\";\n if (url.protocol !== \"https:\" && !isLocal) {\n throw new SanghoError(\n `Refusing to send API keys over a non-HTTPS baseURL: \"${baseURL}\". ` +\n \"Use an https:// URL (localhost/127.0.0.1 are exempt for local development).\",\n \"API_ERROR\"\n );\n }\n}\n/**\n * Client principal du SDK Sangho.\n *\n * @example\n * ```typescript\n * // Côté serveur — clé secrète\n * const sangho = new Sangho(\"sk_prod_xxx\")\n * const intent = await sangho.paymentIntents.create({ amount: 5000, currency: \"XAF\" })\n *\n * // Côté navigateur — clé publique (checkout uniquement)\n * const sangho = new Sangho(\"pk_prod_xxx\")\n * const session = await sangho.checkoutSessions.retrieve(\"cs_xxx\")\n * ```\n */\nexport class Sangho extends Mixins(\n BaseModule, AccountModule, AppsModule, AddressesModule, CustomersModule,\n ProductsModule, PaymentIntentsModule, TransactionsModule,\n RefundsModule, InvoicesModule, PaymentLinksModule,\n CheckoutSessionsModule, SubscriptionsModule, PaymentMethodsModule,\n ReceiptsModule, WebhooksModule, SecurityModule, PartnersModule,\n TerminalModule, SandboxModule\n) {\n declare public readonly account: InterfaceOnly<AccountProperties>;\n declare public readonly apps: InterfaceOnly<AppsProperties>;\n declare public readonly addresses: InterfaceOnly<AddressesProperties>;\n declare public readonly customers: InterfaceOnly<CustomersProperties>;\n declare public readonly products: InterfaceOnly<ProductsProperties>;\n declare public readonly paymentIntents: InterfaceOnly<PaymentIntentsProperties>;\n declare public readonly transactions: InterfaceOnly<TransactionsProperties>;\n declare public readonly refunds: InterfaceOnly<RefundsProperties>;\n declare public readonly invoices: InterfaceOnly<InvoicesProperties>;\n declare public readonly paymentLinks: InterfaceOnly<PaymentLinksProperties>;\n declare public readonly checkoutSessions: InterfaceOnly<CheckoutSessionsProperties>;\n declare public readonly subscriptions: InterfaceOnly<SubscriptionsProperties>;\n declare public readonly paymentMethods: InterfaceOnly<PaymentMethodsProperties>;\n declare public readonly receipts: InterfaceOnly<ReceiptsProperties>;\n declare public readonly webhooks: InterfaceOnly<WebhooksProperties>;\n declare public readonly security: InterfaceOnly<SecurityProperties>;\n declare public readonly partners: InterfaceOnly<PartnersProperties>;\n declare public readonly terminal: InterfaceOnly<TerminalProperties>;\n declare public readonly sandbox: InterfaceOnly<SandboxProperties>;\n\n constructor(apiKey: string, options: SanghoOptions = {}) {\n validateApiKey(apiKey);\n\n const isSandbox = apiKey.startsWith(\"pk_test_\") || apiKey.startsWith(\"sk_test_\");\n const baseURL = options.baseURL ?? \"https://api.sangho.ga/v1\";\n validateBaseURL(baseURL);\n\n const http = new HttpClient({\n apiKey,\n baseURL,\n timeout: options.timeout ?? 30_000,\n maxRetries: options.maxRetries ?? 3,\n sandbox: isSandbox,\n });\n super(http);\n }\n /**\n * Vérifie et parse un événement webhook entrant.\n * Valide la signature HMAC-SHA256 + protection anti-replay (5 min).\n *\n * @param payload - Corps brut de la requête (Buffer ou string)\n * @param signature - Header `Sangho-Signature` de la requête\n * @param secret - Secret du webhook (depuis le dashboard)\n *\n * @example\n * ```typescript\n * // Express\n * app.post('/webhooks/sangho', express.raw({ type: 'application/json' }), (req, res) => {\n * const event = Sangho.constructEvent(\n * req.body,\n * req.headers['sangho-signature'],\n * process.env.SANGHO_WEBHOOK_SECRET\n * )\n * if (event.type === 'payment_intent.succeeded') {\n * await fulfillOrder(event.data)\n * }\n * res.json({ received: true })\n * })\n * ```\n */\n static constructEvent = constructEvent;\n}\n\nexport default Sangho;"]}
|