@genkaku/protocol 0.1.15 → 0.1.17

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/bridge.d.ts CHANGED
@@ -38,6 +38,16 @@ export type BridgeOptions = {
38
38
  workers?: string[];
39
39
  settle?: boolean;
40
40
  }) => void | Promise<void>;
41
+ /** Wallet operations the panel drives. Key material only ever leaves over
42
+ * loopback CORS, and only after an explicit confirmation flag. */
43
+ wallet?: {
44
+ address: () => string;
45
+ exportKey: () => string;
46
+ importKey: (privateKey: string) => void;
47
+ rotate: () => void;
48
+ /** testnet only; mints MockUSDC to the current user wallet */
49
+ mint?: (amount: bigint) => Promise<string>;
50
+ };
41
51
  /** P4.9h: derived credit per worker wallet (escrow events, not self-report).
42
52
  * Absent = offers keep whatever the worker claimed. */
43
53
  credit?: (wallets: string[]) => Map<string, {
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAc/B,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAgB,MAAM,EAAc,MAAM,YAAY,CAAA;AAI7D,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAA;KAAE,CAAC,CAAA;IACjE,GAAG,EAAE,MAAM,CAAA;IACX,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,CAAA;IAClB,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,wFAAwF;IACxF,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3F,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD;gFAC4E;IAC5E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtF;4DACwD;IACxD,MAAM,CAAC,EAAE,CACP,OAAO,EAAE,MAAM,EAAE,KACd,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;CAClH,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAA;AAuJD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAkjBlF"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
package/dist/bridge.js CHANGED
@@ -4,6 +4,7 @@
4
4
  // escrow on Base Sepolia. No provider wire code leaks into dsh.
5
5
  import { appendFileSync } from 'node:fs';
6
6
  import { createServer } from 'node:http';
7
+ import { applyLoopbackCors } from "./cors.js";
7
8
  import { openEscrow, publicClientFor, readWorker, refundSession, settleSession, signReceiptPayload, walletAddress, walletClientFor, } from "./chain.js";
8
9
  import { dialWorkerAny, fetchOffers, requestSettleCosign } from "./dial.js";
9
10
  import { dedupeOffers, toWire } from "./offer.js";
@@ -532,10 +533,10 @@ export async function startOpenAiBridge(opts) {
532
533
  void (async () => {
533
534
  try {
534
535
  const path = (req.url ?? '/').split('?')[0] ?? '/';
535
- if (req.method === 'GET' || req.method === 'POST' || req.method === 'OPTIONS') {
536
- res.setHeader('access-control-allow-origin', '*');
537
- res.setHeader('access-control-allow-methods', 'GET, POST, OPTIONS');
538
- res.setHeader('access-control-allow-headers', 'content-type');
536
+ if (!applyLoopbackCors(req, res)) {
537
+ res.writeHead(403, { 'content-type': 'application/json' });
538
+ res.end(JSON.stringify({ error: { message: 'origin not allowed' } }));
539
+ return;
539
540
  }
540
541
  if (req.method === 'OPTIONS') {
541
542
  res.writeHead(204);
@@ -564,6 +565,75 @@ export async function startOpenAiBridge(opts) {
564
565
  json(res, 200, { ok: true });
565
566
  return;
566
567
  }
568
+ if (req.method === 'POST' && path.startsWith('/genkaku/wallet/')) {
569
+ const action = path.slice('/genkaku/wallet/'.length).replace(/\/$/, '');
570
+ if (opts.wallet == null) {
571
+ failure(res, 501, 'wallet operations are not enabled in this role');
572
+ return;
573
+ }
574
+ let body = {};
575
+ try {
576
+ body = await readJson(req);
577
+ }
578
+ catch {
579
+ failure(res, 400, 'invalid JSON body');
580
+ return;
581
+ }
582
+ if (action === 'export') {
583
+ // The key is the wallet: require an explicit acknowledgement so a
584
+ // stray click (or a scripted call without intent) cannot read it.
585
+ if (body.confirm !== true) {
586
+ failure(res, 400, 'export requires confirm: true');
587
+ return;
588
+ }
589
+ res.setHeader('cache-control', 'no-store');
590
+ json(res, 200, { ok: true, address: opts.wallet.address(), privateKey: opts.wallet.exportKey() });
591
+ return;
592
+ }
593
+ if (action === 'import') {
594
+ const key = typeof body.privateKey === 'string' ? body.privateKey.trim() : '';
595
+ if (key === '') {
596
+ failure(res, 400, 'privateKey is required');
597
+ return;
598
+ }
599
+ try {
600
+ opts.wallet.importKey(key);
601
+ }
602
+ catch (error) {
603
+ failure(res, 400, error instanceof Error ? error.message : String(error));
604
+ return;
605
+ }
606
+ json(res, 200, { ok: true, address: opts.wallet.address(), restarting: true });
607
+ return;
608
+ }
609
+ if (action === 'new') {
610
+ opts.wallet.rotate();
611
+ json(res, 200, { ok: true, address: opts.wallet.address(), restarting: true });
612
+ return;
613
+ }
614
+ if (action === 'mint') {
615
+ if (opts.wallet.mint == null) {
616
+ failure(res, 400, 'test USDC mint is only available on base-sepolia');
617
+ return;
618
+ }
619
+ const raw = body.amountUsdc === undefined ? '100' : String(body.amountUsdc);
620
+ const amount = Math.round(Number(raw) * 1e6);
621
+ if (!Number.isFinite(amount) || amount <= 0 || amount > 10_000e6) {
622
+ failure(res, 400, 'amountUsdc must be between 0 and 10000');
623
+ return;
624
+ }
625
+ try {
626
+ const tx = await opts.wallet.mint(BigInt(amount));
627
+ json(res, 200, { ok: true, tx, amountUsdc: Number(raw) });
628
+ }
629
+ catch (error) {
630
+ failure(res, 500, error instanceof Error ? error.message : String(error));
631
+ }
632
+ return;
633
+ }
634
+ failure(res, 404, 'unknown wallet action');
635
+ return;
636
+ }
567
637
  if (req.method === 'POST' && (path === '/genkaku/settings' || path === '/genkaku/settings/')) {
568
638
  let body;
569
639
  try {
package/dist/chain.d.ts CHANGED
@@ -339,6 +339,18 @@ export declare const USDC_ABI: readonly [{
339
339
  readonly name: "";
340
340
  readonly type: "uint256";
341
341
  }];
342
+ }, {
343
+ readonly name: "mint";
344
+ readonly type: "function";
345
+ readonly stateMutability: "nonpayable";
346
+ readonly inputs: readonly [{
347
+ readonly name: "to";
348
+ readonly type: "address";
349
+ }, {
350
+ readonly name: "amount";
351
+ readonly type: "uint256";
352
+ }];
353
+ readonly outputs: readonly [];
342
354
  }];
343
355
  /** Public reads. The transport is a failover list (P4.9b): a rate-limited or
344
356
  * dead endpoint rolls to the next one without surfacing anything to the user. */
@@ -389,6 +401,10 @@ export declare function settleSession(walletC: GenkakuWallet, env: NetEnvironmen
389
401
  spend: bigint;
390
402
  workerSig: `0x${string}`;
391
403
  }): Promise<`0x${string}`>;
404
+ /** Mint test USDC to `to`. MockUSDC on Base Sepolia lets anyone mint; the
405
+ * canonical mainnet token has no such function, so the env check is load
406
+ * bearing, not a convenience. */
407
+ export declare function mintTestUsdc(walletC: GenkakuWallet, env: NetEnvironment, to: `0x${string}`, amount: bigint): Promise<`0x${string}`>;
392
408
  /** Reclaim an unsettled escrow. A short session can bill zero started minutes;
393
409
  * without this the funds would sit in the contract until the user found a
394
410
  * manual refund, which a non-technical user never will. */
@@ -1 +1 @@
1
- {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
package/dist/chain.js CHANGED
@@ -236,6 +236,18 @@ export const USDC_ABI = [{
236
236
  inputs: [{ name: 'owner', type: 'address' }],
237
237
  outputs: [{ name: '', type: 'uint256' }],
238
238
  },
239
+ {
240
+ // MockUSDC (Base Sepolia only) — the mainnet token has no mint, and the
241
+ // only caller is guarded by `env === 'base-sepolia'`.
242
+ name: 'mint',
243
+ type: 'function',
244
+ stateMutability: 'nonpayable',
245
+ inputs: [
246
+ { name: 'to', type: 'address' },
247
+ { name: 'amount', type: 'uint256' },
248
+ ],
249
+ outputs: [],
250
+ },
239
251
  ];
240
252
  function viemChain(env) {
241
253
  // P6 will add the mainnet chain object. Until then the ONLY wired chain is
@@ -412,6 +424,27 @@ export async function settleSession(walletC, env, args) {
412
424
  account: walletC.account,
413
425
  });
414
426
  }
427
+ /** Mint test USDC to `to`. MockUSDC on Base Sepolia lets anyone mint; the
428
+ * canonical mainnet token has no such function, so the env check is load
429
+ * bearing, not a convenience. */
430
+ export async function mintTestUsdc(walletC, env, to, amount) {
431
+ if (env !== 'base-sepolia') {
432
+ throw new Error('[genkaku:chain] test USDC mint is only available on base-sepolia');
433
+ }
434
+ const configured = CONTRACTS[env].usdc;
435
+ if (configured === '')
436
+ throw new Error(`[genkaku:chain] no USDC token for ${env}`);
437
+ const usdc = configured;
438
+ return await walletC.writeContract({
439
+ address: usdc,
440
+ abi: USDC_ABI,
441
+ functionName: 'mint',
442
+ args: [to, amount],
443
+ authorizationList: undefined,
444
+ chain: viemChain(env),
445
+ account: walletC.account,
446
+ });
447
+ }
415
448
  /** Reclaim an unsettled escrow. A short session can bill zero started minutes;
416
449
  * without this the funds would sit in the contract until the user found a
417
450
  * manual refund, which a non-technical user never will. */
package/dist/cors.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ /**
3
+ * Apply CORS headers when the request comes from a loopback origin.
4
+ * @returns false when a browser origin outside loopback tried to call us.
5
+ */
6
+ export declare function applyLoopbackCors(req: IncomingMessage, res: ServerResponse): boolean;
7
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAIhE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAepF"}
package/dist/cors.js ADDED
@@ -0,0 +1,26 @@
1
+ // GENKAKU: CORS for the loopback control planes.
2
+ //
3
+ // The bridge and the worker status server answer on 127.0.0.1 and used to send
4
+ // `access-control-allow-origin: *`. Any website the user visited could then
5
+ // read wallet state and, once wallet endpoints existed, key material. Only a
6
+ // loopback Origin (the DSH web app) may read these responses.
7
+ const LOOPBACK = /^https?:\/\/(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/;
8
+ /**
9
+ * Apply CORS headers when the request comes from a loopback origin.
10
+ * @returns false when a browser origin outside loopback tried to call us.
11
+ */
12
+ export function applyLoopbackCors(req, res) {
13
+ const origin = req.headers.origin;
14
+ // curl, the HTML dashboard (same-origin navigation) and node clients send no
15
+ // Origin; they are not subject to the browser's cross-origin rules.
16
+ if (origin == null)
17
+ return true;
18
+ if (!LOOPBACK.test(origin))
19
+ return false;
20
+ res.setHeader('access-control-allow-origin', origin);
21
+ res.setHeader('vary', 'origin');
22
+ res.setHeader('access-control-allow-methods', 'GET, POST, OPTIONS');
23
+ res.setHeader('access-control-allow-headers', 'content-type');
24
+ return true;
25
+ }
26
+ //# sourceMappingURL=cors.js.map
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@
8
8
  */
9
9
  export * from './bridge.ts';
10
10
  export * from './chain.ts';
11
+ export * from './cors.ts';
11
12
  export * from './credit.ts';
12
13
  export * from './dial.ts';
13
14
  export * from './directory.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@
8
8
  */
9
9
  export * from "./bridge.js";
10
10
  export * from "./chain.js";
11
+ export * from "./cors.js";
11
12
  export * from "./credit.js";
12
13
  export * from "./dial.js";
13
14
  export * from "./directory.js";
package/dist/keys.d.ts CHANGED
@@ -12,6 +12,8 @@ export type KeyVault = {
12
12
  userKey(): PrivKey;
13
13
  /** the app's worker identity key — generated on first use */
14
14
  workerKey(): PrivKey;
15
+ /** replace the user key (import / rotate); refuses while an env key wins */
16
+ setUserKey(key: PrivKey): void;
15
17
  /** derived addresses only (renderer-safe mirror of the keys) */
16
18
  addresses(): {
17
19
  user: EthAddress;
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAG/B,MAAM,MAAM,OAAO,GAAG,GAAG,CAAA;AACzB,MAAM,MAAM,UAAU,GAAG,KAAK,MAAM,EAAE,CAAA;AAEtC;gFACgF;AAChF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAC9B,CAAA;AASD,MAAM,MAAM,QAAQ,GAAG;IACrB,2DAA2D;IAC3D,OAAO,IAAI,OAAO,CAAA;IAClB,6DAA6D;IAC7D,SAAS,IAAI,OAAO,CAAA;IACpB,gEAAgE;IAChE,SAAS,IAAI;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAA;IACrD,qEAAqE;IACrE,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;CACpC,CAAA;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,QAAQ,CAAA;CACjB,GAAG,QAAQ,CA2GX;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQnD"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAG/B,MAAM,MAAM,OAAO,GAAG,GAAG,CAAA;AACzB,MAAM,MAAM,UAAU,GAAG,KAAK,MAAM,EAAE,CAAA;AAEtC;gFACgF;AAChF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAC9B,CAAA;AASD,MAAM,MAAM,QAAQ,GAAG;IACrB,2DAA2D;IAC3D,OAAO,IAAI,OAAO,CAAA;IAClB,6DAA6D;IAC7D,SAAS,IAAI,OAAO,CAAA;IACpB,4EAA4E;IAC5E,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9B,gEAAgE;IAChE,SAAS,IAAI;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAA;IACrD,qEAAqE;IACrE,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;CACpC,CAAA;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,QAAQ,CAAA;CACjB,GAAG,QAAQ,CAuHX;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQnD"}
package/dist/keys.js CHANGED
@@ -97,6 +97,17 @@ export function createKeyVault(opts) {
97
97
  user: privateKeyToAccount(lock('user')).address,
98
98
  worker: privateKeyToAccount(lock('worker')).address,
99
99
  }),
100
+ setUserKey(key) {
101
+ // An env-supplied key is process-scoped by design; silently replacing it
102
+ // would make the panel look successful while the old identity stays live.
103
+ if (envUser != null) {
104
+ throw new Error('the user key comes from GENKAKU_USER_KEY; unset it before importing or rotating');
105
+ }
106
+ const next = normalizeKey(key);
107
+ userKey = next;
108
+ vault.userKeyEnc = codec.encrypt(next).toString('base64');
109
+ persist();
110
+ },
100
111
  get usingEnvOverrides() {
101
112
  return envUser != null || envWorker != null;
102
113
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAWA,OAAO,EAAe,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE/E,oEAAoE;AACpE,MAAM,MAAM,WAAW,GAAG;IACxB,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAA;IAClB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,4CAA4C;AAC5C,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAItF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,MAAM,GAAG,SAAS,CAuBpB;AASD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACjC,mEAAmE;IACnE,aAAa,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACzC,6DAA6D;IAC7D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClH,wCAAwC;IACxC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,sDAAsD;IACtD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,gBAAgB,CA0FlG"}
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAWA,OAAO,EAAe,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE/E,oEAAoE;AACpE,MAAM,MAAM,WAAW,GAAG;IACxB,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAA;IAClB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,4CAA4C;AAC5C,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAItF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,MAAM,GAAG,SAAS,CAuBpB;AASD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACjC,mEAAmE;IACnE,aAAa,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACzC,6DAA6D;IAC7D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClH,wCAAwC;IACxC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,sDAAsD;IACtD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,gBAAgB,CA4FlG"}
package/dist/ollama.js CHANGED
@@ -116,6 +116,8 @@ export function createOllamaSupervisor(host, log) {
116
116
  env: { ...process.env, OLLAMA_HOST: url.host },
117
117
  stdio: 'ignore',
118
118
  detached: false,
119
+ // Windows: do not flash a console window when the panel starts Ollama.
120
+ windowsHide: true,
119
121
  });
120
122
  child = spawned;
121
123
  spawned.once('error', (error) => { log(`ollama spawn failed (${error.message})`); });
package/dist/p2pNode.d.ts CHANGED
@@ -26,6 +26,8 @@ export type SidecarOptions = {
26
26
  /** Public relay multiaddrs (the seed VM). Dialed at boot so the circuit
27
27
  * transport can reserve a slot, which makes a NAT'd worker dialable. */
28
28
  relayHints?: string[];
29
+ /** Diagnostic sink (IPv6 fallback, listener warnings). */
30
+ log?: (line: string) => void;
29
31
  };
30
32
  /** One stored (latest) receipt per jobId — the evidence the settle co-sign
31
33
  * defends against (spend == max cumulative receipt the client piped). */ export type StoredReceipt = {
@@ -1 +1 @@
1
- {"version":3,"file":"p2pNode.d.ts","sourceRoot":"","sources":["../src/p2pNode.ts"],"names":[],"mappings":"AAcA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,KAAK,GAAG,EAAW,MAAM,MAAM,CAAA;AAIxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAGnD,OAAO,EAAoB,KAAK,KAAK,EAAU,MAAM,YAAY,CAAA;AAajE,OAAO,KAAK,EAAgB,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AAGnF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,eAAO,MAAM,iBAAiB,2JAQpB,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,qBAAqB,CAAA;IAC7B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,+EAA+E;IAC/E,OAAO,EAAE,KAAK,EAAE,CAAA;IAChB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;kFAC8E;IAC9E,SAAS,CAAC,EAAE,GAAG,CAAA;IACf;6EACyE;IACzE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAED;0EAC0E,CAAA,MAAM,MAAM,aAAa,GAAG;IACpG,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAA;IAChB,kEAAkE;IAClE,SAAS,EAAE,KAAK,MAAM,EAAE,CAAA;IACxB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAA;CAC1B,CAAA;AAkBD,+EAA+E;AAC/E,wBAAsB,cAAc,CAAC,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,MAAM,EAAE,CAAA;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,+DAA+D;IAC/D,SAAS,EAAE,MAAM,MAAM,CAAA;IACvB,qEAAqE;IACrE,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAA;CACtC,CAAA;AAOD,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAggBjF"}
1
+ {"version":3,"file":"p2pNode.d.ts","sourceRoot":"","sources":["../src/p2pNode.ts"],"names":[],"mappings":"AAcA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,KAAK,GAAG,EAAW,MAAM,MAAM,CAAA;AAIxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAGnD,OAAO,EAAoB,KAAK,KAAK,EAAU,MAAM,YAAY,CAAA;AAajE,OAAO,KAAK,EAAgB,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AAGnF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,eAAO,MAAM,iBAAiB,2JAQpB,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,qBAAqB,CAAA;IAC7B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,+EAA+E;IAC/E,OAAO,EAAE,KAAK,EAAE,CAAA;IAChB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IACzC,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;kFAC8E;IAC9E,SAAS,CAAC,EAAE,GAAG,CAAA;IACf;6EACyE;IACzE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B,CAAA;AAED;0EAC0E,CAAA,MAAM,MAAM,aAAa,GAAG;IACpG,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAA;IAChB,kEAAkE;IAClE,SAAS,EAAE,KAAK,MAAM,EAAE,CAAA;IACxB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAA;CAC1B,CAAA;AAkBD,+EAA+E;AAC/E,wBAAsB,cAAc,CAAC,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,MAAM,EAAE,CAAA;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,+DAA+D;IAC/D,SAAS,EAAE,MAAM,MAAM,CAAA;IACvB,qEAAqE;IACrE,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAA;CACtC,CAAA;AAOD,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CA8gBjF"}
package/dist/p2pNode.js CHANGED
@@ -111,15 +111,29 @@ export async function createSidecar(opts) {
111
111
  ? privateKeyFromRaw(toBytes(opts.workerKey))
112
112
  : await generateKeyPair('secp256k1');
113
113
  const peerId = peerIdFromPrivateKey(privateKey);
114
- const node = await createLibp2p({
114
+ // The default listen list includes IPv6. A Windows machine (or a Linux box
115
+ // with IPv6 disabled) can refuse that listener; losing the whole worker over
116
+ // a second address family would look like "the plugin does nothing".
117
+ const init = (listen) => ({
115
118
  privateKey,
116
119
  nodeInfo: NODE_INFO,
117
- addresses: { listen: [...new Set([...opts.listen, '/p2p-circuit'])] },
120
+ addresses: { listen: [...new Set([...listen, '/p2p-circuit'])] },
118
121
  transports: [tcp(), circuitRelayTransport()],
119
122
  connectionEncrypters: [noise()],
120
123
  streamMuxers: [yamux()],
121
124
  services: { identify: identify() },
122
125
  });
126
+ let node;
127
+ try {
128
+ node = await createLibp2p(init(opts.listen));
129
+ }
130
+ catch (error) {
131
+ const ipv4 = opts.listen.filter(addr => !addr.startsWith('/ip6/'));
132
+ if (ipv4.length === opts.listen.length || ipv4.length === 0)
133
+ throw error;
134
+ opts.log?.(`IPv6 listen unavailable (${error instanceof Error ? error.message : String(error)}); retrying on IPv4 only`);
135
+ node = await createLibp2p(init(ipv4));
136
+ }
123
137
  // Connect to the public relay up front: the circuit transport reserves a
124
138
  // slot only once a HOP-capable peer is connected. Failures are non-fatal —
125
139
  // a worker with a public address is still directly dialable.
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG;IACxB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAA;IAClB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAA;IACvB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,oFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iFAAiF;IACjF,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAA;IACtC,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAA;AAED,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzF,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAExE,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE7E,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG;IAC1B,mEAAmE;IACnE,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,2CAA2C;IAC3C,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,sEAAsE;IACtE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1H,0CAA0C;IAC1C,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzC,CAAA;AAyKD,6DAA6D;AAC7D,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,EACxD,SAAS,CAAC,EAAE,oBAAoB,EAChC,MAAM,CAAC,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,oBAAoB,GAC/B,OAAO,CAAC,YAAY,CAAC,CA+LvB"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG;IACxB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAA;IAClB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAA;IACvB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,oFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iFAAiF;IACjF,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAA;IACtC,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAA;AAED,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzF,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAExE,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE7E,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG;IAC1B,mEAAmE;IACnE,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,2CAA2C;IAC3C,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,sEAAsE;IACtE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1H,0CAA0C;IAC1C,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzC,CAAA;AAyKD,6DAA6D;AAC7D,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,EACxD,SAAS,CAAC,EAAE,oBAAoB,EAChC,MAAM,CAAC,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,oBAAoB,GAC/B,OAAO,CAAC,YAAY,CAAC,CA+LvB"}
package/dist/status.js CHANGED
@@ -2,6 +2,7 @@
2
2
  // GET /genkaku/status (JSON). Snapshot is called per request so the page and
3
3
  // the JSON always reflect the live sidecar, never a boot-time copy.
4
4
  import { createServer } from 'node:http';
5
+ import { applyLoopbackCors } from "./cors.js";
5
6
  /** Self-contained dashboard; mirrors the user bridge style and polls the JSON. */
6
7
  const DASHBOARD_HTML = `<!doctype html>
7
8
  <html lang="en">
@@ -170,10 +171,10 @@ export async function startStatusServer(port, snapshot, onCatalog, onMode, ollam
170
171
  void (async () => {
171
172
  try {
172
173
  const path = (req.url ?? '/').split('?')[0] ?? '/';
173
- if (req.method === 'GET' || req.method === 'POST' || req.method === 'OPTIONS') {
174
- res.setHeader('access-control-allow-origin', '*');
175
- res.setHeader('access-control-allow-methods', 'GET, POST, OPTIONS');
176
- res.setHeader('access-control-allow-headers', 'content-type');
174
+ if (!applyLoopbackCors(req, res)) {
175
+ res.writeHead(403, { 'content-type': 'application/json' });
176
+ res.end(JSON.stringify({ error: { message: 'origin not allowed' } }));
177
+ return;
177
178
  }
178
179
  if (req.method === 'OPTIONS') {
179
180
  res.writeHead(204);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genkaku/protocol",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "description": "GenKaKu protocol core: on-chain worker directory, USDC escrow billing, libp2p transport, Ollama lifecycle",
5
5
  "license": "MIT",
6
6
  "type": "module",