@toon-protocol/connector 3.20.1 → 3.29.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 (181) hide show
  1. package/README.md +6 -6
  2. package/dist/auth/rfc9421/content-digest.d.ts +16 -0
  3. package/dist/auth/rfc9421/content-digest.d.ts.map +1 -0
  4. package/dist/auth/rfc9421/content-digest.js +35 -0
  5. package/dist/auth/rfc9421/content-digest.js.map +1 -0
  6. package/dist/auth/rfc9421/index.d.ts +9 -0
  7. package/dist/auth/rfc9421/index.d.ts.map +1 -0
  8. package/dist/auth/rfc9421/index.js +24 -0
  9. package/dist/auth/rfc9421/index.js.map +1 -0
  10. package/dist/auth/rfc9421/sign.d.ts +20 -0
  11. package/dist/auth/rfc9421/sign.d.ts.map +1 -0
  12. package/dist/auth/rfc9421/sign.js +43 -0
  13. package/dist/auth/rfc9421/sign.js.map +1 -0
  14. package/dist/auth/rfc9421/signature-base.d.ts +21 -0
  15. package/dist/auth/rfc9421/signature-base.d.ts.map +1 -0
  16. package/dist/auth/rfc9421/signature-base.js +57 -0
  17. package/dist/auth/rfc9421/signature-base.js.map +1 -0
  18. package/dist/auth/rfc9421/verify.d.ts +19 -0
  19. package/dist/auth/rfc9421/verify.d.ts.map +1 -0
  20. package/dist/auth/rfc9421/verify.js +215 -0
  21. package/dist/auth/rfc9421/verify.js.map +1 -0
  22. package/dist/btp/btp-client-manager.d.ts +1 -1
  23. package/dist/btp/btp-client-manager.d.ts.map +1 -1
  24. package/dist/btp/btp-client.d.ts +2 -2
  25. package/dist/btp/btp-client.d.ts.map +1 -1
  26. package/dist/btp/btp-client.js.map +1 -1
  27. package/dist/cli/admin-client-factory.d.ts +10 -0
  28. package/dist/cli/admin-client-factory.d.ts.map +1 -0
  29. package/dist/cli/admin-client-factory.js +33 -0
  30. package/dist/cli/admin-client-factory.js.map +1 -0
  31. package/dist/cli/commands/app.d.ts +6 -0
  32. package/dist/cli/commands/app.d.ts.map +1 -0
  33. package/dist/cli/commands/app.js +132 -0
  34. package/dist/cli/commands/app.js.map +1 -0
  35. package/dist/cli/commands/route.d.ts +3 -0
  36. package/dist/cli/commands/route.d.ts.map +1 -0
  37. package/dist/cli/commands/route.js +63 -0
  38. package/dist/cli/commands/route.js.map +1 -0
  39. package/dist/cli/commands/up.d.ts +3 -0
  40. package/dist/cli/commands/up.d.ts.map +1 -0
  41. package/dist/cli/commands/up.js +27 -0
  42. package/dist/cli/commands/up.js.map +1 -0
  43. package/dist/cli/index.js +32 -16
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/client/connector-admin-client.d.ts +17 -12
  46. package/dist/client/connector-admin-client.d.ts.map +1 -1
  47. package/dist/client/connector-admin-client.js.map +1 -1
  48. package/dist/config/config-loader.d.ts +0 -3
  49. package/dist/config/config-loader.d.ts.map +1 -1
  50. package/dist/config/config-loader.js +41 -161
  51. package/dist/config/config-loader.js.map +1 -1
  52. package/dist/config/environment-validator.js +6 -6
  53. package/dist/config/environment-validator.js.map +1 -1
  54. package/dist/config/types.d.ts +49 -17
  55. package/dist/config/types.d.ts.map +1 -1
  56. package/dist/config/types.js +93 -1
  57. package/dist/config/types.js.map +1 -1
  58. package/dist/core/connector-node.d.ts +13 -1
  59. package/dist/core/connector-node.d.ts.map +1 -1
  60. package/dist/core/connector-node.js +279 -171
  61. package/dist/core/connector-node.js.map +1 -1
  62. package/dist/core/handlers/http-proxy-handler.d.ts +47 -0
  63. package/dist/core/handlers/http-proxy-handler.d.ts.map +1 -0
  64. package/dist/core/handlers/http-proxy-handler.js +223 -0
  65. package/dist/core/handlers/http-proxy-handler.js.map +1 -0
  66. package/dist/core/local-delivery-client.d.ts +1 -0
  67. package/dist/core/local-delivery-client.d.ts.map +1 -1
  68. package/dist/core/local-delivery-client.js +25 -9
  69. package/dist/core/local-delivery-client.js.map +1 -1
  70. package/dist/core/packet-handler.d.ts +10 -0
  71. package/dist/core/packet-handler.d.ts.map +1 -1
  72. package/dist/core/packet-handler.js +121 -8
  73. package/dist/core/packet-handler.js.map +1 -1
  74. package/dist/core/payment-handler.d.ts +2 -1
  75. package/dist/core/payment-handler.d.ts.map +1 -1
  76. package/dist/core/payment-handler.js +24 -0
  77. package/dist/core/payment-handler.js.map +1 -1
  78. package/dist/core/registry-db-schema.d.ts +2 -1
  79. package/dist/core/registry-db-schema.d.ts.map +1 -1
  80. package/dist/core/registry-db-schema.js +9 -0
  81. package/dist/core/registry-db-schema.js.map +1 -1
  82. package/dist/core/registry-store.d.ts +1 -0
  83. package/dist/core/registry-store.d.ts.map +1 -1
  84. package/dist/core/registry-store.js +6 -4
  85. package/dist/core/registry-store.js.map +1 -1
  86. package/dist/core/route-upstream-registry.d.ts +17 -0
  87. package/dist/core/route-upstream-registry.d.ts.map +1 -0
  88. package/dist/core/route-upstream-registry.js +51 -0
  89. package/dist/core/route-upstream-registry.js.map +1 -0
  90. package/dist/discovery/ilp-peer-info-event.d.ts +22 -0
  91. package/dist/discovery/ilp-peer-info-event.d.ts.map +1 -0
  92. package/dist/discovery/ilp-peer-info-event.js +21 -0
  93. package/dist/discovery/ilp-peer-info-event.js.map +1 -0
  94. package/dist/discovery/index.d.ts +8 -0
  95. package/dist/discovery/index.d.ts.map +1 -1
  96. package/dist/discovery/index.js +16 -1
  97. package/dist/discovery/index.js.map +1 -1
  98. package/dist/discovery/self-announce-builder.d.ts +14 -0
  99. package/dist/discovery/self-announce-builder.d.ts.map +1 -0
  100. package/dist/discovery/self-announce-builder.js +88 -0
  101. package/dist/discovery/self-announce-builder.js.map +1 -0
  102. package/dist/discovery/self-announce-publish.d.ts +17 -0
  103. package/dist/discovery/self-announce-publish.d.ts.map +1 -0
  104. package/dist/discovery/self-announce-publish.js +35 -0
  105. package/dist/discovery/self-announce-publish.js.map +1 -0
  106. package/dist/discovery/self-announce-service.d.ts +36 -0
  107. package/dist/discovery/self-announce-service.d.ts.map +1 -0
  108. package/dist/discovery/self-announce-service.js +118 -0
  109. package/dist/discovery/self-announce-service.js.map +1 -0
  110. package/dist/http/admin-api-inventory.d.ts.map +1 -1
  111. package/dist/http/admin-api-inventory.js +0 -42
  112. package/dist/http/admin-api-inventory.js.map +1 -1
  113. package/dist/http/admin-api.d.ts +29 -13
  114. package/dist/http/admin-api.d.ts.map +1 -1
  115. package/dist/http/admin-api.js +141 -76
  116. package/dist/http/admin-api.js.map +1 -1
  117. package/dist/http/admin-server.d.ts +3 -4
  118. package/dist/http/admin-server.d.ts.map +1 -1
  119. package/dist/http/admin-server.js +4 -6
  120. package/dist/http/admin-server.js.map +1 -1
  121. package/dist/http/ilp-http-adapter.d.ts +10 -0
  122. package/dist/http/ilp-http-adapter.d.ts.map +1 -1
  123. package/dist/http/ilp-http-adapter.js +118 -0
  124. package/dist/http/ilp-http-adapter.js.map +1 -1
  125. package/dist/http/types.d.ts +1 -1
  126. package/dist/http/types.d.ts.map +1 -1
  127. package/dist/http/x402-greeting.d.ts +46 -0
  128. package/dist/http/x402-greeting.d.ts.map +1 -0
  129. package/dist/http/x402-greeting.js +77 -0
  130. package/dist/http/x402-greeting.js.map +1 -0
  131. package/dist/lib.d.ts +15 -4
  132. package/dist/lib.d.ts.map +1 -1
  133. package/dist/lib.js +42 -1
  134. package/dist/lib.js.map +1 -1
  135. package/dist/main.d.ts +3 -1
  136. package/dist/main.d.ts.map +1 -1
  137. package/dist/main.js +3 -1
  138. package/dist/main.js.map +1 -1
  139. package/dist/settlement/channel-manager.d.ts.map +1 -1
  140. package/dist/settlement/channel-manager.js +1 -1
  141. package/dist/settlement/channel-manager.js.map +1 -1
  142. package/dist/settlement/provider/solana-payment-channel-provider.d.ts.map +1 -1
  143. package/dist/settlement/provider/solana-payment-channel-provider.js +1 -1
  144. package/dist/settlement/provider/solana-payment-channel-provider.js.map +1 -1
  145. package/dist/settlement/solana-payment-channel-sdk.d.ts +1 -1
  146. package/dist/settlement/solana-payment-channel-sdk.d.ts.map +1 -1
  147. package/dist/settlement/solana-payment-channel-sdk.js +2 -2
  148. package/dist/settlement/solana-payment-channel-sdk.js.map +1 -1
  149. package/dist/transport/http-peer-transport.d.ts +46 -0
  150. package/dist/transport/http-peer-transport.d.ts.map +1 -0
  151. package/dist/transport/http-peer-transport.js +185 -0
  152. package/dist/transport/http-peer-transport.js.map +1 -0
  153. package/dist/transport/index.d.ts +0 -3
  154. package/dist/transport/index.d.ts.map +1 -1
  155. package/dist/transport/index.js +1 -8
  156. package/dist/transport/index.js.map +1 -1
  157. package/dist/wallet/mnemonic-keys.d.ts +15 -0
  158. package/dist/wallet/mnemonic-keys.d.ts.map +1 -0
  159. package/dist/wallet/mnemonic-keys.js +150 -0
  160. package/dist/wallet/mnemonic-keys.js.map +1 -0
  161. package/package.json +11 -8
  162. package/dist/transport/hs-desc-monitor.d.ts +0 -12
  163. package/dist/transport/hs-desc-monitor.d.ts.map +0 -1
  164. package/dist/transport/hs-desc-monitor.js +0 -105
  165. package/dist/transport/hs-desc-monitor.js.map +0 -1
  166. package/dist/transport/managed-anon-client.d.ts +0 -93
  167. package/dist/transport/managed-anon-client.d.ts.map +0 -1
  168. package/dist/transport/managed-anon-client.js +0 -522
  169. package/dist/transport/managed-anon-client.js.map +0 -1
  170. package/dist/transport/socks-transport-provider.d.ts +0 -29
  171. package/dist/transport/socks-transport-provider.d.ts.map +0 -1
  172. package/dist/transport/socks-transport-provider.js +0 -136
  173. package/dist/transport/socks-transport-provider.js.map +0 -1
  174. package/dist/transport/socks-url.d.ts +0 -6
  175. package/dist/transport/socks-url.d.ts.map +0 -1
  176. package/dist/transport/socks-url.js +0 -29
  177. package/dist/transport/socks-url.js.map +0 -1
  178. package/dist/transport/socks5-connect.d.ts +0 -12
  179. package/dist/transport/socks5-connect.d.ts.map +0 -1
  180. package/dist/transport/socks5-connect.js +0 -89
  181. package/dist/transport/socks5-connect.js.map +0 -1
@@ -1,93 +0,0 @@
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
- getControlPort?(): number;
8
- }
9
- export interface AnonFactoryOptions {
10
- displayLog: boolean;
11
- useExecFile: boolean;
12
- socksPort: number;
13
- orPort: 0;
14
- binaryPath?: string;
15
- configFilePath?: string;
16
- hiddenServiceDir?: string;
17
- hiddenServicePort?: number;
18
- controlPort?: number;
19
- autoTermsAgreement?: boolean;
20
- }
21
- export interface ManagedAnonClientOptions {
22
- socksProxy: string;
23
- hiddenServiceDir?: string;
24
- hiddenServicePort?: number;
25
- controlPort?: number;
26
- binaryPath?: string;
27
- startupTimeoutMs?: number;
28
- stopTimeoutMs?: number;
29
- logger: pino.Logger;
30
- anonFactory: (opts: AnonFactoryOptions) => AnonSdkHandle;
31
- verifyReachability?: boolean;
32
- selfDial?: (opts: {
33
- socksHost: string;
34
- socksPort: number;
35
- destHost: string;
36
- destPort: number;
37
- timeoutMs: number;
38
- }) => Promise<void>;
39
- waitForHsDescUpload?: (opts: {
40
- controlHost: string;
41
- controlPort: number;
42
- address: string;
43
- timeoutMs: number;
44
- signal?: AbortSignal;
45
- }) => Promise<void>;
46
- }
47
- export interface HostnameSnapshot {
48
- hostname: string | null;
49
- publishedAt: string | null;
50
- }
51
- export declare class ManagedAnonClient {
52
- private readonly _opts;
53
- private readonly _logger;
54
- private readonly _socksHost;
55
- private readonly _socksPort;
56
- private readonly _controlPortNum;
57
- private _sdk;
58
- private _started;
59
- private _lastHealthyFlag;
60
- private _consecutiveProbeFailures;
61
- private _hostname;
62
- private _publishedAt;
63
- private _verifyInFlight;
64
- private _hsDescMonitorStarted;
65
- private _hsDescUploaded;
66
- private _hsDescUnavailable;
67
- private _hsDescAbort;
68
- private _hostnameWatcher;
69
- private _hostnamePollTimer;
70
- private _hostnamePollDeadlineMs;
71
- private _hostnameWatchStopped;
72
- constructor(options: ManagedAnonClientOptions);
73
- start(): Promise<void>;
74
- stop(): Promise<void>;
75
- isRunning(): boolean;
76
- healthCheck(): Promise<boolean>;
77
- isHiddenServiceConfigured(): boolean;
78
- getHostnameSnapshot(): HostnameSnapshot;
79
- private _startHostnameWatch;
80
- private _scheduleHostnamePoll;
81
- private _tryReadHostname;
82
- private _markPublished;
83
- private _verifyReachable;
84
- private _controlPort;
85
- private _ensureHsDescMonitor;
86
- private _selfDialReachable;
87
- private _cleanupHostnameWatch;
88
- private _buildFactoryOptions;
89
- private _ensureControlPortInAnonrc;
90
- private _bestEffortStop;
91
- }
92
- export declare function createDefaultAnonFactory(): Promise<(opts: AnonFactoryOptions) => AnonSdkHandle>;
93
- //# sourceMappingURL=managed-anon-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-anon-client.d.ts","sourceRoot":"","sources":["../../src/transport/managed-anon-client.ts"],"names":[],"mappings":"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"}
@@ -1,522 +0,0 @@
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 socks5_connect_1 = require("./socks5-connect");
11
- const hs_desc_monitor_1 = require("./hs-desc-monitor");
12
- const DEFAULT_STARTUP_TIMEOUT_MS = 60_000;
13
- const DEFAULT_STOP_TIMEOUT_MS = 10_000;
14
- const HOSTNAME_POLL_INTERVAL_MS = 2_000;
15
- const HOSTNAME_POLL_MAX_DURATION_MS = 5 * 60 * 1_000;
16
- const SELF_DIAL_TIMEOUT_MS = 10_000;
17
- class ManagedAnonClient {
18
- _opts;
19
- _logger;
20
- _socksHost;
21
- _socksPort;
22
- _controlPortNum;
23
- _sdk;
24
- _started = false;
25
- _lastHealthyFlag = true;
26
- _consecutiveProbeFailures = 0;
27
- _hostname = null;
28
- _publishedAt = null;
29
- _verifyInFlight = false;
30
- _hsDescMonitorStarted = false;
31
- _hsDescUploaded = false;
32
- _hsDescUnavailable = false;
33
- _hsDescAbort;
34
- _hostnameWatcher;
35
- _hostnamePollTimer;
36
- _hostnamePollDeadlineMs = 0;
37
- _hostnameWatchStopped = false;
38
- constructor(options) {
39
- this._opts = options;
40
- this._logger = options.logger.child({ component: 'managed-anon-client' });
41
- const { host, port } = (0, socks_url_1.parseSocks5hUrl)(options.socksProxy);
42
- this._socksHost = host;
43
- this._socksPort = port;
44
- this._controlPortNum = options.controlPort ?? this._socksPort + 1;
45
- }
46
- async start() {
47
- if (this._started && this._sdk) {
48
- return;
49
- }
50
- const factoryOpts = await this._buildFactoryOptions();
51
- let sdk;
52
- try {
53
- sdk = this._opts.anonFactory(factoryOpts);
54
- }
55
- catch (err) {
56
- const cause = err;
57
- if (cause?.code === 'MODULE_NOT_FOUND') {
58
- throw new Error(`Managed ATOR transport requires the optional dependency ` +
59
- `"@anyone-protocol/anyone-client" but it was not found. ` +
60
- `Install it with: npm install @anyone-protocol/anyone-client`, { cause });
61
- }
62
- throw new Error(`Failed to construct @anyone-protocol/anyone-client SDK handle: ${cause?.message ?? String(err)}`, { cause });
63
- }
64
- try {
65
- await sdk.start();
66
- }
67
- catch (err) {
68
- const cause = err;
69
- await this._bestEffortStop(sdk);
70
- this._sdk = undefined;
71
- this._started = false;
72
- if (cause?.code === 'ENOENT' || /ENOENT/.test(cause?.message ?? '')) {
73
- const hint = this._opts.binaryPath
74
- ? ` at configured binaryPath="${this._opts.binaryPath}"`
75
- : ' (the bundled binary shipped by @anyone-protocol/anyone-client could not be spawned)';
76
- throw new Error(`anon binary not found${hint}. Install @anyone-protocol/anyone-client ` +
77
- `and ensure a compatible binary is available for this platform ` +
78
- `(npm install @anyone-protocol/anyone-client).`, { cause });
79
- }
80
- throw new Error(`Failed to start managed anon SDK: ${cause?.message ?? String(err)}`, {
81
- cause,
82
- });
83
- }
84
- const startupTimeoutMs = this._opts.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
85
- const socksPort = sdk.getSOCKSPort?.() ?? this._socksPort;
86
- try {
87
- await (0, probe_tcp_port_1.waitForTcpPort)(this._socksHost, socksPort, startupTimeoutMs);
88
- }
89
- catch (err) {
90
- const cause = err;
91
- await this._bestEffortStop(sdk);
92
- this._sdk = undefined;
93
- this._started = false;
94
- throw new Error(`Managed anon SOCKS port ${socksPort} did not bind within ${startupTimeoutMs}ms timeout ` +
95
- `(awaiting TCP readiness on ${this._socksHost}:${socksPort})`, { cause });
96
- }
97
- this._sdk = sdk;
98
- this._started = true;
99
- this._lastHealthyFlag = true;
100
- this._logger.info({ event: 'managed_anon_started', socksPort }, 'Managed anon client started');
101
- if (this._opts.hiddenServiceDir) {
102
- this._startHostnameWatch().catch((err) => {
103
- this._logger.warn({
104
- event: 'managed_anon_hostname_watch_setup_failed',
105
- errorMessage: err?.message ?? String(err),
106
- }, 'Hostname watch setup failed; admin /hs-hostname will report null');
107
- });
108
- }
109
- }
110
- async stop() {
111
- this._cleanupHostnameWatch();
112
- const sdk = this._sdk;
113
- if (!sdk || !this._started) {
114
- this._sdk = undefined;
115
- this._started = false;
116
- return;
117
- }
118
- this._sdk = undefined;
119
- this._started = false;
120
- const stopTimeoutMs = this._opts.stopTimeoutMs ?? DEFAULT_STOP_TIMEOUT_MS;
121
- let timer;
122
- const timeoutPromise = new Promise((resolve) => {
123
- timer = setTimeout(() => resolve('timeout'), stopTimeoutMs);
124
- });
125
- let raceSettled = false;
126
- const sdkStopPromise = sdk.stop();
127
- sdkStopPromise.catch((lateErr) => {
128
- if (raceSettled) {
129
- this._logger.warn({
130
- event: 'managed_anon_stop_late_error',
131
- errorMessage: lateErr?.message ?? String(lateErr),
132
- }, 'Managed anon SDK stop() rejected after the stop race had already settled');
133
- }
134
- });
135
- try {
136
- const result = await Promise.race([sdkStopPromise.then(() => 'ok'), timeoutPromise]);
137
- raceSettled = true;
138
- if (result === 'timeout') {
139
- const stillRunning = safeIsRunning(sdk);
140
- this._logger.warn({
141
- event: 'managed_anon_stop_timeout',
142
- stopTimeoutMs,
143
- sdkStillRunning: stillRunning,
144
- }, 'Managed anon SDK stop() did not resolve within timeout; ' +
145
- (stillRunning ? 'operator intervention may be required' : 'proceeding with shutdown'));
146
- }
147
- else {
148
- this._logger.info({ event: 'managed_anon_stopped' }, 'Managed anon client stopped');
149
- }
150
- }
151
- catch (err) {
152
- raceSettled = true;
153
- const cause = err;
154
- this._logger.warn({
155
- event: 'managed_anon_stop_error',
156
- errorMessage: cause?.message ?? String(err),
157
- }, 'Managed anon SDK stop() threw; continuing shutdown');
158
- }
159
- finally {
160
- if (timer)
161
- clearTimeout(timer);
162
- }
163
- }
164
- isRunning() {
165
- return this._started && safeIsRunning(this._sdk);
166
- }
167
- async healthCheck() {
168
- if (!this._started || !this._sdk) {
169
- return false;
170
- }
171
- const ok = safeIsRunning(this._sdk);
172
- if (!ok && this._lastHealthyFlag) {
173
- this._lastHealthyFlag = false;
174
- this._logger.warn({ event: 'managed_anon_crash_detected' }, 'Managed anon SDK reports not running (binary may have crashed)');
175
- }
176
- else if (ok && !this._lastHealthyFlag) {
177
- this._lastHealthyFlag = true;
178
- }
179
- if (ok) {
180
- try {
181
- await (0, probe_tcp_port_1.probeTcpPort)(this._socksHost, this._sdk.getSOCKSPort(), 250);
182
- this._consecutiveProbeFailures = 0;
183
- }
184
- catch (err) {
185
- this._consecutiveProbeFailures += 1;
186
- if (this._consecutiveProbeFailures >= 2) {
187
- this._logger.warn({
188
- event: 'managed_anon_probe_failed',
189
- consecutiveFailures: this._consecutiveProbeFailures,
190
- errorMessage: err?.message ?? String(err),
191
- }, 'Managed anon SOCKS port probe failed on 2+ consecutive health checks');
192
- return false;
193
- }
194
- }
195
- }
196
- return ok;
197
- }
198
- isHiddenServiceConfigured() {
199
- return this._opts.hiddenServiceDir !== undefined && this._opts.hiddenServiceDir.length > 0;
200
- }
201
- getHostnameSnapshot() {
202
- return { hostname: this._hostname, publishedAt: this._publishedAt };
203
- }
204
- async _startHostnameWatch() {
205
- const dir = this._opts.hiddenServiceDir;
206
- if (!dir)
207
- return;
208
- this._hostnameWatchStopped = false;
209
- if (await this._tryReadHostname())
210
- return;
211
- try {
212
- this._hostnameWatcher = (0, fs_1.watch)(dir, { persistent: false });
213
- this._hostnameWatcher.on('change', (_event, filename) => {
214
- if (filename && filename.toString() !== 'hostname')
215
- return;
216
- void this._tryReadHostname();
217
- });
218
- this._hostnameWatcher.on('error', (err) => {
219
- this._logger.debug({ event: 'managed_anon_hostname_watch_error', errorMessage: err.message }, 'fs.watch on hidden-service dir errored; relying on fallback poll');
220
- });
221
- }
222
- catch (err) {
223
- this._logger.debug({
224
- event: 'managed_anon_hostname_watch_unavailable',
225
- errorMessage: err.message,
226
- }, 'fs.watch unavailable; using bounded fallback poll for hostname detection');
227
- }
228
- this._hostnamePollDeadlineMs = Date.now() + HOSTNAME_POLL_MAX_DURATION_MS;
229
- this._scheduleHostnamePoll();
230
- }
231
- _scheduleHostnamePoll() {
232
- if (this._hostnameWatchStopped)
233
- return;
234
- if (this._publishedAt !== null)
235
- return;
236
- if (Date.now() >= this._hostnamePollDeadlineMs) {
237
- this._logger.warn({
238
- event: 'managed_anon_hostname_poll_giveup',
239
- maxDurationMs: HOSTNAME_POLL_MAX_DURATION_MS,
240
- }, 'Gave up waiting for hidden-service hostname publish; admin /hs-hostname will continue to report null until restart');
241
- this._cleanupHostnameWatch();
242
- return;
243
- }
244
- this._hostnamePollTimer = setTimeout(() => {
245
- void this._tryReadHostname().then((found) => {
246
- if (!found)
247
- this._scheduleHostnamePoll();
248
- });
249
- }, HOSTNAME_POLL_INTERVAL_MS);
250
- if (typeof this._hostnamePollTimer.unref === 'function') {
251
- this._hostnamePollTimer.unref();
252
- }
253
- }
254
- async _tryReadHostname() {
255
- if (this._hostnameWatchStopped)
256
- return false;
257
- if (this._publishedAt !== null)
258
- return true;
259
- if (this._hostname === null) {
260
- const dir = this._opts.hiddenServiceDir;
261
- if (!dir)
262
- return false;
263
- const hostnameFile = path_1.default.join(dir, 'hostname');
264
- try {
265
- const raw = await fs_1.promises.readFile(hostnameFile, 'utf8');
266
- if (this._hostnameWatchStopped)
267
- return false;
268
- const trimmed = raw.trim();
269
- if (trimmed.length === 0)
270
- return false;
271
- this._hostname = trimmed;
272
- this._logger.info({ event: 'managed_anon_hostname_detected' }, 'Hidden-service hostname file detected; verifying overlay reachability');
273
- }
274
- catch (err) {
275
- const code = err.code;
276
- if (code !== 'ENOENT' && code !== 'EISDIR') {
277
- this._logger.debug({
278
- event: 'managed_anon_hostname_read_error',
279
- code,
280
- errorMessage: err.message,
281
- }, 'Hostname file read failed (treating as not-yet-published)');
282
- }
283
- return false;
284
- }
285
- }
286
- const verify = this._opts.verifyReachability ?? true;
287
- const port = this._opts.hiddenServicePort;
288
- if (verify && port !== undefined) {
289
- const reachable = await this._verifyReachable(this._hostname, port);
290
- if (this._hostnameWatchStopped)
291
- return false;
292
- if (!reachable)
293
- return false;
294
- }
295
- this._markPublished();
296
- return true;
297
- }
298
- _markPublished() {
299
- if (this._publishedAt !== null)
300
- return;
301
- this._publishedAt = new Date().toISOString();
302
- this._logger.info({ event: 'managed_anon_hostname_published', publishedAt: this._publishedAt }, 'Hidden-service hostname published');
303
- this._cleanupHostnameWatch();
304
- }
305
- async _verifyReachable(hostname, port) {
306
- if (this._hsDescUploaded)
307
- return true;
308
- const controlPort = this._controlPort();
309
- if (controlPort !== undefined && !this._hsDescUnavailable) {
310
- this._ensureHsDescMonitor(hostname, controlPort);
311
- return false;
312
- }
313
- return this._selfDialReachable(hostname, port);
314
- }
315
- _controlPort() {
316
- const p = this._sdk?.getControlPort?.();
317
- if (typeof p === 'number' && p > 0)
318
- return p;
319
- return this._opts.hiddenServiceDir ? this._controlPortNum : undefined;
320
- }
321
- _ensureHsDescMonitor(hostname, controlPort) {
322
- if (this._hsDescMonitorStarted)
323
- return;
324
- this._hsDescMonitorStarted = true;
325
- const wait = this._opts.waitForHsDescUpload ?? hs_desc_monitor_1.waitForHsDescUpload;
326
- this._hsDescAbort = new AbortController();
327
- const timeoutMs = Math.max(1_000, this._hostnamePollDeadlineMs - Date.now());
328
- wait({
329
- controlHost: this._socksHost,
330
- controlPort,
331
- address: (0, hs_desc_monitor_1.normalizeHsAddress)(hostname),
332
- timeoutMs,
333
- signal: this._hsDescAbort.signal,
334
- })
335
- .then(() => {
336
- if (this._hostnameWatchStopped)
337
- return;
338
- this._hsDescUploaded = true;
339
- this._logger.debug({ event: 'managed_anon_hs_desc_uploaded' }, 'Control port reported HS_DESC UPLOADED for our descriptor');
340
- this._markPublished();
341
- })
342
- .catch((err) => {
343
- if (this._hostnameWatchStopped)
344
- return;
345
- this._hsDescUnavailable = true;
346
- this._logger.debug({
347
- event: 'managed_anon_hs_desc_monitor_failed',
348
- errorMessage: err?.message ?? String(err),
349
- }, 'Control-port HS_DESC monitor unavailable; falling back to self-dial');
350
- void this._tryReadHostname().then((found) => {
351
- if (!found)
352
- this._scheduleHostnamePoll();
353
- });
354
- });
355
- }
356
- async _selfDialReachable(hostname, port) {
357
- if (this._verifyInFlight)
358
- return false;
359
- this._verifyInFlight = true;
360
- const socksPort = this._sdk?.getSOCKSPort?.() ?? this._socksPort;
361
- const dial = this._opts.selfDial ?? socks5_connect_1.socks5Connect;
362
- try {
363
- await dial({
364
- socksHost: this._socksHost,
365
- socksPort,
366
- destHost: hostname,
367
- destPort: port,
368
- timeoutMs: SELF_DIAL_TIMEOUT_MS,
369
- });
370
- return true;
371
- }
372
- catch (err) {
373
- this._logger.debug({
374
- event: 'managed_anon_self_dial_failed',
375
- errorMessage: err?.message ?? String(err),
376
- }, 'Self-dial to own hidden service not yet reachable; will retry');
377
- return false;
378
- }
379
- finally {
380
- this._verifyInFlight = false;
381
- }
382
- }
383
- _cleanupHostnameWatch() {
384
- this._hostnameWatchStopped = true;
385
- if (this._hsDescAbort) {
386
- this._hsDescAbort.abort();
387
- this._hsDescAbort = undefined;
388
- }
389
- if (this._hostnameWatcher) {
390
- try {
391
- this._hostnameWatcher.close();
392
- }
393
- catch {
394
- }
395
- this._hostnameWatcher = undefined;
396
- }
397
- if (this._hostnamePollTimer) {
398
- clearTimeout(this._hostnamePollTimer);
399
- this._hostnamePollTimer = undefined;
400
- }
401
- }
402
- async _buildFactoryOptions() {
403
- const opts = {
404
- displayLog: this._opts.logger.level === 'debug' || this._opts.logger.level === 'trace',
405
- useExecFile: false,
406
- socksPort: this._socksPort,
407
- orPort: 0,
408
- binaryPath: this._opts.binaryPath,
409
- autoTermsAgreement: true,
410
- };
411
- if (this._opts.hiddenServiceDir) {
412
- opts.hiddenServiceDir = this._opts.hiddenServiceDir;
413
- if (this._opts.hiddenServicePort !== undefined) {
414
- opts.hiddenServicePort = this._opts.hiddenServicePort;
415
- }
416
- opts.controlPort = this._controlPortNum;
417
- try {
418
- await fs_1.promises.mkdir(this._opts.hiddenServiceDir, { recursive: true });
419
- const anonrcPath = path_1.default.join(this._opts.hiddenServiceDir, 'anonrc');
420
- let anonrcExists = false;
421
- try {
422
- await fs_1.promises.access(anonrcPath);
423
- anonrcExists = true;
424
- }
425
- catch {
426
- anonrcExists = false;
427
- }
428
- if (!anonrcExists) {
429
- const anonrc = `# Written by ManagedAnonClient (Epic 35 / Story 35.5) on first boot.\n` +
430
- `# Edit freely — ManagedAnonClient will NOT overwrite this file on subsequent starts.\n` +
431
- `AgreeToTerms 1\n` +
432
- `SocksPort ${this._socksPort}\n` +
433
- `ControlPort 127.0.0.1:${this._controlPortNum}\n` +
434
- `HiddenServiceDir ${this._opts.hiddenServiceDir}\n` +
435
- (this._opts.hiddenServicePort !== undefined
436
- ? `HiddenServicePort ${this._opts.hiddenServicePort} 127.0.0.1:${this._opts.hiddenServicePort}\n`
437
- : '');
438
- await fs_1.promises.writeFile(anonrcPath, anonrc, { encoding: 'utf8', flag: 'wx' });
439
- }
440
- else {
441
- await this._ensureControlPortInAnonrc(anonrcPath);
442
- }
443
- opts.configFilePath = anonrcPath;
444
- opts.configFile = anonrcPath;
445
- }
446
- catch (err) {
447
- this._logger.debug({ event: 'managed_anon_anonrc_write_failed', error: err.message }, 'Could not write anonrc; continuing with native options only');
448
- }
449
- }
450
- return opts;
451
- }
452
- async _ensureControlPortInAnonrc(anonrcPath) {
453
- try {
454
- const content = await fs_1.promises.readFile(anonrcPath, 'utf8');
455
- if (/^[ \t]*ControlPort\b/m.test(content))
456
- return;
457
- const addition = `# Added by ManagedAnonClient: localhost control port for the HS_DESC\n` +
458
- `# reachability gate (unauthenticated, 127.0.0.1-only). Remove to opt out.\n` +
459
- `ControlPort 127.0.0.1:${this._controlPortNum}\n`;
460
- const updated = (content.endsWith('\n') ? content : content + '\n') + addition;
461
- const tmpPath = `${anonrcPath}.cp-${process.pid}.tmp`;
462
- await fs_1.promises.writeFile(tmpPath, updated, { encoding: 'utf8' });
463
- await fs_1.promises.rename(tmpPath, anonrcPath);
464
- this._logger.info({ event: 'managed_anon_anonrc_controlport_added', controlPort: this._controlPortNum }, 'Appended ControlPort to existing anonrc (enables HS_DESC reachability gate)');
465
- }
466
- catch (err) {
467
- this._logger.debug({
468
- event: 'managed_anon_anonrc_controlport_migration_failed',
469
- errorMessage: err.message,
470
- }, 'Could not append ControlPort to existing anonrc; keeping self-dial fallback');
471
- }
472
- }
473
- async _bestEffortStop(sdk) {
474
- try {
475
- await sdk.stop();
476
- }
477
- catch (err) {
478
- this._logger.warn({
479
- event: 'managed_anon_cleanup_stop_failed',
480
- errorMessage: err.message,
481
- }, 'Best-effort SDK stop() during failure cleanup threw; ignoring');
482
- }
483
- }
484
- }
485
- exports.ManagedAnonClient = ManagedAnonClient;
486
- function safeIsRunning(sdk) {
487
- if (!sdk)
488
- return false;
489
- try {
490
- return sdk.isRunning() === true;
491
- }
492
- catch {
493
- return false;
494
- }
495
- }
496
- async function createDefaultAnonFactory() {
497
- let mod;
498
- const pkg = '@anyone-protocol/anyone-client';
499
- try {
500
- mod = require(pkg);
501
- }
502
- catch {
503
- try {
504
- mod = await new Function('p', 'return import(p)')(pkg);
505
- }
506
- catch (err) {
507
- const cause = err;
508
- const wrapped = new Error(`Managed ATOR transport requires the optional dependency ` +
509
- `"@anyone-protocol/anyone-client" but it was not found. ` +
510
- `Install it with: npm install @anyone-protocol/anyone-client`, { cause });
511
- wrapped.code = 'MODULE_NOT_FOUND';
512
- throw wrapped;
513
- }
514
- }
515
- const AnonCtor = mod?.Process ?? mod?.Anon ?? mod?.default?.Process ?? mod?.default?.Anon ?? mod?.default;
516
- if (typeof AnonCtor !== 'function') {
517
- throw new Error('@anyone-protocol/anyone-client did not export a `Process` or `Anon` constructor; ' +
518
- 'SDK surface may have changed.');
519
- }
520
- return (opts) => new AnonCtor(opts);
521
- }
522
- //# sourceMappingURL=managed-anon-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-anon-client.js","sourceRoot":"","sources":["../../src/transport/managed-anon-client.ts"],"names":[],"mappings":"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"}