@innvoid/getmarket-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -0
- package/dist/cache/index.cjs +321 -0
- package/dist/cache/index.cjs.map +1 -0
- package/dist/cache/index.d.cts +82 -0
- package/dist/cache/index.d.ts +82 -0
- package/dist/cache/index.js +11 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/chunk-65HACONF.js +33 -0
- package/dist/chunk-65HACONF.js.map +1 -0
- package/dist/chunk-GG7EI74E.js +169 -0
- package/dist/chunk-GG7EI74E.js.map +1 -0
- package/dist/chunk-HTHX24NK.js +106 -0
- package/dist/chunk-HTHX24NK.js.map +1 -0
- package/dist/chunk-LBFFAXER.js +293 -0
- package/dist/chunk-LBFFAXER.js.map +1 -0
- package/dist/core/index.cjs +211 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +58 -0
- package/dist/core/index.d.ts +58 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/headers/index.cjs +65 -0
- package/dist/headers/index.cjs.map +1 -0
- package/dist/headers/index.d.cts +25 -0
- package/dist/headers/index.d.ts +25 -0
- package/dist/headers/index.js +19 -0
- package/dist/headers/index.js.map +1 -0
- package/dist/index.cjs +644 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewares/index.cjs +163 -0
- package/dist/middlewares/index.cjs.map +1 -0
- package/dist/middlewares/index.d.cts +18 -0
- package/dist/middlewares/index.d.ts +18 -0
- package/dist/middlewares/index.js +16 -0
- package/dist/middlewares/index.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/core/index.ts
|
|
31
|
+
var core_exports = {};
|
|
32
|
+
__export(core_exports, {
|
|
33
|
+
InternalHttp: () => InternalHttp,
|
|
34
|
+
REQUEST_ID_HEADER: () => REQUEST_ID_HEADER,
|
|
35
|
+
UpstreamError: () => UpstreamError,
|
|
36
|
+
createHttpClient: () => createHttpClient,
|
|
37
|
+
mapAxiosToUpstreamError: () => mapAxiosToUpstreamError,
|
|
38
|
+
withRequestId: () => withRequestId,
|
|
39
|
+
withRequestIdConfig: () => withRequestIdConfig
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(core_exports);
|
|
42
|
+
|
|
43
|
+
// src/core/errors.ts
|
|
44
|
+
var UpstreamError = class extends Error {
|
|
45
|
+
code;
|
|
46
|
+
status;
|
|
47
|
+
details;
|
|
48
|
+
constructor(message, code, status, details) {
|
|
49
|
+
super(message);
|
|
50
|
+
this.name = "UpstreamError";
|
|
51
|
+
this.code = code;
|
|
52
|
+
this.status = status;
|
|
53
|
+
this.details = details;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
function mapAxiosToUpstreamError(err, svc) {
|
|
57
|
+
const status = err?.response?.status;
|
|
58
|
+
const data = err?.response?.data;
|
|
59
|
+
const isTimeout = err?.code === "ECONNABORTED" || String(err?.message || "").includes("timeout");
|
|
60
|
+
if (isTimeout) {
|
|
61
|
+
return new UpstreamError(`[${svc}] timeout`, "UPSTREAM_TIMEOUT", 504, { cause: err?.message });
|
|
62
|
+
}
|
|
63
|
+
if (!err?.response) {
|
|
64
|
+
return new UpstreamError(`[${svc}] unavailable`, "UPSTREAM_UNAVAILABLE", 503, { cause: err?.message });
|
|
65
|
+
}
|
|
66
|
+
if (status === 404) return new UpstreamError(`[${svc}] not found`, "UPSTREAM_NOT_FOUND", 404, data);
|
|
67
|
+
if (status === 401) return new UpstreamError(`[${svc}] unauthorized`, "UPSTREAM_UNAUTHORIZED", 401, data);
|
|
68
|
+
if (status === 403) return new UpstreamError(`[${svc}] forbidden`, "UPSTREAM_FORBIDDEN", 403, data);
|
|
69
|
+
if (status >= 400 && status < 600) {
|
|
70
|
+
return new UpstreamError(`[${svc}] bad response`, "UPSTREAM_BAD_RESPONSE", status, data);
|
|
71
|
+
}
|
|
72
|
+
return new UpstreamError(`[${svc}] unknown error`, "UPSTREAM_UNKNOWN", status, data);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// src/core/http.ts
|
|
76
|
+
var import_axios = __toESM(require("axios"), 1);
|
|
77
|
+
var REQUEST_ID_HEADER = "x-request-id";
|
|
78
|
+
function withRequestId(headers, requestId) {
|
|
79
|
+
const h = headers && typeof headers === "object" ? { ...headers } : {};
|
|
80
|
+
const rid = (requestId || "").trim();
|
|
81
|
+
if (rid) h[REQUEST_ID_HEADER] = rid;
|
|
82
|
+
return h;
|
|
83
|
+
}
|
|
84
|
+
function withRequestIdConfig(config = {}, requestId) {
|
|
85
|
+
return {
|
|
86
|
+
...config,
|
|
87
|
+
headers: withRequestId(config.headers, requestId)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function createHttpClient(opts) {
|
|
91
|
+
return import_axios.default.create({
|
|
92
|
+
baseURL: opts.baseURL,
|
|
93
|
+
timeout: opts.timeoutMs ?? 4e3,
|
|
94
|
+
headers: { "Content-Type": "application/json" }
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// src/core/internalHttp.ts
|
|
99
|
+
var DEFAULT_RETRY = {
|
|
100
|
+
retries: 1,
|
|
101
|
+
baseDelayMs: 150,
|
|
102
|
+
retryOnStatuses: [429, 502, 503, 504],
|
|
103
|
+
retryOnNetworkErrors: true
|
|
104
|
+
};
|
|
105
|
+
function sleep(ms) {
|
|
106
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
107
|
+
}
|
|
108
|
+
function safeJsonStringify(v) {
|
|
109
|
+
try {
|
|
110
|
+
return JSON.stringify(v);
|
|
111
|
+
} catch {
|
|
112
|
+
return String(v);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function toHeaders(init) {
|
|
116
|
+
return new Headers(init || {});
|
|
117
|
+
}
|
|
118
|
+
function isJsonContentType(contentType) {
|
|
119
|
+
if (!contentType) return false;
|
|
120
|
+
const ct = contentType.toLowerCase();
|
|
121
|
+
return ct.includes("application/json") || ct.includes("+json");
|
|
122
|
+
}
|
|
123
|
+
function isAbortError(e) {
|
|
124
|
+
return e?.name === "AbortError";
|
|
125
|
+
}
|
|
126
|
+
function withJitter(ms) {
|
|
127
|
+
const jitter = ms * 0.2;
|
|
128
|
+
const delta = (Math.random() * 2 - 1) * jitter;
|
|
129
|
+
return Math.max(0, Math.floor(ms + delta));
|
|
130
|
+
}
|
|
131
|
+
var InternalHttp = class {
|
|
132
|
+
baseUrl;
|
|
133
|
+
apiKey;
|
|
134
|
+
timeoutMs;
|
|
135
|
+
retry;
|
|
136
|
+
constructor(opts) {
|
|
137
|
+
this.baseUrl = opts.baseUrl.replace(/\/+$/, "");
|
|
138
|
+
this.apiKey = opts.apiKey;
|
|
139
|
+
this.timeoutMs = opts.timeoutMs ?? 4e3;
|
|
140
|
+
this.retry = { ...DEFAULT_RETRY, ...opts.retry || {} };
|
|
141
|
+
}
|
|
142
|
+
async request(path, init = {}) {
|
|
143
|
+
const url = `${this.baseUrl}${path.startsWith("/") ? "" : "/"}${path}`;
|
|
144
|
+
const baseHeaders = toHeaders(init.headers);
|
|
145
|
+
if (!baseHeaders.has("Content-Type")) baseHeaders.set("Content-Type", "application/json");
|
|
146
|
+
if (this.apiKey) baseHeaders.set("x-internal-api-key", this.apiKey);
|
|
147
|
+
if (init.requestId) baseHeaders.set("x-request-id", init.requestId);
|
|
148
|
+
if (init.idempotencyKey) baseHeaders.set("Idempotency-Key", init.idempotencyKey);
|
|
149
|
+
const { headers: _ignored, ...restInit } = init;
|
|
150
|
+
const doFetchOnce = async () => {
|
|
151
|
+
const controller = new AbortController();
|
|
152
|
+
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
153
|
+
try {
|
|
154
|
+
const res = await fetch(url, {
|
|
155
|
+
...restInit,
|
|
156
|
+
headers: baseHeaders,
|
|
157
|
+
signal: controller.signal
|
|
158
|
+
});
|
|
159
|
+
if (!res.ok) {
|
|
160
|
+
const text2 = await res.text().catch(() => "");
|
|
161
|
+
const err = new Error(
|
|
162
|
+
`HTTP ${res.status} ${res.statusText}${text2 ? ` - ${text2}` : ""}`
|
|
163
|
+
);
|
|
164
|
+
err.status = res.status;
|
|
165
|
+
err.body = text2;
|
|
166
|
+
throw err;
|
|
167
|
+
}
|
|
168
|
+
if (res.status === 204) return void 0;
|
|
169
|
+
const contentType = res.headers.get("content-type");
|
|
170
|
+
if (isJsonContentType(contentType)) {
|
|
171
|
+
return await res.json();
|
|
172
|
+
}
|
|
173
|
+
const text = await res.text().catch(() => "");
|
|
174
|
+
return text;
|
|
175
|
+
} finally {
|
|
176
|
+
clearTimeout(timeout);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
let attempt = 0;
|
|
180
|
+
while (true) {
|
|
181
|
+
try {
|
|
182
|
+
return await doFetchOnce();
|
|
183
|
+
} catch (e) {
|
|
184
|
+
attempt++;
|
|
185
|
+
const status = e?.status;
|
|
186
|
+
const retryableStatus = !!status && this.retry.retryOnStatuses.includes(status);
|
|
187
|
+
const retryableNetwork = this.retry.retryOnNetworkErrors && (isAbortError(e) || !status);
|
|
188
|
+
const isRetryable = retryableStatus || retryableNetwork;
|
|
189
|
+
if (!isRetryable || attempt > this.retry.retries) {
|
|
190
|
+
console.error(
|
|
191
|
+
`[InternalHttp] request failed: ${url} attempt=${attempt} status=${status ?? "n/a"} err=${e?.message} body=${safeJsonStringify(e?.body)}`
|
|
192
|
+
);
|
|
193
|
+
throw e;
|
|
194
|
+
}
|
|
195
|
+
const backoff = withJitter(this.retry.baseDelayMs * attempt);
|
|
196
|
+
await sleep(backoff);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
202
|
+
0 && (module.exports = {
|
|
203
|
+
InternalHttp,
|
|
204
|
+
REQUEST_ID_HEADER,
|
|
205
|
+
UpstreamError,
|
|
206
|
+
createHttpClient,
|
|
207
|
+
mapAxiosToUpstreamError,
|
|
208
|
+
withRequestId,
|
|
209
|
+
withRequestIdConfig
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/index.ts","../../src/core/errors.ts","../../src/core/http.ts","../../src/core/internalHttp.ts"],"sourcesContent":["export * from \"./errors\";\nexport * from \"./http\";\nexport * from \"./internalHttp\";\n","export type ClientErrorCode =\n | \"UPSTREAM_TIMEOUT\"\n | \"UPSTREAM_UNAVAILABLE\"\n | \"UPSTREAM_BAD_RESPONSE\"\n | \"UPSTREAM_NOT_FOUND\"\n | \"UPSTREAM_UNAUTHORIZED\"\n | \"UPSTREAM_FORBIDDEN\"\n | \"UPSTREAM_UNKNOWN\";\n\nexport class UpstreamError extends Error {\n public code: ClientErrorCode;\n public status?: number;\n public details?: any;\n\n constructor(message: string, code: ClientErrorCode, status?: number, details?: any) {\n super(message);\n this.name = \"UpstreamError\";\n this.code = code;\n this.status = status;\n this.details = details;\n }\n}\n\nexport function mapAxiosToUpstreamError(err: any, svc: string): UpstreamError {\n const status = err?.response?.status;\n const data = err?.response?.data;\n const isTimeout = err?.code === \"ECONNABORTED\" || String(err?.message || \"\").includes(\"timeout\");\n\n if (isTimeout) {\n return new UpstreamError(`[${svc}] timeout`, \"UPSTREAM_TIMEOUT\", 504, {cause: err?.message});\n }\n if (!err?.response) {\n return new UpstreamError(`[${svc}] unavailable`, \"UPSTREAM_UNAVAILABLE\", 503, {cause: err?.message});\n }\n if (status === 404) return new UpstreamError(`[${svc}] not found`, \"UPSTREAM_NOT_FOUND\", 404, data);\n if (status === 401) return new UpstreamError(`[${svc}] unauthorized`, \"UPSTREAM_UNAUTHORIZED\", 401, data);\n if (status === 403) return new UpstreamError(`[${svc}] forbidden`, \"UPSTREAM_FORBIDDEN\", 403, data);\n if (status >= 400 && status < 600) {\n return new UpstreamError(`[${svc}] bad response`, \"UPSTREAM_BAD_RESPONSE\", status, data);\n }\n return new UpstreamError(`[${svc}] unknown error`, \"UPSTREAM_UNKNOWN\", status, data);\n}\n","// clients/core/http.ts\nimport axios, {AxiosInstance, AxiosRequestConfig} from \"axios\";\n\nexport const REQUEST_ID_HEADER = \"x-request-id\";\n\nexport type HttpClientOpts = {\n baseURL: string;\n timeoutMs?: number;\n};\n\n/**\n * Headers compatibles con múltiples versiones de axios.\n * En axios antiguo, `headers` suele ser `any`, así que mantenemos tolerancia.\n */\nexport type AnyHeaders = NonNullable<AxiosRequestConfig[\"headers\"]> | Record<string, string>;\n\n/**\n * Agrega x-request-id a headers (sin pisar otros headers).\n */\nexport function withRequestId(headers: AnyHeaders | undefined, requestId?: string | null): AnyHeaders {\n const h: Record<string, any> =\n headers && typeof headers === \"object\"\n ? {...(headers as any)}\n : {};\n\n const rid = (requestId || \"\").trim();\n if (rid) h[REQUEST_ID_HEADER] = rid;\n\n return h as AnyHeaders;\n}\n\n/**\n * Helper para construir config de axios con requestId\n * (SIN genéricos para compat con axios typings antiguos).\n */\nexport function withRequestIdConfig(\n config: AxiosRequestConfig = {},\n requestId?: string | null\n): AxiosRequestConfig {\n return {\n ...config,\n headers: withRequestId((config as any).headers, requestId) as any,\n };\n}\n\nexport function createHttpClient(opts: HttpClientOpts): AxiosInstance {\n return axios.create({\n baseURL: opts.baseURL,\n timeout: opts.timeoutMs ?? 4000,\n headers: {\"Content-Type\": \"application/json\"},\n });\n}\n","// clients/internalHttp.ts\n\ntype RetryPolicy = {\n retries: number;\n baseDelayMs: number;\n retryOnStatuses: number[];\n retryOnNetworkErrors: boolean;\n};\n\ntype InternalHttpOptions = {\n baseUrl: string;\n apiKey?: string; // x-internal-api-key\n timeoutMs?: number;\n retry?: Partial<RetryPolicy>;\n};\n\nconst DEFAULT_RETRY: RetryPolicy = {\n retries: 1,\n baseDelayMs: 150,\n retryOnStatuses: [429, 502, 503, 504],\n retryOnNetworkErrors: true,\n};\n\nfunction sleep(ms: number) {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nfunction safeJsonStringify(v: any) {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n\nfunction toHeaders(init?: HeadersInit): Headers {\n return new Headers(init || {});\n}\n\nfunction isJsonContentType(contentType: string | null): boolean {\n if (!contentType) return false;\n const ct = contentType.toLowerCase();\n return ct.includes(\"application/json\") || ct.includes(\"+json\");\n}\n\nfunction isAbortError(e: any): boolean {\n return e?.name === \"AbortError\";\n}\n\nfunction withJitter(ms: number): number {\n // jitter +-20%\n const jitter = ms * 0.2;\n const delta = (Math.random() * 2 - 1) * jitter;\n return Math.max(0, Math.floor(ms + delta));\n}\n\nexport class InternalHttp {\n private readonly baseUrl: string;\n private readonly apiKey: string | undefined;\n private readonly timeoutMs: number;\n private retry: RetryPolicy;\n\n constructor(opts: InternalHttpOptions) {\n this.baseUrl = opts.baseUrl.replace(/\\/+$/, \"\");\n this.apiKey = opts.apiKey;\n\n // ✅ Default más seguro para internas (evita cascadas)\n this.timeoutMs = opts.timeoutMs ?? 4000;\n\n this.retry = {...DEFAULT_RETRY, ...(opts.retry || {})};\n }\n\n async request<T>(\n path: string,\n init: RequestInit & {\n requestId?: string;\n idempotencyKey?: string;\n headers?: HeadersInit;\n } = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`;\n\n const baseHeaders = toHeaders(init.headers);\n\n if (!baseHeaders.has(\"Content-Type\")) baseHeaders.set(\"Content-Type\", \"application/json\");\n if (this.apiKey) baseHeaders.set(\"x-internal-api-key\", this.apiKey);\n\n if (init.requestId) baseHeaders.set(\"x-request-id\", init.requestId);\n if (init.idempotencyKey) baseHeaders.set(\"Idempotency-Key\", init.idempotencyKey);\n\n const {headers: _ignored, ...restInit} = init;\n\n const doFetchOnce = async () => {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const res = await fetch(url, {\n ...restInit,\n headers: baseHeaders,\n signal: controller.signal,\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n const err: any = new Error(\n `HTTP ${res.status} ${res.statusText}${text ? ` - ${text}` : \"\"}`\n );\n err.status = res.status;\n err.body = text;\n throw err;\n }\n\n if (res.status === 204) return undefined as unknown as T;\n\n const contentType = res.headers.get(\"content-type\");\n if (isJsonContentType(contentType)) {\n return (await res.json()) as T;\n }\n\n const text = await res.text().catch(() => \"\");\n return text as unknown as T;\n } finally {\n clearTimeout(timeout);\n }\n };\n\n let attempt = 0;\n\n while (true) {\n try {\n return await doFetchOnce();\n } catch (e: any) {\n attempt++;\n\n const status = e?.status;\n const retryableStatus = !!status && this.retry.retryOnStatuses.includes(status);\n\n const retryableNetwork =\n this.retry.retryOnNetworkErrors &&\n (isAbortError(e) || !status); // sin status suele ser red/dns/timeout\n\n const isRetryable = retryableStatus || retryableNetwork;\n\n if (!isRetryable || attempt > this.retry.retries) {\n console.error(\n `[InternalHttp] request failed: ${url} attempt=${attempt} status=${status ?? \"n/a\"} err=${e?.message\n } body=${safeJsonStringify(e?.body)}`\n );\n throw e;\n }\n\n const backoff = withJitter(this.retry.baseDelayMs * attempt);\n await sleep(backoff);\n }\n }\n }\n}\n"],"mappings":"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","names":["axios","text"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { AxiosRequestConfig, AxiosInstance } from 'axios';
|
|
2
|
+
|
|
3
|
+
type ClientErrorCode = "UPSTREAM_TIMEOUT" | "UPSTREAM_UNAVAILABLE" | "UPSTREAM_BAD_RESPONSE" | "UPSTREAM_NOT_FOUND" | "UPSTREAM_UNAUTHORIZED" | "UPSTREAM_FORBIDDEN" | "UPSTREAM_UNKNOWN";
|
|
4
|
+
declare class UpstreamError extends Error {
|
|
5
|
+
code: ClientErrorCode;
|
|
6
|
+
status?: number;
|
|
7
|
+
details?: any;
|
|
8
|
+
constructor(message: string, code: ClientErrorCode, status?: number, details?: any);
|
|
9
|
+
}
|
|
10
|
+
declare function mapAxiosToUpstreamError(err: any, svc: string): UpstreamError;
|
|
11
|
+
|
|
12
|
+
declare const REQUEST_ID_HEADER = "x-request-id";
|
|
13
|
+
type HttpClientOpts = {
|
|
14
|
+
baseURL: string;
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Headers compatibles con múltiples versiones de axios.
|
|
19
|
+
* En axios antiguo, `headers` suele ser `any`, así que mantenemos tolerancia.
|
|
20
|
+
*/
|
|
21
|
+
type AnyHeaders = NonNullable<AxiosRequestConfig["headers"]> | Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Agrega x-request-id a headers (sin pisar otros headers).
|
|
24
|
+
*/
|
|
25
|
+
declare function withRequestId(headers: AnyHeaders | undefined, requestId?: string | null): AnyHeaders;
|
|
26
|
+
/**
|
|
27
|
+
* Helper para construir config de axios con requestId
|
|
28
|
+
* (SIN genéricos para compat con axios typings antiguos).
|
|
29
|
+
*/
|
|
30
|
+
declare function withRequestIdConfig(config?: AxiosRequestConfig, requestId?: string | null): AxiosRequestConfig;
|
|
31
|
+
declare function createHttpClient(opts: HttpClientOpts): AxiosInstance;
|
|
32
|
+
|
|
33
|
+
type RetryPolicy = {
|
|
34
|
+
retries: number;
|
|
35
|
+
baseDelayMs: number;
|
|
36
|
+
retryOnStatuses: number[];
|
|
37
|
+
retryOnNetworkErrors: boolean;
|
|
38
|
+
};
|
|
39
|
+
type InternalHttpOptions = {
|
|
40
|
+
baseUrl: string;
|
|
41
|
+
apiKey?: string;
|
|
42
|
+
timeoutMs?: number;
|
|
43
|
+
retry?: Partial<RetryPolicy>;
|
|
44
|
+
};
|
|
45
|
+
declare class InternalHttp {
|
|
46
|
+
private readonly baseUrl;
|
|
47
|
+
private readonly apiKey;
|
|
48
|
+
private readonly timeoutMs;
|
|
49
|
+
private retry;
|
|
50
|
+
constructor(opts: InternalHttpOptions);
|
|
51
|
+
request<T>(path: string, init?: RequestInit & {
|
|
52
|
+
requestId?: string;
|
|
53
|
+
idempotencyKey?: string;
|
|
54
|
+
headers?: HeadersInit;
|
|
55
|
+
}): Promise<T>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { type AnyHeaders, type ClientErrorCode, type HttpClientOpts, InternalHttp, REQUEST_ID_HEADER, UpstreamError, createHttpClient, mapAxiosToUpstreamError, withRequestId, withRequestIdConfig };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { AxiosRequestConfig, AxiosInstance } from 'axios';
|
|
2
|
+
|
|
3
|
+
type ClientErrorCode = "UPSTREAM_TIMEOUT" | "UPSTREAM_UNAVAILABLE" | "UPSTREAM_BAD_RESPONSE" | "UPSTREAM_NOT_FOUND" | "UPSTREAM_UNAUTHORIZED" | "UPSTREAM_FORBIDDEN" | "UPSTREAM_UNKNOWN";
|
|
4
|
+
declare class UpstreamError extends Error {
|
|
5
|
+
code: ClientErrorCode;
|
|
6
|
+
status?: number;
|
|
7
|
+
details?: any;
|
|
8
|
+
constructor(message: string, code: ClientErrorCode, status?: number, details?: any);
|
|
9
|
+
}
|
|
10
|
+
declare function mapAxiosToUpstreamError(err: any, svc: string): UpstreamError;
|
|
11
|
+
|
|
12
|
+
declare const REQUEST_ID_HEADER = "x-request-id";
|
|
13
|
+
type HttpClientOpts = {
|
|
14
|
+
baseURL: string;
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Headers compatibles con múltiples versiones de axios.
|
|
19
|
+
* En axios antiguo, `headers` suele ser `any`, así que mantenemos tolerancia.
|
|
20
|
+
*/
|
|
21
|
+
type AnyHeaders = NonNullable<AxiosRequestConfig["headers"]> | Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Agrega x-request-id a headers (sin pisar otros headers).
|
|
24
|
+
*/
|
|
25
|
+
declare function withRequestId(headers: AnyHeaders | undefined, requestId?: string | null): AnyHeaders;
|
|
26
|
+
/**
|
|
27
|
+
* Helper para construir config de axios con requestId
|
|
28
|
+
* (SIN genéricos para compat con axios typings antiguos).
|
|
29
|
+
*/
|
|
30
|
+
declare function withRequestIdConfig(config?: AxiosRequestConfig, requestId?: string | null): AxiosRequestConfig;
|
|
31
|
+
declare function createHttpClient(opts: HttpClientOpts): AxiosInstance;
|
|
32
|
+
|
|
33
|
+
type RetryPolicy = {
|
|
34
|
+
retries: number;
|
|
35
|
+
baseDelayMs: number;
|
|
36
|
+
retryOnStatuses: number[];
|
|
37
|
+
retryOnNetworkErrors: boolean;
|
|
38
|
+
};
|
|
39
|
+
type InternalHttpOptions = {
|
|
40
|
+
baseUrl: string;
|
|
41
|
+
apiKey?: string;
|
|
42
|
+
timeoutMs?: number;
|
|
43
|
+
retry?: Partial<RetryPolicy>;
|
|
44
|
+
};
|
|
45
|
+
declare class InternalHttp {
|
|
46
|
+
private readonly baseUrl;
|
|
47
|
+
private readonly apiKey;
|
|
48
|
+
private readonly timeoutMs;
|
|
49
|
+
private retry;
|
|
50
|
+
constructor(opts: InternalHttpOptions);
|
|
51
|
+
request<T>(path: string, init?: RequestInit & {
|
|
52
|
+
requestId?: string;
|
|
53
|
+
idempotencyKey?: string;
|
|
54
|
+
headers?: HeadersInit;
|
|
55
|
+
}): Promise<T>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { type AnyHeaders, type ClientErrorCode, type HttpClientOpts, InternalHttp, REQUEST_ID_HEADER, UpstreamError, createHttpClient, mapAxiosToUpstreamError, withRequestId, withRequestIdConfig };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
InternalHttp,
|
|
3
|
+
REQUEST_ID_HEADER,
|
|
4
|
+
UpstreamError,
|
|
5
|
+
createHttpClient,
|
|
6
|
+
mapAxiosToUpstreamError,
|
|
7
|
+
withRequestId,
|
|
8
|
+
withRequestIdConfig
|
|
9
|
+
} from "../chunk-GG7EI74E.js";
|
|
10
|
+
export {
|
|
11
|
+
InternalHttp,
|
|
12
|
+
REQUEST_ID_HEADER,
|
|
13
|
+
UpstreamError,
|
|
14
|
+
createHttpClient,
|
|
15
|
+
mapAxiosToUpstreamError,
|
|
16
|
+
withRequestId,
|
|
17
|
+
withRequestIdConfig
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/headers/index.ts
|
|
21
|
+
var headers_exports = {};
|
|
22
|
+
__export(headers_exports, {
|
|
23
|
+
HEADER_AUTHORIZATION: () => HEADER_AUTHORIZATION,
|
|
24
|
+
HEADER_BRANCH_UID: () => HEADER_BRANCH_UID,
|
|
25
|
+
HEADER_COMPANY_UID: () => HEADER_COMPANY_UID,
|
|
26
|
+
HEADER_EMPLOYEE_UID: () => HEADER_EMPLOYEE_UID,
|
|
27
|
+
HEADER_INTERNAL_API_KEY: () => HEADER_INTERNAL_API_KEY,
|
|
28
|
+
HEADER_REQUEST_ID: () => HEADER_REQUEST_ID,
|
|
29
|
+
getRequestContextFromHeaders: () => getRequestContextFromHeaders
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(headers_exports);
|
|
32
|
+
|
|
33
|
+
// src/headers/constants.ts
|
|
34
|
+
var HEADER_REQUEST_ID = "x-request-id";
|
|
35
|
+
var HEADER_COMPANY_UID = "x-company";
|
|
36
|
+
var HEADER_BRANCH_UID = "x-branch";
|
|
37
|
+
var HEADER_EMPLOYEE_UID = "x-employee-uid";
|
|
38
|
+
var HEADER_INTERNAL_API_KEY = "x-internal-api-key";
|
|
39
|
+
var HEADER_AUTHORIZATION = "authorization";
|
|
40
|
+
|
|
41
|
+
// src/headers/parse.ts
|
|
42
|
+
function asString(v) {
|
|
43
|
+
if (typeof v !== "string") return null;
|
|
44
|
+
const s = v.trim();
|
|
45
|
+
return s ? s : null;
|
|
46
|
+
}
|
|
47
|
+
function getRequestContextFromHeaders(headers) {
|
|
48
|
+
return {
|
|
49
|
+
requestId: asString(headers[HEADER_REQUEST_ID]) ?? null,
|
|
50
|
+
company_uid: asString(headers[HEADER_COMPANY_UID]) ?? null,
|
|
51
|
+
branch_uid: asString(headers[HEADER_BRANCH_UID]) ?? null,
|
|
52
|
+
employee_uid: asString(headers[HEADER_EMPLOYEE_UID]) ?? null
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
56
|
+
0 && (module.exports = {
|
|
57
|
+
HEADER_AUTHORIZATION,
|
|
58
|
+
HEADER_BRANCH_UID,
|
|
59
|
+
HEADER_COMPANY_UID,
|
|
60
|
+
HEADER_EMPLOYEE_UID,
|
|
61
|
+
HEADER_INTERNAL_API_KEY,
|
|
62
|
+
HEADER_REQUEST_ID,
|
|
63
|
+
getRequestContextFromHeaders
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/headers/index.ts","../../src/headers/constants.ts","../../src/headers/parse.ts"],"sourcesContent":["export * from \"./constants\";\nexport * from \"./parse\";\n","export 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","import {\n HEADER_BRANCH_UID,\n HEADER_COMPANY_UID,\n HEADER_EMPLOYEE_UID,\n HEADER_REQUEST_ID,\n} from \"./constants\";\n\nexport type RequestContext = {\n requestId?: string | null;\n\n company_uid?: string | null;\n branch_uid?: string | null;\n employee_uid?: string | null;\n};\n\nfunction asString(v: unknown): string | null {\n if (typeof v !== \"string\") return null;\n const s = v.trim();\n return s ? s : null;\n}\n\n/**\n * ✅ NO-LEGACY:\n * - x-company: <UID>\n * - x-branch: <UID>\n * - x-employee-uid: <UID> (opcional)\n * - x-request-id: string (opcional)\n *\n * 🚫 No JSON, no _id, no objetos.\n */\nexport function getRequestContextFromHeaders(headers: Record<string, any>): RequestContext {\n return {\n requestId: asString(headers[HEADER_REQUEST_ID]) ?? null,\n company_uid: asString(headers[HEADER_COMPANY_UID]) ?? null,\n branch_uid: asString(headers[HEADER_BRANCH_UID]) ?? null,\n employee_uid: asString(headers[HEADER_EMPLOYEE_UID]) ?? null,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,oBAAoB;AAE1B,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAE5B,IAAM,0BAA0B;AAChC,IAAM,uBAAuB;;;ACQpC,SAAS,SAAS,GAA2B;AACzC,MAAI,OAAO,MAAM,SAAU,QAAO;AAClC,QAAM,IAAI,EAAE,KAAK;AACjB,SAAO,IAAI,IAAI;AACnB;AAWO,SAAS,6BAA6B,SAA8C;AACvF,SAAO;AAAA,IACH,WAAW,SAAS,QAAQ,iBAAiB,CAAC,KAAK;AAAA,IACnD,aAAa,SAAS,QAAQ,kBAAkB,CAAC,KAAK;AAAA,IACtD,YAAY,SAAS,QAAQ,iBAAiB,CAAC,KAAK;AAAA,IACpD,cAAc,SAAS,QAAQ,mBAAmB,CAAC,KAAK;AAAA,EAC5D;AACJ;","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
declare const HEADER_REQUEST_ID = "x-request-id";
|
|
2
|
+
declare const HEADER_COMPANY_UID = "x-company";
|
|
3
|
+
declare const HEADER_BRANCH_UID = "x-branch";
|
|
4
|
+
declare const HEADER_EMPLOYEE_UID = "x-employee-uid";
|
|
5
|
+
declare const HEADER_INTERNAL_API_KEY = "x-internal-api-key";
|
|
6
|
+
declare const HEADER_AUTHORIZATION = "authorization";
|
|
7
|
+
|
|
8
|
+
type RequestContext = {
|
|
9
|
+
requestId?: string | null;
|
|
10
|
+
company_uid?: string | null;
|
|
11
|
+
branch_uid?: string | null;
|
|
12
|
+
employee_uid?: string | null;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* ✅ NO-LEGACY:
|
|
16
|
+
* - x-company: <UID>
|
|
17
|
+
* - x-branch: <UID>
|
|
18
|
+
* - x-employee-uid: <UID> (opcional)
|
|
19
|
+
* - x-request-id: string (opcional)
|
|
20
|
+
*
|
|
21
|
+
* 🚫 No JSON, no _id, no objetos.
|
|
22
|
+
*/
|
|
23
|
+
declare function getRequestContextFromHeaders(headers: Record<string, any>): RequestContext;
|
|
24
|
+
|
|
25
|
+
export { HEADER_AUTHORIZATION, HEADER_BRANCH_UID, HEADER_COMPANY_UID, HEADER_EMPLOYEE_UID, HEADER_INTERNAL_API_KEY, HEADER_REQUEST_ID, type RequestContext, getRequestContextFromHeaders };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
declare const HEADER_REQUEST_ID = "x-request-id";
|
|
2
|
+
declare const HEADER_COMPANY_UID = "x-company";
|
|
3
|
+
declare const HEADER_BRANCH_UID = "x-branch";
|
|
4
|
+
declare const HEADER_EMPLOYEE_UID = "x-employee-uid";
|
|
5
|
+
declare const HEADER_INTERNAL_API_KEY = "x-internal-api-key";
|
|
6
|
+
declare const HEADER_AUTHORIZATION = "authorization";
|
|
7
|
+
|
|
8
|
+
type RequestContext = {
|
|
9
|
+
requestId?: string | null;
|
|
10
|
+
company_uid?: string | null;
|
|
11
|
+
branch_uid?: string | null;
|
|
12
|
+
employee_uid?: string | null;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* ✅ NO-LEGACY:
|
|
16
|
+
* - x-company: <UID>
|
|
17
|
+
* - x-branch: <UID>
|
|
18
|
+
* - x-employee-uid: <UID> (opcional)
|
|
19
|
+
* - x-request-id: string (opcional)
|
|
20
|
+
*
|
|
21
|
+
* 🚫 No JSON, no _id, no objetos.
|
|
22
|
+
*/
|
|
23
|
+
declare function getRequestContextFromHeaders(headers: Record<string, any>): RequestContext;
|
|
24
|
+
|
|
25
|
+
export { HEADER_AUTHORIZATION, HEADER_BRANCH_UID, HEADER_COMPANY_UID, HEADER_EMPLOYEE_UID, HEADER_INTERNAL_API_KEY, HEADER_REQUEST_ID, type RequestContext, getRequestContextFromHeaders };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HEADER_AUTHORIZATION,
|
|
3
|
+
HEADER_BRANCH_UID,
|
|
4
|
+
HEADER_COMPANY_UID,
|
|
5
|
+
HEADER_EMPLOYEE_UID,
|
|
6
|
+
HEADER_INTERNAL_API_KEY,
|
|
7
|
+
HEADER_REQUEST_ID,
|
|
8
|
+
getRequestContextFromHeaders
|
|
9
|
+
} from "../chunk-65HACONF.js";
|
|
10
|
+
export {
|
|
11
|
+
HEADER_AUTHORIZATION,
|
|
12
|
+
HEADER_BRANCH_UID,
|
|
13
|
+
HEADER_COMPANY_UID,
|
|
14
|
+
HEADER_EMPLOYEE_UID,
|
|
15
|
+
HEADER_INTERNAL_API_KEY,
|
|
16
|
+
HEADER_REQUEST_ID,
|
|
17
|
+
getRequestContextFromHeaders
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|