@genkaku/protocol 0.1.14 → 0.1.16

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';
@@ -23,6 +24,7 @@ export * from './ollama.ts';
23
24
  export * from './p2pNode.ts';
24
25
  export * from './paywall.ts';
25
26
  export * from './publishOptIn.ts';
27
+ export * from './settleOptIn.ts';
26
28
  export * from './receipts.ts';
27
29
  export * from './registry.ts';
28
30
  export * from './rpc.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,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";
@@ -23,6 +24,7 @@ export * from "./ollama.js";
23
24
  export * from "./p2pNode.js";
24
25
  export * from "./paywall.js";
25
26
  export * from "./publishOptIn.js";
27
+ export * from "./settleOptIn.js";
26
28
  export * from "./receipts.js";
27
29
  export * from "./registry.js";
28
30
  export * from "./rpc.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
  },
@@ -0,0 +1,15 @@
1
+ /** File name under the GenKaKu key directory. */
2
+ export declare const SETTLE_OPT_IN_FILE = "settle.json";
3
+ /**
4
+ * Read the user's settlement opt-in.
5
+ * @param keyDir - GenKaKu state directory.
6
+ * @returns true/false when the user chose, or null to keep the profile default.
7
+ */
8
+ export declare function readSettleOptIn(keyDir: string): boolean | null;
9
+ /**
10
+ * Persist the user's settlement opt-in.
11
+ * @param keyDir - GenKaKu state directory.
12
+ * @param settle - whether sessions should open and settle escrows.
13
+ */
14
+ export declare function writeSettleOptIn(keyDir: string, settle: boolean): void;
15
+ //# sourceMappingURL=settleOptIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settleOptIn.d.ts","sourceRoot":"","sources":["../src/settleOptIn.ts"],"names":[],"mappings":"AAYA,iDAAiD;AACjD,eAAO,MAAM,kBAAkB,gBAAgB,CAAA;AAE/C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAGtE"}
@@ -0,0 +1,37 @@
1
+ // GENKAKU: user-side settlement opt-in.
2
+ //
3
+ // `config.settle` is the deployment default and is NOT a volatile settings
4
+ // field: writing it into the profile patch is rejected by dsh ("is not
5
+ // volatile") and, because the write was fire-and-forget, it took the whole app
6
+ // down. The panel's Payments switch therefore persists here instead, next to
7
+ // the worker's publish opt-in, and the runtime reads it when it builds the
8
+ // bridge.
9
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ /** File name under the GenKaKu key directory. */
12
+ export const SETTLE_OPT_IN_FILE = 'settle.json';
13
+ /**
14
+ * Read the user's settlement opt-in.
15
+ * @param keyDir - GenKaKu state directory.
16
+ * @returns true/false when the user chose, or null to keep the profile default.
17
+ */
18
+ export function readSettleOptIn(keyDir) {
19
+ try {
20
+ const value = JSON.parse(readFileSync(join(keyDir, SETTLE_OPT_IN_FILE), 'utf8'));
21
+ const settle = value.settle;
22
+ return typeof settle === 'boolean' ? settle : null;
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Persist the user's settlement opt-in.
30
+ * @param keyDir - GenKaKu state directory.
31
+ * @param settle - whether sessions should open and settle escrows.
32
+ */
33
+ export function writeSettleOptIn(keyDir, settle) {
34
+ mkdirSync(keyDir, { recursive: true, mode: 0o700 });
35
+ writeFileSync(join(keyDir, SETTLE_OPT_IN_FILE), `${JSON.stringify({ settle }, undefined, 2)}\n`, { mode: 0o600 });
36
+ }
37
+ //# sourceMappingURL=settleOptIn.js.map
@@ -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.14",
3
+ "version": "0.1.16",
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",