@lucid-agents/taskmarket 0.7.0 → 0.7.1
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.
- package/dist/index.js +6814 -21
- package/package.json +5 -4
- package/dist/commands/address.js +0 -10
- package/dist/commands/address.js.map +0 -1
- package/dist/commands/agents.js +0 -23
- package/dist/commands/agents.js.map +0 -1
- package/dist/commands/daemon.js +0 -258
- package/dist/commands/daemon.js.map +0 -1
- package/dist/commands/deposit.js +0 -34
- package/dist/commands/deposit.js.map +0 -1
- package/dist/commands/identity.js +0 -22
- package/dist/commands/identity.js.map +0 -1
- package/dist/commands/inbox.js +0 -19
- package/dist/commands/inbox.js.map +0 -1
- package/dist/commands/init.js +0 -74
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/stats.js +0 -35
- package/dist/commands/stats.js.map +0 -1
- package/dist/commands/task/accept.js +0 -15
- package/dist/commands/task/accept.js.map +0 -1
- package/dist/commands/task/bid.js +0 -16
- package/dist/commands/task/bid.js.map +0 -1
- package/dist/commands/task/claim.js +0 -19
- package/dist/commands/task/claim.js.map +0 -1
- package/dist/commands/task/create.js +0 -41
- package/dist/commands/task/create.js.map +0 -1
- package/dist/commands/task/download.js +0 -40
- package/dist/commands/task/download.js.map +0 -1
- package/dist/commands/task/get.js +0 -14
- package/dist/commands/task/get.js.map +0 -1
- package/dist/commands/task/index.js +0 -31
- package/dist/commands/task/index.js.map +0 -1
- package/dist/commands/task/pitch.js +0 -22
- package/dist/commands/task/pitch.js.map +0 -1
- package/dist/commands/task/proof.js +0 -24
- package/dist/commands/task/proof.js.map +0 -1
- package/dist/commands/task/rate.js +0 -23
- package/dist/commands/task/rate.js.map +0 -1
- package/dist/commands/task/search.js +0 -38
- package/dist/commands/task/search.js.map +0 -1
- package/dist/commands/task/select-winner.js +0 -20
- package/dist/commands/task/select-winner.js.map +0 -1
- package/dist/commands/task/select-worker.js +0 -24
- package/dist/commands/task/select-worker.js.map +0 -1
- package/dist/commands/task/submissions.js +0 -18
- package/dist/commands/task/submissions.js.map +0 -1
- package/dist/commands/task/submit.js +0 -23
- package/dist/commands/task/submit.js.map +0 -1
- package/dist/commands/wallet/balance.js +0 -17
- package/dist/commands/wallet/balance.js.map +0 -1
- package/dist/commands/wallet/import.js +0 -96
- package/dist/commands/wallet/import.js.map +0 -1
- package/dist/commands/wallet/index.js +0 -9
- package/dist/commands/wallet/index.js.map +0 -1
- package/dist/commands/wallet/set-withdrawal-address.js +0 -33
- package/dist/commands/wallet/set-withdrawal-address.js.map +0 -1
- package/dist/commands/withdraw.js +0 -62
- package/dist/commands/withdraw.js.map +0 -1
- package/dist/commands/xmtp.js +0 -321
- package/dist/commands/xmtp.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/agent.js +0 -21
- package/dist/lib/agent.js.map +0 -1
- package/dist/lib/api.js +0 -28
- package/dist/lib/api.js.map +0 -1
- package/dist/lib/keystore.js +0 -62
- package/dist/lib/keystore.js.map +0 -1
- package/dist/lib/output.js +0 -8
- package/dist/lib/output.js.map +0 -1
- package/dist/lib/signer.js +0 -58
- package/dist/lib/signer.js.map +0 -1
- package/dist/lib/x402.js +0 -55
- package/dist/lib/x402.js.map +0 -1
- package/dist/lib/xmtp-client.js +0 -620
- package/dist/lib/xmtp-client.js.map +0 -1
- package/dist/lib/xmtp-envelope.js +0 -26
- package/dist/lib/xmtp-envelope.js.map +0 -1
- package/dist/lib/xmtp-query.js +0 -36
- package/dist/lib/xmtp-query.js.map +0 -1
- package/dist/lib/xmtp-stream.js +0 -71
- package/dist/lib/xmtp-stream.js.map +0 -1
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { toHex } from 'viem';
|
|
3
|
-
import { loadKeystore } from '../lib/keystore.js';
|
|
4
|
-
import { signTypedData } from '../lib/signer.js';
|
|
5
|
-
import { apiGet, apiPost } from '../lib/api.js';
|
|
6
|
-
import { printResult, printError } from '../lib/output.js';
|
|
7
|
-
const USDC_TYPES = {
|
|
8
|
-
TransferWithAuthorization: [
|
|
9
|
-
{ name: 'from', type: 'address' },
|
|
10
|
-
{ name: 'to', type: 'address' },
|
|
11
|
-
{ name: 'value', type: 'uint256' },
|
|
12
|
-
{ name: 'validAfter', type: 'uint256' },
|
|
13
|
-
{ name: 'validBefore', type: 'uint256' },
|
|
14
|
-
{ name: 'nonce', type: 'bytes32' },
|
|
15
|
-
],
|
|
16
|
-
};
|
|
17
|
-
export const withdrawCommand = new Command('withdraw')
|
|
18
|
-
.description('Withdraw USDC to the registered withdrawal address')
|
|
19
|
-
.argument('<amount>', 'Amount in USDC (e.g. 5 for 5 USDC)')
|
|
20
|
-
.action(async (amount) => {
|
|
21
|
-
const parsed = parseFloat(amount);
|
|
22
|
-
if (isNaN(parsed) || parsed <= 0) {
|
|
23
|
-
printError('Invalid amount: must be a positive number (e.g. 5 for 5 USDC)');
|
|
24
|
-
}
|
|
25
|
-
const amountBaseUnits = String(Math.round(parsed * 1_000_000));
|
|
26
|
-
let keystore;
|
|
27
|
-
try {
|
|
28
|
-
keystore = await loadKeystore();
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
printError('No keystore found. Run `taskmarket init` first.');
|
|
32
|
-
}
|
|
33
|
-
const from = keystore.walletAddress;
|
|
34
|
-
const addressResponse = (await apiGet(`/api/wallet/withdrawal-address?address=${from}`));
|
|
35
|
-
if (!addressResponse.withdrawalAddress) {
|
|
36
|
-
printError('No withdrawal address set. Run: taskmarket wallet set-withdrawal-address <address>');
|
|
37
|
-
}
|
|
38
|
-
const { withdrawalAddress, usdcDomain } = addressResponse;
|
|
39
|
-
const now = Math.floor(Date.now() / 1000);
|
|
40
|
-
const authorization = {
|
|
41
|
-
from,
|
|
42
|
-
to: withdrawalAddress,
|
|
43
|
-
value: amountBaseUnits,
|
|
44
|
-
validAfter: String(now - 60),
|
|
45
|
-
validBefore: String(now + 300),
|
|
46
|
-
nonce: toHex(crypto.getRandomValues(new Uint8Array(32))),
|
|
47
|
-
};
|
|
48
|
-
const signature = await signTypedData({
|
|
49
|
-
domain: usdcDomain,
|
|
50
|
-
types: USDC_TYPES,
|
|
51
|
-
primaryType: 'TransferWithAuthorization',
|
|
52
|
-
message: authorization,
|
|
53
|
-
}, keystore);
|
|
54
|
-
const result = (await apiPost('/api/wallet/withdraw', {
|
|
55
|
-
from,
|
|
56
|
-
amountBaseUnits,
|
|
57
|
-
authorization,
|
|
58
|
-
signature,
|
|
59
|
-
}));
|
|
60
|
-
printResult({ txHash: result.txHash, amountBaseUnits: result.amountBaseUnits, to: result.to });
|
|
61
|
-
});
|
|
62
|
-
//# sourceMappingURL=withdraw.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../src/commands/withdraw.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/xmtp.js
DELETED
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { apiGet, apiPost } from '../lib/api.js';
|
|
3
|
-
import { loadKeystore, saveKeystore } from '../lib/keystore.js';
|
|
4
|
-
import { printResult } from '../lib/output.js';
|
|
5
|
-
import { createXmtpClient, listenForEnvelopes, runQueryWithClient, sendMessageEnvelope, } from '../lib/xmtp-client.js';
|
|
6
|
-
import { buildEnvelope } from '../lib/xmtp-envelope.js';
|
|
7
|
-
function isAddress(value) {
|
|
8
|
-
return /^0x[a-fA-F0-9]{40}$/.test(value);
|
|
9
|
-
}
|
|
10
|
-
function parseJsonPayload(value) {
|
|
11
|
-
const parsed = JSON.parse(value);
|
|
12
|
-
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
13
|
-
throw new Error('Payload must be a JSON object');
|
|
14
|
-
}
|
|
15
|
-
return parsed;
|
|
16
|
-
}
|
|
17
|
-
async function resolveInboxId(to) {
|
|
18
|
-
// Raw inboxId passed directly — no resolution needed
|
|
19
|
-
if (!isAddress(to) && to.length === 64 && /^[0-9a-f]+$/.test(to)) {
|
|
20
|
-
return to;
|
|
21
|
-
}
|
|
22
|
-
const param = isAddress(to)
|
|
23
|
-
? `address=${encodeURIComponent(to)}`
|
|
24
|
-
: `agentId=${encodeURIComponent(to)}`;
|
|
25
|
-
const result = (await apiGet(`/api/xmtp/resolve?${param}`));
|
|
26
|
-
if (!result.inboxId) {
|
|
27
|
-
const label = isAddress(to) ? `address ${to}` : `agent "${to}"`;
|
|
28
|
-
throw new Error(`No XMTP inbox found for ${label}`);
|
|
29
|
-
}
|
|
30
|
-
return result.inboxId;
|
|
31
|
-
}
|
|
32
|
-
function getDefaultQueryTimeoutMs() {
|
|
33
|
-
const raw = process.env.TASKMARKET_XMTP_QUERY_TIMEOUT_MS;
|
|
34
|
-
if (!raw) {
|
|
35
|
-
return 10_000;
|
|
36
|
-
}
|
|
37
|
-
const parsed = Number(raw);
|
|
38
|
-
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
39
|
-
throw new Error('TASKMARKET_XMTP_QUERY_TIMEOUT_MS must be a positive number');
|
|
40
|
-
}
|
|
41
|
-
return Math.floor(parsed);
|
|
42
|
-
}
|
|
43
|
-
export const xmtpCommand = new Command('xmtp').description('Manage XMTP messaging for this agent');
|
|
44
|
-
xmtpCommand
|
|
45
|
-
.command('init')
|
|
46
|
-
.description('Initialize XMTP client and register installation metadata with backend')
|
|
47
|
-
.action(async () => {
|
|
48
|
-
const keystore = await loadKeystore();
|
|
49
|
-
const client = await createXmtpClient({
|
|
50
|
-
walletAddress: keystore.walletAddress,
|
|
51
|
-
existingInboxId: keystore.xmtpInboxId,
|
|
52
|
-
existingInstallationId: keystore.xmtpInstallationId,
|
|
53
|
-
existingDbPath: keystore.xmtpDbPath,
|
|
54
|
-
keystore,
|
|
55
|
-
});
|
|
56
|
-
const status = (await apiPost('/api/xmtp/bootstrap', {
|
|
57
|
-
deviceId: keystore.deviceId,
|
|
58
|
-
apiToken: keystore.apiToken,
|
|
59
|
-
inboxId: client.inboxId,
|
|
60
|
-
installationId: client.installationId,
|
|
61
|
-
dbPath: client.dbPath,
|
|
62
|
-
clientVersion: process.env.npm_package_version ?? 'unknown',
|
|
63
|
-
}));
|
|
64
|
-
await saveKeystore({
|
|
65
|
-
...keystore,
|
|
66
|
-
xmtpInboxId: status.inboxId,
|
|
67
|
-
xmtpInstallationId: status.installationId,
|
|
68
|
-
xmtpDbPath: client.dbPath,
|
|
69
|
-
});
|
|
70
|
-
printResult({ policyMode: status.policyMode });
|
|
71
|
-
});
|
|
72
|
-
xmtpCommand
|
|
73
|
-
.command('status')
|
|
74
|
-
.description('Check XMTP status and active installation state')
|
|
75
|
-
.action(async () => {
|
|
76
|
-
const keystore = await loadKeystore();
|
|
77
|
-
const result = (await apiGet(`/api/xmtp/status?deviceId=${encodeURIComponent(keystore.deviceId)}`, {
|
|
78
|
-
headers: {
|
|
79
|
-
'x-taskmarket-api-token': keystore.apiToken,
|
|
80
|
-
},
|
|
81
|
-
}));
|
|
82
|
-
printResult(result);
|
|
83
|
-
});
|
|
84
|
-
xmtpCommand
|
|
85
|
-
.command('send')
|
|
86
|
-
.description('Send a structured XMTP envelope to a peer')
|
|
87
|
-
.requiredOption('--to <addressOrInboxId>', 'Target wallet address or inboxId')
|
|
88
|
-
.requiredOption('--type <type>', 'Envelope type')
|
|
89
|
-
.requiredOption('--json <payloadJson>', 'JSON object payload')
|
|
90
|
-
.action(async (options) => {
|
|
91
|
-
const payload = parseJsonPayload(options.json);
|
|
92
|
-
const keystore = await loadKeystore();
|
|
93
|
-
const client = await createXmtpClient({
|
|
94
|
-
walletAddress: keystore.walletAddress,
|
|
95
|
-
existingInboxId: keystore.xmtpInboxId,
|
|
96
|
-
existingInstallationId: keystore.xmtpInstallationId,
|
|
97
|
-
existingDbPath: keystore.xmtpDbPath,
|
|
98
|
-
keystore,
|
|
99
|
-
});
|
|
100
|
-
const toInboxId = await resolveInboxId(options.to);
|
|
101
|
-
const senderInboxId = keystore.xmtpInboxId ?? client.inboxId;
|
|
102
|
-
const envelope = buildEnvelope({
|
|
103
|
-
type: options.type,
|
|
104
|
-
senderInboxId,
|
|
105
|
-
senderAddress: keystore.walletAddress,
|
|
106
|
-
payload,
|
|
107
|
-
});
|
|
108
|
-
await sendMessageEnvelope(client, toInboxId, envelope);
|
|
109
|
-
printResult({
|
|
110
|
-
sent: true,
|
|
111
|
-
requestId: envelope.requestId,
|
|
112
|
-
toInboxId,
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
xmtpCommand
|
|
116
|
-
.command('query')
|
|
117
|
-
.description('Send query envelope and wait for correlated response')
|
|
118
|
-
.requiredOption('--to <addressOrInboxId>', 'Target wallet address or inboxId')
|
|
119
|
-
.requiredOption('--type <type>', 'Envelope type')
|
|
120
|
-
.requiredOption('--json <payloadJson>', 'JSON object payload')
|
|
121
|
-
.option('--timeout-ms <timeoutMs>', 'Query timeout in milliseconds')
|
|
122
|
-
.action(async (options) => {
|
|
123
|
-
const payload = parseJsonPayload(options.json);
|
|
124
|
-
const timeoutMs = options.timeoutMs ? Number(options.timeoutMs) : getDefaultQueryTimeoutMs();
|
|
125
|
-
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
126
|
-
throw new Error('timeout-ms must be a positive number');
|
|
127
|
-
}
|
|
128
|
-
const keystore = await loadKeystore();
|
|
129
|
-
const client = await createXmtpClient({
|
|
130
|
-
walletAddress: keystore.walletAddress,
|
|
131
|
-
existingInboxId: keystore.xmtpInboxId,
|
|
132
|
-
existingInstallationId: keystore.xmtpInstallationId,
|
|
133
|
-
existingDbPath: keystore.xmtpDbPath,
|
|
134
|
-
keystore,
|
|
135
|
-
});
|
|
136
|
-
const toInboxId = await resolveInboxId(options.to);
|
|
137
|
-
const senderInboxId = keystore.xmtpInboxId ?? client.inboxId;
|
|
138
|
-
const envelope = buildEnvelope({
|
|
139
|
-
type: options.type,
|
|
140
|
-
senderInboxId,
|
|
141
|
-
senderAddress: keystore.walletAddress,
|
|
142
|
-
payload,
|
|
143
|
-
deadlineMs: Math.floor(timeoutMs),
|
|
144
|
-
});
|
|
145
|
-
const response = await runQueryWithClient({
|
|
146
|
-
client,
|
|
147
|
-
toInboxId,
|
|
148
|
-
envelope,
|
|
149
|
-
timeoutMs: Math.floor(timeoutMs),
|
|
150
|
-
});
|
|
151
|
-
printResult({
|
|
152
|
-
requestId: envelope.requestId,
|
|
153
|
-
response,
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
xmtpCommand
|
|
157
|
-
.command('listen')
|
|
158
|
-
.description('Listen for inbound XMTP envelopes')
|
|
159
|
-
.option('--types <typesCsv>', 'Comma-separated allowed message types')
|
|
160
|
-
.action(async (options) => {
|
|
161
|
-
const keystore = await loadKeystore();
|
|
162
|
-
const client = await createXmtpClient({
|
|
163
|
-
walletAddress: keystore.walletAddress,
|
|
164
|
-
existingInboxId: keystore.xmtpInboxId,
|
|
165
|
-
existingInstallationId: keystore.xmtpInstallationId,
|
|
166
|
-
existingDbPath: keystore.xmtpDbPath,
|
|
167
|
-
keystore,
|
|
168
|
-
});
|
|
169
|
-
const allowedTypes = options.types
|
|
170
|
-
? new Set(options.types
|
|
171
|
-
.split(',')
|
|
172
|
-
.map((value) => value.trim())
|
|
173
|
-
.filter(Boolean))
|
|
174
|
-
: undefined;
|
|
175
|
-
let stopped = false;
|
|
176
|
-
const abortController = new AbortController();
|
|
177
|
-
const stop = () => {
|
|
178
|
-
stopped = true;
|
|
179
|
-
abortController.abort();
|
|
180
|
-
};
|
|
181
|
-
process.once('SIGINT', stop);
|
|
182
|
-
process.once('SIGTERM', stop);
|
|
183
|
-
try {
|
|
184
|
-
await listenForEnvelopes({
|
|
185
|
-
client,
|
|
186
|
-
shouldStop: () => stopped,
|
|
187
|
-
allowedTypes,
|
|
188
|
-
signal: abortController.signal,
|
|
189
|
-
onEnvelope: (envelope) => {
|
|
190
|
-
printResult(envelope);
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
finally {
|
|
195
|
-
process.off('SIGINT', stop);
|
|
196
|
-
process.off('SIGTERM', stop);
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
xmtpCommand
|
|
200
|
-
.command('heartbeat')
|
|
201
|
-
.description('Send a one-shot heartbeat to keep the XMTP installation active')
|
|
202
|
-
.action(async () => {
|
|
203
|
-
const keystore = await loadKeystore();
|
|
204
|
-
if (!keystore.xmtpInstallationId) {
|
|
205
|
-
throw new Error('XMTP not initialized. Run `taskmarket xmtp init` first.');
|
|
206
|
-
}
|
|
207
|
-
const result = await apiPost('/api/xmtp/heartbeat', {
|
|
208
|
-
deviceId: keystore.deviceId,
|
|
209
|
-
apiToken: keystore.apiToken,
|
|
210
|
-
installationId: keystore.xmtpInstallationId,
|
|
211
|
-
});
|
|
212
|
-
printResult(result);
|
|
213
|
-
});
|
|
214
|
-
const peersCommand = xmtpCommand
|
|
215
|
-
.command('peers')
|
|
216
|
-
.description('Manage taskmarket peer messaging policies');
|
|
217
|
-
peersCommand
|
|
218
|
-
.command('list')
|
|
219
|
-
.description('List per-peer messaging policies stored on the backend')
|
|
220
|
-
.action(async () => {
|
|
221
|
-
const keystore = await loadKeystore();
|
|
222
|
-
const result = (await apiGet(`/api/xmtp/peers?deviceId=${encodeURIComponent(keystore.deviceId)}`, { headers: { 'x-taskmarket-api-token': keystore.apiToken } }));
|
|
223
|
-
printResult(result);
|
|
224
|
-
});
|
|
225
|
-
peersCommand
|
|
226
|
-
.command('set')
|
|
227
|
-
.description('Set messaging policy for a specific peer')
|
|
228
|
-
.requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
|
|
229
|
-
.requiredOption('--policy <policy>', 'Policy: allow | deny | quarantine')
|
|
230
|
-
.option('--reason <reason>', 'Optional reason text')
|
|
231
|
-
.action(async (options) => {
|
|
232
|
-
const validPolicies = ['allow', 'deny', 'quarantine'];
|
|
233
|
-
if (!validPolicies.includes(options.policy)) {
|
|
234
|
-
throw new Error(`--policy must be one of: ${validPolicies.join(', ')}`);
|
|
235
|
-
}
|
|
236
|
-
const keystore = await loadKeystore();
|
|
237
|
-
const peerInboxId = await resolveInboxId(options.to);
|
|
238
|
-
const result = await apiPost('/api/xmtp/peers', {
|
|
239
|
-
deviceId: keystore.deviceId,
|
|
240
|
-
apiToken: keystore.apiToken,
|
|
241
|
-
peerInboxId,
|
|
242
|
-
policy: options.policy,
|
|
243
|
-
reason: options.reason,
|
|
244
|
-
});
|
|
245
|
-
printResult(result);
|
|
246
|
-
});
|
|
247
|
-
const allowlistCommand = xmtpCommand
|
|
248
|
-
.command('allowlist')
|
|
249
|
-
.description('Manage XMTP SDK consent allowlist (protocol-level)');
|
|
250
|
-
allowlistCommand
|
|
251
|
-
.command('add')
|
|
252
|
-
.description('Allow messages from a peer inbox (XMTP SDK consent)')
|
|
253
|
-
.requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
|
|
254
|
-
.action(async (options) => {
|
|
255
|
-
const keystore = await loadKeystore();
|
|
256
|
-
const client = await createXmtpClient({
|
|
257
|
-
walletAddress: keystore.walletAddress,
|
|
258
|
-
existingInboxId: keystore.xmtpInboxId,
|
|
259
|
-
existingInstallationId: keystore.xmtpInstallationId,
|
|
260
|
-
existingDbPath: keystore.xmtpDbPath,
|
|
261
|
-
keystore,
|
|
262
|
-
});
|
|
263
|
-
const targetInboxId = await resolveInboxId(options.to);
|
|
264
|
-
if (!client.setConsentState) {
|
|
265
|
-
throw new Error('setConsentState not available in this XMTP client mode');
|
|
266
|
-
}
|
|
267
|
-
await client.setConsentState(targetInboxId, 'allowed');
|
|
268
|
-
printResult({ ok: true, inboxId: targetInboxId, state: 'allowed' });
|
|
269
|
-
});
|
|
270
|
-
allowlistCommand
|
|
271
|
-
.command('remove')
|
|
272
|
-
.description('Deny messages from a peer inbox (XMTP SDK consent)')
|
|
273
|
-
.requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
|
|
274
|
-
.action(async (options) => {
|
|
275
|
-
const keystore = await loadKeystore();
|
|
276
|
-
const client = await createXmtpClient({
|
|
277
|
-
walletAddress: keystore.walletAddress,
|
|
278
|
-
existingInboxId: keystore.xmtpInboxId,
|
|
279
|
-
existingInstallationId: keystore.xmtpInstallationId,
|
|
280
|
-
existingDbPath: keystore.xmtpDbPath,
|
|
281
|
-
keystore,
|
|
282
|
-
});
|
|
283
|
-
const targetInboxId = await resolveInboxId(options.to);
|
|
284
|
-
if (!client.setConsentState) {
|
|
285
|
-
throw new Error('setConsentState not available in this XMTP client mode');
|
|
286
|
-
}
|
|
287
|
-
await client.setConsentState(targetInboxId, 'denied');
|
|
288
|
-
printResult({ ok: true, inboxId: targetInboxId, state: 'denied' });
|
|
289
|
-
});
|
|
290
|
-
allowlistCommand
|
|
291
|
-
.command('check')
|
|
292
|
-
.description('Check the XMTP SDK consent state for a specific peer inbox')
|
|
293
|
-
.requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
|
|
294
|
-
.action(async (options) => {
|
|
295
|
-
const keystore = await loadKeystore();
|
|
296
|
-
const client = await createXmtpClient({
|
|
297
|
-
walletAddress: keystore.walletAddress,
|
|
298
|
-
existingInboxId: keystore.xmtpInboxId,
|
|
299
|
-
existingInstallationId: keystore.xmtpInstallationId,
|
|
300
|
-
existingDbPath: keystore.xmtpDbPath,
|
|
301
|
-
keystore,
|
|
302
|
-
});
|
|
303
|
-
const targetInboxId = await resolveInboxId(options.to);
|
|
304
|
-
if (!client.getConsentState) {
|
|
305
|
-
throw new Error('getConsentState not available in this XMTP client mode');
|
|
306
|
-
}
|
|
307
|
-
const state = await client.getConsentState(targetInboxId);
|
|
308
|
-
printResult({ inboxId: targetInboxId, state });
|
|
309
|
-
});
|
|
310
|
-
xmtpCommand
|
|
311
|
-
.command('purge')
|
|
312
|
-
.description('Revoke stale XMTP installations that have missed heartbeats')
|
|
313
|
-
.action(async () => {
|
|
314
|
-
const keystore = await loadKeystore();
|
|
315
|
-
const result = await apiPost('/api/xmtp/purge', {
|
|
316
|
-
deviceId: keystore.deviceId,
|
|
317
|
-
apiToken: keystore.apiToken,
|
|
318
|
-
});
|
|
319
|
-
printResult(result);
|
|
320
|
-
});
|
|
321
|
-
//# sourceMappingURL=xmtp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xmtp.js","sourceRoot":"","sources":["../../src/commands/xmtp.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/lib/agent.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { API_URL } from './api.js';
|
|
2
|
-
export async function pollAgentId(address, maxWaitMs = 60_000) {
|
|
3
|
-
const interval = 3_000;
|
|
4
|
-
const deadline = Date.now() + maxWaitMs;
|
|
5
|
-
while (Date.now() < deadline) {
|
|
6
|
-
await new Promise((r) => setTimeout(r, interval));
|
|
7
|
-
try {
|
|
8
|
-
const res = await fetch(`${API_URL}/api/identity/status?address=${address}`);
|
|
9
|
-
if (res.ok) {
|
|
10
|
-
const data = (await res.json());
|
|
11
|
-
if (data.agentId)
|
|
12
|
-
return data.agentId;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
// ignore transient errors, keep polling
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=agent.js.map
|
package/dist/lib/agent.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,SAAS,GAAG,MAAM;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gCAAgC,OAAO,EAAE,CAAC,CAAC;YAC7E,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAgC,CAAC;gBAC/D,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/lib/api.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export const API_URL = process.env.TASKMARKET_API_URL ?? 'https://api-market.daydreams.systems';
|
|
2
|
-
export async function apiGet(path, options) {
|
|
3
|
-
const res = await fetch(`${API_URL}${path}`, {
|
|
4
|
-
method: 'GET',
|
|
5
|
-
headers: {
|
|
6
|
-
'Content-Type': 'application/json',
|
|
7
|
-
...(options?.headers ?? {}),
|
|
8
|
-
},
|
|
9
|
-
});
|
|
10
|
-
const body = await res.json();
|
|
11
|
-
if (!res.ok) {
|
|
12
|
-
throw new Error(`GET ${path} failed (${res.status}): ${JSON.stringify(body)}`);
|
|
13
|
-
}
|
|
14
|
-
return body;
|
|
15
|
-
}
|
|
16
|
-
export async function apiPost(path, body) {
|
|
17
|
-
const res = await fetch(`${API_URL}${path}`, {
|
|
18
|
-
method: 'POST',
|
|
19
|
-
headers: { 'Content-Type': 'application/json' },
|
|
20
|
-
body: JSON.stringify(body),
|
|
21
|
-
});
|
|
22
|
-
const result = await res.json();
|
|
23
|
-
if (!res.ok) {
|
|
24
|
-
throw new Error(`POST ${path} failed (${res.status}): ${JSON.stringify(result)}`);
|
|
25
|
-
}
|
|
26
|
-
return result;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=api.js.map
|
package/dist/lib/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,sCAAsC,CAAC;AAEhG,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAY,EACZ,OAA8C;IAE9C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;SAC5B;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,YAAY,GAAG,CAAC,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,IAA6B;IACvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,YAAY,GAAG,CAAC,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/lib/keystore.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';
|
|
2
|
-
import { promises as fs } from 'fs';
|
|
3
|
-
import os from 'os';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import { privateKeyToAccount } from 'viem/accounts';
|
|
6
|
-
export function getKeystorePath() {
|
|
7
|
-
return path.join(os.homedir(), '.taskmarket', 'keystore.json');
|
|
8
|
-
}
|
|
9
|
-
export function generateKeypair() {
|
|
10
|
-
const keyBytes = randomBytes(32);
|
|
11
|
-
const privateKey = ('0x' + keyBytes.toString('hex'));
|
|
12
|
-
const account = privateKeyToAccount(privateKey);
|
|
13
|
-
return { privateKey, address: account.address };
|
|
14
|
-
}
|
|
15
|
-
export function encryptPrivateKey(deviceEncryptionKeyHex, privateKey) {
|
|
16
|
-
const key = Buffer.from(deviceEncryptionKeyHex, 'hex');
|
|
17
|
-
const iv = randomBytes(12);
|
|
18
|
-
const cipher = createCipheriv('aes-256-gcm', key, iv);
|
|
19
|
-
const plaintext = Buffer.from(privateKey, 'utf8');
|
|
20
|
-
const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
21
|
-
const tag = cipher.getAuthTag();
|
|
22
|
-
// Layout: iv (12 bytes) | tag (16 bytes) | ciphertext
|
|
23
|
-
return Buffer.concat([iv, tag, encrypted]).toString('hex');
|
|
24
|
-
}
|
|
25
|
-
export function decryptPrivateKey(deviceEncryptionKeyHex, encryptedHex) {
|
|
26
|
-
const key = Buffer.from(deviceEncryptionKeyHex, 'hex');
|
|
27
|
-
const data = Buffer.from(encryptedHex, 'hex');
|
|
28
|
-
const iv = data.subarray(0, 12);
|
|
29
|
-
const tag = data.subarray(12, 28);
|
|
30
|
-
const ciphertext = data.subarray(28);
|
|
31
|
-
const decipher = createDecipheriv('aes-256-gcm', key, iv);
|
|
32
|
-
decipher.setAuthTag(tag);
|
|
33
|
-
const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
34
|
-
return decrypted.toString('utf8');
|
|
35
|
-
}
|
|
36
|
-
export async function saveKeystore(keystore, keystorePath) {
|
|
37
|
-
const p = keystorePath ?? getKeystorePath();
|
|
38
|
-
await fs.mkdir(path.dirname(p), { recursive: true });
|
|
39
|
-
await fs.writeFile(p, JSON.stringify(keystore, null, 2), 'utf8');
|
|
40
|
-
}
|
|
41
|
-
export async function loadKeystore(keystorePath) {
|
|
42
|
-
const p = keystorePath ?? getKeystorePath();
|
|
43
|
-
let data;
|
|
44
|
-
try {
|
|
45
|
-
data = await fs.readFile(p, 'utf8');
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
throw new Error(`Keystore not found at ${p}. Run 'taskmarket init' first.`);
|
|
49
|
-
}
|
|
50
|
-
return JSON.parse(data);
|
|
51
|
-
}
|
|
52
|
-
export async function keystoreExists(keystorePath) {
|
|
53
|
-
const p = keystorePath ?? getKeystorePath();
|
|
54
|
-
try {
|
|
55
|
-
await fs.access(p);
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=keystore.js.map
|
package/dist/lib/keystore.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../src/lib/keystore.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/output.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export function printResult(data) {
|
|
2
|
-
console.log(JSON.stringify({ ok: true, data }));
|
|
3
|
-
}
|
|
4
|
-
export function printError(message) {
|
|
5
|
-
process.stderr.write(JSON.stringify({ ok: false, error: message }) + '\n');
|
|
6
|
-
process.exit(1);
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=output.js.map
|
package/dist/lib/output.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
package/dist/lib/signer.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { privateKeyToAccount } from 'viem/accounts';
|
|
2
|
-
import { toHex } from 'viem';
|
|
3
|
-
import { loadKeystore, decryptPrivateKey } from './keystore.js';
|
|
4
|
-
import { API_URL } from './api.js';
|
|
5
|
-
export async function fetchDeviceKey(deviceId, apiToken) {
|
|
6
|
-
const res = await fetch(`${API_URL}/api/devices/${deviceId}/key`, {
|
|
7
|
-
method: 'POST',
|
|
8
|
-
headers: { 'Content-Type': 'application/json' },
|
|
9
|
-
body: JSON.stringify({ deviceId, apiToken }),
|
|
10
|
-
});
|
|
11
|
-
if (!res.ok) {
|
|
12
|
-
const text = await res.text().catch(() => '');
|
|
13
|
-
throw new Error(`Failed to fetch device key (${res.status}): ${text}`);
|
|
14
|
-
}
|
|
15
|
-
const data = (await res.json());
|
|
16
|
-
return data.deviceEncryptionKey;
|
|
17
|
-
}
|
|
18
|
-
export async function signTypedData(typedData, keystore) {
|
|
19
|
-
const account = await createWalletAccountFromKeystore(keystore);
|
|
20
|
-
const sig = await account.signTypedData(typedData);
|
|
21
|
-
return sig;
|
|
22
|
-
}
|
|
23
|
-
export async function signMessage(message, keystore) {
|
|
24
|
-
const account = await createWalletAccountFromKeystore(keystore);
|
|
25
|
-
const sig = await account.signMessage({ message });
|
|
26
|
-
return sig;
|
|
27
|
-
}
|
|
28
|
-
export async function createWalletAccountFromKeystore(keystore) {
|
|
29
|
-
const dek = await fetchDeviceKey(keystore.deviceId, keystore.apiToken);
|
|
30
|
-
const privateKey = decryptPrivateKey(dek, keystore.encryptedKey);
|
|
31
|
-
return privateKeyToAccount(privateKey);
|
|
32
|
-
}
|
|
33
|
-
export function createSignFn(keystore) {
|
|
34
|
-
return (typedData) => signTypedData(typedData, keystore);
|
|
35
|
-
}
|
|
36
|
-
export async function getWalletAddress() {
|
|
37
|
-
const keystore = await loadKeystore();
|
|
38
|
-
return keystore.walletAddress;
|
|
39
|
-
}
|
|
40
|
-
export async function createTransferAuthorization(accept, keystore) {
|
|
41
|
-
const now = Math.floor(Date.now() / 1000);
|
|
42
|
-
const authorization = {
|
|
43
|
-
from: keystore.walletAddress,
|
|
44
|
-
to: accept.payTo,
|
|
45
|
-
value: accept.amount,
|
|
46
|
-
validAfter: String(now - 60),
|
|
47
|
-
validBefore: String(now + accept.maxTimeoutSeconds),
|
|
48
|
-
nonce: toHex(crypto.getRandomValues(new Uint8Array(32))),
|
|
49
|
-
};
|
|
50
|
-
const signature = await signTypedData({
|
|
51
|
-
domain: accept.extra.eip712.domain,
|
|
52
|
-
types: accept.extra.eip712.types,
|
|
53
|
-
primaryType: accept.extra.eip712.primaryType,
|
|
54
|
-
message: authorization,
|
|
55
|
-
}, keystore);
|
|
56
|
-
return { authorization, signature };
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=signer.js.map
|
package/dist/lib/signer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/lib/signer.ts"],"names":[],"mappings":"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"}
|