mupag-sdk 0.2.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/README.md +224 -0
- package/dist/chunk-FQHYME3I.js +2 -0
- package/dist/chunk-FQHYME3I.js.map +1 -0
- package/dist/chunk-M4RQIIHN.js +2 -0
- package/dist/chunk-M4RQIIHN.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +70 -0
- package/dist/errors.d.ts +70 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +133 -0
- package/dist/index.d.ts +133 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/types-C1s3-E1E.d.cts +225 -0
- package/dist/types-C1s3-E1E.d.ts +225 -0
- package/dist/webhooks.cjs +2 -0
- package/dist/webhooks.cjs.map +1 -0
- package/dist/webhooks.d.cts +18 -0
- package/dist/webhooks.d.ts +18 -0
- package/dist/webhooks.js +2 -0
- package/dist/webhooks.js.map +1 -0
- package/examples/card.ts +23 -0
- package/examples/pix.ts +20 -0
- package/examples/refund.ts +13 -0
- package/examples/subscription.ts +13 -0
- package/examples/webhook-validation.ts +20 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/pan.ts","../src/version.ts","../src/http.ts","../src/resources.ts","../src/webhooks.ts","../src/index.ts"],"names":["MuPagError","options","APIError","RateLimitError","ValidationError","AuthError","IdempotencyError","OutcomeUnknownError","idempotencyKey","cause","apiCause","WebhookSignatureError","createApiError","status","payload","headers","problem","isProblemDetails","parseRetryAfter","value","retryAt","containsPANLikeSequence","retainedDigits","character","decimalDigit","unicodeDecimalDigitValue","length","validPANSequence","codePoint","blockStart","digits","sum","doubleDigit","index","digit","SDK_VERSION","DEFAULT_RETRY","DEFAULT_MAX_RESPONSE_BYTES","MAX_CONFIGURED_RESPONSE_BYTES","MAX_REQUEST_BYTES","DEFINITIVE_CONFLICT_CODES","BASE_URL_BY_ENV","HttpClient","config","expectedPrefix","validateBaseUrl","runtimeFetch","validateClientBounds","method","path","normalizedMethod","mutation","isMutation","effectiveIdempotencyKey","createIdempotencyKey","url","body","validateIdempotencyKey","idempotent","attempt","ambiguousCause","lastError","controller","timeout","init","response","parsed","parseJson","responseValidator","validSuccessResponse","invalidResponse","error","isAmbiguousMutationError","isImmediateOutcomeUnknown","shouldRetry","isIdempotencyInProgress","delay","retryDelayMs","query","key","cryptoApi","randomBytes","rejectPAN","maxBytes","text","readBoundedResponseText","contentLength","reader","chunks","total","done","output","offset","chunk","code","message","validator","retry","backoff","ms","resolve","environment","canonicalOrigin","loopback","allowedOrigin","allowedProtocol","timeoutMs","maxResponseBytes","MAX_CHARGE_AMOUNT_CENTS","BASE64URL_CURSOR_PATTERN","CheckoutSessionsResource","http","params","validateCheckoutSessionParams","canonicalRequestSnapshot","requestOptions","isCheckoutSessionResponse","ChargesResource","validateChargeParams","isChargeResponse","id","validateResourceId","request","validateCancelChargeOptions","isChargeCancellationResponse","validateChargeListParams","isChargeListResponse","SubscriptionsResource","validateSubscriptionParams","validateMutationOptions","isSubscriptionCreateResponse","isSubscriptionCreateResponseAfterAmbiguous","validateCancelSubscriptionParams","isSubscriptionCancellationResponse","CustomersResource","rejectPANLikeOptionalText","validateCustomerParams","isCustomerResponse","RefundsResource","chargeId","normalizedParams","normalizeRefundParams","isRefundResponse","refundId","isRefundReadResponse","validateRefundListParams","isRefundListResponse","amount","full","reason","hasAmount","normalizedReason","trimBackendWhitespace","start","end","isObject","nonEmptyString","absoluteUrl","validInstant","CHARGE_STATUSES","LIST_CHARGE_STATUSES","REFUND_STATUSES","SCHEDULED_SUBSCRIPTION_STATUSES","INITIAL_SUBSCRIPTION_STATUSES","expected","allowCouponDiscount","couponCodePresent","couponCodeEchoed","originalAmountEchoed","subtotalAmountEchoed","correlatedCouponEvidence","validIdentifier","validChargeOptionalFields","matchesOptionalEcho","matchesCustomerIdentityEcho","expectedChargeId","validNextCursor","item","isChargeListItem","createdAt","parseInstant","createdAtFrom","createdAtTo","isSubscriptionResponse","expectedId","matchesNullableOptionalEcho","actualReason","validNullableOptionalString","expectedRefundId","validNullableOptionalInstant","refund","actual","field","identities","identity","previous","validCanonicalCursor","maximum","paddedBase64","decoded","match","year","month","day","hour","minute","second","offsetHour","offsetMinute","daysInMonth","normalizedCase","leapSecond","parsable","validOptionalString","validOptionalIdentifier","validNullableOptionalIdentifier","validOptionalInstant","allowedObject","optionalCursor","safeInteger","optionalIdentifier","requiredText","optionalInteger","optionalText","payerIp","isIpLiteral","optionalBoolean","metadata","canonicalJsonObject","hasRawToken","hasStoredToken","validateSplitRules","rules","amountCents","allocatedCents","percentageBps","rule","requiredIdentifier","line","safeRedirectUrl","methods","utmParams","optionalInstant","keys","allowlist","unsupported","identifier","minimum","isIpv4Literal","isIpv6Literal","octets","octet","compression","parts","side","part","units","validateJsonObject","stack","seen","nodes","current","entry","child","normalized","compact","sensitiveBase","token","descriptor","qualifier","suffix","encoded","_key","snapshot","DEFAULT_TOLERANCE_SECONDS","MAX_WEBHOOK_BYTES","constructWebhookEvent","rawPayload","signatureHeader","secret","toleranceSeconds","signature","parseSignatureHeader","hmacSha256Hex","constantTimeEqual","event","WebhooksResource","malformedSignatureHeader","timestampText","rawPart","separator","candidate","timestamp","byte","left","right","maxLength","diff","MuPag"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { JsonObject, JsonValue } from './types.js';\n\nexport type ProblemDetails = JsonObject & {\n title?: string | undefined;\n detail?: string | undefined;\n status?: number | undefined;\n code?: string | undefined;\n suggestion?: string | undefined;\n documentation_url?: string | undefined;\n request_id?: string | undefined;\n};\n\nexport type MuPagErrorOptions = {\n message: string;\n status?: number | undefined;\n code?: string | undefined;\n requestId?: string | undefined;\n suggestion?: string | undefined;\n documentationUrl?: string | undefined;\n cause?: unknown | undefined;\n};\n\nexport class MuPagError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly requestId: string | undefined;\n readonly suggestion: string | undefined;\n readonly documentationUrl: string | undefined;\n\n /**\n * Mantem os campos de erro da API acessiveis no SDK sem expor payload bruto.\n *\n * A API publica envia Problem Details com extensoes DX-first. O SDK preserva\n * codigo, sugestao, link e request_id para o integrador resolver o problema\n * sem abrir suporte, mas evita guardar headers ou corpo inteiro com dados sensiveis.\n */\n constructor(options: MuPagErrorOptions) {\n super(options.message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'MuPagError';\n this.status = options.status;\n this.code = options.code;\n this.requestId = options.requestId;\n this.suggestion = options.suggestion;\n this.documentationUrl = options.documentationUrl;\n }\n}\n\nexport class APIError extends MuPagError {\n constructor(options: MuPagErrorOptions) {\n super(options);\n this.name = 'APIError';\n }\n}\n\nexport class RateLimitError extends APIError {\n readonly retryAfter: number | undefined;\n\n constructor(options: MuPagErrorOptions & { retryAfter?: number | undefined }) {\n super(options);\n this.name = 'RateLimitError';\n this.retryAfter = options.retryAfter;\n }\n}\n\nexport class ValidationError extends APIError {\n constructor(options: MuPagErrorOptions) {\n super(options);\n this.name = 'ValidationError';\n }\n}\n\nexport class AuthError extends APIError {\n constructor(options: MuPagErrorOptions) {\n super(options);\n this.name = 'AuthError';\n }\n}\n\nexport class IdempotencyError extends APIError {\n constructor(options: MuPagErrorOptions) {\n super(options);\n this.name = 'IdempotencyError';\n }\n}\n\nexport class OutcomeUnknownError extends APIError {\n readonly idempotencyKey: string;\n readonly outcomeUnknown = true;\n\n /**\n * Indica que uma mutacao pode ter sido aceita, mas nao houve confirmacao confiavel.\n *\n * A chave fica disponivel apenas no campo estruturado para evitar vazamento acidental\n * em logs. O integrador deve reutiliza-la com exatamente o mesmo payload.\n */\n constructor(idempotencyKey: string, cause: unknown) {\n const apiCause = cause instanceof APIError ? cause : undefined;\n super({\n message:\n 'O resultado da mutacao e desconhecido; reutilize a Idempotency-Key exposta com o mesmo payload.',\n status: apiCause?.status,\n code: 'outcome_unknown',\n requestId: apiCause?.requestId,\n suggestion:\n 'Reutilize a mesma Idempotency-Key e o mesmo payload para reconciliar a operacao.',\n documentationUrl: apiCause?.documentationUrl,\n cause\n });\n this.name = 'OutcomeUnknownError';\n this.idempotencyKey = idempotencyKey;\n }\n}\n\nexport class WebhookSignatureError extends MuPagError {\n constructor(options: MuPagErrorOptions) {\n super(options);\n this.name = 'WebhookSignatureError';\n }\n}\n\nexport function createApiError(\n status: number,\n payload: JsonValue | undefined,\n headers: Headers\n): APIError {\n const problem = isProblemDetails(payload) ? payload : {};\n const message = problem.detail ?? problem.title ?? `A API retornou HTTP ${status}.`;\n const options: MuPagErrorOptions = {\n message,\n status,\n code: problem.code,\n requestId: problem.request_id ?? headers.get('request-id') ?? undefined,\n suggestion: problem.suggestion,\n documentationUrl: problem.documentation_url\n };\n\n if (status === 401 || status === 403) {\n return new AuthError(options);\n }\n\n if (status === 409 && problem.code === 'idempotency_key_reused') {\n return new IdempotencyError(options);\n }\n\n if (status === 400 || status === 422) {\n return new ValidationError(options);\n }\n\n if (status === 429) {\n return new RateLimitError({\n ...options,\n retryAfter: parseRetryAfter(headers.get('retry-after'))\n });\n }\n\n return new APIError(options);\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (value === null) return undefined;\n if (/^\\d+$/.test(value)) return Number(value);\n const retryAt = Date.parse(value);\n if (Number.isNaN(retryAt)) return undefined;\n return Math.max(0, Math.ceil((retryAt - Date.now()) / 1_000));\n}\n\nfunction isProblemDetails(value: JsonValue | undefined): value is ProblemDetails {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","export function containsPANLikeSequence(value: string): boolean {\n let retainedDigits = '';\n\n for (const character of value) {\n const decimalDigit = unicodeDecimalDigitValue(character);\n if (decimalDigit !== undefined) {\n retainedDigits = (retainedDigits + decimalDigit).slice(-19);\n for (let length = 12; length <= retainedDigits.length; length += 1) {\n if (validPANSequence(retainedDigits.slice(-length))) return true;\n }\n } else if (/^[\\s\\p{P}\\p{S}\\p{M}\\p{Cc}\\p{Cf}]$/u.test(character)) {\n continue;\n } else {\n retainedDigits = '';\n }\n }\n return false;\n}\n\nfunction unicodeDecimalDigitValue(character: string): string | undefined {\n const codePoint = character.codePointAt(0)!;\n if (codePoint >= 0x30 && codePoint <= 0x39) return character;\n if (!/^\\p{Decimal_Number}$/u.test(character)) return undefined;\n\n let blockStart = codePoint;\n while (blockStart > 0 && /^\\p{Decimal_Number}$/u.test(String.fromCodePoint(blockStart - 1))) {\n blockStart -= 1;\n }\n return String((codePoint - blockStart) % 10);\n}\n\nfunction validPANSequence(digits: string): boolean {\n if (!/^[0-9]{12,19}$/.test(digits)) return false;\n let sum = 0;\n let doubleDigit = false;\n for (let index = digits.length - 1; index >= 0; index -= 1) {\n let digit = digits.charCodeAt(index) - 48;\n if (doubleDigit) {\n digit *= 2;\n if (digit > 9) digit -= 9;\n }\n sum += digit;\n doubleDigit = !doubleDigit;\n }\n return sum % 10 === 0;\n}\n","export const SDK_VERSION = '0.2.0' as const;\n","import {\n APIError,\n MuPagError,\n OutcomeUnknownError,\n RateLimitError,\n createApiError\n} from './errors.js';\nimport { containsPANLikeSequence } from './pan.js';\nimport { SDK_VERSION } from './version.js';\nimport type {\n Environment,\n FetchLike,\n JsonValue,\n RetryConfig\n} from './types.js';\n\nconst DEFAULT_RETRY: RetryConfig = {\n maxRetries: 2,\n initialDelayMs: 200,\n maxDelayMs: 2_000\n};\nconst DEFAULT_MAX_RESPONSE_BYTES = 2 * 1024 * 1024;\nconst MAX_CONFIGURED_RESPONSE_BYTES = 16 * 1024 * 1024;\nconst MAX_REQUEST_BYTES = 1024 * 1024;\nconst DEFINITIVE_CONFLICT_CODES = new Set([\n 'fingerprint_conflict',\n 'idempotency_fingerprint_conflict',\n 'idempotency_key_reused'\n]);\n\nconst BASE_URL_BY_ENV: Record<Environment, string> = {\n test: 'https://api.sandbox.mupag.com.br',\n prd: 'https://api.mupag.com.br'\n};\n\ntype HttpClientConfig = {\n apiKey: string;\n env: Environment;\n baseUrl?: string | undefined;\n fetch?: FetchLike | undefined;\n timeoutMs?: number | undefined;\n maxResponseBytes?: number | undefined;\n retry?: Partial<RetryConfig> | undefined;\n};\n\ntype RequestConfig = {\n query?: Record<string, string | number | boolean | undefined> | undefined;\n body?: unknown;\n idempotencyKey?: string | undefined;\n validateResponse?: ((value: JsonValue | undefined) => boolean) | undefined;\n validateResponseAfterAmbiguous?: ((value: JsonValue | undefined) => boolean) | undefined;\n};\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly fetcher: FetchLike;\n private readonly timeoutMs: number;\n private readonly maxResponseBytes: number;\n private readonly retry: RetryConfig;\n\n /**\n * Centraliza a parte HTTP do SDK para manter recursos (`charges`, `refunds`) finos.\n *\n * O SDK roda em Node 18+ e runtimes edge, entao dependemos apenas de `fetch`,\n * `AbortController` e Web APIs padrao. A injecao de `fetch` deixa teste rapido e\n * evita chamar API real durante desenvolvimento.\n */\n constructor(config: HttpClientConfig) {\n if (\n typeof config.apiKey !== 'string' ||\n !config.apiKey.trim() ||\n config.apiKey.length > 512 ||\n !/^[\\x21-\\x7e]+$/.test(config.apiKey)\n ) {\n throw new MuPagError({\n message: 'Informe uma apiKey valida para criar o cliente MuPag.',\n code: 'missing_api_key',\n suggestion: 'Use uma chave sk_test_ no sandbox ou sk_prd_ em producao.'\n });\n }\n if (config.env !== 'test' && config.env !== 'prd') {\n throw new MuPagError({\n message: 'Informe explicitamente o ambiente test ou prd.',\n code: 'missing_environment',\n suggestion: 'Use env: test enquanto estiver integrando no sandbox.'\n });\n }\n const expectedPrefix = config.env === 'test' ? 'sk_test_' : 'sk_prd_';\n if (!config.apiKey.startsWith(expectedPrefix)) {\n throw new MuPagError({\n message: 'A apiKey informada nao pertence ao ambiente selecionado.',\n code: 'api_key_environment_mismatch',\n suggestion: `Use uma chave ${expectedPrefix} no ambiente ${config.env}.`\n });\n }\n\n this.apiKey = config.apiKey;\n this.baseUrl = validateBaseUrl(config.baseUrl ?? BASE_URL_BY_ENV[config.env], config.env);\n const runtimeFetch = config.fetch ?? globalThis.fetch;\n if (typeof runtimeFetch !== 'function') {\n throw new MuPagError({ message: 'O runtime nao oferece fetch.', code: 'fetch_unavailable' });\n }\n this.fetcher = runtimeFetch.bind(globalThis);\n this.timeoutMs = config.timeoutMs ?? 30_000;\n this.retry = { ...DEFAULT_RETRY, ...config.retry };\n this.maxResponseBytes = config.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;\n validateClientBounds(this.timeoutMs, this.maxResponseBytes, this.retry);\n }\n\n async request<TResponse>(method: string, path: string, config: RequestConfig = {}): Promise<TResponse> {\n const normalizedMethod = method.toUpperCase();\n const mutation = isMutation(normalizedMethod);\n const effectiveIdempotencyKey =\n config.idempotencyKey ?? (mutation ? createIdempotencyKey() : undefined);\n const url = this.createUrl(path, config.query);\n const headers = new Headers({\n authorization: `Bearer ${this.apiKey}`,\n accept: 'application/json',\n 'user-agent': `mupag-sdk/${SDK_VERSION}`\n });\n\n let body: string | undefined;\n if (config.body !== undefined) {\n headers.set('content-type', 'application/json');\n body = JSON.stringify(config.body);\n if (new TextEncoder().encode(body).byteLength > MAX_REQUEST_BYTES) {\n throw new MuPagError({\n message: 'O corpo da requisicao excede o limite seguro do SDK.',\n code: 'request_too_large',\n suggestion: 'Reduza metadata e itens antes de enviar a requisicao.'\n });\n }\n }\n\n if (effectiveIdempotencyKey !== undefined) {\n validateIdempotencyKey(effectiveIdempotencyKey, config.idempotencyKey !== undefined);\n headers.set('idempotency-key', effectiveIdempotencyKey);\n }\n\n const idempotent =\n normalizedMethod === 'GET' ||\n normalizedMethod === 'DELETE' ||\n effectiveIdempotencyKey !== undefined;\n let attempt = 0;\n let ambiguousCause: unknown;\n let lastError: unknown;\n\n while (true) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n const init: RequestInit = {\n method: normalizedMethod,\n headers,\n signal: controller.signal\n };\n if (body !== undefined) {\n init.body = body;\n }\n\n try {\n const response = await this.fetcher(url, init);\n const parsed = await parseJson(response, this.maxResponseBytes);\n\n if (response.ok) {\n const responseValidator =\n ambiguousCause !== undefined && config.validateResponseAfterAmbiguous !== undefined\n ? config.validateResponseAfterAmbiguous\n : config.validateResponse;\n if ((mutation || config.validateResponse !== undefined) &&\n !validSuccessResponse(parsed, responseValidator)) {\n throw invalidResponse(\n response,\n 'invalid_success_response',\n mutation\n ? 'A API retornou sucesso sem uma confirmacao valida da mutacao.'\n : 'A API retornou sucesso com um contrato de resposta invalido.'\n );\n }\n return parsed as TResponse;\n }\n\n throw createApiError(response.status, parsed, response.headers);\n } catch (error) {\n lastError = error;\n if (mutation && isAmbiguousMutationError(error) && ambiguousCause === undefined) {\n ambiguousCause = error;\n }\n if (mutation && isImmediateOutcomeUnknown(error)) {\n throw new OutcomeUnknownError(effectiveIdempotencyKey!, error);\n }\n\n const retryable = shouldRetry(error, idempotent);\n if (!retryable || attempt >= this.retry.maxRetries) {\n if (mutation && (ambiguousCause !== undefined || isIdempotencyInProgress(error))) {\n throw new OutcomeUnknownError(effectiveIdempotencyKey!, ambiguousCause ?? error);\n }\n throw error;\n }\n } finally {\n clearTimeout(timeout);\n }\n\n await delay(retryDelayMs(attempt, this.retry, lastError));\n attempt += 1;\n }\n }\n\n private createUrl(path: string, query: Record<string, string | number | boolean | undefined> = {}) {\n const url = new URL(`${this.baseUrl}${path}`);\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n return url;\n }\n}\n\nexport function createIdempotencyKey() {\n const cryptoApi = globalThis.crypto;\n if (typeof cryptoApi?.randomUUID === 'function') {\n return `sdk_${cryptoApi.randomUUID()}`;\n }\n if (typeof cryptoApi?.getRandomValues === 'function') {\n const randomBytes = new Uint8Array(16);\n cryptoApi.getRandomValues(randomBytes);\n return `sdk_${Array.from(randomBytes, (value) => value.toString(16).padStart(2, '0')).join('')}`;\n }\n throw new MuPagError({\n message: 'O runtime nao oferece um gerador criptografico para a Idempotency-Key.',\n code: 'secure_random_unavailable',\n suggestion: 'Use um runtime com Web Crypto habilitado ou informe uma Idempotency-Key segura.'\n });\n}\n\nfunction validateIdempotencyKey(value: string, rejectPAN: boolean): void {\n if (\n value.length < 1 ||\n value.length > 128 ||\n !/^[\\x21-\\x7e]+$/.test(value) ||\n (rejectPAN && containsPANLikeSequence(value))\n ) {\n throw new MuPagError({\n message: 'Idempotency-Key invalida.',\n code: 'invalid_idempotency_key',\n suggestion: 'Envie de 1 a 128 caracteres ASCII visiveis, sem espacos.'\n });\n }\n}\n\nasync function parseJson(response: Response, maxBytes: number): Promise<JsonValue | undefined> {\n const text = await readBoundedResponseText(response, maxBytes);\n if (!text.trim()) {\n return undefined;\n }\n\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n throw new APIError({\n message: 'A API retornou um corpo que nao e JSON.',\n status: response.status,\n code: 'invalid_json_response',\n suggestion: 'Tente novamente e informe o request_id ao suporte se o problema persistir.'\n });\n }\n}\n\nasync function readBoundedResponseText(response: Response, maxBytes: number): Promise<string> {\n const contentLength = response.headers.get('content-length');\n if (contentLength !== null) {\n if (!/^\\d+$/.test(contentLength) || !Number.isSafeInteger(Number(contentLength))) {\n throw invalidResponse(response, 'invalid_content_length', 'A API retornou Content-Length invalido.');\n }\n if (Number(contentLength) > maxBytes) {\n throw invalidResponse(response, 'response_too_large', 'A resposta da API excedeu o limite configurado.');\n }\n }\n if (!response.body) return '';\n\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (!value) continue;\n total += value.byteLength;\n if (total > maxBytes) {\n await reader.cancel('response limit exceeded');\n throw invalidResponse(response, 'response_too_large', 'A resposta da API excedeu o limite configurado.');\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const output = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n output.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return new TextDecoder().decode(output);\n}\n\nfunction invalidResponse(response: Response, code: string, message: string): APIError {\n return new APIError({\n message,\n status: response.status,\n code,\n suggestion: 'Tente novamente e informe o request_id ao suporte se o problema persistir.'\n });\n}\n\nfunction shouldRetry(error: unknown, idempotent: boolean) {\n if (!idempotent) return false;\n if (!(error instanceof APIError)) return true;\n return (\n error.status === 408 ||\n error.status === 425 ||\n error.status === 429 ||\n (error.status === 409 && error.code === 'idempotency_in_progress') ||\n (error.status !== undefined && error.status >= 500)\n );\n}\n\nfunction isMutation(method: string): boolean {\n return method === 'POST' || method === 'PUT' || method === 'PATCH' || method === 'DELETE';\n}\n\nfunction isAmbiguousMutationError(error: unknown): boolean {\n if (!(error instanceof APIError)) return true;\n return (\n error.status === 408 ||\n error.status === 425 ||\n (error.status !== undefined && error.status >= 500) ||\n (error.status !== undefined && error.status >= 200 && error.status < 400) ||\n isIdempotencyInProgress(error) ||\n isImmediateOutcomeUnknown(error)\n );\n}\n\nfunction isImmediateOutcomeUnknown(error: unknown): boolean {\n if (!(error instanceof APIError) || error.status !== 409) return false;\n if (error.code === 'idempotency_in_progress') return false;\n return !DEFINITIVE_CONFLICT_CODES.has(error.code ?? '');\n}\n\nfunction isIdempotencyInProgress(error: unknown): boolean {\n return (\n error instanceof APIError &&\n error.status === 409 &&\n error.code === 'idempotency_in_progress'\n );\n}\n\nfunction validSuccessResponse(\n value: JsonValue | undefined,\n validator: ((value: JsonValue | undefined) => boolean) | undefined\n): boolean {\n if (validator !== undefined) return validator(value);\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction retryDelayMs(attempt: number, retry: RetryConfig, error: unknown): number {\n if (error instanceof RateLimitError && error.retryAfter !== undefined) {\n return Math.min(Math.max(error.retryAfter, 0) * 1_000, 30_000);\n }\n return backoff(attempt, retry);\n}\n\nfunction backoff(attempt: number, retry: RetryConfig) {\n return Math.min(retry.initialDelayMs * 2 ** attempt, retry.maxDelayMs);\n}\n\nfunction delay(ms: number) {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction validateBaseUrl(value: string, environment: Environment): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new MuPagError({ message: 'baseUrl invalida.', code: 'invalid_base_url' });\n }\n const canonicalOrigin = new URL(BASE_URL_BY_ENV[environment]).origin;\n const loopback = environment === 'test' && ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname);\n const allowedOrigin = url.origin === canonicalOrigin || loopback;\n const allowedProtocol = url.protocol === 'https:' || (loopback && url.protocol === 'http:');\n if (\n !allowedOrigin ||\n !allowedProtocol ||\n url.username ||\n url.password ||\n (url.pathname !== '' && url.pathname !== '/') ||\n url.search ||\n url.hash\n ) {\n throw new MuPagError({\n message: 'baseUrl nao e uma origem permitida para o ambiente selecionado.',\n code: 'invalid_base_url'\n });\n }\n return url.origin;\n}\n\nfunction validateClientBounds(timeoutMs: number, maxResponseBytes: number, retry: RetryConfig): void {\n if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 120_000) {\n throw new MuPagError({ message: 'timeoutMs invalido.', code: 'invalid_timeout' });\n }\n if (!Number.isSafeInteger(maxResponseBytes) || maxResponseBytes < 1 || maxResponseBytes > MAX_CONFIGURED_RESPONSE_BYTES) {\n throw new MuPagError({ message: 'maxResponseBytes invalido.', code: 'invalid_response_limit' });\n }\n if (!Number.isSafeInteger(retry.maxRetries) || retry.maxRetries < 0 || retry.maxRetries > 5\n || !Number.isSafeInteger(retry.initialDelayMs) || retry.initialDelayMs < 0\n || !Number.isSafeInteger(retry.maxDelayMs) || retry.maxDelayMs < retry.initialDelayMs || retry.maxDelayMs > 30_000) {\n throw new MuPagError({ message: 'Configuracao de retry invalida.', code: 'invalid_retry_config' });\n }\n}\n","import { HttpClient } from './http.js';\nimport { containsPANLikeSequence } from './pan.js';\nimport type {\n CancelChargeOptions,\n CancelSubscriptionParams,\n Charge,\n ChargeCancellation,\n CheckoutSession,\n CreateChargeParams,\n CreateCheckoutSessionParams,\n CreateRefundParams,\n CreateSubscriptionParams,\n Customer,\n ListRefundsParams,\n ListChargesParams,\n Page,\n Refund,\n RefundList,\n RequestOptions,\n Subscription,\n UpdateCustomerParams\n} from './types.js';\n\nconst MAX_CHARGE_AMOUNT_CENTS = 9_000_000_000_000_000;\nconst BASE64URL_CURSOR_PATTERN = /^[A-Za-z0-9_-]+$/;\n\nexport class CheckoutSessionsResource {\n /** @internal */\n constructor(private readonly http: HttpClient) {}\n\n /** Cria uma sessao de checkout hospedada usando o contrato publico real. */\n create(params: CreateCheckoutSessionParams, options: RequestOptions = {}) {\n const body = validateCheckoutSessionParams(canonicalRequestSnapshot(params, 'checkout session'));\n const requestOptions = canonicalRequestSnapshot(options, 'request options');\n return this.http.request<CheckoutSession>('POST', '/v1/checkout-sessions', {\n body,\n idempotencyKey: requestOptions.idempotencyKey,\n validateResponse: isCheckoutSessionResponse\n });\n }\n}\n\nexport class ChargesResource {\n /** @internal */\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Cria uma cobranca na API publica e garante idempotencia por padrao.\n *\n * POST financeiro precisa ser seguro contra retry e clique duplo. Por isso o SDK\n * gera `Idempotency-Key` automaticamente quando o integrador nao informa uma.\n */\n create(params: CreateChargeParams, options: RequestOptions = {}) {\n const body = validateChargeParams(canonicalRequestSnapshot(params, 'charge'));\n const requestOptions = canonicalRequestSnapshot(options, 'request options');\n return this.http.request<Charge>('POST', '/v1/charges', {\n body,\n idempotencyKey: requestOptions.idempotencyKey,\n validateResponse: (value) => isChargeResponse(value, body),\n validateResponseAfterAmbiguous: (value) => isChargeResponse(value, body, false)\n });\n }\n\n /**\n * Cancela uma charge pendente usando uma chave estavel controlada pelo integrador.\n *\n * A chave e obrigatoria porque um retorno `cancellation_pending` precisa ser\n * reconciliado com exatamente a mesma intencao, inclusive entre processos.\n */\n cancel(id: string, options: CancelChargeOptions) {\n validateResourceId(id, 'charge id');\n const request = canonicalRequestSnapshot(options, 'charge cancellation options');\n validateCancelChargeOptions(request);\n return this.http.request<ChargeCancellation>(\n 'POST',\n `/v1/charges/${encodeURIComponent(id)}/cancel`,\n {\n body: request.reason === undefined ? {} : { reason: request.reason },\n idempotencyKey: request.idempotencyKey,\n validateResponse: (value) => isChargeCancellationResponse(value, id)\n }\n );\n }\n\n /**\n * Lista cobrancas recentes usando filtros simples da API publica.\n *\n * GET e naturalmente seguro para retry e nao recebe chave de idempotencia.\n */\n list(params: ListChargesParams = {}) {\n const query = canonicalRequestSnapshot(params, 'charge list');\n validateChargeListParams(query);\n return this.http.request<Page<Charge>>('GET', '/v1/charges', {\n query,\n validateResponse: (value) => isChargeListResponse(value, query)\n });\n }\n}\n\nexport class SubscriptionsResource {\n /** @internal */\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Cria assinatura recorrente via endpoint publico com idempotencia por padrao.\n */\n create(params: CreateSubscriptionParams, options: RequestOptions = {}) {\n const body = validateSubscriptionParams(canonicalRequestSnapshot(params, 'subscription'));\n const requestOptions = canonicalRequestSnapshot(options, 'request options');\n validateMutationOptions(requestOptions, 80);\n return this.http.request<Subscription>('POST', '/v1/subscriptions', {\n body,\n idempotencyKey: requestOptions.idempotencyKey,\n validateResponse: (value) => isSubscriptionCreateResponse(value, body),\n validateResponseAfterAmbiguous: (value) =>\n isSubscriptionCreateResponseAfterAmbiguous(value, body)\n });\n }\n\n /**\n * Cancela assinatura via API publica mantendo retry seguro.\n *\n * Cancelamento e uma mutacao idempotente do ponto de vista do lojista: repetir a\n * mesma intencao nao deve criar efeitos financeiros duplicados.\n */\n cancel(id: string, params: CancelSubscriptionParams, options: RequestOptions = {}) {\n validateResourceId(id, 'subscription id');\n const body = validateCancelSubscriptionParams(\n canonicalRequestSnapshot(params, 'subscription cancellation')\n );\n const requestOptions = canonicalRequestSnapshot(options, 'request options');\n validateMutationOptions(requestOptions, 80);\n return this.http.request<Subscription>('POST', `/v1/subscriptions/${encodeURIComponent(id)}/cancel`, {\n body,\n idempotencyKey: requestOptions.idempotencyKey,\n validateResponse: (value) => isSubscriptionCancellationResponse(value, id, body)\n });\n }\n}\n\nexport class CustomersResource {\n /** @internal */\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Atualiza somente campos publicos permitidos do customer autenticado no merchant.\n */\n update(id: string, params: UpdateCustomerParams, options: RequestOptions = {}) {\n validateResourceId(id, 'customer id');\n rejectPANLikeOptionalText(id, 'customer id');\n const body = canonicalRequestSnapshot(params, 'customer update');\n const requestOptions = canonicalRequestSnapshot(options, 'request options');\n validateCustomerParams(body);\n return this.http.request<Customer>('PATCH', `/v1/customers/${encodeURIComponent(id)}`, {\n body,\n idempotencyKey: requestOptions.idempotencyKey,\n validateResponse: (value) => isCustomerResponse(value, id)\n });\n }\n}\n\nexport class RefundsResource {\n /** @internal */\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Solicita estorno usando endpoint publico e idempotency key automatica.\n *\n * Estorno pode ser acionado por painel, automacao ou webhook do lojista. O SDK\n * evita duplicidade mantendo uma chave estavel durante retry.\n */\n create(chargeId: string, params: CreateRefundParams, options: RequestOptions = {}) {\n validateResourceId(chargeId, 'charge id');\n const normalizedParams = normalizeRefundParams(canonicalRequestSnapshot(params, 'refund'));\n const requestOptions = canonicalRequestSnapshot(options, 'request options');\n return this.http.request<Refund>('POST', `/v1/charges/${encodeURIComponent(chargeId)}/refunds`, {\n body: normalizedParams,\n idempotencyKey: requestOptions.idempotencyKey,\n validateResponse: (value) => isRefundResponse(value, chargeId, normalizedParams),\n validateResponseAfterAmbiguous: (value) =>\n normalizedParams.amount_cents !== undefined && isRefundResponse(value, chargeId, normalizedParams)\n });\n }\n\n /** Consulta um estorno no escopo da API key autenticada. */\n get(refundId: string) {\n validateResourceId(refundId, 'refund id');\n return this.http.request<Refund>('GET', `/v1/refunds/${encodeURIComponent(refundId)}`, {\n validateResponse: (value) => isRefundReadResponse(value, refundId)\n });\n }\n\n /** Lista os estornos de uma cobrança no escopo da API key autenticada. */\n listByCharge(chargeId: string, params: ListRefundsParams = {}) {\n validateResourceId(chargeId, 'charge id');\n const query = canonicalRequestSnapshot(params, 'refund list');\n validateRefundListParams(query);\n return this.http.request<RefundList>('GET', `/v1/charges/${encodeURIComponent(chargeId)}/refunds`, {\n query,\n validateResponse: (value) => isRefundListResponse(value, query, chargeId)\n });\n }\n}\n\nfunction normalizeRefundParams(params: CreateRefundParams): CreateRefundParams {\n const amount = (params as { amount_cents?: unknown }).amount_cents;\n const full = (params as { full?: unknown }).full;\n const reason = (params as { reason?: unknown }).reason;\n const hasAmount = amount !== undefined;\n const isFull = full === true;\n if (hasAmount === isFull) {\n throw new TypeError('Refund exige exatamente amount_cents ou full=true.');\n }\n if (hasAmount && (!Number.isSafeInteger(amount) || (amount as number) <= 0)) {\n throw new TypeError('Refund amount_cents precisa ser um inteiro seguro positivo.');\n }\n if (reason === undefined) return params;\n if (typeof reason !== 'string') throw new TypeError('Refund reason invalido.');\n const normalizedReason = trimBackendWhitespace(reason);\n if (normalizedReason.length < 1 || normalizedReason.length > 500 || /[\\x00-\\x1f\\x7f]/.test(normalizedReason)) {\n throw new TypeError('Refund reason invalido.');\n }\n rejectPANLikeOptionalText(normalizedReason, 'reason');\n return { ...params, reason: normalizedReason };\n}\n\nfunction trimBackendWhitespace(value: string): string {\n let start = 0;\n let end = value.length;\n while (start < end && value.charCodeAt(start) <= 0x20) start += 1;\n while (end > start && value.charCodeAt(end - 1) <= 0x20) end -= 1;\n return value.slice(start, end);\n}\n\nfunction isCheckoutSessionResponse(value: unknown): boolean {\n return (\n isObject(value) &&\n nonEmptyString(value.id) &&\n nonEmptyString(value.url) &&\n absoluteUrl(value.url) &&\n nonEmptyString(value.expires_at) &&\n validInstant(value.expires_at)\n );\n}\n\nconst CHARGE_STATUSES = new Set([\n 'created',\n 'pending',\n 'authorized',\n 'paid',\n 'partially_refunded',\n 'refunded',\n 'failed',\n 'expired',\n 'cancelled',\n 'disputed',\n 'chargeback',\n 'under_review'\n]);\n\nconst LIST_CHARGE_STATUSES = new Set([\n 'created',\n 'pending',\n 'authorized',\n 'paid',\n 'partially_refunded',\n 'refunded',\n 'failed',\n 'expired',\n 'cancelled',\n 'disputed',\n 'chargeback',\n 'under_review'\n]);\n\nconst REFUND_STATUSES = new Set([\n 'requested',\n 'processing',\n 'completed',\n 'failed',\n 'cancelled',\n 'unknown'\n]);\n\nconst SCHEDULED_SUBSCRIPTION_STATUSES = new Set([\n 'trialing',\n 'active',\n 'past_due',\n 'unpaid',\n 'paused',\n 'incomplete'\n]);\n\nconst INITIAL_SUBSCRIPTION_STATUSES = new Set(['trialing', 'active', 'incomplete']);\n\nfunction isChargeResponse(\n value: unknown,\n expected: CreateChargeParams,\n allowCouponDiscount = true\n): boolean {\n if (!isObject(value)) return false;\n const couponCodePresent = value.coupon_code !== undefined;\n const couponCodeEchoed = couponCodePresent && value.coupon_code !== null;\n const originalAmountEchoed = value.original_amount_cents !== undefined;\n const subtotalAmountEchoed = value.amount_subtotal_cents !== undefined;\n if (\n (couponCodePresent &&\n (value.coupon_code === null\n ? expected.coupon_code !== undefined\n : expected.coupon_code === undefined || value.coupon_code !== expected.coupon_code)) ||\n (originalAmountEchoed && value.original_amount_cents !== expected.amount_cents) ||\n (subtotalAmountEchoed && value.amount_subtotal_cents !== expected.amount_cents)\n ) {\n return false;\n }\n const correlatedCouponEvidence = couponCodeEchoed || originalAmountEchoed || subtotalAmountEchoed;\n return (\n validIdentifier(value.charge_id) &&\n Number.isSafeInteger(value.amount_cents) &&\n (value.amount_cents as number) > 0 &&\n (value.amount_cents === expected.amount_cents ||\n (allowCouponDiscount &&\n expected.coupon_code !== undefined &&\n (value.amount_cents as number) <= expected.amount_cents) ||\n (!allowCouponDiscount &&\n expected.coupon_code !== undefined &&\n correlatedCouponEvidence &&\n (value.amount_cents as number) <= expected.amount_cents)) &&\n typeof value.status === 'string' &&\n CHARGE_STATUSES.has(value.status) &&\n validChargeOptionalFields(value) &&\n matchesOptionalEcho(value.payment_method, expected.payment_method) &&\n matchesCustomerIdentityEcho(value, expected.customer.id) &&\n matchesOptionalEcho(value.external_reference, expected.external_reference)\n );\n}\n\nfunction isChargeCancellationResponse(value: unknown, expectedChargeId: string): boolean {\n if (\n !isObject(value) ||\n value.charge_id !== expectedChargeId ||\n value.reason !== 'payment_attempt_cancelled'\n ) {\n return false;\n }\n if (value.status === 'cancellation_pending') {\n return value.cancelled_at === null;\n }\n return (\n value.status === 'cancelled' &&\n nonEmptyString(value.cancelled_at) &&\n validInstant(value.cancelled_at)\n );\n}\n\nfunction isChargeListResponse(value: unknown, expected: ListChargesParams): boolean {\n if (\n !isObject(value) ||\n !Array.isArray(value.data) ||\n value.data.length > (expected.limit ?? 25) ||\n !validNextCursor(value.next_cursor, expected.cursor)\n ) {\n return false;\n }\n return value.data.every((item) => isChargeListItem(item, expected));\n}\n\nfunction isChargeListItem(value: unknown, expected: ListChargesParams): boolean {\n if (\n !isObject(value) ||\n !validIdentifier(value.charge_id) ||\n !Number.isSafeInteger(value.amount_cents) ||\n (value.amount_cents as number) < 1 ||\n typeof value.status !== 'string' ||\n !LIST_CHARGE_STATUSES.has(value.status) ||\n typeof value.created_at !== 'string' ||\n (expected.status !== undefined && value.status !== expected.status) ||\n (expected.payment_method !== undefined &&\n value.payment_method !== undefined &&\n value.payment_method !== expected.payment_method) ||\n !matchesCustomerIdentityEcho(value, expected.customer_id)\n ) {\n return false;\n }\n if (!validChargeOptionalFields(value)) return false;\n const createdAt = parseInstant(value.created_at);\n if (createdAt === undefined) return false;\n const createdAtFrom = expected.created_at_from === undefined\n ? undefined\n : parseInstant(expected.created_at_from);\n const createdAtTo = expected.created_at_to === undefined\n ? undefined\n : parseInstant(expected.created_at_to);\n return (\n (createdAtFrom === undefined || createdAt >= createdAtFrom) &&\n (createdAtTo === undefined || createdAt < createdAtTo)\n );\n}\n\nfunction isSubscriptionResponse(\n value: unknown,\n expectedId?: string\n): value is Record<string, unknown> {\n return (\n isObject(value) &&\n nonEmptyString(value.id) &&\n (expectedId === undefined || value.id === expectedId) &&\n nonEmptyString(value.status)\n );\n}\n\nfunction isSubscriptionCreateResponse(\n value: unknown,\n expected: CreateSubscriptionParams\n): boolean {\n return (\n isSubscriptionResponse(value) &&\n INITIAL_SUBSCRIPTION_STATUSES.has(value.status as string) &&\n value.customer_id === expected.customer_id &&\n value.plan_id === expected.plan_id &&\n value.payment_method === expected.payment_method &&\n matchesOptionalEcho(value.card_token_id, expected.card_token_id) &&\n matchesOptionalEcho(value.external_reference, expected.external_reference) &&\n matchesNullableOptionalEcho(value, 'coupon_id', expected.coupon_id) &&\n value.cancel_at_period_end === false\n );\n}\n\nfunction isSubscriptionCreateResponseAfterAmbiguous(\n value: unknown,\n expected: CreateSubscriptionParams\n): boolean {\n return (\n isSubscriptionCreateResponse(value, expected) &&\n (expected.coupon_id === undefined || (isObject(value) && value.coupon_id === expected.coupon_id))\n );\n}\n\nfunction isSubscriptionCancellationResponse(\n value: unknown,\n expectedId: string,\n expected: CancelSubscriptionParams\n): boolean {\n if (!isSubscriptionResponse(value, expectedId)) return false;\n if (Object.prototype.hasOwnProperty.call(value, 'cancellation_reason')) {\n const actualReason = value.cancellation_reason;\n if (expected.reason === undefined ? actualReason !== null : actualReason !== expected.reason) {\n return false;\n }\n }\n return expected.mode === 'immediate'\n ? value.status === 'canceled' && value.cancel_at_period_end === false\n : value.cancel_at_period_end === true && SCHEDULED_SUBSCRIPTION_STATUSES.has(value.status as string);\n}\n\nfunction isCustomerResponse(value: unknown, expectedId: string): boolean {\n return isObject(value) && value.id === expectedId;\n}\n\nfunction isRefundResponse(\n value: unknown,\n expectedChargeId: string,\n expected: CreateRefundParams\n): boolean {\n return (\n isObject(value) &&\n validIdentifier(value.refund_id) &&\n value.charge_id === expectedChargeId &&\n Number.isSafeInteger(value.amount_cents) &&\n (value.amount_cents as number) > 0 &&\n (expected.amount_cents === undefined || value.amount_cents === expected.amount_cents) &&\n typeof value.status === 'string' &&\n REFUND_STATUSES.has(value.status) &&\n validNullableOptionalString(value.reason) &&\n matchesOptionalEcho(value.reason, expected.reason) &&\n typeof value.requested_at === 'string' &&\n validInstant(value.requested_at)\n );\n}\n\nfunction isRefundReadResponse(\n value: unknown,\n expectedRefundId: string | undefined,\n expectedChargeId?: string\n): boolean {\n return (\n isObject(value) &&\n validIdentifier(value.refund_id) &&\n (expectedRefundId === undefined || value.refund_id === expectedRefundId) &&\n validIdentifier(value.charge_id) &&\n (expectedChargeId === undefined || value.charge_id === expectedChargeId) &&\n Number.isSafeInteger(value.amount_cents) &&\n (value.amount_cents as number) > 0 &&\n typeof value.status === 'string' &&\n REFUND_STATUSES.has(value.status) &&\n typeof value.requested_at === 'string' &&\n validInstant(value.requested_at) &&\n validNullableOptionalString(value.psp_refund_id) &&\n validNullableOptionalString(value.reason) &&\n validNullableOptionalInstant(value.completed_at) &&\n validNullableOptionalString(value.failure_reason)\n );\n}\n\nfunction isRefundListResponse(\n value: unknown,\n expected: ListRefundsParams,\n expectedChargeId: string\n): boolean {\n return (\n isObject(value) &&\n Array.isArray(value.refunds) &&\n value.refunds.length <= (expected.limit ?? 100) &&\n validNextCursor(value.next_cursor, expected.cursor) &&\n value.refunds.every((refund) => isRefundReadResponse(refund, undefined, expectedChargeId))\n );\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\nfunction validIdentifier(value: unknown): value is string {\n return (\n typeof value === 'string' &&\n value.length <= 256 &&\n /^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(value)\n );\n}\n\nfunction matchesOptionalEcho(actual: unknown, expected: unknown): boolean {\n if (actual === undefined) return true;\n if (actual === null) return expected === undefined;\n return expected !== undefined && actual === expected;\n}\n\nfunction matchesNullableOptionalEcho(\n value: Record<string, unknown>,\n field: string,\n expected: string | undefined\n): boolean {\n if (!Object.prototype.hasOwnProperty.call(value, field)) return true;\n const actual = value[field];\n return expected === undefined ? actual === null : actual === expected;\n}\n\nfunction matchesCustomerIdentityEcho(\n value: Record<string, unknown>,\n expected: string | undefined\n): boolean {\n const identities: string[] = [];\n if (Object.prototype.hasOwnProperty.call(value, 'customer_id')) {\n if (!validIdentifier(value.customer_id)) return false;\n identities.push(value.customer_id);\n }\n if (Object.prototype.hasOwnProperty.call(value, 'customer')) {\n if (\n !isObject(value.customer) ||\n !Object.prototype.hasOwnProperty.call(value.customer, 'id') ||\n !validIdentifier(value.customer.id)\n ) {\n return false;\n }\n identities.push(value.customer.id);\n }\n return identities.every(\n (identity) => identity === identities[0] && (expected === undefined || identity === expected)\n );\n}\n\nfunction validNextCursor(value: unknown, previous: string | undefined): boolean {\n return (\n value === undefined || value === null || value === '' ||\n (typeof value === 'string' &&\n validCanonicalCursor(value, 256) &&\n value !== previous)\n );\n}\n\nfunction validCanonicalCursor(value: string, maximum: number): boolean {\n if (value.length < 1 || value.length > maximum || !BASE64URL_CURSOR_PATTERN.test(value)) {\n return false;\n }\n const standardBase64 = value.replace(/-/g, '+').replace(/_/g, '/');\n const paddedBase64 = standardBase64 + '='.repeat((4 - value.length % 4) % 4);\n try {\n const decoded = atob(paddedBase64);\n return btoa(decoded)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '') === value;\n } catch {\n return false;\n }\n}\n\nfunction validInstant(value: string): boolean {\n return parseInstant(value) !== undefined;\n}\n\nfunction parseInstant(value: string): number | undefined {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})[Tt](\\d{2}):(\\d{2}):(\\d{2})(?:\\.\\d+)?(?:[Zz]|[+-](\\d{2}):(\\d{2}))$/.exec(value);\n if (match === null) return undefined;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const hour = Number(match[4]);\n const minute = Number(match[5]);\n const second = Number(match[6]);\n const offsetHour = match[7] === undefined ? 0 : Number(match[7]);\n const offsetMinute = match[8] === undefined ? 0 : Number(match[8]);\n if (\n month < 1 || month > 12 ||\n day < 1 || day > daysInMonth(year, month) ||\n hour > 23 || minute > 59 || second > 60 ||\n offsetHour > 23 || offsetMinute > 59\n ) {\n return undefined;\n }\n\n const normalizedCase = value.replace('t', 'T').replace(/z$/, 'Z');\n const leapSecond = second === 60;\n const parsable = leapSecond\n ? `${normalizedCase.slice(0, 17)}59${normalizedCase.slice(19)}`\n : normalizedCase;\n const parsed = Date.parse(parsable);\n return Number.isNaN(parsed) ? undefined : parsed + (leapSecond ? 1_000 : 0);\n}\n\nfunction daysInMonth(year: number, month: number): number {\n if (month === 2) {\n const leapYear = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n return leapYear ? 29 : 28;\n }\n return [4, 6, 9, 11].includes(month) ? 30 : 31;\n}\n\nfunction validOptionalString(value: unknown): boolean {\n return value === undefined || typeof value === 'string';\n}\n\nfunction validNullableOptionalString(value: unknown): boolean {\n return value === undefined || value === null || typeof value === 'string';\n}\n\nfunction validOptionalIdentifier(value: unknown): boolean {\n return value === undefined || validIdentifier(value);\n}\n\nfunction validNullableOptionalIdentifier(value: unknown): boolean {\n return value === null || validOptionalIdentifier(value);\n}\n\nfunction validOptionalInstant(value: unknown): boolean {\n return value === undefined || (typeof value === 'string' && validInstant(value));\n}\n\nfunction validNullableOptionalInstant(value: unknown): boolean {\n return value === null || validOptionalInstant(value);\n}\n\nfunction validChargeOptionalFields(value: Record<string, unknown>): boolean {\n return (\n validNullableOptionalString(value.psp_charge_id) &&\n validNullableOptionalIdentifier(value.card_token_id) &&\n validNullableOptionalString(value.card_brand) &&\n validNullableOptionalString(value.card_last4) &&\n validNullableOptionalString(value.three_ds_acs_url) &&\n validNullableOptionalString(value.failure_classification) &&\n validNullableOptionalString(value.pix_qr_code_base64) &&\n validNullableOptionalString(value.pix_emv_code) &&\n validOptionalString(value.pix_qr_code) &&\n validOptionalString(value.pix_copy_paste) &&\n validNullableOptionalInstant(value.expires_at) &&\n validOptionalInstant(value.created_at)\n );\n}\n\nfunction absoluteUrl(value: string): boolean {\n try {\n return new URL(value).origin !== 'null';\n } catch {\n return false;\n }\n}\n\nfunction validateCancelChargeOptions(options: CancelChargeOptions): void {\n allowedObject(options, ['idempotencyKey', 'reason'], 'charge cancellation options');\n if (\n typeof options.idempotencyKey !== 'string' ||\n options.idempotencyKey.length < 1 ||\n options.idempotencyKey.length > 128 ||\n !/^[\\x21-\\x7e]+$/.test(options.idempotencyKey)\n ) {\n throw new TypeError('Idempotency-Key de cancelamento deve ser ASCII visivel com ate 128 caracteres.');\n }\n if (options.reason !== undefined && options.reason !== 'payment_attempt_cancelled') {\n throw new TypeError('reason invalido para cancelamento de charge.');\n }\n}\n\nfunction validateRefundListParams(params: ListRefundsParams): void {\n if (params.limit !== undefined && (!Number.isSafeInteger(params.limit) || params.limit < 1 || params.limit > 100)) {\n throw new TypeError('Refund list limit precisa estar entre 1 e 100.');\n }\n optionalCursor(params.cursor, 256, 'cursor');\n}\n\nfunction validateChargeParams(params: CreateChargeParams): CreateChargeParams {\n allowedObject(params, [\n 'amount_cents', 'payment_method', 'customer', 'installments', 'card_token', 'card_token_id',\n 'save_card', 'description', 'soft_descriptor', 'payer_ip', 'auth_only', 'product_max_installments',\n 'external_reference', 'expires_in_seconds', 'metadata', 'affiliate_code', 'coupon_code',\n 'split_rules', 'is_mit', 'initial_mit_reference_id'\n ], 'charge');\n safeInteger(params.amount_cents, 100, MAX_CHARGE_AMOUNT_CENTS, 'amount_cents');\n if (params.payment_method !== 'pix' && params.payment_method !== 'credit_card') {\n throw new TypeError('payment_method precisa ser pix ou credit_card.');\n }\n allowedObject(params.customer, ['id', 'name', 'email', 'tax_id'], 'customer');\n optionalIdentifier(params.customer.id, 'customer.id');\n rejectPANLikeOptionalText(params.customer.id, 'customer.id');\n requiredText(params.customer.name, 200, 'customer.name');\n rejectPANLikeOptionalText(params.customer.name, 'customer.name');\n requiredText(params.customer.email, 254, 'customer.email');\n rejectPANLikeOptionalText(params.customer.email, 'customer.email');\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(params.customer.email)) {\n throw new TypeError('customer.email invalido.');\n }\n requiredText(params.customer.tax_id, 14, 'customer.tax_id');\n if (!/^(?:[0-9]{11}|[0-9]{14})$/.test(params.customer.tax_id)) {\n throw new TypeError('customer.tax_id precisa conter CPF ou CNPJ sem formatacao.');\n }\n optionalInteger(params.installments, 1, 1, 'installments');\n optionalInteger(params.product_max_installments, 1, 1, 'product_max_installments');\n optionalInteger(params.expires_in_seconds, 60, Number.MAX_SAFE_INTEGER, 'expires_in_seconds');\n optionalText(params.card_token, 4_096, 'card_token');\n optionalIdentifier(params.card_token_id, 'card_token_id');\n if (params.card_token !== undefined && containsPANLikeSequence(params.card_token)) {\n throw new TypeError('card_token contem possivel numero de cartao.');\n }\n if (params.card_token_id !== undefined && containsPANLikeSequence(params.card_token_id)) {\n throw new TypeError('card_token_id contem possivel numero de cartao.');\n }\n optionalText(params.description, 500, 'description');\n rejectPANLikeOptionalText(params.description, 'description');\n if (params.soft_descriptor !== undefined &&\n (typeof params.soft_descriptor !== 'string' || params.soft_descriptor !== '')) {\n throw new TypeError('soft_descriptor nao e suportado pelo PSP Asaas.');\n }\n if (params.payer_ip !== undefined) {\n const payerIp = requiredText(params.payer_ip, 45, 'payer_ip');\n if (!isIpLiteral(payerIp)) throw new TypeError('payer_ip precisa ser um IP literal IPv4 ou IPv6.');\n }\n optionalText(params.external_reference, 256, 'external_reference');\n rejectPANLikeOptionalText(params.external_reference, 'external_reference');\n optionalText(params.affiliate_code, 128, 'affiliate_code');\n rejectPANLikeOptionalText(params.affiliate_code, 'affiliate_code');\n optionalText(params.coupon_code, 128, 'coupon_code');\n rejectPANLikeOptionalText(params.coupon_code, 'coupon_code');\n optionalBoolean(params.save_card, 'save_card');\n optionalBoolean(params.auth_only, 'auth_only');\n optionalBoolean(params.is_mit, 'is_mit');\n if (params.auth_only === true) throw new TypeError('auth_only ainda nao e suportado pela API.');\n const metadata = params.metadata === undefined\n ? undefined\n : canonicalJsonObject(params.metadata, 'metadata');\n\n const hasRawToken = params.card_token !== undefined;\n const hasStoredToken = params.card_token_id !== undefined;\n if (params.payment_method === 'credit_card' && params.payer_ip === undefined) {\n throw new TypeError('credit_card exige payer_ip literal do pagador.');\n }\n if (params.payment_method === 'credit_card' && hasRawToken === hasStoredToken) {\n throw new TypeError('credit_card exige exatamente card_token ou card_token_id.');\n }\n if (params.payment_method === 'pix' && (\n hasRawToken ||\n hasStoredToken ||\n params.save_card !== undefined ||\n params.installments !== undefined ||\n params.product_max_installments !== undefined\n )) {\n throw new TypeError('Campos de cartao nao podem ser enviados em uma cobranca PIX.');\n }\n if (params.is_mit === true) {\n if (!hasStoredToken || params.initial_mit_reference_id === undefined || hasRawToken) {\n throw new TypeError('MIT exige card_token_id e initial_mit_reference_id, sem card_token bruto.');\n }\n } else if (params.initial_mit_reference_id !== undefined) {\n throw new TypeError('initial_mit_reference_id exige is_mit=true.');\n }\n optionalIdentifier(params.initial_mit_reference_id, 'initial_mit_reference_id');\n rejectPANLikeOptionalText(params.initial_mit_reference_id, 'initial_mit_reference_id');\n validateSplitRules(params.split_rules, params.amount_cents);\n return metadata === undefined ? params : { ...params, metadata };\n}\n\nfunction validateSplitRules(rules: CreateChargeParams['split_rules'], amountCents: number): void {\n if (rules === undefined) return;\n if (!Array.isArray(rules) || rules.length > 50) throw new TypeError('split_rules aceita no maximo 50 itens.');\n const amount = BigInt(amountCents);\n let allocatedCents = 0n;\n let percentageBps = 0n;\n for (const rule of rules) {\n allowedObject(rule, ['recipient_id', 'value_type', 'value_bps', 'value_cents'], 'split rule');\n requiredIdentifier(rule.recipient_id, 'split_rules.recipient_id');\n rejectPANLikeOptionalText(rule.recipient_id, 'split_rules.recipient_id');\n if (rule.value_type === 'fixed_amount') {\n safeInteger(rule.value_cents, 1, amountCents, 'split_rules.value_cents');\n if (rule.value_bps !== undefined) throw new TypeError('fixed_amount nao aceita value_bps.');\n allocatedCents += BigInt(rule.value_cents);\n } else if (rule.value_type === 'percentage_of_gross') {\n safeInteger(rule.value_bps, 1, 10_000, 'split_rules.value_bps');\n if (rule.value_cents !== undefined) throw new TypeError('percentage_of_gross nao aceita value_cents.');\n percentageBps += BigInt(rule.value_bps);\n allocatedCents += amount * BigInt(rule.value_bps) / 10_000n;\n } else {\n throw new TypeError('split_rules.value_type invalido.');\n }\n }\n if (percentageBps > 10_000n || allocatedCents > amount) {\n throw new TypeError('split_rules agregado nao pode exceder o valor da cobranca.');\n }\n}\n\nfunction validateCheckoutSessionParams(params: CreateCheckoutSessionParams): CreateCheckoutSessionParams {\n allowedObject(params, [\n 'items', 'success_url', 'cancel_url', 'customer_id', 'customer_data', 'allowed_payment_methods',\n 'affiliate_code', 'coupon_id', 'utm_params', 'expires_in_minutes', 'metadata',\n 'collect_shipping_address', 'delivery_type', 'allow_coupons'\n ], 'checkout');\n if (!Array.isArray(params.items) || params.items.length < 1 || params.items.length > 100) {\n throw new TypeError('items precisa conter de 1 a 100 itens.');\n }\n let total = 0;\n for (const item of params.items) {\n allowedObject(item, ['name', 'quantity', 'unit_amount_cents'], 'checkout item');\n requiredText(item.name, 200, 'items.name');\n rejectPANLikeOptionalText(item.name, 'items.name');\n safeInteger(item.quantity, 1, 1_000_000, 'items.quantity');\n safeInteger(item.unit_amount_cents, 100, Number.MAX_SAFE_INTEGER, 'items.unit_amount_cents');\n const line = item.quantity * item.unit_amount_cents;\n total += line;\n if (!Number.isSafeInteger(line) || !Number.isSafeInteger(total)) throw new TypeError('Total do checkout excede o limite seguro.');\n }\n safeRedirectUrl(params.success_url, 'success_url');\n safeRedirectUrl(params.cancel_url, 'cancel_url');\n if (params.customer_id !== undefined && params.customer_data !== undefined) {\n throw new TypeError('customer_id e customer_data sao mutuamente exclusivos.');\n }\n optionalIdentifier(params.customer_id, 'customer_id');\n rejectPANLikeOptionalText(params.customer_id, 'customer_id');\n if (params.customer_data !== undefined) {\n allowedObject(params.customer_data, ['name', 'email', 'document', 'phone'], 'customer_data');\n optionalText(params.customer_data.name, 200, 'customer_data.name');\n rejectPANLikeOptionalText(params.customer_data.name, 'customer_data.name');\n optionalText(params.customer_data.email, 320, 'customer_data.email');\n rejectPANLikeOptionalText(params.customer_data.email, 'customer_data.email');\n optionalText(params.customer_data.document, 64, 'customer_data.document');\n optionalText(params.customer_data.phone, 32, 'customer_data.phone');\n }\n if (params.allowed_payment_methods !== undefined) {\n const methods = [...params.allowed_payment_methods];\n if (methods.length < 1 || methods.length > 2 || new Set(methods).size !== methods.length ||\n methods.some((method) => method !== 'pix' && method !== 'credit_card')) {\n throw new TypeError('allowed_payment_methods invalido.');\n }\n }\n optionalIdentifier(params.coupon_id, 'coupon_id');\n if (params.allow_coupons === false && params.coupon_id !== undefined) {\n throw new TypeError('coupon_id nao pode ser usado quando allow_coupons=false.');\n }\n optionalText(params.affiliate_code, 128, 'affiliate_code');\n rejectPANLikeOptionalText(params.affiliate_code, 'affiliate_code');\n optionalText(params.delivery_type, 64, 'delivery_type');\n rejectPANLikeOptionalText(params.delivery_type, 'delivery_type');\n optionalInteger(params.expires_in_minutes, 1, 1_440, 'expires_in_minutes');\n optionalBoolean(params.collect_shipping_address, 'collect_shipping_address');\n optionalBoolean(params.allow_coupons, 'allow_coupons');\n const metadata = params.metadata === undefined\n ? undefined\n : canonicalJsonObject(params.metadata, 'metadata');\n const utmParams = params.utm_params === undefined\n ? undefined\n : canonicalJsonObject(params.utm_params, 'utm_params');\n if (metadata === undefined && utmParams === undefined) return params;\n return { ...params, metadata, utm_params: utmParams };\n}\n\nfunction validateSubscriptionParams(params: CreateSubscriptionParams): CreateSubscriptionParams {\n allowedObject(params, [\n 'customer_id', 'plan_id', 'payment_method', 'trial_days', 'card_token_id', 'coupon_id',\n 'affiliate_code', 'metadata', 'external_reference'\n ], 'subscription');\n requiredIdentifier(params.customer_id, 'customer_id');\n rejectPANLikeOptionalText(params.customer_id, 'customer_id');\n requiredIdentifier(params.plan_id, 'plan_id');\n if (params.payment_method !== 'pix' && params.payment_method !== 'credit_card') {\n throw new TypeError('payment_method precisa ser pix ou credit_card.');\n }\n optionalIdentifier(params.card_token_id, 'card_token_id');\n if (params.card_token_id !== undefined && containsPANLikeSequence(params.card_token_id)) {\n throw new TypeError('card_token_id contem possivel numero de cartao.');\n }\n if (params.payment_method === 'credit_card' && params.card_token_id === undefined) {\n throw new TypeError('credit_card exige card_token_id.');\n }\n if (params.payment_method === 'pix' && params.card_token_id !== undefined) {\n throw new TypeError('card_token_id nao pode ser enviado para PIX.');\n }\n optionalIdentifier(params.coupon_id, 'coupon_id');\n optionalInteger(params.trial_days, 0, 365, 'trial_days');\n optionalText(params.affiliate_code, 128, 'affiliate_code');\n rejectPANLikeOptionalText(params.affiliate_code, 'affiliate_code');\n optionalText(params.external_reference, 256, 'external_reference');\n rejectPANLikeOptionalText(params.external_reference, 'external_reference');\n const metadata = params.metadata === undefined\n ? undefined\n : canonicalJsonObject(params.metadata, 'metadata');\n return metadata === undefined ? params : { ...params, metadata };\n}\n\nfunction validateCancelSubscriptionParams(params: CancelSubscriptionParams): CancelSubscriptionParams {\n allowedObject(params, ['mode', 'reason'], 'subscription cancellation');\n if (params.mode !== 'immediate' && params.mode !== 'end_of_period') throw new TypeError('mode invalido.');\n if (params.reason === undefined) return params;\n if (typeof params.reason !== 'string') throw new TypeError('reason invalido.');\n const normalizedReason = trimBackendWhitespace(params.reason);\n if (normalizedReason.length === 0) return { mode: params.mode };\n optionalText(normalizedReason, 500, 'reason');\n rejectPANLikeOptionalText(normalizedReason, 'reason');\n return { ...params, reason: normalizedReason };\n}\n\nfunction validateCustomerParams(params: UpdateCustomerParams): void {\n allowedObject(params, [\n 'name', 'email', 'tax_id', 'phone', 'birth_date', 'external_reference', 'marketing_consent'\n ], 'customer');\n requiredText(params.name, 200, 'name');\n rejectPANLikeOptionalText(params.name, 'name');\n requiredText(params.email, 320, 'email');\n rejectPANLikeOptionalText(params.email, 'email');\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(params.email)) throw new TypeError('email invalido.');\n optionalText(params.tax_id, 64, 'tax_id');\n optionalText(params.phone, 32, 'phone');\n optionalText(params.external_reference, 256, 'external_reference');\n rejectPANLikeOptionalText(params.external_reference, 'external_reference');\n optionalBoolean(params.marketing_consent, 'marketing_consent');\n if (params.birth_date !== undefined && !/^\\d{4}-\\d{2}-\\d{2}$/.test(params.birth_date)) {\n throw new TypeError('birth_date precisa usar YYYY-MM-DD.');\n }\n}\n\nfunction validateChargeListParams(params: ListChargesParams): void {\n allowedObject(params, [\n 'status', 'customer_id', 'payment_method', 'created_at_from', 'created_at_to', 'limit', 'cursor'\n ], 'charge list');\n if (params.status !== undefined && !LIST_CHARGE_STATUSES.has(params.status)) throw new TypeError('status invalido.');\n if (params.payment_method !== undefined && params.payment_method !== 'pix' && params.payment_method !== 'credit_card') {\n throw new TypeError('payment_method invalido.');\n }\n optionalIdentifier(params.customer_id, 'customer_id');\n rejectPANLikeOptionalText(params.customer_id, 'customer_id');\n optionalInteger(params.limit, 1, 100, 'limit');\n optionalCursor(params.cursor, 256, 'cursor');\n optionalInstant(params.created_at_from, 'created_at_from');\n optionalInstant(params.created_at_to, 'created_at_to');\n if (params.created_at_from !== undefined && params.created_at_to !== undefined &&\n parseInstant(params.created_at_from)! >= parseInstant(params.created_at_to)!) {\n throw new TypeError('created_at_from precisa ser anterior a created_at_to.');\n }\n}\n\nfunction validateMutationOptions(options: RequestOptions, maximum: number): void {\n if (options.idempotencyKey !== undefined && options.idempotencyKey.length > maximum) {\n throw new TypeError(`Idempotency-Key deve ter no maximo ${maximum} caracteres neste recurso.`);\n }\n}\n\nfunction allowedObject(value: unknown, keys: readonly string[], field: string): asserts value is Record<string, unknown> {\n if (value === null || typeof value !== 'object' || Array.isArray(value) || Object.getPrototypeOf(value) !== Object.prototype) {\n throw new TypeError(`${field} precisa ser um objeto simples.`);\n }\n const allowlist = new Set(keys);\n const unsupported = Object.keys(value).find((key) => !allowlist.has(key));\n if (unsupported !== undefined) throw new TypeError(`${field} contem campo nao suportado: ${unsupported}.`);\n}\n\nfunction validateResourceId(value: unknown, field: string): void {\n const identifier = requiredIdentifier(value, field);\n rejectPANLikeOptionalText(identifier, field);\n}\n\nfunction requiredIdentifier(value: unknown, field: string): string {\n const identifier = requiredText(value, 256, field);\n if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(identifier)) throw new TypeError(`${field} invalido.`);\n return identifier;\n}\n\nfunction optionalIdentifier(value: unknown, field: string): void {\n if (value !== undefined) requiredIdentifier(value, field);\n}\n\nfunction requiredText(value: unknown, maximum: number, field: string): string {\n if (typeof value !== 'string' || value.trim().length < 1 || value.length > maximum || /[\\x00-\\x1f\\x7f]/.test(value)) {\n throw new TypeError(`${field} invalido.`);\n }\n return value;\n}\n\nfunction optionalText(value: unknown, maximum: number, field: string): void {\n if (value !== undefined) requiredText(value, maximum, field);\n}\n\nfunction safeInteger(value: unknown, minimum: number, maximum: number, field: string): void {\n if (!Number.isSafeInteger(value) || (value as number) < minimum || (value as number) > maximum) {\n throw new TypeError(`${field} precisa ser inteiro entre ${minimum} e ${maximum}.`);\n }\n}\n\nfunction optionalInteger(value: unknown, minimum: number, maximum: number, field: string): void {\n if (value !== undefined) safeInteger(value, minimum, maximum, field);\n}\n\nfunction optionalBoolean(value: unknown, field: string): void {\n if (value !== undefined && typeof value !== 'boolean') throw new TypeError(`${field} precisa ser boolean.`);\n}\n\nfunction optionalCursor(value: unknown, maximum: number, field: string): void {\n if (value !== undefined &&\n (typeof value !== 'string' || !validCanonicalCursor(value, maximum))) {\n throw new TypeError(`${field} invalido.`);\n }\n}\n\nfunction optionalInstant(value: unknown, field: string): void {\n if (value !== undefined && (typeof value !== 'string' || !validInstant(value))) {\n throw new TypeError(`${field} precisa ser uma data ISO-8601.`);\n }\n}\n\nfunction isIpLiteral(value: string): boolean {\n return isIpv4Literal(value) || isIpv6Literal(value);\n}\n\nfunction isIpv4Literal(value: string): boolean {\n const octets = value.split('.');\n return octets.length === 4 && octets.every((octet) =>\n /^(?:0|[1-9][0-9]{0,2})$/.test(octet) && Number(octet) <= 255\n );\n}\n\nfunction isIpv6Literal(value: string): boolean {\n if (!value.includes(':') || !/^[0-9A-Fa-f:.]+$/.test(value)) return false;\n const compression = value.indexOf('::');\n if (compression !== -1 && value.indexOf('::', compression + 2) !== -1) return false;\n const sides = compression === -1 ? [value] : [value.slice(0, compression), value.slice(compression + 2)];\n const parts = sides.flatMap((side) => side === '' ? [] : side.split(':'));\n if (parts.some((part) => part.length === 0)) return false;\n\n let units = 0;\n for (const [index, part] of parts.entries()) {\n if (part.includes('.')) {\n if (index !== parts.length - 1 || !isIpv4Literal(part)) return false;\n units += 2;\n } else {\n if (!/^[0-9A-Fa-f]{1,4}$/.test(part)) return false;\n units += 1;\n }\n }\n return compression === -1 ? units === 8 : units < 8;\n}\n\nfunction safeRedirectUrl(value: unknown, field: string): void {\n if (typeof value !== 'string' || value.length > 2_048) throw new TypeError(`${field} invalida.`);\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new TypeError(`${field} precisa ser URL absoluta.`);\n }\n const loopback = ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname);\n if ((url.protocol !== 'https:' && !(loopback && url.protocol === 'http:')) || url.username || url.password) {\n throw new TypeError(`${field} precisa ser URL HTTPS segura.`);\n }\n}\n\nfunction validateJsonObject(value: unknown, field: string): void {\n allowedObject(value, Object.keys(value as object), field);\n const stack: Array<{ value: unknown; depth: number }> = [{ value, depth: 0 }];\n const seen = new WeakSet<object>();\n let nodes = 0;\n while (stack.length > 0) {\n const current = stack.pop();\n if (!current) break;\n nodes += 1;\n if (nodes > 10_000 || current.depth > 32) throw new TypeError(`${field} excede o limite de complexidade.`);\n const entry = current.value;\n if (entry === null || typeof entry === 'boolean') continue;\n if (typeof entry === 'string') {\n if (containsPANLikeSequence(entry)) throw new TypeError(`${field} contem possivel numero de cartao.`);\n continue;\n }\n if (typeof entry === 'number') {\n if (!Number.isFinite(entry)) throw new TypeError(`${field} contem numero invalido.`);\n if (containsPANLikeSequence(JSON.stringify(entry))) {\n throw new TypeError(`${field} contem possivel numero de cartao.`);\n }\n continue;\n }\n if (typeof entry !== 'object') throw new TypeError(`${field} contem valor nao-JSON.`);\n if (seen.has(entry)) throw new TypeError(`${field} contem ciclo.`);\n seen.add(entry);\n for (const [key, child] of Object.entries(entry)) {\n if (containsPANLikeSequence(key)) {\n throw new TypeError(`${field} contem possivel numero de cartao.`);\n }\n const normalized = key.normalize('NFKC').toLowerCase();\n if (/[^\\x00-\\x7f]/.test(normalized)) {\n throw new TypeError(`${field} contem nome de campo Unicode nao suportado.`);\n }\n const compact = normalized.replace(/[^a-z0-9]/g, '');\n const sensitiveBase = compact\n .replace(/[0-9]+$/, '')\n .replace(/(cvv|cvc|csc|cid|cav)[0-9]+/g, '$1');\n if (\n ['__proto__', 'prototype', 'constructor'].includes(normalized) ||\n ['pan', 'cardnumber'].includes(compact) ||\n ['cvv', 'cvc', 'cav'].some((token) =>\n ['', 'value', 'code', 'number'].some((descriptor) => sensitiveBase.endsWith(token + descriptor))\n ) ||\n ['csc', 'cid'].some((token) =>\n ['', 'value', 'code', 'number'].some(\n (descriptor) =>\n sensitiveBase === token + descriptor ||\n ['card', 'amex', 'americanexpress'].some((qualifier) =>\n sensitiveBase.endsWith(qualifier + token + descriptor)\n )\n )\n ) ||\n sensitiveBase.endsWith('cardidentificationnumber') ||\n sensitiveBase.endsWith('cardsecuritynumber') ||\n [\n 'securitycode',\n 'securityvalue',\n 'verificationcode',\n 'verificationnumber',\n 'verificationvalue'\n ].some((suffix) => sensitiveBase.endsWith(suffix))\n ) {\n throw new TypeError(`${field} contem campo sensivel proibido.`);\n }\n stack.push({ value: child, depth: current.depth + 1 });\n }\n }\n}\n\nfunction canonicalJsonObject<T>(value: T, field: string): T {\n validateJsonObject(value, field);\n return value;\n}\n\nfunction canonicalRequestSnapshot<T>(value: T, field: string): T {\n let encoded: string | undefined;\n try {\n encoded = JSON.stringify(value, (_key, child: unknown) => {\n if (typeof child === 'number' && !Number.isFinite(child)) {\n throw new TypeError(`${field} contem numero invalido.`);\n }\n if (['symbol', 'function', 'bigint'].includes(typeof child)) {\n throw new TypeError(`${field} contem valor nao-JSON.`);\n }\n return child;\n });\n } catch {\n throw new TypeError(`${field} contem valor nao-JSON.`);\n }\n if (encoded === undefined) throw new TypeError(`${field} invalido.`);\n\n let snapshot: unknown;\n try {\n snapshot = JSON.parse(encoded);\n } catch {\n throw new TypeError(`${field} contem valor nao-JSON.`);\n }\n if (!isObject(snapshot)) throw new TypeError(`${field} invalido.`);\n\n return snapshot as T;\n}\n\nfunction rejectPANLikeOptionalText(value: string | undefined, field: string): void {\n if (value !== undefined && containsPANLikeSequence(value)) {\n throw new TypeError(`${field} contem possivel numero de cartao.`);\n }\n}\n","import { WebhookSignatureError } from './errors.js';\nimport type { JsonValue, MuPagEvent } from './types.js';\n\nexport type WebhookOptions = {\n toleranceSeconds?: number;\n};\n\nconst DEFAULT_TOLERANCE_SECONDS = 300;\nconst MAX_WEBHOOK_BYTES = 1024 * 1024;\n\n/**\n * Valida assinatura HMAC-SHA256 de webhook e retorna evento tipado.\n *\n * A verificacao usa Web Crypto para funcionar tambem em Deno, Bun e edge\n * runtimes. O formato de assinatura e `t=<unix>,v1=<hex>`, sempre sobre\n * `timestamp.payload`, evitando replay com tolerancia curta.\n */\nexport async function constructWebhookEvent<TData extends JsonValue = JsonValue>(\n rawPayload: string | Uint8Array,\n signatureHeader: string,\n secret: string,\n options: WebhookOptions = {}\n): Promise<MuPagEvent<TData>> {\n const payload = typeof rawPayload === 'string' ? rawPayload : new TextDecoder().decode(rawPayload);\n const payloadBytes = typeof rawPayload === 'string' ? new TextEncoder().encode(rawPayload).byteLength : rawPayload.byteLength;\n if (payloadBytes > MAX_WEBHOOK_BYTES) {\n throw new WebhookSignatureError({\n message: 'Payload de webhook excede o limite seguro.',\n code: 'webhook_payload_too_large',\n suggestion: 'Rejeite o request com HTTP 413 antes de processar o evento.'\n });\n }\n const toleranceSeconds = options.toleranceSeconds ?? DEFAULT_TOLERANCE_SECONDS;\n if (secret.length < 1 || secret.length > 512 || secret.trim() !== secret) {\n throw new WebhookSignatureError({\n message: 'Webhook secret invalido.',\n code: 'webhook_secret_invalid',\n suggestion: 'Configure o webhook secret exato e nao use valor vazio ou com espacos externos.'\n });\n }\n if (\n !Number.isSafeInteger(toleranceSeconds)\n || toleranceSeconds < 1\n || toleranceSeconds > 24 * 60 * 60\n ) {\n throw new WebhookSignatureError({\n message: 'Tolerancia de webhook invalida.',\n code: 'webhook_tolerance_invalid',\n suggestion: 'Use uma tolerancia inteira entre 1 segundo e 24 horas.'\n });\n }\n const signature = parseSignatureHeader(signatureHeader);\n const ageSeconds = Math.abs(Math.floor(Date.now() / 1000) - signature.timestamp);\n\n if (ageSeconds > toleranceSeconds) {\n throw new WebhookSignatureError({\n message: 'Assinatura de webhook fora da janela de tolerancia.',\n code: 'webhook_timestamp_outside_tolerance',\n suggestion: 'Confira relogio do servidor e rejeite replays antigos.'\n });\n }\n\n const expected = await hmacSha256Hex(secret, `${signature.timestamp}.${payload}`);\n if (!constantTimeEqual(expected, signature.value)) {\n throw new WebhookSignatureError({\n message: 'Assinatura de webhook invalida.',\n code: 'webhook_signature_mismatch',\n suggestion: 'Use o webhook secret correto e o payload bruto, sem parse antes da validacao.'\n });\n }\n\n let event: MuPagEvent<TData>;\n try {\n event = JSON.parse(payload) as MuPagEvent<TData>;\n } catch {\n throw new WebhookSignatureError({\n message: 'Payload de webhook nao e JSON valido.',\n code: 'webhook_payload_invalid',\n suggestion: 'Use o payload bruto recebido no endpoint da MuPag.'\n });\n }\n if (typeof event.id !== 'string' || event.id.length === 0 || event.id.length > 256\n || typeof event.type !== 'string' || event.type.length === 0 || event.type.length > 128\n || event.data === null || typeof event.data !== 'object' || Array.isArray(event.data)) {\n throw new WebhookSignatureError({\n message: 'Payload de webhook valido, mas sem campos obrigatorios.',\n code: 'webhook_payload_invalid',\n suggestion: 'Verifique se voce esta usando o endpoint de webhook da MuPag.'\n });\n }\n\n return event;\n}\n\nexport class WebhooksResource {\n constructEvent = constructWebhookEvent;\n}\n\nfunction parseSignatureHeader(signatureHeader: string) {\n if (signatureHeader.length > 4096) throw malformedSignatureHeader();\n const parts = signatureHeader.split(',');\n if (parts.length > 16) throw malformedSignatureHeader();\n\n let timestampText: string | undefined;\n let value: string | undefined;\n for (const rawPart of parts) {\n const part = rawPart.trim();\n const separator = part.indexOf('=');\n if (separator <= 0) throw malformedSignatureHeader();\n const key = part.slice(0, separator);\n const candidate = part.slice(separator + 1);\n if (key === 't') {\n if (timestampText !== undefined) throw malformedSignatureHeader();\n timestampText = candidate;\n } else if (key === 'v1') {\n if (value !== undefined) throw malformedSignatureHeader();\n value = candidate;\n }\n }\n\n if (timestampText === undefined || !/^(?:0|[1-9]\\d*)$/.test(timestampText)) {\n throw malformedSignatureHeader();\n }\n const timestamp = Number(timestampText);\n if (!Number.isSafeInteger(timestamp) || timestamp <= 0 || value === undefined || !/^[a-f0-9]{64}$/i.test(value)) {\n throw malformedSignatureHeader();\n }\n\n return { timestamp, value };\n}\n\nfunction malformedSignatureHeader() {\n return new WebhookSignatureError({\n message: 'Header de assinatura de webhook malformado.',\n code: 'webhook_signature_malformed',\n suggestion: 'Envie o header no formato t=<unix>,v1=<assinatura_hex>.'\n });\n}\n\nasync function hmacSha256Hex(secret: string, value: string) {\n const key = await crypto.subtle.importKey(\n 'raw',\n new TextEncoder().encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const signature = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(value));\n return [...new Uint8Array(signature)]\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction constantTimeEqual(left: string, right: string) {\n const maxLength = Math.max(left.length, right.length);\n let diff = left.length ^ right.length;\n\n for (let index = 0; index < maxLength; index += 1) {\n diff |= (left.charCodeAt(index) || 0) ^ (right.charCodeAt(index) || 0);\n }\n\n return diff === 0;\n}\n","import { HttpClient } from './http.js';\nimport {\n ChargesResource,\n CheckoutSessionsResource,\n CustomersResource,\n RefundsResource,\n SubscriptionsResource\n} from './resources.js';\nimport { WebhooksResource } from './webhooks.js';\nimport type { MuPagConfig } from './types.js';\n\nexport * from './errors.js';\nexport * from './resources.js';\nexport * from './types.js';\nexport * from './webhooks.js';\n\nexport class MuPag {\n readonly charges: ChargesResource;\n readonly checkoutSessions: CheckoutSessionsResource;\n readonly customers: CustomersResource;\n readonly refunds: RefundsResource;\n readonly subscriptions: SubscriptionsResource;\n readonly webhooks: WebhooksResource;\n\n /**\n * Cria cliente ergonomico para a API publica da MuPag.\n *\n * A superficie segue `mupag.charges.create(...)` para ficar natural em apps\n * Node/TypeScript e em agentes de coding. O cliente escolhe base URL por ambiente,\n * injeta auth, aplica retries seguros e deixa cada recurso pequeno.\n */\n constructor(config: MuPagConfig) {\n const http = new HttpClient({\n env: config.env,\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n fetch: config.fetch,\n timeoutMs: config.timeoutMs,\n maxResponseBytes: config.maxResponseBytes,\n retry: config.retry\n });\n\n this.charges = new ChargesResource(http);\n this.checkoutSessions = new CheckoutSessionsResource(http);\n this.customers = new CustomersResource(http);\n this.refunds = new RefundsResource(http);\n this.subscriptions = new SubscriptionsResource(http);\n this.webhooks = new WebhooksResource();\n }\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { E as Environment, F as FetchLike, t as RetryConfig, o as JsonValue, i as CreateChargeParams, s as RequestOptions, b as Charge, C as CancelChargeOptions, c as ChargeCancellation, L as ListChargesParams, P as Page, j as CreateCheckoutSessionParams, f as CheckoutSession, U as UpdateCustomerParams, m as Customer, k as CreateRefundParams, R as Refund, p as ListRefundsParams, r as RefundList, l as CreateSubscriptionParams, S as Subscription, a as CancelSubscriptionParams, M as MuPagConfig } from './types-C1s3-E1E.cjs';
|
|
2
|
+
export { d as ChargeCustomer, e as ChargeSplitRule, g as CheckoutSessionCustomerData, h as CheckoutSessionItem, J as JsonObject, n as JsonPrimitive, q as MuPagEvent } from './types-C1s3-E1E.cjs';
|
|
3
|
+
import { WebhooksResource } from './webhooks.cjs';
|
|
4
|
+
export { WebhookOptions, constructWebhookEvent } from './webhooks.cjs';
|
|
5
|
+
export { APIError, AuthError, IdempotencyError, MuPagError, MuPagErrorOptions, OutcomeUnknownError, ProblemDetails, RateLimitError, ValidationError, WebhookSignatureError, createApiError } from './errors.cjs';
|
|
6
|
+
|
|
7
|
+
type HttpClientConfig = {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
env: Environment;
|
|
10
|
+
baseUrl?: string | undefined;
|
|
11
|
+
fetch?: FetchLike | undefined;
|
|
12
|
+
timeoutMs?: number | undefined;
|
|
13
|
+
maxResponseBytes?: number | undefined;
|
|
14
|
+
retry?: Partial<RetryConfig> | undefined;
|
|
15
|
+
};
|
|
16
|
+
type RequestConfig = {
|
|
17
|
+
query?: Record<string, string | number | boolean | undefined> | undefined;
|
|
18
|
+
body?: unknown;
|
|
19
|
+
idempotencyKey?: string | undefined;
|
|
20
|
+
validateResponse?: ((value: JsonValue | undefined) => boolean) | undefined;
|
|
21
|
+
validateResponseAfterAmbiguous?: ((value: JsonValue | undefined) => boolean) | undefined;
|
|
22
|
+
};
|
|
23
|
+
declare class HttpClient {
|
|
24
|
+
private readonly apiKey;
|
|
25
|
+
private readonly baseUrl;
|
|
26
|
+
private readonly fetcher;
|
|
27
|
+
private readonly timeoutMs;
|
|
28
|
+
private readonly maxResponseBytes;
|
|
29
|
+
private readonly retry;
|
|
30
|
+
/**
|
|
31
|
+
* Centraliza a parte HTTP do SDK para manter recursos (`charges`, `refunds`) finos.
|
|
32
|
+
*
|
|
33
|
+
* O SDK roda em Node 18+ e runtimes edge, entao dependemos apenas de `fetch`,
|
|
34
|
+
* `AbortController` e Web APIs padrao. A injecao de `fetch` deixa teste rapido e
|
|
35
|
+
* evita chamar API real durante desenvolvimento.
|
|
36
|
+
*/
|
|
37
|
+
constructor(config: HttpClientConfig);
|
|
38
|
+
request<TResponse>(method: string, path: string, config?: RequestConfig): Promise<TResponse>;
|
|
39
|
+
private createUrl;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
declare class CheckoutSessionsResource {
|
|
43
|
+
private readonly http;
|
|
44
|
+
/** @internal */
|
|
45
|
+
constructor(http: HttpClient);
|
|
46
|
+
/** Cria uma sessao de checkout hospedada usando o contrato publico real. */
|
|
47
|
+
create(params: CreateCheckoutSessionParams, options?: RequestOptions): Promise<CheckoutSession>;
|
|
48
|
+
}
|
|
49
|
+
declare class ChargesResource {
|
|
50
|
+
private readonly http;
|
|
51
|
+
/** @internal */
|
|
52
|
+
constructor(http: HttpClient);
|
|
53
|
+
/**
|
|
54
|
+
* Cria uma cobranca na API publica e garante idempotencia por padrao.
|
|
55
|
+
*
|
|
56
|
+
* POST financeiro precisa ser seguro contra retry e clique duplo. Por isso o SDK
|
|
57
|
+
* gera `Idempotency-Key` automaticamente quando o integrador nao informa uma.
|
|
58
|
+
*/
|
|
59
|
+
create(params: CreateChargeParams, options?: RequestOptions): Promise<Charge>;
|
|
60
|
+
/**
|
|
61
|
+
* Cancela uma charge pendente usando uma chave estavel controlada pelo integrador.
|
|
62
|
+
*
|
|
63
|
+
* A chave e obrigatoria porque um retorno `cancellation_pending` precisa ser
|
|
64
|
+
* reconciliado com exatamente a mesma intencao, inclusive entre processos.
|
|
65
|
+
*/
|
|
66
|
+
cancel(id: string, options: CancelChargeOptions): Promise<ChargeCancellation>;
|
|
67
|
+
/**
|
|
68
|
+
* Lista cobrancas recentes usando filtros simples da API publica.
|
|
69
|
+
*
|
|
70
|
+
* GET e naturalmente seguro para retry e nao recebe chave de idempotencia.
|
|
71
|
+
*/
|
|
72
|
+
list(params?: ListChargesParams): Promise<Page<Charge>>;
|
|
73
|
+
}
|
|
74
|
+
declare class SubscriptionsResource {
|
|
75
|
+
private readonly http;
|
|
76
|
+
/** @internal */
|
|
77
|
+
constructor(http: HttpClient);
|
|
78
|
+
/**
|
|
79
|
+
* Cria assinatura recorrente via endpoint publico com idempotencia por padrao.
|
|
80
|
+
*/
|
|
81
|
+
create(params: CreateSubscriptionParams, options?: RequestOptions): Promise<Subscription>;
|
|
82
|
+
/**
|
|
83
|
+
* Cancela assinatura via API publica mantendo retry seguro.
|
|
84
|
+
*
|
|
85
|
+
* Cancelamento e uma mutacao idempotente do ponto de vista do lojista: repetir a
|
|
86
|
+
* mesma intencao nao deve criar efeitos financeiros duplicados.
|
|
87
|
+
*/
|
|
88
|
+
cancel(id: string, params: CancelSubscriptionParams, options?: RequestOptions): Promise<Subscription>;
|
|
89
|
+
}
|
|
90
|
+
declare class CustomersResource {
|
|
91
|
+
private readonly http;
|
|
92
|
+
/** @internal */
|
|
93
|
+
constructor(http: HttpClient);
|
|
94
|
+
/**
|
|
95
|
+
* Atualiza somente campos publicos permitidos do customer autenticado no merchant.
|
|
96
|
+
*/
|
|
97
|
+
update(id: string, params: UpdateCustomerParams, options?: RequestOptions): Promise<Customer>;
|
|
98
|
+
}
|
|
99
|
+
declare class RefundsResource {
|
|
100
|
+
private readonly http;
|
|
101
|
+
/** @internal */
|
|
102
|
+
constructor(http: HttpClient);
|
|
103
|
+
/**
|
|
104
|
+
* Solicita estorno usando endpoint publico e idempotency key automatica.
|
|
105
|
+
*
|
|
106
|
+
* Estorno pode ser acionado por painel, automacao ou webhook do lojista. O SDK
|
|
107
|
+
* evita duplicidade mantendo uma chave estavel durante retry.
|
|
108
|
+
*/
|
|
109
|
+
create(chargeId: string, params: CreateRefundParams, options?: RequestOptions): Promise<Refund>;
|
|
110
|
+
/** Consulta um estorno no escopo da API key autenticada. */
|
|
111
|
+
get(refundId: string): Promise<Refund>;
|
|
112
|
+
/** Lista os estornos de uma cobrança no escopo da API key autenticada. */
|
|
113
|
+
listByCharge(chargeId: string, params?: ListRefundsParams): Promise<RefundList>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
declare class MuPag {
|
|
117
|
+
readonly charges: ChargesResource;
|
|
118
|
+
readonly checkoutSessions: CheckoutSessionsResource;
|
|
119
|
+
readonly customers: CustomersResource;
|
|
120
|
+
readonly refunds: RefundsResource;
|
|
121
|
+
readonly subscriptions: SubscriptionsResource;
|
|
122
|
+
readonly webhooks: WebhooksResource;
|
|
123
|
+
/**
|
|
124
|
+
* Cria cliente ergonomico para a API publica da MuPag.
|
|
125
|
+
*
|
|
126
|
+
* A superficie segue `mupag.charges.create(...)` para ficar natural em apps
|
|
127
|
+
* Node/TypeScript e em agentes de coding. O cliente escolhe base URL por ambiente,
|
|
128
|
+
* injeta auth, aplica retries seguros e deixa cada recurso pequeno.
|
|
129
|
+
*/
|
|
130
|
+
constructor(config: MuPagConfig);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { CancelChargeOptions, CancelSubscriptionParams, Charge, ChargeCancellation, ChargesResource, CheckoutSession, CheckoutSessionsResource, CreateChargeParams, CreateCheckoutSessionParams, CreateRefundParams, CreateSubscriptionParams, Customer, CustomersResource, Environment, FetchLike, JsonValue, ListChargesParams, ListRefundsParams, MuPag, MuPagConfig, Page, Refund, RefundList, RefundsResource, RequestOptions, RetryConfig, Subscription, SubscriptionsResource, UpdateCustomerParams, WebhooksResource };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { E as Environment, F as FetchLike, t as RetryConfig, o as JsonValue, i as CreateChargeParams, s as RequestOptions, b as Charge, C as CancelChargeOptions, c as ChargeCancellation, L as ListChargesParams, P as Page, j as CreateCheckoutSessionParams, f as CheckoutSession, U as UpdateCustomerParams, m as Customer, k as CreateRefundParams, R as Refund, p as ListRefundsParams, r as RefundList, l as CreateSubscriptionParams, S as Subscription, a as CancelSubscriptionParams, M as MuPagConfig } from './types-C1s3-E1E.js';
|
|
2
|
+
export { d as ChargeCustomer, e as ChargeSplitRule, g as CheckoutSessionCustomerData, h as CheckoutSessionItem, J as JsonObject, n as JsonPrimitive, q as MuPagEvent } from './types-C1s3-E1E.js';
|
|
3
|
+
import { WebhooksResource } from './webhooks.js';
|
|
4
|
+
export { WebhookOptions, constructWebhookEvent } from './webhooks.js';
|
|
5
|
+
export { APIError, AuthError, IdempotencyError, MuPagError, MuPagErrorOptions, OutcomeUnknownError, ProblemDetails, RateLimitError, ValidationError, WebhookSignatureError, createApiError } from './errors.js';
|
|
6
|
+
|
|
7
|
+
type HttpClientConfig = {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
env: Environment;
|
|
10
|
+
baseUrl?: string | undefined;
|
|
11
|
+
fetch?: FetchLike | undefined;
|
|
12
|
+
timeoutMs?: number | undefined;
|
|
13
|
+
maxResponseBytes?: number | undefined;
|
|
14
|
+
retry?: Partial<RetryConfig> | undefined;
|
|
15
|
+
};
|
|
16
|
+
type RequestConfig = {
|
|
17
|
+
query?: Record<string, string | number | boolean | undefined> | undefined;
|
|
18
|
+
body?: unknown;
|
|
19
|
+
idempotencyKey?: string | undefined;
|
|
20
|
+
validateResponse?: ((value: JsonValue | undefined) => boolean) | undefined;
|
|
21
|
+
validateResponseAfterAmbiguous?: ((value: JsonValue | undefined) => boolean) | undefined;
|
|
22
|
+
};
|
|
23
|
+
declare class HttpClient {
|
|
24
|
+
private readonly apiKey;
|
|
25
|
+
private readonly baseUrl;
|
|
26
|
+
private readonly fetcher;
|
|
27
|
+
private readonly timeoutMs;
|
|
28
|
+
private readonly maxResponseBytes;
|
|
29
|
+
private readonly retry;
|
|
30
|
+
/**
|
|
31
|
+
* Centraliza a parte HTTP do SDK para manter recursos (`charges`, `refunds`) finos.
|
|
32
|
+
*
|
|
33
|
+
* O SDK roda em Node 18+ e runtimes edge, entao dependemos apenas de `fetch`,
|
|
34
|
+
* `AbortController` e Web APIs padrao. A injecao de `fetch` deixa teste rapido e
|
|
35
|
+
* evita chamar API real durante desenvolvimento.
|
|
36
|
+
*/
|
|
37
|
+
constructor(config: HttpClientConfig);
|
|
38
|
+
request<TResponse>(method: string, path: string, config?: RequestConfig): Promise<TResponse>;
|
|
39
|
+
private createUrl;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
declare class CheckoutSessionsResource {
|
|
43
|
+
private readonly http;
|
|
44
|
+
/** @internal */
|
|
45
|
+
constructor(http: HttpClient);
|
|
46
|
+
/** Cria uma sessao de checkout hospedada usando o contrato publico real. */
|
|
47
|
+
create(params: CreateCheckoutSessionParams, options?: RequestOptions): Promise<CheckoutSession>;
|
|
48
|
+
}
|
|
49
|
+
declare class ChargesResource {
|
|
50
|
+
private readonly http;
|
|
51
|
+
/** @internal */
|
|
52
|
+
constructor(http: HttpClient);
|
|
53
|
+
/**
|
|
54
|
+
* Cria uma cobranca na API publica e garante idempotencia por padrao.
|
|
55
|
+
*
|
|
56
|
+
* POST financeiro precisa ser seguro contra retry e clique duplo. Por isso o SDK
|
|
57
|
+
* gera `Idempotency-Key` automaticamente quando o integrador nao informa uma.
|
|
58
|
+
*/
|
|
59
|
+
create(params: CreateChargeParams, options?: RequestOptions): Promise<Charge>;
|
|
60
|
+
/**
|
|
61
|
+
* Cancela uma charge pendente usando uma chave estavel controlada pelo integrador.
|
|
62
|
+
*
|
|
63
|
+
* A chave e obrigatoria porque um retorno `cancellation_pending` precisa ser
|
|
64
|
+
* reconciliado com exatamente a mesma intencao, inclusive entre processos.
|
|
65
|
+
*/
|
|
66
|
+
cancel(id: string, options: CancelChargeOptions): Promise<ChargeCancellation>;
|
|
67
|
+
/**
|
|
68
|
+
* Lista cobrancas recentes usando filtros simples da API publica.
|
|
69
|
+
*
|
|
70
|
+
* GET e naturalmente seguro para retry e nao recebe chave de idempotencia.
|
|
71
|
+
*/
|
|
72
|
+
list(params?: ListChargesParams): Promise<Page<Charge>>;
|
|
73
|
+
}
|
|
74
|
+
declare class SubscriptionsResource {
|
|
75
|
+
private readonly http;
|
|
76
|
+
/** @internal */
|
|
77
|
+
constructor(http: HttpClient);
|
|
78
|
+
/**
|
|
79
|
+
* Cria assinatura recorrente via endpoint publico com idempotencia por padrao.
|
|
80
|
+
*/
|
|
81
|
+
create(params: CreateSubscriptionParams, options?: RequestOptions): Promise<Subscription>;
|
|
82
|
+
/**
|
|
83
|
+
* Cancela assinatura via API publica mantendo retry seguro.
|
|
84
|
+
*
|
|
85
|
+
* Cancelamento e uma mutacao idempotente do ponto de vista do lojista: repetir a
|
|
86
|
+
* mesma intencao nao deve criar efeitos financeiros duplicados.
|
|
87
|
+
*/
|
|
88
|
+
cancel(id: string, params: CancelSubscriptionParams, options?: RequestOptions): Promise<Subscription>;
|
|
89
|
+
}
|
|
90
|
+
declare class CustomersResource {
|
|
91
|
+
private readonly http;
|
|
92
|
+
/** @internal */
|
|
93
|
+
constructor(http: HttpClient);
|
|
94
|
+
/**
|
|
95
|
+
* Atualiza somente campos publicos permitidos do customer autenticado no merchant.
|
|
96
|
+
*/
|
|
97
|
+
update(id: string, params: UpdateCustomerParams, options?: RequestOptions): Promise<Customer>;
|
|
98
|
+
}
|
|
99
|
+
declare class RefundsResource {
|
|
100
|
+
private readonly http;
|
|
101
|
+
/** @internal */
|
|
102
|
+
constructor(http: HttpClient);
|
|
103
|
+
/**
|
|
104
|
+
* Solicita estorno usando endpoint publico e idempotency key automatica.
|
|
105
|
+
*
|
|
106
|
+
* Estorno pode ser acionado por painel, automacao ou webhook do lojista. O SDK
|
|
107
|
+
* evita duplicidade mantendo uma chave estavel durante retry.
|
|
108
|
+
*/
|
|
109
|
+
create(chargeId: string, params: CreateRefundParams, options?: RequestOptions): Promise<Refund>;
|
|
110
|
+
/** Consulta um estorno no escopo da API key autenticada. */
|
|
111
|
+
get(refundId: string): Promise<Refund>;
|
|
112
|
+
/** Lista os estornos de uma cobrança no escopo da API key autenticada. */
|
|
113
|
+
listByCharge(chargeId: string, params?: ListRefundsParams): Promise<RefundList>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
declare class MuPag {
|
|
117
|
+
readonly charges: ChargesResource;
|
|
118
|
+
readonly checkoutSessions: CheckoutSessionsResource;
|
|
119
|
+
readonly customers: CustomersResource;
|
|
120
|
+
readonly refunds: RefundsResource;
|
|
121
|
+
readonly subscriptions: SubscriptionsResource;
|
|
122
|
+
readonly webhooks: WebhooksResource;
|
|
123
|
+
/**
|
|
124
|
+
* Cria cliente ergonomico para a API publica da MuPag.
|
|
125
|
+
*
|
|
126
|
+
* A superficie segue `mupag.charges.create(...)` para ficar natural em apps
|
|
127
|
+
* Node/TypeScript e em agentes de coding. O cliente escolhe base URL por ambiente,
|
|
128
|
+
* injeta auth, aplica retries seguros e deixa cada recurso pequeno.
|
|
129
|
+
*/
|
|
130
|
+
constructor(config: MuPagConfig);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { CancelChargeOptions, CancelSubscriptionParams, Charge, ChargeCancellation, ChargesResource, CheckoutSession, CheckoutSessionsResource, CreateChargeParams, CreateCheckoutSessionParams, CreateRefundParams, CreateSubscriptionParams, Customer, CustomersResource, Environment, FetchLike, JsonValue, ListChargesParams, ListRefundsParams, MuPag, MuPagConfig, Page, Refund, RefundList, RefundsResource, RequestOptions, RetryConfig, Subscription, SubscriptionsResource, UpdateCustomerParams, WebhooksResource };
|