@jinn-network/client 0.1.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 (278) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/deployments/deployment-phase1a-l2-baseSepolia-fast.json +32 -0
  4. package/deployments/deployment-phase1a-token-baseSepolia-fast.json +27 -0
  5. package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +26 -0
  6. package/deployments/deployment-stolas-l2-baseSepolia-fast.json +35 -0
  7. package/dist/adapters/adapter.d.ts +11 -0
  8. package/dist/adapters/adapter.js +2 -0
  9. package/dist/adapters/adapter.js.map +1 -0
  10. package/dist/adapters/local/adapter.d.ts +20 -0
  11. package/dist/adapters/local/adapter.js +146 -0
  12. package/dist/adapters/local/adapter.js.map +1 -0
  13. package/dist/adapters/mech/adapter.d.ts +29 -0
  14. package/dist/adapters/mech/adapter.js +332 -0
  15. package/dist/adapters/mech/adapter.js.map +1 -0
  16. package/dist/adapters/mech/claim-policy.d.ts +40 -0
  17. package/dist/adapters/mech/claim-policy.js +104 -0
  18. package/dist/adapters/mech/claim-policy.js.map +1 -0
  19. package/dist/adapters/mech/contracts.d.ts +44 -0
  20. package/dist/adapters/mech/contracts.js +323 -0
  21. package/dist/adapters/mech/contracts.js.map +1 -0
  22. package/dist/adapters/mech/ipfs.d.ts +43 -0
  23. package/dist/adapters/mech/ipfs.js +142 -0
  24. package/dist/adapters/mech/ipfs.js.map +1 -0
  25. package/dist/adapters/mech/safe.d.ts +15 -0
  26. package/dist/adapters/mech/safe.js +113 -0
  27. package/dist/adapters/mech/safe.js.map +1 -0
  28. package/dist/adapters/mech/types.d.ts +561 -0
  29. package/dist/adapters/mech/types.js +340 -0
  30. package/dist/adapters/mech/types.js.map +1 -0
  31. package/dist/api/balance-build.d.ts +22 -0
  32. package/dist/api/balance-build.js +37 -0
  33. package/dist/api/balance-build.js.map +1 -0
  34. package/dist/api/fleet-build.d.ts +62 -0
  35. package/dist/api/fleet-build.js +91 -0
  36. package/dist/api/fleet-build.js.map +1 -0
  37. package/dist/api/gather-status.d.ts +20 -0
  38. package/dist/api/gather-status.js +137 -0
  39. package/dist/api/gather-status.js.map +1 -0
  40. package/dist/api/history-build.d.ts +32 -0
  41. package/dist/api/history-build.js +48 -0
  42. package/dist/api/history-build.js.map +1 -0
  43. package/dist/api/peers.d.ts +27 -0
  44. package/dist/api/peers.js +94 -0
  45. package/dist/api/peers.js.map +1 -0
  46. package/dist/api/rewards-build.d.ts +20 -0
  47. package/dist/api/rewards-build.js +42 -0
  48. package/dist/api/rewards-build.js.map +1 -0
  49. package/dist/api/server.d.ts +34 -0
  50. package/dist/api/server.js +130 -0
  51. package/dist/api/server.js.map +1 -0
  52. package/dist/api/status-build.d.ts +92 -0
  53. package/dist/api/status-build.js +175 -0
  54. package/dist/api/status-build.js.map +1 -0
  55. package/dist/api/status-rollup-build.d.ts +36 -0
  56. package/dist/api/status-rollup-build.js +69 -0
  57. package/dist/api/status-rollup-build.js.map +1 -0
  58. package/dist/auth/erc8128.d.ts +43 -0
  59. package/dist/auth/erc8128.js +88 -0
  60. package/dist/auth/erc8128.js.map +1 -0
  61. package/dist/bin/jinn.d.ts +11 -0
  62. package/dist/bin/jinn.js +20 -0
  63. package/dist/bin/jinn.js.map +1 -0
  64. package/dist/build-meta.json +3 -0
  65. package/dist/chain-read-errors.d.ts +9 -0
  66. package/dist/chain-read-errors.js +43 -0
  67. package/dist/chain-read-errors.js.map +1 -0
  68. package/dist/cli/action.d.ts +26 -0
  69. package/dist/cli/action.js +56 -0
  70. package/dist/cli/action.js.map +1 -0
  71. package/dist/cli/command.d.ts +62 -0
  72. package/dist/cli/command.js +29 -0
  73. package/dist/cli/command.js.map +1 -0
  74. package/dist/cli/commands/balance.d.ts +3 -0
  75. package/dist/cli/commands/balance.js +46 -0
  76. package/dist/cli/commands/balance.js.map +1 -0
  77. package/dist/cli/commands/bootstrap.d.ts +3 -0
  78. package/dist/cli/commands/bootstrap.js +165 -0
  79. package/dist/cli/commands/bootstrap.js.map +1 -0
  80. package/dist/cli/commands/claim-rewards.d.ts +3 -0
  81. package/dist/cli/commands/claim-rewards.js +121 -0
  82. package/dist/cli/commands/claim-rewards.js.map +1 -0
  83. package/dist/cli/commands/doctor.d.ts +3 -0
  84. package/dist/cli/commands/doctor.js +151 -0
  85. package/dist/cli/commands/doctor.js.map +1 -0
  86. package/dist/cli/commands/fleet-scale.d.ts +3 -0
  87. package/dist/cli/commands/fleet-scale.js +449 -0
  88. package/dist/cli/commands/fleet-scale.js.map +1 -0
  89. package/dist/cli/commands/fleet.d.ts +3 -0
  90. package/dist/cli/commands/fleet.js +45 -0
  91. package/dist/cli/commands/fleet.js.map +1 -0
  92. package/dist/cli/commands/fund-requirements.d.ts +3 -0
  93. package/dist/cli/commands/fund-requirements.js +139 -0
  94. package/dist/cli/commands/fund-requirements.js.map +1 -0
  95. package/dist/cli/commands/history.d.ts +3 -0
  96. package/dist/cli/commands/history.js +61 -0
  97. package/dist/cli/commands/history.js.map +1 -0
  98. package/dist/cli/commands/init.d.ts +3 -0
  99. package/dist/cli/commands/init.js +91 -0
  100. package/dist/cli/commands/init.js.map +1 -0
  101. package/dist/cli/commands/keys-backup.d.ts +3 -0
  102. package/dist/cli/commands/keys-backup.js +107 -0
  103. package/dist/cli/commands/keys-backup.js.map +1 -0
  104. package/dist/cli/commands/logs.d.ts +3 -0
  105. package/dist/cli/commands/logs.js +69 -0
  106. package/dist/cli/commands/logs.js.map +1 -0
  107. package/dist/cli/commands/rewards.d.ts +3 -0
  108. package/dist/cli/commands/rewards.js +54 -0
  109. package/dist/cli/commands/rewards.js.map +1 -0
  110. package/dist/cli/commands/run.d.ts +3 -0
  111. package/dist/cli/commands/run.js +96 -0
  112. package/dist/cli/commands/run.js.map +1 -0
  113. package/dist/cli/commands/status.d.ts +3 -0
  114. package/dist/cli/commands/status.js +54 -0
  115. package/dist/cli/commands/status.js.map +1 -0
  116. package/dist/cli/commands/stop.d.ts +3 -0
  117. package/dist/cli/commands/stop.js +82 -0
  118. package/dist/cli/commands/stop.js.map +1 -0
  119. package/dist/cli/commands/submit-intent.d.ts +3 -0
  120. package/dist/cli/commands/submit-intent.js +169 -0
  121. package/dist/cli/commands/submit-intent.js.map +1 -0
  122. package/dist/cli/commands/version.d.ts +3 -0
  123. package/dist/cli/commands/version.js +114 -0
  124. package/dist/cli/commands/version.js.map +1 -0
  125. package/dist/cli/commands/withdraw.d.ts +3 -0
  126. package/dist/cli/commands/withdraw.js +181 -0
  127. package/dist/cli/commands/withdraw.js.map +1 -0
  128. package/dist/cli/deployment-digest.d.ts +10 -0
  129. package/dist/cli/deployment-digest.js +25 -0
  130. package/dist/cli/deployment-digest.js.map +1 -0
  131. package/dist/cli/execution-context.d.ts +50 -0
  132. package/dist/cli/execution-context.js +154 -0
  133. package/dist/cli/execution-context.js.map +1 -0
  134. package/dist/cli/help.d.ts +3 -0
  135. package/dist/cli/help.js +37 -0
  136. package/dist/cli/help.js.map +1 -0
  137. package/dist/cli/index.d.ts +17 -0
  138. package/dist/cli/index.js +132 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/introspection-context.d.ts +10 -0
  141. package/dist/cli/introspection-context.js +60 -0
  142. package/dist/cli/introspection-context.js.map +1 -0
  143. package/dist/cli/output.d.ts +36 -0
  144. package/dist/cli/output.js +35 -0
  145. package/dist/cli/output.js.map +1 -0
  146. package/dist/cli/password.d.ts +12 -0
  147. package/dist/cli/password.js +51 -0
  148. package/dist/cli/password.js.map +1 -0
  149. package/dist/config.d.ts +174 -0
  150. package/dist/config.js +252 -0
  151. package/dist/config.js.map +1 -0
  152. package/dist/daemon/creator.d.ts +24 -0
  153. package/dist/daemon/creator.js +80 -0
  154. package/dist/daemon/creator.js.map +1 -0
  155. package/dist/daemon/daemon.d.ts +60 -0
  156. package/dist/daemon/daemon.js +158 -0
  157. package/dist/daemon/daemon.js.map +1 -0
  158. package/dist/daemon/delivery-watcher.d.ts +10 -0
  159. package/dist/daemon/delivery-watcher.js +37 -0
  160. package/dist/daemon/delivery-watcher.js.map +1 -0
  161. package/dist/daemon/restorer.d.ts +19 -0
  162. package/dist/daemon/restorer.js +82 -0
  163. package/dist/daemon/restorer.js.map +1 -0
  164. package/dist/daemon/reward-claim-loop.d.ts +38 -0
  165. package/dist/daemon/reward-claim-loop.js +48 -0
  166. package/dist/daemon/reward-claim-loop.js.map +1 -0
  167. package/dist/discovery/registry.d.ts +43 -0
  168. package/dist/discovery/registry.js +104 -0
  169. package/dist/discovery/registry.js.map +1 -0
  170. package/dist/discovery/subgraph.d.ts +37 -0
  171. package/dist/discovery/subgraph.js +87 -0
  172. package/dist/discovery/subgraph.js.map +1 -0
  173. package/dist/earning/bootstrap.d.ts +79 -0
  174. package/dist/earning/bootstrap.js +989 -0
  175. package/dist/earning/bootstrap.js.map +1 -0
  176. package/dist/earning/contracts.d.ts +431 -0
  177. package/dist/earning/contracts.js +518 -0
  178. package/dist/earning/contracts.js.map +1 -0
  179. package/dist/earning/evidence-simhash.d.ts +59 -0
  180. package/dist/earning/evidence-simhash.js +87 -0
  181. package/dist/earning/evidence-simhash.js.map +1 -0
  182. package/dist/earning/fleet-display-index.d.ts +8 -0
  183. package/dist/earning/fleet-display-index.js +12 -0
  184. package/dist/earning/fleet-display-index.js.map +1 -0
  185. package/dist/earning/fleet-retire.d.ts +28 -0
  186. package/dist/earning/fleet-retire.js +75 -0
  187. package/dist/earning/fleet-retire.js.map +1 -0
  188. package/dist/earning/jinn-rewards.d.ts +62 -0
  189. package/dist/earning/jinn-rewards.js +81 -0
  190. package/dist/earning/jinn-rewards.js.map +1 -0
  191. package/dist/earning/next-service-index.d.ts +4 -0
  192. package/dist/earning/next-service-index.js +7 -0
  193. package/dist/earning/next-service-index.js.map +1 -0
  194. package/dist/earning/orphan-sweep.d.ts +33 -0
  195. package/dist/earning/orphan-sweep.js +157 -0
  196. package/dist/earning/orphan-sweep.js.map +1 -0
  197. package/dist/earning/reconcile.d.ts +37 -0
  198. package/dist/earning/reconcile.js +216 -0
  199. package/dist/earning/reconcile.js.map +1 -0
  200. package/dist/earning/safe-adapter.d.ts +70 -0
  201. package/dist/earning/safe-adapter.js +228 -0
  202. package/dist/earning/safe-adapter.js.map +1 -0
  203. package/dist/earning/stolas-claim.d.ts +47 -0
  204. package/dist/earning/stolas-claim.js +115 -0
  205. package/dist/earning/stolas-claim.js.map +1 -0
  206. package/dist/earning/store.d.ts +36 -0
  207. package/dist/earning/store.js +156 -0
  208. package/dist/earning/store.js.map +1 -0
  209. package/dist/earning/types.d.ts +123 -0
  210. package/dist/earning/types.js +64 -0
  211. package/dist/earning/types.js.map +1 -0
  212. package/dist/earning/viem-clients.d.ts +9 -0
  213. package/dist/earning/viem-clients.js +22 -0
  214. package/dist/earning/viem-clients.js.map +1 -0
  215. package/dist/earning/wallet.d.ts +20 -0
  216. package/dist/earning/wallet.js +103 -0
  217. package/dist/earning/wallet.js.map +1 -0
  218. package/dist/errors/envelope.d.ts +41 -0
  219. package/dist/errors/envelope.js +48 -0
  220. package/dist/errors/envelope.js.map +1 -0
  221. package/dist/index.d.ts +14 -0
  222. package/dist/index.js +17 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/main.d.ts +32 -0
  225. package/dist/main.js +281 -0
  226. package/dist/main.js.map +1 -0
  227. package/dist/mcp/server.d.ts +14 -0
  228. package/dist/mcp/server.js +205 -0
  229. package/dist/mcp/server.js.map +1 -0
  230. package/dist/operator-errors.d.ts +16 -0
  231. package/dist/operator-errors.js +88 -0
  232. package/dist/operator-errors.js.map +1 -0
  233. package/dist/preflight/claude-binary.d.ts +19 -0
  234. package/dist/preflight/claude-binary.js +44 -0
  235. package/dist/preflight/claude-binary.js.map +1 -0
  236. package/dist/preflight/claude-invocation-envelope.d.ts +11 -0
  237. package/dist/preflight/claude-invocation-envelope.js +67 -0
  238. package/dist/preflight/claude-invocation-envelope.js.map +1 -0
  239. package/dist/runner/claude.d.ts +15 -0
  240. package/dist/runner/claude.js +193 -0
  241. package/dist/runner/claude.js.map +1 -0
  242. package/dist/runner/runner.d.ts +11 -0
  243. package/dist/runner/runner.js +2 -0
  244. package/dist/runner/runner.js.map +1 -0
  245. package/dist/runner/simple.d.ts +8 -0
  246. package/dist/runner/simple.js +11 -0
  247. package/dist/runner/simple.js.map +1 -0
  248. package/dist/store/store.d.ts +74 -0
  249. package/dist/store/store.js +168 -0
  250. package/dist/store/store.js.map +1 -0
  251. package/dist/tx-retry.d.ts +55 -0
  252. package/dist/tx-retry.js +214 -0
  253. package/dist/tx-retry.js.map +1 -0
  254. package/dist/types/desired-state.d.ts +41 -0
  255. package/dist/types/desired-state.js +16 -0
  256. package/dist/types/desired-state.js.map +1 -0
  257. package/dist/types/errors.d.ts +8 -0
  258. package/dist/types/errors.js +17 -0
  259. package/dist/types/errors.js.map +1 -0
  260. package/dist/types/index.d.ts +2 -0
  261. package/dist/types/index.js +3 -0
  262. package/dist/types/index.js.map +1 -0
  263. package/dist/withdraw/args.d.ts +29 -0
  264. package/dist/withdraw/args.js +198 -0
  265. package/dist/withdraw/args.js.map +1 -0
  266. package/dist/withdraw/run-withdraw-plan.d.ts +21 -0
  267. package/dist/withdraw/run-withdraw-plan.js +257 -0
  268. package/dist/withdraw/run-withdraw-plan.js.map +1 -0
  269. package/dist/x402/acquire.d.ts +6 -0
  270. package/dist/x402/acquire.js +32 -0
  271. package/dist/x402/acquire.js.map +1 -0
  272. package/dist/x402/facilitator.d.ts +11 -0
  273. package/dist/x402/facilitator.js +52 -0
  274. package/dist/x402/facilitator.js.map +1 -0
  275. package/dist/x402/handler.d.ts +15 -0
  276. package/dist/x402/handler.js +40 -0
  277. package/dist/x402/handler.js.map +1 -0
  278. package/package.json +72 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Shared retry policy for transient RPC / transaction submission failures.
3
+ */
4
+ export const TX_RETRY_DEFAULTS = {
5
+ maxAttempts: 6,
6
+ baseDelayMs: 400,
7
+ maxDelayMs: 12_000,
8
+ /** Extra fee bump per retry attempt after the first (basis points, 1500 = +15%) */
9
+ feeBumpBpsPerAttempt: 1500,
10
+ };
11
+ export function flattenErrorMessage(error) {
12
+ if (error === null || error === undefined)
13
+ return String(error);
14
+ if (typeof error === 'string')
15
+ return error;
16
+ if (error instanceof Error) {
17
+ let s = error.message;
18
+ const withCause = error;
19
+ if (withCause.cause !== undefined && withCause.cause !== null) {
20
+ s += ' | ' + flattenErrorMessage(withCause.cause);
21
+ }
22
+ return s;
23
+ }
24
+ if (typeof error === 'object') {
25
+ const o = error;
26
+ const parts = [];
27
+ if (typeof o.shortMessage === 'string')
28
+ parts.push(o.shortMessage);
29
+ if (typeof o.details === 'string')
30
+ parts.push(o.details);
31
+ if (typeof o.message === 'string' && !parts.includes(o.message))
32
+ parts.push(o.message);
33
+ if (parts.length > 0)
34
+ return parts.join(' | ');
35
+ try {
36
+ return JSON.stringify(error);
37
+ }
38
+ catch {
39
+ return String(error);
40
+ }
41
+ }
42
+ return String(error);
43
+ }
44
+ /**
45
+ * True when the failure is often fixed by waiting, refreshing nonce/fees, or switching RPC timing.
46
+ * Intentionally conservative: do not treat insufficient balance or user rejections as recoverable.
47
+ */
48
+ export function isRecoverableTransactionError(error) {
49
+ const msg = flattenErrorMessage(error);
50
+ const lower = msg.toLowerCase();
51
+ if (lower.includes('insufficient funds'))
52
+ return false;
53
+ if (lower.includes('user rejected') || lower.includes('user denied'))
54
+ return false;
55
+ if (lower.includes('rejected the request'))
56
+ return false;
57
+ if (msg.includes('GS013'))
58
+ return false;
59
+ if (msg.includes('GS026'))
60
+ return true;
61
+ if (lower.includes('replacement transaction underpriced') ||
62
+ lower.includes('replacement fee too low') ||
63
+ lower.includes('fee cap less than block base fee') ||
64
+ lower.includes('max fee per gas less than block base fee') ||
65
+ lower.includes('transaction underpriced')) {
66
+ return true;
67
+ }
68
+ if (lower.includes('nonce too low') ||
69
+ lower.includes('already known') ||
70
+ lower.includes('could not coalesce')) {
71
+ return true;
72
+ }
73
+ if (lower.includes('econnreset') ||
74
+ lower.includes('etimedout') ||
75
+ lower.includes('socket hang up') ||
76
+ lower.includes('fetch failed') ||
77
+ lower.includes('network error') ||
78
+ lower.includes('connection refused') ||
79
+ lower.includes('connect timeout')) {
80
+ return true;
81
+ }
82
+ if (lower.includes('429') ||
83
+ lower.includes('rate limit') ||
84
+ lower.includes('too many requests') ||
85
+ lower.includes('-32603') ||
86
+ lower.includes('internal json-rpc error') ||
87
+ lower.includes('-32005') ||
88
+ lower.includes('request timed out') ||
89
+ lower.includes('timeout') ||
90
+ lower.includes('bad gateway') ||
91
+ lower.includes('service unavailable') ||
92
+ lower.includes('502') ||
93
+ lower.includes('503')) {
94
+ return true;
95
+ }
96
+ return false;
97
+ }
98
+ export function sleep(ms) {
99
+ return new Promise(r => setTimeout(r, ms));
100
+ }
101
+ export async function backoffDelay(attemptIndex, baseMs, maxMs) {
102
+ const exp = Math.min(maxMs, baseMs * 2 ** attemptIndex);
103
+ const jitter = Math.floor(Math.random() * Math.min(250, baseMs));
104
+ await sleep(exp + jitter);
105
+ }
106
+ export async function withRecoverableRetry(fn, options = {}) {
107
+ const maxAttempts = options.maxAttempts ?? TX_RETRY_DEFAULTS.maxAttempts;
108
+ const baseDelayMs = options.baseDelayMs ?? TX_RETRY_DEFAULTS.baseDelayMs;
109
+ const maxDelayMs = options.maxDelayMs ?? TX_RETRY_DEFAULTS.maxDelayMs;
110
+ let lastError;
111
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
112
+ try {
113
+ return await fn(attempt);
114
+ }
115
+ catch (err) {
116
+ lastError = err;
117
+ if (!isRecoverableTransactionError(err) || attempt >= maxAttempts - 1) {
118
+ throw err;
119
+ }
120
+ const message = flattenErrorMessage(err);
121
+ options.onRetry?.({ attempt: attempt + 1, error: err, message });
122
+ await backoffDelay(attempt, baseDelayMs, maxDelayMs);
123
+ }
124
+ }
125
+ throw lastError instanceof Error ? lastError : new Error(String(lastError));
126
+ }
127
+ /** EIP-1559 or legacy gas overrides for viem, increasingly aggressive on later attempts. */
128
+ export async function viemFeeOverridesForAttempt(publicClient, attemptIndex) {
129
+ if (attemptIndex <= 0)
130
+ return {};
131
+ const bps = BigInt(TX_RETRY_DEFAULTS.feeBumpBpsPerAttempt) * BigInt(attemptIndex);
132
+ const mult = 10000n + bps;
133
+ const apply = (v) => (v * mult) / 10000n;
134
+ try {
135
+ const fees = await publicClient.estimateFeesPerGas();
136
+ if (fees.maxFeePerGas !== undefined && fees.maxPriorityFeePerGas !== undefined) {
137
+ return {
138
+ maxFeePerGas: apply(fees.maxFeePerGas),
139
+ maxPriorityFeePerGas: apply(fees.maxPriorityFeePerGas),
140
+ };
141
+ }
142
+ }
143
+ catch {
144
+ // fall through to gasPrice
145
+ }
146
+ try {
147
+ const gasPrice = await publicClient.getGasPrice();
148
+ return { gasPrice: apply(gasPrice) };
149
+ }
150
+ catch {
151
+ return {};
152
+ }
153
+ }
154
+ export async function waitForTransactionReceiptWithRetry(publicClient, hash, options = {}) {
155
+ const maxAttempts = options.maxAttempts ?? TX_RETRY_DEFAULTS.maxAttempts;
156
+ const baseDelayMs = options.baseDelayMs ?? TX_RETRY_DEFAULTS.baseDelayMs;
157
+ const maxDelayMs = options.maxDelayMs ?? TX_RETRY_DEFAULTS.maxDelayMs;
158
+ const pollingInterval = options.pollingInterval ?? 4_000;
159
+ const confirmations = options.confirmations ?? 1;
160
+ let lastError;
161
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
162
+ try {
163
+ return await publicClient.waitForTransactionReceipt({
164
+ hash,
165
+ pollingInterval,
166
+ confirmations,
167
+ });
168
+ }
169
+ catch (err) {
170
+ lastError = err;
171
+ if (!isRecoverableTransactionError(err) || attempt >= maxAttempts - 1) {
172
+ throw err;
173
+ }
174
+ options.onRetry?.({
175
+ attempt: attempt + 1,
176
+ error: err,
177
+ message: flattenErrorMessage(err),
178
+ });
179
+ await backoffDelay(attempt, baseDelayMs, maxDelayMs);
180
+ }
181
+ }
182
+ throw lastError instanceof Error ? lastError : new Error(String(lastError));
183
+ }
184
+ export async function viemSendTransactionWithRetry(walletClient, publicClient, txRequest, options = {}) {
185
+ const maxAttempts = options.maxAttempts ?? TX_RETRY_DEFAULTS.maxAttempts;
186
+ const baseDelayMs = options.baseDelayMs ?? TX_RETRY_DEFAULTS.baseDelayMs;
187
+ const maxDelayMs = options.maxDelayMs ?? TX_RETRY_DEFAULTS.maxDelayMs;
188
+ let lastError;
189
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
190
+ try {
191
+ const overrides = await viemFeeOverridesForAttempt(publicClient, attempt);
192
+ const req = { ...txRequest, ...overrides };
193
+ // If we provided maxFeePerGas, ensure gasPrice is not somehow inherited
194
+ if ('maxFeePerGas' in req && 'maxPriorityFeePerGas' in req) {
195
+ delete req.gasPrice;
196
+ }
197
+ return await walletClient.sendTransaction(req);
198
+ }
199
+ catch (err) {
200
+ lastError = err;
201
+ if (!isRecoverableTransactionError(err) || attempt >= maxAttempts - 1) {
202
+ throw err;
203
+ }
204
+ options.onRetry?.({
205
+ attempt: attempt + 1,
206
+ error: err,
207
+ message: flattenErrorMessage(err),
208
+ });
209
+ await backoffDelay(attempt, baseDelayMs, maxDelayMs);
210
+ }
211
+ }
212
+ throw lastError instanceof Error ? lastError : new Error(String(lastError));
213
+ }
214
+ //# sourceMappingURL=tx-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx-retry.js","sourceRoot":"","sources":["../src/tx-retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ export type RequestId = string;
3
+ export declare const DesiredStateSchema: z.ZodObject<{
4
+ id: z.ZodOptional<z.ZodString>;
5
+ description: z.ZodString;
6
+ context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ description: string;
9
+ id?: string | undefined;
10
+ context?: Record<string, unknown> | undefined;
11
+ }, {
12
+ description: string;
13
+ id?: string | undefined;
14
+ context?: Record<string, unknown> | undefined;
15
+ }>;
16
+ export interface DesiredState {
17
+ id: string;
18
+ description: string;
19
+ context?: Record<string, unknown>;
20
+ type?: 'restoration' | 'evaluation';
21
+ attemptId?: string;
22
+ attemptNumber?: number;
23
+ restorationRequestId?: string;
24
+ }
25
+ export declare function parseDesiredState(input: unknown): DesiredState;
26
+ export interface RestorationRequest {
27
+ requestId: RequestId;
28
+ desiredState: DesiredState;
29
+ payment?: string;
30
+ timeout?: number;
31
+ }
32
+ export interface RestorationResult {
33
+ data: string;
34
+ artifacts?: string[];
35
+ }
36
+ export interface DeliveredResult {
37
+ requestId: RequestId;
38
+ desiredState: DesiredState;
39
+ result: RestorationResult;
40
+ deliveryMechAddress: string;
41
+ }
@@ -0,0 +1,16 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { z } from 'zod';
3
+ export const DesiredStateSchema = z.object({
4
+ id: z.string().optional(),
5
+ description: z.string().min(1),
6
+ context: z.record(z.unknown()).optional(),
7
+ });
8
+ export function parseDesiredState(input) {
9
+ const parsed = DesiredStateSchema.parse(input);
10
+ return {
11
+ id: parsed.id ?? randomUUID(),
12
+ description: parsed.description,
13
+ context: parsed.context,
14
+ };
15
+ }
16
+ //# sourceMappingURL=desired-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desired-state.js","sourceRoot":"","sources":["../../src/types/desired-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAYH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,UAAU,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare class TransientError extends Error {
2
+ readonly cause?: unknown | undefined;
3
+ constructor(message: string, cause?: unknown | undefined);
4
+ }
5
+ export declare class PermanentError extends Error {
6
+ readonly cause?: unknown | undefined;
7
+ constructor(message: string, cause?: unknown | undefined);
8
+ }
@@ -0,0 +1,17 @@
1
+ export class TransientError extends Error {
2
+ cause;
3
+ constructor(message, cause) {
4
+ super(message);
5
+ this.cause = cause;
6
+ this.name = 'TransientError';
7
+ }
8
+ }
9
+ export class PermanentError extends Error {
10
+ cause;
11
+ constructor(message, cause) {
12
+ super(message);
13
+ this.cause = cause;
14
+ this.name = 'PermanentError';
15
+ }
16
+ }
17
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACM;IAA7C,YAAY,OAAe,EAAkB,KAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAU;QAE1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IACM;IAA7C,YAAY,OAAe,EAAkB,KAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAU;QAE1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { type DesiredState, type RequestId, type RestorationRequest, type RestorationResult, type DeliveredResult, parseDesiredState, } from './desired-state.js';
2
+ export { TransientError, PermanentError } from './errors.js';
@@ -0,0 +1,3 @@
1
+ export { parseDesiredState, } from './desired-state.js';
2
+ export { TransientError, PermanentError } from './errors.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CLI argument and amount parsing for operator withdraw script.
3
+ */
4
+ export type WithdrawParsedArgs = {
5
+ help: boolean;
6
+ dryRun: boolean;
7
+ yes: boolean;
8
+ json: boolean;
9
+ human: boolean;
10
+ to: `0x${string}` | null;
11
+ jinnWei: bigint | null;
12
+ drainJinn: boolean;
13
+ ethWei: bigint | null;
14
+ drainEth: boolean;
15
+ sweepAgents: boolean;
16
+ minSweepWei: bigint;
17
+ masterGasReserveWei: bigint;
18
+ };
19
+ export declare function parseEtherToWei(input: string): bigint;
20
+ /** Parse a decimal token amount into wei given token decimals (default 18). */
21
+ export declare function parseTokenDecimalToWei(input: string, decimals: number): bigint;
22
+ export declare function parsePositiveWeiString(input: string, label: string): bigint;
23
+ /**
24
+ * Parse withdraw CLI argv (typically process.argv.slice(2)).
25
+ * Mutates a copy of argv only — pass a slice if you need to preserve process.argv.
26
+ */
27
+ export declare function parseWithdrawArgv(argv: string[]): WithdrawParsedArgs;
28
+ export declare function withdrawArgsNeedMasterTransfer(p: WithdrawParsedArgs): boolean;
29
+ export declare function validateWithdrawArgs(p: WithdrawParsedArgs): void;
@@ -0,0 +1,198 @@
1
+ /**
2
+ * CLI argument and amount parsing for operator withdraw script.
3
+ */
4
+ import { getAddress, isAddress } from 'viem';
5
+ const ZERO = 0n;
6
+ export function parseEtherToWei(input) {
7
+ const s = input.trim();
8
+ if (!s)
9
+ throw new Error('Empty ETH amount');
10
+ if (!/^\d*\.?\d+$/.test(s)) {
11
+ throw new Error(`Invalid ETH amount: ${input}`);
12
+ }
13
+ const [whole, frac = ''] = s.split('.');
14
+ const wholePart = whole === '' ? '0' : whole;
15
+ if (!/^\d+$/.test(wholePart))
16
+ throw new Error(`Invalid ETH amount: ${input}`);
17
+ if (frac.length > 18) {
18
+ throw new Error('ETH amount must have at most 18 decimal places');
19
+ }
20
+ const fracPadded = (frac + '0'.repeat(18)).slice(0, 18);
21
+ const wei = BigInt(wholePart) * 10n ** 18n + BigInt(fracPadded || '0');
22
+ return wei;
23
+ }
24
+ /** Parse a decimal token amount into wei given token decimals (default 18). */
25
+ export function parseTokenDecimalToWei(input, decimals) {
26
+ if (decimals < 0 || decimals > 36) {
27
+ throw new Error(`Unsupported token decimals: ${decimals}`);
28
+ }
29
+ const s = input.trim();
30
+ if (!s)
31
+ throw new Error('Empty token amount');
32
+ if (!/^\d*\.?\d+$/.test(s)) {
33
+ throw new Error(`Invalid token amount: ${input}`);
34
+ }
35
+ const [whole, frac = ''] = s.split('.');
36
+ const wholePart = whole === '' ? '0' : whole;
37
+ if (!/^\d+$/.test(wholePart))
38
+ throw new Error(`Invalid token amount: ${input}`);
39
+ if (frac.length > decimals) {
40
+ throw new Error(`Token amount must have at most ${decimals} decimal places`);
41
+ }
42
+ const fracPadded = (frac + '0'.repeat(decimals)).slice(0, decimals);
43
+ const scale = 10n ** BigInt(decimals);
44
+ const wei = BigInt(wholePart) * scale + BigInt(fracPadded || '0');
45
+ return wei;
46
+ }
47
+ export function parsePositiveWeiString(input, label) {
48
+ const s = input.trim();
49
+ if (!/^\d+$/.test(s)) {
50
+ throw new Error(`${label} must be a non-negative integer string (wei), got: ${input}`);
51
+ }
52
+ const v = BigInt(s);
53
+ if (v <= ZERO) {
54
+ throw new Error(`${label} must be positive`);
55
+ }
56
+ return v;
57
+ }
58
+ function takeFlag(argv, name) {
59
+ const idx = argv.indexOf(name);
60
+ if (idx === -1)
61
+ return false;
62
+ argv.splice(idx, 1);
63
+ return true;
64
+ }
65
+ function takeValue(argv, name) {
66
+ const idx = argv.indexOf(name);
67
+ if (idx === -1)
68
+ return null;
69
+ const v = argv[idx + 1];
70
+ if (v === undefined || v.startsWith('--')) {
71
+ throw new Error(`Missing value for ${name}`);
72
+ }
73
+ argv.splice(idx, 2);
74
+ return v;
75
+ }
76
+ /**
77
+ * Parse withdraw CLI argv (typically process.argv.slice(2)).
78
+ * Mutates a copy of argv only — pass a slice if you need to preserve process.argv.
79
+ */
80
+ export function parseWithdrawArgv(argv) {
81
+ const args = [...argv];
82
+ const help = takeFlag(args, '--help') || takeFlag(args, '-h');
83
+ const dryRun = takeFlag(args, '--dry-run');
84
+ const yes = takeFlag(args, '--yes');
85
+ const json = takeFlag(args, '--json');
86
+ const human = takeFlag(args, '--human');
87
+ const drainJinn = takeFlag(args, '--drain-jinn');
88
+ const drainEth = takeFlag(args, '--drain-eth');
89
+ const sweepAgents = takeFlag(args, '--sweep-agents');
90
+ const toRaw = takeValue(args, '--to');
91
+ let to = null;
92
+ if (toRaw !== null) {
93
+ if (!isAddress(toRaw)) {
94
+ throw new Error(`Invalid --to address: ${toRaw}`);
95
+ }
96
+ to = getAddress(toRaw);
97
+ }
98
+ let jinnWei = null;
99
+ const jinnWeiStr = takeValue(args, '--jinn-wei');
100
+ const jinnAmount = takeValue(args, '--jinn-amount');
101
+ const amountAlias = takeValue(args, '--amount');
102
+ if ([jinnAmount, amountAlias].filter(Boolean).length > 1) {
103
+ throw new Error('Use only one of --jinn-amount or --amount');
104
+ }
105
+ const jinnDecimal = jinnAmount ?? amountAlias;
106
+ if (jinnWeiStr !== null && jinnDecimal !== null) {
107
+ throw new Error('Use only one of --jinn-wei or --jinn-amount/--amount');
108
+ }
109
+ if (jinnWeiStr !== null) {
110
+ jinnWei = parsePositiveWeiString(jinnWeiStr, '--jinn-wei');
111
+ }
112
+ if (jinnDecimal !== null) {
113
+ jinnWei = parseTokenDecimalToWei(jinnDecimal, 18);
114
+ if (jinnWei <= ZERO)
115
+ throw new Error('--jinn-amount/--amount must be positive');
116
+ }
117
+ if (drainJinn && jinnWei !== null) {
118
+ throw new Error('Cannot combine --drain-jinn with --jinn-amount/--amount/--jinn-wei');
119
+ }
120
+ let ethWei = null;
121
+ const ethWeiStr = takeValue(args, '--eth-wei');
122
+ const ethAmount = takeValue(args, '--eth-amount');
123
+ if (ethWeiStr !== null && ethAmount !== null) {
124
+ throw new Error('Use only one of --eth-wei or --eth-amount');
125
+ }
126
+ if (ethWeiStr !== null) {
127
+ ethWei = parsePositiveWeiString(ethWeiStr, '--eth-wei');
128
+ }
129
+ if (ethAmount !== null) {
130
+ ethWei = parseEtherToWei(ethAmount);
131
+ if (ethWei <= ZERO)
132
+ throw new Error('--eth-amount must be positive');
133
+ }
134
+ if (drainEth && ethWei !== null) {
135
+ throw new Error('Cannot combine --drain-eth with --eth-amount/--eth-wei');
136
+ }
137
+ const minSweepRaw = takeValue(args, '--min-sweep-wei');
138
+ let minSweepWei = 1000000000000000n; // 0.001 ETH default dust floor
139
+ if (minSweepRaw !== null) {
140
+ minSweepWei = parsePositiveWeiString(minSweepRaw, '--min-sweep-wei');
141
+ }
142
+ const reserveRaw = takeValue(args, '--master-gas-reserve-wei');
143
+ let masterGasReserveWei = 2500000000000000n; // 0.0025 ETH default
144
+ if (reserveRaw !== null) {
145
+ const s = reserveRaw.trim();
146
+ if (!/^\d+$/.test(s)) {
147
+ throw new Error('--master-gas-reserve-wei must be a non-negative integer wei string');
148
+ }
149
+ masterGasReserveWei = BigInt(s);
150
+ }
151
+ const configIdx = args.indexOf('--config');
152
+ if (configIdx !== -1) {
153
+ const configPath = args[configIdx + 1];
154
+ if (configPath === undefined || configPath.startsWith('--')) {
155
+ throw new Error('Missing value for --config');
156
+ }
157
+ args.splice(configIdx, 2);
158
+ }
159
+ const passwordFdIdx = args.indexOf('--password-fd');
160
+ if (passwordFdIdx !== -1) {
161
+ const fdVal = args[passwordFdIdx + 1];
162
+ if (fdVal === undefined || fdVal.startsWith('--')) {
163
+ throw new Error('Missing value for --password-fd');
164
+ }
165
+ args.splice(passwordFdIdx, 2);
166
+ }
167
+ if (args.length > 0) {
168
+ throw new Error(`Unexpected arguments: ${args.join(' ')}`);
169
+ }
170
+ return {
171
+ help,
172
+ dryRun,
173
+ yes,
174
+ json,
175
+ human,
176
+ to,
177
+ jinnWei,
178
+ drainJinn,
179
+ ethWei,
180
+ drainEth,
181
+ sweepAgents,
182
+ minSweepWei,
183
+ masterGasReserveWei,
184
+ };
185
+ }
186
+ export function withdrawArgsNeedMasterTransfer(p) {
187
+ return p.jinnWei !== null || p.drainJinn || p.ethWei !== null || p.drainEth;
188
+ }
189
+ export function validateWithdrawArgs(p) {
190
+ const needsTo = withdrawArgsNeedMasterTransfer(p) || p.sweepAgents;
191
+ if (needsTo && !p.to) {
192
+ throw new Error('--to <address> is required for transfers or --sweep-agents');
193
+ }
194
+ if (!needsTo && !p.help) {
195
+ throw new Error('Nothing to do: specify --jinn-amount/--amount/--jinn-wei/--drain-jinn, --eth-amount/--eth-wei/--drain-eth, and/or --sweep-agents');
196
+ }
197
+ }
198
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/withdraw/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared withdraw execution (master + optional agent sweeps). Used by `jinn withdraw` and `npm run withdraw`.
3
+ */
4
+ import { type PublicClient } from 'viem';
5
+ import type { JinnConfig } from '../config.js';
6
+ import { FleetStateStore } from '../earning/store.js';
7
+ import { type WithdrawParsedArgs } from './args.js';
8
+ export declare function withdrawNeedsInteractiveConfirm(p: WithdrawParsedArgs, opts: {
9
+ sweepWouldSend: boolean;
10
+ }): boolean;
11
+ export declare function resolveWithdrawTokenAddress(chain: 'base' | 'base-sepolia', config: JinnConfig): string;
12
+ export declare function estimateNativeTransferCostWei(publicClient: PublicClient): Promise<bigint>;
13
+ export declare function computeSweepWouldSend(publicClient: PublicClient, mnemonic: string, fleet: Awaited<ReturnType<FleetStateStore['tryLoadExisting']>>, to: string, minSweepWei: bigint): Promise<boolean>;
14
+ export interface RunWithdrawPlanOptions {
15
+ password: string;
16
+ config: JinnConfig;
17
+ parsed: WithdrawParsedArgs;
18
+ log?: (s: string) => void;
19
+ warn?: (s: string) => void;
20
+ }
21
+ export declare function runWithdrawPlan(options: RunWithdrawPlanOptions): Promise<void>;