@pureq/pureq 1.1.6 → 1.1.7
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/dist/adapters/fetchAdapter.d.ts.map +1 -0
- package/dist/adapters/fetchAdapter.js.map +1 -0
- package/dist/adapters/instrumentedAdapter.d.ts.map +1 -0
- package/dist/adapters/instrumentedAdapter.js.map +1 -0
- package/dist/adapters/storage/encryptedStorage.d.ts.map +1 -0
- package/dist/adapters/storage/encryptedStorage.js.map +1 -0
- package/dist/adapters/storage/indexedDBAdapter.d.ts.map +1 -0
- package/dist/adapters/storage/indexedDBAdapter.js.map +1 -0
- package/dist/client/createClient.d.ts.map +1 -0
- package/dist/client/createClient.js.map +1 -0
- package/dist/executor/execute.d.ts.map +1 -0
- package/dist/executor/execute.js.map +1 -0
- package/dist/index.d.ts +42 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/authRefresh.d.ts.map +1 -0
- package/dist/middleware/authRefresh.js.map +1 -0
- package/dist/middleware/circuitBreaker.d.ts.map +1 -0
- package/dist/middleware/circuitBreaker.js.map +1 -0
- package/dist/middleware/circuitBreakerKeys.d.ts.map +1 -0
- package/dist/middleware/circuitBreakerKeys.js.map +1 -0
- package/dist/middleware/compose.d.ts.map +1 -0
- package/dist/middleware/compose.js.map +1 -0
- package/dist/middleware/concurrencyLimit.d.ts.map +1 -0
- package/dist/middleware/concurrencyLimit.js.map +1 -0
- package/dist/middleware/deadline.d.ts.map +1 -0
- package/dist/middleware/deadline.js.map +1 -0
- package/dist/middleware/dedupe.d.ts.map +1 -0
- package/dist/middleware/dedupe.js.map +1 -0
- package/dist/middleware/defaultTimeout.d.ts.map +1 -0
- package/dist/middleware/defaultTimeout.js.map +1 -0
- package/dist/middleware/diagnostics.d.ts.map +1 -0
- package/dist/middleware/diagnostics.js.map +1 -0
- package/dist/middleware/diagnosticsExporters.d.ts.map +1 -0
- package/dist/middleware/diagnosticsExporters.js.map +1 -0
- package/dist/middleware/fallback.d.ts.map +1 -0
- package/dist/middleware/fallback.js.map +1 -0
- package/dist/middleware/hedge.d.ts.map +1 -0
- package/dist/middleware/hedge.js.map +1 -0
- package/dist/middleware/httpCache.d.ts.map +1 -0
- package/dist/middleware/httpCache.js.map +1 -0
- package/dist/middleware/idempotencyKey.d.ts.map +1 -0
- package/dist/middleware/idempotencyKey.js.map +1 -0
- package/dist/middleware/offlineQueue.d.ts.map +1 -0
- package/dist/middleware/offlineQueue.js.map +1 -0
- package/dist/middleware/presets.d.ts.map +1 -0
- package/dist/middleware/presets.js.map +1 -0
- package/dist/middleware/retry.d.ts.map +1 -0
- package/dist/middleware/retry.js.map +1 -0
- package/dist/middleware/stalePolicy.d.ts.map +1 -0
- package/dist/middleware/stalePolicy.js.map +1 -0
- package/dist/middleware/validation.d.ts.map +1 -0
- package/dist/middleware/validation.js.map +1 -0
- package/dist/node/fsAdapter.d.ts.map +1 -0
- package/dist/node/fsAdapter.js.map +1 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js.map +1 -0
- package/dist/observability/otelMapping.d.ts.map +1 -0
- package/dist/observability/otelMapping.js.map +1 -0
- package/dist/observability/otelProfiles.d.ts.map +1 -0
- package/dist/observability/otelProfiles.js.map +1 -0
- package/dist/observability/redaction.d.ts.map +1 -0
- package/dist/observability/redaction.js.map +1 -0
- package/dist/policy/guardrails.d.ts.map +1 -0
- package/dist/policy/guardrails.js.map +1 -0
- package/dist/response/response.d.ts.map +1 -0
- package/dist/response/response.js.map +1 -0
- package/dist/serializers/formUrlEncodedSerializer.d.ts.map +1 -0
- package/dist/serializers/formUrlEncodedSerializer.js.map +1 -0
- package/dist/serializers/jsonBodySerializer.d.ts.map +1 -0
- package/dist/serializers/jsonBodySerializer.js.map +1 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/{src/types → types}/events.js.map +1 -1
- package/dist/types/http.d.ts.map +1 -0
- package/dist/{src/types → types}/http.js.map +1 -1
- package/dist/types/internal.d.ts.map +1 -0
- package/dist/types/internal.js.map +1 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js.map +1 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/policyTrace.d.ts.map +1 -0
- package/dist/utils/policyTrace.js.map +1 -0
- package/dist/utils/stableKey.d.ts.map +1 -0
- package/dist/utils/stableKey.js.map +1 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +19 -19
- package/README.md +0 -88
- package/dist/scripts/benchmark.d.ts +0 -2
- package/dist/scripts/benchmark.d.ts.map +0 -1
- package/dist/scripts/benchmark.js +0 -69
- package/dist/scripts/benchmark.js.map +0 -1
- package/dist/scripts/edge-smoke-entry.d.ts +0 -8
- package/dist/scripts/edge-smoke-entry.d.ts.map +0 -1
- package/dist/scripts/edge-smoke-entry.js +0 -23
- package/dist/scripts/edge-smoke-entry.js.map +0 -1
- package/dist/src/adapters/fetchAdapter.d.ts.map +0 -1
- package/dist/src/adapters/fetchAdapter.js.map +0 -1
- package/dist/src/adapters/instrumentedAdapter.d.ts.map +0 -1
- package/dist/src/adapters/instrumentedAdapter.js.map +0 -1
- package/dist/src/adapters/storage/encryptedStorage.d.ts.map +0 -1
- package/dist/src/adapters/storage/encryptedStorage.js.map +0 -1
- package/dist/src/adapters/storage/indexedDBAdapter.d.ts.map +0 -1
- package/dist/src/adapters/storage/indexedDBAdapter.js.map +0 -1
- package/dist/src/client/createClient.d.ts.map +0 -1
- package/dist/src/client/createClient.js.map +0 -1
- package/dist/src/executor/execute.d.ts.map +0 -1
- package/dist/src/executor/execute.js.map +0 -1
- package/dist/src/index.d.ts +0 -43
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -42
- package/dist/src/index.js.map +0 -1
- package/dist/src/middleware/authRefresh.d.ts.map +0 -1
- package/dist/src/middleware/authRefresh.js.map +0 -1
- package/dist/src/middleware/circuitBreaker.d.ts.map +0 -1
- package/dist/src/middleware/circuitBreaker.js.map +0 -1
- package/dist/src/middleware/circuitBreakerKeys.d.ts.map +0 -1
- package/dist/src/middleware/circuitBreakerKeys.js.map +0 -1
- package/dist/src/middleware/compose.d.ts.map +0 -1
- package/dist/src/middleware/compose.js.map +0 -1
- package/dist/src/middleware/concurrencyLimit.d.ts.map +0 -1
- package/dist/src/middleware/concurrencyLimit.js.map +0 -1
- package/dist/src/middleware/deadline.d.ts.map +0 -1
- package/dist/src/middleware/deadline.js.map +0 -1
- package/dist/src/middleware/dedupe.d.ts.map +0 -1
- package/dist/src/middleware/dedupe.js.map +0 -1
- package/dist/src/middleware/defaultTimeout.d.ts.map +0 -1
- package/dist/src/middleware/defaultTimeout.js.map +0 -1
- package/dist/src/middleware/diagnostics.d.ts.map +0 -1
- package/dist/src/middleware/diagnostics.js.map +0 -1
- package/dist/src/middleware/diagnosticsExporters.d.ts.map +0 -1
- package/dist/src/middleware/diagnosticsExporters.js.map +0 -1
- package/dist/src/middleware/fallback.d.ts.map +0 -1
- package/dist/src/middleware/fallback.js.map +0 -1
- package/dist/src/middleware/hedge.d.ts.map +0 -1
- package/dist/src/middleware/hedge.js.map +0 -1
- package/dist/src/middleware/httpCache.d.ts.map +0 -1
- package/dist/src/middleware/httpCache.js.map +0 -1
- package/dist/src/middleware/idempotencyKey.d.ts.map +0 -1
- package/dist/src/middleware/idempotencyKey.js.map +0 -1
- package/dist/src/middleware/offlineQueue.d.ts.map +0 -1
- package/dist/src/middleware/offlineQueue.js.map +0 -1
- package/dist/src/middleware/presets.d.ts.map +0 -1
- package/dist/src/middleware/presets.js.map +0 -1
- package/dist/src/middleware/retry.d.ts.map +0 -1
- package/dist/src/middleware/retry.js.map +0 -1
- package/dist/src/middleware/stalePolicy.d.ts.map +0 -1
- package/dist/src/middleware/stalePolicy.js.map +0 -1
- package/dist/src/middleware/validation.d.ts.map +0 -1
- package/dist/src/middleware/validation.js.map +0 -1
- package/dist/src/node/fsAdapter.d.ts.map +0 -1
- package/dist/src/node/fsAdapter.js.map +0 -1
- package/dist/src/node/index.d.ts.map +0 -1
- package/dist/src/node/index.js.map +0 -1
- package/dist/src/observability/otelMapping.d.ts.map +0 -1
- package/dist/src/observability/otelMapping.js.map +0 -1
- package/dist/src/observability/otelProfiles.d.ts.map +0 -1
- package/dist/src/observability/otelProfiles.js.map +0 -1
- package/dist/src/observability/redaction.d.ts.map +0 -1
- package/dist/src/observability/redaction.js.map +0 -1
- package/dist/src/policy/guardrails.d.ts.map +0 -1
- package/dist/src/policy/guardrails.js.map +0 -1
- package/dist/src/response/response.d.ts.map +0 -1
- package/dist/src/response/response.js.map +0 -1
- package/dist/src/serializers/formUrlEncodedSerializer.d.ts.map +0 -1
- package/dist/src/serializers/formUrlEncodedSerializer.js.map +0 -1
- package/dist/src/serializers/jsonBodySerializer.d.ts.map +0 -1
- package/dist/src/serializers/jsonBodySerializer.js.map +0 -1
- package/dist/src/types/events.d.ts.map +0 -1
- package/dist/src/types/http.d.ts.map +0 -1
- package/dist/src/types/internal.d.ts.map +0 -1
- package/dist/src/types/internal.js.map +0 -1
- package/dist/src/types/result.d.ts.map +0 -1
- package/dist/src/types/result.js.map +0 -1
- package/dist/src/utils/crypto.d.ts.map +0 -1
- package/dist/src/utils/crypto.js.map +0 -1
- package/dist/src/utils/policyTrace.d.ts.map +0 -1
- package/dist/src/utils/policyTrace.js.map +0 -1
- package/dist/src/utils/stableKey.d.ts.map +0 -1
- package/dist/src/utils/stableKey.js.map +0 -1
- package/dist/src/utils/url.d.ts.map +0 -1
- package/dist/src/utils/url.js.map +0 -1
- package/dist/tests/adapter-serializer.test.d.ts +0 -2
- package/dist/tests/adapter-serializer.test.d.ts.map +0 -1
- package/dist/tests/adapter-serializer.test.js +0 -59
- package/dist/tests/adapter-serializer.test.js.map +0 -1
- package/dist/tests/auth-refresh.test.d.ts +0 -2
- package/dist/tests/auth-refresh.test.d.ts.map +0 -1
- package/dist/tests/auth-refresh.test.js +0 -75
- package/dist/tests/auth-refresh.test.js.map +0 -1
- package/dist/tests/browser-runtime.smoke.test.d.ts +0 -2
- package/dist/tests/browser-runtime.smoke.test.d.ts.map +0 -1
- package/dist/tests/browser-runtime.smoke.test.js +0 -17
- package/dist/tests/browser-runtime.smoke.test.js.map +0 -1
- package/dist/tests/chaos-heavy.test.d.ts +0 -2
- package/dist/tests/chaos-heavy.test.d.ts.map +0 -1
- package/dist/tests/chaos-heavy.test.js +0 -164
- package/dist/tests/chaos-heavy.test.js.map +0 -1
- package/dist/tests/circuit-breaker.test.d.ts +0 -2
- package/dist/tests/circuit-breaker.test.d.ts.map +0 -1
- package/dist/tests/circuit-breaker.test.js +0 -184
- package/dist/tests/circuit-breaker.test.js.map +0 -1
- package/dist/tests/client.integration.test.d.ts +0 -2
- package/dist/tests/client.integration.test.d.ts.map +0 -1
- package/dist/tests/client.integration.test.js +0 -63
- package/dist/tests/client.integration.test.js.map +0 -1
- package/dist/tests/compose.test.d.ts +0 -2
- package/dist/tests/compose.test.d.ts.map +0 -1
- package/dist/tests/compose.test.js +0 -25
- package/dist/tests/compose.test.js.map +0 -1
- package/dist/tests/concurrency-limit.test.d.ts +0 -2
- package/dist/tests/concurrency-limit.test.d.ts.map +0 -1
- package/dist/tests/concurrency-limit.test.js +0 -87
- package/dist/tests/concurrency-limit.test.js.map +0 -1
- package/dist/tests/crypto-utils.test.d.ts +0 -2
- package/dist/tests/crypto-utils.test.d.ts.map +0 -1
- package/dist/tests/crypto-utils.test.js +0 -39
- package/dist/tests/crypto-utils.test.js.map +0 -1
- package/dist/tests/deadline-middleware.test.d.ts +0 -2
- package/dist/tests/deadline-middleware.test.d.ts.map +0 -1
- package/dist/tests/deadline-middleware.test.js +0 -38
- package/dist/tests/deadline-middleware.test.js.map +0 -1
- package/dist/tests/dedupe-middleware.test.d.ts +0 -2
- package/dist/tests/dedupe-middleware.test.d.ts.map +0 -1
- package/dist/tests/dedupe-middleware.test.js +0 -56
- package/dist/tests/dedupe-middleware.test.js.map +0 -1
- package/dist/tests/default-timeout.test.d.ts +0 -2
- package/dist/tests/default-timeout.test.d.ts.map +0 -1
- package/dist/tests/default-timeout.test.js +0 -28
- package/dist/tests/default-timeout.test.js.map +0 -1
- package/dist/tests/diagnostics-exporters.test.d.ts +0 -2
- package/dist/tests/diagnostics-exporters.test.d.ts.map +0 -1
- package/dist/tests/diagnostics-exporters.test.js +0 -41
- package/dist/tests/diagnostics-exporters.test.js.map +0 -1
- package/dist/tests/diagnostics.test.d.ts +0 -2
- package/dist/tests/diagnostics.test.d.ts.map +0 -1
- package/dist/tests/diagnostics.test.js +0 -38
- package/dist/tests/diagnostics.test.js.map +0 -1
- package/dist/tests/error-metadata.test.d.ts +0 -2
- package/dist/tests/error-metadata.test.d.ts.map +0 -1
- package/dist/tests/error-metadata.test.js +0 -23
- package/dist/tests/error-metadata.test.js.map +0 -1
- package/dist/tests/execute-timeout.test.d.ts +0 -2
- package/dist/tests/execute-timeout.test.d.ts.map +0 -1
- package/dist/tests/execute-timeout.test.js +0 -30
- package/dist/tests/execute-timeout.test.js.map +0 -1
- package/dist/tests/fallback-validation-stale-policy.test.d.ts +0 -2
- package/dist/tests/fallback-validation-stale-policy.test.d.ts.map +0 -1
- package/dist/tests/fallback-validation-stale-policy.test.js +0 -138
- package/dist/tests/fallback-validation-stale-policy.test.js.map +0 -1
- package/dist/tests/form-serializer.test.d.ts +0 -2
- package/dist/tests/form-serializer.test.d.ts.map +0 -1
- package/dist/tests/form-serializer.test.js +0 -16
- package/dist/tests/form-serializer.test.js.map +0 -1
- package/dist/tests/hedge.test.d.ts +0 -2
- package/dist/tests/hedge.test.d.ts.map +0 -1
- package/dist/tests/hedge.test.js +0 -45
- package/dist/tests/hedge.test.js.map +0 -1
- package/dist/tests/http-cache.test.d.ts +0 -2
- package/dist/tests/http-cache.test.d.ts.map +0 -1
- package/dist/tests/http-cache.test.js +0 -60
- package/dist/tests/http-cache.test.js.map +0 -1
- package/dist/tests/idempotency-key.test.d.ts +0 -2
- package/dist/tests/idempotency-key.test.d.ts.map +0 -1
- package/dist/tests/idempotency-key.test.js +0 -31
- package/dist/tests/idempotency-key.test.js.map +0 -1
- package/dist/tests/instrumented-adapter.test.d.ts +0 -2
- package/dist/tests/instrumented-adapter.test.d.ts.map +0 -1
- package/dist/tests/instrumented-adapter.test.js +0 -33
- package/dist/tests/instrumented-adapter.test.js.map +0 -1
- package/dist/tests/interceptor-order.test.d.ts +0 -2
- package/dist/tests/interceptor-order.test.d.ts.map +0 -1
- package/dist/tests/interceptor-order.test.js +0 -38
- package/dist/tests/interceptor-order.test.js.map +0 -1
- package/dist/tests/invariant-fuzz.test.d.ts +0 -2
- package/dist/tests/invariant-fuzz.test.d.ts.map +0 -1
- package/dist/tests/invariant-fuzz.test.js +0 -149
- package/dist/tests/invariant-fuzz.test.js.map +0 -1
- package/dist/tests/json-helper.test.d.ts +0 -2
- package/dist/tests/json-helper.test.d.ts.map +0 -1
- package/dist/tests/json-helper.test.js +0 -42
- package/dist/tests/json-helper.test.js.map +0 -1
- package/dist/tests/observability.test.d.ts +0 -2
- package/dist/tests/observability.test.d.ts.map +0 -1
- package/dist/tests/observability.test.js +0 -59
- package/dist/tests/observability.test.js.map +0 -1
- package/dist/tests/offline-queue.test.d.ts +0 -2
- package/dist/tests/offline-queue.test.d.ts.map +0 -1
- package/dist/tests/offline-queue.test.js +0 -35
- package/dist/tests/offline-queue.test.js.map +0 -1
- package/dist/tests/otel-mapping.test.d.ts +0 -2
- package/dist/tests/otel-mapping.test.d.ts.map +0 -1
- package/dist/tests/otel-mapping.test.js +0 -20
- package/dist/tests/otel-mapping.test.js.map +0 -1
- package/dist/tests/policy-guardrails.test.d.ts +0 -2
- package/dist/tests/policy-guardrails.test.d.ts.map +0 -1
- package/dist/tests/policy-guardrails.test.js +0 -25
- package/dist/tests/policy-guardrails.test.js.map +0 -1
- package/dist/tests/presets.test.d.ts +0 -2
- package/dist/tests/presets.test.d.ts.map +0 -1
- package/dist/tests/presets.test.js +0 -41
- package/dist/tests/presets.test.js.map +0 -1
- package/dist/tests/public-api.contract.test.d.ts +0 -2
- package/dist/tests/public-api.contract.test.d.ts.map +0 -1
- package/dist/tests/public-api.contract.test.js +0 -25
- package/dist/tests/public-api.contract.test.js.map +0 -1
- package/dist/tests/redaction.test.d.ts +0 -2
- package/dist/tests/redaction.test.d.ts.map +0 -1
- package/dist/tests/redaction.test.js +0 -23
- package/dist/tests/redaction.test.js.map +0 -1
- package/dist/tests/resilience-shock.test.d.ts +0 -2
- package/dist/tests/resilience-shock.test.d.ts.map +0 -1
- package/dist/tests/resilience-shock.test.js +0 -114
- package/dist/tests/resilience-shock.test.js.map +0 -1
- package/dist/tests/retry-after-budget.test.d.ts +0 -2
- package/dist/tests/retry-after-budget.test.d.ts.map +0 -1
- package/dist/tests/retry-after-budget.test.js +0 -72
- package/dist/tests/retry-after-budget.test.js.map +0 -1
- package/dist/tests/retry-policy-trace.test.d.ts +0 -2
- package/dist/tests/retry-policy-trace.test.d.ts.map +0 -1
- package/dist/tests/retry-policy-trace.test.js +0 -35
- package/dist/tests/retry-policy-trace.test.js.map +0 -1
- package/dist/tests/retry-policy.test.d.ts +0 -2
- package/dist/tests/retry-policy.test.d.ts.map +0 -1
- package/dist/tests/retry-policy.test.js +0 -51
- package/dist/tests/retry-policy.test.js.map +0 -1
- package/dist/tests/retry.stress.test.d.ts +0 -2
- package/dist/tests/retry.stress.test.d.ts.map +0 -1
- package/dist/tests/retry.stress.test.js +0 -21
- package/dist/tests/retry.stress.test.js.map +0 -1
- package/dist/tests/storage-adapters.test.d.ts +0 -2
- package/dist/tests/storage-adapters.test.d.ts.map +0 -1
- package/dist/tests/storage-adapters.test.js +0 -109
- package/dist/tests/storage-adapters.test.js.map +0 -1
- package/dist/tests/traffic-load.test.d.ts +0 -2
- package/dist/tests/traffic-load.test.d.ts.map +0 -1
- package/dist/tests/traffic-load.test.js +0 -91
- package/dist/tests/traffic-load.test.js.map +0 -1
- /package/dist/{src/adapters → adapters}/fetchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/fetchAdapter.js +0 -0
- /package/dist/{src/adapters → adapters}/instrumentedAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/instrumentedAdapter.js +0 -0
- /package/dist/{src/adapters → adapters}/storage/encryptedStorage.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/storage/encryptedStorage.js +0 -0
- /package/dist/{src/adapters → adapters}/storage/indexedDBAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/storage/indexedDBAdapter.js +0 -0
- /package/dist/{src/client → client}/createClient.d.ts +0 -0
- /package/dist/{src/client → client}/createClient.js +0 -0
- /package/dist/{src/executor → executor}/execute.d.ts +0 -0
- /package/dist/{src/executor → executor}/execute.js +0 -0
- /package/dist/{src/middleware → middleware}/authRefresh.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/authRefresh.js +0 -0
- /package/dist/{src/middleware → middleware}/circuitBreaker.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/circuitBreaker.js +0 -0
- /package/dist/{src/middleware → middleware}/circuitBreakerKeys.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/circuitBreakerKeys.js +0 -0
- /package/dist/{src/middleware → middleware}/compose.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/compose.js +0 -0
- /package/dist/{src/middleware → middleware}/concurrencyLimit.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/concurrencyLimit.js +0 -0
- /package/dist/{src/middleware → middleware}/deadline.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/deadline.js +0 -0
- /package/dist/{src/middleware → middleware}/dedupe.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/dedupe.js +0 -0
- /package/dist/{src/middleware → middleware}/defaultTimeout.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/defaultTimeout.js +0 -0
- /package/dist/{src/middleware → middleware}/diagnostics.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/diagnostics.js +0 -0
- /package/dist/{src/middleware → middleware}/diagnosticsExporters.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/diagnosticsExporters.js +0 -0
- /package/dist/{src/middleware → middleware}/fallback.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/fallback.js +0 -0
- /package/dist/{src/middleware → middleware}/hedge.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/hedge.js +0 -0
- /package/dist/{src/middleware → middleware}/httpCache.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/httpCache.js +0 -0
- /package/dist/{src/middleware → middleware}/idempotencyKey.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/idempotencyKey.js +0 -0
- /package/dist/{src/middleware → middleware}/offlineQueue.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/offlineQueue.js +0 -0
- /package/dist/{src/middleware → middleware}/presets.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/presets.js +0 -0
- /package/dist/{src/middleware → middleware}/retry.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/retry.js +0 -0
- /package/dist/{src/middleware → middleware}/stalePolicy.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/stalePolicy.js +0 -0
- /package/dist/{src/middleware → middleware}/validation.d.ts +0 -0
- /package/dist/{src/middleware → middleware}/validation.js +0 -0
- /package/dist/{src/node → node}/fsAdapter.d.ts +0 -0
- /package/dist/{src/node → node}/fsAdapter.js +0 -0
- /package/dist/{src/node → node}/index.d.ts +0 -0
- /package/dist/{src/node → node}/index.js +0 -0
- /package/dist/{src/observability → observability}/otelMapping.d.ts +0 -0
- /package/dist/{src/observability → observability}/otelMapping.js +0 -0
- /package/dist/{src/observability → observability}/otelProfiles.d.ts +0 -0
- /package/dist/{src/observability → observability}/otelProfiles.js +0 -0
- /package/dist/{src/observability → observability}/redaction.d.ts +0 -0
- /package/dist/{src/observability → observability}/redaction.js +0 -0
- /package/dist/{src/policy → policy}/guardrails.d.ts +0 -0
- /package/dist/{src/policy → policy}/guardrails.js +0 -0
- /package/dist/{src/response → response}/response.d.ts +0 -0
- /package/dist/{src/response → response}/response.js +0 -0
- /package/dist/{src/serializers → serializers}/formUrlEncodedSerializer.d.ts +0 -0
- /package/dist/{src/serializers → serializers}/formUrlEncodedSerializer.js +0 -0
- /package/dist/{src/serializers → serializers}/jsonBodySerializer.d.ts +0 -0
- /package/dist/{src/serializers → serializers}/jsonBodySerializer.js +0 -0
- /package/dist/{src/types → types}/events.d.ts +0 -0
- /package/dist/{src/types → types}/events.js +0 -0
- /package/dist/{src/types → types}/http.d.ts +0 -0
- /package/dist/{src/types → types}/http.js +0 -0
- /package/dist/{src/types → types}/internal.d.ts +0 -0
- /package/dist/{src/types → types}/internal.js +0 -0
- /package/dist/{src/types → types}/result.d.ts +0 -0
- /package/dist/{src/types → types}/result.js +0 -0
- /package/dist/{src/utils → utils}/crypto.d.ts +0 -0
- /package/dist/{src/utils → utils}/crypto.js +0 -0
- /package/dist/{src/utils → utils}/policyTrace.d.ts +0 -0
- /package/dist/{src/utils → utils}/policyTrace.js +0 -0
- /package/dist/{src/utils → utils}/stableKey.d.ts +0 -0
- /package/dist/{src/utils → utils}/stableKey.js +0 -0
- /package/dist/{src/utils → utils}/url.d.ts +0 -0
- /package/dist/{src/utils → utils}/url.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"invariant-fuzz.test.js","sourceRoot":"","sources":["../../tests/invariant-fuzz.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-helper.test.d.ts","sourceRoot":"","sources":["../../tests/json-helper.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createClient } from "../src/client/createClient";
|
|
3
|
-
describe("beginner JSON helpers", () => {
|
|
4
|
-
afterEach(() => {
|
|
5
|
-
vi.restoreAllMocks();
|
|
6
|
-
});
|
|
7
|
-
it("getJson returns parsed data for 2xx responses", async () => {
|
|
8
|
-
vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({ id: "u1", name: "Alice" }), {
|
|
9
|
-
status: 200,
|
|
10
|
-
headers: { "content-type": "application/json" },
|
|
11
|
-
}));
|
|
12
|
-
const client = createClient();
|
|
13
|
-
const data = await client.getJson("https://example.com/users/:id", {
|
|
14
|
-
params: { id: "u1" },
|
|
15
|
-
});
|
|
16
|
-
expect(data).toEqual({ id: "u1", name: "Alice" });
|
|
17
|
-
});
|
|
18
|
-
it("getJsonResult returns http error for non-2xx responses", async () => {
|
|
19
|
-
vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response("not found", { status: 404, statusText: "Not Found" }));
|
|
20
|
-
const client = createClient();
|
|
21
|
-
const result = await client.getJsonResult("https://example.com/users/:id", {
|
|
22
|
-
params: { id: "u1" },
|
|
23
|
-
});
|
|
24
|
-
expect(result.ok).toBe(false);
|
|
25
|
-
if (!result.ok) {
|
|
26
|
-
expect(result.error.kind).toBe("http");
|
|
27
|
-
expect(result.error.status).toBe(404);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
it("getJsonResult returns network error on transport failure", async () => {
|
|
31
|
-
vi.spyOn(globalThis, "fetch").mockRejectedValue(new TypeError("Network error"));
|
|
32
|
-
const client = createClient();
|
|
33
|
-
const result = await client.getJsonResult("https://example.com/users/:id", {
|
|
34
|
-
params: { id: "u1" },
|
|
35
|
-
});
|
|
36
|
-
expect(result.ok).toBe(false);
|
|
37
|
-
if (!result.ok) {
|
|
38
|
-
expect(result.error.kind).toBe("network");
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=json-helper.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-helper.test.js","sourceRoot":"","sources":["../../tests/json-helper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAC7C,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;YACxD,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAA+B,+BAA+B,EAAE;YAC/F,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAErH,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAiB,+BAA+B,EAAE;YACzF,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAEhF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAiB,+BAA+B,EAAE;YACzF,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observability.test.d.ts","sourceRoot":"","sources":["../../tests/observability.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createClient } from "../src/client/createClient";
|
|
3
|
-
describe("observability hooks", () => {
|
|
4
|
-
afterEach(() => {
|
|
5
|
-
vi.restoreAllMocks();
|
|
6
|
-
});
|
|
7
|
-
it("emits start and success events and propagates request/trace headers", async () => {
|
|
8
|
-
const starts = [];
|
|
9
|
-
const successes = [];
|
|
10
|
-
const fetchMock = vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response("{}", {
|
|
11
|
-
status: 200,
|
|
12
|
-
headers: { "content-type": "application/json" },
|
|
13
|
-
}));
|
|
14
|
-
const client = createClient({
|
|
15
|
-
baseURL: "https://api.example.com",
|
|
16
|
-
requestIdFactory: () => "req-123",
|
|
17
|
-
traceContextProvider: () => ({
|
|
18
|
-
traceparent: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00",
|
|
19
|
-
}),
|
|
20
|
-
hooks: {
|
|
21
|
-
onRequestStart: (event) => {
|
|
22
|
-
starts.push({ requestId: event.requestId, url: event.url });
|
|
23
|
-
},
|
|
24
|
-
onRequestSuccess: (event) => {
|
|
25
|
-
successes.push({
|
|
26
|
-
requestId: event.requestId,
|
|
27
|
-
status: event.status,
|
|
28
|
-
retryCount: event.retryCount,
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
await client.get("/health");
|
|
34
|
-
expect(starts).toEqual([{ requestId: "req-123", url: "https://api.example.com/health" }]);
|
|
35
|
-
expect(successes).toEqual([{ requestId: "req-123", status: 200, retryCount: 0 }]);
|
|
36
|
-
const firstCall = fetchMock.mock.calls[0];
|
|
37
|
-
expect(firstCall).toBeDefined();
|
|
38
|
-
const init = firstCall?.[1];
|
|
39
|
-
const headers = (init?.headers ?? {});
|
|
40
|
-
expect(headers["x-request-id"]).toBe("req-123");
|
|
41
|
-
expect(headers.traceparent).toBe("00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00");
|
|
42
|
-
});
|
|
43
|
-
it("emits error event with enriched metadata", async () => {
|
|
44
|
-
const errors = [];
|
|
45
|
-
vi.spyOn(globalThis, "fetch").mockRejectedValue(new TypeError("Network failed"));
|
|
46
|
-
const client = createClient({
|
|
47
|
-
requestIdFactory: () => "req-err-1",
|
|
48
|
-
hooks: {
|
|
49
|
-
onRequestError: (event) => {
|
|
50
|
-
errors.push(event.error.metadata?.requestId ?? "");
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
const result = await client.getResult("/users");
|
|
55
|
-
expect(result.ok).toBe(false);
|
|
56
|
-
expect(errors).toEqual(["req-err-1"]);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=observability.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observability.test.js","sourceRoot":"","sources":["../../tests/observability.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"offline-queue.test.d.ts","sourceRoot":"","sources":["../../tests/offline-queue.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { createOfflineQueue } from "../src/middleware/offlineQueue";
|
|
3
|
-
import { HttpResponse } from "../src/response/response";
|
|
4
|
-
describe("offline queue middleware", () => {
|
|
5
|
-
it("queues mutation requests when offline and returns 202", async () => {
|
|
6
|
-
const queue = createOfflineQueue({
|
|
7
|
-
isOffline: () => true,
|
|
8
|
-
});
|
|
9
|
-
const response = await queue.middleware({
|
|
10
|
-
method: "POST",
|
|
11
|
-
url: "https://example.com/events",
|
|
12
|
-
body: { a: 1 },
|
|
13
|
-
}, async () => new HttpResponse(new Response("ok", { status: 200 })));
|
|
14
|
-
expect(response.status).toBe(202);
|
|
15
|
-
expect((await queue.snapshot()).size).toBe(1);
|
|
16
|
-
});
|
|
17
|
-
it("flushes queued requests through a replay executor", async () => {
|
|
18
|
-
const queue = createOfflineQueue({ isOffline: () => true });
|
|
19
|
-
await queue.middleware({
|
|
20
|
-
method: "POST",
|
|
21
|
-
url: "https://example.com/events",
|
|
22
|
-
body: { a: 1 },
|
|
23
|
-
}, async () => new HttpResponse(new Response("ok", { status: 200 })));
|
|
24
|
-
const replayed = [];
|
|
25
|
-
const responses = await queue.flush(async (req) => {
|
|
26
|
-
replayed.push(`${req.method}:${req.url}`);
|
|
27
|
-
return new HttpResponse(new Response("ok", { status: 201 }));
|
|
28
|
-
});
|
|
29
|
-
expect(replayed).toEqual(["POST:https://example.com/events"]);
|
|
30
|
-
expect(responses.length).toBe(1);
|
|
31
|
-
expect(responses[0]?.status).toBe(201);
|
|
32
|
-
expect((await queue.snapshot()).size).toBe(0);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=offline-queue.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"offline-queue.test.js","sourceRoot":"","sources":["../../tests/offline-queue.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,KAAK,GAAG,kBAAkB,CAAC;YAC/B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;SACtB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CACrC;YACE,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,4BAA4B;YACjC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;SACf,EACD,KAAK,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAClE,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5D,MAAM,KAAK,CAAC,UAAU,CACpB;YACE,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,4BAA4B;YACjC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;SACf,EACD,KAAK,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAClE,CAAC;QAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1C,OAAO,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"otel-mapping.test.d.ts","sourceRoot":"","sources":["../../tests/otel-mapping.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { mapTransportEventToOtelAttributes } from "../src/observability/otelMapping";
|
|
3
|
-
describe("otel mapping", () => {
|
|
4
|
-
it("maps transport event fields into stable otel-like attributes", () => {
|
|
5
|
-
const attributes = mapTransportEventToOtelAttributes({
|
|
6
|
-
phase: "success",
|
|
7
|
-
at: Date.now(),
|
|
8
|
-
method: "GET",
|
|
9
|
-
url: "https://example.com/health",
|
|
10
|
-
status: 200,
|
|
11
|
-
durationMs: 12,
|
|
12
|
-
retryCount: 1,
|
|
13
|
-
policyTrace: [],
|
|
14
|
-
});
|
|
15
|
-
expect(attributes["http.request.method"]).toBe("GET");
|
|
16
|
-
expect(attributes["http.response.status_code"]).toBe(200);
|
|
17
|
-
expect(attributes["pureq.retry_count"]).toBe(1);
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
//# sourceMappingURL=otel-mapping.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"otel-mapping.test.js","sourceRoot":"","sources":["../../tests/otel-mapping.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AAErF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,UAAU,GAAG,iCAAiC,CAAC;YACnD,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,4BAA4B;YACjC,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"policy-guardrails.test.d.ts","sourceRoot":"","sources":["../../tests/policy-guardrails.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { createClient, deadline, defaultTimeout, retry } from "../src/index";
|
|
3
|
-
describe("policy guardrails", () => {
|
|
4
|
-
it("rejects conflicting timeout policies at client creation time", () => {
|
|
5
|
-
expect(() => createClient({
|
|
6
|
-
middlewares: [defaultTimeout(1000), deadline({ defaultTimeoutMs: 1000 })],
|
|
7
|
-
})).toThrow("use deadline or defaultTimeout, not both");
|
|
8
|
-
});
|
|
9
|
-
it("rejects retry policies that exceed the configured max retry limit", () => {
|
|
10
|
-
expect(() => createClient().use(retry({
|
|
11
|
-
maxRetries: 11,
|
|
12
|
-
delay: 0,
|
|
13
|
-
backoff: false,
|
|
14
|
-
}))).toThrow("retry maxRetries must be 10 or less");
|
|
15
|
-
});
|
|
16
|
-
it("allows a normal policy stack", () => {
|
|
17
|
-
const client = createClient().use(retry({
|
|
18
|
-
maxRetries: 2,
|
|
19
|
-
delay: 0,
|
|
20
|
-
backoff: false,
|
|
21
|
-
}));
|
|
22
|
-
expect(typeof client.get).toBe("function");
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
//# sourceMappingURL=policy-guardrails.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"policy-guardrails.test.js","sourceRoot":"","sources":["../../tests/policy-guardrails.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE7E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,GAAG,EAAE,CACV,YAAY,CAAC;YACX,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1E,CAAC,CACH,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,GAAG,EAAE,CACV,YAAY,EAAE,CAAC,GAAG,CAChB,KAAK,CAAC;YACJ,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,KAAK;SACf,CAAC,CACH,CACF,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC,GAAG,CAC/B,KAAK,CAAC;YACJ,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,KAAK;SACf,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presets.test.d.ts","sourceRoot":"","sources":["../../tests/presets.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createClient } from "../src/client/createClient";
|
|
3
|
-
import { backendPreset, bffPreset, frontendPreset, resilientPreset } from "../src/middleware/presets";
|
|
4
|
-
describe("resilient preset", () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
vi.restoreAllMocks();
|
|
7
|
-
});
|
|
8
|
-
it("provides a composable production-ready stack", async () => {
|
|
9
|
-
const fetchMock = vi
|
|
10
|
-
.spyOn(globalThis, "fetch")
|
|
11
|
-
.mockResolvedValueOnce(new Response("error", { status: 503 }))
|
|
12
|
-
.mockResolvedValueOnce(new Response("ok", { status: 200 }));
|
|
13
|
-
const middlewares = resilientPreset({
|
|
14
|
-
retry: { maxRetries: 1, delay: 0, backoff: false },
|
|
15
|
-
circuitBreaker: { failureThreshold: 5, cooldownMs: 1000 },
|
|
16
|
-
});
|
|
17
|
-
let client = createClient();
|
|
18
|
-
for (const mw of middlewares) {
|
|
19
|
-
client = client.use(mw);
|
|
20
|
-
}
|
|
21
|
-
const result = await client.getResult("https://api.example.com/health");
|
|
22
|
-
expect(result.ok).toBe(true);
|
|
23
|
-
expect(fetchMock).toHaveBeenCalledTimes(2);
|
|
24
|
-
});
|
|
25
|
-
it("provides dedicated profile presets", async () => {
|
|
26
|
-
vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response("ok", { status: 200 }));
|
|
27
|
-
const front = frontendPreset();
|
|
28
|
-
const bff = bffPreset();
|
|
29
|
-
const back = backendPreset();
|
|
30
|
-
expect(front.length).toBeGreaterThan(0);
|
|
31
|
-
expect(bff.length).toBeGreaterThan(0);
|
|
32
|
-
expect(back.length).toBeGreaterThan(0);
|
|
33
|
-
let client = createClient();
|
|
34
|
-
for (const mw of front) {
|
|
35
|
-
client = client.use(mw);
|
|
36
|
-
}
|
|
37
|
-
const result = await client.getResult("https://api.example.com/health");
|
|
38
|
-
expect(result.ok).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
//# sourceMappingURL=presets.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presets.test.js","sourceRoot":"","sources":["../../tests/presets.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEtG,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,SAAS,GAAG,EAAE;aACjB,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;aAC1B,qBAAqB,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;aAC7D,qBAAqB,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAE9D,MAAM,WAAW,GAAG,eAAe,CAAC;YAClC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE;YAClD,cAAc,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;SAC1D,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAErF,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAE7B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.contract.test.d.ts","sourceRoot":"","sources":["../../tests/public-api.contract.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import * as pureq from "../src/index";
|
|
3
|
-
describe("contract: public api", () => {
|
|
4
|
-
it("exports required stable surface", () => {
|
|
5
|
-
expect(typeof pureq.createClient).toBe("function");
|
|
6
|
-
expect(typeof pureq.retry).toBe("function");
|
|
7
|
-
expect(typeof pureq.hedge).toBe("function");
|
|
8
|
-
expect(typeof pureq.httpCache).toBe("function");
|
|
9
|
-
expect(typeof pureq.offlineQueue).toBe("function");
|
|
10
|
-
expect(typeof pureq.createOfflineQueue).toBe("function");
|
|
11
|
-
expect(typeof pureq.deadline).toBe("function");
|
|
12
|
-
expect(typeof pureq.concurrencyLimit).toBe("function");
|
|
13
|
-
expect(typeof pureq.validatePolicyGuardrails).toBe("function");
|
|
14
|
-
expect(typeof pureq.mapTransportEventToOtelAttributes).toBe("function");
|
|
15
|
-
expect(typeof pureq.redactHeaders).toBe("function");
|
|
16
|
-
expect(typeof pureq.redactObjectFields).toBe("function");
|
|
17
|
-
expect(typeof pureq.createClient().fetch).toBe("function");
|
|
18
|
-
expect(typeof pureq.compose).toBe("function");
|
|
19
|
-
expect(typeof pureq.execute).toBe("function");
|
|
20
|
-
expect(typeof pureq.executeResult).toBe("function");
|
|
21
|
-
expect(typeof pureq.HttpResponse).toBe("function");
|
|
22
|
-
expect(typeof pureq.toPureqError).toBe("function");
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
//# sourceMappingURL=public-api.contract.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.contract.test.js","sourceRoot":"","sources":["../../tests/public-api.contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,KAAK,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,KAAK,CAAC,iCAAiC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.test.d.ts","sourceRoot":"","sources":["../../tests/redaction.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { redactHeaders, redactObjectFields } from "../src/observability/redaction";
|
|
3
|
-
describe("redaction helpers", () => {
|
|
4
|
-
it("redacts sensitive headers by default", () => {
|
|
5
|
-
const redacted = redactHeaders({
|
|
6
|
-
Authorization: "Bearer secret",
|
|
7
|
-
Accept: "application/json",
|
|
8
|
-
});
|
|
9
|
-
expect(redacted.Authorization).toBe("[REDACTED]");
|
|
10
|
-
expect(redacted.Accept).toBe("application/json");
|
|
11
|
-
});
|
|
12
|
-
it("redacts sensitive object fields by default patterns", () => {
|
|
13
|
-
const redacted = redactObjectFields({
|
|
14
|
-
token: "abc",
|
|
15
|
-
userId: "u1",
|
|
16
|
-
passwordHash: "xxx",
|
|
17
|
-
});
|
|
18
|
-
expect(redacted.token).toBe("[REDACTED]");
|
|
19
|
-
expect(redacted.userId).toBe("u1");
|
|
20
|
-
expect(redacted.passwordHash).toBe("[REDACTED]");
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=redaction.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.test.js","sourceRoot":"","sources":["../../tests/redaction.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEnF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC7B,aAAa,EAAE,eAAe;YAC9B,MAAM,EAAE,kBAAkB;SAC3B,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resilience-shock.test.d.ts","sourceRoot":"","sources":["../../tests/resilience-shock.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { createOfflineQueue } from "../src/middleware/offlineQueue";
|
|
3
|
-
import { concurrencyLimit } from "../src/middleware/concurrencyLimit";
|
|
4
|
-
import { execute } from "../src/executor/execute";
|
|
5
|
-
import { HttpResponse } from "../src/response/response";
|
|
6
|
-
function sleep(ms) {
|
|
7
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
|
-
}
|
|
9
|
-
describe("resilience/shock: abort and queue storms", () => {
|
|
10
|
-
it("remains healthy after queued abort storm", async () => {
|
|
11
|
-
const startedAt = Date.now();
|
|
12
|
-
const middleware = concurrencyLimit({ maxConcurrent: 1, maxQueue: 400 });
|
|
13
|
-
const first = middleware({ method: "GET", url: "/gate" }, async () => {
|
|
14
|
-
await sleep(25);
|
|
15
|
-
return new HttpResponse(new Response("first", { status: 200 }));
|
|
16
|
-
});
|
|
17
|
-
const controllers = Array.from({ length: 80 }, () => new AbortController());
|
|
18
|
-
const abortedTasks = controllers.map((controller, i) => middleware({ method: "GET", url: `/queued/${i}`, signal: controller.signal }, async () => {
|
|
19
|
-
return new HttpResponse(new Response("never", { status: 200 }));
|
|
20
|
-
}).then(() => ({ ok: true }), (error) => ({ ok: false, error })));
|
|
21
|
-
for (const c of controllers) {
|
|
22
|
-
c.abort(new DOMException("Aborted", "AbortError"));
|
|
23
|
-
}
|
|
24
|
-
await first;
|
|
25
|
-
const settled = await Promise.all(abortedTasks);
|
|
26
|
-
const rejectedCount = settled.filter((x) => x.ok === false).length;
|
|
27
|
-
console.info("[pureq][shock-metrics]", {
|
|
28
|
-
scenario: "abort-storm",
|
|
29
|
-
aborted: controllers.length,
|
|
30
|
-
rejectedCount,
|
|
31
|
-
durationMs: Date.now() - startedAt,
|
|
32
|
-
});
|
|
33
|
-
expect(rejectedCount).toBe(80);
|
|
34
|
-
const healthy = await middleware({ method: "GET", url: "/healthy" }, async () => {
|
|
35
|
-
return new HttpResponse(new Response("ok", { status: 200 }));
|
|
36
|
-
});
|
|
37
|
-
expect(healthy.status).toBe(200);
|
|
38
|
-
});
|
|
39
|
-
it("flushes large offline queue with partial replay failures", async () => {
|
|
40
|
-
const startedAt = Date.now();
|
|
41
|
-
const queue = createOfflineQueue({
|
|
42
|
-
isOffline: () => true,
|
|
43
|
-
maxQueueSize: 500,
|
|
44
|
-
});
|
|
45
|
-
const total = 140;
|
|
46
|
-
for (let i = 0; i < total; i++) {
|
|
47
|
-
await queue.middleware({
|
|
48
|
-
method: "POST",
|
|
49
|
-
url: `/events/${i}`,
|
|
50
|
-
priority: i % 7,
|
|
51
|
-
body: { i },
|
|
52
|
-
}, async () => new HttpResponse(new Response("live", { status: 200 })));
|
|
53
|
-
}
|
|
54
|
-
const flushed = await queue.flush(async (req) => {
|
|
55
|
-
const id = Number(req.url.split("/").pop());
|
|
56
|
-
await sleep(1);
|
|
57
|
-
if (id % 10 === 0) {
|
|
58
|
-
throw new Error("replay failed");
|
|
59
|
-
}
|
|
60
|
-
return new HttpResponse(new Response("replayed", { status: 201 }));
|
|
61
|
-
}, { concurrency: 16 });
|
|
62
|
-
const snapshot = await queue.snapshot();
|
|
63
|
-
console.info("[pureq][shock-metrics]", {
|
|
64
|
-
scenario: "offline-flush-burst",
|
|
65
|
-
queued: total,
|
|
66
|
-
flushed: flushed.length,
|
|
67
|
-
remaining: snapshot.size,
|
|
68
|
-
replayFailureRate: Number(((snapshot.size / total) * 100).toFixed(2)),
|
|
69
|
-
durationMs: Date.now() - startedAt,
|
|
70
|
-
});
|
|
71
|
-
expect(flushed.length).toBe(126);
|
|
72
|
-
expect(snapshot.size).toBe(14);
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
describe("aggressive input robustness", () => {
|
|
76
|
-
it("fails fast on unresolved path placeholders instead of issuing request", async () => {
|
|
77
|
-
const startedAt = Date.now();
|
|
78
|
-
await expect(execute({
|
|
79
|
-
method: "GET",
|
|
80
|
-
url: "https://example.com/users/:id/orders/:orderId",
|
|
81
|
-
params: { id: "u1" },
|
|
82
|
-
}, {
|
|
83
|
-
adapter: async () => new Response("unexpected", { status: 200 }),
|
|
84
|
-
})).rejects.toThrow("pureq: unresolved path parameters");
|
|
85
|
-
console.info("[pureq][aggressive-metrics]", {
|
|
86
|
-
scenario: "unresolved-placeholder-fast-fail",
|
|
87
|
-
durationMs: Date.now() - startedAt,
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
it("handles very large query arrays without crashing", async () => {
|
|
91
|
-
const startedAt = Date.now();
|
|
92
|
-
const values = Array.from({ length: 1000 }, (_, i) => i);
|
|
93
|
-
let capturedUrl = "";
|
|
94
|
-
await execute({
|
|
95
|
-
method: "GET",
|
|
96
|
-
url: "/search",
|
|
97
|
-
query: { tag: values },
|
|
98
|
-
}, {
|
|
99
|
-
adapter: async (url) => {
|
|
100
|
-
capturedUrl = url;
|
|
101
|
-
return new Response("ok", { status: 200 });
|
|
102
|
-
},
|
|
103
|
-
});
|
|
104
|
-
console.info("[pureq][aggressive-metrics]", {
|
|
105
|
-
scenario: "large-query-array",
|
|
106
|
-
queryItems: values.length,
|
|
107
|
-
finalUrlLength: capturedUrl.length,
|
|
108
|
-
durationMs: Date.now() - startedAt,
|
|
109
|
-
});
|
|
110
|
-
expect(capturedUrl.includes("search?")).toBe(true);
|
|
111
|
-
expect(capturedUrl.includes("tag=999")).toBe(true);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=resilience-shock.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resilience-shock.test.js","sourceRoot":"","sources":["../../tests/resilience-shock.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-after-budget.test.d.ts","sourceRoot":"","sources":["../../tests/retry-after-budget.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { retry } from "../src/middleware/retry";
|
|
3
|
-
import { HttpResponse } from "../src/response/response";
|
|
4
|
-
describe("retry rate limit awareness", () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
vi.useRealTimers();
|
|
7
|
-
vi.restoreAllMocks();
|
|
8
|
-
});
|
|
9
|
-
it("honors Retry-After when it is longer than the base delay", async () => {
|
|
10
|
-
vi.useFakeTimers();
|
|
11
|
-
let attempts = 0;
|
|
12
|
-
const retryEvents = [];
|
|
13
|
-
const mw = retry({
|
|
14
|
-
maxRetries: 1,
|
|
15
|
-
delay: 10,
|
|
16
|
-
backoff: false,
|
|
17
|
-
retryOnStatus: [429],
|
|
18
|
-
respectRetryAfter: true,
|
|
19
|
-
onRetry: (event) => {
|
|
20
|
-
retryEvents.push({
|
|
21
|
-
waitTime: event.waitTime,
|
|
22
|
-
...(event.retryAfterMs !== undefined ? { retryAfterMs: event.retryAfterMs } : {}),
|
|
23
|
-
source: event.source,
|
|
24
|
-
});
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
const promise = mw({
|
|
28
|
-
method: "GET",
|
|
29
|
-
url: "https://example.com",
|
|
30
|
-
}, async () => {
|
|
31
|
-
attempts += 1;
|
|
32
|
-
if (attempts === 1) {
|
|
33
|
-
return new HttpResponse(new Response("rate limited", {
|
|
34
|
-
status: 429,
|
|
35
|
-
headers: { "Retry-After": "1" },
|
|
36
|
-
}));
|
|
37
|
-
}
|
|
38
|
-
return new HttpResponse(new Response("ok", { status: 200 }));
|
|
39
|
-
});
|
|
40
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
41
|
-
const response = await promise;
|
|
42
|
-
expect(attempts).toBe(2);
|
|
43
|
-
expect(response.status).toBe(200);
|
|
44
|
-
expect(retryEvents).toEqual([
|
|
45
|
-
{ waitTime: 1000, retryAfterMs: 1000, source: "status" },
|
|
46
|
-
]);
|
|
47
|
-
});
|
|
48
|
-
it("stops retrying when retry budget would be exceeded", async () => {
|
|
49
|
-
let attempts = 0;
|
|
50
|
-
const retryEvents = [];
|
|
51
|
-
const mw = retry({
|
|
52
|
-
maxRetries: 3,
|
|
53
|
-
delay: 50,
|
|
54
|
-
backoff: false,
|
|
55
|
-
retryBudgetMs: 10,
|
|
56
|
-
onRetry: (event) => {
|
|
57
|
-
retryEvents.push(event.waitTime);
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
const response = await mw({
|
|
61
|
-
method: "GET",
|
|
62
|
-
url: "https://example.com",
|
|
63
|
-
}, async () => {
|
|
64
|
-
attempts += 1;
|
|
65
|
-
return new HttpResponse(new Response("temporary", { status: 500 }));
|
|
66
|
-
});
|
|
67
|
-
expect(attempts).toBe(1);
|
|
68
|
-
expect(response.status).toBe(500);
|
|
69
|
-
expect(retryEvents).toEqual([]);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
//# sourceMappingURL=retry-after-budget.test.js.map
|