@claw-network/node 0.2.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 (190) hide show
  1. package/README.md +49 -0
  2. package/dist/api/api-key-store.d.ts +74 -0
  3. package/dist/api/api-key-store.d.ts.map +1 -0
  4. package/dist/api/api-key-store.js +170 -0
  5. package/dist/api/api-key-store.js.map +1 -0
  6. package/dist/api/auth.d.ts +30 -0
  7. package/dist/api/auth.d.ts.map +1 -0
  8. package/dist/api/auth.js +115 -0
  9. package/dist/api/auth.js.map +1 -0
  10. package/dist/api/legacy.d.ts +26 -0
  11. package/dist/api/legacy.d.ts.map +1 -0
  12. package/dist/api/legacy.js +281 -0
  13. package/dist/api/legacy.js.map +1 -0
  14. package/dist/api/middleware.d.ts +35 -0
  15. package/dist/api/middleware.d.ts.map +1 -0
  16. package/dist/api/middleware.js +75 -0
  17. package/dist/api/middleware.js.map +1 -0
  18. package/dist/api/response.d.ts +85 -0
  19. package/dist/api/response.d.ts.map +1 -0
  20. package/dist/api/response.js +185 -0
  21. package/dist/api/response.js.map +1 -0
  22. package/dist/api/router.d.ts +45 -0
  23. package/dist/api/router.d.ts.map +1 -0
  24. package/dist/api/router.js +183 -0
  25. package/dist/api/router.js.map +1 -0
  26. package/dist/api/routes/admin.d.ts +11 -0
  27. package/dist/api/routes/admin.d.ts.map +1 -0
  28. package/dist/api/routes/admin.js +124 -0
  29. package/dist/api/routes/admin.js.map +1 -0
  30. package/dist/api/routes/contracts.d.ts +7 -0
  31. package/dist/api/routes/contracts.d.ts.map +1 -0
  32. package/dist/api/routes/contracts.js +665 -0
  33. package/dist/api/routes/contracts.js.map +1 -0
  34. package/dist/api/routes/dao.d.ts +7 -0
  35. package/dist/api/routes/dao.d.ts.map +1 -0
  36. package/dist/api/routes/dao.js +549 -0
  37. package/dist/api/routes/dao.js.map +1 -0
  38. package/dist/api/routes/dev.d.ts +9 -0
  39. package/dist/api/routes/dev.d.ts.map +1 -0
  40. package/dist/api/routes/dev.js +273 -0
  41. package/dist/api/routes/dev.js.map +1 -0
  42. package/dist/api/routes/escrows.d.ts +7 -0
  43. package/dist/api/routes/escrows.d.ts.map +1 -0
  44. package/dist/api/routes/escrows.js +454 -0
  45. package/dist/api/routes/escrows.js.map +1 -0
  46. package/dist/api/routes/identities.d.ts +7 -0
  47. package/dist/api/routes/identities.d.ts.map +1 -0
  48. package/dist/api/routes/identities.js +245 -0
  49. package/dist/api/routes/identities.js.map +1 -0
  50. package/dist/api/routes/markets-capabilities.d.ts +7 -0
  51. package/dist/api/routes/markets-capabilities.d.ts.map +1 -0
  52. package/dist/api/routes/markets-capabilities.js +477 -0
  53. package/dist/api/routes/markets-capabilities.js.map +1 -0
  54. package/dist/api/routes/markets-disputes.d.ts +7 -0
  55. package/dist/api/routes/markets-disputes.d.ts.map +1 -0
  56. package/dist/api/routes/markets-disputes.js +102 -0
  57. package/dist/api/routes/markets-disputes.js.map +1 -0
  58. package/dist/api/routes/markets-info.d.ts +7 -0
  59. package/dist/api/routes/markets-info.d.ts.map +1 -0
  60. package/dist/api/routes/markets-info.js +523 -0
  61. package/dist/api/routes/markets-info.js.map +1 -0
  62. package/dist/api/routes/markets-search.d.ts +7 -0
  63. package/dist/api/routes/markets-search.d.ts.map +1 -0
  64. package/dist/api/routes/markets-search.js +38 -0
  65. package/dist/api/routes/markets-search.js.map +1 -0
  66. package/dist/api/routes/markets-tasks.d.ts +7 -0
  67. package/dist/api/routes/markets-tasks.d.ts.map +1 -0
  68. package/dist/api/routes/markets-tasks.js +539 -0
  69. package/dist/api/routes/markets-tasks.js.map +1 -0
  70. package/dist/api/routes/node.d.ts +7 -0
  71. package/dist/api/routes/node.d.ts.map +1 -0
  72. package/dist/api/routes/node.js +53 -0
  73. package/dist/api/routes/node.js.map +1 -0
  74. package/dist/api/routes/nonce.d.ts +10 -0
  75. package/dist/api/routes/nonce.d.ts.map +1 -0
  76. package/dist/api/routes/nonce.js +65 -0
  77. package/dist/api/routes/nonce.js.map +1 -0
  78. package/dist/api/routes/reputations.d.ts +7 -0
  79. package/dist/api/routes/reputations.d.ts.map +1 -0
  80. package/dist/api/routes/reputations.js +243 -0
  81. package/dist/api/routes/reputations.js.map +1 -0
  82. package/dist/api/routes/transfers.d.ts +7 -0
  83. package/dist/api/routes/transfers.d.ts.map +1 -0
  84. package/dist/api/routes/transfers.js +88 -0
  85. package/dist/api/routes/transfers.js.map +1 -0
  86. package/dist/api/routes/wallets.d.ts +7 -0
  87. package/dist/api/routes/wallets.d.ts.map +1 -0
  88. package/dist/api/routes/wallets.js +132 -0
  89. package/dist/api/routes/wallets.js.map +1 -0
  90. package/dist/api/schemas/common.d.ts +45 -0
  91. package/dist/api/schemas/common.d.ts.map +1 -0
  92. package/dist/api/schemas/common.js +30 -0
  93. package/dist/api/schemas/common.js.map +1 -0
  94. package/dist/api/schemas/contracts.d.ts +284 -0
  95. package/dist/api/schemas/contracts.d.ts.map +1 -0
  96. package/dist/api/schemas/contracts.js +79 -0
  97. package/dist/api/schemas/contracts.js.map +1 -0
  98. package/dist/api/schemas/dao.d.ts +271 -0
  99. package/dist/api/schemas/dao.d.ts.map +1 -0
  100. package/dist/api/schemas/dao.js +78 -0
  101. package/dist/api/schemas/dao.js.map +1 -0
  102. package/dist/api/schemas/identity.d.ts +75 -0
  103. package/dist/api/schemas/identity.d.ts.map +1 -0
  104. package/dist/api/schemas/identity.js +32 -0
  105. package/dist/api/schemas/identity.js.map +1 -0
  106. package/dist/api/schemas/markets.d.ts +822 -0
  107. package/dist/api/schemas/markets.d.ts.map +1 -0
  108. package/dist/api/schemas/markets.js +246 -0
  109. package/dist/api/schemas/markets.js.map +1 -0
  110. package/dist/api/schemas/wallet.d.ts +163 -0
  111. package/dist/api/schemas/wallet.d.ts.map +1 -0
  112. package/dist/api/schemas/wallet.js +54 -0
  113. package/dist/api/schemas/wallet.js.map +1 -0
  114. package/dist/api/server.d.ts +45 -0
  115. package/dist/api/server.d.ts.map +1 -0
  116. package/dist/api/server.js +131 -0
  117. package/dist/api/server.js.map +1 -0
  118. package/dist/api/types.d.ts +69 -0
  119. package/dist/api/types.d.ts.map +1 -0
  120. package/dist/api/types.js +196 -0
  121. package/dist/api/types.js.map +1 -0
  122. package/dist/daemon.d.ts +11 -0
  123. package/dist/daemon.d.ts.map +1 -0
  124. package/dist/daemon.js +248 -0
  125. package/dist/daemon.js.map +1 -0
  126. package/dist/index.d.ts +137 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +795 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/indexer/index.d.ts +10 -0
  131. package/dist/indexer/index.d.ts.map +1 -0
  132. package/dist/indexer/index.js +7 -0
  133. package/dist/indexer/index.js.map +1 -0
  134. package/dist/indexer/indexer.d.ts +60 -0
  135. package/dist/indexer/indexer.d.ts.map +1 -0
  136. package/dist/indexer/indexer.js +408 -0
  137. package/dist/indexer/indexer.js.map +1 -0
  138. package/dist/indexer/query.d.ts +141 -0
  139. package/dist/indexer/query.d.ts.map +1 -0
  140. package/dist/indexer/query.js +244 -0
  141. package/dist/indexer/query.js.map +1 -0
  142. package/dist/indexer/store.d.ts +95 -0
  143. package/dist/indexer/store.d.ts.map +1 -0
  144. package/dist/indexer/store.js +250 -0
  145. package/dist/indexer/store.js.map +1 -0
  146. package/dist/logger.d.ts +13 -0
  147. package/dist/logger.d.ts.map +1 -0
  148. package/dist/logger.js +37 -0
  149. package/dist/logger.js.map +1 -0
  150. package/dist/p2p/sync.d.ts +105 -0
  151. package/dist/p2p/sync.d.ts.map +1 -0
  152. package/dist/p2p/sync.js +875 -0
  153. package/dist/p2p/sync.js.map +1 -0
  154. package/dist/policy/liquidity-policy.d.ts +17 -0
  155. package/dist/policy/liquidity-policy.d.ts.map +1 -0
  156. package/dist/policy/liquidity-policy.js +112 -0
  157. package/dist/policy/liquidity-policy.js.map +1 -0
  158. package/dist/services/chain-config.d.ts +226 -0
  159. package/dist/services/chain-config.d.ts.map +1 -0
  160. package/dist/services/chain-config.js +105 -0
  161. package/dist/services/chain-config.js.map +1 -0
  162. package/dist/services/contract-provider.d.ts +44 -0
  163. package/dist/services/contract-provider.d.ts.map +1 -0
  164. package/dist/services/contract-provider.js +167 -0
  165. package/dist/services/contract-provider.js.map +1 -0
  166. package/dist/services/contracts-service.d.ts +192 -0
  167. package/dist/services/contracts-service.d.ts.map +1 -0
  168. package/dist/services/contracts-service.js +336 -0
  169. package/dist/services/contracts-service.js.map +1 -0
  170. package/dist/services/dao-service.d.ts +245 -0
  171. package/dist/services/dao-service.d.ts.map +1 -0
  172. package/dist/services/dao-service.js +389 -0
  173. package/dist/services/dao-service.js.map +1 -0
  174. package/dist/services/identity-service.d.ts +150 -0
  175. package/dist/services/identity-service.d.ts.map +1 -0
  176. package/dist/services/identity-service.js +286 -0
  177. package/dist/services/identity-service.js.map +1 -0
  178. package/dist/services/index.d.ts +20 -0
  179. package/dist/services/index.d.ts.map +1 -0
  180. package/dist/services/index.js +15 -0
  181. package/dist/services/index.js.map +1 -0
  182. package/dist/services/reputation-service.d.ts +128 -0
  183. package/dist/services/reputation-service.d.ts.map +1 -0
  184. package/dist/services/reputation-service.js +204 -0
  185. package/dist/services/reputation-service.js.map +1 -0
  186. package/dist/services/wallet-service.d.ts +201 -0
  187. package/dist/services/wallet-service.d.ts.map +1 -0
  188. package/dist/services/wallet-service.js +402 -0
  189. package/dist/services/wallet-service.js.map +1 -0
  190. package/package.json +66 -0
@@ -0,0 +1,539 @@
1
+ /**
2
+ * Task market routes — /api/v1/markets/tasks
3
+ */
4
+ import { Router } from '../router.js';
5
+ import { ok, created, badRequest, notFound, internalError, paginated, parsePagination, } from '../response.js';
6
+ import { validate, ListingRemoveSchema } from '../schemas/common.js';
7
+ import { TaskPublishSchema, TaskBidSchema, TaskBidActionSchema, TaskAcceptSchema, TaskDeliverSchema, TaskConfirmSchema, TaskReviewSchema, } from '../schemas/markets.js';
8
+ import { resolvePrivateKey, addressFromDid } from '../types.js';
9
+ import { createTaskListingPublishEnvelope, createMarketBidSubmitEnvelope, createMarketBidAcceptEnvelope, createMarketBidRejectEnvelope, createMarketBidWithdrawEnvelope, createMarketOrderCreateEnvelope, createMarketOrderUpdateEnvelope, createMarketSubmissionSubmitEnvelope, createMarketSubmissionReviewEnvelope, createMarketListingRemoveEnvelope, createWalletEscrowCreateEnvelope, createWalletEscrowFundEnvelope, createInfoEscrowReleaseEnvelope, createInfoOrderCompletionEnvelope, createInfoOrderReviewEnvelope, } from '@claw-network/protocol';
10
+ export function marketsTaskRoutes(ctx) {
11
+ const r = new Router();
12
+ // ── POST / — publish task listing ─────────────────────────────
13
+ r.post('/', async (_req, res, route) => {
14
+ const v = validate(TaskPublishSchema, route.body);
15
+ if (!v.success) {
16
+ badRequest(res, v.error, route.url.pathname);
17
+ return;
18
+ }
19
+ const body = v.data;
20
+ const listingId = body.listingId ?? `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
21
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
22
+ if (!privateKey) {
23
+ badRequest(res, 'Key unavailable', route.url.pathname);
24
+ return;
25
+ }
26
+ try {
27
+ const envelope = await createTaskListingPublishEnvelope({
28
+ issuer: body.did,
29
+ privateKey,
30
+ listingId,
31
+ title: body.title,
32
+ description: body.description,
33
+ category: body.category,
34
+ tags: (body.tags ?? []),
35
+ pricing: body.pricing,
36
+ visibility: (body.visibility ?? 'public'),
37
+ marketData: {
38
+ taskType: body.taskType,
39
+ task: body.task,
40
+ timeline: body.timeline,
41
+ workerRequirements: body.workerRequirements,
42
+ bidding: body.bidding,
43
+ milestones: body.milestones,
44
+ },
45
+ restrictions: body.restrictions,
46
+ metadata: body.metadata,
47
+ expiresAt: body.expiresAt,
48
+ status: body.status,
49
+ ts: body.ts ?? Date.now(),
50
+ nonce: body.nonce,
51
+ prev: body.prev,
52
+ });
53
+ const hash = await ctx.publishEvent(envelope);
54
+ created(res, { listingId, txHash: hash }, { self: `/api/v1/markets/tasks/${listingId}` });
55
+ }
56
+ catch (err) {
57
+ internalError(res, err.message || 'Task listing publish failed');
58
+ }
59
+ });
60
+ // ── GET / — list task listings ────────────────────────────────
61
+ r.get('/', async (_req, res, route) => {
62
+ const { page, perPage } = parsePagination(route.query);
63
+ if (ctx.searchMarkets) {
64
+ try {
65
+ const result = ctx.searchMarkets({
66
+ markets: ['task'],
67
+ page,
68
+ pageSize: perPage,
69
+ keyword: route.query.get('keyword') ?? undefined,
70
+ category: route.query.get('category') ?? undefined,
71
+ });
72
+ const r2 = result;
73
+ paginated(res, (r2.listings ?? []), {
74
+ page,
75
+ perPage,
76
+ total: (r2.total ?? 0),
77
+ basePath: '/api/v1/markets/tasks',
78
+ });
79
+ return;
80
+ }
81
+ catch {
82
+ /* fallthrough */
83
+ }
84
+ }
85
+ paginated(res, [], { page, perPage, total: 0, basePath: '/api/v1/markets/tasks' });
86
+ });
87
+ // ── GET /:id — single task listing ────────────────────────────
88
+ r.get('/:id', async (_req, res, route) => {
89
+ const { id } = route.params;
90
+ if (ctx.marketStore) {
91
+ try {
92
+ const listing = await ctx.marketStore.getListing?.(id);
93
+ if (listing) {
94
+ ok(res, listing, { self: `/api/v1/markets/tasks/${id}` });
95
+ return;
96
+ }
97
+ }
98
+ catch {
99
+ /* fallthrough */
100
+ }
101
+ }
102
+ notFound(res, `Task listing ${id} not found`);
103
+ });
104
+ // ── DELETE /:id — remove task listing ─────────────────────────
105
+ r.delete('/:id', async (_req, res, route) => {
106
+ const { id } = route.params;
107
+ const v = validate(ListingRemoveSchema, route.body);
108
+ if (!v.success) {
109
+ badRequest(res, v.error, route.url.pathname);
110
+ return;
111
+ }
112
+ const body = v.data;
113
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
114
+ if (!privateKey) {
115
+ badRequest(res, 'Key unavailable', route.url.pathname);
116
+ return;
117
+ }
118
+ try {
119
+ const envelope = await createMarketListingRemoveEnvelope({
120
+ issuer: body.did,
121
+ privateKey,
122
+ listingId: id,
123
+ resourcePrev: body.prev ?? '',
124
+ ts: body.ts ?? Date.now(),
125
+ nonce: body.nonce,
126
+ prev: body.prev,
127
+ });
128
+ const hash = await ctx.publishEvent(envelope);
129
+ ok(res, { listingId: id, txHash: hash }, { self: `/api/v1/markets/tasks/${id}` });
130
+ }
131
+ catch (err) {
132
+ internalError(res, err.message || 'Task listing remove failed');
133
+ }
134
+ });
135
+ // ── POST /:id/actions/remove — compatibility alias ────────────
136
+ r.post('/:id/actions/remove', async (_req, res, route) => {
137
+ const { id } = route.params;
138
+ const v = validate(ListingRemoveSchema, route.body);
139
+ if (!v.success) {
140
+ badRequest(res, v.error, route.url.pathname);
141
+ return;
142
+ }
143
+ const body = v.data;
144
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
145
+ if (!privateKey) {
146
+ badRequest(res, 'Key unavailable', route.url.pathname);
147
+ return;
148
+ }
149
+ try {
150
+ const envelope = await createMarketListingRemoveEnvelope({
151
+ issuer: body.did,
152
+ privateKey,
153
+ listingId: id,
154
+ resourcePrev: body.prev ?? '',
155
+ ts: body.ts ?? Date.now(),
156
+ nonce: body.nonce,
157
+ prev: body.prev,
158
+ });
159
+ const hash = await ctx.publishEvent(envelope);
160
+ ok(res, { listingId: id, txHash: hash }, { self: `/api/v1/markets/tasks/${id}` });
161
+ }
162
+ catch (err) {
163
+ internalError(res, err.message || 'Task listing remove failed');
164
+ }
165
+ });
166
+ // ── POST /:id/bids — submit bid ──────────────────────────────
167
+ r.post('/:id/bids', async (_req, res, route) => {
168
+ const { id } = route.params;
169
+ const v = validate(TaskBidSchema, route.body);
170
+ if (!v.success) {
171
+ badRequest(res, v.error, route.url.pathname);
172
+ return;
173
+ }
174
+ const body = v.data;
175
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
176
+ if (!privateKey) {
177
+ badRequest(res, 'Key unavailable', route.url.pathname);
178
+ return;
179
+ }
180
+ try {
181
+ const bidId = body.bidId ?? `bid-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
182
+ const envelope = await createMarketBidSubmitEnvelope({
183
+ issuer: body.did,
184
+ privateKey,
185
+ bidId,
186
+ taskId: id,
187
+ proposal: {
188
+ price: String(body.price),
189
+ timeline: body.timeline,
190
+ approach: body.approach,
191
+ milestones: body.milestones,
192
+ },
193
+ ts: body.ts ?? Date.now(),
194
+ nonce: body.nonce,
195
+ prev: body.prev,
196
+ });
197
+ const hash = await ctx.publishEvent(envelope);
198
+ created(res, { bidId, txHash: hash }, { self: `/api/v1/markets/tasks/${id}/bids/${bidId}` });
199
+ }
200
+ catch (err) {
201
+ internalError(res, err.message || 'Bid submit failed');
202
+ }
203
+ });
204
+ // ── GET /:id/bids — list bids for task ────────────────────────
205
+ r.get('/:id/bids', async (_req, res, route) => {
206
+ const { id } = route.params;
207
+ // MarketSearchStore does not index bids — return empty list
208
+ ok(res, [], { self: `/api/v1/markets/tasks/${id}/bids` });
209
+ });
210
+ // ── POST /:id/bids/:bidId/actions/accept ──────────────────────
211
+ r.post('/:id/bids/:bidId/actions/accept', async (_req, res, route) => {
212
+ const { id, bidId } = route.params;
213
+ const v = validate(TaskAcceptSchema, route.body);
214
+ if (!v.success) {
215
+ badRequest(res, v.error, route.url.pathname);
216
+ return;
217
+ }
218
+ const body = v.data;
219
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
220
+ if (!privateKey) {
221
+ badRequest(res, 'Key unavailable', route.url.pathname);
222
+ return;
223
+ }
224
+ try {
225
+ const orderId = body.orderId ?? `order-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
226
+ const escrowId = body.escrowId ?? `escrow-${orderId}`;
227
+ const ts = body.ts ?? Date.now();
228
+ let nonce = body.nonce;
229
+ // accept bid
230
+ const e1 = await createMarketBidAcceptEnvelope({
231
+ issuer: body.did,
232
+ privateKey,
233
+ bidId: body.bidId ?? bidId,
234
+ resourcePrev: body.prev ?? '',
235
+ ts,
236
+ nonce,
237
+ prev: body.prev,
238
+ });
239
+ const h1 = await ctx.publishEvent(e1);
240
+ // create order
241
+ const listing = ctx.marketStore ? await ctx.marketStore.getListing?.(id) : undefined;
242
+ const listingSellerDid = listing && typeof listing === 'object'
243
+ ? (listing.seller?.did ?? undefined)
244
+ : undefined;
245
+ const e2 = await createMarketOrderCreateEnvelope({
246
+ issuer: body.did,
247
+ privateKey,
248
+ listingId: id,
249
+ orderId,
250
+ marketType: 'task',
251
+ sellerDid: listingSellerDid,
252
+ items: [{ listingId: id, quantity: 1, unitPrice: '1' }],
253
+ pricing: { subtotal: '1', total: '1' },
254
+ ts: ts + 1,
255
+ nonce: ++nonce,
256
+ prev: h1,
257
+ });
258
+ const h2 = await ctx.publishEvent(e2);
259
+ // create escrow
260
+ const e3 = await createWalletEscrowCreateEnvelope({
261
+ issuer: body.did,
262
+ privateKey,
263
+ escrowId,
264
+ depositor: addressFromDid(body.did),
265
+ beneficiary: addressFromDid(body.did),
266
+ amount: '1',
267
+ releaseRules: body.releaseRules ?? [{ type: 'task_completion' }],
268
+ ts: ts + 2,
269
+ nonce: ++nonce,
270
+ prev: h2,
271
+ });
272
+ const h3 = await ctx.publishEvent(e3);
273
+ // fund escrow
274
+ const e4 = await createWalletEscrowFundEnvelope({
275
+ issuer: body.did,
276
+ privateKey,
277
+ escrowId,
278
+ amount: '1',
279
+ resourcePrev: h3,
280
+ ts: ts + 3,
281
+ nonce: ++nonce,
282
+ prev: h3,
283
+ });
284
+ const h4 = await ctx.publishEvent(e4);
285
+ // mark paid
286
+ const e5 = await createMarketOrderUpdateEnvelope({
287
+ issuer: body.did,
288
+ privateKey,
289
+ orderId,
290
+ status: 'payment_pending',
291
+ payment: { status: 'escrowed', escrowId },
292
+ resourcePrev: h4,
293
+ ts: ts + 4,
294
+ nonce: ++nonce,
295
+ prev: h4,
296
+ });
297
+ const h5 = await ctx.publishEvent(e5);
298
+ created(res, {
299
+ bidId: body.bidId ?? bidId,
300
+ orderId,
301
+ escrowId,
302
+ bidAcceptHash: h1,
303
+ orderHash: h2,
304
+ escrowCreateHash: h3,
305
+ escrowFundHash: h4,
306
+ paymentHash: h5,
307
+ }, { self: `/api/v1/markets/tasks/${id}` });
308
+ }
309
+ catch (err) {
310
+ internalError(res, err.message || 'Bid accept failed');
311
+ }
312
+ });
313
+ // ── POST /:id/bids/:bidId/actions/reject ──────────────────────
314
+ r.post('/:id/bids/:bidId/actions/reject', async (_req, res, route) => {
315
+ const { id, bidId } = route.params;
316
+ const v = validate(TaskBidActionSchema, route.body);
317
+ if (!v.success) {
318
+ badRequest(res, v.error, route.url.pathname);
319
+ return;
320
+ }
321
+ const body = v.data;
322
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
323
+ if (!privateKey) {
324
+ badRequest(res, 'Key unavailable', route.url.pathname);
325
+ return;
326
+ }
327
+ try {
328
+ const envelope = await createMarketBidRejectEnvelope({
329
+ issuer: body.did,
330
+ privateKey,
331
+ bidId: body.bidId ?? bidId,
332
+ resourcePrev: body.prev ?? '',
333
+ ts: body.ts ?? Date.now(),
334
+ nonce: body.nonce,
335
+ prev: body.prev,
336
+ });
337
+ const hash = await ctx.publishEvent(envelope);
338
+ ok(res, { bidId: body.bidId ?? bidId, txHash: hash }, { self: `/api/v1/markets/tasks/${id}` });
339
+ }
340
+ catch (err) {
341
+ internalError(res, err.message || 'Bid reject failed');
342
+ }
343
+ });
344
+ // ── POST /:id/bids/:bidId/actions/withdraw ────────────────────
345
+ r.post('/:id/bids/:bidId/actions/withdraw', async (_req, res, route) => {
346
+ const { id, bidId } = route.params;
347
+ const v = validate(TaskBidActionSchema, route.body);
348
+ if (!v.success) {
349
+ badRequest(res, v.error, route.url.pathname);
350
+ return;
351
+ }
352
+ const body = v.data;
353
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
354
+ if (!privateKey) {
355
+ badRequest(res, 'Key unavailable', route.url.pathname);
356
+ return;
357
+ }
358
+ try {
359
+ const envelope = await createMarketBidWithdrawEnvelope({
360
+ issuer: body.did,
361
+ privateKey,
362
+ bidId: body.bidId ?? bidId,
363
+ resourcePrev: body.prev ?? '',
364
+ ts: body.ts ?? Date.now(),
365
+ nonce: body.nonce,
366
+ prev: body.prev,
367
+ });
368
+ const hash = await ctx.publishEvent(envelope);
369
+ ok(res, { bidId: body.bidId ?? bidId, txHash: hash }, { self: `/api/v1/markets/tasks/${id}` });
370
+ }
371
+ catch (err) {
372
+ internalError(res, err.message || 'Bid withdraw failed');
373
+ }
374
+ });
375
+ // ── POST /:id/actions/deliver ─────────────────────────────────
376
+ r.post('/:id/actions/deliver', async (_req, res, route) => {
377
+ const { id } = route.params;
378
+ const v = validate(TaskDeliverSchema, route.body);
379
+ if (!v.success) {
380
+ badRequest(res, v.error, route.url.pathname);
381
+ return;
382
+ }
383
+ const body = v.data;
384
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
385
+ if (!privateKey) {
386
+ badRequest(res, 'Key unavailable', route.url.pathname);
387
+ return;
388
+ }
389
+ try {
390
+ const submissionId = body.submissionId ?? `sub-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
391
+ const ts = body.ts ?? Date.now();
392
+ const e1 = await createMarketSubmissionSubmitEnvelope({
393
+ issuer: body.did,
394
+ privateKey,
395
+ orderId: body.orderId,
396
+ submissionId,
397
+ deliverables: body.deliverables,
398
+ notes: body.notes,
399
+ ts,
400
+ nonce: body.nonce,
401
+ prev: body.prev,
402
+ });
403
+ const h1 = await ctx.publishEvent(e1);
404
+ const e2 = await createMarketOrderUpdateEnvelope({
405
+ issuer: body.did,
406
+ privateKey,
407
+ orderId: body.orderId,
408
+ status: 'delivered',
409
+ resourcePrev: h1,
410
+ ts: ts + 1,
411
+ nonce: body.nonce + 1,
412
+ prev: h1,
413
+ });
414
+ const h2 = await ctx.publishEvent(e2);
415
+ ok(res, { submissionId, submissionHash: h1, orderUpdateHash: h2 }, { self: `/api/v1/markets/tasks/${id}` });
416
+ }
417
+ catch (err) {
418
+ internalError(res, err.message || 'Task delivery failed');
419
+ }
420
+ });
421
+ // ── POST /:id/actions/confirm ─────────────────────────────────
422
+ r.post('/:id/actions/confirm', async (_req, res, route) => {
423
+ const { id } = route.params;
424
+ const v = validate(TaskConfirmSchema, route.body);
425
+ if (!v.success) {
426
+ badRequest(res, v.error, route.url.pathname);
427
+ return;
428
+ }
429
+ const body = v.data;
430
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
431
+ if (!privateKey) {
432
+ badRequest(res, 'Key unavailable', route.url.pathname);
433
+ return;
434
+ }
435
+ try {
436
+ const ts = body.ts ?? Date.now();
437
+ let nonce = body.nonce;
438
+ const e1 = await createMarketSubmissionReviewEnvelope({
439
+ issuer: body.did,
440
+ privateKey,
441
+ submissionId: body.submissionId,
442
+ resourcePrev: body.prev ?? '',
443
+ approved: body.approved,
444
+ feedback: body.feedback,
445
+ rating: body.rating,
446
+ revisionDeadline: body.revisionDeadline,
447
+ ts,
448
+ nonce,
449
+ prev: body.prev,
450
+ });
451
+ const h1 = await ctx.publishEvent(e1);
452
+ const result = { submissionReviewHash: h1 };
453
+ if (body.approved && body.escrowId) {
454
+ const e2 = await createInfoEscrowReleaseEnvelope({
455
+ issuer: body.did,
456
+ privateKey,
457
+ escrowId: body.escrowId,
458
+ resourcePrev: h1,
459
+ amount: '0',
460
+ ruleId: body.ruleId ?? 'task_completion',
461
+ ts: ts + 1,
462
+ nonce: ++nonce,
463
+ prev: h1,
464
+ });
465
+ const h2 = await ctx.publishEvent(e2);
466
+ result.escrowReleaseHash = h2;
467
+ const e3 = await createInfoOrderCompletionEnvelope({
468
+ issuer: body.did,
469
+ privateKey,
470
+ orderId: body.orderId,
471
+ resourcePrev: h2,
472
+ ts: ts + 2,
473
+ nonce: ++nonce,
474
+ prev: h2,
475
+ });
476
+ const h3 = await ctx.publishEvent(e3);
477
+ result.orderUpdateHash = h3;
478
+ }
479
+ else if (!body.approved) {
480
+ const e2 = await createMarketOrderUpdateEnvelope({
481
+ issuer: body.did,
482
+ privateKey,
483
+ orderId: body.orderId,
484
+ status: 'in_progress',
485
+ resourcePrev: h1,
486
+ ts: ts + 1,
487
+ nonce: ++nonce,
488
+ prev: h1,
489
+ });
490
+ const h2 = await ctx.publishEvent(e2);
491
+ result.orderUpdateHash = h2;
492
+ }
493
+ ok(res, result, { self: `/api/v1/markets/tasks/${id}` });
494
+ }
495
+ catch (err) {
496
+ internalError(res, err.message || 'Task confirm failed');
497
+ }
498
+ });
499
+ // ── POST /:id/actions/review ──────────────────────────────────
500
+ r.post('/:id/actions/review', async (_req, res, route) => {
501
+ const { id } = route.params;
502
+ const v = validate(TaskReviewSchema, route.body);
503
+ if (!v.success) {
504
+ badRequest(res, v.error, route.url.pathname);
505
+ return;
506
+ }
507
+ const body = v.data;
508
+ const privateKey = await resolvePrivateKey(ctx.config.dataDir, body.did, body.passphrase);
509
+ if (!privateKey) {
510
+ badRequest(res, 'Key unavailable', route.url.pathname);
511
+ return;
512
+ }
513
+ try {
514
+ const envelope = await createInfoOrderReviewEnvelope({
515
+ issuer: body.did,
516
+ privateKey,
517
+ orderId: body.orderId,
518
+ resourcePrev: body.prev ?? '',
519
+ status: 'completed',
520
+ review: {
521
+ rating: body.rating,
522
+ comment: body.comment,
523
+ ...(body.detailedRatings ? { detailedRatings: body.detailedRatings } : {}),
524
+ },
525
+ by: body.by,
526
+ ts: body.ts ?? Date.now(),
527
+ nonce: body.nonce,
528
+ prev: body.prev,
529
+ });
530
+ const hash = await ctx.publishEvent(envelope);
531
+ ok(res, { orderUpdateHash: hash }, { self: `/api/v1/markets/tasks/${id}` });
532
+ }
533
+ catch (err) {
534
+ internalError(res, err.message || 'Task review failed');
535
+ }
536
+ });
537
+ return r;
538
+ }
539
+ //# sourceMappingURL=markets-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markets-tasks.js","sourceRoot":"","sources":["../../../src/api/routes/markets-tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Node routes — GET /api/v1/node, GET /api/v1/node/peers
3
+ */
4
+ import { Router } from '../router.js';
5
+ import type { RuntimeContext } from '../types.js';
6
+ export declare function nodeRoutes(ctx: RuntimeContext): Router;
7
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/api/routes/node.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CA+CtD"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Node routes — GET /api/v1/node, GET /api/v1/node/peers
3
+ */
4
+ import { Router } from '../router.js';
5
+ import { ok, internalError } from '../response.js';
6
+ export function nodeRoutes(ctx) {
7
+ const r = new Router();
8
+ // GET /api/v1/node — combined status + config
9
+ r.get('/', async (_req, res) => {
10
+ if (!ctx.getNodeStatus) {
11
+ internalError(res, 'Node status unavailable');
12
+ return;
13
+ }
14
+ try {
15
+ const status = await ctx.getNodeStatus();
16
+ const config = ctx.getNodeConfig ? await ctx.getNodeConfig() : {};
17
+ ok(res, { ...status, config }, { self: '/api/v1/node' });
18
+ }
19
+ catch {
20
+ internalError(res, 'Failed to read node status');
21
+ }
22
+ });
23
+ // GET /api/v1/node/peers
24
+ r.get('/peers', async (_req, res) => {
25
+ if (!ctx.getNodePeers) {
26
+ internalError(res, 'Peer list unavailable');
27
+ return;
28
+ }
29
+ try {
30
+ const result = await ctx.getNodePeers();
31
+ ok(res, result, { self: '/api/v1/node/peers' });
32
+ }
33
+ catch {
34
+ internalError(res, 'Failed to read peers');
35
+ }
36
+ });
37
+ // GET /api/v1/node/config
38
+ r.get('/config', async (_req, res) => {
39
+ if (!ctx.getNodeConfig) {
40
+ internalError(res, 'Node config unavailable');
41
+ return;
42
+ }
43
+ try {
44
+ const config = await ctx.getNodeConfig();
45
+ ok(res, config, { self: '/api/v1/node/config' });
46
+ }
47
+ catch {
48
+ internalError(res, 'Failed to read node config');
49
+ }
50
+ });
51
+ return r;
52
+ }
53
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/api/routes/node.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,UAAU,UAAU,CAAC,GAAmB;IAC5C,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;IAEvB,8CAA8C;IAC9C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAClC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;YACxC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACnC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;YACzC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Nonce routes — /api/v1/nonce
3
+ *
4
+ * Returns the EVM transaction count (nonce) for the address
5
+ * derived from a DID or for a raw 0x… address.
6
+ */
7
+ import { Router } from '../router.js';
8
+ import type { RuntimeContext } from '../types.js';
9
+ export declare function nonceRoutes(ctx: RuntimeContext): Router;
10
+ //# sourceMappingURL=nonce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce.d.ts","sourceRoot":"","sources":["../../../src/api/routes/nonce.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA8BlD,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAwCvD"}