@apifuse/provider-sdk 2.2.0-beta.57 → 2.2.0-beta.59

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.
Files changed (107) hide show
  1. package/AUTHORING.md +9 -0
  2. package/CHANGELOG.md +8 -0
  3. package/README.md +22 -5
  4. package/SUBMISSION.md +2 -1
  5. package/bin/apifuse-pack-types.ts +49 -0
  6. package/bin/apifuse-record.ts +6 -0
  7. package/dist/cli/templates/provider/README.md.tpl +19 -5
  8. package/dist/config/loader.d.ts +7 -0
  9. package/dist/config/loader.js +30 -6
  10. package/dist/declaration-validation.d.ts +2 -1
  11. package/dist/declaration-validation.js +39 -0
  12. package/dist/define.d.ts +5 -4
  13. package/dist/define.js +25 -1
  14. package/dist/engine.d.ts +16 -0
  15. package/dist/engine.js +58 -1
  16. package/dist/error-resolution.js +13 -0
  17. package/dist/index.d.ts +6 -4
  18. package/dist/index.js +4 -2
  19. package/dist/lint.js +3 -3
  20. package/dist/provider.d.ts +3 -3
  21. package/dist/provider.js +2 -2
  22. package/dist/runtime/bounded-expiring-map.d.ts +21 -0
  23. package/dist/runtime/bounded-expiring-map.js +64 -0
  24. package/dist/runtime/cache.d.ts +2 -0
  25. package/dist/runtime/cache.js +8 -1
  26. package/dist/runtime/egress-lease.d.ts +63 -0
  27. package/dist/runtime/egress-lease.js +233 -0
  28. package/dist/runtime/http.js +1 -0
  29. package/dist/runtime/proxy-retry-policy.d.ts +4 -1
  30. package/dist/runtime/proxy-retry-policy.js +11 -2
  31. package/dist/runtime/request-telemetry.d.ts +7 -9
  32. package/dist/runtime/resolver-config.d.ts +7 -0
  33. package/dist/runtime/resolver-config.js +8 -0
  34. package/dist/runtime/resolver-public.d.ts +3 -1
  35. package/dist/runtime/resolver-public.js +1 -1
  36. package/dist/runtime/resolver-shared.d.ts +9 -0
  37. package/dist/runtime/resolver-shared.js +57 -0
  38. package/dist/runtime/resolver-telemetry.d.ts +134 -0
  39. package/dist/runtime/resolver-telemetry.js +204 -0
  40. package/dist/runtime/resolver-usage.d.ts +24 -0
  41. package/dist/runtime/resolver-usage.js +60 -0
  42. package/dist/runtime/resolver-vendors/bindings.d.ts +5 -0
  43. package/dist/runtime/resolver-vendors/bindings.js +5 -0
  44. package/dist/runtime/resolver-vendors/capsolver.d.ts +2 -2
  45. package/dist/runtime/resolver-vendors/capsolver.js +21 -9
  46. package/dist/runtime/resolver-vendors/hypersolutions.d.ts +27 -0
  47. package/dist/runtime/resolver-vendors/hypersolutions.js +369 -0
  48. package/dist/runtime/resolver-vendors/twocaptcha.d.ts +2 -2
  49. package/dist/runtime/resolver-vendors/twocaptcha.js +26 -10
  50. package/dist/runtime/resolver-vendors/types.d.ts +35 -5
  51. package/dist/runtime/resolver-vendors/types.js +20 -10
  52. package/dist/runtime/resolver.d.ts +5 -1
  53. package/dist/runtime/resolver.js +397 -109
  54. package/dist/runtime/stealth-akamai-sbsd.d.ts +54 -0
  55. package/dist/runtime/stealth-akamai-sbsd.js +142 -0
  56. package/dist/runtime/stealth.js +547 -53
  57. package/dist/schema.d.ts +9 -0
  58. package/dist/schema.js +16 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/index.js +1 -0
  61. package/dist/server/self-test.d.ts +4 -0
  62. package/dist/server/self-test.js +10 -1
  63. package/dist/server/serve-implementation.d.ts +7 -1
  64. package/dist/server/serve-implementation.js +181 -53
  65. package/dist/server/types.d.ts +6 -0
  66. package/dist/server/types.js +14 -0
  67. package/dist/stealth/profiles.d.ts +7 -1
  68. package/dist/stealth/profiles.js +9 -0
  69. package/dist/testing/run.js +6 -0
  70. package/dist/types.d.ts +115 -12
  71. package/package.json +1 -1
  72. package/src/cli/templates/provider/README.md.tpl +19 -5
  73. package/src/config/loader.ts +34 -6
  74. package/src/declaration-validation.ts +47 -1
  75. package/src/define.ts +46 -3
  76. package/src/engine.ts +76 -1
  77. package/src/error-resolution.ts +13 -0
  78. package/src/index.ts +32 -1
  79. package/src/lint.ts +3 -3
  80. package/src/provider.ts +9 -0
  81. package/src/runtime/bounded-expiring-map.ts +67 -0
  82. package/src/runtime/cache.ts +10 -1
  83. package/src/runtime/egress-lease.ts +336 -0
  84. package/src/runtime/http.ts +1 -0
  85. package/src/runtime/proxy-retry-policy.ts +12 -1
  86. package/src/runtime/request-telemetry.ts +5 -7
  87. package/src/runtime/resolver-config.ts +12 -0
  88. package/src/runtime/resolver-public.ts +21 -0
  89. package/src/runtime/resolver-shared.ts +75 -0
  90. package/src/runtime/resolver-telemetry.ts +362 -0
  91. package/src/runtime/resolver-usage.ts +96 -0
  92. package/src/runtime/resolver-vendors/bindings.ts +5 -0
  93. package/src/runtime/resolver-vendors/capsolver.ts +22 -3
  94. package/src/runtime/resolver-vendors/hypersolutions.ts +480 -0
  95. package/src/runtime/resolver-vendors/twocaptcha.ts +26 -12
  96. package/src/runtime/resolver-vendors/types.ts +60 -12
  97. package/src/runtime/resolver.ts +465 -124
  98. package/src/runtime/stealth-akamai-sbsd.ts +207 -0
  99. package/src/runtime/stealth.ts +727 -95
  100. package/src/schema.ts +17 -0
  101. package/src/server/index.ts +21 -0
  102. package/src/server/self-test.ts +13 -0
  103. package/src/server/serve-implementation.ts +268 -48
  104. package/src/server/types.ts +14 -0
  105. package/src/stealth/profiles.ts +10 -0
  106. package/src/testing/run.ts +6 -0
  107. package/src/types.ts +130 -22
@@ -1,18 +1,21 @@
1
+ const RESOLVER_VENDOR_POLL_OBSERVER = Symbol.for("@apifuse/provider-sdk/runtime/resolver-vendor-poll-observer");
2
+ /** Internal chain-runner hook; vendor adapters never receive the telemetry sink itself. */
3
+ export function recordResolverVendorPoll(traceRecorder) {
4
+ traceRecorder?.[RESOLVER_VENDOR_POLL_OBSERVER]?.();
5
+ }
6
+ export function attachResolverVendorPollObserver(traceRecorder, observer) {
7
+ Object.defineProperty(traceRecorder, RESOLVER_VENDOR_POLL_OBSERVER, { value: observer });
8
+ return traceRecorder;
9
+ }
1
10
  export const RESOLVER_VENDOR_CAPABILITIES = {
2
11
  browser: ["aws_waf", "cloudflare_interstitial"],
3
12
  // Every kind listed per vendor is implemented by that vendor's adapter; the
4
13
  // per-adapter "agrees with every declared capability" tests iterate this
5
14
  // table, so adding a kind here without an implementation fails the suite.
6
- // 2captcha omits `cloudflare_interstitial`, `akamai_sec_cpt`, and
7
- // `akamai_sensor`: their API offers no task type for them, so declaring them
15
+ // 2captcha omits `cloudflare_interstitial` and every Akamai kind: its API
16
+ // offers no measured task type for them, so declaring them
8
17
  // would route challenges to a vendor that can only refuse.
9
- "2captcha": [
10
- "turnstile",
11
- "recaptcha_v2",
12
- "recaptcha_v3",
13
- "hcaptcha",
14
- "aws_waf",
15
- ],
18
+ "2captcha": ["turnstile", "recaptcha_v2", "recaptcha_v3", "hcaptcha", "aws_waf"],
16
19
  capsolver: [
17
20
  "turnstile",
18
21
  "recaptcha_v2",
@@ -22,6 +25,9 @@ export const RESOLVER_VENDOR_CAPABILITIES = {
22
25
  "aws_waf",
23
26
  ],
24
27
  capmonster: ["turnstile", "recaptcha_v2", "recaptcha_v3", "hcaptcha"],
28
+ // Hyper's /sbsd envelope is measured. Its sensor endpoint is deliberately
29
+ // omitted until that separate protocol is implemented and verified.
30
+ hypersolutions: ["akamai_sbsd"],
25
31
  custom: [
26
32
  "turnstile",
27
33
  "recaptcha_v2",
@@ -31,6 +37,7 @@ export const RESOLVER_VENDOR_CAPABILITIES = {
31
37
  "aws_waf",
32
38
  "akamai_sec_cpt",
33
39
  "akamai_sensor",
40
+ "akamai_sbsd",
34
41
  ],
35
42
  };
36
43
  /**
@@ -41,6 +48,7 @@ export const RESOLVER_VENDOR_CAPABILITIES = {
41
48
  export const DEFAULT_RESOLVER_VENDOR_PREFERENCE = [
42
49
  "capsolver",
43
50
  "2captcha",
51
+ "hypersolutions",
44
52
  ];
45
53
  export function resolverVendorSupports(vendor, kind) {
46
54
  return RESOLVER_VENDOR_CAPABILITIES[vendor].includes(kind);
@@ -62,7 +70,9 @@ export class ResolverVendorUnavailableError extends Error {
62
70
  const missingFields = reason === "missing_challenge_input"
63
71
  ? options.missingFields?.filter((field) => /^[A-Za-z][A-Za-z0-9_]*$/u.test(field))
64
72
  : undefined;
65
- super(reason === "missing_challenge_input" && missingFields !== undefined && missingFields.length > 0
73
+ super(reason === "missing_challenge_input" &&
74
+ missingFields !== undefined &&
75
+ missingFields.length > 0
66
76
  ? `Resolver vendor ${vendor} cannot use incomplete challenge input; missing fields: ${missingFields.join(", ")}`
67
77
  : `Resolver vendor ${vendor} is unavailable: ${reason}`);
68
78
  this.vendor = vendor;
@@ -2,8 +2,9 @@ import { type ProxyResolutionOptions } from "../config/loader.js";
2
2
  import type { ChallengeSolution, ProviderCache, ProviderChallenge, ProviderChallengeKind, ProviderProxyMode, ProviderResolverConfig, ProviderResolverVendor, ResolverContext } from "../types.js";
3
3
  import { type ResolverIdentity, type ResolverVendorAdapter, type ResolverVendorTransport } from "./resolver-vendors/types.js";
4
4
  import type { TraceRecorder } from "./trace.js";
5
+ import type { ResolverTelemetrySink } from "./resolver-telemetry.js";
5
6
  export { createUnsupportedResolverClient, RESOLVER_INSTRUMENTATION_METADATA, } from "./resolver-shared.js";
6
- export { APIFUSE__CDP_POOL__URL, APIFUSE__RESOLVER__2CAPTCHA__API_KEY, APIFUSE__RESOLVER__CAPMONSTER__API_KEY, APIFUSE__RESOLVER__CAPSOLVER__API_KEY, APIFUSE__RESOLVER__TIMEOUT_MS, DEFAULT_RESOLVER_TIMEOUT_MS, } from "./resolver-config.js";
7
+ export { APIFUSE__CDP_POOL__URL, APIFUSE__RESOLVER__2CAPTCHA__API_KEY, APIFUSE__RESOLVER__CAPMONSTER__API_KEY, APIFUSE__RESOLVER__CAPSOLVER__API_KEY, APIFUSE__RESOLVER__HYPERSOLUTIONS__API_KEY, APIFUSE__RESOLVER__TIMEOUT_MS, DEFAULT_RESOLVER_TIMEOUT_MS, } from "./resolver-config.js";
7
8
  export { DEFAULT_RESOLVER_VENDOR_PREFERENCE, resolveProviderResolverVendors, } from "./resolver-vendors/types.js";
8
9
  type EnvLike = Record<string, string | undefined>;
9
10
  type ResolverChainClient = ResolverContext & {
@@ -12,6 +13,8 @@ type ResolverChainClient = ResolverContext & {
12
13
  export interface ResolverRuntimeOptions {
13
14
  readonly allowedHosts?: readonly string[];
14
15
  readonly cache?: ProviderCache;
16
+ /** Optional request-scoped observability sink; never used as resolver identity. */
17
+ readonly telemetry?: ResolverTelemetrySink;
15
18
  /** Inputs for SDK-owned lazy proxy resolution. The SDK never accepts a caller-built identity. */
16
19
  readonly proxyIntent?: {
17
20
  readonly mode: ProviderProxyMode;
@@ -65,6 +68,7 @@ export declare function createResolverClient(options: {
65
68
  readonly createTransport?: ResolverRuntimeOptions["createTransport"];
66
69
  readonly clientProfile?: string;
67
70
  readonly allowedHosts?: readonly string[];
71
+ readonly telemetry?: ResolverTelemetrySink;
68
72
  }): ResolverChainClient;
69
73
  export declare function bindResolverSignal(resolver: ResolverContext, defaultSignal: AbortSignal | undefined): ResolverContext;
70
74
  export declare function createResolverClientFromEnv(config: ProviderResolverConfig | undefined, env?: EnvLike, options?: ResolverRuntimeOptions): ResolverContext;