@jinn-network/client 0.1.0-canary.adfd078d

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 +173 -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 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ExecutionAdapter } from '../adapters/adapter.js';
2
+ import type { DesiredState, RequestId } from '../types/index.js';
3
+ import type { Store } from '../store/store.js';
4
+ export interface ActiveAttempt {
5
+ desiredState: DesiredState;
6
+ attemptNumber: number;
7
+ restorationRequestId: string;
8
+ status: 'pending' | 'resolved';
9
+ }
10
+ export declare class CreatorLoop {
11
+ private readonly adapter;
12
+ private readonly desiredStates;
13
+ private readonly store;
14
+ private stopped;
15
+ private posted;
16
+ private attempts;
17
+ private stopResolve;
18
+ private stopPromise;
19
+ private static readonly REPOST_INTERVAL_MS;
20
+ constructor(adapter: ExecutionAdapter, desiredStates: DesiredState[], store: Store);
21
+ tick(): Promise<RequestId | null>;
22
+ run(): Promise<void>;
23
+ stop(): void;
24
+ }
@@ -0,0 +1,80 @@
1
+ import { TransientError } from '../types/index.js';
2
+ import { isRecoverableTransactionError } from '../tx-retry.js';
3
+ export class CreatorLoop {
4
+ adapter;
5
+ desiredStates;
6
+ store;
7
+ stopped = false;
8
+ posted = new Map(); // stateId → timestamp of last post
9
+ attempts = new Map();
10
+ stopResolve = null;
11
+ stopPromise;
12
+ // Minimum interval between posting the same desired state (ms).
13
+ // ~20 activities/day needed; each cycle = 4 activities; 5 cycles/day = 1 every ~4.8h.
14
+ // Use 4h to provide safety margin.
15
+ static REPOST_INTERVAL_MS = 4 * 60 * 60 * 1000;
16
+ constructor(adapter, desiredStates, store) {
17
+ this.adapter = adapter;
18
+ this.desiredStates = desiredStates;
19
+ this.store = store;
20
+ this.stopPromise = new Promise(resolve => {
21
+ this.stopResolve = resolve;
22
+ });
23
+ }
24
+ async tick() {
25
+ const now = Date.now();
26
+ for (const state of this.desiredStates) {
27
+ const lastPosted = this.posted.get(state.id);
28
+ if (lastPosted && (now - lastPosted) < CreatorLoop.REPOST_INTERVAL_MS)
29
+ continue;
30
+ try {
31
+ const prev = this.attempts.get(state.id);
32
+ const attemptNumber = prev ? prev.attemptNumber + 1 : 1;
33
+ const attemptId = `${state.id}/${attemptNumber}`;
34
+ const stateWithAttempt = {
35
+ ...state,
36
+ type: 'restoration',
37
+ attemptId,
38
+ attemptNumber,
39
+ };
40
+ const requestId = await this.adapter.postDesiredState(stateWithAttempt);
41
+ this.posted.set(state.id, now);
42
+ this.attempts.set(state.id, {
43
+ desiredState: state,
44
+ attemptNumber,
45
+ restorationRequestId: requestId,
46
+ status: 'pending',
47
+ });
48
+ this.store.recordOwnActivity(requestId, 'created');
49
+ return requestId;
50
+ }
51
+ catch (err) {
52
+ if (err instanceof TransientError)
53
+ continue;
54
+ throw err;
55
+ }
56
+ }
57
+ return null;
58
+ }
59
+ async run() {
60
+ while (!this.stopped) {
61
+ let delayMs = 5000;
62
+ try {
63
+ await this.tick();
64
+ }
65
+ catch (err) {
66
+ console.error('[creator] Error:', err);
67
+ delayMs = isRecoverableTransactionError(err) ? 12_000 : 8000;
68
+ }
69
+ await Promise.race([
70
+ new Promise(r => setTimeout(r, delayMs)),
71
+ this.stopPromise,
72
+ ]);
73
+ }
74
+ }
75
+ stop() {
76
+ this.stopped = true;
77
+ this.stopResolve?.();
78
+ }
79
+ }
80
+ //# sourceMappingURL=creator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creator.js","sourceRoot":"","sources":["../../src/daemon/creator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAS/D,MAAM,OAAO,WAAW;IAaH;IACA;IACA;IAdX,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,mCAAmC;IACvE,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,WAAW,GAAwB,IAAI,CAAC;IACxC,WAAW,CAAgB;IAEnC,gEAAgE;IAChE,sFAAsF;IACtF,mCAAmC;IAC3B,MAAM,CAAU,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEhE,YACmB,OAAyB,EACzB,aAA6B,EAC7B,KAAY;QAFZ,YAAO,GAAP,OAAO,CAAkB;QACzB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,UAAK,GAAL,KAAK,CAAO;QAE7B,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,UAAU,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,kBAAkB;gBAAE,SAAS;YAEhF,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACzC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,aAAa,EAAE,CAAC;gBACjD,MAAM,gBAAgB,GAAiB;oBACrC,GAAG,KAAK;oBACR,IAAI,EAAE,aAAa;oBACnB,SAAS;oBACT,aAAa;iBACd,CAAC;gBACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;gBACxE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;oBAC1B,YAAY,EAAE,KAAK;oBACnB,aAAa;oBACb,oBAAoB,EAAE,SAAS;oBAC/B,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACnD,OAAO,SAAS,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,cAAc;oBAAE,SAAS;gBAC5C,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBACvC,OAAO,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/D,CAAC;YACD,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxC,IAAI,CAAC,WAAW;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACvB,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { ExecutionAdapter } from '../adapters/adapter.js';
2
+ import type { Runner } from '../runner/runner.js';
3
+ import type { DesiredState } from '../types/index.js';
4
+ import type { StatusGatherConfig } from '../api/gather-status.js';
5
+ import type { EthHttpSigner } from '../auth/erc8128.js';
6
+ import { type RegistryConfig } from '../discovery/registry.js';
7
+ import type { X402Config } from '../x402/handler.js';
8
+ import { type RewardClaimLoopConfig } from './reward-claim-loop.js';
9
+ export interface DaemonConfig {
10
+ adapter: ExecutionAdapter;
11
+ runner: Runner;
12
+ desiredStates: DesiredState[];
13
+ dbPath: string;
14
+ shutdownTimeoutMs?: number;
15
+ apiPort?: number;
16
+ peers?: string[];
17
+ signer?: EthHttpSigner;
18
+ registry?: RegistryConfig;
19
+ subgraphUrl?: string;
20
+ /** This node's public HTTP endpoint (for 8004 registration) */
21
+ nodeEndpoint?: string;
22
+ x402?: X402Config;
23
+ /**
24
+ * Periodic stOLAS distributor reward claims (master EOA pays gas).
25
+ * Omitted or interval 0 → loop not started.
26
+ */
27
+ rewardClaim?: RewardClaimLoopConfig;
28
+ /** Passed to HTTP API for GET /v1/status (fleet + RPC hints). */
29
+ status?: StatusGatherConfig;
30
+ }
31
+ export declare class Daemon {
32
+ private readonly config;
33
+ private store;
34
+ private creatorLoop;
35
+ private restorerLoop;
36
+ private deliveryWatcherLoop;
37
+ private adapter;
38
+ private loopPromises;
39
+ private cachedShutdownState;
40
+ private apiServer?;
41
+ private peerSync?;
42
+ private registry?;
43
+ private readonly apiPort;
44
+ private rewardClaimLoop?;
45
+ constructor(config: DaemonConfig);
46
+ start(): Promise<void>;
47
+ stop(): Promise<void>;
48
+ getShutdownState(): string | null;
49
+ /**
50
+ * Register an artifact on the 8004 registry (fire-and-forget).
51
+ * Called after local artifact publish if registry is configured.
52
+ */
53
+ registerArtifact(artifact: {
54
+ id: string;
55
+ title: string;
56
+ tags: string[];
57
+ outcome: string;
58
+ }): void;
59
+ private backfillFromSubgraph;
60
+ }
@@ -0,0 +1,158 @@
1
+ import { Store } from '../store/store.js';
2
+ import { CreatorLoop } from './creator.js';
3
+ import { RestorerLoop } from './restorer.js';
4
+ import { DeliveryWatcherLoop } from './delivery-watcher.js';
5
+ import { startApiServer } from '../api/server.js';
6
+ import { PeerSync } from '../api/peers.js';
7
+ import { Registry8004 } from '../discovery/registry.js';
8
+ import { queryArtifacts, queryNodes, getMetadataValue } from '../discovery/subgraph.js';
9
+ import { RewardClaimLoop } from './reward-claim-loop.js';
10
+ const DEFAULT_API_PORT = 7331;
11
+ export class Daemon {
12
+ config;
13
+ store;
14
+ creatorLoop;
15
+ restorerLoop;
16
+ deliveryWatcherLoop;
17
+ adapter;
18
+ loopPromises = [];
19
+ cachedShutdownState = null;
20
+ apiServer;
21
+ peerSync;
22
+ registry;
23
+ apiPort;
24
+ rewardClaimLoop;
25
+ constructor(config) {
26
+ this.config = config;
27
+ this.store = new Store(config.dbPath);
28
+ this.adapter = config.adapter;
29
+ this.apiPort = config.apiPort ?? parseInt(process.env['JINN_API_PORT'] ?? String(DEFAULT_API_PORT));
30
+ this.creatorLoop = new CreatorLoop(this.adapter, config.desiredStates, this.store);
31
+ this.restorerLoop = new RestorerLoop(this.adapter, config.runner, this.store, '/tmp', 300000, `http://127.0.0.1:${this.apiPort}`);
32
+ this.deliveryWatcherLoop = new DeliveryWatcherLoop(this.adapter);
33
+ if (config.rewardClaim && config.rewardClaim.intervalMs > 0) {
34
+ this.rewardClaimLoop = new RewardClaimLoop({
35
+ ...config.rewardClaim,
36
+ jinnStore: this.store,
37
+ });
38
+ }
39
+ }
40
+ async start() {
41
+ await this.adapter.initialize();
42
+ this.store.setShutdownState('running');
43
+ this.cachedShutdownState = 'running';
44
+ // Start HTTP API server
45
+ this.apiServer = await startApiServer({
46
+ port: this.apiPort,
47
+ store: this.store,
48
+ onArtifactPublished: (artifact) => this.registerArtifact(artifact),
49
+ x402: this.config.x402,
50
+ status: this.config.status,
51
+ });
52
+ // Initialize 8004 registry if configured
53
+ if (this.config.registry) {
54
+ this.registry = new Registry8004(this.config.registry);
55
+ console.log('[daemon] 8004 registry configured');
56
+ }
57
+ // Backfill remote artifacts from subgraph if configured
58
+ const subgraphUrl = this.config.subgraphUrl ?? process.env['JINN_SUBGRAPH_URL'];
59
+ if (subgraphUrl) {
60
+ try {
61
+ await this.backfillFromSubgraph({ url: subgraphUrl });
62
+ }
63
+ catch (err) {
64
+ console.error('[daemon] Subgraph backfill failed (non-fatal):', err instanceof Error ? err.message : err);
65
+ }
66
+ }
67
+ // Start peer sync if peers configured
68
+ const peers = this.config.peers ?? (process.env['JINN_PEERS'] ?? '').split(',').filter(Boolean);
69
+ if (peers.length > 0) {
70
+ this.peerSync = new PeerSync({
71
+ peers,
72
+ store: this.store,
73
+ signer: this.config.signer,
74
+ });
75
+ this.loopPromises.push(this.peerSync.run().catch(err => console.error('[daemon] peer-sync crashed:', err)));
76
+ }
77
+ this.loopPromises.push(this.creatorLoop.run().catch(err => console.error('[daemon] creator crashed:', err)), this.restorerLoop.run().catch(err => console.error('[daemon] restorer crashed:', err)), this.deliveryWatcherLoop.run().catch(err => console.error('[daemon] delivery-watcher crashed:', err)));
78
+ if (this.rewardClaimLoop) {
79
+ this.loopPromises.push(this.rewardClaimLoop.run().catch(err => console.error('[daemon] reward-claim crashed:', err)));
80
+ }
81
+ }
82
+ async stop() {
83
+ this.creatorLoop.stop();
84
+ this.restorerLoop.stop();
85
+ this.deliveryWatcherLoop.stop();
86
+ this.rewardClaimLoop?.stop();
87
+ this.peerSync?.stop();
88
+ // Stop the adapter to unblock any pending async iterators
89
+ await this.adapter.stop();
90
+ await this.apiServer?.close();
91
+ const timeout = this.config.shutdownTimeoutMs ?? 30000;
92
+ await Promise.race([
93
+ Promise.allSettled(this.loopPromises),
94
+ new Promise(r => setTimeout(r, timeout)),
95
+ ]);
96
+ this.store.setShutdownState('clean');
97
+ this.cachedShutdownState = 'clean';
98
+ this.store.close();
99
+ }
100
+ getShutdownState() {
101
+ return this.cachedShutdownState;
102
+ }
103
+ /**
104
+ * Register an artifact on the 8004 registry (fire-and-forget).
105
+ * Called after local artifact publish if registry is configured.
106
+ */
107
+ registerArtifact(artifact) {
108
+ if (!this.registry)
109
+ return;
110
+ const endpoint = this.config.nodeEndpoint ?? `http://localhost:${this.config.apiPort ?? DEFAULT_API_PORT}`;
111
+ this.registry.registerArtifact({ ...artifact, endpoint }).catch(err => {
112
+ console.error(`[daemon] 8004 artifact registration failed (non-fatal): ${err instanceof Error ? err.message : err}`);
113
+ });
114
+ }
115
+ async backfillFromSubgraph(config) {
116
+ console.log(`[daemon] Backfilling from subgraph: ${config.url}`);
117
+ // Backfill artifacts
118
+ const artifacts = await queryArtifacts(config);
119
+ let artifactCount = 0;
120
+ for (const result of artifacts) {
121
+ const artifactId = getMetadataValue(result, 'artifactId');
122
+ const title = getMetadataValue(result, 'title') ?? '';
123
+ const outcome = getMetadataValue(result, 'outcome') ?? 'UNKNOWN';
124
+ const endpoint = getMetadataValue(result, 'endpoint') ?? '';
125
+ const tagsRaw = getMetadataValue(result, 'tags');
126
+ const tags = tagsRaw ? JSON.parse(tagsRaw) : [];
127
+ if (!artifactId || !endpoint)
128
+ continue;
129
+ this.store.insertRemoteArtifact({
130
+ id: artifactId,
131
+ desiredStateId: '',
132
+ requestId: '',
133
+ title,
134
+ tags,
135
+ outcome: outcome,
136
+ ownerAddress: result.owner,
137
+ endpoint,
138
+ });
139
+ artifactCount++;
140
+ }
141
+ // Backfill peer nodes
142
+ const nodes = await queryNodes(config);
143
+ const discoveredPeers = [];
144
+ for (const result of nodes) {
145
+ const endpoint = getMetadataValue(result, 'endpoint');
146
+ if (endpoint)
147
+ discoveredPeers.push(endpoint);
148
+ }
149
+ console.log(`[daemon] Backfill complete: ${artifactCount} artifacts, ${discoveredPeers.length} nodes`);
150
+ // Auto-add discovered peers to peer sync
151
+ if (discoveredPeers.length > 0 && this.peerSync) {
152
+ // PeerSync is already running with configured peers — discovered peers
153
+ // would need to be merged. For now, just log them.
154
+ console.log(`[daemon] Discovered peers: ${discoveredPeers.join(', ')}`);
155
+ }
156
+ }
157
+ }
158
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ExecutionAdapter } from '../adapters/adapter.js';
2
+ export declare class DeliveryWatcherLoop {
3
+ private readonly adapter;
4
+ private stopped;
5
+ private stopResolve;
6
+ private stopPromise;
7
+ constructor(adapter: ExecutionAdapter);
8
+ run(): Promise<void>;
9
+ stop(): void;
10
+ }
@@ -0,0 +1,37 @@
1
+ import { isRecoverableTransactionError } from '../tx-retry.js';
2
+ export class DeliveryWatcherLoop {
3
+ adapter;
4
+ stopped = false;
5
+ stopResolve = null;
6
+ stopPromise;
7
+ constructor(adapter) {
8
+ this.adapter = adapter;
9
+ this.stopPromise = new Promise(resolve => {
10
+ this.stopResolve = resolve;
11
+ });
12
+ }
13
+ async run() {
14
+ while (!this.stopped) {
15
+ try {
16
+ for await (const delivery of this.adapter.watchForDeliveries()) {
17
+ if (this.stopped)
18
+ break;
19
+ // The adapter handles claim + evaluation creation internally.
20
+ // We just drive the iteration and log for observability.
21
+ const type = delivery.desiredState.type ?? 'unknown';
22
+ console.error(`[delivery-watcher] Processed ${type} delivery: ${delivery.requestId.slice(0, 10)}...`);
23
+ }
24
+ }
25
+ catch (err) {
26
+ console.error('[delivery-watcher] Error:', err);
27
+ const delayMs = isRecoverableTransactionError(err) ? 12_000 : 5000;
28
+ await Promise.race([new Promise(r => setTimeout(r, delayMs)), this.stopPromise]);
29
+ }
30
+ }
31
+ }
32
+ stop() {
33
+ this.stopped = true;
34
+ this.stopResolve?.();
35
+ }
36
+ }
37
+ //# sourceMappingURL=delivery-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-watcher.js","sourceRoot":"","sources":["../../src/daemon/delivery-watcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,OAAO,mBAAmB;IAKD;IAJrB,OAAO,GAAG,KAAK,CAAC;IAChB,WAAW,GAAwB,IAAI,CAAC;IACxC,WAAW,CAAgB;IAEnC,YAA6B,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;oBAC/D,IAAI,IAAI,CAAC,OAAO;wBAAE,MAAM;oBACxB,8DAA8D;oBAC9D,yDAAyD;oBACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,SAAS,CAAC;oBACrD,OAAO,CAAC,KAAK,CAAC,gCAAgC,IAAI,cAAc,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACxG,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { ExecutionAdapter } from '../adapters/adapter.js';
2
+ import type { Runner } from '../runner/runner.js';
3
+ import type { Store } from '../store/store.js';
4
+ export declare class RestorerLoop {
5
+ private readonly adapter;
6
+ private readonly runner;
7
+ private readonly store;
8
+ private readonly workingDirectory;
9
+ private readonly timeoutMs;
10
+ private readonly daemonApiUrl?;
11
+ private stopped;
12
+ private requestIterator;
13
+ private stopResolve;
14
+ private stopPromise;
15
+ constructor(adapter: ExecutionAdapter, runner: Runner, store: Store, workingDirectory?: string, timeoutMs?: number, daemonApiUrl?: string | undefined);
16
+ processOne(): Promise<boolean>;
17
+ run(): Promise<void>;
18
+ stop(): void;
19
+ }
@@ -0,0 +1,82 @@
1
+ import { PermanentError, TransientError } from '../types/index.js';
2
+ import { isRecoverableTransactionError } from '../tx-retry.js';
3
+ export class RestorerLoop {
4
+ adapter;
5
+ runner;
6
+ store;
7
+ workingDirectory;
8
+ timeoutMs;
9
+ daemonApiUrl;
10
+ stopped = false;
11
+ requestIterator = null;
12
+ stopResolve = null;
13
+ stopPromise;
14
+ constructor(adapter, runner, store, workingDirectory = '/tmp', timeoutMs = 300000, daemonApiUrl) {
15
+ this.adapter = adapter;
16
+ this.runner = runner;
17
+ this.store = store;
18
+ this.workingDirectory = workingDirectory;
19
+ this.timeoutMs = timeoutMs;
20
+ this.daemonApiUrl = daemonApiUrl;
21
+ this.stopPromise = new Promise(resolve => {
22
+ this.stopResolve = resolve;
23
+ });
24
+ }
25
+ async processOne() {
26
+ if (!this.requestIterator) {
27
+ this.requestIterator = this.adapter.watchForRequests()[Symbol.asyncIterator]();
28
+ }
29
+ const { value: request, done } = await this.requestIterator.next();
30
+ if (done || !request || !request.requestId)
31
+ return false;
32
+ try {
33
+ await this.adapter.claimRequest(request.requestId);
34
+ }
35
+ catch (err) {
36
+ if (err instanceof PermanentError) {
37
+ return true;
38
+ }
39
+ throw err;
40
+ }
41
+ this.store.recordOwnActivity(request.requestId, 'claimed');
42
+ try {
43
+ const result = await this.runner.run(request.desiredState, {
44
+ requestId: request.requestId,
45
+ workingDirectory: this.workingDirectory,
46
+ timeoutMs: this.timeoutMs,
47
+ storePath: this.store.path,
48
+ daemonApiUrl: this.daemonApiUrl,
49
+ });
50
+ await this.adapter.submitResult(request.requestId, result);
51
+ this.store.recordOwnActivity(request.requestId, 'delivered');
52
+ }
53
+ catch (err) {
54
+ if (!(err instanceof TransientError)) {
55
+ console.error(`[restorer] Failed to restore ${request.requestId}:`, err);
56
+ }
57
+ }
58
+ return true;
59
+ }
60
+ async run() {
61
+ while (!this.stopped) {
62
+ try {
63
+ await this.processOne();
64
+ }
65
+ catch (err) {
66
+ if (err instanceof TransientError) {
67
+ await Promise.race([new Promise(r => setTimeout(r, 5000)), this.stopPromise]);
68
+ }
69
+ else {
70
+ console.error('[restorer] Error:', err);
71
+ const delayMs = isRecoverableTransactionError(err) ? 15_000 : 10_000;
72
+ await Promise.race([new Promise(r => setTimeout(r, delayMs)), this.stopPromise]);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ stop() {
78
+ this.stopped = true;
79
+ this.stopResolve?.();
80
+ }
81
+ }
82
+ //# sourceMappingURL=restorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restorer.js","sourceRoot":"","sources":["../../src/daemon/restorer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Periodic stOLAS distributor reward claims for all staked fleet services.
3
+ *
4
+ * Scheduling: interval from config (default 10 minutes). OLAS/Jinn checkpoints are gated by
5
+ * liveness periods (often much longer on mainnet); polling at this cadence is a balance between
6
+ * catching rewards before eviction and RPC/gas overhead. Operators can tune via
7
+ * rewardClaimIntervalMs / JINN_REWARD_CLAIM_INTERVAL_MS. Set interval to 0 to disable.
8
+ */
9
+ import type { PublicClient } from 'viem';
10
+ import type { WalletClient } from 'viem';
11
+ import { FleetStateStore } from '../earning/store.js';
12
+ import { type StolasClaimTickResult } from '../earning/stolas-claim.js';
13
+ import type { Store } from '../store/store.js';
14
+ export interface RewardClaimLoopConfig {
15
+ intervalMs: number;
16
+ publicClient: PublicClient;
17
+ /** Master EOA — same signer as distributor.stake() in bootstrap (pays gas). */
18
+ masterWallet: WalletClient;
19
+ store: FleetStateStore;
20
+ chain: 'base' | 'base-sepolia';
21
+ /** Resolved from getChainConfig (artifact overrides). */
22
+ distributorAddress: string | undefined;
23
+ /** When set, records last claim-loop tick time for GET /v1/status. */
24
+ jinnStore?: Store;
25
+ }
26
+ export type RewardClaimTickConfig = Omit<RewardClaimLoopConfig, 'intervalMs'> & {
27
+ /** When true, per-service claim failures can throw (CLI); daemon omits. */
28
+ strict?: boolean;
29
+ };
30
+ export declare function runRewardClaimOnce(cfg: RewardClaimTickConfig): Promise<StolasClaimTickResult>;
31
+ export declare class RewardClaimLoop {
32
+ private readonly config;
33
+ private stopped;
34
+ constructor(config: RewardClaimLoopConfig);
35
+ stop(): void;
36
+ runOnce(): Promise<void>;
37
+ run(): Promise<void>;
38
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Periodic stOLAS distributor reward claims for all staked fleet services.
3
+ *
4
+ * Scheduling: interval from config (default 10 minutes). OLAS/Jinn checkpoints are gated by
5
+ * liveness periods (often much longer on mainnet); polling at this cadence is a balance between
6
+ * catching rewards before eviction and RPC/gas overhead. Operators can tune via
7
+ * rewardClaimIntervalMs / JINN_REWARD_CLAIM_INTERVAL_MS. Set interval to 0 to disable.
8
+ */
9
+ import { listStolasClaimTargets, tickStolasDistributorClaims, } from '../earning/stolas-claim.js';
10
+ export async function runRewardClaimOnce(cfg) {
11
+ const state = await cfg.store.load(cfg.chain);
12
+ const targets = listStolasClaimTargets(state.services);
13
+ return tickStolasDistributorClaims(cfg.publicClient, cfg.masterWallet, {
14
+ distributorAddress: cfg.distributorAddress,
15
+ stakingMode: state.staking_mode,
16
+ targets,
17
+ strict: cfg.strict,
18
+ });
19
+ }
20
+ export class RewardClaimLoop {
21
+ config;
22
+ stopped = false;
23
+ constructor(config) {
24
+ this.config = config;
25
+ }
26
+ stop() {
27
+ this.stopped = true;
28
+ }
29
+ async runOnce() {
30
+ await runRewardClaimOnce(this.config);
31
+ }
32
+ async run() {
33
+ if (this.config.intervalMs <= 0) {
34
+ return;
35
+ }
36
+ while (!this.stopped) {
37
+ try {
38
+ await this.runOnce();
39
+ }
40
+ catch (err) {
41
+ console.error('[reward-claim] Tick failed (non-fatal):', err instanceof Error ? err.message : err);
42
+ }
43
+ this.config.jinnStore?.setConfigValue('last_reward_claim_tick_at', new Date().toISOString());
44
+ await new Promise(r => setTimeout(r, this.config.intervalMs));
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=reward-claim-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward-claim-loop.js","sourceRoot":"","sources":["../../src/daemon/reward-claim-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAE5B,MAAM,4BAA4B,CAAC;AAqBpC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAA0B;IACjE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvD,OAAO,2BAA2B,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE;QACrE,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;QAC1C,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,OAAO;QACP,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,eAAe;IAGG;IAFrB,OAAO,GAAG,KAAK,CAAC;IAExB,YAA6B,MAA6B;QAA7B,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IAE9D,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrG,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,2BAA2B,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7F,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF"}