meridianjs 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -1
- package/README.md +53 -20
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/apollo/adapter.d.ts +18 -0
- package/dist/providers/apollo/adapter.d.ts.map +1 -0
- package/dist/providers/apollo/adapter.js +141 -0
- package/dist/providers/apollo/adapter.js.map +1 -0
- package/dist/providers/apollo/index.d.ts +3 -0
- package/dist/providers/apollo/index.d.ts.map +1 -0
- package/dist/providers/apollo/index.js +3 -0
- package/dist/providers/apollo/index.js.map +1 -0
- package/dist/providers/apollo/pagination.d.ts +11 -0
- package/dist/providers/apollo/pagination.d.ts.map +1 -0
- package/dist/providers/apollo/pagination.js +44 -0
- package/dist/providers/apollo/pagination.js.map +1 -0
- package/dist/providers/checkout/adapter.d.ts.map +1 -1
- package/dist/providers/checkout/adapter.js.map +1 -1
- package/dist/providers/cohere/adapter.d.ts.map +1 -1
- package/dist/providers/cohere/adapter.js +23 -6
- package/dist/providers/cohere/adapter.js.map +1 -1
- package/dist/providers/cohere/pagination.d.ts.map +1 -1
- package/dist/providers/cohere/pagination.js +9 -3
- package/dist/providers/cohere/pagination.js.map +1 -1
- package/dist/providers/klarna/adapter.d.ts.map +1 -1
- package/dist/providers/klarna/adapter.js +3 -1
- package/dist/providers/klarna/adapter.js.map +1 -1
- package/dist/providers/mistral/adapter.d.ts.map +1 -1
- package/dist/providers/mistral/adapter.js +31 -8
- package/dist/providers/mistral/adapter.js.map +1 -1
- package/dist/providers/mistral/pagination.d.ts.map +1 -1
- package/dist/providers/mistral/pagination.js +12 -4
- package/dist/providers/mistral/pagination.js.map +1 -1
- package/dist/providers/mollie/adapter.d.ts.map +1 -1
- package/dist/providers/mollie/adapter.js +3 -1
- package/dist/providers/mollie/adapter.js.map +1 -1
- package/dist/proxy/server.d.ts.map +1 -1
- package/dist/proxy/server.js +52 -3
- package/dist/proxy/server.js.map +1 -1
- package/dist/public.d.ts +6 -0
- package/dist/public.d.ts.map +1 -1
- package/dist/public.js +6 -0
- package/dist/public.js.map +1 -1
- package/dist/testing/contract.d.ts +27 -0
- package/dist/testing/contract.d.ts.map +1 -0
- package/dist/testing/contract.js +191 -0
- package/dist/testing/contract.js.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mock-adapter.d.ts +1 -0
- package/dist/testing/mock-adapter.d.ts.map +1 -1
- package/dist/testing/mock-adapter.js +5 -2
- package/dist/testing/mock-adapter.js.map +1 -1
- package/package.json +10 -16
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ProviderAdapter } from "../core/types.js";
|
|
2
|
+
export interface ContractOptions {
|
|
3
|
+
/**
|
|
4
|
+
* The provider name every error/response must report. Defaults to the
|
|
5
|
+
* registry key passed as `providerName`. Override only when an adapter
|
|
6
|
+
* intentionally reports a different canonical name.
|
|
7
|
+
*/
|
|
8
|
+
expectedProviderName?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Runs the universal Meridian provider contract against a single adapter.
|
|
12
|
+
*
|
|
13
|
+
* This is the same battery every adapter must pass — adapters are just data
|
|
14
|
+
* sources, so the guarantees Meridian makes (error normalization, retry
|
|
15
|
+
* semantics, rate-limit parsing, pagination, request shaping) must hold
|
|
16
|
+
* identically across all of them.
|
|
17
|
+
*
|
|
18
|
+
* Only provider-agnostic invariants are asserted here. Provider-specific
|
|
19
|
+
* details (exact auth header format, vendor rate-limit header names, status
|
|
20
|
+
* codes that legitimately differ between vendors such as 403/404) belong in
|
|
21
|
+
* each provider's own `adapter.test.ts`.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* runProviderContract("stripe", new StripeAdapter());
|
|
25
|
+
*/
|
|
26
|
+
export declare function runProviderContract(providerName: string, adapter: ProviderAdapter, options?: ContractOptions): void;
|
|
27
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/testing/contract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAsB1B,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,eAAoB,GAC5B,IAAI,CA0KN"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { MeridianError, isRetryableByCode } from "../core/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* The frozen set of public error codes. Every error a provider adapter
|
|
5
|
+
* produces must resolve to one of these via `MeridianError.code`.
|
|
6
|
+
*/
|
|
7
|
+
const VALID_ERROR_CODES = new Set([
|
|
8
|
+
"AUTH_FAILED",
|
|
9
|
+
"RATE_LIMITED",
|
|
10
|
+
"NOT_FOUND",
|
|
11
|
+
"BAD_REQUEST",
|
|
12
|
+
"UPSTREAM_5XX",
|
|
13
|
+
"NETWORK_ERROR",
|
|
14
|
+
"TIMEOUT",
|
|
15
|
+
"UNKNOWN",
|
|
16
|
+
]);
|
|
17
|
+
/** Build a synthetic HTTP error in the shape adapters expect from the pipeline. */
|
|
18
|
+
function httpError(status, body = {}, headers) {
|
|
19
|
+
return { status, headers: new Headers(headers), body };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Runs the universal Meridian provider contract against a single adapter.
|
|
23
|
+
*
|
|
24
|
+
* This is the same battery every adapter must pass — adapters are just data
|
|
25
|
+
* sources, so the guarantees Meridian makes (error normalization, retry
|
|
26
|
+
* semantics, rate-limit parsing, pagination, request shaping) must hold
|
|
27
|
+
* identically across all of them.
|
|
28
|
+
*
|
|
29
|
+
* Only provider-agnostic invariants are asserted here. Provider-specific
|
|
30
|
+
* details (exact auth header format, vendor rate-limit header names, status
|
|
31
|
+
* codes that legitimately differ between vendors such as 403/404) belong in
|
|
32
|
+
* each provider's own `adapter.test.ts`.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* runProviderContract("stripe", new StripeAdapter());
|
|
36
|
+
*/
|
|
37
|
+
export function runProviderContract(providerName, adapter, options = {}) {
|
|
38
|
+
const expectedProvider = options.expectedProviderName ?? providerName;
|
|
39
|
+
describe(`Provider Contract: ${providerName}`, () => {
|
|
40
|
+
// ── Request Metadata ─────────────────────────────────────────────
|
|
41
|
+
describe("request metadata (buildRequest)", () => {
|
|
42
|
+
it("returns a well-formed request envelope with an absolute URL", () => {
|
|
43
|
+
const built = adapter.buildRequest({
|
|
44
|
+
endpoint: "/contract-test",
|
|
45
|
+
options: { method: "GET", query: { a: "1", b: 2 } },
|
|
46
|
+
authToken: { token: "contract-token", secret: "contract-secret" },
|
|
47
|
+
});
|
|
48
|
+
expect(typeof built.url).toBe("string");
|
|
49
|
+
expect(() => new URL(built.url)).not.toThrow();
|
|
50
|
+
expect(built.method).toBe("GET");
|
|
51
|
+
expect(built.headers).toBeTypeOf("object");
|
|
52
|
+
expect(built.headers).not.toBeNull();
|
|
53
|
+
});
|
|
54
|
+
it("does not attach a body to GET requests", () => {
|
|
55
|
+
const built = adapter.buildRequest({
|
|
56
|
+
endpoint: "/contract-test",
|
|
57
|
+
options: { method: "GET", body: { ignored: true } },
|
|
58
|
+
authToken: { token: "contract-token", secret: "contract-secret" },
|
|
59
|
+
});
|
|
60
|
+
expect(built.body).toBeUndefined();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
// ── Auth Failure ─────────────────────────────────────────────────
|
|
64
|
+
describe("auth failure", () => {
|
|
65
|
+
it("rejects empty credentials with an auth-category MeridianError", async () => {
|
|
66
|
+
await expect(adapter.authStrategy({})).rejects.toBeInstanceOf(MeridianError);
|
|
67
|
+
try {
|
|
68
|
+
await adapter.authStrategy({});
|
|
69
|
+
throw new Error("authStrategy resolved with empty credentials");
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const e = err;
|
|
73
|
+
expect(e.category).toBe("auth");
|
|
74
|
+
expect(e.provider).toBe(expectedProvider);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
// ── Error Mapping + Retry semantics ──────────────────────────────
|
|
79
|
+
describe("error mapping", () => {
|
|
80
|
+
// Only universally-agreed status codes. 403/404/409/422 legitimately
|
|
81
|
+
// differ between vendors and are covered in per-provider suites.
|
|
82
|
+
const cases = [
|
|
83
|
+
{ status: 401, category: "auth", retryable: false },
|
|
84
|
+
{ status: 429, category: "rate_limit", retryable: true },
|
|
85
|
+
{ status: 500, category: "provider", retryable: true },
|
|
86
|
+
{ status: 502, category: "provider", retryable: true },
|
|
87
|
+
{ status: 503, category: "provider", retryable: true },
|
|
88
|
+
];
|
|
89
|
+
for (const c of cases) {
|
|
90
|
+
it(`maps HTTP ${c.status} → ${c.category} (retryable=${c.retryable})`, () => {
|
|
91
|
+
const err = adapter.parseError(httpError(c.status));
|
|
92
|
+
expect(err).toBeInstanceOf(MeridianError);
|
|
93
|
+
expect(err.category).toBe(c.category);
|
|
94
|
+
expect(err.retryable).toBe(c.retryable);
|
|
95
|
+
expect(err.provider).toBe(expectedProvider);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
it("always produces a canonical public error code", () => {
|
|
99
|
+
for (const status of [401, 403, 404, 422, 429, 500, 503]) {
|
|
100
|
+
const err = adapter.parseError(httpError(status));
|
|
101
|
+
expect(VALID_ERROR_CODES.has(err.code)).toBe(true);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
it("keeps retryable consistent with the canonical code", () => {
|
|
105
|
+
// The retry strategy trusts `retryable`; it must agree with what the
|
|
106
|
+
// public error code implies, or retries diverge from documented behavior.
|
|
107
|
+
for (const status of [401, 429, 500, 502, 503]) {
|
|
108
|
+
const err = adapter.parseError(httpError(status));
|
|
109
|
+
expect(err.retryable).toBe(isRetryableByCode(err.code));
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
it("tags every error with the correct provider", () => {
|
|
113
|
+
for (const status of [401, 429, 500]) {
|
|
114
|
+
expect(adapter.parseError(httpError(status)).provider).toBe(expectedProvider);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
// ── Rate Limit ───────────────────────────────────────────────────
|
|
119
|
+
describe("rate limit", () => {
|
|
120
|
+
it("maps 429 to a retryable rate_limit error", () => {
|
|
121
|
+
const err = adapter.parseError(httpError(429, {}, { "Retry-After": "30" }));
|
|
122
|
+
expect(err.category).toBe("rate_limit");
|
|
123
|
+
expect(err.retryable).toBe(true);
|
|
124
|
+
});
|
|
125
|
+
it("returns numeric rate-limit info even when headers are absent", () => {
|
|
126
|
+
const rl = adapter.rateLimitPolicy(new Headers());
|
|
127
|
+
expect(typeof rl.limit).toBe("number");
|
|
128
|
+
expect(typeof rl.remaining).toBe("number");
|
|
129
|
+
expect(Number.isNaN(rl.limit)).toBe(false);
|
|
130
|
+
expect(Number.isNaN(rl.remaining)).toBe(false);
|
|
131
|
+
expect(rl.reset).toBeInstanceOf(Date);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
// ── Network Failure ──────────────────────────────────────────────
|
|
135
|
+
describe("network failure", () => {
|
|
136
|
+
it("maps a network error to a retryable network-category error", () => {
|
|
137
|
+
const err = adapter.parseError(new Error("fetch failed: network error (ECONNRESET)"));
|
|
138
|
+
expect(err.category).toBe("network");
|
|
139
|
+
expect(err.retryable).toBe(true);
|
|
140
|
+
expect(err.provider).toBe(expectedProvider);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
// ── Timeout ──────────────────────────────────────────────────────
|
|
144
|
+
describe("timeout", () => {
|
|
145
|
+
it("treats timeouts as retryable", () => {
|
|
146
|
+
const err = adapter.parseError(new Error("request timed out (ETIMEDOUT)"));
|
|
147
|
+
expect(err.retryable).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
// ── Pagination ───────────────────────────────────────────────────
|
|
151
|
+
describe("pagination", () => {
|
|
152
|
+
it("exposes a complete pagination strategy", () => {
|
|
153
|
+
const strategy = adapter.paginationStrategy();
|
|
154
|
+
for (const method of ["extractCursor", "extractTotal", "hasNext", "buildNextRequest"]) {
|
|
155
|
+
expect(typeof strategy[method]).toBe("function");
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
it("inspects a basic response without throwing", () => {
|
|
159
|
+
const strategy = adapter.paginationStrategy();
|
|
160
|
+
const raw = { status: 200, headers: new Headers(), body: {} };
|
|
161
|
+
expect(() => strategy.hasNext(raw)).not.toThrow();
|
|
162
|
+
expect(() => strategy.extractCursor(raw)).not.toThrow();
|
|
163
|
+
expect(() => strategy.extractTotal(raw)).not.toThrow();
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
// ── Response normalization ───────────────────────────────────────
|
|
167
|
+
describe("response normalization (parseResponse)", () => {
|
|
168
|
+
it("normalizes a success response to the Meridian envelope", () => {
|
|
169
|
+
const raw = { status: 200, headers: new Headers(), body: { ok: true } };
|
|
170
|
+
const normalized = adapter.parseResponse(raw);
|
|
171
|
+
expect(normalized).toHaveProperty("data");
|
|
172
|
+
expect(normalized).toHaveProperty("meta");
|
|
173
|
+
expect(normalized.meta.provider).toBe(expectedProvider);
|
|
174
|
+
expect(normalized.meta.rateLimit).toBeDefined();
|
|
175
|
+
expect(normalized.meta.rateLimit.reset).toBeInstanceOf(Date);
|
|
176
|
+
expect(typeof normalized.meta.rateLimit.limit).toBe("number");
|
|
177
|
+
expect(Array.isArray(normalized.meta.warnings)).toBe(true);
|
|
178
|
+
expect(typeof normalized.meta.schemaVersion).toBe("string");
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
// ── Idempotency ──────────────────────────────────────────────────
|
|
182
|
+
describe("idempotency config", () => {
|
|
183
|
+
it("marks GET as a safe operation and exposes overrides as a Map", () => {
|
|
184
|
+
const cfg = adapter.getIdempotencyConfig();
|
|
185
|
+
expect(cfg.defaultSafeOperations.has("GET")).toBe(true);
|
|
186
|
+
expect(cfg.operationOverrides).toBeInstanceOf(Map);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/testing/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/testing/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
export { MockAdapter } from "./mock-adapter.js";
|
|
2
2
|
export { Fixtures } from "./fixtures.js";
|
|
3
|
+
// Note: the contract test harness (`runProviderContract`) is intentionally NOT
|
|
4
|
+
// re-exported here. It imports `vitest` (a devDependency), so it is exposed via
|
|
5
|
+
// the dedicated `meridianjs/contract` subpath to keep this barrel — and the main
|
|
6
|
+
// entry point that re-exports it — free of test-runner dependencies at runtime.
|
|
3
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,+EAA+E;AAC/E,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF"}
|
|
@@ -41,6 +41,7 @@ export declare class MockAdapter implements ProviderAdapter {
|
|
|
41
41
|
simulateDelay(ms: number): this;
|
|
42
42
|
/** Clear recorded calls and registered handlers. */
|
|
43
43
|
reset(): this;
|
|
44
|
+
baseUrl?: string;
|
|
44
45
|
buildRequest(input: AdapterInput): BuiltRequest;
|
|
45
46
|
parseResponse(raw: RawResponse): NormalizedResponse;
|
|
46
47
|
parseError(raw: unknown): MeridianError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-adapter.d.ts","sourceRoot":"","sources":["../../src/testing/mock-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,CACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,KACpB,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAS;gBAEjB,YAAY,SAAS;IAIjC,uGAAuG;IACvG,SAAS,CACP,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACxD,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,GAC9B,IAAI;IAKP,gEAAgE;IAChE,aAAa,CACX,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACxD,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GACA,IAAI;IAmBP,2EAA2E;IAC3E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK/B,oDAAoD;IACpD,KAAK,IAAI,IAAI;IAOb,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY;IAe/C,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,kBAAkB;
|
|
1
|
+
{"version":3,"file":"mock-adapter.d.ts","sourceRoot":"","sources":["../../src/testing/mock-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,CACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,KACpB,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAS;gBAEjB,YAAY,SAAS;IAIjC,uGAAuG;IACvG,SAAS,CACP,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACxD,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,GAC9B,IAAI;IAKP,gEAAgE;IAChE,aAAa,CACX,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACxD,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GACA,IAAI;IAmBP,2EAA2E;IAC3E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK/B,oDAAoD;IACpD,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY;IAe/C,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,kBAAkB;IAanD,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa;IAOjC,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3D,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa;IAIjD,kBAAkB,IAAI,kBAAkB;IASxC,oBAAoB,IAAI,iBAAiB;IAOzC;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB9F,OAAO,CAAC,aAAa;CAItB"}
|
|
@@ -35,9 +35,10 @@ export class MockAdapter {
|
|
|
35
35
|
this.delayMs = 0;
|
|
36
36
|
return this;
|
|
37
37
|
}
|
|
38
|
+
baseUrl;
|
|
38
39
|
buildRequest(input) {
|
|
39
40
|
const { endpoint, options, authToken } = input;
|
|
40
|
-
const base = input.baseUrl ?? "https://mock.meridian.local";
|
|
41
|
+
const base = input.baseUrl ?? this.baseUrl ?? "https://mock.meridian.local";
|
|
41
42
|
const url = new URL(endpoint, base);
|
|
42
43
|
if (options.query) {
|
|
43
44
|
for (const [k, v] of Object.entries(options.query))
|
|
@@ -51,7 +52,9 @@ export class MockAdapter {
|
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
54
|
parseResponse(raw) {
|
|
54
|
-
|
|
55
|
+
const paginationStrategy = this.paginationStrategy();
|
|
56
|
+
const paginationInfo = ResponseNormalizer.extractPaginationInfo(raw, paginationStrategy);
|
|
57
|
+
return ResponseNormalizer.normalize(raw, this.providerName, { limit: 1000, remaining: 999, reset: new Date(Date.now() + 60_000) }, paginationInfo, [], "1.0.0");
|
|
55
58
|
}
|
|
56
59
|
parseError(raw) {
|
|
57
60
|
if (raw instanceof MeridianError)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-adapter.js","sourceRoot":"","sources":["../../src/testing/mock-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAc3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyBjD,MAAM,OAAO,WAAW;IACb,KAAK,GAAe,EAAE,CAAC;IACxB,QAAQ,GAAkB,EAAE,CAAC;IAC7B,OAAO,GAAG,CAAC,CAAC;IACZ,YAAY,CAAS;IAE7B,YAAY,YAAY,GAAG,MAAM;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,uGAAuG;IACvG,SAAS,CACP,OAAwD,EACxD,OAA+B;QAE/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,aAAa,CACX,OAAwD,EACxD,KAKC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpB,GAAG,OAAO;YACV,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,IAAI,aAAa,CACrB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,QAAQ,IAAI,UAAU,EAC5B,IAAI,CAAC,YAAY,EACjB,KAAK,CAAC,SAAS,IAAI,KAAK,EACxB,EAAE,EACF,SAAS,EACT,SAAS,EACT,KAAK,CAAC,MAAM,CACb,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,aAAa,CAAC,EAAU;QACtB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAmB;QAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-adapter.js","sourceRoot":"","sources":["../../src/testing/mock-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAc3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyBjD,MAAM,OAAO,WAAW;IACb,KAAK,GAAe,EAAE,CAAC;IACxB,QAAQ,GAAkB,EAAE,CAAC;IAC7B,OAAO,GAAG,CAAC,CAAC;IACZ,YAAY,CAAS;IAE7B,YAAY,YAAY,GAAG,MAAM;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,uGAAuG;IACvG,SAAS,CACP,OAAwD,EACxD,OAA+B;QAE/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,aAAa,CACX,OAAwD,EACxD,KAKC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpB,GAAG,OAAO;YACV,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,IAAI,aAAa,CACrB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,QAAQ,IAAI,UAAU,EAC5B,IAAI,CAAC,YAAY,EACjB,KAAK,CAAC,SAAS,IAAI,KAAK,EACxB,EAAE,EACF,SAAS,EACT,SAAS,EACT,KAAK,CAAC,MAAM,CACb,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,aAAa,CAAC,EAAU;QACtB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAU;IAEjB,YAAY,CAAC,KAAmB;QAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,6BAA6B,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,CAAC;QACD,OAAO;YACL,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;YACnB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;YAC3E,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,GAAgB;QAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACzF,OAAO,kBAAkB,CAAC,SAAS,CACjC,GAAG,EACH,IAAI,CAAC,YAAY,EACjB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,EACrE,cAAc,EACd,EAAE,EACF,OAAO,CACR,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,GAAY;QACrB,IAAI,GAAG,YAAY,aAAa;YAAE,OAAO,GAAG,CAAC;QAC7C,IAAI,GAAG,YAAY,KAAK;YACtB,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC9E,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAmB;QACpC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACjC,CAAC;IAED,eAAe,CAAC,QAAiB;QAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;YACzB,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;YACxB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;YACpB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,OAAO;YACL,qBAAqB,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1D,kBAAkB,EAAE,IAAI,GAAG,EAAE;SAC9B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,QAAgB,EAAE,OAAuB;QACrE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAEtE,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;YACjF,MAAM,aAAa,GACjB,CAAC,CAAC,CAAC,QAAQ;gBACX,CAAC,CAAC,CAAC,QAAQ,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACvF,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;IAEO,aAAa,CAAC,IAAkB;QACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;IACxE,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "meridianjs",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Meridian - A TypeScript-first SDK that enforces a single stable contract across all third-party API providers",
|
|
5
5
|
"main": "dist/public.js",
|
|
6
6
|
"types": "dist/public.d.ts",
|
|
@@ -9,14 +9,13 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/public.d.ts",
|
|
11
11
|
"import": "./dist/public.js"
|
|
12
|
+
},
|
|
13
|
+
"./contract": {
|
|
14
|
+
"types": "./dist/testing/contract.d.ts",
|
|
15
|
+
"import": "./dist/testing/contract.js"
|
|
12
16
|
}
|
|
13
17
|
},
|
|
14
|
-
"files": [
|
|
15
|
-
"dist",
|
|
16
|
-
"README.md",
|
|
17
|
-
"CHANGELOG.md",
|
|
18
|
-
"LICENSE.md"
|
|
19
|
-
],
|
|
18
|
+
"files": ["dist", "README.md", "CHANGELOG.md", "LICENSE.md"],
|
|
20
19
|
"sideEffects": false,
|
|
21
20
|
"scripts": {
|
|
22
21
|
"build": "tsc",
|
|
@@ -27,19 +26,14 @@
|
|
|
27
26
|
"format": "biome format --write .",
|
|
28
27
|
"prepublishOnly": "npm run build",
|
|
29
28
|
"proxy": "node dist/proxy/cli.js",
|
|
30
|
-
"proxy:build": "npm run build && npm run proxy"
|
|
29
|
+
"proxy:build": "npm run build && npm run proxy",
|
|
30
|
+
"example:swap": "vite-node examples/provider-swap/index.ts",
|
|
31
|
+
"test:contracts": "node scripts/test-contracts.mjs"
|
|
31
32
|
},
|
|
32
33
|
"bin": {
|
|
33
34
|
"boundary-proxy": "dist/proxy/cli.js"
|
|
34
35
|
},
|
|
35
|
-
"keywords": [
|
|
36
|
-
"api",
|
|
37
|
-
"sdk",
|
|
38
|
-
"normalization",
|
|
39
|
-
"circuit-breaker",
|
|
40
|
-
"rate-limiting",
|
|
41
|
-
"retry"
|
|
42
|
-
],
|
|
36
|
+
"keywords": ["api", "sdk", "normalization", "circuit-breaker", "rate-limiting", "retry"],
|
|
43
37
|
"license": "MIT",
|
|
44
38
|
"repository": {
|
|
45
39
|
"type": "git",
|