@innvoid/getmarket-sdk 0.2.5 → 0.2.6

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.
@@ -482,6 +482,35 @@ function createMkpClient() {
482
482
  };
483
483
  }
484
484
 
485
+ // src/clients/payClient.ts
486
+ function createPayClient() {
487
+ const env = readServiceEnv("PAY", { apiPrefix: "/internal/v1" });
488
+ const http = createHttpClient({
489
+ baseURL: `${env.baseURL}${env.apiPrefix}`,
490
+ timeoutMs: 8e3
491
+ });
492
+ return {
493
+ async createIntent(body) {
494
+ const { data } = await http.post("/intents", body);
495
+ return data;
496
+ },
497
+ async startAttempt(body) {
498
+ const { data } = await http.post("/attempts", body);
499
+ return data;
500
+ },
501
+ async getAvailableMethods(params) {
502
+ const { data } = await http.get("/methods/available", {
503
+ params
504
+ });
505
+ return data;
506
+ },
507
+ async getIntentByUid(uid) {
508
+ const { data } = await http.get(`/intents/${uid}`);
509
+ return data;
510
+ }
511
+ };
512
+ }
513
+
485
514
  export {
486
515
  InternalHttpError,
487
516
  buildInternalHeaders,
@@ -493,6 +522,7 @@ export {
493
522
  createMdClient,
494
523
  createFisClient,
495
524
  createMediaClient,
496
- createMkpClient
525
+ createMkpClient,
526
+ createPayClient
497
527
  };
498
- //# sourceMappingURL=chunk-HA2XKSTP.js.map
528
+ //# sourceMappingURL=chunk-7KD7EQ2O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/clients/env.ts","../src/internalHttpClient.ts","../src/clients/cacheFactory.ts","../src/clients/bulkRefsClient.ts","../src/clients/platformClient.ts","../src/clients/resClient.ts","../src/clients/mdClient.ts","../src/clients/fisClient.ts","../src/clients/mediaClient.ts","../src/clients/mkpClient.ts","../src/clients/payClient.ts"],"sourcesContent":["// packages/sdk/src/clients/env.ts\nimport type {ServiceClientEnv} from \"./types\";\n\nfunction must(v: string | undefined, name: string): string {\n const s = (v || \"\").trim();\n if (!s) throw new Error(`Missing env var: ${name}`);\n return s;\n}\n\nexport function readServiceEnv(prefix: string, defaults?: Partial<ServiceClientEnv>): ServiceClientEnv {\n const baseURL = (process.env[`${prefix}_BASE_URL`] || defaults?.baseURL || \"\").trim();\n const apiPrefix = (process.env[`${prefix}_API_PREFIX`] || defaults?.apiPrefix || \"/internal/v1\").trim();\n\n return {\n baseURL: must(baseURL, `${prefix}_BASE_URL`),\n apiPrefix,\n };\n}\n","// packages/sdk/src/internalHttpClient.ts\nimport fs from \"fs\";\nimport {\n HEADER_INTERNAL_API_KEY,\n HEADER_REQUEST_ID,\n HEADER_COMPANY_UID,\n HEADER_BRANCH_UID,\n HEADER_EMPLOYEE_UID\n} from \"./headers\";\nimport type {RequestContext} from \"./headers\";\n\nexport type InternalHttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\nexport type InternalHttpClientOptions = {\n baseURL: string; // ej: http://platform:3010\n apiPrefix?: string; // ej: /internal/v1\n timeoutMs?: number; // default 15000\n retries?: number; // default 2\n retryDelayMs?: number; // default 250\n apiKey?: string | null; // override opcional\n};\n\nexport type InternalRequestOptions = {\n method: InternalHttpMethod;\n path: string; // \"/tenants/provision\"\n query?: Record<string, string | number | boolean | null | undefined>;\n body?: any; // JSON\n headers?: Record<string, string | undefined>;\n ctx?: RequestContext | null;\n\n idempotencyKey?: string | null;\n\n expectJson?: boolean; // default true\n};\n\nexport class InternalHttpError extends Error {\n status: number;\n code: string;\n details: any;\n\n constructor(status: number, code: string, message: string, details?: any) {\n super(message);\n this.status = status;\n this.code = code;\n this.details = details ?? null;\n }\n}\n\nfunction readSecretFile(path?: string): string | null {\n if (!path) return null;\n try {\n const v = fs.readFileSync(path, \"utf8\").trim();\n return v.length ? v : null;\n } catch {\n return null;\n }\n}\n\nfunction splitKeys(v?: string | null): string[] {\n if (!v) return [];\n return v.split(\",\").map((s) => s.trim()).filter(Boolean);\n}\n\n/**\n * ✅ MISMA lógica que internalAuth.ts:\n * - INTERNAL_API_KEY_FILE tiene prioridad\n * - fallback a INTERNAL_API_KEY\n * - permite CSV\n *\n * Nota: Para enviar, usamos la primera key disponible.\n */\nfunction getInternalApiKey(override?: string | null): string | null {\n if (override && override.trim()) return override.trim();\n\n const fileKey = readSecretFile(process.env.INTERNAL_API_KEY_FILE);\n const envKey = (process.env.INTERNAL_API_KEY || \"\").trim();\n const raw = fileKey || envKey;\n const keys = splitKeys(raw);\n return keys[0] || null;\n}\n\nfunction normalizeBaseURL(baseURL: string): string {\n const b = (baseURL || \"\").trim();\n if (!b) throw new Error(\"InternalHttpClient: baseURL is required\");\n return b.replace(/\\/+$/g, \"\");\n}\n\nfunction normalizePrefix(prefix?: string): string {\n const p = (prefix || \"\").trim();\n if (!p) return \"\";\n const withSlash = p.startsWith(\"/\") ? p : `/${p}`;\n return withSlash.replace(/\\/+$/g, \"\");\n}\n\nfunction buildQuery(query?: InternalRequestOptions[\"query\"]): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === null || v === undefined) continue;\n params.set(k, String(v));\n }\n const s = params.toString();\n return s ? `?${s}` : \"\";\n}\n\n/**\n * ✅ Propaga contexto estándar (SDK)\n * - x-request-id\n * - x-company\n * - x-branch\n * - x-employee-uid\n */\nexport function buildInternalHeaders(\n ctx?: RequestContext | null,\n extra?: Record<string, string | undefined>,\n idempotencyKey?: string | null\n): Record<string, string> {\n const h: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (ctx?.requestId) h[HEADER_REQUEST_ID] = String(ctx.requestId);\n if (ctx?.company_uid) h[HEADER_COMPANY_UID] = String(ctx.company_uid);\n if (ctx?.branch_uid) h[HEADER_BRANCH_UID] = String(ctx.branch_uid);\n if (ctx?.employee_uid) h[HEADER_EMPLOYEE_UID] = String(ctx.employee_uid);\n\n if (idempotencyKey && idempotencyKey.trim()) {\n h[\"Idempotency-Key\"] = idempotencyKey.trim();\n }\n\n for (const [k, v] of Object.entries(extra || {})) {\n if (v === undefined) continue;\n const vv = String(v).trim();\n if (!vv) continue;\n h[k] = vv;\n }\n\n return h;\n}\n\nasync function sleep(ms: number) {\n await new Promise((r) => setTimeout(r, ms));\n}\n\nfunction shouldRetry(status: number | null, err: any): boolean {\n if (err?.name === \"AbortError\") return true;\n if (!status) return true;\n if (status >= 500) return true;\n if (status === 429) return true;\n return false;\n}\n\nasync function safeReadJson(res: Response): Promise<any> {\n const text = await res.text();\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return {raw: text};\n }\n}\n\n/**\n * Cliente interno universal (fetch)\n */\nexport function createInternalHttpClient(opts: InternalHttpClientOptions) {\n const baseURL = normalizeBaseURL(opts.baseURL);\n const apiPrefix = normalizePrefix(opts.apiPrefix);\n const timeoutMs = typeof opts.timeoutMs === \"number\" ? opts.timeoutMs : 15000;\n const retries = typeof opts.retries === \"number\" ? opts.retries : 2;\n const retryDelayMs = typeof opts.retryDelayMs === \"number\" ? opts.retryDelayMs : 250;\n\n const apiKey = getInternalApiKey(opts.apiKey ?? null);\n if (!apiKey) {\n throw new Error(\n \"InternalHttpClient: INTERNAL_API_KEY or INTERNAL_API_KEY_FILE is required to call internal endpoints.\"\n );\n }\n\n async function request<T = any>(r: InternalRequestOptions): Promise<T> {\n const path = (r.path || \"\").trim();\n if (!path.startsWith(\"/\")) {\n throw new Error(`InternalHttpClient: path must start with '/': ${path}`);\n }\n\n const url = `${baseURL}${apiPrefix}${path}${buildQuery(r.query)}`;\n\n const headers = buildInternalHeaders(r.ctx ?? null, r.headers, r.idempotencyKey ?? null);\n if (apiKey != null) {\n headers[HEADER_INTERNAL_API_KEY] = apiKey;\n }\n\n const method = r.method;\n const expectJson = r.expectJson !== false;\n\n const body =\n method === \"GET\" || method === \"DELETE\"\n ? undefined\n : r.body !== undefined\n ? JSON.stringify(r.body)\n : undefined;\n\n let attempt = 0;\n let lastErr: any = null;\n\n while (attempt <= retries) {\n attempt++;\n\n const ac = new AbortController();\n const to = setTimeout(() => ac.abort(), timeoutMs);\n\n try {\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: ac.signal,\n });\n\n clearTimeout(to);\n\n if (res.ok) {\n if (!expectJson) return (undefined as any) as T;\n const data = await safeReadJson(res);\n return data as T;\n }\n\n const errBody = await safeReadJson(res);\n const status = res.status;\n\n if (attempt <= retries && shouldRetry(status, null)) {\n lastErr = new InternalHttpError(\n status,\n \"INTERNAL_HTTP_RETRY\",\n `Retryable internal HTTP error (${status})`,\n {url, status, response: errBody, attempt}\n );\n await sleep(retryDelayMs * attempt);\n continue;\n }\n\n throw new InternalHttpError(\n status,\n \"INTERNAL_HTTP_ERROR\",\n `Internal HTTP error (${status})`,\n {url, status, response: errBody}\n );\n } catch (e: any) {\n clearTimeout(to);\n\n if (attempt <= retries && shouldRetry(null, e)) {\n lastErr = e;\n await sleep(retryDelayMs * attempt);\n continue;\n }\n\n if (e instanceof InternalHttpError) throw e;\n\n throw new InternalHttpError(\n 0,\n \"INTERNAL_HTTP_NETWORK_ERROR\",\n e?.message || \"Internal HTTP network error\",\n {url, attempt, error: String(e)}\n );\n }\n }\n\n throw lastErr || new InternalHttpError(0, \"INTERNAL_HTTP_FAILED\", \"Internal request failed\");\n }\n\n return {\n request,\n get: <T = any>(path: string, o?: Omit<InternalRequestOptions, \"method\" | \"path\">) =>\n request<T>({...(o || {}), method: \"GET\", path}),\n post: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"POST\", path, body}),\n put: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"PUT\", path, body}),\n patch: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"PATCH\", path, body}),\n del: <T = any>(path: string, o?: Omit<InternalRequestOptions, \"method\" | \"path\">) =>\n request<T>({...(o || {}), method: \"DELETE\", path}),\n };\n}\n","// packages/sdk/src/clients/cacheFactory.ts\nimport {TwoLevelCache} from \"../cache\";\nimport {createCacheProvider} from \"../cache/cacheProvider\";\n\n/**\n * Crea un TwoLevelCache por \"namespace\" (ej: \"res:variety\")\n * - L1: in-memory (TTL corto)\n * - L2: redis (TTL medio)\n *\n * Nota: createCacheProvider ya aplica REDIS_KEY_PREFIX desde env,\n * y además TwoLevelCache agrega namespace como prefijo lógico.\n */\nexport function makeRefsCache<T>(namespace: string) {\n const l2 = createCacheProvider(); // redis o noop según env\n return new TwoLevelCache<T>(l2, {\n namespace,\n ttlMsL1: 30_000,\n ttlMsL2: 300_000,\n negativeTtlMsL1: 30_000,\n negativeTtlMsL2: 30_000,\n });\n}\n","// packages/sdk/src/clients/bulkRefsClient.ts\nimport type {RequestContext} from \"../headers\";\nimport {createInternalHttpClient} from \"../internalHttpClient\";\nimport type {BulkRefsResponse, BulkUidsRequest, InternalBulkRefsOptions} from \"./types\";\nimport {makeRefsCache} from \"./cacheFactory\";\n\nfunction uniq(arr: string[]) {\n return Array.from(new Set(arr.filter(Boolean)));\n}\n\nexport function createBulkRefsClient<TRef extends { uid: string }>(args: {\n namespace: string; // cache namespace e.g. \"res:variety\"\n baseURL: string;\n apiPrefix: string;\n path: string; // e.g. \"/refs/varieties\"\n defaultTtlMsL1?: number;\n defaultTtlMsL2?: number;\n}) {\n const http = createInternalHttpClient({\n baseURL: args.baseURL,\n apiPrefix: args.apiPrefix,\n });\n\n // ✅ cache tipado\n const cache = makeRefsCache<TRef>(args.namespace);\n\n async function bulkRefs(\n uids: string[],\n opts?: InternalBulkRefsOptions\n ): Promise<BulkRefsResponse<TRef>> {\n const list = uniq(uids);\n if (list.length === 0) {\n return {ok: true, refs: [], meta: {requested: 0, returned: 0, missing: []}};\n }\n\n // 1) cache hits\n const hits: TRef[] = [];\n const missing: string[] = [];\n\n for (const uid of list) {\n const v = await cache.get(uid); // ✅ sin genéricos\n if (v) hits.push(v);\n else missing.push(uid);\n }\n\n // 2) fetch missing\n let fetched: TRef[] = [];\n if (missing.length) {\n const resp = await http.post<BulkRefsResponse<TRef>>(\n args.path,\n {uids: missing} as BulkUidsRequest,\n {\n ctx: (opts?.ctx ?? null) as RequestContext | null,\n }\n );\n\n const refs = (resp.refs ?? resp.items ?? []) as TRef[];\n fetched = refs;\n\n const ttlMsL1 = opts?.ttlMsL1 ?? args.defaultTtlMsL1;\n const ttlMsL2 = opts?.ttlMsL2 ?? args.defaultTtlMsL2;\n\n for (const ref of refs) {\n const uid = String(ref?.uid || \"\").trim();\n if (!uid) continue;\n\n await cache.set(uid, ref, {\n ttlMsL1,\n ttlMsL2,\n });\n }\n }\n\n const all = [...hits, ...fetched];\n\n // missing final (uids requested but not returned)\n const returnedSet = new Set(all.map((r) => String(r?.uid || \"\")));\n const missingFinal = list.filter((u) => !returnedSet.has(u));\n\n return {\n ok: true,\n refs: all,\n meta: {\n requested: list.length,\n returned: all.length,\n missing: missingFinal,\n },\n };\n }\n\n return {bulkRefs};\n}\n","// packages/sdk/src/clients/platformClient.ts\nimport type {PlatformResolveTenantResponse, PlatformServiceCode} from \"@innvoid/getmarket-contracts\";\nimport type {RequestContext} from \"../headers\";\nimport {createInternalHttpClient} from \"../internalHttpClient\";\nimport {makeRefsCache} from \"./cacheFactory\";\n\nexport function createPlatformClient(env: { baseURL: string; apiPrefix: string }) {\n const http = createInternalHttpClient(env);\n\n // ✅ cache tipado\n const cache = makeRefsCache<PlatformResolveTenantResponse>(\"platform:tenant\");\n\n async function resolveTenant(\n input: { company_uid: string; service: PlatformServiceCode },\n ctx?: RequestContext | null\n ) {\n const key = `${input.company_uid}:${input.service}`;\n\n const cached = await cache.get(key); // ✅ sin genéricos\n if (cached) return cached;\n\n const resp = await http.post<PlatformResolveTenantResponse>(\n \"/tenants/resolve\",\n input,\n {ctx: ctx ?? null}\n );\n\n await cache.set(key, resp);\n return resp;\n }\n\n return {resolveTenant};\n}\n","// packages/sdk/src/clients/resClient.ts\nimport type {ResVarietyRef, ResVarietiesRefsResponse} from \"@innvoid/getmarket-contracts\";\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createResClient() {\n const env = readServiceEnv(\"RES\", {apiPrefix: \"/internal/v1\"});\n\n const varieties = createBulkRefsClient<ResVarietyRef>({\n namespace: \"res:variety\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/varieties\",\n });\n\n return {\n varietiesRefs: (uids: string[], opts?: any) => varieties.bulkRefs(uids, opts) as Promise<ResVarietiesRefsResponse>,\n };\n}\n","// packages/sdk/src/clients/mdClient.ts\nimport type {\n MdMeasureRef,\n MdMeasuresRefsResponse,\n MdMeasureTypeRef,\n MdMeasureTypesRefsResponse,\n MdCountryRef,\n MdCountriesRefsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMdClient() {\n const env = readServiceEnv(\"MD\", {apiPrefix: \"/internal/v1\"});\n\n const measures = createBulkRefsClient<MdMeasureRef>({\n namespace: \"md:measure\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/measures\",\n });\n\n const measureTypes = createBulkRefsClient<MdMeasureTypeRef>({\n namespace: \"md:measure_type\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/measure-types\",\n });\n\n const countries = createBulkRefsClient<MdCountryRef>({\n namespace: \"md:country\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/countries\",\n });\n\n return {\n measuresRefs: (uids: string[], opts?: any) => measures.bulkRefs(uids, opts) as Promise<MdMeasuresRefsResponse>,\n measureTypesRefs: (uids: string[], opts?: any) => measureTypes.bulkRefs(uids, opts) as Promise<MdMeasureTypesRefsResponse>,\n countriesRefs: (uids: string[], opts?: any) => countries.bulkRefs(uids, opts) as Promise<MdCountriesRefsResponse>,\n };\n}\n","// packages/sdk/src/clients/fisClient.ts\nimport type {\n UID,\n Code,\n FisTaxRef,\n FisTaxesRefsResponse,\n FisDocumentRef,\n FisDocumentsRefsResponse,\n FisSubmissionRef,\n FisSubmissionsRefsResponse,\n FisCalculateRequest,\n FisCalculateResponse,\n FisBuildDocumentRequest,\n FisBuildDocumentResponse,\n FisSignDocumentRequest,\n FisSignDocumentResponse,\n FisSubmitDocumentRequest,\n FisSubmitDocumentResponse,\n FisCancelDocumentRequest,\n FisCancelDocumentResponse,\n FisReserveFolioRequest,\n FisReserveFolioResponse,\n FisConsumeFolioRequest,\n FisConsumeFolioResponse,\n FisDocumentsQueryRequest,\n FisDocumentsQueryResponse,\n FisSubmissionRetryRequest,\n FisSubmissionRetryResponse,\n FisDocumentResponse,\n FisSnapshotResponse,\n FisSubmissionResponse,\n FisStatusEventsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\nimport {createHttpClient, type HttpClient} from \"../core\";\n\nexport function createFisClient() {\n const env = readServiceEnv(\"FIS\", {apiPrefix: \"/internal/v1\"});\n const http: HttpClient = createHttpClient({\n baseURL: `${env.baseURL}${env.apiPrefix}`,\n timeoutMs: 8000,\n });\n\n const taxes = createBulkRefsClient<FisTaxRef>({\n namespace: \"fis:tax\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/taxes\",\n });\n\n const documents = createBulkRefsClient<FisDocumentRef>({\n namespace: \"fis:document\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/documents\",\n });\n\n const submissions = createBulkRefsClient<FisSubmissionRef>({\n namespace: \"fis:submission\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/submissions\",\n });\n\n return {\n // -----------------------------------------------------------------------\n // Bulk refs\n // -----------------------------------------------------------------------\n taxesRefs: (uids: string[], opts?: any) =>\n taxes.bulkRefs(uids, opts) as Promise<FisTaxesRefsResponse>,\n\n documentsRefs: (uids: string[], opts?: any) =>\n documents.bulkRefs(uids, opts) as Promise<FisDocumentsRefsResponse>,\n\n submissionsRefs: (uids: string[], opts?: any) =>\n submissions.bulkRefs(uids, opts) as Promise<FisSubmissionsRefsResponse>,\n\n // -----------------------------------------------------------------------\n // Fiscal calculation / build / lifecycle\n // -----------------------------------------------------------------------\n calculate: async (body: FisCalculateRequest): Promise<FisCalculateResponse> => {\n const {data} = await http.post(\"/calculate\", body);\n return data;\n },\n\n buildDocument: async (body: FisBuildDocumentRequest): Promise<FisBuildDocumentResponse> => {\n const {data} = await http.post(\"/documents/build\", body);\n return data;\n },\n\n signDocument: async (body: FisSignDocumentRequest): Promise<FisSignDocumentResponse> => {\n const {data} = await http.post(\"/documents/sign\", body);\n return data;\n },\n\n submitDocument: async (body: FisSubmitDocumentRequest): Promise<FisSubmitDocumentResponse> => {\n const {data} = await http.post(\"/documents/submit\", body);\n return data;\n },\n\n cancelDocument: async (body: FisCancelDocumentRequest): Promise<FisCancelDocumentResponse> => {\n const {data} = await http.post(\"/documents/cancel\", body);\n return data;\n },\n\n // -----------------------------------------------------------------------\n // Folios / series\n // -----------------------------------------------------------------------\n reserveFolio: async (body: FisReserveFolioRequest): Promise<FisReserveFolioResponse> => {\n const {data} = await http.post(\"/folios/reserve\", body);\n return data;\n },\n\n consumeFolio: async (body: FisConsumeFolioRequest): Promise<FisConsumeFolioResponse> => {\n const {data} = await http.post(\"/folios/consume\", body);\n return data;\n },\n\n // -----------------------------------------------------------------------\n // Queries / detail\n // -----------------------------------------------------------------------\n queryDocuments: async (params: FisDocumentsQueryRequest): Promise<FisDocumentsQueryResponse> => {\n const {data} = await http.get(\"/documents\", {params});\n return data;\n },\n\n getDocumentByUid: async (uid: UID): Promise<FisDocumentResponse> => {\n const {data} = await http.get(`/documents/${uid}`);\n return data;\n },\n\n getSnapshotByUid: async (uid: UID): Promise<FisSnapshotResponse> => {\n const {data} = await http.get(`/snapshots/${uid}`);\n return data;\n },\n\n getSubmissionByUid: async (uid: UID): Promise<FisSubmissionResponse> => {\n const {data} = await http.get(`/submissions/${uid}`);\n return data;\n },\n\n getStatusEventsByDocumentUid: async (documentUid: UID): Promise<FisStatusEventsResponse> => {\n const {data} = await http.get(`/documents/${documentUid}/status-events`);\n return data;\n },\n\n retrySubmission: async (body: FisSubmissionRetryRequest): Promise<FisSubmissionRetryResponse> => {\n const {data} = await http.post(\"/submissions/retry\", body);\n return data;\n },\n };\n}\n","// packages/sdk/src/clients/mediaClient.ts\nimport type {MediaFileRef, MediaFilesRefsResponse} from \"@innvoid/getmarket-contracts\";\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMediaClient() {\n const env = readServiceEnv(\"MEDIA\", {apiPrefix: \"/internal/v1\"});\n\n const files = createBulkRefsClient<MediaFileRef>({\n namespace: \"media:file\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/files\",\n });\n\n return {\n filesRefs: (uids: string[], opts?: any) =>\n files.bulkRefs(uids, opts) as Promise<MediaFilesRefsResponse>,\n };\n}\n","// packages/sdk/src/clients/mkpClient.ts\nimport type {\n MkpPublicationRef,\n MkpPublicationsRefsResponse,\n MkpEventRef,\n MkpEventsRefsResponse,\n MkpPromotionRef,\n MkpPromotionsRefsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMkpClient() {\n const env = readServiceEnv(\"MKP\", {apiPrefix: \"/internal/v1\"});\n\n const publications = createBulkRefsClient<MkpPublicationRef>({\n namespace: \"mkp:publication\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/publications\",\n });\n\n const events = createBulkRefsClient<MkpEventRef>({\n namespace: \"mkp:event\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/events\",\n });\n\n const promotions = createBulkRefsClient<MkpPromotionRef>({\n namespace: \"mkp:promotion\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/promotions\",\n });\n\n return {\n publicationsRefs: (uids: string[], opts?: any) =>\n publications.bulkRefs(uids, opts) as Promise<MkpPublicationsRefsResponse>,\n\n eventsRefs: (uids: string[], opts?: any) =>\n events.bulkRefs(uids, opts) as Promise<MkpEventsRefsResponse>,\n\n promotionsRefs: (uids: string[], opts?: any) =>\n promotions.bulkRefs(uids, opts) as Promise<MkpPromotionsRefsResponse>,\n };\n}\n","import type {\n UID,\n Code,\n PayMethodAvailabilityRef,\n PayCreateIntentRequest,\n PayCreateIntentResponse,\n PayStartAttemptRequest,\n PayStartAttemptResponse,\n PayIntentResponse,\n PayMethodsAvailabilityResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createHttpClient, type HttpClient} from \"../core\";\n\nexport function createPayClient() {\n const env = readServiceEnv(\"PAY\", {apiPrefix: \"/internal/v1\"});\n\n const http: HttpClient = createHttpClient({\n baseURL: `${env.baseURL}${env.apiPrefix}`,\n timeoutMs: 8000,\n });\n\n return {\n async createIntent(body: PayCreateIntentRequest): Promise<PayCreateIntentResponse> {\n const {data} = await http.post<PayCreateIntentResponse>(\"/intents\", body);\n return data;\n },\n\n async startAttempt(body: PayStartAttemptRequest): Promise<PayStartAttemptResponse> {\n const {data} = await http.post<PayStartAttemptResponse>(\"/attempts\", body);\n return data;\n },\n\n async getAvailableMethods(params: {\n md_country_uid: UID;\n currency_code: Code;\n auth_company_uid?: UID;\n auth_branch_uid?: UID;\n }): Promise<PayMethodsAvailabilityResponse> {\n const {data} = await http.get<PayMethodsAvailabilityResponse>(\"/methods/available\", {\n params,\n });\n return data;\n },\n\n async getIntentByUid(uid: UID): Promise<PayIntentResponse> {\n const {data} = await http.get<PayIntentResponse>(`/intents/${uid}`);\n return data;\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -35,6 +35,7 @@ __export(clients_exports, {
35
35
  createMdClient: () => createMdClient,
36
36
  createMediaClient: () => createMediaClient,
37
37
  createMkpClient: () => createMkpClient,
38
+ createPayClient: () => createPayClient,
38
39
  createPlatformClient: () => createPlatformClient,
39
40
  createResClient: () => createResClient,
40
41
  readServiceEnv: () => readServiceEnv
@@ -777,6 +778,35 @@ function createMkpClient() {
777
778
  promotionsRefs: (uids, opts) => promotions.bulkRefs(uids, opts)
778
779
  };
779
780
  }
781
+
782
+ // src/clients/payClient.ts
783
+ function createPayClient() {
784
+ const env = readServiceEnv("PAY", { apiPrefix: "/internal/v1" });
785
+ const http = createHttpClient({
786
+ baseURL: `${env.baseURL}${env.apiPrefix}`,
787
+ timeoutMs: 8e3
788
+ });
789
+ return {
790
+ async createIntent(body) {
791
+ const { data } = await http.post("/intents", body);
792
+ return data;
793
+ },
794
+ async startAttempt(body) {
795
+ const { data } = await http.post("/attempts", body);
796
+ return data;
797
+ },
798
+ async getAvailableMethods(params) {
799
+ const { data } = await http.get("/methods/available", {
800
+ params
801
+ });
802
+ return data;
803
+ },
804
+ async getIntentByUid(uid) {
805
+ const { data } = await http.get(`/intents/${uid}`);
806
+ return data;
807
+ }
808
+ };
809
+ }
780
810
  // Annotate the CommonJS export names for ESM import in node:
781
811
  0 && (module.exports = {
782
812
  createBulkRefsClient,
@@ -784,6 +814,7 @@ function createMkpClient() {
784
814
  createMdClient,
785
815
  createMediaClient,
786
816
  createMkpClient,
817
+ createPayClient,
787
818
  createPlatformClient,
788
819
  createResClient,
789
820
  readServiceEnv
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/clients/index.ts","../../src/clients/env.ts","../../src/internalHttpClient.ts","../../src/headers/constants.ts","../../src/cache/redisCacheProvider.ts","../../src/cache/cacheProvider.ts","../../src/cache/ttlCache.ts","../../src/cache/twoLevelCache.ts","../../src/cache/index.ts","../../src/clients/cacheFactory.ts","../../src/clients/bulkRefsClient.ts","../../src/clients/platformClient.ts","../../src/clients/resClient.ts","../../src/clients/mdClient.ts","../../src/core/http.ts","../../src/clients/fisClient.ts","../../src/clients/mediaClient.ts","../../src/clients/mkpClient.ts"],"sourcesContent":["// packages/sdk/src/clients/index.ts\nexport * from \"./types\";\nexport * from \"./env\";\nexport * from \"./bulkRefsClient\";\nexport * from \"./platformClient\";\nexport * from \"./resClient\";\nexport * from \"./mdClient\";\nexport * from \"./fisClient\";\nexport * from \"./mediaClient\";\nexport * from \"./mkpClient\";\n// export * from \"./payClient\";\n","// packages/sdk/src/clients/env.ts\nimport type {ServiceClientEnv} from \"./types\";\n\nfunction must(v: string | undefined, name: string): string {\n const s = (v || \"\").trim();\n if (!s) throw new Error(`Missing env var: ${name}`);\n return s;\n}\n\nexport function readServiceEnv(prefix: string, defaults?: Partial<ServiceClientEnv>): ServiceClientEnv {\n const baseURL = (process.env[`${prefix}_BASE_URL`] || defaults?.baseURL || \"\").trim();\n const apiPrefix = (process.env[`${prefix}_API_PREFIX`] || defaults?.apiPrefix || \"/internal/v1\").trim();\n\n return {\n baseURL: must(baseURL, `${prefix}_BASE_URL`),\n apiPrefix,\n };\n}\n","// packages/sdk/src/internalHttpClient.ts\nimport fs from \"fs\";\nimport {\n HEADER_INTERNAL_API_KEY,\n HEADER_REQUEST_ID,\n HEADER_COMPANY_UID,\n HEADER_BRANCH_UID,\n HEADER_EMPLOYEE_UID\n} from \"./headers\";\nimport type {RequestContext} from \"./headers\";\n\nexport type InternalHttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\nexport type InternalHttpClientOptions = {\n baseURL: string; // ej: http://platform:3010\n apiPrefix?: string; // ej: /internal/v1\n timeoutMs?: number; // default 15000\n retries?: number; // default 2\n retryDelayMs?: number; // default 250\n apiKey?: string | null; // override opcional\n};\n\nexport type InternalRequestOptions = {\n method: InternalHttpMethod;\n path: string; // \"/tenants/provision\"\n query?: Record<string, string | number | boolean | null | undefined>;\n body?: any; // JSON\n headers?: Record<string, string | undefined>;\n ctx?: RequestContext | null;\n\n idempotencyKey?: string | null;\n\n expectJson?: boolean; // default true\n};\n\nexport class InternalHttpError extends Error {\n status: number;\n code: string;\n details: any;\n\n constructor(status: number, code: string, message: string, details?: any) {\n super(message);\n this.status = status;\n this.code = code;\n this.details = details ?? null;\n }\n}\n\nfunction readSecretFile(path?: string): string | null {\n if (!path) return null;\n try {\n const v = fs.readFileSync(path, \"utf8\").trim();\n return v.length ? v : null;\n } catch {\n return null;\n }\n}\n\nfunction splitKeys(v?: string | null): string[] {\n if (!v) return [];\n return v.split(\",\").map((s) => s.trim()).filter(Boolean);\n}\n\n/**\n * ✅ MISMA lógica que internalAuth.ts:\n * - INTERNAL_API_KEY_FILE tiene prioridad\n * - fallback a INTERNAL_API_KEY\n * - permite CSV\n *\n * Nota: Para enviar, usamos la primera key disponible.\n */\nfunction getInternalApiKey(override?: string | null): string | null {\n if (override && override.trim()) return override.trim();\n\n const fileKey = readSecretFile(process.env.INTERNAL_API_KEY_FILE);\n const envKey = (process.env.INTERNAL_API_KEY || \"\").trim();\n const raw = fileKey || envKey;\n const keys = splitKeys(raw);\n return keys[0] || null;\n}\n\nfunction normalizeBaseURL(baseURL: string): string {\n const b = (baseURL || \"\").trim();\n if (!b) throw new Error(\"InternalHttpClient: baseURL is required\");\n return b.replace(/\\/+$/g, \"\");\n}\n\nfunction normalizePrefix(prefix?: string): string {\n const p = (prefix || \"\").trim();\n if (!p) return \"\";\n const withSlash = p.startsWith(\"/\") ? p : `/${p}`;\n return withSlash.replace(/\\/+$/g, \"\");\n}\n\nfunction buildQuery(query?: InternalRequestOptions[\"query\"]): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === null || v === undefined) continue;\n params.set(k, String(v));\n }\n const s = params.toString();\n return s ? `?${s}` : \"\";\n}\n\n/**\n * ✅ Propaga contexto estándar (SDK)\n * - x-request-id\n * - x-company\n * - x-branch\n * - x-employee-uid\n */\nexport function buildInternalHeaders(\n ctx?: RequestContext | null,\n extra?: Record<string, string | undefined>,\n idempotencyKey?: string | null\n): Record<string, string> {\n const h: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (ctx?.requestId) h[HEADER_REQUEST_ID] = String(ctx.requestId);\n if (ctx?.company_uid) h[HEADER_COMPANY_UID] = String(ctx.company_uid);\n if (ctx?.branch_uid) h[HEADER_BRANCH_UID] = String(ctx.branch_uid);\n if (ctx?.employee_uid) h[HEADER_EMPLOYEE_UID] = String(ctx.employee_uid);\n\n if (idempotencyKey && idempotencyKey.trim()) {\n h[\"Idempotency-Key\"] = idempotencyKey.trim();\n }\n\n for (const [k, v] of Object.entries(extra || {})) {\n if (v === undefined) continue;\n const vv = String(v).trim();\n if (!vv) continue;\n h[k] = vv;\n }\n\n return h;\n}\n\nasync function sleep(ms: number) {\n await new Promise((r) => setTimeout(r, ms));\n}\n\nfunction shouldRetry(status: number | null, err: any): boolean {\n if (err?.name === \"AbortError\") return true;\n if (!status) return true;\n if (status >= 500) return true;\n if (status === 429) return true;\n return false;\n}\n\nasync function safeReadJson(res: Response): Promise<any> {\n const text = await res.text();\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return {raw: text};\n }\n}\n\n/**\n * Cliente interno universal (fetch)\n */\nexport function createInternalHttpClient(opts: InternalHttpClientOptions) {\n const baseURL = normalizeBaseURL(opts.baseURL);\n const apiPrefix = normalizePrefix(opts.apiPrefix);\n const timeoutMs = typeof opts.timeoutMs === \"number\" ? opts.timeoutMs : 15000;\n const retries = typeof opts.retries === \"number\" ? opts.retries : 2;\n const retryDelayMs = typeof opts.retryDelayMs === \"number\" ? opts.retryDelayMs : 250;\n\n const apiKey = getInternalApiKey(opts.apiKey ?? null);\n if (!apiKey) {\n throw new Error(\n \"InternalHttpClient: INTERNAL_API_KEY or INTERNAL_API_KEY_FILE is required to call internal endpoints.\"\n );\n }\n\n async function request<T = any>(r: InternalRequestOptions): Promise<T> {\n const path = (r.path || \"\").trim();\n if (!path.startsWith(\"/\")) {\n throw new Error(`InternalHttpClient: path must start with '/': ${path}`);\n }\n\n const url = `${baseURL}${apiPrefix}${path}${buildQuery(r.query)}`;\n\n const headers = buildInternalHeaders(r.ctx ?? null, r.headers, r.idempotencyKey ?? null);\n if (apiKey != null) {\n headers[HEADER_INTERNAL_API_KEY] = apiKey;\n }\n\n const method = r.method;\n const expectJson = r.expectJson !== false;\n\n const body =\n method === \"GET\" || method === \"DELETE\"\n ? undefined\n : r.body !== undefined\n ? JSON.stringify(r.body)\n : undefined;\n\n let attempt = 0;\n let lastErr: any = null;\n\n while (attempt <= retries) {\n attempt++;\n\n const ac = new AbortController();\n const to = setTimeout(() => ac.abort(), timeoutMs);\n\n try {\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: ac.signal,\n });\n\n clearTimeout(to);\n\n if (res.ok) {\n if (!expectJson) return (undefined as any) as T;\n const data = await safeReadJson(res);\n return data as T;\n }\n\n const errBody = await safeReadJson(res);\n const status = res.status;\n\n if (attempt <= retries && shouldRetry(status, null)) {\n lastErr = new InternalHttpError(\n status,\n \"INTERNAL_HTTP_RETRY\",\n `Retryable internal HTTP error (${status})`,\n {url, status, response: errBody, attempt}\n );\n await sleep(retryDelayMs * attempt);\n continue;\n }\n\n throw new InternalHttpError(\n status,\n \"INTERNAL_HTTP_ERROR\",\n `Internal HTTP error (${status})`,\n {url, status, response: errBody}\n );\n } catch (e: any) {\n clearTimeout(to);\n\n if (attempt <= retries && shouldRetry(null, e)) {\n lastErr = e;\n await sleep(retryDelayMs * attempt);\n continue;\n }\n\n if (e instanceof InternalHttpError) throw e;\n\n throw new InternalHttpError(\n 0,\n \"INTERNAL_HTTP_NETWORK_ERROR\",\n e?.message || \"Internal HTTP network error\",\n {url, attempt, error: String(e)}\n );\n }\n }\n\n throw lastErr || new InternalHttpError(0, \"INTERNAL_HTTP_FAILED\", \"Internal request failed\");\n }\n\n return {\n request,\n get: <T = any>(path: string, o?: Omit<InternalRequestOptions, \"method\" | \"path\">) =>\n request<T>({...(o || {}), method: \"GET\", path}),\n post: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"POST\", path, body}),\n put: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"PUT\", path, body}),\n patch: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"PATCH\", path, body}),\n del: <T = any>(path: string, o?: Omit<InternalRequestOptions, \"method\" | \"path\">) =>\n request<T>({...(o || {}), method: \"DELETE\", path}),\n };\n}\n","// packages/sdk/src/constants.ts\nexport const HEADER_REQUEST_ID = \"x-request-id\";\n\nexport const HEADER_COMPANY_UID = \"x-company\";\nexport const HEADER_BRANCH_UID = \"x-branch\";\nexport const HEADER_EMPLOYEE_UID = \"x-employee-uid\";\n\nexport const HEADER_INTERNAL_API_KEY = \"x-internal-api-key\";\nexport const HEADER_AUTHORIZATION = \"authorization\";\n","// clients/cache/redisCacheProvider.ts\nimport {createClient, type RedisClientType} from \"redis\";\nimport type {CacheProvider, CacheSetOptions, CacheValue} from \"./cacheProvider\";\n\nexport type RedisCacheProviderOptions = {\n url?: string;\n\n host?: string;\n port?: number;\n password?: string;\n db?: number;\n\n tls?: boolean;\n\n connectTimeoutMs?: number;\n\n keyPrefix?: string;\n};\n\nfunction buildRedisUrl(opts: RedisCacheProviderOptions): string | undefined {\n if (opts.url && opts.url.trim()) return opts.url.trim();\n\n if (!opts.host) return undefined;\n const port = opts.port ?? 6379;\n const db = opts.db ?? 0;\n\n const auth = opts.password ? `:${encodeURIComponent(opts.password)}@` : \"\";\n return `redis://${auth}${opts.host}:${port}/${db}`;\n}\n\nexport class RedisCacheProvider implements CacheProvider {\n readonly kind = \"redis\" as const;\n\n // ✅ tip \"amplio\" para evitar TS2322 por typings genéricos\n private client: RedisClientType<any, any, any>;\n private ready = false;\n private readonly keyPrefix?: string;\n\n constructor(private readonly opts: RedisCacheProviderOptions) {\n const url = buildRedisUrl(opts);\n if (!url) {\n throw new Error(\"[RedisCacheProvider] Missing redis config (REDIS_URL or REDIS_HOST)\");\n }\n\n this.keyPrefix = opts.keyPrefix?.trim() || undefined;\n\n this.client = createClient({\n url,\n socket: {\n connectTimeout: opts.connectTimeoutMs ?? 3000,\n tls: opts.tls ? true : undefined,\n },\n }) as RedisClientType<any, any, any>;\n\n this.client.on(\"error\", (err: unknown) => {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === \"object\" && err !== null && \"message\" in err\n ? String((err as any).message)\n : String(err);\n\n console.error(\"[redis] error\", msg, err);\n });\n }\n\n private k(key: string): string {\n if (!this.keyPrefix) return key;\n return `${this.keyPrefix}:${key}`;\n }\n\n private async ensureConnected() {\n if (this.ready) return;\n await this.client.connect();\n this.ready = true;\n }\n\n async get(key: string): Promise<CacheValue | null> {\n await this.ensureConnected();\n const v = (await this.client.get(this.k(key))) as string | null;\n return v ?? null;\n }\n\n async set(key: string, value: CacheValue, options?: CacheSetOptions): Promise<void> {\n await this.ensureConnected();\n\n const ttlMs = options?.ttlMs;\n if (ttlMs && ttlMs > 0) {\n await this.client.set(this.k(key), value, {PX: ttlMs});\n return;\n }\n\n await this.client.set(this.k(key), value);\n }\n\n async del(key: string): Promise<void> {\n await this.ensureConnected();\n await this.client.del(this.k(key));\n }\n\n async close(): Promise<void> {\n try {\n if (this.ready) await this.client.quit();\n } catch {\n try {\n await this.client.disconnect();\n } catch {\n }\n } finally {\n this.ready = false;\n }\n }\n}\n","// clients/cache/cacheProvider.ts\nimport type {RedisCacheProviderOptions} from \"./redisCacheProvider\";\nimport {RedisCacheProvider} from \"./redisCacheProvider\";\n\nexport type CacheValue = string;\n\nexport type CacheSetOptions = {\n ttlMs?: number; // TTL en milisegundos (PX)\n};\n\nexport interface CacheProvider {\n readonly kind: \"redis\" | \"noop\";\n\n get(key: string): Promise<CacheValue | null>;\n\n set(key: string, value: CacheValue, options?: CacheSetOptions): Promise<void>;\n\n del(key: string): Promise<void>;\n\n /**\n * Cierra conexiones si aplica.\n */\n close(): Promise<void>;\n}\n\nexport class NoopCacheProvider implements CacheProvider {\n readonly kind = \"noop\" as const;\n\n async get(_key: string): Promise<CacheValue | null> {\n return null;\n }\n\n async set(_key: string, _value: CacheValue, _options?: CacheSetOptions): Promise<void> {\n return;\n }\n\n async del(_key: string): Promise<void> {\n return;\n }\n\n async close(): Promise<void> {\n return;\n }\n}\n\nexport type CacheProviderFactoryOptions = {\n /**\n * Si false, devuelve Noop (útil en local si no quieres Redis).\n * Default: true si hay REDIS_URL o REDIS_HOST.\n */\n enabled?: boolean;\n\n /**\n * Prefijo global opcional para keys.\n * Ej: \"getmarket:erp\"\n */\n keyPrefix?: string;\n\n /**\n * Redis options\n */\n redis?: Partial<RedisCacheProviderOptions>;\n};\n\n/**\n * Factory simple para L2 (Redis).\n * - Si no está habilitado / no hay config => Noop\n * - Si hay config => RedisCacheProvider\n */\nexport function createCacheProvider(opts: CacheProviderFactoryOptions = {}): CacheProvider {\n const envHasRedis = Boolean(process.env.REDIS_URL || process.env.REDIS_HOST);\n\n const enabled =\n typeof opts.enabled === \"boolean\" ? opts.enabled : envHasRedis;\n\n if (!enabled) return new NoopCacheProvider();\n\n // Construye options redis desde env + overrides\n const redisOpts: RedisCacheProviderOptions = {\n url: process.env.REDIS_URL,\n host: process.env.REDIS_HOST,\n port: process.env.REDIS_PORT ? Number(process.env.REDIS_PORT) : undefined,\n password: process.env.REDIS_PASSWORD,\n db: process.env.REDIS_DB ? Number(process.env.REDIS_DB) : undefined,\n tls: (process.env.REDIS_TLS || \"\").toLowerCase() === \"true\",\n connectTimeoutMs: process.env.REDIS_CONNECT_TIMEOUT_MS\n ? Number(process.env.REDIS_CONNECT_TIMEOUT_MS)\n : 3000,\n keyPrefix: opts.keyPrefix || process.env.REDIS_KEY_PREFIX || undefined,\n ...(opts.redis || {}),\n };\n\n return new RedisCacheProvider(redisOpts);\n}\n","// clients/cache/ttlCache.ts\ntype CacheEntry<T> = { value: T; expiresAt: number };\n\nexport class TtlCache<T> {\n private store = new Map<string, CacheEntry<T>>();\n\n constructor(private defaultTtlMs: number) {\n }\n\n get(key: string): T | null {\n const e = this.store.get(key);\n if (!e) return null;\n if (Date.now() > e.expiresAt) {\n this.store.delete(key);\n return null;\n }\n return e.value;\n }\n\n set(key: string, value: T, ttlMs?: number): void {\n this.store.set(key, {value, expiresAt: Date.now() + (ttlMs ?? this.defaultTtlMs)});\n }\n\n del(key: string): void {\n this.store.delete(key);\n }\n}\n","// clients/cache/twoLevelCache.ts\nimport type {CacheProvider} from \"./cacheProvider\";\nimport {TtlCache} from \"./ttlCache\";\n\nexport type TwoLevelCacheOptions = {\n /**\n * TTL para L1 (in-memory).\n * Default: 2 min\n */\n ttlMsL1?: number;\n\n /**\n * TTL para L2 (redis).\n * Default: 10 min\n */\n ttlMsL2?: number;\n\n /**\n * Si quieres cachear \"no encontrado\" (null) por un TTL corto,\n * para evitar golpear upstream repetidamente.\n * Default: 0 (deshabilitado)\n */\n negativeTtlMsL1?: number;\n negativeTtlMsL2?: number;\n\n /**\n * Prefijo lógico extra por instancia (además del keyPrefix del provider).\n * Ej: \"res:variety\"\n */\n namespace?: string;\n};\n\ntype Loader<T> = () => Promise<T>;\n\nfunction safeJsonParse<T>(raw: string): T | null {\n try {\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n}\n\nfunction safeJsonStringify(v: any): string | null {\n try {\n return JSON.stringify(v);\n } catch {\n return null;\n }\n}\n\nexport class TwoLevelCache<T> {\n private readonly l1: TtlCache<T | null>;\n private readonly inflight = new Map<string, Promise<T>>();\n\n constructor(\n private readonly l2: CacheProvider,\n private readonly opts: TwoLevelCacheOptions = {}\n ) {\n // El TTL real lo controla set(key, ttl), pero TTLCache necesita \"default ttl\"\n const defaultTtl = this.opts.ttlMsL1 ?? 2 * 60 * 1000;\n this.l1 = new TtlCache<T | null>(defaultTtl);\n }\n\n private key(k: string): string {\n const ns = (this.opts.namespace || \"\").trim();\n return ns ? `${ns}:${k}` : k;\n }\n\n /**\n * GET \"best effort\": primero L1, luego L2.\n * (No llama loader)\n */\n async get(k: string): Promise<T | null> {\n const key = this.key(k);\n\n const v1 = this.l1.get(key);\n if (v1 !== undefined) return v1; // Ojo: TTLCache puede devolver null también\n\n const raw = await this.l2.get(key);\n if (!raw) return null;\n\n const parsed = safeJsonParse<T | null>(raw);\n if (parsed === null && raw !== \"null\") {\n // payload corrupto\n return null;\n }\n\n // Rehidrata L1 con ttl L1\n this.l1.set(key, parsed, this.opts.ttlMsL1);\n return parsed;\n }\n\n async set(k: string, value: T | null, ttlOverride?: { ttlMsL1?: number; ttlMsL2?: number }) {\n const key = this.key(k);\n\n const ttlL1 = ttlOverride?.ttlMsL1 ?? this.opts.ttlMsL1 ?? 2 * 60 * 1000;\n const ttlL2 = ttlOverride?.ttlMsL2 ?? this.opts.ttlMsL2 ?? 10 * 60 * 1000;\n\n this.l1.set(key, value, ttlL1);\n\n const raw = safeJsonStringify(value);\n if (raw == null) return;\n\n await this.l2.set(key, raw, {ttlMs: ttlL2});\n }\n\n async del(k: string) {\n const key = this.key(k);\n this.l1.del?.(key as any); // si tu TtlCache no tiene del(), ignora (ver comentario abajo)\n await this.l2.del(key);\n }\n\n /**\n * Cache-aside real con L1 + L2 + loader.\n *\n * - Dedup de concurrencia por key (inflight)\n * - Soporta negative caching (si loader retorna null)\n */\n async getOrSet(\n k: string,\n loader: Loader<T | null>,\n options?: TwoLevelCacheOptions\n ): Promise<T | null> {\n const key = this.key(k);\n\n // 1) L1\n const v1 = this.l1.get(key);\n if (v1 !== undefined) return v1;\n\n // 2) L2\n const raw = await this.l2.get(key);\n if (raw) {\n const parsed = safeJsonParse<T | null>(raw);\n if (parsed !== null || raw === \"null\") {\n this.l1.set(key, parsed, options?.ttlMsL1 ?? this.opts.ttlMsL1);\n return parsed;\n }\n }\n\n // 3) Dedup inflight (anti stampede)\n if (this.inflight.has(key)) {\n return this.inflight.get(key)! as any;\n }\n\n const promise = (async () => {\n try {\n const value = await loader();\n\n const ttlMsL1 = options?.ttlMsL1 ?? this.opts.ttlMsL1 ?? 2 * 60 * 1000;\n const ttlMsL2 = options?.ttlMsL2 ?? this.opts.ttlMsL2 ?? 10 * 60 * 1000;\n\n // negative caching\n const negL1 = options?.negativeTtlMsL1 ?? this.opts.negativeTtlMsL1 ?? 0;\n const negL2 = options?.negativeTtlMsL2 ?? this.opts.negativeTtlMsL2 ?? 0;\n\n if (value === null) {\n if (negL1 > 0) this.l1.set(key, null, negL1);\n if (negL2 > 0) await this.l2.set(key, \"null\", {ttlMs: negL2});\n return null;\n }\n\n // normal set\n this.l1.set(key, value, ttlMsL1);\n\n const rawValue = safeJsonStringify(value);\n if (rawValue != null) {\n await this.l2.set(key, rawValue, {ttlMs: ttlMsL2});\n }\n\n return value;\n } finally {\n this.inflight.delete(key);\n }\n })();\n\n this.inflight.set(key, promise as any);\n return promise;\n }\n}\n","// packages/sdk/src/cache/index.ts\nimport {createCacheProvider, type CacheProvider} from \"./cacheProvider\";\nimport {TwoLevelCache, type TwoLevelCacheOptions} from \"./twoLevelCache\";\n\nconst envInt = (v?: string, dflt: number = 0) => {\n const n = Number(v);\n return Number.isFinite(n) && n > 0 ? Math.floor(n) : dflt;\n};\n\nconst DEFAULT_L1_TTL_MS = envInt(process.env.CACHE_L1_DEFAULT_TTL_MS, 30_000);\nconst DEFAULT_L2_TTL_MS = envInt(process.env.CACHE_L2_DEFAULT_TTL_MS, 300_000);\nconst DEFAULT_NEG_TTL_MS = envInt(process.env.CACHE_NEGATIVE_TTL_MS, 30_000);\n\nlet l2Provider: CacheProvider | null = null;\nconst twoLevelByNamespace = new Map<string, TwoLevelCache<any>>();\n\nfunction getL2(): CacheProvider {\n if (l2Provider) return l2Provider;\n l2Provider = createCacheProvider();\n return l2Provider;\n}\n\n/**\n * Retorna (o crea) un TwoLevelCache por namespace.\n * Namespace recomendado: auth:employee | md:country | platform:tenant-resolve ...\n */\nexport function getTwoLevelCache<T = any>(\n namespace: string,\n opts: Partial<TwoLevelCacheOptions> = {}\n): TwoLevelCache<T> {\n const existing = twoLevelByNamespace.get(namespace);\n if (existing) return existing as TwoLevelCache<T>;\n\n const l2 = getL2();\n\n const cacheOptions: TwoLevelCacheOptions = {\n // ✅ TwoLevelCache prefija keys con namespace internamente\n namespace,\n\n ttlMsL1: opts.ttlMsL1 ?? DEFAULT_L1_TTL_MS,\n ttlMsL2: opts.ttlMsL2 ?? DEFAULT_L2_TTL_MS,\n\n // ✅ negative caching\n negativeTtlMsL1: opts.negativeTtlMsL1 ?? DEFAULT_NEG_TTL_MS,\n negativeTtlMsL2: opts.negativeTtlMsL2 ?? DEFAULT_NEG_TTL_MS,\n };\n\n const cache = new TwoLevelCache<T>(l2, cacheOptions);\n twoLevelByNamespace.set(namespace, cache as TwoLevelCache<any>);\n return cache;\n}\n\n/**\n * Helper: cache.getOrSet\n *\n * IMPORTANT:\n * - No prefijar manualmente la key.\n * - TwoLevelCache ya usa opts.namespace.\n */\nexport async function getOrSet<T>(\n namespace: string,\n key: string,\n loader: () => Promise<T | null>,\n opts: Partial<TwoLevelCacheOptions> = {}\n): Promise<T | null> {\n const cache = getTwoLevelCache<T>(namespace, opts);\n return cache.getOrSet(key, loader, opts);\n}\n\nexport async function closeCache(): Promise<void> {\n try {\n if (l2Provider && typeof (l2Provider as any).close === \"function\") {\n await (l2Provider as any).close();\n }\n } finally {\n l2Provider = null;\n twoLevelByNamespace.clear();\n }\n}\n\n/**\n * ✅ Re-exports públicos para consumo desde:\n * import type {TwoLevelCacheOptions} from \"@innvoid/getmarket-sdk/cache\";\n */\nexport type {TwoLevelCacheOptions, CacheProvider};\nexport {TwoLevelCache};\n","// packages/sdk/src/clients/cacheFactory.ts\nimport {TwoLevelCache} from \"../cache\";\nimport {createCacheProvider} from \"../cache/cacheProvider\";\n\n/**\n * Crea un TwoLevelCache por \"namespace\" (ej: \"res:variety\")\n * - L1: in-memory (TTL corto)\n * - L2: redis (TTL medio)\n *\n * Nota: createCacheProvider ya aplica REDIS_KEY_PREFIX desde env,\n * y además TwoLevelCache agrega namespace como prefijo lógico.\n */\nexport function makeRefsCache<T>(namespace: string) {\n const l2 = createCacheProvider(); // redis o noop según env\n return new TwoLevelCache<T>(l2, {\n namespace,\n ttlMsL1: 30_000,\n ttlMsL2: 300_000,\n negativeTtlMsL1: 30_000,\n negativeTtlMsL2: 30_000,\n });\n}\n","// packages/sdk/src/clients/bulkRefsClient.ts\nimport type {RequestContext} from \"../headers\";\nimport {createInternalHttpClient} from \"../internalHttpClient\";\nimport type {BulkRefsResponse, BulkUidsRequest, InternalBulkRefsOptions} from \"./types\";\nimport {makeRefsCache} from \"./cacheFactory\";\n\nfunction uniq(arr: string[]) {\n return Array.from(new Set(arr.filter(Boolean)));\n}\n\nexport function createBulkRefsClient<TRef extends { uid: string }>(args: {\n namespace: string; // cache namespace e.g. \"res:variety\"\n baseURL: string;\n apiPrefix: string;\n path: string; // e.g. \"/refs/varieties\"\n defaultTtlMsL1?: number;\n defaultTtlMsL2?: number;\n}) {\n const http = createInternalHttpClient({\n baseURL: args.baseURL,\n apiPrefix: args.apiPrefix,\n });\n\n // ✅ cache tipado\n const cache = makeRefsCache<TRef>(args.namespace);\n\n async function bulkRefs(\n uids: string[],\n opts?: InternalBulkRefsOptions\n ): Promise<BulkRefsResponse<TRef>> {\n const list = uniq(uids);\n if (list.length === 0) {\n return {ok: true, refs: [], meta: {requested: 0, returned: 0, missing: []}};\n }\n\n // 1) cache hits\n const hits: TRef[] = [];\n const missing: string[] = [];\n\n for (const uid of list) {\n const v = await cache.get(uid); // ✅ sin genéricos\n if (v) hits.push(v);\n else missing.push(uid);\n }\n\n // 2) fetch missing\n let fetched: TRef[] = [];\n if (missing.length) {\n const resp = await http.post<BulkRefsResponse<TRef>>(\n args.path,\n {uids: missing} as BulkUidsRequest,\n {\n ctx: (opts?.ctx ?? null) as RequestContext | null,\n }\n );\n\n const refs = (resp.refs ?? resp.items ?? []) as TRef[];\n fetched = refs;\n\n const ttlMsL1 = opts?.ttlMsL1 ?? args.defaultTtlMsL1;\n const ttlMsL2 = opts?.ttlMsL2 ?? args.defaultTtlMsL2;\n\n for (const ref of refs) {\n const uid = String(ref?.uid || \"\").trim();\n if (!uid) continue;\n\n await cache.set(uid, ref, {\n ttlMsL1,\n ttlMsL2,\n });\n }\n }\n\n const all = [...hits, ...fetched];\n\n // missing final (uids requested but not returned)\n const returnedSet = new Set(all.map((r) => String(r?.uid || \"\")));\n const missingFinal = list.filter((u) => !returnedSet.has(u));\n\n return {\n ok: true,\n refs: all,\n meta: {\n requested: list.length,\n returned: all.length,\n missing: missingFinal,\n },\n };\n }\n\n return {bulkRefs};\n}\n","// packages/sdk/src/clients/platformClient.ts\nimport type {PlatformResolveTenantResponse, PlatformServiceCode} from \"@innvoid/getmarket-contracts\";\nimport type {RequestContext} from \"../headers\";\nimport {createInternalHttpClient} from \"../internalHttpClient\";\nimport {makeRefsCache} from \"./cacheFactory\";\n\nexport function createPlatformClient(env: { baseURL: string; apiPrefix: string }) {\n const http = createInternalHttpClient(env);\n\n // ✅ cache tipado\n const cache = makeRefsCache<PlatformResolveTenantResponse>(\"platform:tenant\");\n\n async function resolveTenant(\n input: { company_uid: string; service: PlatformServiceCode },\n ctx?: RequestContext | null\n ) {\n const key = `${input.company_uid}:${input.service}`;\n\n const cached = await cache.get(key); // ✅ sin genéricos\n if (cached) return cached;\n\n const resp = await http.post<PlatformResolveTenantResponse>(\n \"/tenants/resolve\",\n input,\n {ctx: ctx ?? null}\n );\n\n await cache.set(key, resp);\n return resp;\n }\n\n return {resolveTenant};\n}\n","// packages/sdk/src/clients/resClient.ts\nimport type {ResVarietyRef, ResVarietiesRefsResponse} from \"@innvoid/getmarket-contracts\";\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createResClient() {\n const env = readServiceEnv(\"RES\", {apiPrefix: \"/internal/v1\"});\n\n const varieties = createBulkRefsClient<ResVarietyRef>({\n namespace: \"res:variety\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/varieties\",\n });\n\n return {\n varietiesRefs: (uids: string[], opts?: any) => varieties.bulkRefs(uids, opts) as Promise<ResVarietiesRefsResponse>,\n };\n}\n","// packages/sdk/src/clients/mdClient.ts\nimport type {\n MdMeasureRef,\n MdMeasuresRefsResponse,\n MdMeasureTypeRef,\n MdMeasureTypesRefsResponse,\n MdCountryRef,\n MdCountriesRefsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMdClient() {\n const env = readServiceEnv(\"MD\", {apiPrefix: \"/internal/v1\"});\n\n const measures = createBulkRefsClient<MdMeasureRef>({\n namespace: \"md:measure\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/measures\",\n });\n\n const measureTypes = createBulkRefsClient<MdMeasureTypeRef>({\n namespace: \"md:measure_type\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/measure-types\",\n });\n\n const countries = createBulkRefsClient<MdCountryRef>({\n namespace: \"md:country\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/countries\",\n });\n\n return {\n measuresRefs: (uids: string[], opts?: any) => measures.bulkRefs(uids, opts) as Promise<MdMeasuresRefsResponse>,\n measureTypesRefs: (uids: string[], opts?: any) => measureTypes.bulkRefs(uids, opts) as Promise<MdMeasureTypesRefsResponse>,\n countriesRefs: (uids: string[], opts?: any) => countries.bulkRefs(uids, opts) as Promise<MdCountriesRefsResponse>,\n };\n}\n","// sdk/src/core/http.ts\nimport axios, {AxiosInstance, AxiosRequestConfig} from \"axios\";\n\nexport type HttpClient = AxiosInstance;\n\nexport type HttpClientOpts = {\n baseURL: string;\n timeoutMs?: number;\n headers?: Record<string, string>;\n};\n\nexport function createHttpClient(opts: HttpClientOpts): HttpClient {\n return axios.create({\n baseURL: opts.baseURL.replace(/\\/+$/, \"\"),\n timeout: opts.timeoutMs ?? 8000,\n headers: opts.headers ?? {},\n } satisfies AxiosRequestConfig);\n}\n","// packages/sdk/src/clients/fisClient.ts\nimport type {\n UID,\n Code,\n FisTaxRef,\n FisTaxesRefsResponse,\n FisDocumentRef,\n FisDocumentsRefsResponse,\n FisSubmissionRef,\n FisSubmissionsRefsResponse,\n FisCalculateRequest,\n FisCalculateResponse,\n FisBuildDocumentRequest,\n FisBuildDocumentResponse,\n FisSignDocumentRequest,\n FisSignDocumentResponse,\n FisSubmitDocumentRequest,\n FisSubmitDocumentResponse,\n FisCancelDocumentRequest,\n FisCancelDocumentResponse,\n FisReserveFolioRequest,\n FisReserveFolioResponse,\n FisConsumeFolioRequest,\n FisConsumeFolioResponse,\n FisDocumentsQueryRequest,\n FisDocumentsQueryResponse,\n FisSubmissionRetryRequest,\n FisSubmissionRetryResponse,\n FisDocumentResponse,\n FisSnapshotResponse,\n FisSubmissionResponse,\n FisStatusEventsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\nimport {createHttpClient, type HttpClient} from \"../core\";\n\nexport function createFisClient() {\n const env = readServiceEnv(\"FIS\", {apiPrefix: \"/internal/v1\"});\n const http: HttpClient = createHttpClient({\n baseURL: `${env.baseURL}${env.apiPrefix}`,\n timeoutMs: 8000,\n });\n\n const taxes = createBulkRefsClient<FisTaxRef>({\n namespace: \"fis:tax\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/taxes\",\n });\n\n const documents = createBulkRefsClient<FisDocumentRef>({\n namespace: \"fis:document\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/documents\",\n });\n\n const submissions = createBulkRefsClient<FisSubmissionRef>({\n namespace: \"fis:submission\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/submissions\",\n });\n\n return {\n // -----------------------------------------------------------------------\n // Bulk refs\n // -----------------------------------------------------------------------\n taxesRefs: (uids: string[], opts?: any) =>\n taxes.bulkRefs(uids, opts) as Promise<FisTaxesRefsResponse>,\n\n documentsRefs: (uids: string[], opts?: any) =>\n documents.bulkRefs(uids, opts) as Promise<FisDocumentsRefsResponse>,\n\n submissionsRefs: (uids: string[], opts?: any) =>\n submissions.bulkRefs(uids, opts) as Promise<FisSubmissionsRefsResponse>,\n\n // -----------------------------------------------------------------------\n // Fiscal calculation / build / lifecycle\n // -----------------------------------------------------------------------\n calculate: async (body: FisCalculateRequest): Promise<FisCalculateResponse> => {\n const {data} = await http.post(\"/calculate\", body);\n return data;\n },\n\n buildDocument: async (body: FisBuildDocumentRequest): Promise<FisBuildDocumentResponse> => {\n const {data} = await http.post(\"/documents/build\", body);\n return data;\n },\n\n signDocument: async (body: FisSignDocumentRequest): Promise<FisSignDocumentResponse> => {\n const {data} = await http.post(\"/documents/sign\", body);\n return data;\n },\n\n submitDocument: async (body: FisSubmitDocumentRequest): Promise<FisSubmitDocumentResponse> => {\n const {data} = await http.post(\"/documents/submit\", body);\n return data;\n },\n\n cancelDocument: async (body: FisCancelDocumentRequest): Promise<FisCancelDocumentResponse> => {\n const {data} = await http.post(\"/documents/cancel\", body);\n return data;\n },\n\n // -----------------------------------------------------------------------\n // Folios / series\n // -----------------------------------------------------------------------\n reserveFolio: async (body: FisReserveFolioRequest): Promise<FisReserveFolioResponse> => {\n const {data} = await http.post(\"/folios/reserve\", body);\n return data;\n },\n\n consumeFolio: async (body: FisConsumeFolioRequest): Promise<FisConsumeFolioResponse> => {\n const {data} = await http.post(\"/folios/consume\", body);\n return data;\n },\n\n // -----------------------------------------------------------------------\n // Queries / detail\n // -----------------------------------------------------------------------\n queryDocuments: async (params: FisDocumentsQueryRequest): Promise<FisDocumentsQueryResponse> => {\n const {data} = await http.get(\"/documents\", {params});\n return data;\n },\n\n getDocumentByUid: async (uid: UID): Promise<FisDocumentResponse> => {\n const {data} = await http.get(`/documents/${uid}`);\n return data;\n },\n\n getSnapshotByUid: async (uid: UID): Promise<FisSnapshotResponse> => {\n const {data} = await http.get(`/snapshots/${uid}`);\n return data;\n },\n\n getSubmissionByUid: async (uid: UID): Promise<FisSubmissionResponse> => {\n const {data} = await http.get(`/submissions/${uid}`);\n return data;\n },\n\n getStatusEventsByDocumentUid: async (documentUid: UID): Promise<FisStatusEventsResponse> => {\n const {data} = await http.get(`/documents/${documentUid}/status-events`);\n return data;\n },\n\n retrySubmission: async (body: FisSubmissionRetryRequest): Promise<FisSubmissionRetryResponse> => {\n const {data} = await http.post(\"/submissions/retry\", body);\n return data;\n },\n };\n}\n","// packages/sdk/src/clients/mediaClient.ts\nimport type {MediaFileRef, MediaFilesRefsResponse} from \"@innvoid/getmarket-contracts\";\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMediaClient() {\n const env = readServiceEnv(\"MEDIA\", {apiPrefix: \"/internal/v1\"});\n\n const files = createBulkRefsClient<MediaFileRef>({\n namespace: \"media:file\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/files\",\n });\n\n return {\n filesRefs: (uids: string[], opts?: any) =>\n files.bulkRefs(uids, opts) as Promise<MediaFilesRefsResponse>,\n };\n}\n","// packages/sdk/src/clients/mkpClient.ts\nimport type {\n MkpPublicationRef,\n MkpPublicationsRefsResponse,\n MkpEventRef,\n MkpEventsRefsResponse,\n MkpPromotionRef,\n MkpPromotionsRefsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMkpClient() {\n const env = readServiceEnv(\"MKP\", {apiPrefix: \"/internal/v1\"});\n\n const publications = createBulkRefsClient<MkpPublicationRef>({\n namespace: \"mkp:publication\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/publications\",\n });\n\n const events = createBulkRefsClient<MkpEventRef>({\n namespace: \"mkp:event\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/events\",\n });\n\n const promotions = createBulkRefsClient<MkpPromotionRef>({\n namespace: \"mkp:promotion\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/promotions\",\n });\n\n return {\n publicationsRefs: (uids: string[], opts?: any) =>\n publications.bulkRefs(uids, opts) as Promise<MkpPublicationsRefsResponse>,\n\n eventsRefs: (uids: string[], opts?: any) =>\n events.bulkRefs(uids, opts) as Promise<MkpEventsRefsResponse>,\n\n promotionsRefs: (uids: string[], opts?: any) =>\n promotions.bulkRefs(uids, opts) as Promise<MkpPromotionsRefsResponse>,\n };\n}\n"],"mappings":"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","names":["fs","axios"]}
1
+ {"version":3,"sources":["../../src/clients/index.ts","../../src/clients/env.ts","../../src/internalHttpClient.ts","../../src/headers/constants.ts","../../src/cache/redisCacheProvider.ts","../../src/cache/cacheProvider.ts","../../src/cache/ttlCache.ts","../../src/cache/twoLevelCache.ts","../../src/cache/index.ts","../../src/clients/cacheFactory.ts","../../src/clients/bulkRefsClient.ts","../../src/clients/platformClient.ts","../../src/clients/resClient.ts","../../src/clients/mdClient.ts","../../src/core/http.ts","../../src/clients/fisClient.ts","../../src/clients/mediaClient.ts","../../src/clients/mkpClient.ts","../../src/clients/payClient.ts"],"sourcesContent":["// packages/sdk/src/clients/index.ts\nexport * from \"./types\";\nexport * from \"./env\";\nexport * from \"./bulkRefsClient\";\nexport * from \"./platformClient\";\nexport * from \"./resClient\";\nexport * from \"./mdClient\";\nexport * from \"./fisClient\";\nexport * from \"./mediaClient\";\nexport * from \"./mkpClient\";\nexport * from \"./payClient\";\n","// packages/sdk/src/clients/env.ts\nimport type {ServiceClientEnv} from \"./types\";\n\nfunction must(v: string | undefined, name: string): string {\n const s = (v || \"\").trim();\n if (!s) throw new Error(`Missing env var: ${name}`);\n return s;\n}\n\nexport function readServiceEnv(prefix: string, defaults?: Partial<ServiceClientEnv>): ServiceClientEnv {\n const baseURL = (process.env[`${prefix}_BASE_URL`] || defaults?.baseURL || \"\").trim();\n const apiPrefix = (process.env[`${prefix}_API_PREFIX`] || defaults?.apiPrefix || \"/internal/v1\").trim();\n\n return {\n baseURL: must(baseURL, `${prefix}_BASE_URL`),\n apiPrefix,\n };\n}\n","// packages/sdk/src/internalHttpClient.ts\nimport fs from \"fs\";\nimport {\n HEADER_INTERNAL_API_KEY,\n HEADER_REQUEST_ID,\n HEADER_COMPANY_UID,\n HEADER_BRANCH_UID,\n HEADER_EMPLOYEE_UID\n} from \"./headers\";\nimport type {RequestContext} from \"./headers\";\n\nexport type InternalHttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\nexport type InternalHttpClientOptions = {\n baseURL: string; // ej: http://platform:3010\n apiPrefix?: string; // ej: /internal/v1\n timeoutMs?: number; // default 15000\n retries?: number; // default 2\n retryDelayMs?: number; // default 250\n apiKey?: string | null; // override opcional\n};\n\nexport type InternalRequestOptions = {\n method: InternalHttpMethod;\n path: string; // \"/tenants/provision\"\n query?: Record<string, string | number | boolean | null | undefined>;\n body?: any; // JSON\n headers?: Record<string, string | undefined>;\n ctx?: RequestContext | null;\n\n idempotencyKey?: string | null;\n\n expectJson?: boolean; // default true\n};\n\nexport class InternalHttpError extends Error {\n status: number;\n code: string;\n details: any;\n\n constructor(status: number, code: string, message: string, details?: any) {\n super(message);\n this.status = status;\n this.code = code;\n this.details = details ?? null;\n }\n}\n\nfunction readSecretFile(path?: string): string | null {\n if (!path) return null;\n try {\n const v = fs.readFileSync(path, \"utf8\").trim();\n return v.length ? v : null;\n } catch {\n return null;\n }\n}\n\nfunction splitKeys(v?: string | null): string[] {\n if (!v) return [];\n return v.split(\",\").map((s) => s.trim()).filter(Boolean);\n}\n\n/**\n * ✅ MISMA lógica que internalAuth.ts:\n * - INTERNAL_API_KEY_FILE tiene prioridad\n * - fallback a INTERNAL_API_KEY\n * - permite CSV\n *\n * Nota: Para enviar, usamos la primera key disponible.\n */\nfunction getInternalApiKey(override?: string | null): string | null {\n if (override && override.trim()) return override.trim();\n\n const fileKey = readSecretFile(process.env.INTERNAL_API_KEY_FILE);\n const envKey = (process.env.INTERNAL_API_KEY || \"\").trim();\n const raw = fileKey || envKey;\n const keys = splitKeys(raw);\n return keys[0] || null;\n}\n\nfunction normalizeBaseURL(baseURL: string): string {\n const b = (baseURL || \"\").trim();\n if (!b) throw new Error(\"InternalHttpClient: baseURL is required\");\n return b.replace(/\\/+$/g, \"\");\n}\n\nfunction normalizePrefix(prefix?: string): string {\n const p = (prefix || \"\").trim();\n if (!p) return \"\";\n const withSlash = p.startsWith(\"/\") ? p : `/${p}`;\n return withSlash.replace(/\\/+$/g, \"\");\n}\n\nfunction buildQuery(query?: InternalRequestOptions[\"query\"]): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === null || v === undefined) continue;\n params.set(k, String(v));\n }\n const s = params.toString();\n return s ? `?${s}` : \"\";\n}\n\n/**\n * ✅ Propaga contexto estándar (SDK)\n * - x-request-id\n * - x-company\n * - x-branch\n * - x-employee-uid\n */\nexport function buildInternalHeaders(\n ctx?: RequestContext | null,\n extra?: Record<string, string | undefined>,\n idempotencyKey?: string | null\n): Record<string, string> {\n const h: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (ctx?.requestId) h[HEADER_REQUEST_ID] = String(ctx.requestId);\n if (ctx?.company_uid) h[HEADER_COMPANY_UID] = String(ctx.company_uid);\n if (ctx?.branch_uid) h[HEADER_BRANCH_UID] = String(ctx.branch_uid);\n if (ctx?.employee_uid) h[HEADER_EMPLOYEE_UID] = String(ctx.employee_uid);\n\n if (idempotencyKey && idempotencyKey.trim()) {\n h[\"Idempotency-Key\"] = idempotencyKey.trim();\n }\n\n for (const [k, v] of Object.entries(extra || {})) {\n if (v === undefined) continue;\n const vv = String(v).trim();\n if (!vv) continue;\n h[k] = vv;\n }\n\n return h;\n}\n\nasync function sleep(ms: number) {\n await new Promise((r) => setTimeout(r, ms));\n}\n\nfunction shouldRetry(status: number | null, err: any): boolean {\n if (err?.name === \"AbortError\") return true;\n if (!status) return true;\n if (status >= 500) return true;\n if (status === 429) return true;\n return false;\n}\n\nasync function safeReadJson(res: Response): Promise<any> {\n const text = await res.text();\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return {raw: text};\n }\n}\n\n/**\n * Cliente interno universal (fetch)\n */\nexport function createInternalHttpClient(opts: InternalHttpClientOptions) {\n const baseURL = normalizeBaseURL(opts.baseURL);\n const apiPrefix = normalizePrefix(opts.apiPrefix);\n const timeoutMs = typeof opts.timeoutMs === \"number\" ? opts.timeoutMs : 15000;\n const retries = typeof opts.retries === \"number\" ? opts.retries : 2;\n const retryDelayMs = typeof opts.retryDelayMs === \"number\" ? opts.retryDelayMs : 250;\n\n const apiKey = getInternalApiKey(opts.apiKey ?? null);\n if (!apiKey) {\n throw new Error(\n \"InternalHttpClient: INTERNAL_API_KEY or INTERNAL_API_KEY_FILE is required to call internal endpoints.\"\n );\n }\n\n async function request<T = any>(r: InternalRequestOptions): Promise<T> {\n const path = (r.path || \"\").trim();\n if (!path.startsWith(\"/\")) {\n throw new Error(`InternalHttpClient: path must start with '/': ${path}`);\n }\n\n const url = `${baseURL}${apiPrefix}${path}${buildQuery(r.query)}`;\n\n const headers = buildInternalHeaders(r.ctx ?? null, r.headers, r.idempotencyKey ?? null);\n if (apiKey != null) {\n headers[HEADER_INTERNAL_API_KEY] = apiKey;\n }\n\n const method = r.method;\n const expectJson = r.expectJson !== false;\n\n const body =\n method === \"GET\" || method === \"DELETE\"\n ? undefined\n : r.body !== undefined\n ? JSON.stringify(r.body)\n : undefined;\n\n let attempt = 0;\n let lastErr: any = null;\n\n while (attempt <= retries) {\n attempt++;\n\n const ac = new AbortController();\n const to = setTimeout(() => ac.abort(), timeoutMs);\n\n try {\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: ac.signal,\n });\n\n clearTimeout(to);\n\n if (res.ok) {\n if (!expectJson) return (undefined as any) as T;\n const data = await safeReadJson(res);\n return data as T;\n }\n\n const errBody = await safeReadJson(res);\n const status = res.status;\n\n if (attempt <= retries && shouldRetry(status, null)) {\n lastErr = new InternalHttpError(\n status,\n \"INTERNAL_HTTP_RETRY\",\n `Retryable internal HTTP error (${status})`,\n {url, status, response: errBody, attempt}\n );\n await sleep(retryDelayMs * attempt);\n continue;\n }\n\n throw new InternalHttpError(\n status,\n \"INTERNAL_HTTP_ERROR\",\n `Internal HTTP error (${status})`,\n {url, status, response: errBody}\n );\n } catch (e: any) {\n clearTimeout(to);\n\n if (attempt <= retries && shouldRetry(null, e)) {\n lastErr = e;\n await sleep(retryDelayMs * attempt);\n continue;\n }\n\n if (e instanceof InternalHttpError) throw e;\n\n throw new InternalHttpError(\n 0,\n \"INTERNAL_HTTP_NETWORK_ERROR\",\n e?.message || \"Internal HTTP network error\",\n {url, attempt, error: String(e)}\n );\n }\n }\n\n throw lastErr || new InternalHttpError(0, \"INTERNAL_HTTP_FAILED\", \"Internal request failed\");\n }\n\n return {\n request,\n get: <T = any>(path: string, o?: Omit<InternalRequestOptions, \"method\" | \"path\">) =>\n request<T>({...(o || {}), method: \"GET\", path}),\n post: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"POST\", path, body}),\n put: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"PUT\", path, body}),\n patch: <T = any>(path: string, body?: any, o?: Omit<InternalRequestOptions, \"method\" | \"path\" | \"body\">) =>\n request<T>({...(o || {}), method: \"PATCH\", path, body}),\n del: <T = any>(path: string, o?: Omit<InternalRequestOptions, \"method\" | \"path\">) =>\n request<T>({...(o || {}), method: \"DELETE\", path}),\n };\n}\n","// packages/sdk/src/constants.ts\nexport const HEADER_REQUEST_ID = \"x-request-id\";\n\nexport const HEADER_COMPANY_UID = \"x-company\";\nexport const HEADER_BRANCH_UID = \"x-branch\";\nexport const HEADER_EMPLOYEE_UID = \"x-employee-uid\";\n\nexport const HEADER_INTERNAL_API_KEY = \"x-internal-api-key\";\nexport const HEADER_AUTHORIZATION = \"authorization\";\n","// clients/cache/redisCacheProvider.ts\nimport {createClient, type RedisClientType} from \"redis\";\nimport type {CacheProvider, CacheSetOptions, CacheValue} from \"./cacheProvider\";\n\nexport type RedisCacheProviderOptions = {\n url?: string;\n\n host?: string;\n port?: number;\n password?: string;\n db?: number;\n\n tls?: boolean;\n\n connectTimeoutMs?: number;\n\n keyPrefix?: string;\n};\n\nfunction buildRedisUrl(opts: RedisCacheProviderOptions): string | undefined {\n if (opts.url && opts.url.trim()) return opts.url.trim();\n\n if (!opts.host) return undefined;\n const port = opts.port ?? 6379;\n const db = opts.db ?? 0;\n\n const auth = opts.password ? `:${encodeURIComponent(opts.password)}@` : \"\";\n return `redis://${auth}${opts.host}:${port}/${db}`;\n}\n\nexport class RedisCacheProvider implements CacheProvider {\n readonly kind = \"redis\" as const;\n\n // ✅ tip \"amplio\" para evitar TS2322 por typings genéricos\n private client: RedisClientType<any, any, any>;\n private ready = false;\n private readonly keyPrefix?: string;\n\n constructor(private readonly opts: RedisCacheProviderOptions) {\n const url = buildRedisUrl(opts);\n if (!url) {\n throw new Error(\"[RedisCacheProvider] Missing redis config (REDIS_URL or REDIS_HOST)\");\n }\n\n this.keyPrefix = opts.keyPrefix?.trim() || undefined;\n\n this.client = createClient({\n url,\n socket: {\n connectTimeout: opts.connectTimeoutMs ?? 3000,\n tls: opts.tls ? true : undefined,\n },\n }) as RedisClientType<any, any, any>;\n\n this.client.on(\"error\", (err: unknown) => {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === \"object\" && err !== null && \"message\" in err\n ? String((err as any).message)\n : String(err);\n\n console.error(\"[redis] error\", msg, err);\n });\n }\n\n private k(key: string): string {\n if (!this.keyPrefix) return key;\n return `${this.keyPrefix}:${key}`;\n }\n\n private async ensureConnected() {\n if (this.ready) return;\n await this.client.connect();\n this.ready = true;\n }\n\n async get(key: string): Promise<CacheValue | null> {\n await this.ensureConnected();\n const v = (await this.client.get(this.k(key))) as string | null;\n return v ?? null;\n }\n\n async set(key: string, value: CacheValue, options?: CacheSetOptions): Promise<void> {\n await this.ensureConnected();\n\n const ttlMs = options?.ttlMs;\n if (ttlMs && ttlMs > 0) {\n await this.client.set(this.k(key), value, {PX: ttlMs});\n return;\n }\n\n await this.client.set(this.k(key), value);\n }\n\n async del(key: string): Promise<void> {\n await this.ensureConnected();\n await this.client.del(this.k(key));\n }\n\n async close(): Promise<void> {\n try {\n if (this.ready) await this.client.quit();\n } catch {\n try {\n await this.client.disconnect();\n } catch {\n }\n } finally {\n this.ready = false;\n }\n }\n}\n","// clients/cache/cacheProvider.ts\nimport type {RedisCacheProviderOptions} from \"./redisCacheProvider\";\nimport {RedisCacheProvider} from \"./redisCacheProvider\";\n\nexport type CacheValue = string;\n\nexport type CacheSetOptions = {\n ttlMs?: number; // TTL en milisegundos (PX)\n};\n\nexport interface CacheProvider {\n readonly kind: \"redis\" | \"noop\";\n\n get(key: string): Promise<CacheValue | null>;\n\n set(key: string, value: CacheValue, options?: CacheSetOptions): Promise<void>;\n\n del(key: string): Promise<void>;\n\n /**\n * Cierra conexiones si aplica.\n */\n close(): Promise<void>;\n}\n\nexport class NoopCacheProvider implements CacheProvider {\n readonly kind = \"noop\" as const;\n\n async get(_key: string): Promise<CacheValue | null> {\n return null;\n }\n\n async set(_key: string, _value: CacheValue, _options?: CacheSetOptions): Promise<void> {\n return;\n }\n\n async del(_key: string): Promise<void> {\n return;\n }\n\n async close(): Promise<void> {\n return;\n }\n}\n\nexport type CacheProviderFactoryOptions = {\n /**\n * Si false, devuelve Noop (útil en local si no quieres Redis).\n * Default: true si hay REDIS_URL o REDIS_HOST.\n */\n enabled?: boolean;\n\n /**\n * Prefijo global opcional para keys.\n * Ej: \"getmarket:erp\"\n */\n keyPrefix?: string;\n\n /**\n * Redis options\n */\n redis?: Partial<RedisCacheProviderOptions>;\n};\n\n/**\n * Factory simple para L2 (Redis).\n * - Si no está habilitado / no hay config => Noop\n * - Si hay config => RedisCacheProvider\n */\nexport function createCacheProvider(opts: CacheProviderFactoryOptions = {}): CacheProvider {\n const envHasRedis = Boolean(process.env.REDIS_URL || process.env.REDIS_HOST);\n\n const enabled =\n typeof opts.enabled === \"boolean\" ? opts.enabled : envHasRedis;\n\n if (!enabled) return new NoopCacheProvider();\n\n // Construye options redis desde env + overrides\n const redisOpts: RedisCacheProviderOptions = {\n url: process.env.REDIS_URL,\n host: process.env.REDIS_HOST,\n port: process.env.REDIS_PORT ? Number(process.env.REDIS_PORT) : undefined,\n password: process.env.REDIS_PASSWORD,\n db: process.env.REDIS_DB ? Number(process.env.REDIS_DB) : undefined,\n tls: (process.env.REDIS_TLS || \"\").toLowerCase() === \"true\",\n connectTimeoutMs: process.env.REDIS_CONNECT_TIMEOUT_MS\n ? Number(process.env.REDIS_CONNECT_TIMEOUT_MS)\n : 3000,\n keyPrefix: opts.keyPrefix || process.env.REDIS_KEY_PREFIX || undefined,\n ...(opts.redis || {}),\n };\n\n return new RedisCacheProvider(redisOpts);\n}\n","// clients/cache/ttlCache.ts\ntype CacheEntry<T> = { value: T; expiresAt: number };\n\nexport class TtlCache<T> {\n private store = new Map<string, CacheEntry<T>>();\n\n constructor(private defaultTtlMs: number) {\n }\n\n get(key: string): T | null {\n const e = this.store.get(key);\n if (!e) return null;\n if (Date.now() > e.expiresAt) {\n this.store.delete(key);\n return null;\n }\n return e.value;\n }\n\n set(key: string, value: T, ttlMs?: number): void {\n this.store.set(key, {value, expiresAt: Date.now() + (ttlMs ?? this.defaultTtlMs)});\n }\n\n del(key: string): void {\n this.store.delete(key);\n }\n}\n","// clients/cache/twoLevelCache.ts\nimport type {CacheProvider} from \"./cacheProvider\";\nimport {TtlCache} from \"./ttlCache\";\n\nexport type TwoLevelCacheOptions = {\n /**\n * TTL para L1 (in-memory).\n * Default: 2 min\n */\n ttlMsL1?: number;\n\n /**\n * TTL para L2 (redis).\n * Default: 10 min\n */\n ttlMsL2?: number;\n\n /**\n * Si quieres cachear \"no encontrado\" (null) por un TTL corto,\n * para evitar golpear upstream repetidamente.\n * Default: 0 (deshabilitado)\n */\n negativeTtlMsL1?: number;\n negativeTtlMsL2?: number;\n\n /**\n * Prefijo lógico extra por instancia (además del keyPrefix del provider).\n * Ej: \"res:variety\"\n */\n namespace?: string;\n};\n\ntype Loader<T> = () => Promise<T>;\n\nfunction safeJsonParse<T>(raw: string): T | null {\n try {\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n}\n\nfunction safeJsonStringify(v: any): string | null {\n try {\n return JSON.stringify(v);\n } catch {\n return null;\n }\n}\n\nexport class TwoLevelCache<T> {\n private readonly l1: TtlCache<T | null>;\n private readonly inflight = new Map<string, Promise<T>>();\n\n constructor(\n private readonly l2: CacheProvider,\n private readonly opts: TwoLevelCacheOptions = {}\n ) {\n // El TTL real lo controla set(key, ttl), pero TTLCache necesita \"default ttl\"\n const defaultTtl = this.opts.ttlMsL1 ?? 2 * 60 * 1000;\n this.l1 = new TtlCache<T | null>(defaultTtl);\n }\n\n private key(k: string): string {\n const ns = (this.opts.namespace || \"\").trim();\n return ns ? `${ns}:${k}` : k;\n }\n\n /**\n * GET \"best effort\": primero L1, luego L2.\n * (No llama loader)\n */\n async get(k: string): Promise<T | null> {\n const key = this.key(k);\n\n const v1 = this.l1.get(key);\n if (v1 !== undefined) return v1; // Ojo: TTLCache puede devolver null también\n\n const raw = await this.l2.get(key);\n if (!raw) return null;\n\n const parsed = safeJsonParse<T | null>(raw);\n if (parsed === null && raw !== \"null\") {\n // payload corrupto\n return null;\n }\n\n // Rehidrata L1 con ttl L1\n this.l1.set(key, parsed, this.opts.ttlMsL1);\n return parsed;\n }\n\n async set(k: string, value: T | null, ttlOverride?: { ttlMsL1?: number; ttlMsL2?: number }) {\n const key = this.key(k);\n\n const ttlL1 = ttlOverride?.ttlMsL1 ?? this.opts.ttlMsL1 ?? 2 * 60 * 1000;\n const ttlL2 = ttlOverride?.ttlMsL2 ?? this.opts.ttlMsL2 ?? 10 * 60 * 1000;\n\n this.l1.set(key, value, ttlL1);\n\n const raw = safeJsonStringify(value);\n if (raw == null) return;\n\n await this.l2.set(key, raw, {ttlMs: ttlL2});\n }\n\n async del(k: string) {\n const key = this.key(k);\n this.l1.del?.(key as any); // si tu TtlCache no tiene del(), ignora (ver comentario abajo)\n await this.l2.del(key);\n }\n\n /**\n * Cache-aside real con L1 + L2 + loader.\n *\n * - Dedup de concurrencia por key (inflight)\n * - Soporta negative caching (si loader retorna null)\n */\n async getOrSet(\n k: string,\n loader: Loader<T | null>,\n options?: TwoLevelCacheOptions\n ): Promise<T | null> {\n const key = this.key(k);\n\n // 1) L1\n const v1 = this.l1.get(key);\n if (v1 !== undefined) return v1;\n\n // 2) L2\n const raw = await this.l2.get(key);\n if (raw) {\n const parsed = safeJsonParse<T | null>(raw);\n if (parsed !== null || raw === \"null\") {\n this.l1.set(key, parsed, options?.ttlMsL1 ?? this.opts.ttlMsL1);\n return parsed;\n }\n }\n\n // 3) Dedup inflight (anti stampede)\n if (this.inflight.has(key)) {\n return this.inflight.get(key)! as any;\n }\n\n const promise = (async () => {\n try {\n const value = await loader();\n\n const ttlMsL1 = options?.ttlMsL1 ?? this.opts.ttlMsL1 ?? 2 * 60 * 1000;\n const ttlMsL2 = options?.ttlMsL2 ?? this.opts.ttlMsL2 ?? 10 * 60 * 1000;\n\n // negative caching\n const negL1 = options?.negativeTtlMsL1 ?? this.opts.negativeTtlMsL1 ?? 0;\n const negL2 = options?.negativeTtlMsL2 ?? this.opts.negativeTtlMsL2 ?? 0;\n\n if (value === null) {\n if (negL1 > 0) this.l1.set(key, null, negL1);\n if (negL2 > 0) await this.l2.set(key, \"null\", {ttlMs: negL2});\n return null;\n }\n\n // normal set\n this.l1.set(key, value, ttlMsL1);\n\n const rawValue = safeJsonStringify(value);\n if (rawValue != null) {\n await this.l2.set(key, rawValue, {ttlMs: ttlMsL2});\n }\n\n return value;\n } finally {\n this.inflight.delete(key);\n }\n })();\n\n this.inflight.set(key, promise as any);\n return promise;\n }\n}\n","// packages/sdk/src/cache/index.ts\nimport {createCacheProvider, type CacheProvider} from \"./cacheProvider\";\nimport {TwoLevelCache, type TwoLevelCacheOptions} from \"./twoLevelCache\";\n\nconst envInt = (v?: string, dflt: number = 0) => {\n const n = Number(v);\n return Number.isFinite(n) && n > 0 ? Math.floor(n) : dflt;\n};\n\nconst DEFAULT_L1_TTL_MS = envInt(process.env.CACHE_L1_DEFAULT_TTL_MS, 30_000);\nconst DEFAULT_L2_TTL_MS = envInt(process.env.CACHE_L2_DEFAULT_TTL_MS, 300_000);\nconst DEFAULT_NEG_TTL_MS = envInt(process.env.CACHE_NEGATIVE_TTL_MS, 30_000);\n\nlet l2Provider: CacheProvider | null = null;\nconst twoLevelByNamespace = new Map<string, TwoLevelCache<any>>();\n\nfunction getL2(): CacheProvider {\n if (l2Provider) return l2Provider;\n l2Provider = createCacheProvider();\n return l2Provider;\n}\n\n/**\n * Retorna (o crea) un TwoLevelCache por namespace.\n * Namespace recomendado: auth:employee | md:country | platform:tenant-resolve ...\n */\nexport function getTwoLevelCache<T = any>(\n namespace: string,\n opts: Partial<TwoLevelCacheOptions> = {}\n): TwoLevelCache<T> {\n const existing = twoLevelByNamespace.get(namespace);\n if (existing) return existing as TwoLevelCache<T>;\n\n const l2 = getL2();\n\n const cacheOptions: TwoLevelCacheOptions = {\n // ✅ TwoLevelCache prefija keys con namespace internamente\n namespace,\n\n ttlMsL1: opts.ttlMsL1 ?? DEFAULT_L1_TTL_MS,\n ttlMsL2: opts.ttlMsL2 ?? DEFAULT_L2_TTL_MS,\n\n // ✅ negative caching\n negativeTtlMsL1: opts.negativeTtlMsL1 ?? DEFAULT_NEG_TTL_MS,\n negativeTtlMsL2: opts.negativeTtlMsL2 ?? DEFAULT_NEG_TTL_MS,\n };\n\n const cache = new TwoLevelCache<T>(l2, cacheOptions);\n twoLevelByNamespace.set(namespace, cache as TwoLevelCache<any>);\n return cache;\n}\n\n/**\n * Helper: cache.getOrSet\n *\n * IMPORTANT:\n * - No prefijar manualmente la key.\n * - TwoLevelCache ya usa opts.namespace.\n */\nexport async function getOrSet<T>(\n namespace: string,\n key: string,\n loader: () => Promise<T | null>,\n opts: Partial<TwoLevelCacheOptions> = {}\n): Promise<T | null> {\n const cache = getTwoLevelCache<T>(namespace, opts);\n return cache.getOrSet(key, loader, opts);\n}\n\nexport async function closeCache(): Promise<void> {\n try {\n if (l2Provider && typeof (l2Provider as any).close === \"function\") {\n await (l2Provider as any).close();\n }\n } finally {\n l2Provider = null;\n twoLevelByNamespace.clear();\n }\n}\n\n/**\n * ✅ Re-exports públicos para consumo desde:\n * import type {TwoLevelCacheOptions} from \"@innvoid/getmarket-sdk/cache\";\n */\nexport type {TwoLevelCacheOptions, CacheProvider};\nexport {TwoLevelCache};\n","// packages/sdk/src/clients/cacheFactory.ts\nimport {TwoLevelCache} from \"../cache\";\nimport {createCacheProvider} from \"../cache/cacheProvider\";\n\n/**\n * Crea un TwoLevelCache por \"namespace\" (ej: \"res:variety\")\n * - L1: in-memory (TTL corto)\n * - L2: redis (TTL medio)\n *\n * Nota: createCacheProvider ya aplica REDIS_KEY_PREFIX desde env,\n * y además TwoLevelCache agrega namespace como prefijo lógico.\n */\nexport function makeRefsCache<T>(namespace: string) {\n const l2 = createCacheProvider(); // redis o noop según env\n return new TwoLevelCache<T>(l2, {\n namespace,\n ttlMsL1: 30_000,\n ttlMsL2: 300_000,\n negativeTtlMsL1: 30_000,\n negativeTtlMsL2: 30_000,\n });\n}\n","// packages/sdk/src/clients/bulkRefsClient.ts\nimport type {RequestContext} from \"../headers\";\nimport {createInternalHttpClient} from \"../internalHttpClient\";\nimport type {BulkRefsResponse, BulkUidsRequest, InternalBulkRefsOptions} from \"./types\";\nimport {makeRefsCache} from \"./cacheFactory\";\n\nfunction uniq(arr: string[]) {\n return Array.from(new Set(arr.filter(Boolean)));\n}\n\nexport function createBulkRefsClient<TRef extends { uid: string }>(args: {\n namespace: string; // cache namespace e.g. \"res:variety\"\n baseURL: string;\n apiPrefix: string;\n path: string; // e.g. \"/refs/varieties\"\n defaultTtlMsL1?: number;\n defaultTtlMsL2?: number;\n}) {\n const http = createInternalHttpClient({\n baseURL: args.baseURL,\n apiPrefix: args.apiPrefix,\n });\n\n // ✅ cache tipado\n const cache = makeRefsCache<TRef>(args.namespace);\n\n async function bulkRefs(\n uids: string[],\n opts?: InternalBulkRefsOptions\n ): Promise<BulkRefsResponse<TRef>> {\n const list = uniq(uids);\n if (list.length === 0) {\n return {ok: true, refs: [], meta: {requested: 0, returned: 0, missing: []}};\n }\n\n // 1) cache hits\n const hits: TRef[] = [];\n const missing: string[] = [];\n\n for (const uid of list) {\n const v = await cache.get(uid); // ✅ sin genéricos\n if (v) hits.push(v);\n else missing.push(uid);\n }\n\n // 2) fetch missing\n let fetched: TRef[] = [];\n if (missing.length) {\n const resp = await http.post<BulkRefsResponse<TRef>>(\n args.path,\n {uids: missing} as BulkUidsRequest,\n {\n ctx: (opts?.ctx ?? null) as RequestContext | null,\n }\n );\n\n const refs = (resp.refs ?? resp.items ?? []) as TRef[];\n fetched = refs;\n\n const ttlMsL1 = opts?.ttlMsL1 ?? args.defaultTtlMsL1;\n const ttlMsL2 = opts?.ttlMsL2 ?? args.defaultTtlMsL2;\n\n for (const ref of refs) {\n const uid = String(ref?.uid || \"\").trim();\n if (!uid) continue;\n\n await cache.set(uid, ref, {\n ttlMsL1,\n ttlMsL2,\n });\n }\n }\n\n const all = [...hits, ...fetched];\n\n // missing final (uids requested but not returned)\n const returnedSet = new Set(all.map((r) => String(r?.uid || \"\")));\n const missingFinal = list.filter((u) => !returnedSet.has(u));\n\n return {\n ok: true,\n refs: all,\n meta: {\n requested: list.length,\n returned: all.length,\n missing: missingFinal,\n },\n };\n }\n\n return {bulkRefs};\n}\n","// packages/sdk/src/clients/platformClient.ts\nimport type {PlatformResolveTenantResponse, PlatformServiceCode} from \"@innvoid/getmarket-contracts\";\nimport type {RequestContext} from \"../headers\";\nimport {createInternalHttpClient} from \"../internalHttpClient\";\nimport {makeRefsCache} from \"./cacheFactory\";\n\nexport function createPlatformClient(env: { baseURL: string; apiPrefix: string }) {\n const http = createInternalHttpClient(env);\n\n // ✅ cache tipado\n const cache = makeRefsCache<PlatformResolveTenantResponse>(\"platform:tenant\");\n\n async function resolveTenant(\n input: { company_uid: string; service: PlatformServiceCode },\n ctx?: RequestContext | null\n ) {\n const key = `${input.company_uid}:${input.service}`;\n\n const cached = await cache.get(key); // ✅ sin genéricos\n if (cached) return cached;\n\n const resp = await http.post<PlatformResolveTenantResponse>(\n \"/tenants/resolve\",\n input,\n {ctx: ctx ?? null}\n );\n\n await cache.set(key, resp);\n return resp;\n }\n\n return {resolveTenant};\n}\n","// packages/sdk/src/clients/resClient.ts\nimport type {ResVarietyRef, ResVarietiesRefsResponse} from \"@innvoid/getmarket-contracts\";\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createResClient() {\n const env = readServiceEnv(\"RES\", {apiPrefix: \"/internal/v1\"});\n\n const varieties = createBulkRefsClient<ResVarietyRef>({\n namespace: \"res:variety\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/varieties\",\n });\n\n return {\n varietiesRefs: (uids: string[], opts?: any) => varieties.bulkRefs(uids, opts) as Promise<ResVarietiesRefsResponse>,\n };\n}\n","// packages/sdk/src/clients/mdClient.ts\nimport type {\n MdMeasureRef,\n MdMeasuresRefsResponse,\n MdMeasureTypeRef,\n MdMeasureTypesRefsResponse,\n MdCountryRef,\n MdCountriesRefsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMdClient() {\n const env = readServiceEnv(\"MD\", {apiPrefix: \"/internal/v1\"});\n\n const measures = createBulkRefsClient<MdMeasureRef>({\n namespace: \"md:measure\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/measures\",\n });\n\n const measureTypes = createBulkRefsClient<MdMeasureTypeRef>({\n namespace: \"md:measure_type\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/measure-types\",\n });\n\n const countries = createBulkRefsClient<MdCountryRef>({\n namespace: \"md:country\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/countries\",\n });\n\n return {\n measuresRefs: (uids: string[], opts?: any) => measures.bulkRefs(uids, opts) as Promise<MdMeasuresRefsResponse>,\n measureTypesRefs: (uids: string[], opts?: any) => measureTypes.bulkRefs(uids, opts) as Promise<MdMeasureTypesRefsResponse>,\n countriesRefs: (uids: string[], opts?: any) => countries.bulkRefs(uids, opts) as Promise<MdCountriesRefsResponse>,\n };\n}\n","// sdk/src/core/http.ts\nimport axios, {AxiosInstance, AxiosRequestConfig} from \"axios\";\n\nexport type HttpClient = AxiosInstance;\n\nexport type HttpClientOpts = {\n baseURL: string;\n timeoutMs?: number;\n headers?: Record<string, string>;\n};\n\nexport function createHttpClient(opts: HttpClientOpts): HttpClient {\n return axios.create({\n baseURL: opts.baseURL.replace(/\\/+$/, \"\"),\n timeout: opts.timeoutMs ?? 8000,\n headers: opts.headers ?? {},\n } satisfies AxiosRequestConfig);\n}\n","// packages/sdk/src/clients/fisClient.ts\nimport type {\n UID,\n Code,\n FisTaxRef,\n FisTaxesRefsResponse,\n FisDocumentRef,\n FisDocumentsRefsResponse,\n FisSubmissionRef,\n FisSubmissionsRefsResponse,\n FisCalculateRequest,\n FisCalculateResponse,\n FisBuildDocumentRequest,\n FisBuildDocumentResponse,\n FisSignDocumentRequest,\n FisSignDocumentResponse,\n FisSubmitDocumentRequest,\n FisSubmitDocumentResponse,\n FisCancelDocumentRequest,\n FisCancelDocumentResponse,\n FisReserveFolioRequest,\n FisReserveFolioResponse,\n FisConsumeFolioRequest,\n FisConsumeFolioResponse,\n FisDocumentsQueryRequest,\n FisDocumentsQueryResponse,\n FisSubmissionRetryRequest,\n FisSubmissionRetryResponse,\n FisDocumentResponse,\n FisSnapshotResponse,\n FisSubmissionResponse,\n FisStatusEventsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\nimport {createHttpClient, type HttpClient} from \"../core\";\n\nexport function createFisClient() {\n const env = readServiceEnv(\"FIS\", {apiPrefix: \"/internal/v1\"});\n const http: HttpClient = createHttpClient({\n baseURL: `${env.baseURL}${env.apiPrefix}`,\n timeoutMs: 8000,\n });\n\n const taxes = createBulkRefsClient<FisTaxRef>({\n namespace: \"fis:tax\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/taxes\",\n });\n\n const documents = createBulkRefsClient<FisDocumentRef>({\n namespace: \"fis:document\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/documents\",\n });\n\n const submissions = createBulkRefsClient<FisSubmissionRef>({\n namespace: \"fis:submission\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/submissions\",\n });\n\n return {\n // -----------------------------------------------------------------------\n // Bulk refs\n // -----------------------------------------------------------------------\n taxesRefs: (uids: string[], opts?: any) =>\n taxes.bulkRefs(uids, opts) as Promise<FisTaxesRefsResponse>,\n\n documentsRefs: (uids: string[], opts?: any) =>\n documents.bulkRefs(uids, opts) as Promise<FisDocumentsRefsResponse>,\n\n submissionsRefs: (uids: string[], opts?: any) =>\n submissions.bulkRefs(uids, opts) as Promise<FisSubmissionsRefsResponse>,\n\n // -----------------------------------------------------------------------\n // Fiscal calculation / build / lifecycle\n // -----------------------------------------------------------------------\n calculate: async (body: FisCalculateRequest): Promise<FisCalculateResponse> => {\n const {data} = await http.post(\"/calculate\", body);\n return data;\n },\n\n buildDocument: async (body: FisBuildDocumentRequest): Promise<FisBuildDocumentResponse> => {\n const {data} = await http.post(\"/documents/build\", body);\n return data;\n },\n\n signDocument: async (body: FisSignDocumentRequest): Promise<FisSignDocumentResponse> => {\n const {data} = await http.post(\"/documents/sign\", body);\n return data;\n },\n\n submitDocument: async (body: FisSubmitDocumentRequest): Promise<FisSubmitDocumentResponse> => {\n const {data} = await http.post(\"/documents/submit\", body);\n return data;\n },\n\n cancelDocument: async (body: FisCancelDocumentRequest): Promise<FisCancelDocumentResponse> => {\n const {data} = await http.post(\"/documents/cancel\", body);\n return data;\n },\n\n // -----------------------------------------------------------------------\n // Folios / series\n // -----------------------------------------------------------------------\n reserveFolio: async (body: FisReserveFolioRequest): Promise<FisReserveFolioResponse> => {\n const {data} = await http.post(\"/folios/reserve\", body);\n return data;\n },\n\n consumeFolio: async (body: FisConsumeFolioRequest): Promise<FisConsumeFolioResponse> => {\n const {data} = await http.post(\"/folios/consume\", body);\n return data;\n },\n\n // -----------------------------------------------------------------------\n // Queries / detail\n // -----------------------------------------------------------------------\n queryDocuments: async (params: FisDocumentsQueryRequest): Promise<FisDocumentsQueryResponse> => {\n const {data} = await http.get(\"/documents\", {params});\n return data;\n },\n\n getDocumentByUid: async (uid: UID): Promise<FisDocumentResponse> => {\n const {data} = await http.get(`/documents/${uid}`);\n return data;\n },\n\n getSnapshotByUid: async (uid: UID): Promise<FisSnapshotResponse> => {\n const {data} = await http.get(`/snapshots/${uid}`);\n return data;\n },\n\n getSubmissionByUid: async (uid: UID): Promise<FisSubmissionResponse> => {\n const {data} = await http.get(`/submissions/${uid}`);\n return data;\n },\n\n getStatusEventsByDocumentUid: async (documentUid: UID): Promise<FisStatusEventsResponse> => {\n const {data} = await http.get(`/documents/${documentUid}/status-events`);\n return data;\n },\n\n retrySubmission: async (body: FisSubmissionRetryRequest): Promise<FisSubmissionRetryResponse> => {\n const {data} = await http.post(\"/submissions/retry\", body);\n return data;\n },\n };\n}\n","// packages/sdk/src/clients/mediaClient.ts\nimport type {MediaFileRef, MediaFilesRefsResponse} from \"@innvoid/getmarket-contracts\";\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMediaClient() {\n const env = readServiceEnv(\"MEDIA\", {apiPrefix: \"/internal/v1\"});\n\n const files = createBulkRefsClient<MediaFileRef>({\n namespace: \"media:file\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/files\",\n });\n\n return {\n filesRefs: (uids: string[], opts?: any) =>\n files.bulkRefs(uids, opts) as Promise<MediaFilesRefsResponse>,\n };\n}\n","// packages/sdk/src/clients/mkpClient.ts\nimport type {\n MkpPublicationRef,\n MkpPublicationsRefsResponse,\n MkpEventRef,\n MkpEventsRefsResponse,\n MkpPromotionRef,\n MkpPromotionsRefsResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createBulkRefsClient} from \"./bulkRefsClient\";\n\nexport function createMkpClient() {\n const env = readServiceEnv(\"MKP\", {apiPrefix: \"/internal/v1\"});\n\n const publications = createBulkRefsClient<MkpPublicationRef>({\n namespace: \"mkp:publication\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/publications\",\n });\n\n const events = createBulkRefsClient<MkpEventRef>({\n namespace: \"mkp:event\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/events\",\n });\n\n const promotions = createBulkRefsClient<MkpPromotionRef>({\n namespace: \"mkp:promotion\",\n baseURL: env.baseURL,\n apiPrefix: env.apiPrefix,\n path: \"/refs/promotions\",\n });\n\n return {\n publicationsRefs: (uids: string[], opts?: any) =>\n publications.bulkRefs(uids, opts) as Promise<MkpPublicationsRefsResponse>,\n\n eventsRefs: (uids: string[], opts?: any) =>\n events.bulkRefs(uids, opts) as Promise<MkpEventsRefsResponse>,\n\n promotionsRefs: (uids: string[], opts?: any) =>\n promotions.bulkRefs(uids, opts) as Promise<MkpPromotionsRefsResponse>,\n };\n}\n","import type {\n UID,\n Code,\n PayMethodAvailabilityRef,\n PayCreateIntentRequest,\n PayCreateIntentResponse,\n PayStartAttemptRequest,\n PayStartAttemptResponse,\n PayIntentResponse,\n PayMethodsAvailabilityResponse,\n} from \"@innvoid/getmarket-contracts\";\n\nimport {readServiceEnv} from \"./env\";\nimport {createHttpClient, type HttpClient} from \"../core\";\n\nexport function createPayClient() {\n const env = readServiceEnv(\"PAY\", {apiPrefix: \"/internal/v1\"});\n\n const http: HttpClient = createHttpClient({\n baseURL: `${env.baseURL}${env.apiPrefix}`,\n timeoutMs: 8000,\n });\n\n return {\n async createIntent(body: PayCreateIntentRequest): Promise<PayCreateIntentResponse> {\n const {data} = await http.post<PayCreateIntentResponse>(\"/intents\", body);\n return data;\n },\n\n async startAttempt(body: PayStartAttemptRequest): Promise<PayStartAttemptResponse> {\n const {data} = await http.post<PayStartAttemptResponse>(\"/attempts\", body);\n return data;\n },\n\n async getAvailableMethods(params: {\n md_country_uid: UID;\n currency_code: Code;\n auth_company_uid?: UID;\n auth_branch_uid?: UID;\n }): Promise<PayMethodsAvailabilityResponse> {\n const {data} = await http.get<PayMethodsAvailabilityResponse>(\"/methods/available\", {\n params,\n });\n return data;\n },\n\n async getIntentByUid(uid: UID): Promise<PayIntentResponse> {\n const {data} = await http.get<PayIntentResponse>(`/intents/${uid}`);\n return data;\n },\n };\n}\n"],"mappings":"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","names":["fs","axios"]}
@@ -1,5 +1,5 @@
1
1
  import { R as RequestContext } from '../parse-C4vk-fmH.cjs';
2
- import { BulkRefsResponse, PlatformServiceCode, PlatformResolveTenantResponse, ResVarietiesRefsResponse, MdMeasuresRefsResponse, MdMeasureTypesRefsResponse, MdCountriesRefsResponse, FisTaxesRefsResponse, FisDocumentsRefsResponse, FisSubmissionsRefsResponse, FisCalculateRequest, FisCalculateResponse, FisBuildDocumentRequest, FisBuildDocumentResponse, FisSignDocumentRequest, FisSignDocumentResponse, FisSubmitDocumentRequest, FisSubmitDocumentResponse, FisCancelDocumentRequest, FisCancelDocumentResponse, FisReserveFolioRequest, FisReserveFolioResponse, FisConsumeFolioRequest, FisConsumeFolioResponse, FisDocumentsQueryRequest, FisDocumentsQueryResponse, UID, FisDocumentResponse, FisSnapshotResponse, FisSubmissionResponse, FisStatusEventsResponse, FisSubmissionRetryRequest, FisSubmissionRetryResponse, MediaFilesRefsResponse, MkpPublicationsRefsResponse, MkpEventsRefsResponse, MkpPromotionsRefsResponse } from '@innvoid/getmarket-contracts';
2
+ import { BulkRefsResponse, PlatformServiceCode, PlatformResolveTenantResponse, ResVarietiesRefsResponse, MdMeasuresRefsResponse, MdMeasureTypesRefsResponse, MdCountriesRefsResponse, FisTaxesRefsResponse, FisDocumentsRefsResponse, FisSubmissionsRefsResponse, FisCalculateRequest, FisCalculateResponse, FisBuildDocumentRequest, FisBuildDocumentResponse, FisSignDocumentRequest, FisSignDocumentResponse, FisSubmitDocumentRequest, FisSubmitDocumentResponse, FisCancelDocumentRequest, FisCancelDocumentResponse, FisReserveFolioRequest, FisReserveFolioResponse, FisConsumeFolioRequest, FisConsumeFolioResponse, FisDocumentsQueryRequest, FisDocumentsQueryResponse, UID, FisDocumentResponse, FisSnapshotResponse, FisSubmissionResponse, FisStatusEventsResponse, FisSubmissionRetryRequest, FisSubmissionRetryResponse, MediaFilesRefsResponse, MkpPublicationsRefsResponse, MkpEventsRefsResponse, MkpPromotionsRefsResponse, PayCreateIntentRequest, PayCreateIntentResponse, PayStartAttemptRequest, PayStartAttemptResponse, Code, PayMethodsAvailabilityResponse, PayIntentResponse } from '@innvoid/getmarket-contracts';
3
3
  export { BulkRefsResponse, BulkUidsRequest } from '@innvoid/getmarket-contracts';
4
4
 
5
5
  /**
@@ -87,4 +87,16 @@ declare function createMkpClient(): {
87
87
  promotionsRefs: (uids: string[], opts?: any) => Promise<MkpPromotionsRefsResponse>;
88
88
  };
89
89
 
90
- export { type InternalBulkRefsOptions, type ServiceClientEnv, createBulkRefsClient, createFisClient, createMdClient, createMediaClient, createMkpClient, createPlatformClient, createResClient, readServiceEnv };
90
+ declare function createPayClient(): {
91
+ createIntent(body: PayCreateIntentRequest): Promise<PayCreateIntentResponse>;
92
+ startAttempt(body: PayStartAttemptRequest): Promise<PayStartAttemptResponse>;
93
+ getAvailableMethods(params: {
94
+ md_country_uid: UID;
95
+ currency_code: Code;
96
+ auth_company_uid?: UID;
97
+ auth_branch_uid?: UID;
98
+ }): Promise<PayMethodsAvailabilityResponse>;
99
+ getIntentByUid(uid: UID): Promise<PayIntentResponse>;
100
+ };
101
+
102
+ export { type InternalBulkRefsOptions, type ServiceClientEnv, createBulkRefsClient, createFisClient, createMdClient, createMediaClient, createMkpClient, createPayClient, createPlatformClient, createResClient, readServiceEnv };
@@ -1,5 +1,5 @@
1
1
  import { R as RequestContext } from '../parse-C4vk-fmH.js';
2
- import { BulkRefsResponse, PlatformServiceCode, PlatformResolveTenantResponse, ResVarietiesRefsResponse, MdMeasuresRefsResponse, MdMeasureTypesRefsResponse, MdCountriesRefsResponse, FisTaxesRefsResponse, FisDocumentsRefsResponse, FisSubmissionsRefsResponse, FisCalculateRequest, FisCalculateResponse, FisBuildDocumentRequest, FisBuildDocumentResponse, FisSignDocumentRequest, FisSignDocumentResponse, FisSubmitDocumentRequest, FisSubmitDocumentResponse, FisCancelDocumentRequest, FisCancelDocumentResponse, FisReserveFolioRequest, FisReserveFolioResponse, FisConsumeFolioRequest, FisConsumeFolioResponse, FisDocumentsQueryRequest, FisDocumentsQueryResponse, UID, FisDocumentResponse, FisSnapshotResponse, FisSubmissionResponse, FisStatusEventsResponse, FisSubmissionRetryRequest, FisSubmissionRetryResponse, MediaFilesRefsResponse, MkpPublicationsRefsResponse, MkpEventsRefsResponse, MkpPromotionsRefsResponse } from '@innvoid/getmarket-contracts';
2
+ import { BulkRefsResponse, PlatformServiceCode, PlatformResolveTenantResponse, ResVarietiesRefsResponse, MdMeasuresRefsResponse, MdMeasureTypesRefsResponse, MdCountriesRefsResponse, FisTaxesRefsResponse, FisDocumentsRefsResponse, FisSubmissionsRefsResponse, FisCalculateRequest, FisCalculateResponse, FisBuildDocumentRequest, FisBuildDocumentResponse, FisSignDocumentRequest, FisSignDocumentResponse, FisSubmitDocumentRequest, FisSubmitDocumentResponse, FisCancelDocumentRequest, FisCancelDocumentResponse, FisReserveFolioRequest, FisReserveFolioResponse, FisConsumeFolioRequest, FisConsumeFolioResponse, FisDocumentsQueryRequest, FisDocumentsQueryResponse, UID, FisDocumentResponse, FisSnapshotResponse, FisSubmissionResponse, FisStatusEventsResponse, FisSubmissionRetryRequest, FisSubmissionRetryResponse, MediaFilesRefsResponse, MkpPublicationsRefsResponse, MkpEventsRefsResponse, MkpPromotionsRefsResponse, PayCreateIntentRequest, PayCreateIntentResponse, PayStartAttemptRequest, PayStartAttemptResponse, Code, PayMethodsAvailabilityResponse, PayIntentResponse } from '@innvoid/getmarket-contracts';
3
3
  export { BulkRefsResponse, BulkUidsRequest } from '@innvoid/getmarket-contracts';
4
4
 
5
5
  /**
@@ -87,4 +87,16 @@ declare function createMkpClient(): {
87
87
  promotionsRefs: (uids: string[], opts?: any) => Promise<MkpPromotionsRefsResponse>;
88
88
  };
89
89
 
90
- export { type InternalBulkRefsOptions, type ServiceClientEnv, createBulkRefsClient, createFisClient, createMdClient, createMediaClient, createMkpClient, createPlatformClient, createResClient, readServiceEnv };
90
+ declare function createPayClient(): {
91
+ createIntent(body: PayCreateIntentRequest): Promise<PayCreateIntentResponse>;
92
+ startAttempt(body: PayStartAttemptRequest): Promise<PayStartAttemptResponse>;
93
+ getAvailableMethods(params: {
94
+ md_country_uid: UID;
95
+ currency_code: Code;
96
+ auth_company_uid?: UID;
97
+ auth_branch_uid?: UID;
98
+ }): Promise<PayMethodsAvailabilityResponse>;
99
+ getIntentByUid(uid: UID): Promise<PayIntentResponse>;
100
+ };
101
+
102
+ export { type InternalBulkRefsOptions, type ServiceClientEnv, createBulkRefsClient, createFisClient, createMdClient, createMediaClient, createMkpClient, createPayClient, createPlatformClient, createResClient, readServiceEnv };
@@ -4,10 +4,11 @@ import {
4
4
  createMdClient,
5
5
  createMediaClient,
6
6
  createMkpClient,
7
+ createPayClient,
7
8
  createPlatformClient,
8
9
  createResClient,
9
10
  readServiceEnv
10
- } from "../chunk-HA2XKSTP.js";
11
+ } from "../chunk-7KD7EQ2O.js";
11
12
  import "../chunk-QVPPDOXY.js";
12
13
  import "../chunk-5S2JP7PR.js";
13
14
  import "../chunk-KXXIMSON.js";
@@ -17,6 +18,7 @@ export {
17
18
  createMdClient,
18
19
  createMediaClient,
19
20
  createMkpClient,
21
+ createPayClient,
20
22
  createPlatformClient,
21
23
  createResClient,
22
24
  readServiceEnv
package/dist/index.cjs CHANGED
@@ -60,6 +60,7 @@ __export(src_exports, {
60
60
  createMdClient: () => createMdClient,
61
61
  createMediaClient: () => createMediaClient,
62
62
  createMkpClient: () => createMkpClient,
63
+ createPayClient: () => createPayClient,
63
64
  createPlatformClient: () => createPlatformClient,
64
65
  createResClient: () => createResClient,
65
66
  getOrSet: () => getOrSet,
@@ -1651,6 +1652,35 @@ function createMkpClient() {
1651
1652
  };
1652
1653
  }
1653
1654
 
1655
+ // src/clients/payClient.ts
1656
+ function createPayClient() {
1657
+ const env = readServiceEnv("PAY", { apiPrefix: "/internal/v1" });
1658
+ const http = createHttpClient({
1659
+ baseURL: `${env.baseURL}${env.apiPrefix}`,
1660
+ timeoutMs: 8e3
1661
+ });
1662
+ return {
1663
+ async createIntent(body) {
1664
+ const { data } = await http.post("/intents", body);
1665
+ return data;
1666
+ },
1667
+ async startAttempt(body) {
1668
+ const { data } = await http.post("/attempts", body);
1669
+ return data;
1670
+ },
1671
+ async getAvailableMethods(params) {
1672
+ const { data } = await http.get("/methods/available", {
1673
+ params
1674
+ });
1675
+ return data;
1676
+ },
1677
+ async getIntentByUid(uid) {
1678
+ const { data } = await http.get(`/intents/${uid}`);
1679
+ return data;
1680
+ }
1681
+ };
1682
+ }
1683
+
1654
1684
  // src/common/ids.ts
1655
1685
  var import_uuid = require("uuid");
1656
1686
  function newUid() {
@@ -1694,6 +1724,7 @@ function isUid(value) {
1694
1724
  createMdClient,
1695
1725
  createMediaClient,
1696
1726
  createMkpClient,
1727
+ createPayClient,
1697
1728
  createPlatformClient,
1698
1729
  createResClient,
1699
1730
  getOrSet,