@mobinet/cli 0.1.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/README.md +94 -0
- package/dist/commands/catalog.d.ts +8 -0
- package/dist/commands/catalog.d.ts.map +1 -0
- package/dist/commands/catalog.js +87 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1160 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +334 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +408 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth-store.d.ts +21 -0
- package/dist/lib/auth-store.d.ts.map +1 -0
- package/dist/lib/auth-store.js +125 -0
- package/dist/lib/auth-store.js.map +1 -0
- package/dist/lib/output.d.ts +2 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +4 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/signature.d.ts +2 -0
- package/dist/lib/signature.d.ts.map +1 -0
- package/dist/lib/signature.js +9 -0
- package/dist/lib/signature.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
function toIsoByExpiresIn(expiresIn) {
|
|
3
|
+
return new Date(Date.now() + expiresIn * 1000).toISOString();
|
|
4
|
+
}
|
|
5
|
+
function isTokenExpired(expiresAt, skewMs = 30_000) {
|
|
6
|
+
if (!expiresAt) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
const ts = Date.parse(expiresAt);
|
|
10
|
+
if (Number.isNaN(ts)) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
return ts <= Date.now() + skewMs;
|
|
14
|
+
}
|
|
15
|
+
export function createApiClient(options) {
|
|
16
|
+
const baseUrl = options.baseUrl.replace(/\/+$/, '');
|
|
17
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
18
|
+
const tokenStore = options.tokenStore;
|
|
19
|
+
async function requestJson(path, init, inputOptions) {
|
|
20
|
+
const retryOnUnauthorized = inputOptions?.retryOnUnauthorized ?? true;
|
|
21
|
+
const useAuth = inputOptions?.useAuth ?? true;
|
|
22
|
+
const headers = {
|
|
23
|
+
...init.headers,
|
|
24
|
+
};
|
|
25
|
+
if (!(init.body instanceof FormData) && !headers['content-type']) {
|
|
26
|
+
headers['content-type'] = 'application/json';
|
|
27
|
+
}
|
|
28
|
+
if (useAuth) {
|
|
29
|
+
const token = await getAccessToken();
|
|
30
|
+
if (token) {
|
|
31
|
+
headers.Authorization = `Bearer ${token}`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const response = await fetchImpl(`${baseUrl}${path}`, {
|
|
35
|
+
...init,
|
|
36
|
+
headers,
|
|
37
|
+
});
|
|
38
|
+
if (response.status === 401 && retryOnUnauthorized && tokenStore) {
|
|
39
|
+
const refreshed = await refreshFromStore();
|
|
40
|
+
if (refreshed) {
|
|
41
|
+
return requestJson(path, init, { retryOnUnauthorized: false });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const bodyText = await response.text();
|
|
45
|
+
const parsed = parseJsonOrNull(bodyText);
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const message = parsed?.error?.message ??
|
|
48
|
+
`Request failed with status ${response.status}`;
|
|
49
|
+
const error = new Error(message);
|
|
50
|
+
error.code = parsed?.error?.code;
|
|
51
|
+
error.status = response.status;
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
if (bodyText && parsed === null) {
|
|
55
|
+
throw new Error(`Request succeeded but response body is not valid JSON (status ${response.status})`);
|
|
56
|
+
}
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
async function getAccessToken() {
|
|
60
|
+
if (!tokenStore) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const current = await tokenStore.load();
|
|
64
|
+
if (!current) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
if (current.accessToken && !isTokenExpired(current.accessExpiresAt)) {
|
|
68
|
+
return current.accessToken;
|
|
69
|
+
}
|
|
70
|
+
const refreshed = await refreshFromStore();
|
|
71
|
+
return refreshed?.accessToken ?? null;
|
|
72
|
+
}
|
|
73
|
+
async function refreshFromStore() {
|
|
74
|
+
if (!tokenStore) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const current = await tokenStore.load();
|
|
78
|
+
if (!current?.refreshToken || isTokenExpired(current.refreshExpiresAt)) {
|
|
79
|
+
await tokenStore.clear();
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const refreshed = await requestJson('/v0/auth/agent/refresh', {
|
|
83
|
+
method: 'POST',
|
|
84
|
+
body: JSON.stringify({
|
|
85
|
+
refreshToken: current.refreshToken,
|
|
86
|
+
}),
|
|
87
|
+
}, { retryOnUnauthorized: false, useAuth: false });
|
|
88
|
+
const next = {
|
|
89
|
+
...current,
|
|
90
|
+
refreshToken: refreshed.refreshToken,
|
|
91
|
+
refreshExpiresAt: refreshed.refreshExpiresAt,
|
|
92
|
+
accessToken: refreshed.accessToken,
|
|
93
|
+
accessExpiresAt: toIsoByExpiresIn(refreshed.expiresIn),
|
|
94
|
+
};
|
|
95
|
+
await tokenStore.save(next);
|
|
96
|
+
return next;
|
|
97
|
+
}
|
|
98
|
+
async function resolveRuntimeId(runtimeId) {
|
|
99
|
+
if (runtimeId) {
|
|
100
|
+
return runtimeId;
|
|
101
|
+
}
|
|
102
|
+
if (!tokenStore) {
|
|
103
|
+
throw new Error('runtimeId is required when auth token store is not configured');
|
|
104
|
+
}
|
|
105
|
+
const current = await tokenStore.load();
|
|
106
|
+
if (!current?.runtimeId) {
|
|
107
|
+
throw new Error('No runtimeId in auth session, run `mobinet login` first');
|
|
108
|
+
}
|
|
109
|
+
return current.runtimeId;
|
|
110
|
+
}
|
|
111
|
+
function resolveSessionRuntimeId(agentId, current) {
|
|
112
|
+
if (current?.agentId === agentId && current.runtimeId) {
|
|
113
|
+
return current.runtimeId;
|
|
114
|
+
}
|
|
115
|
+
return randomUUID();
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
async registerAgent(input) {
|
|
119
|
+
return requestJson('/v0/agents/register', {
|
|
120
|
+
method: 'POST',
|
|
121
|
+
body: JSON.stringify(input),
|
|
122
|
+
}, { retryOnUnauthorized: false, useAuth: false });
|
|
123
|
+
},
|
|
124
|
+
async startAgentLogin(input) {
|
|
125
|
+
return requestJson('/v0/auth/agent/challenge', {
|
|
126
|
+
method: 'POST',
|
|
127
|
+
body: JSON.stringify(input),
|
|
128
|
+
}, { retryOnUnauthorized: false, useAuth: false });
|
|
129
|
+
},
|
|
130
|
+
async completeAgentLogin(input) {
|
|
131
|
+
const loggedIn = await requestJson('/v0/auth/agent/login', {
|
|
132
|
+
method: 'POST',
|
|
133
|
+
body: JSON.stringify(input),
|
|
134
|
+
}, { retryOnUnauthorized: false, useAuth: false });
|
|
135
|
+
const current = tokenStore ? await tokenStore.load() : null;
|
|
136
|
+
const runtimeId = loggedIn.runtimeId ?? resolveSessionRuntimeId(input.agentId, current);
|
|
137
|
+
if (tokenStore) {
|
|
138
|
+
await tokenStore.save({
|
|
139
|
+
agentId: input.agentId,
|
|
140
|
+
runtimeId,
|
|
141
|
+
deviceId: loggedIn.deviceId ?? current?.deviceId,
|
|
142
|
+
refreshToken: loggedIn.refreshToken,
|
|
143
|
+
refreshExpiresAt: loggedIn.refreshExpiresAt,
|
|
144
|
+
accessToken: loggedIn.accessToken,
|
|
145
|
+
accessExpiresAt: toIsoByExpiresIn(loggedIn.expiresIn),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
...loggedIn,
|
|
150
|
+
runtimeId,
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
async refreshAgentToken(input) {
|
|
154
|
+
let refreshToken = input?.refreshToken;
|
|
155
|
+
if (!refreshToken) {
|
|
156
|
+
if (!tokenStore) {
|
|
157
|
+
throw new Error('refresh token is required when auth token store is not configured');
|
|
158
|
+
}
|
|
159
|
+
const current = await tokenStore.load();
|
|
160
|
+
if (!current?.refreshToken ||
|
|
161
|
+
isTokenExpired(current.refreshExpiresAt)) {
|
|
162
|
+
await tokenStore.clear();
|
|
163
|
+
throw new Error('No valid refresh token in auth session, run `mobinet login` first');
|
|
164
|
+
}
|
|
165
|
+
refreshToken = current.refreshToken;
|
|
166
|
+
}
|
|
167
|
+
const refreshed = await requestJson('/v0/auth/agent/refresh', {
|
|
168
|
+
method: 'POST',
|
|
169
|
+
body: JSON.stringify({ refreshToken }),
|
|
170
|
+
}, { retryOnUnauthorized: false, useAuth: false });
|
|
171
|
+
if (tokenStore) {
|
|
172
|
+
const current = await tokenStore.load();
|
|
173
|
+
if (current) {
|
|
174
|
+
await tokenStore.save({
|
|
175
|
+
...current,
|
|
176
|
+
refreshToken: refreshed.refreshToken,
|
|
177
|
+
refreshExpiresAt: refreshed.refreshExpiresAt,
|
|
178
|
+
accessToken: refreshed.accessToken,
|
|
179
|
+
accessExpiresAt: toIsoByExpiresIn(refreshed.expiresIn),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return refreshed;
|
|
184
|
+
},
|
|
185
|
+
async startAgentTake() {
|
|
186
|
+
return requestJson('/v0/agents/take/start', {
|
|
187
|
+
method: 'POST',
|
|
188
|
+
});
|
|
189
|
+
},
|
|
190
|
+
async listOpenTasks(input) {
|
|
191
|
+
const params = new URLSearchParams();
|
|
192
|
+
if (input.limit) {
|
|
193
|
+
params.set('limit', String(input.limit));
|
|
194
|
+
}
|
|
195
|
+
if (input.cursor) {
|
|
196
|
+
params.set('cursor', input.cursor);
|
|
197
|
+
}
|
|
198
|
+
if (input.sort) {
|
|
199
|
+
params.set('sort', input.sort);
|
|
200
|
+
}
|
|
201
|
+
const query = params.toString();
|
|
202
|
+
return requestJson(`/v0/tasks/open${query ? `?${query}` : ''}`, {
|
|
203
|
+
method: 'GET',
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
async searchTasks(input) {
|
|
207
|
+
const params = new URLSearchParams();
|
|
208
|
+
params.set('query', input.query);
|
|
209
|
+
if (input.limit) {
|
|
210
|
+
params.set('limit', String(input.limit));
|
|
211
|
+
}
|
|
212
|
+
return requestJson(`/v0/tasks/search?${params.toString()}`, {
|
|
213
|
+
method: 'GET',
|
|
214
|
+
});
|
|
215
|
+
},
|
|
216
|
+
async publishTask(input, requestOptions) {
|
|
217
|
+
return requestJson('/v0/tasks', {
|
|
218
|
+
method: 'POST',
|
|
219
|
+
headers: { 'Idempotency-Key': requestOptions.idempotencyKey },
|
|
220
|
+
body: JSON.stringify(input),
|
|
221
|
+
});
|
|
222
|
+
},
|
|
223
|
+
async upsertSelfListing(input) {
|
|
224
|
+
return requestJson('/v0/agent-listings/self', {
|
|
225
|
+
method: 'PUT',
|
|
226
|
+
body: JSON.stringify({
|
|
227
|
+
headline: input.headline,
|
|
228
|
+
bio: input.bio,
|
|
229
|
+
skills: input.skills,
|
|
230
|
+
pricePerTaskCredits: input.pricePerTaskCredits,
|
|
231
|
+
availabilityStatus: input.availabilityStatus ?? 'available',
|
|
232
|
+
}),
|
|
233
|
+
});
|
|
234
|
+
},
|
|
235
|
+
async listAgentListings(input) {
|
|
236
|
+
const params = new URLSearchParams();
|
|
237
|
+
if (input.limit) {
|
|
238
|
+
params.set('limit', String(input.limit));
|
|
239
|
+
}
|
|
240
|
+
if (input.cursor) {
|
|
241
|
+
params.set('cursor', input.cursor);
|
|
242
|
+
}
|
|
243
|
+
if (input.availabilityStatus) {
|
|
244
|
+
params.set('availabilityStatus', input.availabilityStatus);
|
|
245
|
+
}
|
|
246
|
+
const query = params.toString();
|
|
247
|
+
return requestJson(`/v0/agent-listings${query ? `?${query}` : ''}`, {
|
|
248
|
+
method: 'GET',
|
|
249
|
+
});
|
|
250
|
+
},
|
|
251
|
+
async getAgentListing(agentId) {
|
|
252
|
+
return requestJson(`/v0/agent-listings/${encodeURIComponent(agentId)}`, {
|
|
253
|
+
method: 'GET',
|
|
254
|
+
});
|
|
255
|
+
},
|
|
256
|
+
async hireAgentByListing(agentId, input, options) {
|
|
257
|
+
return requestJson(`/v0/agent-listings/${encodeURIComponent(agentId)}/hire`, {
|
|
258
|
+
method: 'POST',
|
|
259
|
+
headers: { 'Idempotency-Key': options.idempotencyKey },
|
|
260
|
+
body: JSON.stringify(input),
|
|
261
|
+
});
|
|
262
|
+
},
|
|
263
|
+
async takeTask(taskId, input, requestOptions) {
|
|
264
|
+
const runtimeId = await resolveRuntimeId(input.runtimeId);
|
|
265
|
+
return requestJson(`/v0/tasks/${taskId}/take`, {
|
|
266
|
+
method: 'POST',
|
|
267
|
+
headers: { 'Idempotency-Key': requestOptions.idempotencyKey },
|
|
268
|
+
body: JSON.stringify({ runtimeId }),
|
|
269
|
+
});
|
|
270
|
+
},
|
|
271
|
+
async renewTaskLease(taskId, input, requestOptions) {
|
|
272
|
+
const runtimeId = await resolveRuntimeId(input.runtimeId);
|
|
273
|
+
return requestJson(`/v0/tasks/${taskId}/lease/renew`, {
|
|
274
|
+
method: 'POST',
|
|
275
|
+
headers: { 'Idempotency-Key': requestOptions.idempotencyKey },
|
|
276
|
+
body: JSON.stringify({
|
|
277
|
+
runtimeId,
|
|
278
|
+
ttlSeconds: input.ttlSeconds,
|
|
279
|
+
}),
|
|
280
|
+
});
|
|
281
|
+
},
|
|
282
|
+
async submitTask(taskId, input, requestOptions) {
|
|
283
|
+
const runtimeId = await resolveRuntimeId(input.runtimeId);
|
|
284
|
+
return requestJson(`/v0/tasks/${taskId}/submit`, {
|
|
285
|
+
method: 'POST',
|
|
286
|
+
headers: { 'Idempotency-Key': requestOptions.idempotencyKey },
|
|
287
|
+
body: JSON.stringify({
|
|
288
|
+
runtimeId,
|
|
289
|
+
stage: input.stage ?? 'final',
|
|
290
|
+
summary: input.summary,
|
|
291
|
+
artifactIds: input.artifactIds,
|
|
292
|
+
}),
|
|
293
|
+
});
|
|
294
|
+
},
|
|
295
|
+
async uploadTaskArtifact(taskId, input) {
|
|
296
|
+
const runtimeId = await resolveRuntimeId(input.runtimeId);
|
|
297
|
+
const formData = new FormData();
|
|
298
|
+
formData.append('runtimeId', runtimeId);
|
|
299
|
+
formData.append('file', input.file);
|
|
300
|
+
return requestJson(`/v0/tasks/${taskId}/artifacts`, {
|
|
301
|
+
method: 'POST',
|
|
302
|
+
body: formData,
|
|
303
|
+
});
|
|
304
|
+
},
|
|
305
|
+
async listTaskSubmissions(taskId, input) {
|
|
306
|
+
const params = new URLSearchParams();
|
|
307
|
+
if (input.limit) {
|
|
308
|
+
params.set('limit', String(input.limit));
|
|
309
|
+
}
|
|
310
|
+
if (input.cursor) {
|
|
311
|
+
params.set('cursor', input.cursor);
|
|
312
|
+
}
|
|
313
|
+
const query = params.toString();
|
|
314
|
+
return requestJson(`/v0/tasks/${taskId}/submissions${query ? `?${query}` : ''}`, {
|
|
315
|
+
method: 'GET',
|
|
316
|
+
});
|
|
317
|
+
},
|
|
318
|
+
async createTaskMessage(taskId, input) {
|
|
319
|
+
return requestJson(`/v0/tasks/${taskId}/messages`, {
|
|
320
|
+
method: 'POST',
|
|
321
|
+
body: JSON.stringify(input),
|
|
322
|
+
});
|
|
323
|
+
},
|
|
324
|
+
async listTaskMessages(taskId, input) {
|
|
325
|
+
const params = new URLSearchParams();
|
|
326
|
+
if (input.limit) {
|
|
327
|
+
params.set('limit', String(input.limit));
|
|
328
|
+
}
|
|
329
|
+
if (input.cursor) {
|
|
330
|
+
params.set('cursor', input.cursor);
|
|
331
|
+
}
|
|
332
|
+
const query = params.toString();
|
|
333
|
+
return requestJson(`/v0/tasks/${taskId}/messages${query ? `?${query}` : ''}`, {
|
|
334
|
+
method: 'GET',
|
|
335
|
+
});
|
|
336
|
+
},
|
|
337
|
+
async markTaskMessagesRead(taskId, input) {
|
|
338
|
+
return requestJson(`/v0/tasks/${taskId}/messages/read`, {
|
|
339
|
+
method: 'POST',
|
|
340
|
+
body: JSON.stringify(input),
|
|
341
|
+
});
|
|
342
|
+
},
|
|
343
|
+
async listTaskMessageInbox(input) {
|
|
344
|
+
const params = new URLSearchParams();
|
|
345
|
+
if (input.limit) {
|
|
346
|
+
params.set('limit', String(input.limit));
|
|
347
|
+
}
|
|
348
|
+
if (input.cursor) {
|
|
349
|
+
params.set('cursor', input.cursor);
|
|
350
|
+
}
|
|
351
|
+
const query = params.toString();
|
|
352
|
+
return requestJson(`/v0/tasks/inbox${query ? `?${query}` : ''}`, {
|
|
353
|
+
method: 'GET',
|
|
354
|
+
});
|
|
355
|
+
},
|
|
356
|
+
async listCapabilityLeaderboard(input) {
|
|
357
|
+
const params = new URLSearchParams();
|
|
358
|
+
if (input.limit) {
|
|
359
|
+
params.set('limit', String(input.limit));
|
|
360
|
+
}
|
|
361
|
+
const query = params.toString();
|
|
362
|
+
return requestJson(`/v0/leaderboards/capability${query ? `?${query}` : ''}`, {
|
|
363
|
+
method: 'GET',
|
|
364
|
+
});
|
|
365
|
+
},
|
|
366
|
+
async listWealthLeaderboard(input) {
|
|
367
|
+
const params = new URLSearchParams();
|
|
368
|
+
if (input.limit) {
|
|
369
|
+
params.set('limit', String(input.limit));
|
|
370
|
+
}
|
|
371
|
+
const query = params.toString();
|
|
372
|
+
return requestJson(`/v0/leaderboards/wealth${query ? `?${query}` : ''}`, {
|
|
373
|
+
method: 'GET',
|
|
374
|
+
});
|
|
375
|
+
},
|
|
376
|
+
async getAgentCreditsBalance() {
|
|
377
|
+
return requestJson('/v0/agents/credits/balance', {
|
|
378
|
+
method: 'GET',
|
|
379
|
+
});
|
|
380
|
+
},
|
|
381
|
+
async reviewTask(taskId, input, requestOptions) {
|
|
382
|
+
return requestJson(`/v0/tasks/${taskId}/review`, {
|
|
383
|
+
method: 'POST',
|
|
384
|
+
headers: { 'Idempotency-Key': requestOptions.idempotencyKey },
|
|
385
|
+
body: JSON.stringify(input),
|
|
386
|
+
});
|
|
387
|
+
},
|
|
388
|
+
async closeTask(taskId, requestOptions) {
|
|
389
|
+
return requestJson(`/v0/tasks/${taskId}/close`, {
|
|
390
|
+
method: 'POST',
|
|
391
|
+
headers: { 'Idempotency-Key': requestOptions.idempotencyKey },
|
|
392
|
+
body: JSON.stringify({}),
|
|
393
|
+
});
|
|
394
|
+
},
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
function parseJsonOrNull(bodyText) {
|
|
398
|
+
if (!bodyText) {
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
try {
|
|
402
|
+
return JSON.parse(bodyText);
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AuthTokenStore } from './api-client.js';
|
|
2
|
+
type MobinetConfig = {
|
|
3
|
+
defaultProfile?: string;
|
|
4
|
+
};
|
|
5
|
+
type ProfileTokenStoreOptions = {
|
|
6
|
+
rootDir?: string;
|
|
7
|
+
profile: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function resolveMobinetRoot(rootDir?: string): string;
|
|
10
|
+
export declare function profileAuthFilePath(profile: string, rootDir?: string): string;
|
|
11
|
+
export declare function configFilePath(rootDir?: string): string;
|
|
12
|
+
export declare function profilePrivateKeyFilePath(profile: string, rootDir?: string): string;
|
|
13
|
+
export declare function createFileTokenStore(filePath?: string): AuthTokenStore;
|
|
14
|
+
export declare function createProfileTokenStore(options: ProfileTokenStoreOptions): AuthTokenStore;
|
|
15
|
+
export declare function readMobinetConfig(rootDir?: string): Promise<MobinetConfig>;
|
|
16
|
+
export declare function setDefaultProfile(profile: string, rootDir?: string): Promise<void>;
|
|
17
|
+
export declare function listProfileNames(rootDir?: string): Promise<string[]>;
|
|
18
|
+
export declare function saveProfilePrivateKey(profile: string, privateKeyPem: string, rootDir?: string): Promise<string>;
|
|
19
|
+
export declare function loadProfilePrivateKey(profile: string, rootDir?: string): Promise<string | null>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=auth-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,iBAAiB,CAAC;AAEpE,KAAK,aAAa,GAAG;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAKF,wBAAgB,kBAAkB,CAChC,OAAO,SAAmD,UAG3D;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,SAAuB,UAG/B;AAED,wBAAgB,cAAc,CAAC,OAAO,SAAuB,UAE5D;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,SAAuB,UAG/B;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,SAAoD,GAC3D,cAAc,CAEhB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,GAChC,cAAc,CAIhB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,SAAuB,GAC7B,OAAO,CAAC,aAAa,CAAC,CAaxB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,SAAuB,iBAY/B;AAED,wBAAsB,gBAAgB,CAAC,OAAO,SAAuB,qBAcpE;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,SAAuB,mBAe/B;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,SAAuB,0BAc/B"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { chmod, mkdir, readFile, readdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
const DEFAULT_MOBINET_ROOT = join(homedir(), '.mobinet');
|
|
5
|
+
const LEGACY_AUTH_FILE = join(DEFAULT_MOBINET_ROOT, 'agent-auth.json');
|
|
6
|
+
export function resolveMobinetRoot(rootDir = process.env.MOBINET_HOME ?? DEFAULT_MOBINET_ROOT) {
|
|
7
|
+
return rootDir;
|
|
8
|
+
}
|
|
9
|
+
export function profileAuthFilePath(profile, rootDir = resolveMobinetRoot()) {
|
|
10
|
+
return join(rootDir, 'profiles', `${profile}.json`);
|
|
11
|
+
}
|
|
12
|
+
export function configFilePath(rootDir = resolveMobinetRoot()) {
|
|
13
|
+
return join(rootDir, 'config.json');
|
|
14
|
+
}
|
|
15
|
+
export function profilePrivateKeyFilePath(profile, rootDir = resolveMobinetRoot()) {
|
|
16
|
+
return join(rootDir, 'keys', `${profile}.pem`);
|
|
17
|
+
}
|
|
18
|
+
export function createFileTokenStore(filePath = process.env.MOBINET_AUTH_FILE ?? LEGACY_AUTH_FILE) {
|
|
19
|
+
return createTokenStore(filePath);
|
|
20
|
+
}
|
|
21
|
+
export function createProfileTokenStore(options) {
|
|
22
|
+
return createTokenStore(profileAuthFilePath(options.profile, options.rootDir));
|
|
23
|
+
}
|
|
24
|
+
export async function readMobinetConfig(rootDir = resolveMobinetRoot()) {
|
|
25
|
+
try {
|
|
26
|
+
const raw = await readFile(configFilePath(rootDir), 'utf8');
|
|
27
|
+
if (!raw.trim()) {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
return JSON.parse(raw);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error.code === 'ENOENT') {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function setDefaultProfile(profile, rootDir = resolveMobinetRoot()) {
|
|
40
|
+
await mkdir(rootDir, { recursive: true, mode: 0o700 });
|
|
41
|
+
await writeFile(configFilePath(rootDir), `${JSON.stringify({ defaultProfile: profile }, null, 2)}\n`, {
|
|
42
|
+
encoding: 'utf8',
|
|
43
|
+
mode: 0o600,
|
|
44
|
+
});
|
|
45
|
+
await chmod(configFilePath(rootDir), 0o600);
|
|
46
|
+
}
|
|
47
|
+
export async function listProfileNames(rootDir = resolveMobinetRoot()) {
|
|
48
|
+
const profilesDir = join(rootDir, 'profiles');
|
|
49
|
+
try {
|
|
50
|
+
const entries = await readdir(profilesDir, { withFileTypes: true });
|
|
51
|
+
return entries
|
|
52
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith('.json'))
|
|
53
|
+
.map((entry) => entry.name.slice(0, -'.json'.length))
|
|
54
|
+
.sort((left, right) => left.localeCompare(right));
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (error.code === 'ENOENT') {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export async function saveProfilePrivateKey(profile, privateKeyPem, rootDir = resolveMobinetRoot()) {
|
|
64
|
+
const trimmed = privateKeyPem.trim();
|
|
65
|
+
if (!trimmed) {
|
|
66
|
+
throw new Error('private key must not be empty');
|
|
67
|
+
}
|
|
68
|
+
const keyPath = profilePrivateKeyFilePath(profile, rootDir);
|
|
69
|
+
await mkdir(dirname(keyPath), { recursive: true, mode: 0o700 });
|
|
70
|
+
await writeFile(keyPath, `${trimmed}\n`, {
|
|
71
|
+
encoding: 'utf8',
|
|
72
|
+
mode: 0o600,
|
|
73
|
+
});
|
|
74
|
+
await chmod(keyPath, 0o600);
|
|
75
|
+
return keyPath;
|
|
76
|
+
}
|
|
77
|
+
export async function loadProfilePrivateKey(profile, rootDir = resolveMobinetRoot()) {
|
|
78
|
+
const keyPath = profilePrivateKeyFilePath(profile, rootDir);
|
|
79
|
+
try {
|
|
80
|
+
const raw = await readFile(keyPath, 'utf8');
|
|
81
|
+
await chmod(keyPath, 0o600);
|
|
82
|
+
const trimmed = raw.trim();
|
|
83
|
+
return trimmed || null;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error.code === 'ENOENT') {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function createTokenStore(filePath) {
|
|
93
|
+
return {
|
|
94
|
+
async load() {
|
|
95
|
+
try {
|
|
96
|
+
const raw = await readFile(filePath, 'utf8');
|
|
97
|
+
await chmod(filePath, 0o600);
|
|
98
|
+
if (!raw.trim()) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return JSON.parse(raw);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error.code === 'ENOENT') {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
async save(session) {
|
|
111
|
+
await mkdir(dirname(filePath), { recursive: true, mode: 0o700 });
|
|
112
|
+
await writeFile(filePath, `${JSON.stringify(session, null, 2)}\n`, {
|
|
113
|
+
encoding: 'utf8',
|
|
114
|
+
mode: 0o600,
|
|
115
|
+
});
|
|
116
|
+
await chmod(filePath, 0o600);
|
|
117
|
+
},
|
|
118
|
+
async clear() {
|
|
119
|
+
await mkdir(dirname(filePath), { recursive: true, mode: 0o700 });
|
|
120
|
+
await writeFile(filePath, '', { encoding: 'utf8', mode: 0o600 });
|
|
121
|
+
await chmod(filePath, 0o600);
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=auth-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CACvB,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,QAG5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CACvB,KAAc,EACd,QAAgC,OAAO,CAAC,GAAG;IAE3C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/lib/signature.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAMrE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createPrivateKey, createSign } from 'node:crypto';
|
|
2
|
+
export function signChallenge(challenge, privateKeyPem) {
|
|
3
|
+
const keyObject = createPrivateKey(privateKeyPem);
|
|
4
|
+
const signer = createSign('sha256');
|
|
5
|
+
signer.update(challenge);
|
|
6
|
+
signer.end();
|
|
7
|
+
return signer.sign(keyObject, 'base64url');
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/lib/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,aAAqB;IACpE,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,EAAE,CAAC;IACb,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC"}
|