midnight-wallet-cli 0.6.0-rc.11 → 0.6.0-rc.12

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.
Files changed (84) hide show
  1. package/README.md +1 -0
  2. package/dist/{account-backup-kvg9gyq1.js → account-backup-1nyq1m42.js} +1 -1
  3. package/dist/{account-protector-gx1yrfgp.js → account-protector-1z4hdv7a.js} +1 -1
  4. package/dist/{actions-runner-9xfw1w9e.js → actions-runner-2srat2je.js} +1 -1
  5. package/dist/{address-evr423re.js → address-qm7t54wb.js} +1 -1
  6. package/dist/{ai-scaffold-6tb9d9z6.js → ai-scaffold-53md1vkr.js} +1 -1
  7. package/dist/airdrop-a9tqv9nr.js +45 -0
  8. package/dist/{balance-898sn3v8.js → balance-3tgz7k2r.js} +1 -1
  9. package/dist/{cache-gbw42c6c.js → cache-3datfxfm.js} +1 -1
  10. package/dist/chain-caches-dyb9tc96.js +2 -0
  11. package/dist/circuit-witness-deps-6zgcns3p.js +2 -0
  12. package/dist/{contract-742etqts.js → contract-863h57eg.js} +2 -2
  13. package/dist/{create-a2bmx3q9.js → create-pjgavxpk.js} +1 -1
  14. package/dist/{create-writer-6wx6swxc.js → create-writer-vyrsc7kk.js} +1 -1
  15. package/dist/{deploy-wj9dmx17.js → deploy-rm4mpapa.js} +1 -1
  16. package/dist/{dev-6pf7bcnj.js → dev-6nmv2f07.js} +3 -3
  17. package/dist/{discover-screens-q2tft8zf.js → discover-screens-5wezv5s8.js} +1 -1
  18. package/dist/dust-w9wx7xrz.js +57 -0
  19. package/dist/{generate-eb8wbmfd.js → generate-xg478yk6.js} +1 -1
  20. package/dist/{genesis-address-cskqa9mm.js → genesis-address-e6kyhyap.js} +1 -1
  21. package/dist/{grant-0rcbfpsn.js → grant-f7gj3y2f.js} +6 -6
  22. package/dist/help-k55x0pgv.js +2 -0
  23. package/dist/{info-636h7nea.js → info-tvcf890y.js} +1 -1
  24. package/dist/{inspect-cost-rjcacee7.js → inspect-cost-1dqm939z.js} +1 -1
  25. package/dist/{inspect-cge38gtw.js → inspect-tzc41x88.js} +1 -1
  26. package/dist/{localnet-4c1h8g5c.js → localnet-8txmxj17.js} +2 -2
  27. package/dist/{manual-xf8mep9e.js → manual-5h7ddda1.js} +1 -1
  28. package/dist/mcp-server.js +1 -1
  29. package/dist/passphrase-09gjshqc.js +2 -0
  30. package/dist/prepare-mpjd5p5c.js +2 -0
  31. package/dist/{private-state-42r7118m.js → private-state-cd8k4ca5.js} +1 -1
  32. package/dist/{protect-account-cjt1kprd.js → protect-account-38xz3ds4.js} +1 -1
  33. package/dist/{request-7cv5q4zr.js → request-0nz45zjf.js} +1 -1
  34. package/dist/{request-1ywpssaq.js → request-mdx5h4gb.js} +1 -1
  35. package/dist/{request-w4m7mnd6.js → request-rkdecer3.js} +1 -1
  36. package/dist/{runner-jc3va6pt.js → runner-9jes3w2f.js} +1 -1
  37. package/dist/runtime-check-dkhnejbe.js +2 -0
  38. package/dist/{sealed-account-ycx7cfmh.js → sealed-account-88s2rt32.js} +1 -1
  39. package/dist/{serve-manager-y583rzeg.js → serve-manager-bf18fyjm.js} +1 -1
  40. package/dist/serve-payer-9ar9afge.js +2 -0
  41. package/dist/{serve-gybtxfhe.js → serve-ysym77y6.js} +1 -1
  42. package/dist/swap-37e4eqsm.js +52 -0
  43. package/dist/{test-sr2cphp1.js → test-0txb68jt.js} +4 -4
  44. package/dist/{test-create-prompt-fdtvr457.js → test-create-prompt-8d01e9nm.js} +1 -1
  45. package/dist/transfer-request-vr96wx55.js +2 -0
  46. package/dist/transfer-rxzab9p8.js +32 -0
  47. package/dist/{wallet-50qp35yf.js → wallet-ad6gw2zh.js} +1 -1
  48. package/dist/{wallet-3bmeys56.js → wallet-apqddgeg.js} +2 -2
  49. package/dist/{wallet-fb292x9c.js → wallet-avvc5f6r.js} +1 -1
  50. package/dist/{wallet-wafaf7cc.js → wallet-bdg8krbb.js} +2 -2
  51. package/dist/{wallet-r5s7ppf3.js → wallet-ca3afdzh.js} +1 -1
  52. package/dist/{wallet-56gd7q8n.js → wallet-ce7ayvb9.js} +1 -1
  53. package/dist/{wallet-config-w1w2ryv3.js → wallet-config-0k402v7x.js} +1 -1
  54. package/dist/wallet-create-1j5q179d.js +2 -0
  55. package/dist/wallet-crx7jp0g.js +7 -0
  56. package/dist/{wallet-vn9pp5nm.js → wallet-ee7ezgn2.js} +1 -1
  57. package/dist/{wallet-tdtnx9g9.js → wallet-fdwtr320.js} +3 -3
  58. package/dist/{wallet-3qw465k0.js → wallet-fjsk64ey.js} +1 -1
  59. package/dist/{wallet-wez4z95e.js → wallet-m9bxb9x8.js} +2 -2
  60. package/dist/wallet-n0mc31r7.js +386 -0
  61. package/dist/{wallet-b1v87xw6.js → wallet-t4rnacdc.js} +1 -1
  62. package/dist/{wallet-dmk3g8wb.js → wallet-trfmf39r.js} +1 -1
  63. package/dist/{wallet-6vz9m65h.js → wallet-vf9p0926.js} +1 -1
  64. package/dist/{wallet-z7aqejee.js → wallet-wb2y6vy0.js} +2 -2
  65. package/dist/{wallet-b7grv9vr.js → wallet-wqww5m0b.js} +1 -1
  66. package/dist/{wallet-64k8pxzd.js → wallet-wzgnz0jm.js} +1 -1
  67. package/dist/{wallet-khvrzs3r.js → wallet-y4p1xx1t.js} +1 -1
  68. package/dist/wallet.js +2 -2
  69. package/npm-shrinkwrap.json +16 -16
  70. package/package.json +5 -4
  71. package/dist/airdrop-q2ay0qh5.js +0 -45
  72. package/dist/chain-caches-2cysk5pv.js +0 -2
  73. package/dist/circuit-witness-deps-04k7ajgt.js +0 -2
  74. package/dist/dust-z4av6tq0.js +0 -57
  75. package/dist/help-6q5bv3ma.js +0 -2
  76. package/dist/passphrase-x33jkceg.js +0 -2
  77. package/dist/prepare-qhmmx1cp.js +0 -2
  78. package/dist/runtime-check-bcs9vc31.js +0 -2
  79. package/dist/serve-payer-z61n9qt1.js +0 -2
  80. package/dist/swap-7h203xka.js +0 -49
  81. package/dist/transfer-ftpr5p84.js +0 -32
  82. package/dist/transfer-request-pbtf7qt8.js +0 -2
  83. package/dist/wallet-7m1tvbsv.js +0 -386
  84. package/dist/wallet-create-brh55b4c.js +0 -2
package/README.md CHANGED
@@ -50,6 +50,7 @@ Install the prerelease with npm (or run it with `npx`). It ships an `npm-shrinkw
50
50
  | `midnight dev [path]` | Iteration loop for Compact contract development (localnet + compile-on-save + one-key deploy) |
51
51
  | `midnight contract <inspect\|deploy\|call\|state> [options]` | Inspect, deploy, call, and query Midnight smart contracts |
52
52
  | `midnight swap <make\|inspect\|take\|cancel\|list> [options]` | Private swaps of shielded tokens, through offer files (experimental) |
53
+ | `midnight tx status <hash or identifier> [options]` | What became of a transaction: its block, time, fee and result |
53
54
  | `midnight grant <deploy\|deposit\|status\|list\|issue\|revoke\|revoke-all\|export\|import\|device> [options]` | This wallet's account, and the grants that let an agent spend from it (experimental) |
54
55
  | `midnight localnet <up\|stop\|down\|status\|logs\|clean>` | Manage a local Midnight network via Docker Compose (up is refused on this ledger-9 build) |
55
56
  | `midnight help [command]` | Show usage for all commands or a specific command |
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{k as _}from"./wallet-b1v87xw6.js";import"./wallet-wybe948x.js";import{A as F,B as V,C,D as A,E as N,F as K,H as h,I as R,K as E,r as B,s as O,u as P,y as L}from"./wallet-fxbfef5d.js";import{S as I}from"./wallet-zry57pyk.js";import"./wallet-vn9pp5nm.js";import"./wallet-56gd7q8n.js";import*as G from"node:fs";import{anyEngine as g}from"@kuiralabs/midnight-cli-core/lib/engine";import*as Q from"node:path";import{ownerDeviceFromSecret as D}from"@kuiralabs/midnight-account-chain/owner";import{UsageError as Z}from"@kuiralabs/midnight-cli-core/lib/errors";import{FileExistsError as b,writeJsonDurably as f}from"@kuiralabs/midnight-cli-core/lib/durable-file";import{openSecret as u,sealSecret as y}from"@kuiralabs/midnight-cli-core/lib/keystore";var U="mn-account-backup",S=1,w=(j,T="")=>G.readdirSync(Q.join(j,T),{withFileTypes:!0}).flatMap((W)=>{let H=Q.join(T,W.name);return W.isDirectory()?w(j,H):[H]}),k=(j,T,W)=>{let H=N(j,T).read();return H.length>0?H:[R(j,T,W)]},v=(j,T)=>{if(!B(j))throw new Z(`The account in ${j} is not protected. Encrypt it first: midnight wallet protect`);return L(j,T)};async function d(j,T,W,H,{forDevice:X}={}){let q=v(j,W),Y=F(j,q).readOwner(),z=V(j,q).read();if(Y===void 0||z===void 0)throw new Z(`The account in ${j} has not been deployed yet: there is nothing to back up.`);let M=_(j,()=>"").database,$={record:Y,roster:F(j,q).readRoster(),...X===void 0?{device:{arm:z.arm,secret:z.secretText(),readSecret:Buffer.from(h(j,q)).toString("hex")}}:{},devices:[...new Set([...k(j,q,z),...X===void 0?[]:[I(X,X.readKey)]])],privateStatePassword:A(j,q,(await g()).contracts.acceptsPrivateStatePassword),privateState:G.existsSync(M)?Object.fromEntries(w(M).map((m)=>[m,G.readFileSync(Q.join(M,m)).toString("base64")])):{}},x={kind:U,v:S,network:T,contractAddress:Y.contractAddress,sealed:y(Buffer.from(JSON.stringify($),"utf8"),W,"account-backup")},J=Q.resolve(H);try{f(J,x,{exclusive:!0})}catch(m){if(m instanceof b)throw new Z(`${J} already exists; a backup is never written over a file.`);throw m}return{contractAddress:Y.contractAddress,file:J}}async function i(j,T,W,H){let X=JSON.parse(G.readFileSync(Q.resolve(H),"utf8"));if(X.kind!==U||X.v!==S)throw new Z(`${H} is not an account backup mn can read.`);if(X.network!==T)throw new Z(`${H} is a backup of an account on ${X.network}, not on ${T}.`);let q=JSON.parse(u(X.sealed,W,"account-backup").toString("utf8")),Y=_(j,()=>"").database,z;if(q.device===void 0){if(!K(j))throw new Z(`${H} was made for another device to join the account. Make this machine's device first, with: midnight grant device new`);z=L(j,W);let $=V(j,z).read(),x=$===void 0?void 0:R(j,z,$);if(x===void 0||!q.devices.includes(x))throw new Z(`${H} was made for another device, not this machine's (${x??"none"}).`);if(G.existsSync(Y))throw new Z(`The wallet already holds a private state in ${j}; a backup is never imported over one.`)}else{if(B(j)||P(j)||G.existsSync(Q.join(j,"owner.json"))||G.existsSync(Y))throw new Z(`The wallet already has an account in ${j}; a backup is never imported over one.`);z=O(j,W),V(j,z).keep(D(q.device.arm,q.device.secret)),E(j,z,new Uint8Array(Buffer.from(q.device.readSecret,"hex")))}let M=F(j,z);N(j,z).write(q.devices),C(j,z,q.privateStatePassword);for(let[$,x]of Object.entries(q.privateState)){let J=Q.join(Y,$);if(!J.startsWith(Y+Q.sep))throw Error(`The backup names a private-state file outside its database: ${$}`);G.mkdirSync(Q.dirname(J),{recursive:!0,mode:448}),G.writeFileSync(J,Buffer.from(x,"base64"),{mode:384})}return M.writeRoster(q.roster),M.writeOwner(q.record),{contractAddress:q.record.contractAddress}}export{i as importAccount,d as exportAccount};
2
+ import{k as _}from"./wallet-t4rnacdc.js";import"./wallet-wybe948x.js";import{A as F,B as V,C,D as A,E as N,F as K,H as h,I as R,K as E,r as B,s as O,u as P,y as L}from"./wallet-fxbfef5d.js";import{S as I}from"./wallet-zry57pyk.js";import"./wallet-ee7ezgn2.js";import"./wallet-ce7ayvb9.js";import*as G from"node:fs";import{anyEngine as g}from"@kuiralabs/midnight-cli-core/lib/engine";import*as Q from"node:path";import{ownerDeviceFromSecret as D}from"@kuiralabs/midnight-account-chain/owner";import{UsageError as Z}from"@kuiralabs/midnight-cli-core/lib/errors";import{FileExistsError as b,writeJsonDurably as f}from"@kuiralabs/midnight-cli-core/lib/durable-file";import{openSecret as u,sealSecret as y}from"@kuiralabs/midnight-cli-core/lib/keystore";var U="mn-account-backup",S=1,w=(j,T="")=>G.readdirSync(Q.join(j,T),{withFileTypes:!0}).flatMap((W)=>{let H=Q.join(T,W.name);return W.isDirectory()?w(j,H):[H]}),k=(j,T,W)=>{let H=N(j,T).read();return H.length>0?H:[R(j,T,W)]},v=(j,T)=>{if(!B(j))throw new Z(`The account in ${j} is not protected. Encrypt it first: midnight wallet protect`);return L(j,T)};async function d(j,T,W,H,{forDevice:X}={}){let q=v(j,W),Y=F(j,q).readOwner(),z=V(j,q).read();if(Y===void 0||z===void 0)throw new Z(`The account in ${j} has not been deployed yet: there is nothing to back up.`);let M=_(j,()=>"").database,$={record:Y,roster:F(j,q).readRoster(),...X===void 0?{device:{arm:z.arm,secret:z.secretText(),readSecret:Buffer.from(h(j,q)).toString("hex")}}:{},devices:[...new Set([...k(j,q,z),...X===void 0?[]:[I(X,X.readKey)]])],privateStatePassword:A(j,q,(await g()).contracts.acceptsPrivateStatePassword),privateState:G.existsSync(M)?Object.fromEntries(w(M).map((m)=>[m,G.readFileSync(Q.join(M,m)).toString("base64")])):{}},x={kind:U,v:S,network:T,contractAddress:Y.contractAddress,sealed:y(Buffer.from(JSON.stringify($),"utf8"),W,"account-backup")},J=Q.resolve(H);try{f(J,x,{exclusive:!0})}catch(m){if(m instanceof b)throw new Z(`${J} already exists; a backup is never written over a file.`);throw m}return{contractAddress:Y.contractAddress,file:J}}async function i(j,T,W,H){let X=JSON.parse(G.readFileSync(Q.resolve(H),"utf8"));if(X.kind!==U||X.v!==S)throw new Z(`${H} is not an account backup mn can read.`);if(X.network!==T)throw new Z(`${H} is a backup of an account on ${X.network}, not on ${T}.`);let q=JSON.parse(u(X.sealed,W,"account-backup").toString("utf8")),Y=_(j,()=>"").database,z;if(q.device===void 0){if(!K(j))throw new Z(`${H} was made for another device to join the account. Make this machine's device first, with: midnight grant device new`);z=L(j,W);let $=V(j,z).read(),x=$===void 0?void 0:R(j,z,$);if(x===void 0||!q.devices.includes(x))throw new Z(`${H} was made for another device, not this machine's (${x??"none"}).`);if(G.existsSync(Y))throw new Z(`The wallet already holds a private state in ${j}; a backup is never imported over one.`)}else{if(B(j)||P(j)||G.existsSync(Q.join(j,"owner.json"))||G.existsSync(Y))throw new Z(`The wallet already has an account in ${j}; a backup is never imported over one.`);z=O(j,W),V(j,z).keep(D(q.device.arm,q.device.secret)),E(j,z,new Uint8Array(Buffer.from(q.device.readSecret,"hex")))}let M=F(j,z);N(j,z).write(q.devices),C(j,z,q.privateStatePassword);for(let[$,x]of Object.entries(q.privateState)){let J=Q.join(Y,$);if(!J.startsWith(Y+Q.sep))throw Error(`The backup names a private-state file outside its database: ${$}`);G.mkdirSync(Q.dirname(J),{recursive:!0,mode:448}),G.writeFileSync(J,Buffer.from(x,"base64"),{mode:384})}return M.writeRoster(q.roster),M.writeOwner(q.record),{contractAddress:q.record.contractAddress}}export{i as importAccount,d as exportAccount};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{bc as c}from"./wallet-56gd7q8n.js";var l={name:"accounts",async protect(r,a,s){let{protectAllAccounts:n}=await import("./protect-account-cjt1kprd.js"),o=await n(r,a,s);return{report:o,items:o.map((e)=>{let t=`account of ${e.wallet} on ${e.network}`;if("error"in e)return{subject:t,error:e.error};return e.outcome==="sealed-now"?{subject:t,outcome:"sealed-now",sealedNote:"owner key, records and private state encrypted"}:{subject:t,outcome:"already-sealed"}})}}};export{l as accountProtector};
2
+ import{cc as c}from"./wallet-ce7ayvb9.js";var l={name:"accounts",async protect(r,a,s){let{protectAllAccounts:n}=await import("./protect-account-38xz3ds4.js"),o=await n(r,a,s);return{report:o,items:o.map((e)=>{let t=`account of ${e.wallet} on ${e.network}`;if("error"in e)return{subject:t,error:e.error};return e.outcome==="sealed-now"?{subject:t,outcome:"sealed-now",sealedNote:"owner key, records and private state encrypted"}:{subject:t,outcome:"already-sealed"}})}}};export{l as accountProtector};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{qa as j,ra as R,sa as k}from"./wallet-csq2jnjv.js";import"./wallet-hh8sn1zx.js";import"./wallet-1n657wjk.js";import{Qa as N}from"./wallet-rsjfsjg5.js";import{_a as A}from"./wallet-yjt60vht.js";import"./wallet-11ej36j3.js";import{fb as y}from"./wallet-ke9fpmrp.js";import"./wallet-56gd7q8n.js";import{existsSync as h,readFileSync as p}from"node:fs";async function v(K,J,Z=1e4){try{let O=await fetch(K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({query:"query($address: HexEncoded!) { contractAction(address: $address) { address } }",variables:{address:J}}),signal:AbortSignal.timeout(Z)});if(!O.ok)return;let X=await O.json();if(X.errors!==void 0||X.data===void 0||X.data===null)return;return X.data.contractAction!==null&&X.data.contractAction!==void 0}catch{return}}import{existsSync as C,mkdirSync as m,readFileSync as w,writeFileSync as S}from"node:fs";import{join as M}from"node:path";function g(K,J){return M(K,"tests","results",`.contract-cache-${J}.json`)}function W(K,J,Z){let O=g(K,J);if(!C(O))return;try{let X=JSON.parse(w(O,"utf-8"));if(X.network!==Z)return;return X.address}catch{return}}function P(K,J,Z,O){m(M(K,"tests","results"),{recursive:!0});let X={address:O,network:Z,timestamp:new Date().toISOString()};S(g(K,J),JSON.stringify(X,null,2)+`
2
+ import{qa as j,ra as R,sa as k}from"./wallet-csq2jnjv.js";import"./wallet-hh8sn1zx.js";import"./wallet-1n657wjk.js";import{Qa as N}from"./wallet-rsjfsjg5.js";import{_a as A}from"./wallet-yjt60vht.js";import"./wallet-11ej36j3.js";import{fb as y}from"./wallet-ke9fpmrp.js";import"./wallet-ce7ayvb9.js";import{existsSync as h,readFileSync as p}from"node:fs";async function v(K,J,Z=1e4){try{let O=await fetch(K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({query:"query($address: HexEncoded!) { contractAction(address: $address) { address } }",variables:{address:J}}),signal:AbortSignal.timeout(Z)});if(!O.ok)return;let X=await O.json();if(X.errors!==void 0||X.data===void 0||X.data===null)return;return X.data.contractAction!==null&&X.data.contractAction!==void 0}catch{return}}import{existsSync as C,mkdirSync as m,readFileSync as w,writeFileSync as S}from"node:fs";import{join as M}from"node:path";function g(K,J){return M(K,"tests","results",`.contract-cache-${J}.json`)}function W(K,J,Z){let O=g(K,J);if(!C(O))return;try{let X=JSON.parse(w(O,"utf-8"));if(X.network!==Z)return;return X.address}catch{return}}function P(K,J,Z,O){m(M(K,"tests","results"),{recursive:!0});let X={address:O,network:Z,timestamp:new Date().toISOString()};S(g(K,J),JSON.stringify(X,null,2)+`
3
3
  `)}async function XJ(K){let{actions:J,config:Z,dappDir:O,suiteName:X,networkConfig:_,servePort:$,redeploy:Y,onActionStart:b,onActionComplete:z,onMessage:F}=K,L=[],B=Z.network??"undeployed",G;if(!Y){if(G=W(O,X,B),G&&await v(_.indexer,G)===!1)F?.(`The contract cached at ${G.slice(0,16)}... is not on this chain; deploying again`),G=void 0}let{info:T}=N(O),D=r(T),Q;for(let q of J){b?.(q);let V=Date.now();if(Q&&(q.type==="contract-call"||q.type==="contract-state")){let E={id:q.id,type:q.type,status:"skip",duration:0,message:`cascaded skip — depends on ${Q}`};L.push(E),z?.(q,E);continue}try{let E=await f(q,{dappDir:O,network:B,networkConfig:_,managedDir:T.managedDir,contractName:T.name,servePort:$,contractAddress:G,witnessDeps:D,onMessage:F});if(E.contractAddress){if(G=E.contractAddress,P(O,X,B,G),q.type==="contract-deploy")Q=void 0}let U=Date.now()-V,H={...E,duration:U};if(L.push(H),z?.(q,H),E.status==="skip"&&q.type==="contract-call")Q=`skipped action "${q.id}"`}catch(E){let U=Date.now()-V,H={id:q.id,type:q.type,status:"fail",duration:U,message:E.message};L.push(H),z?.(q,H);break}}return L}async function f(K,J){switch(K.type){case"contract-deploy":return x(K,J);case"contract-call":return d(K,J);case"contract-state":return u(K,J);case"wallet-cmd":return l(K,J);default:throw Error(`Unknown action type: ${K.type}`)}}async function x(K,J){if(J.contractAddress)return{id:K.id,type:K.type,status:"pass",duration:0,contractAddress:J.contractAddress,message:`Reusing cached contract ${J.contractAddress.slice(0,16)}...`};let Z=await R({dappDir:J.dappDir,network:J.network,networkConfig:J.networkConfig,managedDir:J.managedDir,contractName:J.contractName,servePort:J.servePort,onMessage:J.onMessage});return{id:K.id,type:K.type,status:"pass",duration:0,contractAddress:Z.contractAddress,message:`Deployed at ${Z.contractAddress.slice(0,16)}...`}}async function d(K,J){if(!J.contractAddress)throw Error(`Action "${K.id}": no contract address. Add a contract-deploy action first.`);if(!K.circuit)throw Error(`Action "${K.id}": missing circuit name.`);let Z=J.witnessDeps.get(K.circuit);if(Z&&Z.length>0)return{id:K.id,type:K.type,status:"skip",duration:0,message:"not CLI-testable — circuit reads private state via witness "+`${Z.join(", ")}. Cover with mn test create --strategy ui.`};let O;try{O=await j({dappDir:J.dappDir,network:J.network,networkConfig:J.networkConfig,managedDir:J.managedDir,contractName:J.contractName,contractAddress:J.contractAddress,onMessage:()=>{}})}catch{}let X=K.args?Object.values(K.args):[];await k({dappDir:J.dappDir,network:J.network,networkConfig:J.networkConfig,managedDir:J.managedDir,contractName:J.contractName,contractAddress:J.contractAddress,circuit:K.circuit,args:X,servePort:J.servePort,onMessage:J.onMessage});let _;try{_=await j({dappDir:J.dappDir,network:J.network,networkConfig:J.networkConfig,managedDir:J.managedDir,contractName:J.contractName,contractAddress:J.contractAddress,onMessage:()=>{}})}catch{}return{id:K.id,type:K.type,status:"pass",duration:0,message:`${K.circuit} called`,stateBefore:O,stateAfter:_}}async function u(K,J){if(!J.contractAddress)throw Error(`Action "${K.id}": no contract address. Add a contract-deploy action first.`);let Z=await j({dappDir:J.dappDir,network:J.network,networkConfig:J.networkConfig,managedDir:J.managedDir,contractName:J.contractName,contractAddress:J.contractAddress,onMessage:J.onMessage});if(K.assert){let O=[];for(let[X,_]of Object.entries(K.assert)){let $=Z.fields[X];if($===void 0){let Y=Z.maps[X];if(Y)I(X,BigInt(Y.size),_,O);else O.push(`Field "${X}" not found in ledger state`);continue}try{let Y=BigInt($);I(X,Y,_,O)}catch{I(X,$,_,O)}}if(O.length>0)throw Error(`State assertion failed:
4
4
  ${O.join(`
5
5
  `)}`)}return{id:K.id,type:K.type,status:"pass",duration:0,message:`State checked (${Object.keys(Z.fields).length} fields, ${Object.keys(Z.maps).length} maps)`,stateAfter:Z}}function I(K,J,Z,O){for(let[X,_]of Object.entries(Z)){let $=typeof _==="number"?BigInt(_):_;if(typeof J==="bigint"&&(typeof $==="bigint"||typeof $==="number")){let Y=BigInt($);switch(X){case">":if(!(J>Y))O.push(`${K}: expected > ${Y}, got ${J}`);break;case">=":if(!(J>=Y))O.push(`${K}: expected >= ${Y}, got ${J}`);break;case"<":if(!(J<Y))O.push(`${K}: expected < ${Y}, got ${J}`);break;case"<=":if(!(J<=Y))O.push(`${K}: expected <= ${Y}, got ${J}`);break;case"==":if(J!==Y)O.push(`${K}: expected == ${Y}, got ${J}`);break;case"!=":if(J===Y)O.push(`${K}: expected != ${Y}, got ${J}`);break;default:O.push(`${K}: unknown operator "${X}"`)}}else{let Y=String($);switch(X){case"==":if(J!==Y)O.push(`${K}: expected == "${Y}", got "${J}"`);break;case"!=":if(J===Y)O.push(`${K}: expected != "${Y}", got "${J}"`);break;default:O.push(`${K}: operator "${X}" not supported for string values`)}}}}async function l(K,J){return{id:K.id,type:K.type,status:"pass",duration:0,message:`wallet-cmd: ${K.cmd??"no command"} (not yet implemented)`}}function r(K){if(K.witnesses.length===0)return new Map;let J=A(K.managedDir);if(!J||!h(J))return new Map;let Z=p(J,"utf-8"),O=K.witnesses.map((X)=>X.name);return y(Z,O).byCircuit}function YJ(K,J){if(!K||!J)return[];let Z=[],O=new Set([...Object.keys(K.fields),...Object.keys(J.fields)]);for(let _ of O){let $=K.fields[_]??"(absent)",Y=J.fields[_]??"(absent)";if($!==Y)Z.push({field:_,before:$,after:Y})}let X=new Set([...Object.keys(K.maps),...Object.keys(J.maps)]);for(let _ of X){let $=K.maps[_]?.size??"0",Y=J.maps[_]?.size??"0";if($!==Y)Z.push({field:`${_} (entries)`,before:$,after:Y})}return Z}export{XJ as runActions,YJ as diffState};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{yb as H}from"./wallet-wafaf7cc.js";import"./wallet-wez4z95e.js";import"./wallet-vn9pp5nm.js";import"./wallet-3qw465k0.js";import"./wallet-56gd7q8n.js";import{getFlag as K,hasFlag as L}from"@kuiralabs/midnight-cli-core/lib/argv";import{engineFor as M}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as O}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{keyValue as C,divider as Q,formatAddress as R}from"@kuiralabs/midnight-cli-core/ui/format";import{dim as T}from"@kuiralabs/midnight-cli-core/ui/colors";async function U(q,j){let J=await H(q,{requireExplicit:!0,label:"address"}),D=K(q,"index"),p=D!==void 0?parseInt(D,10):0;if(isNaN(p)||p<0||!Number.isInteger(Number(D??"0")))throw Error("Key index must be a non-negative integer");let z=O({args:q}),E=(await M(z)).keys.unshieldedAddress(J,z,p),G=`m/44'/2400'/0'/NightExternal/${p}`;if(L(q,"json")){j.output.result({address:E,network:z,index:p,path:G});return}j.output.stdout(E+`
2
+ import{zb as H}from"./wallet-bdg8krbb.js";import"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import{getFlag as K,hasFlag as L}from"@kuiralabs/midnight-cli-core/lib/argv";import{engineFor as M}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as O}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{keyValue as C,divider as Q,formatAddress as R}from"@kuiralabs/midnight-cli-core/ui/format";import{dim as T}from"@kuiralabs/midnight-cli-core/ui/colors";async function U(q,j){let J=await H(q,{requireExplicit:!0,label:"address"}),D=K(q,"index"),p=D!==void 0?parseInt(D,10):0;if(isNaN(p)||p<0||!Number.isInteger(Number(D??"0")))throw Error("Key index must be a non-negative integer");let z=O({args:q}),E=(await M(z)).keys.unshieldedAddress(J,z,p),G=`m/44'/2400'/0'/NightExternal/${p}`;if(L(q,"json")){j.output.result({address:E,network:z,index:p,path:G});return}j.output.stdout(E+`
3
3
  `),j.output.stderr(`
4
4
  `),j.output.stderr(C("Network",z)+`
5
5
  `),j.output.stderr(C("Index",p.toString())+`
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{Wa as a,Xa as b,Ya as c,Za as d,_a as e}from"./wallet-yjt60vht.js";import"./wallet-11ej36j3.js";import"./wallet-ke9fpmrp.js";import"./wallet-56gd7q8n.js";export{b as isClaudeAvailable,d as generateUiScaffoldWithAI,c as generateCliScaffoldWithAI,e as findContractSourcePath,a as claudeSubprocessRunner};
2
+ import{Wa as a,Xa as b,Ya as c,Za as d,_a as e}from"./wallet-yjt60vht.js";import"./wallet-11ej36j3.js";import"./wallet-ke9fpmrp.js";import"./wallet-ce7ayvb9.js";export{b as isClaudeAvailable,d as generateUiScaffoldWithAI,c as generateCliScaffoldWithAI,e as findContractSourcePath,a as claudeSubprocessRunner};
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ import{hb as W}from"./wallet-crx7jp0g.js";import{Ab as M,Cb as b,Db as P,Eb as V}from"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import{getFlag as J,hasFlag as O,rejectNoCacheForWrites as p}from"@kuiralabs/midnight-cli-core/lib/argv";import{resolveNetwork as u}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{applyEndpointOverrides as N}from"@kuiralabs/midnight-cli-core/lib/network";import{GENESIS_SEED as k}from"@kuiralabs/midnight-cli-core/lib/constants";import{engineFor as T}from"@kuiralabs/midnight-cli-core/lib/engine";import{parseAmount as w,nightToMicro as h}from"@kuiralabs/midnight-cli-core/lib/amount";import{header as y,keyValue as I,divider as C,formatAddress as v,successMessage as A}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as F,dim as _}from"@kuiralabs/midnight-cli-core/ui/colors";import{receiptJson as f,receiptOf as S}from"@kuiralabs/midnight-chain/lib/tx-receipt";async function m(z,K){p(z);let R=z.subcommand;if(!R)throw Error(`Missing amount.
3
+ Usage: midnight airdrop <amount> [--wallet <name|file|address>]
4
+ Example: midnight airdrop 1000
5
+ Example: midnight airdrop 1000 --wallet alice
6
+ Example: midnight airdrop 1000 --wallet mn_addr_undeployed1...`);let U=w(R),{name:Q,config:q}=u({args:z});if(N(q,{proofServer:J(z,"proof-server"),node:J(z,"node"),indexerWS:J(z,"indexer-ws")},Q),Q!=="undeployed")throw Error(`Airdrop is only available on the "undeployed" network (local devnet).
7
+ Current network: "${Q}"
8
+ On preprod/preview, use a faucet or transfer from another wallet.`);let j=J(z,"wallet"),X=O(z,"shielded")||j!==void 0&&j.startsWith("mn_shield-addr_"),Y=await g(z,Q,q,X);if(X)return c(z,Y,U,Q,q,K);return l(z,Y,U,Q,q,K)}function x(z){return z.startsWith("mn_addr_")||z.startsWith("mn_shield-addr_")}async function g(z,K,R,U){let Q=J(z,"wallet");if(Q!==void 0&&x(Q))return H(Q,K,U);let q=V(Q);if(U){let j=await P(q,K);if(j===void 0)throw Error(`Wallet ${q} keeps no shielded address for ${K}.`);return{kind:"wallet",bech32m:(await H(j,K,!0)).bech32m,walletPath:q}}return{kind:"address",address:await b(q,K)}}async function H(z,K,R){let U=z.startsWith("mn_shield-addr_");if(R&&!U)throw Error(`--shielded was passed but --wallet is an unshielded address.
9
+ Pass a shielded address (mn_shield-addr_...) or drop --shielded.
10
+ Got: ${z}`);let Q=R?`mn_shield-addr_${K}1`:`mn_addr_${K}1`;if(!z.startsWith(Q))throw Error(`Address does not match network "${K}".
11
+ Expected prefix: ${Q}
12
+ Got: ${z}`);if(R){try{(await T(K)).keys.assertAddress(z,"shielded",K)}catch(q){throw Error(`Invalid shielded address: ${q.message}`)}return{kind:"address",bech32m:z}}return{kind:"address",address:z}}async function l(z,K,R,U,Q,q){let j=K.address;q.output.stderr(`
13
+ `+y("Airdrop")+`
14
+
15
+ `),q.output.stderr(I("Network",U)+`
16
+ `),q.output.stderr(I("From",_("genesis (seed 0x01)"))+`
17
+ `),q.output.stderr(I("To",v(j,!0))+`
18
+ `),q.output.stderr(I("Amount",F(R+" NIGHT"))+`
19
+ `),q.output.stderr(`
20
+ `);let X=q.progress.start("Starting genesis wallet...");try{let Y=await(await T(U)).wallet.airdrop({networkConfig:Q,recipientAddress:j,amountNight:R,signal:q.signal,log:q.diagnostics.line,sdkWarnings:q.sdkWarnings,onSync($,Z){if(Z>0){let B=Math.round($/Z*100);X.update(`Syncing genesis wallet... ${B}%`)}},onDust($){X.update(`Dust: ${$}`)},onProving(){X.update("Generating ZK proof (this may take a few minutes)...")},onSubmitting(){X.update("Submitting and waiting for finalization (typically 12 to 30s)...")},onSubmittingTick($){let Z=Math.floor($/1000),B=Math.floor(Z/60).toString().padStart(2,"0"),G=(Z%60).toString().padStart(2,"0");X.update(`Submitting and waiting for finalization... ${B}:${G} elapsed (typically 12 to 30s)`)},onSyncWarning($,Z){X.update(`Syncing genesis wallet... (${Z}, retrying)`)}});X.update("Waiting for the indexer to list it...");let L=await S(Q.indexer,Y.txHash,q.signal);if(X.stop("Transaction submitted"),O(z,"json")){q.output.result({txHash:Y.txHash,amount:R,recipient:j,network:U,...f(L)});return}q.output.stdout(Y.txHash+`
21
+ `),q.output.stderr(`
22
+ `+A(`Airdropped ${R} NIGHT to your wallet`,Y.txHash)+`
23
+ `),q.output.stderr(W(L,Y.txHash)),q.output.stderr(`
24
+ `+C()+`
25
+ `),q.output.stderr(_(" Verify: midnight balance")+`
26
+ `),q.output.stderr(_(" Register dust: midnight dust register")+`
27
+ `),q.output.stderr(_(" Note: registering pays its fee from Dust this NIGHT generates, so it waits longer the less NIGHT")+`
28
+ `+_(" there is (about a minute for 1000 NIGHT). dust register says how long.")+`
29
+
30
+ `)}catch(Y){throw X.fail("Failed"),Y}}async function c(z,K,R,U,Q,q){let j=h(R),X=Buffer.from(k,"hex"),Y=K.bech32m;if(K.kind==="wallet")M(K.walletPath,U,Y);q.output.stderr(`
31
+ `+y("Shielded Airdrop")+`
32
+
33
+ `),q.output.stderr(I("Network",U)+`
34
+ `),q.output.stderr(I("From",_("genesis shielded (seed 0x01)"))+`
35
+ `),q.output.stderr(I("To",v(Y,!0))+`
36
+ `),q.output.stderr(I("Amount",F(R+" NIGHT (shielded)"))+`
37
+ `),q.output.stderr(`
38
+ `);let L=q.sdkWarnings.listen(void 0),$=q.progress.start("Syncing genesis wallet...");try{let Z=await(await T(U)).wallet.shieldedTransfer({seed:X,network:U,networkConfig:Q,recipient:Y,amount:j,progress:$,waitForDustToCover:!1,insufficient:(G)=>`Genesis wallet has insufficient shielded balance: ${G} NIGHT available, ${R} NIGHT requested`,log:q.diagnostics.line,signal:q.signal,onStatus:(G)=>$.update(G),onSyncProgress:(G,D)=>{if(D>0){let E=Math.min(Math.round(G/D*100),100);$.update(E>=100?"Syncing genesis wallet...":`Syncing genesis wallet... ${E}%`)}},onSyncDetail:(G)=>$.update(`Syncing genesis wallet... (waiting on: ${G})`)});$.update("Waiting for the indexer to list it...");let B=await S(Q.indexer,Z,q.signal);if($.stop("Transaction submitted"),O(z,"json")){q.output.result({txHash:Z,amount:R,shieldedAddress:Y,network:U,type:"shielded",...f(B)});return}q.output.stdout(Z+`
39
+ `),q.output.stderr(`
40
+ `+A(`Airdropped ${R} shielded NIGHT to your wallet`,Z)+`
41
+ `),q.output.stderr(W(B,Z)),q.output.stderr(`
42
+ `+C()+`
43
+ `),q.output.stderr(_(" Verify: midnight balance --shielded")+`
44
+
45
+ `)}catch(Z){throw $.fail("Failed"),Z}finally{L()}}export{m as default};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{xb as o}from"./wallet-wafaf7cc.js";import{Ib as g,zb as x}from"./wallet-wez4z95e.js";import"./wallet-vn9pp5nm.js";import"./wallet-3qw465k0.js";import"./wallet-56gd7q8n.js";import{getFlag as U,hasFlag as R,isMinimalMode as c}from"@kuiralabs/midnight-cli-core/lib/argv";import{isValidNetworkName as t}from"@kuiralabs/midnight-cli-core/lib/network";import{resolveNetwork as l}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{applyEndpointOverrides as d}from"@kuiralabs/midnight-cli-core/lib/network";import{shieldedSyncEnabled as e,shieldedDisabledReason as jj}from"@kuiralabs/midnight-cli-core/lib/shielded-policy";import{isNativeToken as y}from"@kuiralabs/midnight-chain/lib/balance-subscription";import{engineFor as m}from"@kuiralabs/midnight-cli-core/lib/engine";import{assertLedgerSupported as qj,fetchProtocolVersion as zj}from"@kuiralabs/midnight-chain/lib/ledger-guard";import{getChainGenesisHash as Kj}from"@kuiralabs/midnight-chain/lib/chain-id";function p(q={}){let j=Math.min(Math.max(q.windowMs??15000,1000),60000),z=[],X=null,_=(Y)=>{let I=Y-j;while(z.length>0&&z[0].t<I)z.shift()},H=()=>{let Y=z[z.length-1],I=z[0],K=Y.highest>0?Math.min(100,Math.round(Y.applied/Y.highest*100)):null,Q=null,Z=null;if(z.length>=2){let $=Y.applied-I.applied,W=Y.t-I.t;if(W>=1000&&$>0){Q=$/(W/1000);let J=Math.max(0,Y.highest-Y.applied);Z=J>0?J/Q:0}}return{applied:Y.applied,highest:Y.highest,percent:K,ratePerSec:Q,etaSec:Z}};return{sample(Y){return z.push(Y),_(Y.t),X=H(),X},snapshot(){return X},reset(){z.length=0,X=null}}}function h(q,j="Syncing"){let z=[j];if(q.percent!==null)z.push(`${q.percent}%`);else if(q.highest===0)z.push(`${q.applied} events`);if(q.etaSec!==null&&q.etaSec>0)z.push(`ETA ${s(q.etaSec)}`);if(q.ratePerSec!==null&&q.ratePerSec>0)z.push(`${Math.round(q.ratePerSec)} evt/s`);return z.join(" · ")}function s(q){if(!Number.isFinite(q)||q<0)return"?";if(q<60)return`${Math.ceil(q)}s`;let j=Math.floor(q/60),z=Math.round(q-j*60);if(j<60)return z>0?`${j}m ${z}s`:`${j}m`;let X=Math.floor(j/60),_=j-X*60;return _>0?`${X}h ${_}m`:`${X}h`}import{header as i,keyValue as G,divider as r,formatNight as u,formatAddress as k,toNight as B}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as O,dim as C}from"@kuiralabs/midnight-cli-core/ui/colors";async function Qj(q,j){if(q.subcommand)return Yj(q,j);return n(q,j)}function Xj(q){let j=q.match(/^mn_addr_([a-z]+)1/);if(!j)return null;let z=j[1];return t(z)?z:null}async function Yj(q,j){let z=q.subcommand;j.diagnostics.line("balance",`address=${z}`);let X=Xj(z),_=U(q,"network");if(_&&X&&_!==X)throw Error(`Address belongs to ${X} but --network is ${_}.
2
+ import{yb as o}from"./wallet-bdg8krbb.js";import{Ab as x,Jb as g}from"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import{getFlag as U,hasFlag as R,isMinimalMode as c}from"@kuiralabs/midnight-cli-core/lib/argv";import{isValidNetworkName as t}from"@kuiralabs/midnight-cli-core/lib/network";import{resolveNetwork as l}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{applyEndpointOverrides as d}from"@kuiralabs/midnight-cli-core/lib/network";import{shieldedSyncEnabled as e,shieldedDisabledReason as jj}from"@kuiralabs/midnight-cli-core/lib/shielded-policy";import{isNativeToken as y}from"@kuiralabs/midnight-chain/lib/balance-subscription";import{engineFor as m}from"@kuiralabs/midnight-cli-core/lib/engine";import{assertLedgerSupported as qj,fetchProtocolVersion as zj}from"@kuiralabs/midnight-chain/lib/ledger-guard";import{getChainGenesisHash as Kj}from"@kuiralabs/midnight-chain/lib/chain-id";function p(q={}){let j=Math.min(Math.max(q.windowMs??15000,1000),60000),z=[],X=null,_=(Y)=>{let I=Y-j;while(z.length>0&&z[0].t<I)z.shift()},H=()=>{let Y=z[z.length-1],I=z[0],K=Y.highest>0?Math.min(100,Math.round(Y.applied/Y.highest*100)):null,Q=null,Z=null;if(z.length>=2){let $=Y.applied-I.applied,W=Y.t-I.t;if(W>=1000&&$>0){Q=$/(W/1000);let J=Math.max(0,Y.highest-Y.applied);Z=J>0?J/Q:0}}return{applied:Y.applied,highest:Y.highest,percent:K,ratePerSec:Q,etaSec:Z}};return{sample(Y){return z.push(Y),_(Y.t),X=H(),X},snapshot(){return X},reset(){z.length=0,X=null}}}function h(q,j="Syncing"){let z=[j];if(q.percent!==null)z.push(`${q.percent}%`);else if(q.highest===0)z.push(`${q.applied} events`);if(q.etaSec!==null&&q.etaSec>0)z.push(`ETA ${s(q.etaSec)}`);if(q.ratePerSec!==null&&q.ratePerSec>0)z.push(`${Math.round(q.ratePerSec)} evt/s`);return z.join(" · ")}function s(q){if(!Number.isFinite(q)||q<0)return"?";if(q<60)return`${Math.ceil(q)}s`;let j=Math.floor(q/60),z=Math.round(q-j*60);if(j<60)return z>0?`${j}m ${z}s`:`${j}m`;let X=Math.floor(j/60),_=j-X*60;return _>0?`${X}h ${_}m`:`${X}h`}import{header as i,keyValue as G,divider as r,formatNight as u,formatAddress as k,toNight as B}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as O,dim as C}from"@kuiralabs/midnight-cli-core/ui/colors";async function Qj(q,j){if(q.subcommand)return Yj(q,j);return n(q,j)}function Xj(q){let j=q.match(/^mn_addr_([a-z]+)1/);if(!j)return null;let z=j[1];return t(z)?z:null}async function Yj(q,j){let z=q.subcommand;j.diagnostics.line("balance",`address=${z}`);let X=Xj(z),_=U(q,"network");if(_&&X&&_!==X)throw Error(`Address belongs to ${X} but --network is ${_}.
3
3
  Drop --network (we'll infer from the address) or pass an address for ${_}.`);if(!_&&X)q={...q,flags:{...q.flags,network:X}};let{name:H,config:Y}=l({args:q});if(R(q,"shielded")){let K=await g(z);if(K){j.diagnostics.line("balance",`shielded positional → wallet ${K.wallet.name} on ${K.network}`);let Q={...q,flags:{...q.flags,wallet:K.wallet.file,network:K.network}};return n(Q,j)}throw Error("Shielded balances are private — they can only be read with the wallet's secret key, "+`not from an address alone.
4
4
  This address isn't one of your wallets. Check its shielded balance from the wallet that owns it:
5
5
  midnight balance --wallet <name> --shielded --network ${H}`)}d(Y,{proofServer:U(q,"proof-server"),node:U(q,"node"),indexerWS:U(q,"indexer-ws")},H);let I=j.progress.start(`Checking balance on ${H}...`);try{let K=await(await m(H)).wallet.unshieldedBalance(z,Y,{forceFresh:R(q,"no-cache"),signal:j.signal,log:j.diagnostics.line,onProgress:(Q,Z)=>{if(Z>0){let $=Math.round(Q/Z*100);I.update(`Syncing transactions... ${$}%`)}}});if(I.stop(`Synced ${K.txCount} transactions`),R(q,"json")){let Q={};for(let[$,W]of K.balances){let J=y($)?"NIGHT":$;Q[J]=y($)?B(W):W.toString()}let Z=Q.NIGHT!==void 0?{NIGHT:Q.NIGHT}:{};if(c(q)){j.output.result({network:H,balances:Q,...Z,utxoCount:K.utxoCount});return}j.output.result({address:z,network:H,balances:Q,...Z,utxoCount:K.utxoCount,txCount:K.txCount});return}if(K.balances.size===0)j.output.stdout(`0
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{hb as L}from"./wallet-r5s7ppf3.js";import{Db as T,Qb as V}from"./wallet-wez4z95e.js";import"./wallet-vn9pp5nm.js";import"./wallet-3qw465k0.js";import"./wallet-56gd7q8n.js";import{getFlag as R,hasFlag as _}from"@kuiralabs/midnight-cli-core/lib/argv";import{UsageError as $,throwIfCancelled as p}from"@kuiralabs/midnight-cli-core/lib/errors";import{clearWalletCache as E}from"@kuiralabs/midnight-cli-core/lib/wallet-cache";import{clearDustDirectCache as I,clearNativeDustCheckpoint as S,clearShieldedDirectCache as U}from"@kuiralabs/midnight-cli-core/lib/reader-cache-files";import{engineFor as j}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as v}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{green as K}from"@kuiralabs/midnight-cli-core/ui/colors";async function M(A,z){if(A.subcommand!=="clear")throw new $("Usage: midnight cache clear [--network <name>] [--wallet <name|file>]");let B=R(A,"wallet"),G=R(A,"network"),H=_(A,"json");if(B){let X=T(B),J=await V(X);p(z.signal);let q=v({args:A}),Y=J.addresses[q];E(Y,q);let{keys:O}=await j(q),Q=O.dustPublicKeyHex(Buffer.from(J.seed,"hex"));I(q,Q),S(q,Q);let Z=O.shieldedCoinPublicKeyHex(Buffer.from(J.seed,"hex"));if(U(q,Z),H){z.output.result({action:"clear",scope:"wallet",wallet:B,network:q});return}z.output.stderr(K("✓")+` Cache cleared for wallet "${B}" on ${q}
2
+ import{ib as L}from"./wallet-ca3afdzh.js";import{Eb as T,Rb as V}from"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import{getFlag as R,hasFlag as _}from"@kuiralabs/midnight-cli-core/lib/argv";import{UsageError as $,throwIfCancelled as p}from"@kuiralabs/midnight-cli-core/lib/errors";import{clearWalletCache as E}from"@kuiralabs/midnight-cli-core/lib/wallet-cache";import{clearDustDirectCache as I,clearNativeDustCheckpoint as S,clearShieldedDirectCache as U}from"@kuiralabs/midnight-cli-core/lib/reader-cache-files";import{engineFor as j}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as v}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{green as K}from"@kuiralabs/midnight-cli-core/ui/colors";async function M(A,z){if(A.subcommand!=="clear")throw new $("Usage: midnight cache clear [--network <name>] [--wallet <name|file>]");let B=R(A,"wallet"),G=R(A,"network"),H=_(A,"json");if(B){let X=T(B),J=await V(X);p(z.signal);let q=v({args:A}),Y=J.addresses[q];E(Y,q);let{keys:O}=await j(q),Q=O.dustPublicKeyHex(Buffer.from(J.seed,"hex"));I(q,Q),S(q,Q);let Z=O.shieldedCoinPublicKeyHex(Buffer.from(J.seed,"hex"));if(U(q,Z),H){z.output.result({action:"clear",scope:"wallet",wallet:B,network:q});return}z.output.stderr(K("✓")+` Cache cleared for wallet "${B}" on ${q}
3
3
  `)}else if(G){if(L(G),H){z.output.result({action:"clear",scope:"network",network:G});return}z.output.stderr(K("✓")+` Cache cleared for network "${G}"
4
4
  `)}else{if(L(void 0),H){z.output.result({action:"clear",scope:"all"});return}z.output.stderr(K("✓")+` Cache cleared
5
5
  `)}}export{M as default};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{ib as a}from"./wallet-ca3afdzh.js";import"./wallet-ce7ayvb9.js";export{a as clearChainCaches};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{fb as a}from"./wallet-ke9fpmrp.js";import"./wallet-ce7ayvb9.js";export{a as analyzeWitnessDependencies};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{Fa as F,Ga as w}from"./wallet-64k8pxzd.js";import{Ha as k,Ia as D,Ja as p,Ka as m}from"./wallet-wrakcchp.js";import"./wallet-hh8sn1zx.js";import{Oa as j}from"./wallet-1n657wjk.js";import{Qa as b,Sa as C,Ta as v,Ua as f,Va as y}from"./wallet-rsjfsjg5.js";import{bc as S}from"./wallet-56gd7q8n.js";import{resolve as l}from"node:path";import{getFlag as P,hasFlag as I,requireFlag as i}from"@kuiralabs/midnight-cli-core/lib/argv";import{CancelledError as o,UsageError as n,throwIfCancelled as s}from"@kuiralabs/midnight-cli-core/lib/errors";import{untilCancelled as c}from"@kuiralabs/midnight-cli-core/lib/sleep";import{header as q,keyValue as E}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as O,dim as K,teal as T,yellow as u,green as g}from"@kuiralabs/midnight-cli-core/ui/colors";import{payerFor as h,resolvePayingTarget as V}from"@kuiralabs/midnight-cli-core/lib/payer";async function M({request:Q,target:z,wallet:G,payer:Z,progress:H,sdkWarnings:Y,signal:X}){let{dappDir:_,info:$,address:J,circuit:B,callArgs:L}=Q,{runCall:U}=await import("./runner-jc3va6pt.js");return F({target:z,wallet:G,payer:Z,progress:H,sdkWarnings:Y,signal:X},{running:`Calling ${B}...`,done:`${B} called`,failed:"Call failed"},async(R,A)=>{let W=await U({dappDir:_,network:z.network,networkConfig:z.networkConfig,managedDir:$.managedDir,contractName:$.name,contractAddress:J,circuit:B,args:L,servePort:R,onMessage:(N)=>A.update(N),signal:X});return{contractName:$.name,circuit:B,address:J,network:z.network,status:W.status}})}import{engineFor as a}from"@kuiralabs/midnight-cli-core/lib/engine";var d=["inspect","deploy","call","state"];function r(Q){return d.includes(Q)}async function e(Q,z){let G=Q.subcommand;if(!G||!r(G))throw new n(`Usage: midnight contract <${d.join("|")}>
2
+ import{Fa as F,Ga as w}from"./wallet-wzgnz0jm.js";import{Ha as k,Ia as D,Ja as p,Ka as m}from"./wallet-wrakcchp.js";import"./wallet-hh8sn1zx.js";import{Oa as j}from"./wallet-1n657wjk.js";import{Qa as b,Sa as C,Ta as v,Ua as f,Va as y}from"./wallet-rsjfsjg5.js";import{cc as S}from"./wallet-ce7ayvb9.js";import{resolve as l}from"node:path";import{getFlag as P,hasFlag as I,requireFlag as i}from"@kuiralabs/midnight-cli-core/lib/argv";import{CancelledError as o,UsageError as n,throwIfCancelled as s}from"@kuiralabs/midnight-cli-core/lib/errors";import{untilCancelled as c}from"@kuiralabs/midnight-cli-core/lib/sleep";import{header as q,keyValue as E}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as O,dim as K,teal as T,yellow as u,green as g}from"@kuiralabs/midnight-cli-core/ui/colors";import{payerFor as h,resolvePayingTarget as V}from"@kuiralabs/midnight-cli-core/lib/payer";async function M({request:Q,target:z,wallet:G,payer:Z,progress:H,sdkWarnings:Y,signal:X}){let{dappDir:_,info:$,address:J,circuit:B,callArgs:L}=Q,{runCall:U}=await import("./runner-9jes3w2f.js");return F({target:z,wallet:G,payer:Z,progress:H,sdkWarnings:Y,signal:X},{running:`Calling ${B}...`,done:`${B} called`,failed:"Call failed"},async(R,A)=>{let W=await U({dappDir:_,network:z.network,networkConfig:z.networkConfig,managedDir:$.managedDir,contractName:$.name,contractAddress:J,circuit:B,args:L,servePort:R,onMessage:(N)=>A.update(N),signal:X});return{contractName:$.name,circuit:B,address:J,network:z.network,status:W.status}})}import{engineFor as a}from"@kuiralabs/midnight-cli-core/lib/engine";var d=["inspect","deploy","call","state"];function r(Q){return d.includes(Q)}async function e(Q,z){let G=Q.subcommand;if(!G||!r(G))throw new n(`Usage: midnight contract <${d.join("|")}>
3
3
 
4
4
  inspect Show circuits, witnesses, and types for a compiled contract
5
5
  deploy Deploy a contract to the network
@@ -53,7 +53,7 @@ Run "midnight help contract" for more info.`);switch(G){case"inspect":return t(Q
53
53
  `);let B=await M({request:H,target:$,wallet:P(Q,"wallet"),payer:z,progress:(L)=>Z?G.progress.silent():G.progress.start(L),sdkWarnings:G.sdkWarnings,signal:G.signal});if(Z)G.output.result({subcommand:"call",contractName:B.contractName,circuit:_,address:X,network:J,status:B.status});else G.output.stderr(`
54
54
  `+g(" ✓ Circuit call successful")+`
55
55
 
56
- `)}async function Xz(Q,z){let G=I(Q,"json"),Z=l(P(Q,"path")??process.cwd()),H=D(Q),Y=P(Q,"name"),X=i(Q,"address","contract address");k(X);let{runState:_}=await import("./runner-jc3va6pt.js"),{network:$,networkConfig:J}=V(Q,"contract","state");if(!G)z.output.stderr(`
56
+ `)}async function Xz(Q,z){let G=I(Q,"json"),Z=l(P(Q,"path")??process.cwd()),H=D(Q),Y=P(Q,"name"),X=i(Q,"address","contract address");k(X);let{runState:_}=await import("./runner-9jes3w2f.js"),{network:$,networkConfig:J}=V(Q,"contract","state");if(!G)z.output.stderr(`
57
57
  `+q("Contract State")+`
58
58
 
59
59
  `),z.output.stderr(E("Address",X.slice(0,20)+"...")+`
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{$a as a,ab as b,bb as c,cb as d}from"./wallet-11ej36j3.js";import"./wallet-56gd7q8n.js";export{b as placeholderArgsFor,a as placeholderArg,c as buildScaffold,d as buildPromptMarkdown};
2
+ import{$a as a,ab as b,bb as c,cb as d}from"./wallet-11ej36j3.js";import"./wallet-ce7ayvb9.js";export{b as placeholderArgsFor,a as placeholderArg,c as buildScaffold,d as buildPromptMarkdown};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import"./wallet-56gd7q8n.js";import{existsSync as G,mkdirSync as J,readFileSync as O,writeFileSync as A}from"node:fs";import{join as X}from"node:path";function E(q,K){let{dappDir:M,force:H=!1}=K,z=X(M,"tests","suites",q.suiteName),Q=X(M,"dapp.test.json"),W=[{path:X(z,"suite.json"),kind:"json",body:q.suite},{path:X(z,"assertions.json"),kind:"json",body:q.assertions}];if(q.actions)W.push({path:X(z,"actions.json"),kind:"json",body:q.actions});if(q.prompt)W.push({path:X(z,"prompt.md"),kind:"text",body:q.prompt});if(!H){let R=W.filter((V)=>G(V.path)).map((V)=>V.path);if(R.length>0)throw Error(`Suite "${q.suiteName}" already exists at ${z}.
2
+ import"./wallet-ce7ayvb9.js";import{existsSync as G,mkdirSync as J,readFileSync as O,writeFileSync as A}from"node:fs";import{join as X}from"node:path";function E(q,K){let{dappDir:M,force:H=!1}=K,z=X(M,"tests","suites",q.suiteName),Q=X(M,"dapp.test.json"),W=[{path:X(z,"suite.json"),kind:"json",body:q.suite},{path:X(z,"assertions.json"),kind:"json",body:q.assertions}];if(q.actions)W.push({path:X(z,"actions.json"),kind:"json",body:q.actions});if(q.prompt)W.push({path:X(z,"prompt.md"),kind:"text",body:q.prompt});if(!H){let R=W.filter((V)=>G(V.path)).map((V)=>V.path);if(R.length>0)throw Error(`Suite "${q.suiteName}" already exists at ${z}.
3
3
  Pick a different suite name (--suite <name>) or pass --force to overwrite.
4
4
  Existing files:
5
5
  `+R.map((V)=>` - ${V}`).join(`
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{Ga as z}from"./wallet-64k8pxzd.js";import{Ja as A}from"./wallet-wrakcchp.js";import"./wallet-hh8sn1zx.js";import"./wallet-rsjfsjg5.js";import"./wallet-56gd7q8n.js";import{resolvePayingTarget as J}from"@kuiralabs/midnight-cli-core/lib/payer";async function N(B,f,E,F,G,H,I){let x={command:"contract",subcommand:"deploy",positionals:[],flags:{path:B,wallet:f,network:E}};return z({request:A(x),target:J(x,"contract","deploy"),wallet:f,payer:F,progress:()=>G,sdkWarnings:H,signal:I})}export{N as deployDevContract};
2
+ import{Ga as z}from"./wallet-wzgnz0jm.js";import{Ja as A}from"./wallet-wrakcchp.js";import"./wallet-hh8sn1zx.js";import"./wallet-rsjfsjg5.js";import"./wallet-ce7ayvb9.js";import{resolvePayingTarget as J}from"@kuiralabs/midnight-cli-core/lib/payer";async function N(B,f,E,F,G,H,I){let x={command:"contract",subcommand:"deploy",positionals:[],flags:{path:B,wallet:f,network:E}};return z({request:A(x),target:J(x,"contract","deploy"),wallet:f,payer:F,progress:()=>G,sdkWarnings:H,signal:I})}export{N as deployDevContract};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{Ma as Kz,Na as Qz}from"./wallet-hh8sn1zx.js";import{tb as p,ub as n,vb as a}from"./wallet-z7aqejee.js";import{Db as I,Eb as d,Fb as l,Mb as F,Qb as c}from"./wallet-wez4z95e.js";import{Ub as Gz,Yb as Hz,Zb as m}from"./wallet-vn9pp5nm.js";import"./wallet-3qw465k0.js";import{bc as Bz}from"./wallet-56gd7q8n.js";import{resolve as sz,relative as zz}from"node:path";import{payerFor as rz}from"@kuiralabs/midnight-cli-core/lib/payer";import{existsSync as f,readFileSync as Nz,readdirSync as Tz,statSync as _z}from"node:fs";import{dirname as Ez,join as A,resolve as y}from"node:path";var Rz=["compact","compile"],Iz=["test:dev","test"],Wz=[".","contract/src","contract","src"],Az=4,Cz=new Set(["node_modules",".git","dist","build","managed","target"]);function j(z){let Z=y(z),X=new Set,$=new Set;for(let V of Wz){let L=y(Z,V);if(!f(L))continue;k(L,0,X,$)}if(X.size===0)throw Error(`No .compact source files found under ${Z}
2
+ import{Ma as Kz,Na as Qz}from"./wallet-hh8sn1zx.js";import{ub as p,vb as n,wb as a}from"./wallet-wb2y6vy0.js";import{Eb as I,Fb as d,Gb as l,Nb as F,Rb as c}from"./wallet-m9bxb9x8.js";import{Vb as Gz,Zb as Hz,_b as m}from"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import{cc as Bz}from"./wallet-ce7ayvb9.js";import{resolve as sz,relative as zz}from"node:path";import{payerFor as rz}from"@kuiralabs/midnight-cli-core/lib/payer";import{existsSync as f,readFileSync as Nz,readdirSync as Tz,statSync as _z}from"node:fs";import{dirname as Ez,join as A,resolve as y}from"node:path";var Rz=["compact","compile"],Iz=["test:dev","test"],Wz=[".","contract/src","contract","src"],Az=4,Cz=new Set(["node_modules",".git","dist","build","managed","target"]);function j(z){let Z=y(z),X=new Set,$=new Set;for(let V of Wz){let L=y(Z,V);if(!f(L))continue;k(L,0,X,$)}if(X.size===0)throw Error(`No .compact source files found under ${Z}
3
3
  Run "mn dev" from a Midnight project directory (expected .compact files in ./, ./src, ./contract, or ./contract/src).`);let B=Sz([...$],Z),G=B?.dir??Z,K=B?.packageJson??D(A(Z,"package.json")),H=B?.script??b(K),Q=[...X].filter((V)=>P(V,G)).sort(),q=[...$].filter((V)=>P(V,G)).sort(),U=Fz(K);return{projectRoot:G,sourceFiles:Q.length>0?Q:[...X].sort(),sourceDirs:q.length>0?q:[...$].sort(),compileScript:H,hasNpmCompileScript:H!==null,testScript:U,packageJson:K}}function Fz(z){for(let Z of Iz)if(w(z,Z))return Z;return null}function P(z,Z){if(z===Z)return!0;let X=Z.endsWith("/")?Z:Z+"/";return z.startsWith(X)}function Sz(z,Z){for(let X of z){let $=X;while(!0){let B=A($,"package.json"),G=D(B),K=b(G);if(G&&K)return{dir:$,packageJson:G,script:K};if($===Z)break;let H=Ez($);if(H===$)break;$=H}}return null}function b(z){for(let Z of Rz)if(w(z,Z))return Z;return null}function D(z){if(!f(z))return null;try{let Z=JSON.parse(Nz(z,"utf-8"));return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)?Z:null}catch{return null}}function w(z,Z){if(!z)return!1;let X=z.scripts;if(!X||typeof X!=="object")return!1;return typeof X[Z]==="string"}function k(z,Z,X,$){if(Z>Az)return;let B;try{B=Tz(z)}catch{return}for(let G of B){if(G.startsWith(".")||Cz.has(G))continue;let K=A(z,G),H=!1;try{H=_z(K).isDirectory()}catch{continue}if(H)k(K,Z+1,X,$);else if(G.endsWith(".compact"))X.add(K),$.add(z)}}import{spawn as vz}from"node:child_process";async function x(z){let{bin:Z,args:X,label:$}=yz(z),B=Date.now();return new Promise((G,K)=>{let H=vz(Z,X,{cwd:z.project.projectRoot,stdio:["ignore","pipe","pipe"]}),Q="",q="";H.stdout?.on("data",(V)=>{Q+=V.toString()}),H.stderr?.on("data",(V)=>{q+=V.toString()});let U=()=>{H.kill("SIGTERM")};if(z.signal)if(z.signal.aborted)U();else z.signal.addEventListener("abort",U,{once:!0});H.on("error",(V)=>{z.signal?.removeEventListener("abort",U),K(Error(`Failed to spawn "${$}": ${V.message}`))}),H.on("close",(V)=>{z.signal?.removeEventListener("abort",U),G({success:V===0,durationMs:Date.now()-B,command:$,stdout:Q,stderr:q,exitCode:V??-1})})})}function yz(z){if(z.commandOverride){let{bin:Z,args:X}=z.commandOverride;return{bin:Z,args:X,label:[Z,...X].join(" ")}}if(z.project.compileScript){let Z=z.project.compileScript;return{bin:"npm",args:["run",Z,"--silent"],label:`npm run ${Z}`}}throw Error(`No compile script found in package.json.
4
4
  Add one of:
5
5
  "compact": "compact compile src/<your>.compact src/managed/<your>"
@@ -40,14 +40,14 @@ create-mn-app and midnight-starship templates ship with this already wired.`);Z.
40
40
  `),M()};if(N.signal.aborted){O();return}if(N.signal.addEventListener("abort",O,{once:!0}),X?.aborted){R();return}X?.addEventListener("abort",R,{once:!0})})}async function ZZ(z,Z){let X=await XZ(z.projectRoot);if(X.length>0&&!Kz(z.projectRoot)){let B=Qz({projectRoot:z.projectRoot,witnessNames:X});Z.output.stderr(_(` ✗ Cannot auto-deploy:
41
41
  `));for(let G of B.split(`
42
42
  `))Z.output.stderr(Y(` ${G}
43
- `));return}let $=Z.progress.start(`Deploying with ${Zz} on ${$z}...`);try{let{deployDevContract:B}=await import("./deploy-wj9dmx17.js"),G=await B(z.projectRoot,Zz,$z,rz("dev deploy",Z),Z.progress.silent(),Z.sdkWarnings,Z.signal);$.stop("Deployed"),Z.output.stderr(` ${Y("address")} ${qz(G.address)}
43
+ `));return}let $=Z.progress.start(`Deploying with ${Zz} on ${$z}...`);try{let{deployDevContract:B}=await import("./deploy-rm4mpapa.js"),G=await B(z.projectRoot,Zz,$z,rz("dev deploy",Z),Z.progress.silent(),Z.sdkWarnings,Z.signal);$.stop("Deployed"),Z.output.stderr(` ${Y("address")} ${qz(G.address)}
44
44
  `)}catch(B){$.fail("Deploy failed");let G=B instanceof Error?B.message:String(B);Z.output.stderr(E(" "+G)+`
45
45
  `)}}async function $Z(z,Z,X){z.stderr(Y(`
46
46
  Running npm run ${Z.testScript}...
47
47
  `));try{let $=await h({project:Z,signal:X,output:"inherit"});if($.success)z.stderr(` ${Y("─")} Tests passed ${Y(`(${W($.durationMs)})`)}
48
48
  `);else z.stderr(` ${Y("─")} ${E("Tests failed")} ${Y(`(exit ${$.exitCode}, ${W($.durationMs)})`)}
49
49
  `)}catch($){let B=$ instanceof Error?$.message:String($);z.stderr(E(" Test runner error: ")+B+`
50
- `)}}async function XZ(z){try{let{findContractInfo:Z}=await import("./inspect-cge38gtw.js"),{info:X}=Z(z);return X.witnesses.map(($)=>$.name)}catch{return[]}}async function Xz(z,Z){let X=Z.progress.start("Compiling...");try{let $=await x({project:z,signal:Z.signal});if($.success)X.stop(`Compiled ${Y(`(${W($.durationMs)})`)}`);else if(X.fail(`Compile failed ${Y(`(${W($.durationMs)})`)}`),$.stderr.trim())Z.output.stderr(Y(" ─ stderr ─")+`
50
+ `)}}async function XZ(z){try{let{findContractInfo:Z}=await import("./inspect-tzc41x88.js"),{info:X}=Z(z);return X.witnesses.map(($)=>$.name)}catch{return[]}}async function Xz(z,Z){let X=Z.progress.start("Compiling...");try{let $=await x({project:z,signal:Z.signal});if($.success)X.stop(`Compiled ${Y(`(${W($.durationMs)})`)}`);else if(X.fail(`Compile failed ${Y(`(${W($.durationMs)})`)}`),$.stderr.trim())Z.output.stderr(Y(" ─ stderr ─")+`
51
51
  `),Z.output.stderr(_(BZ($.stderr.trim()," "))+`
52
52
  `);return $}catch($){X.fail("Compile error");let B=$ instanceof Error?$.message:String($);return Z.output.stderr(E(" "+B)+`
53
53
  `),{success:!1,durationMs:0,command:"",stdout:"",stderr:B,exitCode:-1}}}function W(z){if(z<1000)return`${z}ms`;return`${(z/1000).toFixed(2)}s`}function BZ(z,Z){return z.split(`
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{db as a,eb as b}from"./wallet-hrarrm8j.js";import"./wallet-56gd7q8n.js";export{b as discoverScreensInDir,a as discoverScreens};
2
+ import{db as a,eb as b}from"./wallet-hrarrm8j.js";import"./wallet-ce7ayvb9.js";export{b as discoverScreensInDir,a as discoverScreens};
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ import{hb as M}from"./wallet-crx7jp0g.js";import{zb as F}from"./wallet-bdg8krbb.js";import{Eb as D,Rb as S}from"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import{getFlag as P,hasFlag as W,isMinimalMode as B,rejectNoCacheForWrites as y}from"@kuiralabs/midnight-cli-core/lib/argv";import{UsageError as v,throwIfCancelled as U}from"@kuiralabs/midnight-cli-core/lib/errors";import{resolveNetwork as N}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{applyEndpointOverrides as C}from"@kuiralabs/midnight-cli-core/lib/network";import{checkBalance as h}from"@kuiralabs/midnight-chain/lib/balance-subscription";import{engineFor as J}from"@kuiralabs/midnight-cli-core/lib/engine";import{header as b,keyValue as $,divider as j,formatDust as R,successMessage as f,toDust as E}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as I,dim as O,yellow as p}from"@kuiralabs/midnight-cli-core/ui/colors";import{receiptJson as w,receiptOf as k}from"@kuiralabs/midnight-chain/lib/tx-receipt";async function m(K,X){let Y=K.subcommand;if(!Y||Y!=="register"&&Y!=="status"&&Y!=="export")throw new v(`Missing or invalid subcommand.
3
+ Usage:
4
+ midnight dust register Register NIGHT UTXOs for dust generation
5
+ midnight dust status Check dust registration status
6
+ midnight dust export Export a restorable dust snapshot (dustSerializedState)`);let{name:Q,config:z}=N({args:K});C(z,{proofServer:P(K,"proof-server"),node:P(K,"node"),indexerWS:P(K,"indexer-ws")},Q);let G=W(K,"json"),H=B(K);if(Y==="export"){let A=X.sdkWarnings.listen(void 0);try{await l(await F(K),Q,z,G,H,X)}finally{A()}return}let q=await S(D(P(K,"wallet"))),_=Buffer.from(q.seed,"hex"),Z=q.addresses[Q];if(Y==="status"){let A=await u(Z,Q,z.indexerWS,X);if(!A.isRegistered){d(Q,A,G,H,X);return}let L=!W(K,"no-cache");await a(_,Q,z,A,G,H,L,X);return}y(K),await g(_,Q,z,G,X)}async function l(K,X,Y,Q,z,G){let H=G.progress.start(`Reading dust events from ${X}...`);try{let q=await(await J(X)).wallet.exportDust(K,X,Y,{signal:G.signal,log:G.diagnostics.line,onProgress:(_,Z)=>H.update(Z>0?`Reading dust events... ${_}/${Z+1}`:`Reading dust events... ${_}`)});if(H.stop(q.partial?"Dust snapshot ready (incomplete)":q.fromCache&&q.eventCount===0?"Cache up to date":"Dust snapshot ready"),Q){G.output.result({subcommand:"export",network:q.network,dustPublicKey:q.dustPublicKey,offset:q.offset,dustBalance:E(q.balance),eventCount:q.eventCount,fromCache:q.fromCache,partial:q.partial,snapshot:q.snapshot});return}if(G.output.stdout(q.snapshot+`
7
+ `),z)return;if(G.output.stderr(`
8
+ `+$("Network",q.network)+`
9
+ `),G.output.stderr($("Dust balance",R(q.balance))+`
10
+ `),G.output.stderr($("Snapshot offset",String(q.offset))+`
11
+ `),q.partial)G.output.stderr(`
12
+ `+p(I("⚠ Snapshot is INCOMPLETE — the sync did not reach the chain tip."))+`
13
+ `+O(" Restoring it still beats a cold start, but the wallet has events left to catch up on.")+`
14
+ `+O(" Re-run `mn dust export` to resume from this checkpoint and finish.")+`
15
+ `);G.output.stderr(`
16
+ `+O("Restore with the wallet SDK dustSerializedState to skip the cold dust sync.")+`
17
+ `)}catch(q){throw H.fail("Failed"),q}}async function u(K,X,Y,Q){Q.output.stderr(`
18
+ `+b("Dust Status")+`
19
+
20
+ `),Q.output.stderr($("Network",X)+`
21
+
22
+ `);let z=Q.progress.start(`Checking registration on ${X}...`);try{let G=await h(K,Y,(_,Z)=>{if(Z>0){let A=Math.min(Math.round(_/Z*100),100);z.update(A>=100?"Checking registration...":`Checking registration... ${A}%`)}},Q.signal);U(Q.signal);let{registeredUtxos:H,unregisteredUtxos:q}=G;return z.stop("Registration checked"),{isRegistered:H>0,registeredUtxos:H,unregisteredUtxos:q}}catch(G){throw z.fail("Failed"),G}}function d(K,X,Y,Q,z){let{registeredUtxos:G,unregisteredUtxos:H}=X,q=G+H;if(Y){if(Q){z.output.result({network:K,registered:!1,registeredUtxos:G,unregisteredUtxos:H});return}z.output.result({subcommand:"status",registered:!1,registeredUtxos:G,unregisteredUtxos:H,network:K});return}if(z.output.stdout(`registered=no
23
+ `),z.output.stdout(`registered_utxos=${G}
24
+ `),z.output.stdout(`unregistered_utxos=${H}
25
+ `),z.output.stderr($("Registered",I("no"))+`
26
+ `),z.output.stderr($("UTXOs",`${G} registered, ${H} unregistered`)+`
27
+ `),q===0)z.output.stderr(`
28
+ `+O("No NIGHT UTXOs at this address. Fund the wallet first.")+`
29
+ `);else z.output.stderr(`
30
+ `+O("Not generating dust. Run: midnight dust register")+`
31
+ `);z.output.stderr(`
32
+ `+j()+`
33
+
34
+ `)}async function g(K,X,Y,Q,z){let G=Y.networkId.toLowerCase();z.output.stderr(`
35
+ `+b("Dust Register")+`
36
+
37
+ `),z.output.stderr($("Network",G)+`
38
+
39
+ `);let H=z.progress.start("Syncing wallet...");try{let q=await(await J(X)).wallet.registerDust(K,Y,{signal:z.signal,sdkWarnings:z.sdkWarnings,log:z.diagnostics.line,onStatus:(A)=>H.update(A),onSyncProgress:(A,L)=>{if(L>0){let T=Math.min(Math.round(A/L*100),100);H.update(T>=100?"Syncing wallet...":`Syncing wallet... ${T}%`)}},onSyncDetail:(A)=>H.update(`Syncing wallet... (waiting on: ${A})`),onSyncWarning:(A,L)=>H.update(`Syncing wallet... (${L}, retrying)`)}),_=q.dustBalance,Z;if(q.txHash)H.update("Waiting for the indexer to list it..."),Z=await k(Y.indexer,q.txHash,z.signal);if(H.stop(q.alreadyAvailable?"Dust already available":"Dust registration complete"),Q){let A={subcommand:"register",dustBalance:E(_)};if(q.txHash)A.txHash=q.txHash;if(Z)Object.assign(A,w(Z));z.output.result(A);return}z.output.stdout(_.toString()+`
40
+ `),z.output.stderr(`
41
+ `+f(q.alreadyAvailable?`Dust tokens already available: ${R(_)}`:`Dust tokens available: ${R(_)}`)+`
42
+ `),z.output.stderr((Z&&q.txHash?M(Z,q.txHash):"")+`
43
+ `)}catch(q){throw H.fail("Failed"),q}}async function a(K,X,Y,Q,z,G,H,q){let _=Y.networkId.toLowerCase(),Z=q.progress.start(`Reading dust events from ${_}...`);try{let A=await(await J(X)).wallet.dustBalance(K,Y,{forceFresh:!H,signal:q.signal,log:q.diagnostics.line,onStatus:(V)=>Z.update(V)});Z.stop(A.fromCache&&A.eventsApplied===0?"Cache up to date":"Dust events applied");let{registeredUtxos:L,unregisteredUtxos:T}=Q;if(z){if(G){q.output.result({network:_,registered:!0,registeredUtxos:L,unregisteredUtxos:T,dustBalance:E(A.balance),dustAvailable:A.availableCoins>0});return}q.output.result({subcommand:"status",registered:!0,registeredUtxos:L,unregisteredUtxos:T,dustBalance:E(A.balance),dustAvailable:A.availableCoins>0,eventsApplied:A.eventsApplied,ownedUtxos:A.ownedUtxoCount,cached:A.fromCache,network:_});return}if(q.output.stdout(`registered=yes
44
+ `),q.output.stdout(`dust=${A.balance}
45
+ `),q.output.stdout(`registered_utxos=${L}
46
+ `),q.output.stdout(`unregistered_utxos=${T}
47
+ `),q.output.stderr($("Registered",I("yes"))+`
48
+ `),q.output.stderr($("UTXOs",`${L} registered, ${T} unregistered`)+`
49
+ `),q.output.stderr($("Dust Balance",I(R(A.balance)))+`
50
+ `),q.output.stderr($("Dust Available",A.availableCoins>0?"yes":"no")+`
51
+ `),q.output.stderr($("Events applied",A.eventsApplied.toString()+(A.fromCache?" (delta)":""))+`
52
+ `),T>0)q.output.stderr(`
53
+ `+O(`${T} UTXO(s) not yet registered. Run: midnight dust register`)+`
54
+ `);q.output.stderr(`
55
+ `+j()+`
56
+
57
+ `)}catch(A){throw Z.fail("Failed"),A}}export{m as default};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{wb as H}from"./wallet-wafaf7cc.js";import{Nb as A}from"./wallet-wez4z95e.js";import{Zb as b}from"./wallet-vn9pp5nm.js";import{$b as V}from"./wallet-3qw465k0.js";import"./wallet-56gd7q8n.js";import*as p from"fs";import*as y from"path";import{getFlag as R,hasFlag as U}from"@kuiralabs/midnight-cli-core/lib/argv";import{generateMnemonic as P,mnemonicToSeedSync as I,validateMnemonic as k}from"@scure/bip39";import{wordlist as M}from"@scure/bip39/wordlists/english.js";import{engineFor as v}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as F}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{header as w,keyValue as X,divider as S,formatAddress as h}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as T,yellow as W,dim as u,green as f}from"@kuiralabs/midnight-cli-core/ui/colors";import{throwIfCancelled as l}from"@kuiralabs/midnight-cli-core/lib/errors";async function g(E,j){let G=F({args:E}),Y=R(E,"output"),Z=R(E,"seed"),_=process.env.MN_SEED?.trim(),K=Z??(_?_:void 0),J=R(E,"mnemonic");if(K!==void 0&&J!==void 0)throw Error("Cannot specify both --seed and --mnemonic. Use one or the other.");let L=Y?y.resolve(Y):V();if(p.existsSync(L)&&!U(E,"force"))throw Error(`Wallet file already exists: ${L}
2
+ import{xb as H}from"./wallet-bdg8krbb.js";import{Ob as A}from"./wallet-m9bxb9x8.js";import{_b as b}from"./wallet-ee7ezgn2.js";import{ac as V}from"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import*as p from"fs";import*as y from"path";import{getFlag as R,hasFlag as U}from"@kuiralabs/midnight-cli-core/lib/argv";import{generateMnemonic as P,mnemonicToSeedSync as I,validateMnemonic as k}from"@scure/bip39";import{wordlist as M}from"@scure/bip39/wordlists/english.js";import{engineFor as v}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as F}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{header as w,keyValue as X,divider as S,formatAddress as h}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as T,yellow as W,dim as u,green as f}from"@kuiralabs/midnight-cli-core/ui/colors";import{throwIfCancelled as l}from"@kuiralabs/midnight-cli-core/lib/errors";async function g(E,j){let G=F({args:E}),Y=R(E,"output"),Z=R(E,"seed"),_=process.env.MN_SEED?.trim(),K=Z??(_?_:void 0),J=R(E,"mnemonic");if(K!==void 0&&J!==void 0)throw Error("Cannot specify both --seed and --mnemonic. Use one or the other.");let L=Y?y.resolve(Y):V();if(p.existsSync(L)&&!U(E,"force"))throw Error(`Wallet file already exists: ${L}
3
3
  Use --force to overwrite, or --output <file> to save to a different path.`);let z,q;if(K!==void 0)z=H(K,Z!==void 0?"--seed":"MN_SEED");else if(J!==void 0){if(!k(J,M))throw Error("Invalid BIP-39 mnemonic. Expected 12 or 24 words from the English wordlist.");q=J,z=Buffer.from(I(q))}else q=P(M,256),z=Buffer.from(I(q));let O=(await v(G)).keys.unshieldedAddresses(z),Q=O[G],$={addresses:O,createdAt:new Date().toISOString()},N=q?{seed:z.toString("hex"),mnemonic:q}:{seed:z.toString("hex")},B=await b(void 0,{signal:j.signal});l(j.signal);let C=A(L,$,N,B,{overwrite:U(E,"force")});if(U(E,"json")){let D={addresses:O,activeAddress:Q,activeNetwork:G,seed:z.toString("hex"),file:C,createdAt:$.createdAt};if(q)D.mnemonic=q;j.output.result(D);return}if(j.output.stdout(Q+`
4
4
  `),j.output.stderr(`
5
5
  `+w("Wallet Generated")+`
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import"./wallet-56gd7q8n.js";import{hasFlag as J}from"@kuiralabs/midnight-cli-core/lib/argv";import{GENESIS_SEED as K}from"@kuiralabs/midnight-cli-core/lib/constants";import{engineFor as L}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as M}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{keyValue as z,divider as O,formatAddress as P}from"@kuiralabs/midnight-cli-core/ui/format";import{dim as Q}from"@kuiralabs/midnight-cli-core/ui/colors";async function R(C,j){let p=M({args:C}),H=Buffer.from(K,"hex"),q=(await L(p)).keys.unshieldedAddress(H,p);if(J(C,"json")){j.output.result({address:q,network:p});return}j.output.stdout(q+`
2
+ import"./wallet-ce7ayvb9.js";import{hasFlag as J}from"@kuiralabs/midnight-cli-core/lib/argv";import{GENESIS_SEED as K}from"@kuiralabs/midnight-cli-core/lib/constants";import{engineFor as L}from"@kuiralabs/midnight-cli-core/lib/engine";import{resolveNetworkName as M}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{keyValue as z,divider as O,formatAddress as P}from"@kuiralabs/midnight-cli-core/ui/format";import{dim as Q}from"@kuiralabs/midnight-cli-core/ui/colors";async function R(C,j){let p=M({args:C}),H=Buffer.from(K,"hex"),q=(await L(p)).keys.unshieldedAddress(H,p);if(J(C,"json")){j.output.result({address:q,network:p});return}j.output.stdout(q+`
3
3
  `),j.output.stderr(`
4
4
  `),j.output.stderr(z("Network",p)+`
5
5
  `),j.output.stderr(z("Address",P(q))+`
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{e as Qz}from"./wallet-dmk3g8wb.js";import"./wallet-50qp35yf.js";import{n as e,o as m}from"./wallet-b1v87xw6.js";import"./wallet-wybe948x.js";import"./wallet-fxbfef5d.js";import{Q as zz}from"./wallet-hrz0vezs.js";import{U as t,V as k,W as r}from"./wallet-zry57pyk.js";import"./wallet-wez4z95e.js";import"./wallet-vn9pp5nm.js";import"./wallet-3qw465k0.js";import{bc as _}from"./wallet-56gd7q8n.js";import{existsSync as Rz}from"node:fs";import{hasFlag as Tz,getFlag as Ez}from"@kuiralabs/midnight-cli-core/lib/argv";import{UsageError as S}from"@kuiralabs/midnight-cli-core/lib/errors";import{ERROR_CODES as o,classifyError as Mz}from"@kuiralabs/midnight-cli-core/lib/exit-codes";import{formatDust as $z}from"@kuiralabs/midnight-cli-core/ui/format";var Hz={transactions:5,totalDust:48,largestDust:17.1};function w(z){let{transactions:X,totalDust:W,largestDust:Z}=Hz;return`Deploying an account takes about ${W} DUST from the wallet over ${X} transactions, the largest about ${Z} DUST at once (measured on a local ledger-9 chain; fee prices move with the chain's load). This wallet had ${$z(z)} when the deploy began.
2
+ import{e as Qz}from"./wallet-trfmf39r.js";import"./wallet-ad6gw2zh.js";import{n as e,o as m}from"./wallet-t4rnacdc.js";import"./wallet-wybe948x.js";import"./wallet-fxbfef5d.js";import{Q as zz}from"./wallet-hrz0vezs.js";import{U as t,V as k,W as r}from"./wallet-zry57pyk.js";import"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import{cc as _}from"./wallet-ce7ayvb9.js";import{existsSync as Rz}from"node:fs";import{hasFlag as Tz,getFlag as Ez}from"@kuiralabs/midnight-cli-core/lib/argv";import{UsageError as S}from"@kuiralabs/midnight-cli-core/lib/errors";import{ERROR_CODES as o,classifyError as Mz}from"@kuiralabs/midnight-cli-core/lib/exit-codes";import{formatDust as $z}from"@kuiralabs/midnight-cli-core/ui/format";var Hz={transactions:5,totalDust:48,largestDust:17.1};function w(z){let{transactions:X,totalDust:W,largestDust:Z}=Hz;return`Deploying an account takes about ${W} DUST from the wallet over ${X} transactions, the largest about ${Z} DUST at once (measured on a local ledger-9 chain; fee prices move with the chain's load). This wallet had ${$z(z)} when the deploy began.
3
3
  Dust builds up with time from the NIGHT registered for it: see how much there is with "midnight dust status", and run the same command again when there is enough. A deploy that stopped part way carries on from where it stopped, so it then needs only what is left.`}import{randomBytes as Jz}from"node:crypto";import{NIGHT as Bz}from"@kuiralabs/midnight-account-chain/contract";import{exhaustedGrants as Yz,grantRequestFromLink as Kz,issueReadGrant as Wz,revokeEveryGrant as Gz,revokeReadGrant as Pz,sealedResponseLink as Uz,termsFor as bz}from"@kuiralabs/midnight-account-chain/owner";import{UsageError as Vz}from"@kuiralabs/midnight-cli-core/lib/errors";var I=(z)=>Buffer.from(z).toString("hex"),h={perCallCap:300000n,cap:500000n,maxCoinValue:2000000n,expiresInSeconds:86400},_z=0,Lz=3,Fz=(z)=>BigInt(Math.floor(z.getTime()/1000));function q(z,X,W){let{ledger:Z}=z,J=z.coins.filter((G)=>!G.isSpent),Y=new Map;for(let G of J)Y.set(I(G.color),(Y.get(I(G.color))??0n)+G.value);let K=z.useCounter??0n,P={account:z.address,device:{arm:X,code:W,useCounter:K.toString()},devices:Z.device_count.toString(),authNonce:Z.auth_nonce.toString(),encKey:I(Z.enc_key),grants:Z.grants.size().toString(),held:Object.fromEntries([...Y].map(([G,Q])=>[G,Q.toString()]))};return{result:P,lines:[`account ${z.address}`,`device ${X}, use counter ${K}; ${Z.device_count} device(s); auth_nonce ${Z.auth_nonce}`,`this machine's device: ${W}`,`enc_key ${P.encKey}`,...[...Y].map(([G,Q])=>`holds ${Q} of color ${G} in ${J.filter(($)=>I($.color)===G).length} coin(s)`),`${Z.grants.size()} grant record(s)`]}}function x(z,X){let{ledger:W,roster:Z}=z,J=new Set(Yz(W,Z,X).map((Q)=>Q.grantId)),Y=new Map(Z.entries.map((Q)=>[Q.grantId,Q])),K=Fz(X),P=[...W.grants].map(([Q,$])=>{let H=I(Q),j=Y.get(H);return{grantId:H,slot:j?.slot,roster:j?.status??"not in the roster",active:$.active,expired:$.scope.expires_at!==0n&&K>=$.scope.expires_at,nonce:$.nonce.toString(),perCallCap:$.scope.per_call_cap.toString(),cap:$.scope.cap.toString(),expiresAt:$.scope.expires_at.toString(),read:$.scope.read,exhausted:J.has(H)}}),G=P.map((Q)=>`${Q.grantId} slot ${Q.slot??"?"}: ${Q.active?Q.expired?"expired":"live":"revoked"} (${Q.roster}), ${Q.nonce} spend(s), per-call ${Q.perCallCap}, cap ${Q.cap}${Q.read?", read":""}${Q.exhausted?", spent to its cap":""}`);if(J.size>0)G.push(`${J.size} live grant(s) are spent to their cap: they can never pay again, yet every rotation re-seals to them.`);return{result:{grants:P},lines:G}}function l(z){try{return Kz(z)}catch(X){throw new Vz(X instanceof Error?X.message:String(X))}}function Cz(z){return{color:Bz,perCallCap:z.perCall===void 0?h.perCallCap:BigInt(z.perCall),cap:z.cap===void 0?h.cap:BigInt(z.cap),maxCoinValue:z.maxCoin===void 0?h.maxCoinValue:BigInt(z.maxCoin),expiresInSeconds:z.expiresIn===void 0?h.expiresInSeconds:Number(z.expiresIn)}}function jz(z){if(z===void 0)return"via any caller";return`via contract ${I(z)} only: the agent spends only when that contract calls the account, and that call is public on chain`}function i(z,X,W){let Z=bz(z,Cz(X),W),J={account:z.account,clientId:z.clientId,slot:z.slot,grantee:z.granteeKey.arm,payee:z.payToKind===_z?"any shielded coin key":`${z.payToKind===Lz?"contract":"coin key"} ${I(z.payTo)}`,caller:jz(z.caller),perCallCap:Z.perCallCap.toString(),cap:Z.cap.toString(),maxCoinValue:Z.object.maxCoinValue.toString(),expires:new Date(Number(Z.expiresAt)*1000).toISOString()};return{terms:Z,asked:J,askedLines:Object.entries(J).map(([Y,K])=>` ${Y}: ${K}`)}}function u(z,X,W){let{asked:Z,askedLines:J}=i(z,X,W);return{result:{confirmed:!1,request:Z},lines:["the request asks for:",...J,"re-run with --yes to issue it"]}}async function a(z,X,W,Z){let{terms:J,asked:Y}=i(X,W,Z),K=await Wz(z,X,J,new Uint8Array(Jz(32))),P=Uz(K),G=K.resumed?{...Y,perCallCap:K.scope.perCallCap.toString(),cap:K.scope.cap.toString(),maxCoinValue:K.scope.object.maxCoinValue.toString(),expires:new Date(Number(K.scope.expiresAt)*1000).toISOString()}:Y,Q=Object.entries(G).map(([$,H])=>` ${$}: ${H}`);return{result:{confirmed:!0,grantId:I(K.grantId),request:G,fallbackLink:P,...K.resumed?{resumed:!0}:{}},lines:[K.resumed?`issued ${I(K.grantId)} in an earlier run that was interrupted, with these terms:`:`issued ${I(K.grantId)}:`,...Q,"the response is in the grant mailbox; if the agent cannot read the chain, give it this link (midnight-mandate's receive_grant takes it):",P]}}async function d(z,X){let{revoked:W,alreadyRevoked:Z}=await Pz(z,X),[J]=W;if(J!==void 0)return{result:{revoked:I(J)},lines:[`revoked ${I(J)}`]};return{result:{alreadyRevoked:Z},lines:Z.map((Y)=>`already revoked: ${Y}`)}}async function c(z){return await Gz(z),{result:{revokedAll:!0,generation:(await z.readLedger()).grant_generation.toString()},lines:["revoked every grant"]}}import{NATIVE_TOKEN_TYPE as Iz}from"@kuiralabs/midnight-cli-core/lib/constants";async function n(z,X,W,Z,J,Y){let{feeWalletOver:K}=await import("@kuiralabs/midnight-account-chain/connector"),P=await z.connect(X,W,Z,J,Y);try{let G=await K({getShieldedAddresses:()=>P.addresses(),balanceUnsealedTransaction:async($)=>({tx:await P.balanceTransaction($)}),submitTransaction:($)=>P.submit($)}),Q=async()=>(await P.balances()).shielded[Iz]??0n;return Z.stop("Wallet ready"),{feeWallet:G,shieldedNight:Q,stop:()=>P.close()}}catch(G){throw await P.close(),G}}import{payerFor as Sz}from"@kuiralabs/midnight-cli-core/lib/payer";import{dim as C}from"@kuiralabs/midnight-cli-core/ui/colors";import{header as Az,keyValue as R,formatNight as s}from"@kuiralabs/midnight-cli-core/ui/format";import{throwIfCancelled as p}from"@kuiralabs/midnight-cli-core/lib/errors";var Nz={deploy:"Deploying the account...",deposit:"Depositing into the account...",status:"Reading the account...",list:"Reading the grants...",issue:"Reading the grant request...",revoke:"Revoking the grant...","revoke-all":"Revoking every grant...",export:"Writing the backup...",import:"Importing the backup...",device:"Working on the account's devices..."};function Dz(z){let{errorCode:X}=Mz(z);return X===o.DUST_REQUIRED||X===o.INSUFFICIENT_BALANCE}function Oz(z,X){return new S(`Not enough shielded NIGHT for this deposit: the wallet holds ${s(z)} shielded and the deposit takes ${s(X)}. Get shielded NIGHT into it first: midnight airdrop <amount> --shielded on a local chain, or midnight transfer <this wallet> <amount> --shielded from another wallet.`)}async function fz(z,X){let{request:W,target:Z,walletName:J,recordsDir:Y,account:K}=await Qz(z),P=Tz(z,"json"),G=Ez(z,"wallet"),Q=(A)=>P?X.progress.silent():X.progress.start(A);if(!P){if(X.output.stderr(`
4
4
  `+Az(`Grant: ${W.subcommand}`)+`
5
5
 
@@ -7,14 +7,14 @@ Dust builds up with time from the NIGHT registered for it: see how much there is
7
7
  `),X.output.stderr(R("Wallet",J)+`
8
8
  `),K!==null)X.output.stderr(R("Account",K.address)+`
9
9
  `);X.output.stderr(`
10
- `)}let $=zz(W)?Sz(`grant ${W.subcommand}`,X):void 0,H=$?await $.assertCanPay(Z,G,Q("Checking wallet..."),X.signal):void 0,j=$?await n($,Z,G,Q("Opening the wallet..."),X.sdkWarnings,X.signal):void 0;try{await kz(W,{target:Z,walletName:J,recordsDir:Y,account:K,jsonMode:P,paying:j,funds:H,spinnerFor:Q},X)}finally{await j?.stop()}}async function kz(z,{target:X,walletName:W,recordsDir:Z,account:J,jsonMode:Y,paying:K,funds:P,spinnerFor:G},Q){let $=G(Nz[z.subcommand]);if(z.subcommand==="device"&&z.action==="new"){let{createPendingDevice:B,openAccountKey:V,ownJoinCode:b}=await import("./sealed-account-ycx7cfmh.js"),{unlockPassphrase:L,passphraseForNewSecret:U,isPassphraseSet:T}=await import("./passphrase-x33jkceg.js"),E=T()?await L():await U(),F=B(Z,E),O=b(Z,V(Z,E),F);if($.stop("Device ready"),Y)Q.output.result({subcommand:"device",action:"new",network:X.network,wallet:W,ownerKey:"sealed",code:O});else Q.output.stderr(`
10
+ `)}let $=zz(W)?Sz(`grant ${W.subcommand}`,X):void 0,H=$?await $.assertCanPay(Z,G,Q("Checking wallet..."),X.signal):void 0,j=$?await n($,Z,G,Q("Opening the wallet..."),X.sdkWarnings,X.signal):void 0;try{await kz(W,{target:Z,walletName:J,recordsDir:Y,account:K,jsonMode:P,paying:j,funds:H,spinnerFor:Q},X)}finally{await j?.stop()}}async function kz(z,{target:X,walletName:W,recordsDir:Z,account:J,jsonMode:Y,paying:K,funds:P,spinnerFor:G},Q){let $=G(Nz[z.subcommand]);if(z.subcommand==="device"&&z.action==="new"){let{createPendingDevice:B,openAccountKey:V,ownJoinCode:b}=await import("./sealed-account-88s2rt32.js"),{unlockPassphrase:L,passphraseForNewSecret:U,isPassphraseSet:T}=await import("./passphrase-09gjshqc.js"),E=T()?await L():await U(),F=B(Z,E),O=b(Z,V(Z,E),F);if($.stop("Device ready"),Y)Q.output.result({subcommand:"device",action:"new",network:X.network,wallet:W,ownerKey:"sealed",code:O});else Q.output.stderr(`
11
11
  `+C(" On a machine already an owner of the account, run:")+`
12
12
  `),Q.output.stderr(C(` midnight grant device add ${O} --backup <file>`)+`
13
13
  `),Q.output.stderr(C(" then bring that file here: midnight grant import <file>")+`
14
14
  `),Q.output.stderr(C(" The code is signed afresh each time it is shown; any of them adds this device.")+`
15
15
 
16
16
  `),Q.output.stdout(O+`
17
- `);return}if(z.subcommand==="import"){let{importAccount:B}=await import("./account-backup-kvg9gyq1.js"),{unlockPassphrase:V,passphraseForNewSecret:b,isPassphraseSet:L}=await import("./passphrase-x33jkceg.js");try{let U=L()?await V():await b(),{contractAddress:T}=await B(Z,X.network,U,z.file);if($.stop("Imported"),Y)Q.output.result({subcommand:z.subcommand,network:X.network,wallet:W,ownerKey:"sealed",address:T});else Q.output.stderr(`
17
+ `);return}if(z.subcommand==="import"){let{importAccount:B}=await import("./account-backup-1nyq1m42.js"),{unlockPassphrase:V,passphraseForNewSecret:b,isPassphraseSet:L}=await import("./passphrase-09gjshqc.js");try{let U=L()?await V():await b(),{contractAddress:T}=await B(Z,X.network,U,z.file);if($.stop("Imported"),Y)Q.output.result({subcommand:z.subcommand,network:X.network,wallet:W,ownerKey:"sealed",address:T});else Q.output.stderr(`
18
18
  `+R("Account",T)+`
19
19
  `+C(" Use it from one machine at a time: this machine now acts as the same owner device.")+`
20
20
 
@@ -39,10 +39,10 @@ Dust builds up with time from the NIGHT registered for it: see how much there is
39
39
  `+C(" Next: midnight grant status")+`
40
40
 
41
41
  `),Q.output.stdout(F.txHash+`
42
- `);return}case"status":case"list":{let{readOwnerView:B}=await import("@kuiralabs/midnight-account-chain/owner"),V=m(H),b=await B(H.context.network,H.store,V),L=H.ownCode?.()??"none until the account is protected (midnight wallet protect)";D(z.subcommand==="status"?q(b,V.arm,L):x(b,H.context.clock()));return}case"issue":{let B=l(z.link);if(!z.confirmed){D(u(B,z.limits,H.context.clock()));return}D(await a(await N(),B,z.limits,H.context.clock()));return}case"revoke":D(await d(await N(),z.target));return;case"revoke-all":D(await c(await N()));return;case"device":{if(H.protection!=="sealed")throw new S("The account is not protected: its devices are managed once it is. Encrypt it first: midnight wallet protect");let{openAccountKey:B,sealedDeviceList:V}=await import("./sealed-account-ycx7cfmh.js"),{unlockPassphrase:b}=await import("./passphrase-x33jkceg.js"),L=await b(),U=V(Z,B(Z,L));if(H.ownCode===void 0)throw Error("A sealed account names its own device code");let T=H.ownCode(),E=U.read().length>0?U.read():[T];if(z.action==="list"){if($.stop("Done"),Y)Q.output.result({...j,action:"list",devices:E.map((M)=>({code:M,thisMachine:M===T}))});else Q.output.stdout(E.map((M)=>`${M}${M===T?" (this machine)":""}`).join(`
42
+ `);return}case"status":case"list":{let{readOwnerView:B}=await import("@kuiralabs/midnight-account-chain/owner"),V=m(H),b=await B(H.context.network,H.store,V),L=H.ownCode?.()??"none until the account is protected (midnight wallet protect)";D(z.subcommand==="status"?q(b,V.arm,L):x(b,H.context.clock()));return}case"issue":{let B=l(z.link);if(!z.confirmed){D(u(B,z.limits,H.context.clock()));return}D(await a(await N(),B,z.limits,H.context.clock()));return}case"revoke":D(await d(await N(),z.target));return;case"revoke-all":D(await c(await N()));return;case"device":{if(H.protection!=="sealed")throw new S("The account is not protected: its devices are managed once it is. Encrypt it first: midnight wallet protect");let{openAccountKey:B,sealedDeviceList:V}=await import("./sealed-account-88s2rt32.js"),{unlockPassphrase:b}=await import("./passphrase-09gjshqc.js"),L=await b(),U=V(Z,B(Z,L));if(H.ownCode===void 0)throw Error("A sealed account names its own device code");let T=H.ownCode(),E=U.read().length>0?U.read():[T];if(z.action==="list"){if($.stop("Done"),Y)Q.output.result({...j,action:"list",devices:E.map((M)=>({code:M,thisMachine:M===T}))});else Q.output.stdout(E.map((M)=>`${M}${M===T?" (this machine)":""}`).join(`
43
43
  `)+`
44
44
 
45
- `);return}let F=t(z.code);if(z.action==="add"){let{addOwnerDevice:M}=await import("@kuiralabs/midnight-account-chain/owner"),{exportAccount:Xz}=await import("./account-backup-kvg9gyq1.js");if(F.arm!=="v1")throw new S("The account adds JubJub devices only (a v1 device code, as midnight grant device new makes).");if(F.attestation===void 0)throw new S("This device code carries no signature of its read key, which the account's other devices need. Show the code again on the new device (midnight grant device new prints it).");if(z.backup!==void 0&&Rz(z.backup))throw new S(`${z.backup} already exists; a backup is never written over a file.`);await M(await N(),F.attestation);let y=k(z.code);U.write([...E.filter((Zz)=>k(Zz)!==y),y]);let f=z.backup===void 0?void 0:await Xz(Z,X.network,L,z.backup,{forDevice:F});if($.stop("Device added"),Y)Q.output.result({...j,action:"add",code:y,...f===void 0?{}:{backup:f.file}});else{if(Q.output.stderr(`
45
+ `);return}let F=t(z.code);if(z.action==="add"){let{addOwnerDevice:M}=await import("@kuiralabs/midnight-account-chain/owner"),{exportAccount:Xz}=await import("./account-backup-1nyq1m42.js");if(F.arm!=="v1")throw new S("The account adds JubJub devices only (a v1 device code, as midnight grant device new makes).");if(F.attestation===void 0)throw new S("This device code carries no signature of its read key, which the account's other devices need. Show the code again on the new device (midnight grant device new prints it).");if(z.backup!==void 0&&Rz(z.backup))throw new S(`${z.backup} already exists; a backup is never written over a file.`);await M(await N(),F.attestation);let y=k(z.code);U.write([...E.filter((Zz)=>k(Zz)!==y),y]);let f=z.backup===void 0?void 0:await Xz(Z,X.network,L,z.backup,{forDevice:F});if($.stop("Device added"),Y)Q.output.result({...j,action:"add",code:y,...f===void 0?{}:{backup:f.file}});else{if(Q.output.stderr(`
46
46
  `+R("Added",y)+`
47
47
  `+(f===void 0?"":R("Backup",f.file)+`
48
48
  `)),Q.output.stderr(C(" The account was sealed to the new device on chain: its secret, the devices' read keys and every live grant.")+`
@@ -52,7 +52,7 @@ Dust builds up with time from the NIGHT registered for it: see how much there is
52
52
  `+R(v?"Removed":"Already removed",z.code)+`
53
53
  `+C(" The account's encryption key was rotated after, away from the removed device.")+`
54
54
 
55
- `);return}case"export":{let{exportAccount:B}=await import("./account-backup-kvg9gyq1.js"),{unlockPassphrase:V}=await import("./passphrase-x33jkceg.js"),b=await B(Z,X.network,await V(),z.file);if($.stop("Written"),Y)Q.output.result({...j,address:b.contractAddress,file:b.file});else Q.output.stderr(`
55
+ `);return}case"export":{let{exportAccount:B}=await import("./account-backup-1nyq1m42.js"),{unlockPassphrase:V}=await import("./passphrase-09gjshqc.js"),b=await B(Z,X.network,await V(),z.file);if($.stop("Written"),Y)Q.output.result({...j,address:b.contractAddress,file:b.file});else Q.output.stderr(`
56
56
  `+R("Backup",b.file)+`
57
57
  `),Q.output.stderr(C(" It opens only with mn's passphrase. Keep it, and the passphrase, apart from this machine.")+`
58
58
 
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{a,b}from"./wallet-avvc5f6r.js";import"./wallet-n0mc31r7.js";import"./wallet-ce7ayvb9.js";export{a as helpSpecs,b as default};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{Bb as K,Db as L,Mb as M}from"./wallet-wez4z95e.js";import"./wallet-vn9pp5nm.js";import"./wallet-3qw465k0.js";import"./wallet-56gd7q8n.js";import{getFlag as S,hasFlag as T}from"@kuiralabs/midnight-cli-core/lib/argv";import{resolveNetworkName as U}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{header as V,divider as X}from"@kuiralabs/midnight-cli-core/ui/format";import{formatAddress as J}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as Y,dim as y,teal as Z}from"@kuiralabs/midnight-cli-core/ui/colors";async function _(D,j){let B=L(S(D,"wallet")),p=await M(B),E=U({args:D}),H=await K(B,E);if(T(D,"json")){let q={addresses:p.addresses,activeNetwork:E,activeAddress:H,createdAt:p.createdAt,file:B};if(p.shieldedAddresses)q.shieldedAddresses=p.shieldedAddresses;j.output.result(q);return}j.output.stdout(H+`
2
+ import{Cb as K,Eb as L,Nb as M}from"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import{getFlag as S,hasFlag as T}from"@kuiralabs/midnight-cli-core/lib/argv";import{resolveNetworkName as U}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{header as V,divider as X}from"@kuiralabs/midnight-cli-core/ui/format";import{formatAddress as J}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as Y,dim as y,teal as Z}from"@kuiralabs/midnight-cli-core/ui/colors";async function _(D,j){let B=L(S(D,"wallet")),p=await M(B),E=U({args:D}),H=await K(B,E);if(T(D,"json")){let q={addresses:p.addresses,activeNetwork:E,activeAddress:H,createdAt:p.createdAt,file:B};if(p.shieldedAddresses)q.shieldedAddresses=p.shieldedAddresses;j.output.result(q);return}j.output.stdout(H+`
3
3
  `),j.output.stderr(`
4
4
  `+V("Wallet Info")+`
5
5
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import"./wallet-56gd7q8n.js";import{hasFlag as R}from"@kuiralabs/midnight-cli-core/lib/argv";import{header as W,keyValue as X,divider as Y}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as Z,dim as D}from"@kuiralabs/midnight-cli-core/ui/colors";import{resolveNetwork as _}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{queryIndexer as Q}from"@kuiralabs/midnight-chain/lib/indexer-graphql";async function K(B,j){let z=await Q(B,"{ block { height ledgerParameters } }",void 0,1e4,j),A=z.block?.ledgerParameters;if(typeof A!=="string"||typeof z.block?.height!=="number")throw Error("The indexer returned no ledger parameters for its latest block");return{height:z.block.height,parametersHex:A}}import{engineFor as $}from"@kuiralabs/midnight-cli-core/lib/engine";import{assertLedgerSupported as T,fetchProtocolVersion as q}from"@kuiralabs/midnight-chain/lib/ledger-guard";var y={readTime:"picoseconds",computeTime:"picoseconds",blockUsage:"bytes",bytesWritten:"bytes",bytesChurned:"bytes"};async function F(B,j){let{name:z,config:A}=_({args:B});await T(z,A,q,j.signal);let{height:J,parametersHex:M}=await K(A.indexer,j.signal),E=(await $(z)).ledger.blockLimits(M);if(R(B,"json")){j.output.result({...E,network:z,height:J});return}for(let[C,G]of Object.entries(E))j.output.stdout(`${C}=${G}
2
+ import"./wallet-ce7ayvb9.js";import{hasFlag as R}from"@kuiralabs/midnight-cli-core/lib/argv";import{header as W,keyValue as X,divider as Y}from"@kuiralabs/midnight-cli-core/ui/format";import{bold as Z,dim as D}from"@kuiralabs/midnight-cli-core/ui/colors";import{resolveNetwork as _}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{queryIndexer as Q}from"@kuiralabs/midnight-chain/lib/indexer-graphql";async function K(B,j){let z=await Q(B,"{ block { height ledgerParameters } }",void 0,1e4,j),A=z.block?.ledgerParameters;if(typeof A!=="string"||typeof z.block?.height!=="number")throw Error("The indexer returned no ledger parameters for its latest block");return{height:z.block.height,parametersHex:A}}import{engineFor as $}from"@kuiralabs/midnight-cli-core/lib/engine";import{assertLedgerSupported as T,fetchProtocolVersion as q}from"@kuiralabs/midnight-chain/lib/ledger-guard";var y={readTime:"picoseconds",computeTime:"picoseconds",blockUsage:"bytes",bytesWritten:"bytes",bytesChurned:"bytes"};async function F(B,j){let{name:z,config:A}=_({args:B});await T(z,A,q,j.signal);let{height:J,parametersHex:M}=await K(A.indexer,j.signal),E=(await $(z)).ledger.blockLimits(M);if(R(B,"json")){j.output.result({...E,network:z,height:J});return}for(let[C,G]of Object.entries(E))j.output.stdout(`${C}=${G}
3
3
  `);j.output.stderr(`
4
4
  `+W("Block Limits")+`
5
5
 
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{Qa as a,Ra as b,Sa as c,Ta as d,Ua as e,Va as f}from"./wallet-rsjfsjg5.js";import"./wallet-56gd7q8n.js";export{f as toJsonOutput,e as formatWitnessSignature,b as formatCompactType,c as formatCircuitSignature,d as formatCircuitFlags,a as findContractInfo};
2
+ import{Qa as a,Ra as b,Sa as c,Ta as d,Ua as e,Va as f}from"./wallet-rsjfsjg5.js";import"./wallet-ce7ayvb9.js";export{f as toJsonOutput,e as formatWitnessSignature,b as formatCompactType,c as formatCircuitSignature,d as formatCircuitFlags,a as findContractInfo};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{bc as V}from"./wallet-56gd7q8n.js";import{spawn as Jq}from"child_process";import{hasFlag as S,getFlag as Wq}from"@kuiralabs/midnight-cli-core/lib/argv";import{CancelledError as m,UsageError as Bq}from"@kuiralabs/midnight-cli-core/lib/errors";import{execProgram as Vq,ProgramFailedError as Gq}from"@kuiralabs/midnight-cli-core/lib/exec-program";import{existsSync as L,mkdirSync as n,readFileSync as s,writeFileSync as _}from"fs";import{join as b}from"path";import{LOCALNET_DIR_NAME as h,DIR_MODE as o}from"@kuiralabs/midnight-cli-core/lib/constants";import{stateRoot as t}from"@kuiralabs/midnight-cli-core/lib/state-root";import{CancelledError as f,CANCELLED_MESSAGE as D,throwIfCancelled as y}from"@kuiralabs/midnight-cli-core/lib/errors";import{sleep as r}from"@kuiralabs/midnight-cli-core/lib/sleep";var A="3.0.6",c="midnightntwrk/midnight-node:1.0.0",e="midnightntwrk/indexer-standalone:4.3.3",qq="midnightntwrk/proof-server:8.1.0",N=()=>b(t(),h),U=()=>b(N(),"compose.yml"),I=()=>b(N(),".version"),zq=`services:
2
+ import{cc as V}from"./wallet-ce7ayvb9.js";import{spawn as Jq}from"child_process";import{hasFlag as S,getFlag as Wq}from"@kuiralabs/midnight-cli-core/lib/argv";import{CancelledError as m,UsageError as Bq}from"@kuiralabs/midnight-cli-core/lib/errors";import{execProgram as Vq,ProgramFailedError as Gq}from"@kuiralabs/midnight-cli-core/lib/exec-program";import{existsSync as L,mkdirSync as n,readFileSync as s,writeFileSync as _}from"fs";import{join as b}from"path";import{LOCALNET_DIR_NAME as h,DIR_MODE as o}from"@kuiralabs/midnight-cli-core/lib/constants";import{stateRoot as t}from"@kuiralabs/midnight-cli-core/lib/state-root";import{CancelledError as f,CANCELLED_MESSAGE as D,throwIfCancelled as y}from"@kuiralabs/midnight-cli-core/lib/errors";import{sleep as r}from"@kuiralabs/midnight-cli-core/lib/sleep";var A="3.0.6",c="midnightntwrk/midnight-node:1.0.0",e="midnightntwrk/indexer-standalone:4.3.3",qq="midnightntwrk/proof-server:8.1.0",N=()=>b(t(),h),U=()=>b(N(),"compose.yml"),I=()=>b(N(),".version"),zq=`services:
3
3
  proof-server:
4
4
  image: '${qq}'
5
5
  container_name: "proof-server"
@@ -86,7 +86,7 @@ it leaves containers from anything else alone and lists them.`);if($.message.inc
86
86
  `);for(let $ of K)q.output.stdout(`${$.name}=${$.state}:${$.port}
87
87
  `);q.output.stderr(`
88
88
  `+J(" Next: ")+w("midnight wallet generate dev --network undeployed")+`
89
- `)}async function fq(Q,q,H){let Z=q.progress.start("Stopping local network...");try{if(await G(H,["stop"]),Z.stop("Local network stopped (containers preserved)"),Q){q.output.result({subcommand:"stop",status:"stopped"});return}}catch(z){throw Z.fail("Failed to stop local network"),z}}async function Dq(Q,q,H){let Z=q.progress.start("Tearing down local network...");try{await G(H,["down","--volumes"]);let{clearChainCaches:z}=await import("./chain-caches-2cysk5pv.js");z("undeployed");let{PRIVATE_STATE_DATABASE:K,clearDappPrivateState:$}=await import("./private-state-42r7118m.js"),X=$(process.cwd());if(Z.stop("Local network removed (containers, networks, volumes, caches)"),Q){q.output.result({subcommand:"down",status:"removed",cachesCleared:!0,dappLevelDbWiped:X});return}if(X)q.output.stderr(J(` Also cleared dapp leveldb at ./${K} (private state from old chain)`)+`
89
+ `)}async function fq(Q,q,H){let Z=q.progress.start("Stopping local network...");try{if(await G(H,["stop"]),Z.stop("Local network stopped (containers preserved)"),Q){q.output.result({subcommand:"stop",status:"stopped"});return}}catch(z){throw Z.fail("Failed to stop local network"),z}}async function Dq(Q,q,H){let Z=q.progress.start("Tearing down local network...");try{await G(H,["down","--volumes"]);let{clearChainCaches:z}=await import("./chain-caches-dyb9tc96.js");z("undeployed");let{PRIVATE_STATE_DATABASE:K,clearDappPrivateState:$}=await import("./private-state-cd8k4ca5.js"),X=$(process.cwd());if(Z.stop("Local network removed (containers, networks, volumes, caches)"),Q){q.output.result({subcommand:"down",status:"removed",cachesCleared:!0,dappLevelDbWiped:X});return}if(X)q.output.stderr(J(` Also cleared dapp leveldb at ./${K} (private state from old chain)`)+`
90
90
  `)}catch(z){throw Z.fail("Failed to tear down local network"),z}}async function Iq(Q,q,H){let Z=await F(H);if(Q){q.output.result({subcommand:"status",services:Z.map((z)=>({name:z.name,state:z.state,port:z.port,health:z.health,image:z.image}))});return}if(Z.length===0){q.output.stderr(`
91
91
  `+j("Localnet Status")+`
92
92
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{a as f}from"./wallet-fb292x9c.js";import{ob as k,pb as B,rb as T}from"./wallet-7m1tvbsv.js";import"./wallet-56gd7q8n.js";import{spawn as C}from"node:child_process";import{hasFlag as $}from"@kuiralabs/midnight-cli-core/lib/argv";import{bold as z,dim as q,teal as W,yellow as H,white as v}from"@kuiralabs/midnight-cli-core/ui/colors";var L="═".repeat(63),U="─".repeat(64);function G(j){return`${z(L)}
2
+ import{a as f}from"./wallet-avvc5f6r.js";import{pb as k,qb as B,sb as T}from"./wallet-n0mc31r7.js";import"./wallet-ce7ayvb9.js";import{spawn as C}from"node:child_process";import{hasFlag as $}from"@kuiralabs/midnight-cli-core/lib/argv";import{bold as z,dim as q,teal as W,yellow as H,white as v}from"@kuiralabs/midnight-cli-core/ui/colors";var L="═".repeat(63),U="─".repeat(64);function G(j){return`${z(L)}
3
3
  ${z(v(j))}
4
4
  ${z(L)}
5
5
  `}function Q(j){return`
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{jb as U}from"./wallet-tdtnx9g9.js";import{kb as d,lb as p,mb as m,nb as i}from"./wallet-3bmeys56.js";import{pb as F,sb as D}from"./wallet-7m1tvbsv.js";import"./wallet-wez4z95e.js";import"./wallet-vn9pp5nm.js";import"./wallet-3qw465k0.js";import"./wallet-56gd7q8n.js";import{Server as Gz}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as qz}from"@modelcontextprotocol/sdk/server/stdio.js";import{ListToolsRequestSchema as Kz,CallToolRequestSchema as Mz,ListResourcesRequestSchema as Az,ReadResourceRequestSchema as Uz}from"@modelcontextprotocol/sdk/types.js";import{classifyError as xz}from"@kuiralabs/midnight-cli-core/lib/exit-codes";import{withNodeReason as Fz}from"@kuiralabs/midnight-cli-core/lib/sdk-errors";import{OtherSdkSetError as f}from"@kuiralabs/midnight-cli-core/lib/engine";import{networksOnSdkSet as s}from"@kuiralabs/midnight-cli-core/lib/network";function N(z){if(!(z instanceof f))return z;let B=s(z.wantedSet).join(", ");return new f(z.loadedSet,z.wantedSet,`This MCP server runs the ${z.loadedSet} SDK set, and ${B} run${B.includes(",")?"":"s"} on the ${z.wantedSet} set: two sets' ledgers can't share a process. Start another MCP server for ${B} and make the call there.`)}import{trimAgentMessage as Pz}from"@kuiralabs/midnight-cli-core/lib/error-trim";import{randomUUID as a}from"node:crypto";var o=300000;function E(z={}){let B=z.ttlMs??o,J=z.now??(()=>Date.now()),Q=new Map,X=(Z)=>{let $=0;for(let[Y,j]of Q)if(j.expiresAt<=Z)Q.delete(Y),$+=1;return $};return{create(Z){let $=J();X($);let Y=a(),j={token:Y,tool:Z.tool,args:Z.args,description:Z.description,createdAt:$,expiresAt:$+B};return Q.set(Y,j),j},redeem(Z){let $=Q.get(Z);if(!$)return null;if($.expiresAt<=J())return Q.delete(Z),null;return Q.delete(Z),$},sweep(Z=J()){return X(Z)},size(){return Q.size}}}import{UsageError as _}from"@kuiralabs/midnight-cli-core/lib/errors";function r(z,B){return Object.keys(B).filter((J)=>!Object.hasOwn(z.inputSchema.properties,J))}function w(z,B){let J=r(z,B);if(J.length===0)return;let Q=Object.keys(z.inputSchema.properties),X=Q.length===0?"It takes no parameters":`Its parameters: ${Q.join(", ")}`;throw new _(`Unknown parameter${J.length>1?"s":""} for ${z.name}: ${J.join(", ")}
2
+ import{kb as U}from"./wallet-fdwtr320.js";import{lb as d,mb as p,nb as m,ob as i}from"./wallet-apqddgeg.js";import{qb as F,tb as D}from"./wallet-n0mc31r7.js";import"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";import{Server as Gz}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as qz}from"@modelcontextprotocol/sdk/server/stdio.js";import{ListToolsRequestSchema as Kz,CallToolRequestSchema as Mz,ListResourcesRequestSchema as Az,ReadResourceRequestSchema as Uz}from"@modelcontextprotocol/sdk/types.js";import{classifyError as xz}from"@kuiralabs/midnight-cli-core/lib/exit-codes";import{withNodeReason as Fz}from"@kuiralabs/midnight-cli-core/lib/sdk-errors";import{OtherSdkSetError as f}from"@kuiralabs/midnight-cli-core/lib/engine";import{networksOnSdkSet as s}from"@kuiralabs/midnight-cli-core/lib/network";function N(z){if(!(z instanceof f))return z;let B=s(z.wantedSet).join(", ");return new f(z.loadedSet,z.wantedSet,`This MCP server runs the ${z.loadedSet} SDK set, and ${B} run${B.includes(",")?"":"s"} on the ${z.wantedSet} set: two sets' ledgers can't share a process. Start another MCP server for ${B} and make the call there.`)}import{trimAgentMessage as Pz}from"@kuiralabs/midnight-cli-core/lib/error-trim";import{randomUUID as a}from"node:crypto";var o=300000;function E(z={}){let B=z.ttlMs??o,J=z.now??(()=>Date.now()),Q=new Map,X=(Z)=>{let $=0;for(let[Y,j]of Q)if(j.expiresAt<=Z)Q.delete(Y),$+=1;return $};return{create(Z){let $=J();X($);let Y=a(),j={token:Y,tool:Z.tool,args:Z.args,description:Z.description,createdAt:$,expiresAt:$+B};return Q.set(Y,j),j},redeem(Z){let $=Q.get(Z);if(!$)return null;if($.expiresAt<=J())return Q.delete(Z),null;return Q.delete(Z),$},sweep(Z=J()){return X(Z)},size(){return Q.size}}}import{UsageError as _}from"@kuiralabs/midnight-cli-core/lib/errors";function r(z,B){return Object.keys(B).filter((J)=>!Object.hasOwn(z.inputSchema.properties,J))}function w(z,B){let J=r(z,B);if(J.length===0)return;let Q=Object.keys(z.inputSchema.properties),X=Q.length===0?"It takes no parameters":`Its parameters: ${Q.join(", ")}`;throw new _(`Unknown parameter${J.length>1?"s":""} for ${z.name}: ${J.join(", ")}
3
3
  ${X}`)}function e(z,B){if(B===void 0||B===null)return;if(z.type==="boolean")return typeof B==="boolean"?void 0:`must be true or false, not ${JSON.stringify(B)}`;if(typeof B!=="string"&&!(typeof B==="number"&&Number.isFinite(B)))return`must be a string, not ${JSON.stringify(B)}`;if(z.enum!==void 0&&!z.enum.includes(String(B)))return`must be one of ${z.enum.join(", ")}, not ${JSON.stringify(B)}`;return}function b(z,B){let J=Object.entries(B).flatMap(([Q,X])=>{let Z=z.inputSchema.properties[Q],$=Z===void 0?void 0:e(Z,X);return $===void 0?[]:[`${Q} ${$}`]});if(J.length===0)return;throw new _(`Invalid parameter${J.length>1?"s":""} for ${z.name}: ${J.join("; ")}`)}import{MINIMAL_FLAG as T}from"@kuiralabs/midnight-cli-core/lib/argv";import{createCallContext as zz,runHandler as Bz}from"@kuiralabs/midnight-cli-core/lib/call-context";import{CommandFailedError as Jz}from"@kuiralabs/midnight-cli-core/lib/errors";var R=(z)=>{process.stderr.write(z)};async function K(z,B,{signal:J,onProgress:Q,payer:X,sdkWarnings:Z}){let $={},Y={result:(V)=>{$=JSON.parse(JSON.stringify(V))},stdout:R,stderr:R};if(B.flags.json=!0,!(T in B.flags))B.flags[T]=!0;let j=!0,H=Q===void 0?void 0:(V)=>{if(j)Q(V)};try{let V=await Z.run((t)=>Bz(z,B,zz({args:B,signal:J??new AbortController().signal,output:Y,sdkWarnings:t,...H===void 0?{}:{onProgress:H},...X===void 0?{}:{payer:X}})));if(V!==void 0&&V.exitCode!==0)throw new Jz(B.command??"the command",V.exitCode,$);return $}finally{j=!1}}import{getEndpointOverridesForNetwork as Qz,loadCliConfig as Xz}from"@kuiralabs/midnight-cli-core/lib/cli-config";import{resolveNetworkName as Zz}from"@kuiralabs/midnight-cli-core/lib/resolve-network";import{confirmationText as $z,toolArgv as M}from"@kuiralabs/midnight-cli-core/lib/command-definition";var W={name:"midnight_confirm_operation",description:"Redeem a pending token (confirm step).",inputSchema:{type:"object",properties:{token:{type:"string"}},required:["token"]},annotations:{destructiveHint:!0,openWorldHint:!0}};function O(z){return[...z.tools,W].map((B)=>({name:B.name,description:B.description,inputSchema:B.inputSchema,...B.annotations?{annotations:B.annotations}:{}}))}function A(z,B){return z.tools.find((J)=>J.name===B)}async function I(z,B,J){return K((await z.command.load()).default,M(z,B),J)}var C=[["node","node"],["indexer-ws","indexer"],["proof-server","proof server"]];function jz(z,B){let J=z.inputSchema.properties;if(!C.some(([Z])=>Object.hasOwn(J,Z)))return"";let Q=Qz(Xz(),Zz({args:M(z,B)})),X=C.flatMap(([Z,$])=>{let Y=B[Z];if(typeof Y==="string"&&Y!=="")return[`${$} ${Y}`];let j=Q[Z];return j===void 0?[]:[`${$} ${j} (set with config)`]});return X.length===0?"":`. Endpoints: ${X.join(", ")}`}async function L(z,B,J){return(await z.confirmation?.check?.(B,{argv:()=>M(z,B),run:async(X)=>K((await z.command.load()).default,X,J)})??$z(z,B))+jz(z,B)}import{needsConfirmation as fz}from"@kuiralabs/midnight-cli-core/lib/command-definition";import{assembleGuidance as h,sectionsWithAdded as S}from"@kuiralabs/midnight-cli-core/lib/agent-guidance";var Yz=["title","intent-routing","safety-rules","when-to-fetch"],Hz=["title","what-you-can-do","core-concepts","secrets","blockfrost","intent-routing","canonical-flows","safety-rules","error-recovery","networks","not-this-cli","references"],Vz=[{text:"skill-core",section:"title",order:0,body:"# midnight-wallet-cli — Agent Skill (Core)\n\nYou have access to the `midnight-wallet-cli` MCP server. This is the **core** skill — intent routing and non-negotiable safety rules. Fetch `midnight-wallet://skill/full` on demand for canonical multi-step flows, error-recovery recipes, concept primers (NIGHT, DUST, shielded vs unshielded), network selection, and deeper context.\n\n**Ledger 9 only.** This build refuses a chain still on ledger 8 (preview and preprod today; those stay on `midnight-wallet-cli` 0.5.x). The user runs a ledger-9 stack and points mn at it; details in `/full`.\n\n"},{text:"skill-core",section:"intent-routing",order:0,body:`## Intent routing (natural language → tool)
4
4
 
5
5
  | User says | Call this tool |
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{Sb as a,Tb as b,Ub as c,Vb as d,Wb as e,Xb as f,Yb as g,Zb as h,_b as i}from"./wallet-ee7ezgn2.js";import"./wallet-ce7ayvb9.js";export{h as unlockPassphrase,c as readPassphrase,i as passphraseForNewSecret,d as isPassphraseSet,e as establishPassphrase,f as checkPassphrase,a as PASSPHRASE_ENV,b as NoPassphraseError,g as MIN_PASSPHRASE_LENGTH};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{c as a,d as b,e as c}from"./wallet-trfmf39r.js";import"./wallet-ad6gw2zh.js";import"./wallet-t4rnacdc.js";import"./wallet-wybe948x.js";import"./wallet-fxbfef5d.js";import"./wallet-hrz0vezs.js";import"./wallet-zry57pyk.js";import"./wallet-m9bxb9x8.js";import"./wallet-ee7ezgn2.js";import"./wallet-fjsk64ey.js";import"./wallet-ce7ayvb9.js";export{c as prepareGrant,b as accountOnRecord,a as NoAccountError};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{p as a,q as b}from"./wallet-wybe948x.js";import"./wallet-56gd7q8n.js";export{b as clearDappPrivateState,a as PRIVATE_STATE_DATABASE};
2
+ import{p as a,q as b}from"./wallet-wybe948x.js";import"./wallet-ce7ayvb9.js";export{b as clearDappPrivateState,a as PRIVATE_STATE_DATABASE};