@pureq/pureq 1.0.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/LICENSE.md +21 -0
- package/README.md +932 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/scripts/benchmark.d.ts +2 -0
- package/dist/scripts/benchmark.d.ts.map +1 -0
- package/dist/scripts/benchmark.js +69 -0
- package/dist/scripts/benchmark.js.map +1 -0
- package/dist/scripts/edge-smoke-entry.d.ts +8 -0
- package/dist/scripts/edge-smoke-entry.d.ts.map +1 -0
- package/dist/scripts/edge-smoke-entry.js +23 -0
- package/dist/scripts/edge-smoke-entry.js.map +1 -0
- package/dist/src/adapters/fetchAdapter.d.ts +3 -0
- package/dist/src/adapters/fetchAdapter.d.ts.map +1 -0
- package/dist/src/adapters/fetchAdapter.js +4 -0
- package/dist/src/adapters/fetchAdapter.js.map +1 -0
- package/dist/src/adapters/instrumentedAdapter.d.ts +21 -0
- package/dist/src/adapters/instrumentedAdapter.d.ts.map +1 -0
- package/dist/src/adapters/instrumentedAdapter.js +25 -0
- package/dist/src/adapters/instrumentedAdapter.js.map +1 -0
- package/dist/src/client/createClient.d.ts +193 -0
- package/dist/src/client/createClient.d.ts.map +1 -0
- package/dist/src/client/createClient.js +310 -0
- package/dist/src/client/createClient.js.map +1 -0
- package/dist/src/executor/execute.d.ts +19 -0
- package/dist/src/executor/execute.d.ts.map +1 -0
- package/dist/src/executor/execute.js +121 -0
- package/dist/src/executor/execute.js.map +1 -0
- package/dist/src/index.d.ts +37 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +36 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/middleware/circuitBreaker.d.ts +77 -0
- package/dist/src/middleware/circuitBreaker.d.ts.map +1 -0
- package/dist/src/middleware/circuitBreaker.js +246 -0
- package/dist/src/middleware/circuitBreaker.js.map +1 -0
- package/dist/src/middleware/circuitBreakerKeys.d.ts +5 -0
- package/dist/src/middleware/circuitBreakerKeys.d.ts.map +1 -0
- package/dist/src/middleware/circuitBreakerKeys.js +30 -0
- package/dist/src/middleware/circuitBreakerKeys.js.map +1 -0
- package/dist/src/middleware/compose.d.ts +9 -0
- package/dist/src/middleware/compose.d.ts.map +1 -0
- package/dist/src/middleware/compose.js +45 -0
- package/dist/src/middleware/compose.js.map +1 -0
- package/dist/src/middleware/concurrencyLimit.d.ts +11 -0
- package/dist/src/middleware/concurrencyLimit.d.ts.map +1 -0
- package/dist/src/middleware/concurrencyLimit.js +126 -0
- package/dist/src/middleware/concurrencyLimit.js.map +1 -0
- package/dist/src/middleware/deadline.d.ts +10 -0
- package/dist/src/middleware/deadline.d.ts.map +1 -0
- package/dist/src/middleware/deadline.js +99 -0
- package/dist/src/middleware/deadline.js.map +1 -0
- package/dist/src/middleware/dedupe.d.ts +13 -0
- package/dist/src/middleware/dedupe.d.ts.map +1 -0
- package/dist/src/middleware/dedupe.js +46 -0
- package/dist/src/middleware/dedupe.js.map +1 -0
- package/dist/src/middleware/defaultTimeout.d.ts +6 -0
- package/dist/src/middleware/defaultTimeout.d.ts.map +1 -0
- package/dist/src/middleware/defaultTimeout.js +23 -0
- package/dist/src/middleware/defaultTimeout.js.map +1 -0
- package/dist/src/middleware/diagnostics.d.ts +28 -0
- package/dist/src/middleware/diagnostics.d.ts.map +1 -0
- package/dist/src/middleware/diagnostics.js +131 -0
- package/dist/src/middleware/diagnostics.js.map +1 -0
- package/dist/src/middleware/diagnosticsExporters.d.ts +27 -0
- package/dist/src/middleware/diagnosticsExporters.d.ts.map +1 -0
- package/dist/src/middleware/diagnosticsExporters.js +45 -0
- package/dist/src/middleware/diagnosticsExporters.js.map +1 -0
- package/dist/src/middleware/hedge.d.ts +17 -0
- package/dist/src/middleware/hedge.d.ts.map +1 -0
- package/dist/src/middleware/hedge.js +125 -0
- package/dist/src/middleware/hedge.js.map +1 -0
- package/dist/src/middleware/httpCache.d.ts +14 -0
- package/dist/src/middleware/httpCache.d.ts.map +1 -0
- package/dist/src/middleware/httpCache.js +126 -0
- package/dist/src/middleware/httpCache.js.map +1 -0
- package/dist/src/middleware/idempotencyKey.d.ts +12 -0
- package/dist/src/middleware/idempotencyKey.d.ts.map +1 -0
- package/dist/src/middleware/idempotencyKey.js +33 -0
- package/dist/src/middleware/idempotencyKey.js.map +1 -0
- package/dist/src/middleware/offlineQueue.d.ts +78 -0
- package/dist/src/middleware/offlineQueue.d.ts.map +1 -0
- package/dist/src/middleware/offlineQueue.js +189 -0
- package/dist/src/middleware/offlineQueue.js.map +1 -0
- package/dist/src/middleware/presets.d.ts +31 -0
- package/dist/src/middleware/presets.d.ts.map +1 -0
- package/dist/src/middleware/presets.js +122 -0
- package/dist/src/middleware/presets.js.map +1 -0
- package/dist/src/middleware/retry.d.ts +27 -0
- package/dist/src/middleware/retry.d.ts.map +1 -0
- package/dist/src/middleware/retry.js +189 -0
- package/dist/src/middleware/retry.js.map +1 -0
- package/dist/src/middleware/stalePolicy.d.ts +14 -0
- package/dist/src/middleware/stalePolicy.d.ts.map +1 -0
- package/dist/src/middleware/stalePolicy.js +13 -0
- package/dist/src/middleware/stalePolicy.js.map +1 -0
- package/dist/src/observability/otelMapping.d.ts +13 -0
- package/dist/src/observability/otelMapping.d.ts.map +1 -0
- package/dist/src/observability/otelMapping.js +31 -0
- package/dist/src/observability/otelMapping.js.map +1 -0
- package/dist/src/observability/otelProfiles.d.ts +16 -0
- package/dist/src/observability/otelProfiles.d.ts.map +1 -0
- package/dist/src/observability/otelProfiles.js +66 -0
- package/dist/src/observability/otelProfiles.js.map +1 -0
- package/dist/src/observability/redaction.d.ts +39 -0
- package/dist/src/observability/redaction.d.ts.map +1 -0
- package/dist/src/observability/redaction.js +112 -0
- package/dist/src/observability/redaction.js.map +1 -0
- package/dist/src/policy/guardrails.d.ts +14 -0
- package/dist/src/policy/guardrails.d.ts.map +1 -0
- package/dist/src/policy/guardrails.js +36 -0
- package/dist/src/policy/guardrails.js.map +1 -0
- package/dist/src/response/response.d.ts +58 -0
- package/dist/src/response/response.d.ts.map +1 -0
- package/dist/src/response/response.js +91 -0
- package/dist/src/response/response.js.map +1 -0
- package/dist/src/serializers/formUrlEncodedSerializer.d.ts +6 -0
- package/dist/src/serializers/formUrlEncodedSerializer.d.ts.map +1 -0
- package/dist/src/serializers/formUrlEncodedSerializer.js +38 -0
- package/dist/src/serializers/formUrlEncodedSerializer.js.map +1 -0
- package/dist/src/serializers/jsonBodySerializer.d.ts +3 -0
- package/dist/src/serializers/jsonBodySerializer.d.ts.map +1 -0
- package/dist/src/serializers/jsonBodySerializer.js +24 -0
- package/dist/src/serializers/jsonBodySerializer.js.map +1 -0
- package/dist/src/types/events.d.ts +49 -0
- package/dist/src/types/events.d.ts.map +1 -0
- package/dist/src/types/events.js +2 -0
- package/dist/src/types/events.js.map +1 -0
- package/dist/src/types/http.d.ts +78 -0
- package/dist/src/types/http.d.ts.map +1 -0
- package/dist/src/types/http.js +2 -0
- package/dist/src/types/http.js.map +1 -0
- package/dist/src/types/internal.d.ts +20 -0
- package/dist/src/types/internal.d.ts.map +1 -0
- package/dist/src/types/internal.js +2 -0
- package/dist/src/types/internal.js.map +1 -0
- package/dist/src/types/result.d.ts +32 -0
- package/dist/src/types/result.d.ts.map +1 -0
- package/dist/src/types/result.js +66 -0
- package/dist/src/types/result.js.map +1 -0
- package/dist/src/utils/crypto.d.ts +8 -0
- package/dist/src/utils/crypto.d.ts.map +1 -0
- package/dist/src/utils/crypto.js +21 -0
- package/dist/src/utils/crypto.js.map +1 -0
- package/dist/src/utils/policyTrace.d.ts +17 -0
- package/dist/src/utils/policyTrace.d.ts.map +1 -0
- package/dist/src/utils/policyTrace.js +34 -0
- package/dist/src/utils/policyTrace.js.map +1 -0
- package/dist/src/utils/stableKey.d.ts +17 -0
- package/dist/src/utils/stableKey.d.ts.map +1 -0
- package/dist/src/utils/stableKey.js +41 -0
- package/dist/src/utils/stableKey.js.map +1 -0
- package/dist/src/utils/url.d.ts +22 -0
- package/dist/src/utils/url.d.ts.map +1 -0
- package/dist/src/utils/url.js +2 -0
- package/dist/src/utils/url.js.map +1 -0
- package/dist/tests/adapter-serializer.test.d.ts +2 -0
- package/dist/tests/adapter-serializer.test.d.ts.map +1 -0
- package/dist/tests/adapter-serializer.test.js +59 -0
- package/dist/tests/adapter-serializer.test.js.map +1 -0
- package/dist/tests/browser-runtime.smoke.test.d.ts +2 -0
- package/dist/tests/browser-runtime.smoke.test.d.ts.map +1 -0
- package/dist/tests/browser-runtime.smoke.test.js +17 -0
- package/dist/tests/browser-runtime.smoke.test.js.map +1 -0
- package/dist/tests/circuit-breaker.test.d.ts +2 -0
- package/dist/tests/circuit-breaker.test.d.ts.map +1 -0
- package/dist/tests/circuit-breaker.test.js +184 -0
- package/dist/tests/circuit-breaker.test.js.map +1 -0
- package/dist/tests/client.integration.d.ts +2 -0
- package/dist/tests/client.integration.d.ts.map +1 -0
- package/dist/tests/client.integration.js +44 -0
- package/dist/tests/client.integration.js.map +1 -0
- package/dist/tests/client.integration.test.d.ts +2 -0
- package/dist/tests/client.integration.test.d.ts.map +1 -0
- package/dist/tests/client.integration.test.js +63 -0
- package/dist/tests/client.integration.test.js.map +1 -0
- package/dist/tests/compose.test.d.ts +2 -0
- package/dist/tests/compose.test.d.ts.map +1 -0
- package/dist/tests/compose.test.js +24 -0
- package/dist/tests/compose.test.js.map +1 -0
- package/dist/tests/concurrency-limit.test.d.ts +2 -0
- package/dist/tests/concurrency-limit.test.d.ts.map +1 -0
- package/dist/tests/concurrency-limit.test.js +87 -0
- package/dist/tests/concurrency-limit.test.js.map +1 -0
- package/dist/tests/deadline-middleware.test.d.ts +2 -0
- package/dist/tests/deadline-middleware.test.d.ts.map +1 -0
- package/dist/tests/deadline-middleware.test.js +38 -0
- package/dist/tests/deadline-middleware.test.js.map +1 -0
- package/dist/tests/dedupe-middleware.test.d.ts +2 -0
- package/dist/tests/dedupe-middleware.test.d.ts.map +1 -0
- package/dist/tests/dedupe-middleware.test.js +56 -0
- package/dist/tests/dedupe-middleware.test.js.map +1 -0
- package/dist/tests/default-timeout.test.d.ts +2 -0
- package/dist/tests/default-timeout.test.d.ts.map +1 -0
- package/dist/tests/default-timeout.test.js +28 -0
- package/dist/tests/default-timeout.test.js.map +1 -0
- package/dist/tests/diagnostics-exporters.test.d.ts +2 -0
- package/dist/tests/diagnostics-exporters.test.d.ts.map +1 -0
- package/dist/tests/diagnostics-exporters.test.js +41 -0
- package/dist/tests/diagnostics-exporters.test.js.map +1 -0
- package/dist/tests/diagnostics.test.d.ts +2 -0
- package/dist/tests/diagnostics.test.d.ts.map +1 -0
- package/dist/tests/diagnostics.test.js +38 -0
- package/dist/tests/diagnostics.test.js.map +1 -0
- package/dist/tests/error-metadata.test.d.ts +2 -0
- package/dist/tests/error-metadata.test.d.ts.map +1 -0
- package/dist/tests/error-metadata.test.js +23 -0
- package/dist/tests/error-metadata.test.js.map +1 -0
- package/dist/tests/execute-timeout.test.d.ts +2 -0
- package/dist/tests/execute-timeout.test.d.ts.map +1 -0
- package/dist/tests/execute-timeout.test.js +30 -0
- package/dist/tests/execute-timeout.test.js.map +1 -0
- package/dist/tests/form-serializer.test.d.ts +2 -0
- package/dist/tests/form-serializer.test.d.ts.map +1 -0
- package/dist/tests/form-serializer.test.js +16 -0
- package/dist/tests/form-serializer.test.js.map +1 -0
- package/dist/tests/hedge.test.d.ts +2 -0
- package/dist/tests/hedge.test.d.ts.map +1 -0
- package/dist/tests/hedge.test.js +45 -0
- package/dist/tests/hedge.test.js.map +1 -0
- package/dist/tests/http-cache.test.d.ts +2 -0
- package/dist/tests/http-cache.test.d.ts.map +1 -0
- package/dist/tests/http-cache.test.js +60 -0
- package/dist/tests/http-cache.test.js.map +1 -0
- package/dist/tests/idempotency-key.test.d.ts +2 -0
- package/dist/tests/idempotency-key.test.d.ts.map +1 -0
- package/dist/tests/idempotency-key.test.js +31 -0
- package/dist/tests/idempotency-key.test.js.map +1 -0
- package/dist/tests/instrumented-adapter.test.d.ts +2 -0
- package/dist/tests/instrumented-adapter.test.d.ts.map +1 -0
- package/dist/tests/instrumented-adapter.test.js +33 -0
- package/dist/tests/instrumented-adapter.test.js.map +1 -0
- package/dist/tests/interceptor-order.test.d.ts +2 -0
- package/dist/tests/interceptor-order.test.d.ts.map +1 -0
- package/dist/tests/interceptor-order.test.js +38 -0
- package/dist/tests/interceptor-order.test.js.map +1 -0
- package/dist/tests/json-helper.test.d.ts +2 -0
- package/dist/tests/json-helper.test.d.ts.map +1 -0
- package/dist/tests/json-helper.test.js +42 -0
- package/dist/tests/json-helper.test.js.map +1 -0
- package/dist/tests/observability.test.d.ts +2 -0
- package/dist/tests/observability.test.d.ts.map +1 -0
- package/dist/tests/observability.test.js +59 -0
- package/dist/tests/observability.test.js.map +1 -0
- package/dist/tests/offline-queue.test.d.ts +2 -0
- package/dist/tests/offline-queue.test.d.ts.map +1 -0
- package/dist/tests/offline-queue.test.js +35 -0
- package/dist/tests/offline-queue.test.js.map +1 -0
- package/dist/tests/otel-mapping.test.d.ts +2 -0
- package/dist/tests/otel-mapping.test.d.ts.map +1 -0
- package/dist/tests/otel-mapping.test.js +20 -0
- package/dist/tests/otel-mapping.test.js.map +1 -0
- package/dist/tests/policy-guardrails.test.d.ts +2 -0
- package/dist/tests/policy-guardrails.test.d.ts.map +1 -0
- package/dist/tests/policy-guardrails.test.js +25 -0
- package/dist/tests/policy-guardrails.test.js.map +1 -0
- package/dist/tests/presets.test.d.ts +2 -0
- package/dist/tests/presets.test.d.ts.map +1 -0
- package/dist/tests/presets.test.js +41 -0
- package/dist/tests/presets.test.js.map +1 -0
- package/dist/tests/public-api.contract.d.ts +2 -0
- package/dist/tests/public-api.contract.d.ts.map +1 -0
- package/dist/tests/public-api.contract.js +14 -0
- package/dist/tests/public-api.contract.js.map +1 -0
- package/dist/tests/public-api.contract.test.d.ts +2 -0
- package/dist/tests/public-api.contract.test.d.ts.map +1 -0
- package/dist/tests/public-api.contract.test.js +25 -0
- package/dist/tests/public-api.contract.test.js.map +1 -0
- package/dist/tests/redaction.test.d.ts +2 -0
- package/dist/tests/redaction.test.d.ts.map +1 -0
- package/dist/tests/redaction.test.js +23 -0
- package/dist/tests/redaction.test.js.map +1 -0
- package/dist/tests/retry-after-budget.test.d.ts +2 -0
- package/dist/tests/retry-after-budget.test.d.ts.map +1 -0
- package/dist/tests/retry-after-budget.test.js +72 -0
- package/dist/tests/retry-after-budget.test.js.map +1 -0
- package/dist/tests/retry-policy-trace.test.d.ts +2 -0
- package/dist/tests/retry-policy-trace.test.d.ts.map +1 -0
- package/dist/tests/retry-policy-trace.test.js +35 -0
- package/dist/tests/retry-policy-trace.test.js.map +1 -0
- package/dist/tests/retry-policy.test.d.ts +2 -0
- package/dist/tests/retry-policy.test.d.ts.map +1 -0
- package/dist/tests/retry-policy.test.js +51 -0
- package/dist/tests/retry-policy.test.js.map +1 -0
- package/dist/tests/retry.stress.d.ts +2 -0
- package/dist/tests/retry.stress.d.ts.map +1 -0
- package/dist/tests/retry.stress.js +21 -0
- package/dist/tests/retry.stress.js.map +1 -0
- package/dist/tests/retry.stress.test.d.ts +2 -0
- package/dist/tests/retry.stress.test.d.ts.map +1 -0
- package/dist/tests/retry.stress.test.js +21 -0
- package/dist/tests/retry.stress.test.js.map +1 -0
- package/package.json +63 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../scripts/benchmark.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
import { circuitBreaker, createClient, dedupe, retry } from "../src/index";
|
|
3
|
+
function percentile(values, p) {
|
|
4
|
+
if (values.length === 0) {
|
|
5
|
+
return 0;
|
|
6
|
+
}
|
|
7
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
8
|
+
const idx = Math.min(sorted.length - 1, Math.ceil((p / 100) * sorted.length) - 1);
|
|
9
|
+
return sorted[idx] ?? 0;
|
|
10
|
+
}
|
|
11
|
+
async function runScenario(name, iterations, fn) {
|
|
12
|
+
const samples = [];
|
|
13
|
+
const started = performance.now();
|
|
14
|
+
for (let i = 0; i < iterations; i++) {
|
|
15
|
+
const t0 = performance.now();
|
|
16
|
+
await fn(i);
|
|
17
|
+
samples.push(performance.now() - t0);
|
|
18
|
+
}
|
|
19
|
+
const totalMs = performance.now() - started;
|
|
20
|
+
const opsPerSec = (iterations / totalMs) * 1000;
|
|
21
|
+
return {
|
|
22
|
+
name,
|
|
23
|
+
iterations,
|
|
24
|
+
totalMs,
|
|
25
|
+
opsPerSec,
|
|
26
|
+
p50: percentile(samples, 50),
|
|
27
|
+
p95: percentile(samples, 95),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async function main() {
|
|
31
|
+
const baseAdapter = async () => {
|
|
32
|
+
return new Response(JSON.stringify({ ok: true }), {
|
|
33
|
+
status: 200,
|
|
34
|
+
headers: { "content-type": "application/json" },
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
const baselineClient = createClient({ adapter: baseAdapter });
|
|
38
|
+
const resilientClient = createClient({ adapter: baseAdapter })
|
|
39
|
+
.use(dedupe())
|
|
40
|
+
.use(retry({ maxRetries: 1, delay: 0, backoff: false }))
|
|
41
|
+
.use(circuitBreaker({ failureThreshold: 5, cooldownMs: 1000 }));
|
|
42
|
+
const iterations = 5000;
|
|
43
|
+
await runScenario("warmup", 300, async () => {
|
|
44
|
+
await baselineClient.getResult("https://bench.local/ping");
|
|
45
|
+
});
|
|
46
|
+
const results = [];
|
|
47
|
+
results.push(await runScenario("baseline:getResult", iterations, async () => {
|
|
48
|
+
await baselineClient.getResult("https://bench.local/ping");
|
|
49
|
+
}));
|
|
50
|
+
results.push(await runScenario("resilient-stack:getResult", iterations, async () => {
|
|
51
|
+
await resilientClient.getResult("https://bench.local/ping");
|
|
52
|
+
}));
|
|
53
|
+
results.push(await runScenario("baseline:getJson", iterations, async () => {
|
|
54
|
+
await baselineClient.getJson("https://bench.local/ping");
|
|
55
|
+
}));
|
|
56
|
+
console.log("pureq benchmark results");
|
|
57
|
+
console.log("iterations per scenario:", iterations);
|
|
58
|
+
console.log("");
|
|
59
|
+
for (const row of results) {
|
|
60
|
+
console.log(`${row.name.padEnd(28)} | ops/s=${row.opsPerSec.toFixed(0).padStart(7)} | p50=${row.p50
|
|
61
|
+
.toFixed(3)
|
|
62
|
+
.padStart(7)}ms | p95=${row.p95.toFixed(3).padStart(7)}ms`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
main().catch((error) => {
|
|
66
|
+
console.error(error);
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../scripts/benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-smoke-entry.d.ts","sourceRoot":"","sources":["../../scripts/edge-smoke-entry.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,oBAAoB,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { circuitBreaker, createClient, dedupe, retry } from "../src/index";
|
|
2
|
+
globalThis.__PUREQ_EDGE_SMOKE__ = async () => {
|
|
3
|
+
const client = createClient({
|
|
4
|
+
adapter: async () => {
|
|
5
|
+
return new Response(JSON.stringify({ ok: true }), {
|
|
6
|
+
status: 200,
|
|
7
|
+
headers: { "content-type": "application/json" },
|
|
8
|
+
});
|
|
9
|
+
},
|
|
10
|
+
})
|
|
11
|
+
.use(dedupe())
|
|
12
|
+
.use(retry({ maxRetries: 1, delay: 0, backoff: false }))
|
|
13
|
+
.use(circuitBreaker({ failureThreshold: 3, cooldownMs: 1000 }));
|
|
14
|
+
const result = await client.getResult("https://edge.example.com/health");
|
|
15
|
+
if (!result.ok) {
|
|
16
|
+
return { ok: false, status: 0 };
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
ok: result.data.ok,
|
|
20
|
+
status: result.data.status,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=edge-smoke-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-smoke-entry.js","sourceRoot":"","sources":["../../scripts/edge-smoke-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAO3E,UAAU,CAAC,oBAAoB,GAAG,KAAK,IAAI,EAAE;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;gBAChD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;SACC,GAAG,CAAC,MAAM,EAAE,CAAC;SACb,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;SACvD,GAAG,CAAC,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/fetchAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAO,MAAM,YAAY,EAAE,WAE1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchAdapter.js","sourceRoot":"","sources":["../../../src/adapters/fetchAdapter.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAgB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC3D,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HttpAdapter } from "../types/http";
|
|
2
|
+
export interface AdapterStartEvent {
|
|
3
|
+
readonly url: string;
|
|
4
|
+
readonly init: RequestInit;
|
|
5
|
+
readonly startedAt: number;
|
|
6
|
+
}
|
|
7
|
+
export interface AdapterSuccessEvent extends AdapterStartEvent {
|
|
8
|
+
readonly response: Response;
|
|
9
|
+
readonly durationMs: number;
|
|
10
|
+
}
|
|
11
|
+
export interface AdapterErrorEvent extends AdapterStartEvent {
|
|
12
|
+
readonly error: unknown;
|
|
13
|
+
readonly durationMs: number;
|
|
14
|
+
}
|
|
15
|
+
export interface AdapterHooks {
|
|
16
|
+
readonly onStart?: (event: AdapterStartEvent) => void;
|
|
17
|
+
readonly onSuccess?: (event: AdapterSuccessEvent) => void;
|
|
18
|
+
readonly onError?: (event: AdapterErrorEvent) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function createInstrumentedAdapter(baseAdapter: HttpAdapter, hooks?: AdapterHooks): HttpAdapter;
|
|
21
|
+
//# sourceMappingURL=instrumentedAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentedAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/instrumentedAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,WAAW,EACxB,KAAK,GAAE,YAAiB,GACvB,WAAW,CAuBb"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function createInstrumentedAdapter(baseAdapter, hooks = {}) {
|
|
2
|
+
return async (url, init) => {
|
|
3
|
+
const startedAt = Date.now();
|
|
4
|
+
const startEvent = { url, init, startedAt };
|
|
5
|
+
hooks.onStart?.(startEvent);
|
|
6
|
+
try {
|
|
7
|
+
const response = await baseAdapter(url, init);
|
|
8
|
+
hooks.onSuccess?.({
|
|
9
|
+
...startEvent,
|
|
10
|
+
response,
|
|
11
|
+
durationMs: Date.now() - startedAt,
|
|
12
|
+
});
|
|
13
|
+
return response;
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
hooks.onError?.({
|
|
17
|
+
...startEvent,
|
|
18
|
+
error,
|
|
19
|
+
durationMs: Date.now() - startedAt,
|
|
20
|
+
});
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=instrumentedAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentedAdapter.js","sourceRoot":"","sources":["../../../src/adapters/instrumentedAdapter.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,yBAAyB,CACvC,WAAwB,EACxB,QAAsB,EAAE;IAExB,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAsB,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC/D,KAAK,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;QAE5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9C,KAAK,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,UAAU;gBACb,QAAQ;gBACR,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;gBACd,GAAG,UAAU;gBACb,KAAK;gBACL,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import type { BodySerializer, HttpAdapter, InterceptorEntry, Middleware, RequestConfig, RequestInterceptor, ResponseInterceptor } from "../types/http";
|
|
2
|
+
import type { ExtractParams } from "../utils/url";
|
|
3
|
+
import type { HttpResponse } from "../response/response";
|
|
4
|
+
import { type HttpResult, type PureqError, type Result } from "../types/result";
|
|
5
|
+
import type { TransportErrorEvent, TransportStartEvent, TransportSuccessEvent } from "../types/events";
|
|
6
|
+
type PathParams<Path extends string> = keyof ExtractParams<Path> extends never ? {
|
|
7
|
+
readonly params?: ExtractParams<Path>;
|
|
8
|
+
} : {
|
|
9
|
+
readonly params: ExtractParams<Path>;
|
|
10
|
+
};
|
|
11
|
+
type RequestOptionsFor<Path extends string> = PathParams<Path> & Omit<RequestConfig, "method" | "url" | "params">;
|
|
12
|
+
type FetchLikeRequestOptions = Omit<RequestConfig, "method" | "url"> & {
|
|
13
|
+
readonly method?: RequestConfig["method"];
|
|
14
|
+
};
|
|
15
|
+
type JsonResult<T> = Result<T, PureqError>;
|
|
16
|
+
interface TraceContext {
|
|
17
|
+
readonly traceparent?: string;
|
|
18
|
+
readonly tracestate?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface RequestStartEvent {
|
|
21
|
+
readonly phase: "start";
|
|
22
|
+
readonly at: TransportStartEvent["at"];
|
|
23
|
+
readonly requestId: string;
|
|
24
|
+
readonly method: TransportStartEvent["method"];
|
|
25
|
+
readonly url: TransportStartEvent["url"];
|
|
26
|
+
readonly startedAt: TransportStartEvent["startedAt"];
|
|
27
|
+
}
|
|
28
|
+
export interface RequestSuccessEvent {
|
|
29
|
+
readonly phase: "success";
|
|
30
|
+
readonly at: TransportSuccessEvent["at"];
|
|
31
|
+
readonly requestId: string;
|
|
32
|
+
readonly method: TransportSuccessEvent["method"];
|
|
33
|
+
readonly url: TransportSuccessEvent["url"];
|
|
34
|
+
readonly startedAt: TransportSuccessEvent["startedAt"];
|
|
35
|
+
readonly latencyMs: TransportSuccessEvent["durationMs"];
|
|
36
|
+
readonly durationMs: TransportSuccessEvent["durationMs"];
|
|
37
|
+
readonly status: TransportSuccessEvent["status"];
|
|
38
|
+
readonly retryCount: TransportSuccessEvent["retryCount"];
|
|
39
|
+
}
|
|
40
|
+
export interface RequestErrorEvent {
|
|
41
|
+
readonly phase: "error";
|
|
42
|
+
readonly at: TransportErrorEvent["at"];
|
|
43
|
+
readonly requestId: string;
|
|
44
|
+
readonly method: TransportErrorEvent["method"];
|
|
45
|
+
readonly url: TransportErrorEvent["url"];
|
|
46
|
+
readonly startedAt: TransportErrorEvent["startedAt"];
|
|
47
|
+
readonly latencyMs: TransportErrorEvent["durationMs"];
|
|
48
|
+
readonly durationMs: TransportErrorEvent["durationMs"];
|
|
49
|
+
readonly errorKind: TransportErrorEvent["errorKind"];
|
|
50
|
+
readonly error: PureqError;
|
|
51
|
+
}
|
|
52
|
+
export interface ObservabilityHooks {
|
|
53
|
+
readonly onRequestStart?: (event: RequestStartEvent) => void;
|
|
54
|
+
readonly onRequestSuccess?: (event: RequestSuccessEvent) => void;
|
|
55
|
+
readonly onRequestError?: (event: RequestErrorEvent) => void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Initial configuration for the client
|
|
59
|
+
*/
|
|
60
|
+
export interface ClientOptions {
|
|
61
|
+
readonly baseURL?: string;
|
|
62
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
63
|
+
readonly middlewares?: readonly Middleware[];
|
|
64
|
+
readonly requestInterceptors?: readonly InterceptorEntry<RequestInterceptor>[];
|
|
65
|
+
readonly responseInterceptors?: readonly InterceptorEntry<ResponseInterceptor>[];
|
|
66
|
+
readonly hooks?: ObservabilityHooks;
|
|
67
|
+
readonly requestIdHeaderName?: string;
|
|
68
|
+
readonly requestIdFactory?: () => string;
|
|
69
|
+
readonly traceContextProvider?: () => TraceContext | undefined;
|
|
70
|
+
readonly adapter?: HttpAdapter;
|
|
71
|
+
readonly bodySerializer?: BodySerializer;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Represents the main pureq library client instance.
|
|
75
|
+
* All client instances are immutable; adding middleware or changing configuration
|
|
76
|
+
* returns a new instance of the client.
|
|
77
|
+
*/
|
|
78
|
+
export interface PureqClient {
|
|
79
|
+
/**
|
|
80
|
+
* Extends the current client with a new middleware.
|
|
81
|
+
* @param middleware - The middleware function to register
|
|
82
|
+
* @returns A NEW PureqClient instance with the middleware applied
|
|
83
|
+
*/
|
|
84
|
+
readonly use: (middleware: Middleware) => PureqClient;
|
|
85
|
+
/**
|
|
86
|
+
* Registers a request interceptor and returns a new client instance.
|
|
87
|
+
*/
|
|
88
|
+
readonly useRequestInterceptor: (interceptor: RequestInterceptor, options?: {
|
|
89
|
+
readonly priority?: number;
|
|
90
|
+
readonly name?: string;
|
|
91
|
+
}) => PureqClient;
|
|
92
|
+
/**
|
|
93
|
+
* Registers a response interceptor and returns a new client instance.
|
|
94
|
+
*/
|
|
95
|
+
readonly useResponseInterceptor: (interceptor: ResponseInterceptor, options?: {
|
|
96
|
+
readonly priority?: number;
|
|
97
|
+
readonly name?: string;
|
|
98
|
+
}) => PureqClient;
|
|
99
|
+
/**
|
|
100
|
+
* Performs an asynchronous GET request.
|
|
101
|
+
* Path parameters defined in the URL (e.g., :id) are type-checked.
|
|
102
|
+
*
|
|
103
|
+
* @param url - The URL template (e.g., "/users/:id")
|
|
104
|
+
* @param options - Request options including path params, headers, and signal
|
|
105
|
+
*/
|
|
106
|
+
readonly get: <Path extends string>(url: Path, options?: RequestOptionsFor<Path>) => Promise<HttpResponse>;
|
|
107
|
+
/**
|
|
108
|
+
* Non-throwing GET that returns Result<HttpResponse, PureqError>.
|
|
109
|
+
*/
|
|
110
|
+
readonly getResult: <Path extends string>(url: Path, options?: RequestOptionsFor<Path>) => Promise<HttpResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Performs an asynchronous POST request.
|
|
113
|
+
*/
|
|
114
|
+
readonly post: <Path extends string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<HttpResponse>;
|
|
115
|
+
/**
|
|
116
|
+
* Non-throwing POST that returns Result<HttpResponse, PureqError>.
|
|
117
|
+
*/
|
|
118
|
+
readonly postResult: <Path extends string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<HttpResult>;
|
|
119
|
+
/**
|
|
120
|
+
* Performs an asynchronous PUT request.
|
|
121
|
+
*/
|
|
122
|
+
readonly put: <Path extends string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<HttpResponse>;
|
|
123
|
+
readonly putResult: <Path extends string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<HttpResult>;
|
|
124
|
+
/**
|
|
125
|
+
* Performs an asynchronous PATCH request.
|
|
126
|
+
*/
|
|
127
|
+
readonly patch: <Path extends string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<HttpResponse>;
|
|
128
|
+
readonly patchResult: <Path extends string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<HttpResult>;
|
|
129
|
+
/**
|
|
130
|
+
* Performs an asynchronous DELETE request.
|
|
131
|
+
*/
|
|
132
|
+
readonly delete: <Path extends string>(url: Path, options?: RequestOptionsFor<Path>) => Promise<HttpResponse>;
|
|
133
|
+
readonly deleteResult: <Path extends string>(url: Path, options?: RequestOptionsFor<Path>) => Promise<HttpResult>;
|
|
134
|
+
/**
|
|
135
|
+
* Beginner-friendly fetch-like entry point with a familiar `(url, init)` shape.
|
|
136
|
+
*/
|
|
137
|
+
readonly fetch: <Path extends string>(url: Path, init?: FetchLikeRequestOptions) => Promise<HttpResponse>;
|
|
138
|
+
/**
|
|
139
|
+
* Non-throwing fetch-like entry point.
|
|
140
|
+
*/
|
|
141
|
+
readonly fetchResult: <Path extends string>(url: Path, init?: FetchLikeRequestOptions) => Promise<HttpResult>;
|
|
142
|
+
/**
|
|
143
|
+
* Beginner-friendly fetch-like helper that returns parsed JSON.
|
|
144
|
+
*/
|
|
145
|
+
readonly fetchJson: <T, Path extends string = string>(url: Path, init?: FetchLikeRequestOptions) => Promise<T>;
|
|
146
|
+
/**
|
|
147
|
+
* A low-level generic request method that accepts a full config object.
|
|
148
|
+
*/
|
|
149
|
+
readonly request: <Path extends string>(config: {
|
|
150
|
+
readonly url: Path;
|
|
151
|
+
} & PathParams<Path> & Omit<RequestConfig, "url" | "params">) => Promise<HttpResponse>;
|
|
152
|
+
/**
|
|
153
|
+
* Non-throwing generic request.
|
|
154
|
+
*/
|
|
155
|
+
readonly requestResult: <Path extends string>(config: {
|
|
156
|
+
readonly url: Path;
|
|
157
|
+
} & PathParams<Path> & Omit<RequestConfig, "url" | "params">) => Promise<HttpResult>;
|
|
158
|
+
/**
|
|
159
|
+
* Beginner-friendly helper that performs request + HTTP status check + JSON parsing.
|
|
160
|
+
* Throws on transport, HTTP, or JSON parse failures.
|
|
161
|
+
*/
|
|
162
|
+
readonly requestJson: <T, Path extends string = string>(config: {
|
|
163
|
+
readonly url: Path;
|
|
164
|
+
} & PathParams<Path> & Omit<RequestConfig, "url" | "params">) => Promise<T>;
|
|
165
|
+
/**
|
|
166
|
+
* Non-throwing version of requestJson.
|
|
167
|
+
*/
|
|
168
|
+
readonly requestJsonResult: <T, Path extends string = string>(config: {
|
|
169
|
+
readonly url: Path;
|
|
170
|
+
} & PathParams<Path> & Omit<RequestConfig, "url" | "params">) => Promise<JsonResult<T>>;
|
|
171
|
+
/**
|
|
172
|
+
* Beginner-friendly GET helper that returns parsed JSON.
|
|
173
|
+
*/
|
|
174
|
+
readonly getJson: <T, Path extends string = string>(url: Path, options?: RequestOptionsFor<Path>) => Promise<T>;
|
|
175
|
+
/**
|
|
176
|
+
* Non-throwing GET helper that returns parsed JSON in Result.
|
|
177
|
+
*/
|
|
178
|
+
readonly getJsonResult: <T, Path extends string = string>(url: Path, options?: RequestOptionsFor<Path>) => Promise<JsonResult<T>>;
|
|
179
|
+
/**
|
|
180
|
+
* Beginner-friendly POST helper that returns parsed JSON.
|
|
181
|
+
*/
|
|
182
|
+
readonly postJson: <T, Path extends string = string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<T>;
|
|
183
|
+
/**
|
|
184
|
+
* Non-throwing POST helper that returns parsed JSON in Result.
|
|
185
|
+
*/
|
|
186
|
+
readonly postJsonResult: <T, Path extends string = string>(url: Path, body?: unknown, options?: Omit<RequestOptionsFor<Path>, "body">) => Promise<JsonResult<T>>;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Creates a new, immutable pureq client.
|
|
190
|
+
*/
|
|
191
|
+
export declare function createClient(baseOptions?: ClientOptions): PureqClient;
|
|
192
|
+
export {};
|
|
193
|
+
//# sourceMappingURL=createClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createClient.d.ts","sourceRoot":"","sources":["../../../src/client/createClient.ts"],"names":[],"mappings":"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"}
|