@proappstore/cli 2.6.40 → 2.6.42

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.
@@ -0,0 +1,472 @@
1
+ import { mkdir, open, readFile, rename, rm, writeFile, chmod } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { webcrypto } from 'node:crypto';
4
+ const crypto = webcrypto;
5
+ /**
6
+ * PAS #356: the machine (client) half of remote MCP sign-in from a phone.
7
+ *
8
+ * Contracts, not invented here:
9
+ * - the PAS broker v2 (#355, docs/mcp-remote-auth-broker.md, backend/src/routes/mcp-broker.ts);
10
+ * - the PAGS relay (ProAgentStore #1005, its docs/remote-auth-relay.md): `pags remote-auth relay`
11
+ * takes the request's public details on stdin and pushes the owner a link to that one request.
12
+ *
13
+ * The machine keeps its proof, PKCE verifier and P-256 private key; only their hash, the challenge
14
+ * and the public key leave it. The result is ECDH-encrypted to this machine. Nothing secret is ever
15
+ * written to stdout/stderr, a URL, the relay or an error message.
16
+ */
17
+ export const BROKER_PREFIX = '/v1/mcp/broker/v2';
18
+ export const BROKER_VERSION = '2026-10-10';
19
+ export const MIN_PAGS_VERSION = '0.4.121';
20
+ /** Broker poll floor: the server answers an earlier poll with `429 slow_down`. */
21
+ export const POLL_MS = 2_000;
22
+ const MAX_POLL_DELAY_MS = 30_000;
23
+ /** Consecutive network failures tolerated while waiting (≈ the request's 10-minute life at the backoff cap). */
24
+ const MAX_NETWORK_FAILURES = 20;
25
+ const MAX_REDEEM_ATTEMPTS = 5;
26
+ /** A lock older than this whose process is gone is stale. */
27
+ const LOCK_STALE_MS = 15 * 60_000;
28
+ /** A separate Codex server name by default, so an existing working entry is never touched. */
29
+ export const DEFAULT_SERVER_NAME = 'proappstore-remote';
30
+ export const DEFAULT_TOKEN_ENV = 'PAS_REMOTE_MCP_TOKEN';
31
+ export const RELAY_STATES = ['pending', 'approving', 'approved_awaiting_machine', 'consumed', 'connected', 'denied', 'expired', 'cancelled', 'failed'];
32
+ const TERMINAL = new Set(['connected', 'denied', 'expired', 'cancelled', 'failed']);
33
+ /** A user-readable, actionable failure. Its message never carries secret material. */
34
+ export class RemoteAuthError extends Error {
35
+ code;
36
+ constructor(code, message) {
37
+ super(message);
38
+ this.code = code;
39
+ this.name = 'RemoteAuthError';
40
+ }
41
+ }
42
+ // ── encoding & crypto (identical to the broker's) ───────────────────────────
43
+ function b64(bytes) {
44
+ return Buffer.from(bytes).toString('base64url');
45
+ }
46
+ function unb64(value) {
47
+ return new Uint8Array(Buffer.from(value, 'base64url'));
48
+ }
49
+ async function sha256(bytes) {
50
+ return new Uint8Array(await crypto.subtle.digest('SHA-256', bytes));
51
+ }
52
+ const hex = (bytes) => Buffer.from(bytes).toString('hex');
53
+ const random = (n) => crypto.getRandomValues(new Uint8Array(n));
54
+ /** A fresh machine proof, PKCE S256 pair and P-256 key for one request. */
55
+ export async function generateMachineSecrets() {
56
+ const proof = b64(random(32));
57
+ const verifier = b64(random(32));
58
+ const pair = await crypto.subtle.generateKey({ name: 'ECDH', namedCurve: 'P-256' }, true, ['deriveBits']);
59
+ return {
60
+ proof,
61
+ verifier,
62
+ privateKeyPkcs8: b64(new Uint8Array(await crypto.subtle.exportKey('pkcs8', pair.privateKey))),
63
+ proofHash: hex(await sha256(new TextEncoder().encode(proof))),
64
+ challenge: b64(await sha256(new TextEncoder().encode(verifier))),
65
+ publicKeySpki: b64(new Uint8Array(await crypto.subtle.exportKey('spki', pair.publicKey))),
66
+ };
67
+ }
68
+ /** Open the broker's sealed result: ECDH P-256 → SHA-256 → AES-GCM, the request id as associated data. */
69
+ export async function openEnvelope(envelope, privateKeyPkcs8, requestId) {
70
+ const privateKey = await crypto.subtle.importKey('pkcs8', unb64(privateKeyPkcs8), { name: 'ECDH', namedCurve: 'P-256' }, false, ['deriveBits']);
71
+ const ephemeral = await crypto.subtle.importKey('spki', unb64(envelope.ephemeral_public_key), { name: 'ECDH', namedCurve: 'P-256' }, false, []);
72
+ const bits = await crypto.subtle.deriveBits({ name: 'ECDH', public: ephemeral }, privateKey, 256);
73
+ const key = await crypto.subtle.importKey('raw', await sha256(new Uint8Array(bits)), { name: 'AES-GCM' }, false, ['decrypt']);
74
+ const plain = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: unb64(envelope.iv), additionalData: new TextEncoder().encode(requestId) }, key, unb64(envelope.ciphertext));
75
+ const value = JSON.parse(new TextDecoder().decode(plain));
76
+ if (typeof value.access_token !== 'string' || typeof value.resource !== 'string')
77
+ throw new RemoteAuthError('failed', 'ProAppStore returned an unreadable result. Run the command again.');
78
+ return { access_token: value.access_token, token_type: value.token_type ?? 'Bearer', resource: value.resource, expires_in: value.expires_in ?? 0 };
79
+ }
80
+ // ── resource & identities ───────────────────────────────────────────────────
81
+ const IDENTITY_RE = /^[A-Za-z0-9._:-]{1,120}$/;
82
+ const LABEL_RE = /^[\x20-\x7e]{1,120}$/;
83
+ /** Exactly `<origin>/mcp` or `<origin>/mcp/apps/:appId` — the only resources the broker accepts. */
84
+ export function mcpResource(origin, appId) {
85
+ let o;
86
+ try {
87
+ o = new URL(origin);
88
+ }
89
+ catch {
90
+ throw new RemoteAuthError('invalid_resource', `PAS_MCP_ORIGIN is not a URL: ${origin}`);
91
+ }
92
+ if (o.protocol !== 'https:' && o.hostname !== 'localhost' && o.hostname !== '127.0.0.1')
93
+ throw new RemoteAuthError('invalid_resource', 'the MCP origin must be https');
94
+ if (appId === undefined)
95
+ return `${o.origin}/mcp`;
96
+ if (!/^[a-z][a-z0-9-]{0,57}$/.test(appId))
97
+ throw new RemoteAuthError('invalid_resource', `invalid app id "${appId}"`);
98
+ return `${o.origin}/mcp/apps/${appId}`;
99
+ }
100
+ /** A broker-valid identity: the id restricted to [A-Za-z0-9._:-], the label to printable ASCII. */
101
+ export function identity(id, label) {
102
+ const safeId = id.replace(/[^A-Za-z0-9._:-]/g, '-').slice(0, 120) || 'machine';
103
+ const safeLabel = label.replace(/[^\x20-\x7e]/g, '?').slice(0, 120) || safeId;
104
+ if (!IDENTITY_RE.test(safeId) || !LABEL_RE.test(safeLabel))
105
+ throw new RemoteAuthError('invalid_resource', 'invalid agent or machine name');
106
+ return { id: safeId, label: safeLabel };
107
+ }
108
+ async function brokerCall(deps, apiBase, path, body, bearer) {
109
+ let res;
110
+ try {
111
+ res = await deps.fetch(`${apiBase}${BROKER_PREFIX}${path}`, {
112
+ method: 'POST',
113
+ headers: { 'Content-Type': 'application/json', ...(bearer ? { Authorization: `Bearer ${bearer}` } : {}) },
114
+ body: JSON.stringify(body),
115
+ });
116
+ }
117
+ catch {
118
+ throw new RemoteAuthError('network', 'Could not reach ProAppStore. Check the connection; the command retries on its own while the request is open.');
119
+ }
120
+ const data = await res.json().catch(() => null);
121
+ return { status: res.status, data, ...(typeof data?.retry_after_ms === 'number' ? { retryAfterMs: data.retry_after_ms } : {}) };
122
+ }
123
+ /** The broker answers wrong owner / machine / request, replay and stale state with one generic 409, on purpose. */
124
+ function brokerRefusal(status) {
125
+ if (status === 401)
126
+ return new RemoteAuthError('not_signed_in', 'Your ProAppStore session is not valid. Run `pas login` on this machine, then try again.');
127
+ if (status === 400)
128
+ return new RemoteAuthError('failed', 'ProAppStore refused the request as malformed. Update the ProAppStore CLI and try again.');
129
+ if (status === 503)
130
+ return new RemoteAuthError('failed', 'Remote sign-in is unavailable on ProAppStore right now. Try again later.');
131
+ return new RemoteAuthError('unavailable', 'ProAppStore no longer accepts this sign-in request: it was denied, cancelled, expired or already used, or belongs to another machine. Start a new one.');
132
+ }
133
+ const RELAY_KEYS = new Set(['request_id', 'agent', 'machine', 'resource', 'scopes', 'approval_url', 'expires_at', 'id', 'label']);
134
+ /** Only the documented public fields, at any depth, and an approval URL with no query: anything else is refused before it leaves the machine. */
135
+ export function assertRelaySafe(value, path = '') {
136
+ if (Array.isArray(value)) {
137
+ value.forEach((v, i) => assertRelaySafe(v, `${path}[${i}]`));
138
+ return;
139
+ }
140
+ if (value && typeof value === 'object') {
141
+ for (const [key, v] of Object.entries(value)) {
142
+ if (!RELAY_KEYS.has(key))
143
+ throw new RemoteAuthError('relay_refused', `refusing to relay an undocumented field "${path}${key}"`);
144
+ assertRelaySafe(v, `${path}${key}.`);
145
+ }
146
+ }
147
+ if (path === '' && value && typeof value === 'object') {
148
+ const url = new URL(value.approval_url);
149
+ if (url.protocol !== 'https:' || url.search || url.hash)
150
+ throw new RemoteAuthError('relay_refused', 'refusing to relay an approval URL with parameters');
151
+ }
152
+ }
153
+ function parseVersion(text) {
154
+ const m = /(\d+)\.(\d+)\.(\d+)/.exec(text);
155
+ return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null;
156
+ }
157
+ /** The `pags` CLI must exist and be at least 0.4.121 (the first with `remote-auth`). */
158
+ export async function checkPagsVersion(deps) {
159
+ let result;
160
+ try {
161
+ result = await deps.runPags(['--version']);
162
+ }
163
+ catch {
164
+ throw new RemoteAuthError('pags_missing', `The ProAgentStore CLI (\`pags\`) was not found. Install or update it to ${MIN_PAGS_VERSION} or later and sign in with \`pags login\`, or pass --no-relay to open the approval link yourself.`);
165
+ }
166
+ const version = parseVersion(result.stdout);
167
+ const min = parseVersion(MIN_PAGS_VERSION);
168
+ if (!version || result.code !== 0)
169
+ throw new RemoteAuthError('old_cli', `Could not read the \`pags\` version. Update the ProAgentStore CLI to ${MIN_PAGS_VERSION} or later.`);
170
+ const older = version[0] !== min[0] ? version[0] < min[0] : version[1] !== min[1] ? version[1] < min[1] : version[2] < min[2];
171
+ if (older)
172
+ throw new RemoteAuthError('old_cli', `\`pags\` ${version.join('.')} has no \`remote-auth\` command. Update the ProAgentStore CLI to ${MIN_PAGS_VERSION} or later.`);
173
+ return version.join('.');
174
+ }
175
+ /** `pags remote-auth relay`: exit 2 is a refused input; 1 is transport, retried with the same JSON (a duplicate, no second push). */
176
+ export async function relayToAgent(deps, details) {
177
+ assertRelaySafe(details);
178
+ const input = JSON.stringify(details);
179
+ for (let attempt = 1;; attempt += 1) {
180
+ const r = await deps.runPags(['remote-auth', 'relay'], input);
181
+ if (r.code === 0) {
182
+ const parsed = JSON.parse(r.stdout.trim().split('\n').pop() ?? '');
183
+ if (typeof parsed.id !== 'string' || typeof parsed.url !== 'string')
184
+ throw new RemoteAuthError('failed', '`pags remote-auth relay` returned an unexpected answer. Update the ProAgentStore CLI.');
185
+ return parsed;
186
+ }
187
+ if (r.code === 2)
188
+ throw new RemoteAuthError('relay_refused', 'ProAgentStore refused to relay this request. Update both CLIs and try again.');
189
+ if (attempt >= 3)
190
+ throw new RemoteAuthError('network', 'Could not reach ProAgentStore to send the approval notification. Use the approval link printed above, or try again.');
191
+ await deps.sleep(POLL_MS * attempt);
192
+ }
193
+ }
194
+ /** `pags remote-auth state <rar_id> <state>`. Best effort: the page is a view; the broker is authoritative. */
195
+ export async function reportRelayState(deps, rarId, state) {
196
+ try {
197
+ return (await deps.runPags(['remote-auth', 'state', rarId, state])).code === 0;
198
+ }
199
+ catch {
200
+ return false;
201
+ }
202
+ }
203
+ // ── MCP read & local credential store ───────────────────────────────────────
204
+ /** A harmless authenticated MCP read (JSON-RPC `initialize`); the MCP worker records it as the broker's connected receipt. */
205
+ export async function performMcpHealthCheck(deps, resource, token, clientVersion) {
206
+ try {
207
+ const res = await deps.fetch(resource, {
208
+ method: 'POST',
209
+ headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', Accept: 'application/json, text/event-stream' },
210
+ body: JSON.stringify({
211
+ jsonrpc: '2.0', id: 1, method: 'initialize',
212
+ params: { protocolVersion: '2025-03-26', capabilities: {}, clientInfo: { name: 'pas-cli-remote-auth', version: clientVersion } },
213
+ }),
214
+ });
215
+ await res.body?.cancel().catch(() => undefined);
216
+ return res.ok;
217
+ }
218
+ catch {
219
+ return false;
220
+ }
221
+ }
222
+ const NAME_RE = /^[a-z][a-z0-9-]{0,63}$/;
223
+ function file(deps, name, suffix) {
224
+ if (!NAME_RE.test(name))
225
+ throw new RemoteAuthError('invalid_resource', `invalid connection name "${name}"`);
226
+ return join(deps.dir, `${name}${suffix}`);
227
+ }
228
+ async function ensureDir(deps) {
229
+ await mkdir(deps.dir, { recursive: true, mode: 0o700 });
230
+ await chmod(deps.dir, 0o700).catch(() => undefined);
231
+ }
232
+ /** Write a 0600 file atomically: a fresh temp file, then rename. The previous file stays intact until the rename. */
233
+ async function writeAtomic(path, value) {
234
+ const tmp = `${path}.${process.pid}.${b64(random(6))}.tmp`;
235
+ try {
236
+ await writeFile(tmp, JSON.stringify(value), { mode: 0o600, flag: 'wx' });
237
+ await rename(tmp, path);
238
+ }
239
+ finally {
240
+ await rm(tmp, { force: true });
241
+ }
242
+ }
243
+ async function readJson(path) {
244
+ try {
245
+ return JSON.parse(await readFile(path, 'utf8'));
246
+ }
247
+ catch {
248
+ return null;
249
+ }
250
+ }
251
+ /** Replace the stored credential only now that it is known to work. */
252
+ export async function installMcpCredential(deps, name, credential) {
253
+ await ensureDir(deps);
254
+ const now = deps.now();
255
+ await writeAtomic(file(deps, name, '.json'), {
256
+ version: 1, resource: credential.resource, token_type: credential.token_type, access_token: credential.access_token,
257
+ expires_at: now + credential.expires_in * 1000, installed_at: now,
258
+ });
259
+ }
260
+ export async function readCredential(deps, name) {
261
+ return readJson(file(deps, name, '.json'));
262
+ }
263
+ /** Local only: forget this machine's stored credential and any open attempt. No global logout. */
264
+ export async function disconnect(deps, name) {
265
+ const existed = (await readCredential(deps, name)) !== null;
266
+ await rm(file(deps, name, '.json'), { force: true });
267
+ await rm(file(deps, name, '.attempt.json'), { force: true });
268
+ return existed;
269
+ }
270
+ // ── one attempt at a time ───────────────────────────────────────────────────
271
+ async function acquireLock(deps, name) {
272
+ await ensureDir(deps);
273
+ const path = file(deps, name, '.lock');
274
+ for (let tries = 0; tries < 2; tries += 1) {
275
+ try {
276
+ const handle = await open(path, 'wx', 0o600);
277
+ await handle.writeFile(JSON.stringify({ pid: deps.pid, started: deps.now() }));
278
+ await handle.close();
279
+ return async () => { await rm(path, { force: true }); };
280
+ }
281
+ catch (e) {
282
+ if (e.code !== 'EEXIST')
283
+ throw e;
284
+ const held = await readJson(path);
285
+ if (held && deps.isAlive(held.pid) && deps.now() - held.started < LOCK_STALE_MS) {
286
+ throw new RemoteAuthError('busy', `Another sign-in for "${name}" is already running (process ${held.pid}). Wait for it, or stop it and run the command again.`);
287
+ }
288
+ await rm(path, { force: true }); // stale: its process is gone
289
+ }
290
+ }
291
+ throw new RemoteAuthError('busy', `Another sign-in for "${name}" is already running.`);
292
+ }
293
+ /**
294
+ * Create (or resume) one request, relay it, wait for the owner, redeem, prove the credential with an
295
+ * authenticated MCP read, install it, and only then report `connected`. The previous credential is
296
+ * replaced only after the read succeeded.
297
+ */
298
+ export async function connect(deps, opts) {
299
+ if (opts.relay)
300
+ await checkPagsVersion(deps);
301
+ const release = await acquireLock(deps, opts.name);
302
+ try {
303
+ return await run(deps, opts);
304
+ }
305
+ finally {
306
+ await release();
307
+ }
308
+ }
309
+ async function run(deps, opts) {
310
+ const attemptPath = file(deps, opts.name, '.attempt.json');
311
+ let attempt = await readJson(attemptPath);
312
+ if (attempt && (attempt.expires_at <= deps.now() || attempt.resource !== opts.resource)) {
313
+ if (attempt.rar_id && attempt.expires_at <= deps.now())
314
+ await reportRelayState(deps, attempt.rar_id, 'expired');
315
+ await rm(attemptPath, { force: true });
316
+ attempt = null;
317
+ }
318
+ const resumed = attempt !== null;
319
+ const save = async () => { await writeAtomic(attemptPath, attempt); };
320
+ if (!attempt) {
321
+ if (!opts.bearer)
322
+ throw new RemoteAuthError('not_signed_in', 'This machine has no ProAppStore session. Run `pas login` here first: the request is created with your own account.');
323
+ const secrets = await generateMachineSecrets();
324
+ const created = await brokerCall(deps, opts.apiBase, '/requests', {
325
+ agent: opts.agent, machine: opts.machine, resource: opts.resource, scopes: [],
326
+ code_challenge: secrets.challenge, machine_proof_hash: secrets.proofHash, machine_public_key: secrets.publicKeySpki,
327
+ }, opts.bearer);
328
+ if (created.status !== 201 || !created.data)
329
+ throw brokerRefusal(created.status);
330
+ attempt = {
331
+ request_id: created.data.request_id, resource: opts.resource, approval_url: created.data.approval_url,
332
+ expires_at: created.data.expires_at, agent: opts.agent, machine: opts.machine, rar_id: null, reported: null,
333
+ secrets, redeem_attempt_id: null,
334
+ };
335
+ await ensureDir(deps);
336
+ await save();
337
+ }
338
+ else {
339
+ deps.out('Resuming the sign-in request this machine already started.');
340
+ }
341
+ if (opts.relay && !attempt.rar_id) {
342
+ const relayed = await relayToAgent(deps, {
343
+ request_id: attempt.request_id, agent: attempt.agent, machine: attempt.machine, resource: attempt.resource,
344
+ scopes: [], approval_url: attempt.approval_url, expires_at: attempt.expires_at,
345
+ });
346
+ attempt.rar_id = relayed.id;
347
+ attempt.reported = 'pending';
348
+ await save();
349
+ deps.out(`A ProAgentStore notification is on its way to your phone${relayed.duplicate ? ' (already sent)' : ''}: ${relayed.url}`);
350
+ }
351
+ deps.out(`Approve this machine at ProAppStore: ${attempt.approval_url}`);
352
+ deps.out(`Waiting for approval until ${new Date(attempt.expires_at).toISOString()} (Ctrl-C to stop; run the command again to resume).`);
353
+ const report = async (state) => {
354
+ if (!attempt.rar_id || attempt.reported === state)
355
+ return;
356
+ if (await reportRelayState(deps, attempt.rar_id, state)) {
357
+ attempt.reported = state;
358
+ if (!TERMINAL.has(state))
359
+ await save();
360
+ }
361
+ };
362
+ const finish = async (state) => {
363
+ await report(state);
364
+ await rm(attemptPath, { force: true });
365
+ };
366
+ // Wait for the owner.
367
+ let delay = POLL_MS;
368
+ let networkFailures = 0;
369
+ let status = 'pending';
370
+ while (status !== 'approved_awaiting_machine' && status !== 'consumed') {
371
+ if (deps.now() >= attempt.expires_at) {
372
+ await finish('expired');
373
+ throw new RemoteAuthError('expired', 'The sign-in request expired before it was approved. Run the command again for a new one.');
374
+ }
375
+ await deps.sleep(delay);
376
+ let polled;
377
+ try {
378
+ polled = await brokerCall(deps, opts.apiBase, '/requests/poll', { request_id: attempt.request_id, machine_proof: attempt.secrets.proof });
379
+ }
380
+ catch (e) {
381
+ if (!(e instanceof RemoteAuthError) || e.code !== 'network')
382
+ throw e;
383
+ networkFailures += 1;
384
+ if (networkFailures >= MAX_NETWORK_FAILURES)
385
+ throw new RemoteAuthError('network', 'Lost the connection to ProAppStore. Run the command again when online: it resumes the same request.');
386
+ delay = Math.min(delay * 2, MAX_POLL_DELAY_MS);
387
+ continue;
388
+ }
389
+ if (polled.status === 429) {
390
+ delay = Math.min(Math.max(polled.retryAfterMs ?? POLL_MS, delay * 2), MAX_POLL_DELAY_MS);
391
+ continue;
392
+ }
393
+ if (polled.status !== 200 || !polled.data) {
394
+ await finish('failed');
395
+ throw brokerRefusal(polled.status);
396
+ }
397
+ networkFailures = 0;
398
+ delay = Math.max(POLL_MS, polled.retryAfterMs ?? POLL_MS);
399
+ status = polled.data.status;
400
+ if (TERMINAL.has(status)) {
401
+ await finish(status);
402
+ if (status === 'denied')
403
+ throw new RemoteAuthError('denied', 'The sign-in was denied at ProAppStore. Nothing changed on this machine.');
404
+ if (status === 'cancelled')
405
+ throw new RemoteAuthError('cancelled', 'The sign-in was cancelled at ProAppStore. Nothing changed on this machine.');
406
+ if (status === 'expired')
407
+ throw new RemoteAuthError('expired', 'The sign-in request expired. Run the command again for a new one.');
408
+ throw new RemoteAuthError('failed', 'The sign-in did not complete at ProAppStore. Run the command again.');
409
+ }
410
+ await report(status);
411
+ }
412
+ // Redeem: one attempt id, kept across retries and restarts, so a lost answer is recovered, never minted twice.
413
+ attempt.redeem_attempt_id ??= b64(random(32));
414
+ await save();
415
+ let envelope = null;
416
+ for (let tries = 1; !envelope; tries += 1) {
417
+ try {
418
+ const redeemed = await brokerCall(deps, opts.apiBase, '/requests/redeem', {
419
+ request_id: attempt.request_id, machine_proof: attempt.secrets.proof,
420
+ code_verifier: attempt.secrets.verifier, redeem_attempt_id: attempt.redeem_attempt_id,
421
+ });
422
+ if (redeemed.status !== 200 || !redeemed.data?.credential) {
423
+ await finish('failed');
424
+ throw brokerRefusal(redeemed.status);
425
+ }
426
+ envelope = redeemed.data.credential;
427
+ }
428
+ catch (e) {
429
+ if (!(e instanceof RemoteAuthError) || e.code !== 'network' || tries >= MAX_REDEEM_ATTEMPTS)
430
+ throw e;
431
+ await deps.sleep(POLL_MS * tries);
432
+ }
433
+ }
434
+ await report('consumed');
435
+ const credential = await openEnvelope(envelope, attempt.secrets.privateKeyPkcs8, attempt.request_id);
436
+ if (credential.resource !== attempt.resource) {
437
+ await reportBrokerFailed(deps, opts, attempt);
438
+ await finish('failed');
439
+ throw new RemoteAuthError('failed', 'ProAppStore returned a credential for a different service. Nothing changed on this machine.');
440
+ }
441
+ // Prove it before it replaces anything.
442
+ if (!(await performMcpHealthCheck(deps, credential.resource, credential.access_token, opts.clientVersion))) {
443
+ await reportBrokerFailed(deps, opts, attempt);
444
+ await finish('failed');
445
+ throw new RemoteAuthError('health_check_failed', 'The new connection could not make an authenticated ProAppStore MCP call. Your previous connection is unchanged. Run the command again.');
446
+ }
447
+ await installMcpCredential(deps, opts.name, credential);
448
+ let acknowledged = false;
449
+ for (let tries = 1; tries <= 3 && !acknowledged; tries += 1) {
450
+ try {
451
+ const done = await brokerCall(deps, opts.apiBase, '/requests/connected', {
452
+ request_id: attempt.request_id, machine_proof: attempt.secrets.proof, code_verifier: attempt.secrets.verifier,
453
+ });
454
+ acknowledged = done.status === 200;
455
+ if (!acknowledged)
456
+ break;
457
+ }
458
+ catch {
459
+ await deps.sleep(POLL_MS * tries);
460
+ }
461
+ }
462
+ await finish('connected');
463
+ if (!acknowledged)
464
+ deps.out('Connected, but ProAppStore did not acknowledge it yet; the request page may not say "connected".');
465
+ return { requestId: attempt.request_id, resource: credential.resource, name: opts.name, resumed };
466
+ }
467
+ async function reportBrokerFailed(deps, opts, attempt) {
468
+ await brokerCall(deps, opts.apiBase, '/requests/failed', {
469
+ request_id: attempt.request_id, machine_proof: attempt.secrets.proof, code_verifier: attempt.secrets.verifier,
470
+ }).catch(() => undefined);
471
+ }
472
+ //# sourceMappingURL=mcp-remote-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-remote-auth.js","sourceRoot":"","sources":["../src/mcp-remote-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-remote-auth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-remote-auth.test.d.ts","sourceRoot":"","sources":["../src/mcp-remote-auth.test.ts"],"names":[],"mappings":""}