@apifuse/provider-sdk 2.2.0-beta.3 → 2.2.0-beta.31
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/AUTHORING.md +493 -5
- package/CHANGELOG.md +131 -1
- package/README.md +52 -6
- package/SUBMISSION.md +1 -1
- package/bin/apifuse-check.ts +106 -62
- package/bin/apifuse-create.ts +1 -1
- package/bin/apifuse-dev.ts +63 -55
- package/bin/apifuse-pack-check.ts +22 -2
- package/bin/apifuse-pack-smoke.ts +78 -82
- package/bin/apifuse-pack-types.ts +583 -0
- package/bin/apifuse-perf.ts +59 -140
- package/bin/apifuse-record.ts +698 -113
- package/bin/apifuse-submit-check.ts +517 -44
- package/bin/apifuse-sync-assets.ts +117 -0
- package/bin/apifuse.ts +1 -1
- package/bin/submit-check-delimited-text.ts +50 -0
- package/bin/submit-check-xml.ts +1 -1
- package/dist/auth-turn/index.d.ts +4 -4
- package/dist/auth-turn/index.js +1 -1
- package/dist/auth.d.ts +16 -2
- package/dist/auth.js +76 -18
- package/dist/ceremonies/index.d.ts +9 -1
- package/dist/ceremonies/index.js +117 -29
- package/dist/cli/commands.d.ts +1 -1
- package/dist/cli/commands.js +8 -0
- package/dist/cli/create.d.ts +3 -0
- package/dist/cli/create.js +34 -35
- package/dist/cli/prompt-assets.d.ts +80 -0
- package/dist/cli/prompt-assets.js +743 -0
- package/dist/cli/templates/provider/AGENTS.md.tpl +17 -8
- package/dist/cli/templates/provider/README.md.tpl +4 -4
- package/dist/config/loader.d.ts +176 -17
- package/dist/config/loader.js +434 -161
- package/dist/contract-serialization.d.ts +2 -2
- package/dist/contract-serialization.js +7 -14
- package/dist/contract-types.d.ts +3 -2
- package/dist/contract.d.ts +3 -3
- package/dist/contract.js +6 -6
- package/dist/declaration-validation.d.ts +23 -0
- package/dist/declaration-validation.js +159 -0
- package/dist/define.d.ts +13 -1
- package/dist/define.js +391 -122
- package/dist/dev.d.ts +1 -1
- package/dist/dev.js +1 -1
- package/dist/error-resolution.d.ts +4 -0
- package/dist/error-resolution.js +123 -0
- package/dist/errors.d.ts +19 -1
- package/dist/errors.js +41 -3
- package/dist/fixture-sanitization.d.ts +26 -0
- package/dist/fixture-sanitization.js +216 -0
- package/dist/i18n/catalog.d.ts +2 -2
- package/dist/i18n/catalog.js +4 -10
- package/dist/i18n/index.d.ts +2 -2
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/keys.d.ts +2 -2
- package/dist/index.d.ts +50 -42
- package/dist/index.js +41 -37
- package/dist/lint.d.ts +6 -1
- package/dist/lint.js +370 -18
- package/dist/native-address.d.ts +43 -0
- package/dist/native-address.js +281 -0
- package/dist/native-egress-policy.d.ts +31 -0
- package/dist/native-egress-policy.js +288 -0
- package/dist/observability.d.ts +5 -2
- package/dist/observability.js +48 -1
- package/dist/provider.d.ts +13 -11
- package/dist/provider.js +10 -9
- package/dist/public-schema-field-lint.d.ts +1 -1
- package/dist/recipes/gov-api.js +1 -1
- package/dist/runtime/auth-flow.d.ts +3 -1
- package/dist/runtime/auth-flow.js +8 -3
- package/dist/runtime/browser.d.ts +1 -1
- package/dist/runtime/browser.js +138 -40
- package/dist/runtime/cache.d.ts +2 -1
- package/dist/runtime/cache.js +173 -23
- package/dist/runtime/choice-wordlist.d.ts +9 -0
- package/dist/runtime/choice-wordlist.js +138 -0
- package/dist/runtime/choice.d.ts +14 -1
- package/dist/runtime/choice.js +566 -101
- package/dist/runtime/credential.d.ts +1 -1
- package/dist/runtime/credential.js +1 -1
- package/dist/runtime/env.d.ts +1 -1
- package/dist/runtime/executor.d.ts +1 -1
- package/dist/runtime/executor.js +25 -3
- package/dist/runtime/http.d.ts +3 -2
- package/dist/runtime/http.js +517 -55
- package/dist/runtime/insights.d.ts +1 -1
- package/dist/runtime/insights.js +6 -13
- package/dist/runtime/instrumentation.d.ts +2 -2
- package/dist/runtime/instrumentation.js +371 -23
- package/dist/runtime/keyring.js +1 -1
- package/dist/runtime/namespace.js +1 -1
- package/dist/runtime/native-network-errors.d.ts +33 -0
- package/dist/runtime/native-network-errors.js +69 -0
- package/dist/runtime/native-network.d.ts +96 -0
- package/dist/runtime/native-network.js +1232 -0
- package/dist/runtime/ocr.d.ts +29 -0
- package/dist/runtime/ocr.js +440 -0
- package/dist/runtime/otlp.d.ts +1 -1
- package/dist/runtime/perf.d.ts +1 -1
- package/dist/runtime/provider.d.ts +1 -1
- package/dist/runtime/provider.js +1 -2
- package/dist/runtime/proxy-errors.d.ts +1 -1
- package/dist/runtime/proxy-errors.js +9 -7
- package/dist/runtime/proxy-nodemaven.d.ts +56 -0
- package/dist/runtime/proxy-nodemaven.js +146 -0
- package/dist/runtime/proxy-retry-policy.d.ts +2 -2
- package/dist/runtime/proxy-retry-policy.js +2 -2
- package/dist/runtime/proxy-telemetry.d.ts +2 -1
- package/dist/runtime/proxy-telemetry.js +58 -52
- package/dist/runtime/redirects.d.ts +29 -0
- package/dist/runtime/redirects.js +36 -0
- package/dist/runtime/redis.d.ts +1 -1
- package/dist/runtime/redis.js +5 -5
- package/dist/runtime/request-options.d.ts +68 -1
- package/dist/runtime/request-options.js +548 -0
- package/dist/runtime/resolver-config.d.ts +6 -0
- package/dist/runtime/resolver-config.js +6 -0
- package/dist/runtime/resolver-public.d.ts +1 -0
- package/dist/runtime/resolver-public.js +1 -0
- package/dist/runtime/resolver-shared.d.ts +3 -0
- package/dist/runtime/resolver-shared.js +12 -0
- package/dist/runtime/resolver-vendors/bindings.d.ts +48 -0
- package/dist/runtime/resolver-vendors/bindings.js +40 -0
- package/dist/runtime/resolver-vendors/browser.d.ts +20 -0
- package/dist/runtime/resolver-vendors/browser.js +282 -0
- package/dist/runtime/resolver-vendors/hosts.d.ts +2 -0
- package/dist/runtime/resolver-vendors/hosts.js +33 -0
- package/dist/runtime/resolver-vendors/twocaptcha.d.ts +24 -0
- package/dist/runtime/resolver-vendors/twocaptcha.js +368 -0
- package/dist/runtime/resolver-vendors/types.d.ts +83 -0
- package/dist/runtime/resolver-vendors/types.js +69 -0
- package/dist/runtime/resolver.d.ts +59 -0
- package/dist/runtime/resolver.js +705 -0
- package/dist/runtime/secrets.d.ts +27 -0
- package/dist/runtime/secrets.js +51 -0
- package/dist/runtime/state.d.ts +5 -2
- package/dist/runtime/state.js +280 -74
- package/dist/runtime/stealth-cookies.d.ts +20 -0
- package/dist/runtime/stealth-cookies.js +111 -0
- package/dist/runtime/stealth.d.ts +30 -5
- package/dist/runtime/stealth.js +523 -259
- package/dist/runtime/stt.d.ts +1 -1
- package/dist/runtime/stt.js +12 -27
- package/dist/runtime/timeout.d.ts +5 -0
- package/dist/runtime/timeout.js +12 -0
- package/dist/runtime/trace.d.ts +2 -2
- package/dist/runtime/trace.js +2 -4
- package/dist/runtime/waterfall.d.ts +1 -1
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +7 -15
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +1 -1
- package/dist/server/index.d.ts +7 -7
- package/dist/server/index.js +6 -6
- package/dist/server/self-test-input-tokens.d.ts +2 -1
- package/dist/server/self-test-input-tokens.js +18 -14
- package/dist/server/self-test-redaction.d.ts +1 -1
- package/dist/server/self-test-redaction.js +1 -1
- package/dist/server/self-test.d.ts +117 -3
- package/dist/server/self-test.js +787 -151
- package/dist/server/serve-implementation.d.ts +210 -0
- package/dist/server/serve-implementation.js +2078 -0
- package/dist/server/serve.d.ts +1 -70
- package/dist/server/serve.js +1 -1143
- package/dist/server/types.d.ts +34 -9
- package/dist/server/types.js +8 -1
- package/dist/stateful/errors.d.ts +19 -0
- package/dist/stateful/errors.js +24 -0
- package/dist/stateful/http-provider-event-emitter.d.ts +40 -0
- package/dist/stateful/http-provider-event-emitter.js +237 -0
- package/dist/stateful/http-session-owner-registry.d.ts +44 -0
- package/dist/stateful/http-session-owner-registry.js +210 -0
- package/dist/stateful/index.d.ts +18 -0
- package/dist/stateful/index.js +18 -0
- package/dist/stateful/provider-event-delivery-failures.d.ts +32 -0
- package/dist/stateful/provider-event-delivery-failures.js +43 -0
- package/dist/stateful/provider-event-pipeline-metrics.d.ts +46 -0
- package/dist/stateful/provider-event-pipeline-metrics.js +48 -0
- package/dist/stateful/provider-event-pipeline.d.ts +50 -0
- package/dist/stateful/provider-event-pipeline.js +1 -0
- package/dist/stateful/provider-events.d.ts +101 -0
- package/dist/stateful/provider-events.js +289 -0
- package/dist/stateful/session-key.d.ts +15 -0
- package/dist/stateful/session-key.js +86 -0
- package/dist/stateful/stateful-provider-adapter-context.d.ts +5 -0
- package/dist/stateful/stateful-provider-adapter-context.js +42 -0
- package/dist/stateful/stateful-provider-adapter-metrics.d.ts +15 -0
- package/dist/stateful/stateful-provider-adapter-metrics.js +21 -0
- package/dist/stateful/stateful-provider-adapter.d.ts +98 -0
- package/dist/stateful/stateful-provider-adapter.js +287 -0
- package/dist/stateful/stateful-provider-observability.d.ts +62 -0
- package/dist/stateful/stateful-provider-observability.js +161 -0
- package/dist/stateful/stateful-provider-owner-forwarder.d.ts +41 -0
- package/dist/stateful/stateful-provider-owner-forwarder.js +215 -0
- package/dist/stateful/stateful-provider-runtime-context.d.ts +32 -0
- package/dist/stateful/stateful-provider-runtime-context.js +60 -0
- package/dist/stateful/stateful-provider-runtime-executor.d.ts +34 -0
- package/dist/stateful/stateful-provider-runtime-executor.js +52 -0
- package/dist/stateful/stateful-provider-session-routing.d.ts +67 -0
- package/dist/stateful/stateful-provider-session-routing.js +345 -0
- package/dist/stateful/stateful-provider-session-runtime.d.ts +98 -0
- package/dist/stateful/stateful-provider-session-runtime.js +245 -0
- package/dist/stateful-signing.d.ts +18 -0
- package/dist/stateful-signing.js +27 -0
- package/dist/stealth/profiles.d.ts +1 -1
- package/dist/stealth/profiles.js +21 -21
- package/dist/stream-evidence.d.ts +74 -0
- package/dist/stream-evidence.js +785 -0
- package/dist/stream.d.ts +1 -1
- package/dist/stream.js +7 -1
- package/dist/testing/index.d.ts +3 -2
- package/dist/testing/index.js +3 -2
- package/dist/testing/run.d.ts +32 -2
- package/dist/testing/run.js +488 -28
- package/dist/types.d.ts +566 -19
- package/dist/types.js +1 -0
- package/dist/user-input.d.ts +30 -0
- package/dist/user-input.js +66 -0
- package/package.json +42 -7
- package/src/auth-turn/index.ts +2 -2
- package/src/auth.ts +146 -86
- package/src/ceremonies/index.ts +167 -92
- package/src/cli/commands.ts +10 -0
- package/src/cli/create.ts +42 -35
- package/src/cli/prompt-assets.ts +865 -0
- package/src/cli/templates/provider/AGENTS.md.tpl +17 -8
- package/src/cli/templates/provider/README.md.tpl +4 -4
- package/src/config/loader.ts +667 -289
- package/src/contract-serialization.ts +10 -18
- package/src/contract-types.ts +3 -2
- package/src/contract.ts +14 -28
- package/src/declaration-validation.ts +202 -0
- package/src/define.ts +631 -495
- package/src/dev.ts +4 -9
- package/src/error-resolution.ts +128 -0
- package/src/errors.ts +56 -11
- package/src/fixture-sanitization.ts +247 -0
- package/src/i18n/catalog.ts +10 -32
- package/src/i18n/index.ts +2 -2
- package/src/i18n/keys.ts +5 -11
- package/src/index.ts +158 -44
- package/src/lint.ts +488 -154
- package/src/native-address.ts +340 -0
- package/src/native-egress-policy.ts +358 -0
- package/src/observability.ts +51 -1
- package/src/provider.ts +66 -11
- package/src/public-schema-field-lint.ts +7 -33
- package/src/recipes/gov-api.ts +2 -5
- package/src/runtime/auth-flow.ts +13 -7
- package/src/runtime/browser.ts +252 -207
- package/src/runtime/cache.ts +209 -81
- package/src/runtime/choice-wordlist.ts +145 -0
- package/src/runtime/choice.ts +758 -197
- package/src/runtime/credential.ts +2 -2
- package/src/runtime/env.ts +1 -1
- package/src/runtime/executor.ts +37 -19
- package/src/runtime/http.ts +645 -65
- package/src/runtime/insights.ts +15 -53
- package/src/runtime/instrumentation.ts +530 -67
- package/src/runtime/keyring.ts +7 -19
- package/src/runtime/namespace.ts +2 -7
- package/src/runtime/native-network-errors.ts +99 -0
- package/src/runtime/native-network.ts +1605 -0
- package/src/runtime/ocr.ts +523 -0
- package/src/runtime/otlp.ts +12 -23
- package/src/runtime/perf.ts +1 -1
- package/src/runtime/provider.ts +4 -9
- package/src/runtime/proxy-errors.ts +29 -42
- package/src/runtime/proxy-nodemaven.ts +221 -0
- package/src/runtime/proxy-retry-policy.ts +3 -3
- package/src/runtime/proxy-telemetry.ts +84 -77
- package/src/runtime/redirects.ts +66 -0
- package/src/runtime/redis.ts +10 -13
- package/src/runtime/request-options.ts +679 -9
- package/src/runtime/resolver-config.ts +6 -0
- package/src/runtime/resolver-public.ts +18 -0
- package/src/runtime/resolver-shared.ts +17 -0
- package/src/runtime/resolver-vendors/bindings.ts +56 -0
- package/src/runtime/resolver-vendors/browser.ts +408 -0
- package/src/runtime/resolver-vendors/hosts.ts +38 -0
- package/src/runtime/resolver-vendors/twocaptcha.ts +500 -0
- package/src/runtime/resolver-vendors/types.ts +173 -0
- package/src/runtime/resolver.ts +1060 -0
- package/src/runtime/secrets.ts +64 -0
- package/src/runtime/state.ts +399 -161
- package/src/runtime/stealth-cookies.ts +132 -0
- package/src/runtime/stealth.ts +681 -295
- package/src/runtime/stt.ts +39 -113
- package/src/runtime/timeout.ts +18 -0
- package/src/runtime/trace.ts +14 -44
- package/src/runtime/waterfall.ts +5 -18
- package/src/schema.ts +23 -84
- package/src/serve.ts +6 -1
- package/src/server/index.ts +30 -7
- package/src/server/self-test-input-tokens.ts +29 -14
- package/src/server/self-test-redaction.ts +2 -2
- package/src/server/self-test.ts +1030 -180
- package/src/server/serve-implementation.ts +3062 -0
- package/src/server/serve.ts +1 -1781
- package/src/server/types.ts +12 -13
- package/src/stateful/README.md +146 -0
- package/src/stateful/errors.ts +35 -0
- package/src/stateful/http-provider-event-emitter.ts +314 -0
- package/src/stateful/http-session-owner-registry.ts +306 -0
- package/src/stateful/index.ts +18 -0
- package/src/stateful/provider-event-delivery-failures.ts +80 -0
- package/src/stateful/provider-event-pipeline-metrics.ts +95 -0
- package/src/stateful/provider-event-pipeline.ts +61 -0
- package/src/stateful/provider-events.ts +462 -0
- package/src/stateful/session-key.ts +111 -0
- package/src/stateful/stateful-provider-adapter-context.ts +59 -0
- package/src/stateful/stateful-provider-adapter-metrics.ts +48 -0
- package/src/stateful/stateful-provider-adapter.ts +562 -0
- package/src/stateful/stateful-provider-observability.ts +261 -0
- package/src/stateful/stateful-provider-owner-forwarder.ts +287 -0
- package/src/stateful/stateful-provider-runtime-context.ts +92 -0
- package/src/stateful/stateful-provider-runtime-executor.ts +96 -0
- package/src/stateful/stateful-provider-session-routing.ts +546 -0
- package/src/stateful/stateful-provider-session-runtime.ts +403 -0
- package/src/stateful-signing.ts +46 -0
- package/src/stealth/profiles.ts +27 -33
- package/src/stream-evidence.ts +988 -0
- package/src/stream.ts +16 -20
- package/src/testing/index.ts +11 -2
- package/src/testing/run.ts +668 -74
- package/src/types.ts +665 -35
- package/src/user-input.ts +118 -0
- package/dist/cli/templates/provider/CLAUDE.md.tpl +0 -1
- package/src/cli/templates/provider/CLAUDE.md.tpl +0 -1
- /package/dist/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
- /package/dist/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/fixtures-and-recording/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/health-checks-and-fail-closed/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/normalization-standards/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/pagination-and-counts/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-contract-verification/SKILL.md.tpl +0 -0
- /package/src/cli/templates/provider/{skills → .agents/skills}/upstream-notes/README.md.tpl +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const STATEFUL_SIGNATURE_HEADER = "x-apifuse-stateful-signature";
|
|
2
|
+
export declare const STATEFUL_TIMESTAMP_HEADER = "x-apifuse-stateful-timestamp";
|
|
3
|
+
export declare const STATEFUL_NONCE_HEADER = "x-apifuse-stateful-nonce";
|
|
4
|
+
export type StatefulSigningInput = {
|
|
5
|
+
readonly secret: string;
|
|
6
|
+
readonly timestamp: string;
|
|
7
|
+
readonly rawBody: string;
|
|
8
|
+
readonly method: string;
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly nonce: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function signStatefulRequestBody(input: StatefulSigningInput): string;
|
|
13
|
+
export declare function verifyStatefulRequestSignature(input: StatefulSigningInput & {
|
|
14
|
+
readonly signature: string;
|
|
15
|
+
}): boolean;
|
|
16
|
+
export declare function statefulSignedHeaders(input: Omit<StatefulSigningInput, "nonce"> & {
|
|
17
|
+
readonly nonce?: string;
|
|
18
|
+
}): Record<string, string>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createHmac, randomUUID, timingSafeEqual } from "node:crypto";
|
|
2
|
+
export const STATEFUL_SIGNATURE_HEADER = "x-apifuse-stateful-signature";
|
|
3
|
+
export const STATEFUL_TIMESTAMP_HEADER = "x-apifuse-stateful-timestamp";
|
|
4
|
+
export const STATEFUL_NONCE_HEADER = "x-apifuse-stateful-nonce";
|
|
5
|
+
export function signStatefulRequestBody(input) {
|
|
6
|
+
return `v1=${createHmac("sha256", input.secret)
|
|
7
|
+
.update(`v1:${input.method.toUpperCase()}:${input.path}:${input.timestamp}:${input.nonce}.${input.rawBody}`)
|
|
8
|
+
.digest("hex")}`;
|
|
9
|
+
}
|
|
10
|
+
export function verifyStatefulRequestSignature(input) {
|
|
11
|
+
return safeEqualAscii(input.signature, signStatefulRequestBody(input));
|
|
12
|
+
}
|
|
13
|
+
export function statefulSignedHeaders(input) {
|
|
14
|
+
const nonce = input.nonce ?? randomUUID();
|
|
15
|
+
return {
|
|
16
|
+
[STATEFUL_SIGNATURE_HEADER]: signStatefulRequestBody({ ...input, nonce }),
|
|
17
|
+
[STATEFUL_TIMESTAMP_HEADER]: input.timestamp,
|
|
18
|
+
[STATEFUL_NONCE_HEADER]: nonce,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function safeEqualAscii(actual, expected) {
|
|
22
|
+
const actualBytes = Buffer.from(actual);
|
|
23
|
+
const expectedBytes = Buffer.from(expected);
|
|
24
|
+
if (actualBytes.byteLength !== expectedBytes.byteLength)
|
|
25
|
+
return false;
|
|
26
|
+
return timingSafeEqual(actualBytes, expectedBytes);
|
|
27
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StealthProfile } from "../types";
|
|
1
|
+
import type { StealthProfile } from "../types.js";
|
|
2
2
|
export declare function generateLayer2Headers(profile: StealthProfile): Record<string, string>;
|
|
3
3
|
export declare function getStealthProfile(name: string): StealthProfile;
|
|
4
4
|
export declare function listStealthProfiles(): string[];
|
package/dist/stealth/profiles.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SDKError } from "../errors";
|
|
1
|
+
import { SDKError } from "../errors.js";
|
|
2
2
|
const CHROMIUM_HEADER_ORDER = [
|
|
3
3
|
":method",
|
|
4
4
|
":authority",
|
|
@@ -57,7 +57,7 @@ const FIREFOX_H2_SETTINGS = {
|
|
|
57
57
|
MAX_HEADER_LIST_SIZE: 65536,
|
|
58
58
|
};
|
|
59
59
|
const SAFARI_H2_SETTINGS = {
|
|
60
|
-
|
|
60
|
+
// Safari 17 also sends a connection-level WINDOW_UPDATE increment of 10485760.
|
|
61
61
|
ENABLE_PUSH: 0,
|
|
62
62
|
INITIAL_WINDOW_SIZE: 4194304,
|
|
63
63
|
MAX_CONCURRENT_STREAMS: 100,
|
|
@@ -74,12 +74,8 @@ function createProfile(name, definition) {
|
|
|
74
74
|
tlsClientIdentifier: definition.tlsClientIdentifier,
|
|
75
75
|
ja3: definition.ja3,
|
|
76
76
|
ja4: definition.ja4,
|
|
77
|
-
h2Settings: definition.h2Settings
|
|
78
|
-
|
|
79
|
-
: undefined,
|
|
80
|
-
headerOrder: definition.headerOrder
|
|
81
|
-
? [...definition.headerOrder]
|
|
82
|
-
: undefined,
|
|
77
|
+
h2Settings: definition.h2Settings ? { ...definition.h2Settings } : undefined,
|
|
78
|
+
headerOrder: definition.headerOrder ? [...definition.headerOrder] : undefined,
|
|
83
79
|
};
|
|
84
80
|
}
|
|
85
81
|
function extractBrowserMajorVersion(profile) {
|
|
@@ -120,9 +116,7 @@ export function generateLayer2Headers(profile) {
|
|
|
120
116
|
: `"Chromium";v="${majorVersion}", "Google Chrome";v="${majorVersion}", "Not)A;Brand";v="99"`;
|
|
121
117
|
headers["Sec-Ch-Ua-Platform"] = toPlatformHeaderValue(profile.platform);
|
|
122
118
|
headers["Sec-Ch-Ua-Mobile"] =
|
|
123
|
-
profile.platform === "android" || profile.platform === "ios"
|
|
124
|
-
? "?1"
|
|
125
|
-
: "?0";
|
|
119
|
+
profile.platform === "android" || profile.platform === "ios" ? "?1" : "?0";
|
|
126
120
|
}
|
|
127
121
|
return headers;
|
|
128
122
|
}
|
|
@@ -168,8 +162,8 @@ const STEALTH_PROFILES = {
|
|
|
168
162
|
}),
|
|
169
163
|
"firefox-132": createProfile("firefox-132", {
|
|
170
164
|
platform: "macos",
|
|
171
|
-
version: "
|
|
172
|
-
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:
|
|
165
|
+
version: "133.0",
|
|
166
|
+
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
|
|
173
167
|
tlsClientIdentifier: "firefox_132",
|
|
174
168
|
ja3: FIREFOX_JA3,
|
|
175
169
|
h2Settings: FIREFOX_H2_SETTINGS,
|
|
@@ -184,6 +178,15 @@ const STEALTH_PROFILES = {
|
|
|
184
178
|
h2Settings: SAFARI_H2_SETTINGS,
|
|
185
179
|
headerOrder: SAFARI_HEADER_ORDER,
|
|
186
180
|
}),
|
|
181
|
+
"safari-17": createProfile("safari-17", {
|
|
182
|
+
platform: "macos",
|
|
183
|
+
version: "17.0",
|
|
184
|
+
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15",
|
|
185
|
+
tlsClientIdentifier: "safari_17_0",
|
|
186
|
+
ja3: SAFARI_JA3,
|
|
187
|
+
h2Settings: SAFARI_H2_SETTINGS,
|
|
188
|
+
headerOrder: SAFARI_HEADER_ORDER,
|
|
189
|
+
}),
|
|
187
190
|
"safari-15": createProfile("safari-15", {
|
|
188
191
|
platform: "macos",
|
|
189
192
|
version: "15.6.1",
|
|
@@ -204,8 +207,8 @@ const STEALTH_PROFILES = {
|
|
|
204
207
|
}),
|
|
205
208
|
"ios-safari-18": createProfile("ios-safari-18", {
|
|
206
209
|
platform: "ios",
|
|
207
|
-
version: "18.
|
|
208
|
-
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS
|
|
210
|
+
version: "18.1.1",
|
|
211
|
+
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Mobile/15E148 Safari/604.1",
|
|
209
212
|
tlsClientIdentifier: "safari_ios_18_0",
|
|
210
213
|
ja3: SAFARI_JA3,
|
|
211
214
|
h2Settings: SAFARI_H2_SETTINGS,
|
|
@@ -213,8 +216,8 @@ const STEALTH_PROFILES = {
|
|
|
213
216
|
}),
|
|
214
217
|
"ios-safari-17": createProfile("ios-safari-17", {
|
|
215
218
|
platform: "ios",
|
|
216
|
-
version: "17.
|
|
217
|
-
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS
|
|
219
|
+
version: "17.2",
|
|
220
|
+
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1",
|
|
218
221
|
tlsClientIdentifier: "safari_ios_17_0",
|
|
219
222
|
ja3: SAFARI_JA3,
|
|
220
223
|
h2Settings: SAFARI_H2_SETTINGS,
|
|
@@ -252,8 +255,5 @@ export function getStealthProfile(name) {
|
|
|
252
255
|
};
|
|
253
256
|
}
|
|
254
257
|
export function listStealthProfiles() {
|
|
255
|
-
return [
|
|
256
|
-
...Object.keys(STEALTH_PROFILES),
|
|
257
|
-
...Object.keys(STEALTH_PROFILE_ALIASES),
|
|
258
|
-
];
|
|
258
|
+
return [...Object.keys(STEALTH_PROFILES), ...Object.keys(STEALTH_PROFILE_ALIASES)];
|
|
259
259
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type JsonValue } from "./contract-json.js";
|
|
2
|
+
import type { HttpStreamResponse } from "./types.js";
|
|
3
|
+
export declare const STREAM_PREVIEW_BYTES = 4096;
|
|
4
|
+
export declare const STREAM_FINALIZE_TIMEOUT_MS = 30000;
|
|
5
|
+
declare const STREAM_EVIDENCE_HEADER_NAMES: readonly ["content-disposition", "content-length", "content-type"];
|
|
6
|
+
type StreamEvidenceHeaderName = (typeof STREAM_EVIDENCE_HEADER_NAMES)[number];
|
|
7
|
+
export type StreamEvidenceHeaders = Partial<Record<StreamEvidenceHeaderName, string>>;
|
|
8
|
+
export interface StreamEvidenceRequest {
|
|
9
|
+
ordinal: number;
|
|
10
|
+
method: string;
|
|
11
|
+
path: string;
|
|
12
|
+
}
|
|
13
|
+
declare const STREAM_EVIDENCE_REDACTION_REASONS: readonly ["high-entropy-token", "malformed-json", "pem-private-key", "sanitized-preview-too-large", "sanitizer-output-invalid", "sensitive-delimited-column", "textual-xml", "truncated-form", "truncated-json", "undecodable-text"];
|
|
14
|
+
export type StreamEvidenceRedactionReason = (typeof STREAM_EVIDENCE_REDACTION_REASONS)[number];
|
|
15
|
+
export interface StreamEvidenceRecord {
|
|
16
|
+
__apifuse_stream__: true;
|
|
17
|
+
status: number;
|
|
18
|
+
ok: boolean;
|
|
19
|
+
headers: StreamEvidenceHeaders;
|
|
20
|
+
body_sha256: string;
|
|
21
|
+
body_bytes: number;
|
|
22
|
+
body_preview_base64: string;
|
|
23
|
+
request?: StreamEvidenceRequest;
|
|
24
|
+
preview_sanitized?: true;
|
|
25
|
+
preview_redaction_reason?: StreamEvidenceRedactionReason;
|
|
26
|
+
}
|
|
27
|
+
export type StreamEvidenceReplayResponse = HttpStreamResponse & {
|
|
28
|
+
evidence_only: true;
|
|
29
|
+
body_sha256: string;
|
|
30
|
+
body_bytes: number;
|
|
31
|
+
preview_sanitized?: true;
|
|
32
|
+
preview_redaction_reason?: StreamEvidenceRedactionReason;
|
|
33
|
+
};
|
|
34
|
+
export interface StreamEvidenceCapture {
|
|
35
|
+
response: HttpStreamResponse;
|
|
36
|
+
getEvidence(): Promise<StreamEvidenceRecord>;
|
|
37
|
+
}
|
|
38
|
+
export type StreamCaptureGroupItem = {
|
|
39
|
+
kind: "stream";
|
|
40
|
+
evidence: StreamEvidenceRecord;
|
|
41
|
+
} | {
|
|
42
|
+
kind: "response";
|
|
43
|
+
value: JsonValue;
|
|
44
|
+
};
|
|
45
|
+
export interface StreamCaptureGroup {
|
|
46
|
+
items: StreamCaptureGroupItem[];
|
|
47
|
+
}
|
|
48
|
+
export interface StreamCaptureEnvelope {
|
|
49
|
+
__apifuse_capture__: true;
|
|
50
|
+
items: StreamCaptureGroupItem[];
|
|
51
|
+
}
|
|
52
|
+
export type StreamEvidenceCaptureOptions = {
|
|
53
|
+
requestUrl: string;
|
|
54
|
+
sanitizeFixture?: (value: JsonValue) => JsonValue;
|
|
55
|
+
request?: StreamEvidenceRequest;
|
|
56
|
+
finalizeTimeoutMs?: number;
|
|
57
|
+
};
|
|
58
|
+
export declare function parseStreamEvidenceRecord(value: unknown): StreamEvidenceRecord;
|
|
59
|
+
export declare function isStreamEvidenceRecord(value: unknown): value is StreamEvidenceRecord;
|
|
60
|
+
export declare function findStreamEvidenceRecord(value: unknown): StreamEvidenceRecord | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Selects every stream captured by the latest recording invocation, in stream call order.
|
|
63
|
+
* Evidence without request ordinals uses the legacy latest-record-only behavior.
|
|
64
|
+
*/
|
|
65
|
+
export declare function findStreamEvidenceRecords(value: unknown): StreamEvidenceRecord[];
|
|
66
|
+
/** Returns a tagged latest mixed response group used by evidence-only snapshot replay. */
|
|
67
|
+
export declare function findStreamCaptureGroup(value: unknown): StreamCaptureGroup | undefined;
|
|
68
|
+
/** Creates a discriminated invocation envelope so ordinary arrays cannot mimic capture timelines. */
|
|
69
|
+
export declare function createStreamCaptureEnvelope(items: StreamCaptureGroupItem[]): StreamCaptureEnvelope;
|
|
70
|
+
export declare function isStreamEvidenceReplayResponse(response: HttpStreamResponse): response is StreamEvidenceReplayResponse;
|
|
71
|
+
export declare function captureStreamEvidence(response: HttpStreamResponse, options: StreamEvidenceCaptureOptions): StreamEvidenceCapture;
|
|
72
|
+
export declare function replayStreamEvidence(evidence: StreamEvidenceRecord): StreamEvidenceReplayResponse;
|
|
73
|
+
export declare function hasStreamEvidenceMarker(value: unknown): boolean;
|
|
74
|
+
export {};
|