@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":"retry-after-budget.test.js","sourceRoot":"","sources":["../../tests/retry-after-budget.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-policy-trace.test.d.ts","sourceRoot":"","sources":["../../tests/retry-policy-trace.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createClient, retry } from "../src/index";
|
|
3
|
-
import { createMiddlewareDiagnostics } from "../src/middleware/diagnostics";
|
|
4
|
-
describe("retry policy trace", () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
vi.restoreAllMocks();
|
|
7
|
-
});
|
|
8
|
-
it("surfaces retry decisions through diagnostics events", async () => {
|
|
9
|
-
let attempts = 0;
|
|
10
|
-
const diagnostics = createMiddlewareDiagnostics();
|
|
11
|
-
const client = createClient()
|
|
12
|
-
.use(diagnostics.middleware)
|
|
13
|
-
.use(retry({
|
|
14
|
-
maxRetries: 1,
|
|
15
|
-
delay: 1,
|
|
16
|
-
backoff: false,
|
|
17
|
-
retryOnStatus: [500],
|
|
18
|
-
}));
|
|
19
|
-
const fetchMock = vi.spyOn(globalThis, "fetch").mockImplementation(async () => {
|
|
20
|
-
attempts += 1;
|
|
21
|
-
if (attempts === 1) {
|
|
22
|
-
return new Response("temporary", { status: 500 });
|
|
23
|
-
}
|
|
24
|
-
return new Response("ok", { status: 200 });
|
|
25
|
-
});
|
|
26
|
-
const response = await client.get("https://example.com/ping");
|
|
27
|
-
expect(response.status).toBe(200);
|
|
28
|
-
expect(fetchMock).toHaveBeenCalledTimes(2);
|
|
29
|
-
const snapshot = diagnostics.snapshot();
|
|
30
|
-
const event = snapshot.recentEvents[snapshot.recentEvents.length - 1];
|
|
31
|
-
expect(event?.policyTrace?.[0]?.policy).toBe("retry");
|
|
32
|
-
expect(event?.policyTrace?.[0]?.decision).toBe("retry");
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=retry-policy-trace.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-policy-trace.test.js","sourceRoot":"","sources":["../../tests/retry-policy-trace.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,KAAK,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,MAAM,WAAW,GAAG,2BAA2B,EAAE,CAAC;QAElD,MAAM,MAAM,GAAG,YAAY,EAAE;aAC1B,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;aAC3B,GAAG,CACF,KAAK,CAAC;YACJ,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,CAAC,GAAG,CAAC;SACrB,CAAC,CACH,CAAC;QAEJ,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YAC5E,QAAQ,IAAI,CAAC,CAAC;YACd,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-policy.test.d.ts","sourceRoot":"","sources":["../../tests/retry-policy.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { retry } from "../src/middleware/retry";
|
|
3
|
-
import { HttpResponse } from "../src/response/response";
|
|
4
|
-
describe("retry policy", () => {
|
|
5
|
-
it("retries on 5xx by default", async () => {
|
|
6
|
-
let attempts = 0;
|
|
7
|
-
const mw = retry({ maxRetries: 2, delay: 1, backoff: false });
|
|
8
|
-
const response = await mw({
|
|
9
|
-
method: "GET",
|
|
10
|
-
url: "https://example.com",
|
|
11
|
-
}, async () => {
|
|
12
|
-
attempts += 1;
|
|
13
|
-
if (attempts < 3) {
|
|
14
|
-
return new HttpResponse(new Response("err", { status: 500 }));
|
|
15
|
-
}
|
|
16
|
-
return new HttpResponse(new Response("ok", { status: 200 }));
|
|
17
|
-
});
|
|
18
|
-
expect(attempts).toBe(3);
|
|
19
|
-
expect(response.status).toBe(200);
|
|
20
|
-
});
|
|
21
|
-
it("does not retry 4xx by default", async () => {
|
|
22
|
-
let attempts = 0;
|
|
23
|
-
const mw = retry({ maxRetries: 3, delay: 1, backoff: false });
|
|
24
|
-
const response = await mw({
|
|
25
|
-
method: "GET",
|
|
26
|
-
url: "https://example.com",
|
|
27
|
-
}, async () => {
|
|
28
|
-
attempts += 1;
|
|
29
|
-
return new HttpResponse(new Response("bad", { status: 400 }));
|
|
30
|
-
});
|
|
31
|
-
expect(attempts).toBe(1);
|
|
32
|
-
expect(response.status).toBe(400);
|
|
33
|
-
});
|
|
34
|
-
it("retries only configured status when retryOnStatus is set", async () => {
|
|
35
|
-
let attempts = 0;
|
|
36
|
-
const mw = retry({ maxRetries: 3, delay: 1, backoff: false, retryOnStatus: [429] });
|
|
37
|
-
const response = await mw({
|
|
38
|
-
method: "GET",
|
|
39
|
-
url: "https://example.com",
|
|
40
|
-
}, async () => {
|
|
41
|
-
attempts += 1;
|
|
42
|
-
if (attempts < 2) {
|
|
43
|
-
return new HttpResponse(new Response("too many", { status: 429 }));
|
|
44
|
-
}
|
|
45
|
-
return new HttpResponse(new Response("ok", { status: 200 }));
|
|
46
|
-
});
|
|
47
|
-
expect(attempts).toBe(2);
|
|
48
|
-
expect(response.status).toBe(200);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=retry-policy.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-policy.test.js","sourceRoot":"","sources":["../../tests/retry-policy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.stress.test.d.ts","sourceRoot":"","sources":["../../tests/retry.stress.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createClient, retry } from "../src/index";
|
|
3
|
-
describe("stress: retry loop", () => {
|
|
4
|
-
afterEach(() => {
|
|
5
|
-
vi.restoreAllMocks();
|
|
6
|
-
});
|
|
7
|
-
it("handles repeated request cycles without state leakage", async () => {
|
|
8
|
-
vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response("ok", { status: 200 }));
|
|
9
|
-
const client = createClient().use(retry({
|
|
10
|
-
maxRetries: 1,
|
|
11
|
-
delay: 0,
|
|
12
|
-
backoff: false,
|
|
13
|
-
}));
|
|
14
|
-
const iterations = 200;
|
|
15
|
-
for (let i = 0; i < iterations; i++) {
|
|
16
|
-
const result = await client.getResult("https://example.com/ping");
|
|
17
|
-
expect(result.ok).toBe(true);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=retry.stress.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.stress.test.js","sourceRoot":"","sources":["../../tests/retry.stress.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,KAAK,EAAE,MAAM,cAAc,CAAC;AAEnD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,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,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,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage-adapters.test.d.ts","sourceRoot":"","sources":["../../tests/storage-adapters.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { mkdtemp, writeFile } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { webcrypto } from "node:crypto";
|
|
5
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
-
import { EncryptedQueueStorageAdapter } from "../src/adapters/storage/encryptedStorage";
|
|
7
|
-
import { IndexedDBQueueStorageAdapter } from "../src/adapters/storage/indexedDBAdapter";
|
|
8
|
-
import { FileSystemQueueStorageAdapter } from "../src/node/fsAdapter";
|
|
9
|
-
function createMemoryStorage(initial = []) {
|
|
10
|
-
let items = [...initial];
|
|
11
|
-
return {
|
|
12
|
-
async push(item) {
|
|
13
|
-
items = [...items.filter((x) => x.id !== item.id), item];
|
|
14
|
-
},
|
|
15
|
-
async getAll() {
|
|
16
|
-
return items;
|
|
17
|
-
},
|
|
18
|
-
async remove(id) {
|
|
19
|
-
items = items.filter((x) => x.id !== id);
|
|
20
|
-
},
|
|
21
|
-
async clear() {
|
|
22
|
-
items = [];
|
|
23
|
-
},
|
|
24
|
-
async size() {
|
|
25
|
-
return items.length;
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
beforeEach(() => {
|
|
30
|
-
vi.stubGlobal("crypto", webcrypto);
|
|
31
|
-
});
|
|
32
|
-
afterEach(() => {
|
|
33
|
-
vi.restoreAllMocks();
|
|
34
|
-
vi.unstubAllGlobals();
|
|
35
|
-
});
|
|
36
|
-
describe("EncryptedQueueStorageAdapter", () => {
|
|
37
|
-
it("encrypts on push and decrypts on getAll", async () => {
|
|
38
|
-
const key = await globalThis.crypto.subtle.generateKey({ name: "AES-GCM", length: 256 }, true, [
|
|
39
|
-
"encrypt",
|
|
40
|
-
"decrypt",
|
|
41
|
-
]);
|
|
42
|
-
const inner = createMemoryStorage();
|
|
43
|
-
const adapter = new EncryptedQueueStorageAdapter(inner, key);
|
|
44
|
-
await adapter.push({
|
|
45
|
-
id: 1,
|
|
46
|
-
queuedAt: 100,
|
|
47
|
-
req: { method: "POST", url: "/items", body: { id: "a" } },
|
|
48
|
-
});
|
|
49
|
-
const raw = await inner.getAll();
|
|
50
|
-
expect(typeof raw[0].req).toBe("string");
|
|
51
|
-
const all = await adapter.getAll();
|
|
52
|
-
expect(all).toHaveLength(1);
|
|
53
|
-
expect(all[0]?.req).toMatchObject({ method: "POST", url: "/items" });
|
|
54
|
-
});
|
|
55
|
-
it("throws aggregate error when one or more entries fail decryption", async () => {
|
|
56
|
-
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
57
|
-
const key = await globalThis.crypto.subtle.generateKey({ name: "AES-GCM", length: 256 }, true, [
|
|
58
|
-
"encrypt",
|
|
59
|
-
"decrypt",
|
|
60
|
-
]);
|
|
61
|
-
const inner = createMemoryStorage([
|
|
62
|
-
{
|
|
63
|
-
id: 1,
|
|
64
|
-
queuedAt: 1,
|
|
65
|
-
req: "invalid:ciphertext",
|
|
66
|
-
},
|
|
67
|
-
]);
|
|
68
|
-
const adapter = new EncryptedQueueStorageAdapter(inner, key);
|
|
69
|
-
await expect(adapter.getAll()).rejects.toMatchObject({
|
|
70
|
-
code: "PUREQ_DECRYPTION_FAILURE",
|
|
71
|
-
});
|
|
72
|
-
expect(warnSpy).toHaveBeenCalledTimes(1);
|
|
73
|
-
warnSpy.mockRestore();
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
describe("IndexedDBQueueStorageAdapter", () => {
|
|
77
|
-
it("rejects when IndexedDB is unavailable", async () => {
|
|
78
|
-
const original = globalThis.indexedDB;
|
|
79
|
-
globalThis.indexedDB = undefined;
|
|
80
|
-
const adapter = new IndexedDBQueueStorageAdapter("pureq-test-db");
|
|
81
|
-
await expect(adapter.size()).rejects.toThrow("pureq: IndexedDB is not available in this environment");
|
|
82
|
-
globalThis.indexedDB = original;
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe("FileSystemQueueStorageAdapter", () => {
|
|
86
|
-
it("stores, loads, removes, and clears queued requests", async () => {
|
|
87
|
-
const dir = await mkdtemp(join(tmpdir(), "pureq-fs-"));
|
|
88
|
-
const adapter = new FileSystemQueueStorageAdapter(dir);
|
|
89
|
-
await adapter.push({ id: 10, queuedAt: 1, req: { method: "POST", url: "/a" } });
|
|
90
|
-
await adapter.push({ id: 11, queuedAt: 2, req: { method: "DELETE", url: "/b" } });
|
|
91
|
-
expect(await adapter.size()).toBe(2);
|
|
92
|
-
const all = await adapter.getAll();
|
|
93
|
-
expect(all.map((x) => x.id).sort()).toEqual([10, 11]);
|
|
94
|
-
await adapter.remove(10);
|
|
95
|
-
expect(await adapter.size()).toBe(1);
|
|
96
|
-
await adapter.clear();
|
|
97
|
-
expect(await adapter.size()).toBe(0);
|
|
98
|
-
});
|
|
99
|
-
it("skips malformed json files", async () => {
|
|
100
|
-
const dir = await mkdtemp(join(tmpdir(), "pureq-fs-"));
|
|
101
|
-
const adapter = new FileSystemQueueStorageAdapter(dir);
|
|
102
|
-
await writeFile(join(dir, "broken.json"), "{not-json", "utf8");
|
|
103
|
-
await adapter.push({ id: 22, queuedAt: 2, req: { method: "POST", url: "/ok" } });
|
|
104
|
-
const all = await adapter.getAll();
|
|
105
|
-
expect(all).toHaveLength(1);
|
|
106
|
-
expect(all[0]?.id).toBe(22);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
//# sourceMappingURL=storage-adapters.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage-adapters.test.js","sourceRoot":"","sources":["../../tests/storage-adapters.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traffic-load.test.d.ts","sourceRoot":"","sources":["../../tests/traffic-load.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { concurrencyLimit } from "../src/middleware/concurrencyLimit";
|
|
3
|
-
import { dedupe } from "../src/middleware/dedupe";
|
|
4
|
-
import { createCircuitBreaker, PureqCircuitOpenError } from "../src/middleware/circuitBreaker";
|
|
5
|
-
import { HttpResponse } from "../src/response/response";
|
|
6
|
-
function sleep(ms) {
|
|
7
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
|
-
}
|
|
9
|
-
describe("traffic/load: high concurrency", () => {
|
|
10
|
-
it("enforces maxConcurrent under burst traffic", async () => {
|
|
11
|
-
const startedAt = Date.now();
|
|
12
|
-
const maxConcurrent = 8;
|
|
13
|
-
const middleware = concurrencyLimit({ maxConcurrent });
|
|
14
|
-
let inFlight = 0;
|
|
15
|
-
let maxSeen = 0;
|
|
16
|
-
const total = 240;
|
|
17
|
-
const tasks = Array.from({ length: total }, (_, i) => middleware({ method: "GET", url: `/burst/${i}` }, async () => {
|
|
18
|
-
inFlight += 1;
|
|
19
|
-
maxSeen = Math.max(maxSeen, inFlight);
|
|
20
|
-
await sleep(3);
|
|
21
|
-
inFlight -= 1;
|
|
22
|
-
return new HttpResponse(new Response("ok", { status: 200 }));
|
|
23
|
-
}));
|
|
24
|
-
const responses = await Promise.all(tasks);
|
|
25
|
-
const durationMs = Date.now() - startedAt;
|
|
26
|
-
console.info("[pureq][traffic-metrics]", {
|
|
27
|
-
scenario: "concurrency-burst",
|
|
28
|
-
total,
|
|
29
|
-
maxConcurrent,
|
|
30
|
-
maxSeen,
|
|
31
|
-
success: responses.length,
|
|
32
|
-
durationMs,
|
|
33
|
-
throughputRps: Number((responses.length / Math.max(durationMs / 1000, 0.001)).toFixed(2)),
|
|
34
|
-
});
|
|
35
|
-
expect(responses).toHaveLength(total);
|
|
36
|
-
expect(responses.every((res) => res.status === 200)).toBe(true);
|
|
37
|
-
expect(maxSeen).toBeLessThanOrEqual(maxConcurrent);
|
|
38
|
-
});
|
|
39
|
-
it("collapses same-signature request storms via dedupe", async () => {
|
|
40
|
-
const startedAt = Date.now();
|
|
41
|
-
const middleware = dedupe();
|
|
42
|
-
let upstreamCalls = 0;
|
|
43
|
-
const req = { method: "GET", url: "https://example.com/hot" };
|
|
44
|
-
const total = 120;
|
|
45
|
-
const calls = Array.from({ length: total }, () => middleware(req, async () => {
|
|
46
|
-
upstreamCalls += 1;
|
|
47
|
-
await sleep(5);
|
|
48
|
-
return new HttpResponse(new Response("shared", { status: 200 }));
|
|
49
|
-
}));
|
|
50
|
-
const responses = await Promise.all(calls);
|
|
51
|
-
const texts = await Promise.all(responses.map((r) => r.text()));
|
|
52
|
-
const durationMs = Date.now() - startedAt;
|
|
53
|
-
console.info("[pureq][traffic-metrics]", {
|
|
54
|
-
scenario: "dedupe-storm",
|
|
55
|
-
total,
|
|
56
|
-
upstreamCalls,
|
|
57
|
-
dedupeRate: Number((((total - upstreamCalls) / total) * 100).toFixed(2)),
|
|
58
|
-
durationMs,
|
|
59
|
-
});
|
|
60
|
-
expect(upstreamCalls).toBe(1);
|
|
61
|
-
expect(texts.every((t) => t === "shared")).toBe(true);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe("traffic/load: failure burst handling", () => {
|
|
65
|
-
it("opens circuit quickly after repeated failures and short-circuits subsequent traffic", async () => {
|
|
66
|
-
const startedAt = Date.now();
|
|
67
|
-
const controller = createCircuitBreaker({
|
|
68
|
-
failureThreshold: 3,
|
|
69
|
-
cooldownMs: 60000,
|
|
70
|
-
keyBuilder: () => "api:orders",
|
|
71
|
-
});
|
|
72
|
-
const req = { method: "GET", url: "/orders" };
|
|
73
|
-
for (let i = 0; i < 3; i++) {
|
|
74
|
-
await expect(controller.middleware(req, async () => {
|
|
75
|
-
throw new Error("upstream down");
|
|
76
|
-
})).rejects.toThrow("upstream down");
|
|
77
|
-
}
|
|
78
|
-
await expect(controller.middleware(req, async () => {
|
|
79
|
-
return new HttpResponse(new Response("should-not-run", { status: 200 }));
|
|
80
|
-
})).rejects.toBeInstanceOf(PureqCircuitOpenError);
|
|
81
|
-
const snapshot = await controller.snapshot();
|
|
82
|
-
console.info("[pureq][traffic-metrics]", {
|
|
83
|
-
scenario: "circuit-open-burst",
|
|
84
|
-
failuresToOpen: 3,
|
|
85
|
-
openCircuits: snapshot.summary.open,
|
|
86
|
-
durationMs: Date.now() - startedAt,
|
|
87
|
-
});
|
|
88
|
-
expect(snapshot.summary.open).toBe(1);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
//# sourceMappingURL=traffic-load.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traffic-load.test.js","sourceRoot":"","sources":["../../tests/traffic-load.test.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|