@toon-protocol/connector 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +117 -46
  2. package/dist/btp/btp-client-manager.d.ts +3 -0
  3. package/dist/btp/btp-client-manager.d.ts.map +1 -1
  4. package/dist/btp/btp-client-manager.js +19 -4
  5. package/dist/btp/btp-client-manager.js.map +1 -1
  6. package/dist/btp/btp-client.d.ts +4 -1
  7. package/dist/btp/btp-client.d.ts.map +1 -1
  8. package/dist/btp/btp-client.js +24 -10
  9. package/dist/btp/btp-client.js.map +1 -1
  10. package/dist/config/config-loader.d.ts +4 -0
  11. package/dist/config/config-loader.d.ts.map +1 -1
  12. package/dist/config/config-loader.js +165 -1
  13. package/dist/config/config-loader.js.map +1 -1
  14. package/dist/config/index.d.ts +1 -0
  15. package/dist/config/index.d.ts.map +1 -1
  16. package/dist/config/types.d.ts +18 -15
  17. package/dist/config/types.d.ts.map +1 -1
  18. package/dist/config/types.js +2 -5
  19. package/dist/config/types.js.map +1 -1
  20. package/dist/core/connector-node.d.ts +12 -1
  21. package/dist/core/connector-node.d.ts.map +1 -1
  22. package/dist/core/connector-node.js +236 -21
  23. package/dist/core/connector-node.js.map +1 -1
  24. package/dist/http/types.d.ts +4 -0
  25. package/dist/http/types.d.ts.map +1 -1
  26. package/dist/lib.d.ts +1 -1
  27. package/dist/lib.d.ts.map +1 -1
  28. package/dist/settlement/provider/payment-channel-provider.d.ts +9 -0
  29. package/dist/settlement/provider/payment-channel-provider.d.ts.map +1 -1
  30. package/dist/transport/direct-transport-provider.d.ts +12 -0
  31. package/dist/transport/direct-transport-provider.d.ts.map +1 -0
  32. package/dist/transport/direct-transport-provider.js +27 -0
  33. package/dist/transport/direct-transport-provider.js.map +1 -0
  34. package/dist/transport/index.d.ts +7 -0
  35. package/dist/transport/index.d.ts.map +1 -0
  36. package/dist/transport/index.js +16 -0
  37. package/dist/transport/index.js.map +1 -0
  38. package/dist/transport/managed-anon-client.d.ts +47 -0
  39. package/dist/transport/managed-anon-client.d.ts.map +1 -0
  40. package/dist/transport/managed-anon-client.js +264 -0
  41. package/dist/transport/managed-anon-client.js.map +1 -0
  42. package/dist/transport/probe-tcp-port.d.ts +3 -0
  43. package/dist/transport/probe-tcp-port.d.ts.map +1 -0
  44. package/dist/transport/probe-tcp-port.js +59 -0
  45. package/dist/transport/probe-tcp-port.js.map +1 -0
  46. package/dist/transport/socks-transport-provider.d.ts +29 -0
  47. package/dist/transport/socks-transport-provider.d.ts.map +1 -0
  48. package/dist/transport/socks-transport-provider.js +136 -0
  49. package/dist/transport/socks-transport-provider.js.map +1 -0
  50. package/dist/transport/socks-url.d.ts +6 -0
  51. package/dist/transport/socks-url.d.ts.map +1 -0
  52. package/dist/transport/socks-url.js +29 -0
  53. package/dist/transport/socks-url.js.map +1 -0
  54. package/dist/transport/transport-provider.d.ts +9 -0
  55. package/dist/transport/transport-provider.d.ts.map +1 -0
  56. package/dist/transport/transport-provider.js +3 -0
  57. package/dist/transport/transport-provider.js.map +1 -0
  58. package/dist/utils/redact.d.ts +3 -0
  59. package/dist/utils/redact.d.ts.map +1 -0
  60. package/dist/utils/redact.js +21 -0
  61. package/dist/utils/redact.js.map +1 -0
  62. package/package.json +4 -2
@@ -57,6 +57,15 @@ export interface EVMProviderConfig {
57
57
  rpcUrl: string;
58
58
  registryAddress: string;
59
59
  keyId: string;
60
+ tokenAddress: string;
61
+ settlementOptions?: {
62
+ threshold?: string;
63
+ settlementTimeoutSecs?: number;
64
+ initialDepositMultiplier?: number;
65
+ pollingIntervalMs?: number;
66
+ ledgerSnapshotPath?: string;
67
+ ledgerPersistIntervalMs?: number;
68
+ };
60
69
  }
61
70
  export interface SolanaProviderConfig {
62
71
  chainType: 'solana';
@@ -1 +1 @@
1
- {"version":3,"file":"payment-channel-provider.d.ts","sourceRoot":"","sources":["../../../src/settlement/provider/payment-channel-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payment-channel-provider.d.ts","sourceRoot":"","sources":["../../../src/settlement/provider/payment-channel-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type http from 'http';
2
+ import type { TransportProvider } from './transport-provider';
3
+ export declare class DirectTransportProvider implements TransportProvider {
4
+ private readonly _externalUrl;
5
+ constructor(externalUrl: string);
6
+ createAgent(_peerUrl: string): http.Agent | undefined;
7
+ getExternalUrl(): string;
8
+ start(): Promise<void>;
9
+ stop(): Promise<void>;
10
+ healthCheck(): Promise<boolean>;
11
+ }
12
+ //# sourceMappingURL=direct-transport-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-transport-provider.d.ts","sourceRoot":"","sources":["../../src/transport/direct-transport-provider.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAU9D,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAM1B,WAAW,EAAE,MAAM;IAQ/B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS;IAKrD,cAAc,IAAI,MAAM;IAKlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DirectTransportProvider = void 0;
4
+ class DirectTransportProvider {
5
+ _externalUrl;
6
+ constructor(externalUrl) {
7
+ if (!externalUrl) {
8
+ throw new Error('DirectTransportProvider: externalUrl must not be empty');
9
+ }
10
+ this._externalUrl = externalUrl;
11
+ }
12
+ createAgent(_peerUrl) {
13
+ return undefined;
14
+ }
15
+ getExternalUrl() {
16
+ return this._externalUrl;
17
+ }
18
+ async start() {
19
+ }
20
+ async stop() {
21
+ }
22
+ async healthCheck() {
23
+ return true;
24
+ }
25
+ }
26
+ exports.DirectTransportProvider = DirectTransportProvider;
27
+ //# sourceMappingURL=direct-transport-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-transport-provider.js","sourceRoot":"","sources":["../../src/transport/direct-transport-provider.ts"],"names":[],"mappings":";;;AAuBA,MAAa,uBAAuB;IACjB,YAAY,CAAS;IAMtC,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAGD,WAAW,CAAC,QAAgB;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAGD,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAGD,KAAK,CAAC,KAAK;IAEX,CAAC;IAGD,KAAK,CAAC,IAAI;IAEV,CAAC;IAGD,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAtCD,0DAsCC"}
@@ -0,0 +1,7 @@
1
+ export { type TransportProvider } from './transport-provider';
2
+ export { DirectTransportProvider } from './direct-transport-provider';
3
+ export { SocksTransportProvider, type SocksTransportProviderOptions, } from './socks-transport-provider';
4
+ export { ManagedAnonClient, createDefaultAnonFactory, type ManagedAnonClientOptions, type AnonFactoryOptions, type AnonSdkHandle, } from './managed-anon-client';
5
+ export { parseSocks5hUrl, type ParsedSocks5Url } from './socks-url';
6
+ export { probeTcpPort, waitForTcpPort } from './probe-tcp-port';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,sBAAsB,EACtB,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForTcpPort = exports.probeTcpPort = exports.parseSocks5hUrl = exports.createDefaultAnonFactory = exports.ManagedAnonClient = exports.SocksTransportProvider = exports.DirectTransportProvider = void 0;
4
+ var direct_transport_provider_1 = require("./direct-transport-provider");
5
+ Object.defineProperty(exports, "DirectTransportProvider", { enumerable: true, get: function () { return direct_transport_provider_1.DirectTransportProvider; } });
6
+ var socks_transport_provider_1 = require("./socks-transport-provider");
7
+ Object.defineProperty(exports, "SocksTransportProvider", { enumerable: true, get: function () { return socks_transport_provider_1.SocksTransportProvider; } });
8
+ var managed_anon_client_1 = require("./managed-anon-client");
9
+ Object.defineProperty(exports, "ManagedAnonClient", { enumerable: true, get: function () { return managed_anon_client_1.ManagedAnonClient; } });
10
+ Object.defineProperty(exports, "createDefaultAnonFactory", { enumerable: true, get: function () { return managed_anon_client_1.createDefaultAnonFactory; } });
11
+ var socks_url_1 = require("./socks-url");
12
+ Object.defineProperty(exports, "parseSocks5hUrl", { enumerable: true, get: function () { return socks_url_1.parseSocks5hUrl; } });
13
+ var probe_tcp_port_1 = require("./probe-tcp-port");
14
+ Object.defineProperty(exports, "probeTcpPort", { enumerable: true, get: function () { return probe_tcp_port_1.probeTcpPort; } });
15
+ Object.defineProperty(exports, "waitForTcpPort", { enumerable: true, get: function () { return probe_tcp_port_1.waitForTcpPort; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":";;;AASA,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA;AAChC,uEAGoC;AAFlC,kIAAA,sBAAsB,OAAA;AAGxB,6DAM+B;AAL7B,wHAAA,iBAAiB,OAAA;AACjB,+HAAA,wBAAwB,OAAA;AAK1B,yCAAoE;AAA3D,4GAAA,eAAe,OAAA;AACxB,mDAAgE;AAAvD,8GAAA,YAAY,OAAA;AAAE,gHAAA,cAAc,OAAA"}
@@ -0,0 +1,47 @@
1
+ import type pino from 'pino';
2
+ export interface AnonSdkHandle {
3
+ start(): Promise<void>;
4
+ stop(): Promise<void>;
5
+ isRunning(): boolean;
6
+ getSOCKSPort(): number;
7
+ }
8
+ export interface AnonFactoryOptions {
9
+ displayLog: boolean;
10
+ useExecFile: boolean;
11
+ socksPort: number;
12
+ orPort: 0;
13
+ binaryPath?: string;
14
+ configFilePath?: string;
15
+ hiddenServiceDir?: string;
16
+ hiddenServicePort?: number;
17
+ autoTermsAgreement?: boolean;
18
+ }
19
+ export interface ManagedAnonClientOptions {
20
+ socksProxy: string;
21
+ hiddenServiceDir?: string;
22
+ hiddenServicePort?: number;
23
+ binaryPath?: string;
24
+ startupTimeoutMs?: number;
25
+ stopTimeoutMs?: number;
26
+ logger: pino.Logger;
27
+ anonFactory: (opts: AnonFactoryOptions) => AnonSdkHandle;
28
+ }
29
+ export declare class ManagedAnonClient {
30
+ private readonly _opts;
31
+ private readonly _logger;
32
+ private readonly _socksHost;
33
+ private readonly _socksPort;
34
+ private _sdk;
35
+ private _started;
36
+ private _lastHealthyFlag;
37
+ private _consecutiveProbeFailures;
38
+ constructor(options: ManagedAnonClientOptions);
39
+ start(): Promise<void>;
40
+ stop(): Promise<void>;
41
+ isRunning(): boolean;
42
+ healthCheck(): Promise<boolean>;
43
+ private _buildFactoryOptions;
44
+ private _bestEffortStop;
45
+ }
46
+ export declare function createDefaultAnonFactory(): Promise<(opts: AnonFactoryOptions) => AnonSdkHandle>;
47
+ //# sourceMappingURL=managed-anon-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-anon-client.d.ts","sourceRoot":"","sources":["../../src/transport/managed-anon-client.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAS7B,MAAM,WAAW,aAAa;IAE5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,SAAS,IAAI,OAAO,CAAC;IAErB,YAAY,IAAI,MAAM,CAAC;CACxB;AAOD,MAAM,WAAW,kBAAkB;IAEjC,UAAU,EAAE,OAAO,CAAC;IAEpB,WAAW,EAAE,OAAO,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAElB,MAAM,EAAE,CAAC,CAAC;IAEV,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD,MAAM,WAAW,wBAAwB;IAEvC,UAAU,EAAE,MAAM,CAAC;IAEnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IAMpB,WAAW,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,aAAa,CAAC;CAC1D;AASD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,IAAI,CAA4B;IAMxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,yBAAyB,CAAK;gBAE1B,OAAO,EAAE,wBAAwB;IAevC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8EtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2E3B,SAAS,IAAI,OAAO;IAQd,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YA8CvB,oBAAoB;YAsDpB,eAAe;CAa9B;AAiBD,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,CAAC,IAAI,EAAE,kBAAkB,KAAK,aAAa,CAC5C,CAqCA"}
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManagedAnonClient = void 0;
4
+ exports.createDefaultAnonFactory = createDefaultAnonFactory;
5
+ const tslib_1 = require("tslib");
6
+ const fs_1 = require("fs");
7
+ const path_1 = tslib_1.__importDefault(require("path"));
8
+ const probe_tcp_port_1 = require("./probe-tcp-port");
9
+ const socks_url_1 = require("./socks-url");
10
+ const DEFAULT_STARTUP_TIMEOUT_MS = 60_000;
11
+ const DEFAULT_STOP_TIMEOUT_MS = 10_000;
12
+ class ManagedAnonClient {
13
+ _opts;
14
+ _logger;
15
+ _socksHost;
16
+ _socksPort;
17
+ _sdk;
18
+ _started = false;
19
+ _lastHealthyFlag = true;
20
+ _consecutiveProbeFailures = 0;
21
+ constructor(options) {
22
+ this._opts = options;
23
+ this._logger = options.logger.child({ component: 'managed-anon-client' });
24
+ const { host, port } = (0, socks_url_1.parseSocks5hUrl)(options.socksProxy);
25
+ this._socksHost = host;
26
+ this._socksPort = port;
27
+ }
28
+ async start() {
29
+ if (this._started && this._sdk) {
30
+ return;
31
+ }
32
+ const factoryOpts = await this._buildFactoryOptions();
33
+ let sdk;
34
+ try {
35
+ sdk = this._opts.anonFactory(factoryOpts);
36
+ }
37
+ catch (err) {
38
+ const cause = err;
39
+ if (cause?.code === 'MODULE_NOT_FOUND') {
40
+ throw new Error(`Managed ATOR transport requires the optional dependency ` +
41
+ `"@anyone-protocol/anyone-client" but it was not found. ` +
42
+ `Install it with: npm install @anyone-protocol/anyone-client`, { cause });
43
+ }
44
+ throw new Error(`Failed to construct @anyone-protocol/anyone-client SDK handle: ${cause?.message ?? String(err)}`, { cause });
45
+ }
46
+ try {
47
+ await sdk.start();
48
+ }
49
+ catch (err) {
50
+ const cause = err;
51
+ await this._bestEffortStop(sdk);
52
+ this._sdk = undefined;
53
+ this._started = false;
54
+ if (cause?.code === 'ENOENT' || /ENOENT/.test(cause?.message ?? '')) {
55
+ const hint = this._opts.binaryPath
56
+ ? ` at configured binaryPath="${this._opts.binaryPath}"`
57
+ : ' (the bundled binary shipped by @anyone-protocol/anyone-client could not be spawned)';
58
+ throw new Error(`anon binary not found${hint}. Install @anyone-protocol/anyone-client ` +
59
+ `and ensure a compatible binary is available for this platform ` +
60
+ `(npm install @anyone-protocol/anyone-client).`, { cause });
61
+ }
62
+ throw new Error(`Failed to start managed anon SDK: ${cause?.message ?? String(err)}`, {
63
+ cause,
64
+ });
65
+ }
66
+ const startupTimeoutMs = this._opts.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
67
+ const socksPort = sdk.getSOCKSPort?.() ?? this._socksPort;
68
+ try {
69
+ await (0, probe_tcp_port_1.waitForTcpPort)(this._socksHost, socksPort, startupTimeoutMs);
70
+ }
71
+ catch (err) {
72
+ const cause = err;
73
+ await this._bestEffortStop(sdk);
74
+ this._sdk = undefined;
75
+ this._started = false;
76
+ throw new Error(`Managed anon SOCKS port ${socksPort} did not bind within ${startupTimeoutMs}ms timeout ` +
77
+ `(awaiting TCP readiness on ${this._socksHost}:${socksPort})`, { cause });
78
+ }
79
+ this._sdk = sdk;
80
+ this._started = true;
81
+ this._lastHealthyFlag = true;
82
+ this._logger.info({ event: 'managed_anon_started', socksPort }, 'Managed anon client started');
83
+ }
84
+ async stop() {
85
+ const sdk = this._sdk;
86
+ if (!sdk || !this._started) {
87
+ this._sdk = undefined;
88
+ this._started = false;
89
+ return;
90
+ }
91
+ this._sdk = undefined;
92
+ this._started = false;
93
+ const stopTimeoutMs = this._opts.stopTimeoutMs ?? DEFAULT_STOP_TIMEOUT_MS;
94
+ let timer;
95
+ const timeoutPromise = new Promise((resolve) => {
96
+ timer = setTimeout(() => resolve('timeout'), stopTimeoutMs);
97
+ });
98
+ let raceSettled = false;
99
+ const sdkStopPromise = sdk.stop();
100
+ sdkStopPromise.catch((lateErr) => {
101
+ if (raceSettled) {
102
+ this._logger.warn({
103
+ event: 'managed_anon_stop_late_error',
104
+ errorMessage: lateErr?.message ?? String(lateErr),
105
+ }, 'Managed anon SDK stop() rejected after the stop race had already settled');
106
+ }
107
+ });
108
+ try {
109
+ const result = await Promise.race([sdkStopPromise.then(() => 'ok'), timeoutPromise]);
110
+ raceSettled = true;
111
+ if (result === 'timeout') {
112
+ const stillRunning = safeIsRunning(sdk);
113
+ this._logger.warn({
114
+ event: 'managed_anon_stop_timeout',
115
+ stopTimeoutMs,
116
+ sdkStillRunning: stillRunning,
117
+ }, 'Managed anon SDK stop() did not resolve within timeout; ' +
118
+ (stillRunning ? 'operator intervention may be required' : 'proceeding with shutdown'));
119
+ }
120
+ else {
121
+ this._logger.info({ event: 'managed_anon_stopped' }, 'Managed anon client stopped');
122
+ }
123
+ }
124
+ catch (err) {
125
+ raceSettled = true;
126
+ const cause = err;
127
+ this._logger.warn({
128
+ event: 'managed_anon_stop_error',
129
+ errorMessage: cause?.message ?? String(err),
130
+ }, 'Managed anon SDK stop() threw; continuing shutdown');
131
+ }
132
+ finally {
133
+ if (timer)
134
+ clearTimeout(timer);
135
+ }
136
+ }
137
+ isRunning() {
138
+ return this._started && safeIsRunning(this._sdk);
139
+ }
140
+ async healthCheck() {
141
+ if (!this._started || !this._sdk) {
142
+ return false;
143
+ }
144
+ const ok = safeIsRunning(this._sdk);
145
+ if (!ok && this._lastHealthyFlag) {
146
+ this._lastHealthyFlag = false;
147
+ this._logger.warn({ event: 'managed_anon_crash_detected' }, 'Managed anon SDK reports not running (binary may have crashed)');
148
+ }
149
+ else if (ok && !this._lastHealthyFlag) {
150
+ this._lastHealthyFlag = true;
151
+ }
152
+ if (ok) {
153
+ try {
154
+ await (0, probe_tcp_port_1.probeTcpPort)(this._socksHost, this._sdk.getSOCKSPort(), 250);
155
+ this._consecutiveProbeFailures = 0;
156
+ }
157
+ catch (err) {
158
+ this._consecutiveProbeFailures += 1;
159
+ if (this._consecutiveProbeFailures >= 2) {
160
+ this._logger.warn({
161
+ event: 'managed_anon_probe_failed',
162
+ consecutiveFailures: this._consecutiveProbeFailures,
163
+ errorMessage: err?.message ?? String(err),
164
+ }, 'Managed anon SOCKS port probe failed on 2+ consecutive health checks');
165
+ return false;
166
+ }
167
+ }
168
+ }
169
+ return ok;
170
+ }
171
+ async _buildFactoryOptions() {
172
+ const opts = {
173
+ displayLog: this._opts.logger.level === 'debug' || this._opts.logger.level === 'trace',
174
+ useExecFile: false,
175
+ socksPort: this._socksPort,
176
+ orPort: 0,
177
+ binaryPath: this._opts.binaryPath,
178
+ autoTermsAgreement: true,
179
+ };
180
+ if (this._opts.hiddenServiceDir) {
181
+ opts.hiddenServiceDir = this._opts.hiddenServiceDir;
182
+ if (this._opts.hiddenServicePort !== undefined) {
183
+ opts.hiddenServicePort = this._opts.hiddenServicePort;
184
+ }
185
+ try {
186
+ await fs_1.promises.mkdir(this._opts.hiddenServiceDir, { recursive: true });
187
+ const anonrcPath = path_1.default.join(this._opts.hiddenServiceDir, 'anonrc');
188
+ let anonrcExists = false;
189
+ try {
190
+ await fs_1.promises.access(anonrcPath);
191
+ anonrcExists = true;
192
+ }
193
+ catch {
194
+ anonrcExists = false;
195
+ }
196
+ if (!anonrcExists) {
197
+ const anonrc = `# Written by ManagedAnonClient (Epic 35 / Story 35.5) on first boot.\n` +
198
+ `# Edit freely — ManagedAnonClient will NOT overwrite this file on subsequent starts.\n` +
199
+ `AgreeToTerms 1\n` +
200
+ `SocksPort ${this._socksPort}\n` +
201
+ `HiddenServiceDir ${this._opts.hiddenServiceDir}\n` +
202
+ (this._opts.hiddenServicePort !== undefined
203
+ ? `HiddenServicePort ${this._opts.hiddenServicePort} 127.0.0.1:${this._opts.hiddenServicePort}\n`
204
+ : '');
205
+ await fs_1.promises.writeFile(anonrcPath, anonrc, { encoding: 'utf8', flag: 'wx' });
206
+ }
207
+ opts.configFilePath = anonrcPath;
208
+ }
209
+ catch (err) {
210
+ this._logger.debug({ event: 'managed_anon_anonrc_write_failed', error: err.message }, 'Could not write anonrc; continuing with native options only');
211
+ }
212
+ }
213
+ return opts;
214
+ }
215
+ async _bestEffortStop(sdk) {
216
+ try {
217
+ await sdk.stop();
218
+ }
219
+ catch (err) {
220
+ this._logger.warn({
221
+ event: 'managed_anon_cleanup_stop_failed',
222
+ errorMessage: err.message,
223
+ }, 'Best-effort SDK stop() during failure cleanup threw; ignoring');
224
+ }
225
+ }
226
+ }
227
+ exports.ManagedAnonClient = ManagedAnonClient;
228
+ function safeIsRunning(sdk) {
229
+ if (!sdk)
230
+ return false;
231
+ try {
232
+ return sdk.isRunning() === true;
233
+ }
234
+ catch {
235
+ return false;
236
+ }
237
+ }
238
+ async function createDefaultAnonFactory() {
239
+ let mod;
240
+ const pkg = '@anyone-protocol/anyone-client';
241
+ try {
242
+ mod = require(pkg);
243
+ }
244
+ catch {
245
+ try {
246
+ mod = await new Function('p', 'return import(p)')(pkg);
247
+ }
248
+ catch (err) {
249
+ const cause = err;
250
+ const wrapped = new Error(`Managed ATOR transport requires the optional dependency ` +
251
+ `"@anyone-protocol/anyone-client" but it was not found. ` +
252
+ `Install it with: npm install @anyone-protocol/anyone-client`, { cause });
253
+ wrapped.code = 'MODULE_NOT_FOUND';
254
+ throw wrapped;
255
+ }
256
+ }
257
+ const AnonCtor = mod?.Anon ?? mod?.default?.Anon ?? mod?.default;
258
+ if (typeof AnonCtor !== 'function') {
259
+ throw new Error('@anyone-protocol/anyone-client did not export an `Anon` constructor; ' +
260
+ 'SDK surface may have changed.');
261
+ }
262
+ return (opts) => new AnonCtor(opts);
263
+ }
264
+ //# sourceMappingURL=managed-anon-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-anon-client.js","sourceRoot":"","sources":["../../src/transport/managed-anon-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function probeTcpPort(host: string, port: number, timeoutMs: number): Promise<void>;
2
+ export declare function waitForTcpPort(host: string, port: number, overallTimeoutMs: number, perProbeTimeoutMs?: number, pollIntervalMs?: number): Promise<void>;
3
+ //# sourceMappingURL=probe-tcp-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-tcp-port.d.ts","sourceRoot":"","sources":["../../src/transport/probe-tcp-port.ts"],"names":[],"mappings":"AAyBA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCzF;AAeD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,SAAM,EACvB,cAAc,SAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.probeTcpPort = probeTcpPort;
4
+ exports.waitForTcpPort = waitForTcpPort;
5
+ const tslib_1 = require("tslib");
6
+ const net_1 = tslib_1.__importDefault(require("net"));
7
+ function probeTcpPort(host, port, timeoutMs) {
8
+ return new Promise((resolve, reject) => {
9
+ const socket = net_1.default.createConnection({ host, port });
10
+ let settled = false;
11
+ const cleanup = () => {
12
+ socket.removeAllListeners();
13
+ socket.destroy();
14
+ };
15
+ socket.setTimeout(timeoutMs);
16
+ socket.once('connect', () => {
17
+ if (settled)
18
+ return;
19
+ settled = true;
20
+ cleanup();
21
+ resolve();
22
+ });
23
+ socket.once('timeout', () => {
24
+ if (settled)
25
+ return;
26
+ settled = true;
27
+ cleanup();
28
+ reject(new Error(`probe timed out after ${timeoutMs}ms`));
29
+ });
30
+ socket.once('error', (err) => {
31
+ if (settled)
32
+ return;
33
+ settled = true;
34
+ cleanup();
35
+ reject(err);
36
+ });
37
+ });
38
+ }
39
+ async function waitForTcpPort(host, port, overallTimeoutMs, perProbeTimeoutMs = 250, pollIntervalMs = 100) {
40
+ const deadline = Date.now() + overallTimeoutMs;
41
+ let lastErr;
42
+ while (Date.now() < deadline) {
43
+ const remaining = deadline - Date.now();
44
+ const probeTimeout = Math.min(perProbeTimeoutMs, Math.max(1, remaining));
45
+ try {
46
+ await probeTcpPort(host, port, probeTimeout);
47
+ return;
48
+ }
49
+ catch (err) {
50
+ lastErr = err;
51
+ }
52
+ if (Date.now() + pollIntervalMs >= deadline)
53
+ break;
54
+ await new Promise((r) => setTimeout(r, pollIntervalMs));
55
+ }
56
+ throw new Error(`TCP port ${host}:${port} did not become ready within ${overallTimeoutMs}ms timeout` +
57
+ (lastErr ? ` (last error: ${lastErr.message})` : ''));
58
+ }
59
+ //# sourceMappingURL=probe-tcp-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-tcp-port.js","sourceRoot":"","sources":["../../src/transport/probe-tcp-port.ts"],"names":[],"mappings":";;AAyBA,oCAiCC;AAeD,wCA4BC;;AAtFD,sDAAsB;AAUtB,SAAgB,YAAY,CAAC,IAAY,EAAE,IAAY,EAAE,SAAiB;IACxE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,aAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE7B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YAC1B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YAC1B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,SAAS,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAClC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAeM,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,IAAY,EACZ,gBAAwB,EACxB,iBAAiB,GAAG,GAAG,EACvB,cAAc,GAAG,GAAG;IAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,IAAI,OAA0B,CAAC;IAE/B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAY,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,IAAI,QAAQ;YAAE,MAAM;QACnD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,IAAI,IAAI,gCAAgC,gBAAgB,YAAY;QAClF,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACvD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type http from 'http';
2
+ import type pino from 'pino';
3
+ import type { ManagedAnonClient } from './managed-anon-client';
4
+ import type { TransportProvider } from './transport-provider';
5
+ export interface SocksTransportProviderOptions {
6
+ socksProxy: string;
7
+ externalUrl: string;
8
+ logger: pino.Logger;
9
+ managedClient?: ManagedAnonClient;
10
+ resolveExternalUrlOnStart?: () => Promise<string>;
11
+ }
12
+ export declare class SocksTransportProvider implements TransportProvider {
13
+ private readonly _socksProxy;
14
+ private _externalUrl;
15
+ private readonly _logger;
16
+ private readonly _proxyHost;
17
+ private readonly _proxyPort;
18
+ private readonly _managedClient;
19
+ private readonly _resolveExternalUrlOnStart;
20
+ private _managedHealthy;
21
+ constructor(options: SocksTransportProviderOptions);
22
+ createAgent(peerUrl: string): http.Agent;
23
+ getExternalUrl(): string;
24
+ start(): Promise<void>;
25
+ stop(): Promise<void>;
26
+ healthCheck(): Promise<boolean>;
27
+ private _probeProxy;
28
+ }
29
+ //# sourceMappingURL=socks-transport-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socks-transport-provider.d.ts","sourceRoot":"","sources":["../../src/transport/socks-transport-provider.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAK9D,MAAM,WAAW,6BAA6B;IAE5C,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IAOpB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAQlC,yBAAyB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAcD,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAsC;IACjF,OAAO,CAAC,eAAe,CAAQ;gBAOnB,OAAO,EAAE,6BAA6B;IA+ClD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK;IAOxC,cAAc,IAAI,MAAM;IAalB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA+DrC,OAAO,CAAC,WAAW;CAGpB"}