@oracle-agent/oracle 0.35.20 → 0.35.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/skills/oracle-desk-product/SKILL.md +23 -17
- package/dist/assets/skills/oracle-mcp-install/SKILL.md +17 -22
- package/dist/assets/skills/protocol-api-key-integration/SKILL.md +14 -11
- package/dist/assets/skills/self-custodial-onchain-execution/SKILL.md +14 -13
- package/dist/assets/skills/trade-loop-circuit-breaker/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +30 -30
- package/dist/bin/oracle-data-mcp.mjs +17 -17
- package/dist/bin/oracle-public-server.mjs +5 -5
- package/dist/cli/commands/chat.mjs +200 -200
- package/dist/cli/commands/doctor.mjs +7 -7
- package/dist/cli/commands/eval.mjs +113 -113
- package/dist/cli/commands/extension-policy.mjs +1 -1
- package/dist/cli/commands/governance-prepare.mjs +5 -0
- package/dist/cli/commands/model.mjs +204 -204
- package/dist/cli/commands/portfolio-risk.mjs +4 -0
- package/dist/cli/commands/position-health.mjs +4 -0
- package/dist/cli/commands/safety-intelligence.mjs +4 -0
- package/dist/cli/commands/swap.mjs +13 -13
- package/dist/cli/commands/tax-lots.mjs +4 -0
- package/dist/data/desk-data.mjs +26 -26
- package/dist/index.mjs +40 -40
- package/package.json +1 -1
- package/public/eval-report.json +2 -2
- package/public/oracle-splash/index.html +1 -1
- package/server.json +2 -2
- package/dist/assets/skills/oracle-best-execution.md +0 -27
- package/dist/assets/skills/oracle-desk.md +0 -27
- package/dist/assets/skills/oracle-receipts.md +0 -29
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{wordlists as Ie}from"ethers";var we=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),_e=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Se=new Set([12,15,18,21,24]);function Ae(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Se.has(t.length)&&t.every(n=>Ie.en.getWordIndex(n)>=0)}var ke=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,qe=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Me=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function ve(e){let t=re(e);return Me.has(t)||qe.test(t)}var j=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function re(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function $e(e){let t=re(e);return[...we].some(n=>t.includes(n))}function Oe(e,t,n){if(typeof t=="string"){if(_e.some(o=>o.test(t))||Ae(t))throw new j(n);if(ke.test(t)&&!ve(e))throw new j(n)}}function P(e,t="$",n=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Oe(n,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((i,a)=>P(i,`${t}[${a}]`,n));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let i of Object.keys(e).sort()){let a=`${t}.${i}`;if($e(i))throw new j(a);e[i]!==void 0&&(o[i]=P(e[i],a,i))}return o}function N(e){return P(e)}function G(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(G).join(",")}]`:`{${Object.keys(e).map(t=>`${JSON.stringify(t)}:${G(e[t])}`).join(",")}}`}function K(e){return G(P(e))}var Ee=1,xe=Object.freeze(["fifo","lifo","hifo","specific"]),Be="Accounting records only; not tax advice.",Te=new Set(["acquisition","disposal","transfer"]),Re=new Set(["complete","incomplete","unknown"]),Le=/[\u0000-\u001f\u007f]/,W=class extends Error{constructor(t,n="COST_BASIS_INVALID"){super(`cost basis: ${t}`),this.name="CostBasisValidationError",this.code=n}};function f(e,t){throw new W(e,t)}function M(e,t){return e<t?-1:e>t?1:0}function g(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))g(t);Object.freeze(e)}return e}function v(e,t){return(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)&&f(`${t} must be a plain object`),e}function b(e,t,{optional:n=!1,lower:o=!1}={}){if(e==null&&n)return null;typeof e!="string"&&f(`${t} must be a string`);let i=e.trim();return i||f(`${t} is required`),Le.test(i)&&f(`${t} contains control characters`),i.length>512&&f(`${t} is too long`),o?i.toLowerCase():i}function k(e,t,{optional:n=!1,positive:o=!1}={}){if(e==null&&n)return null;typeof e=="number"&&f(`${t} must be an exact decimal string or BigInt; Number coercion is refused`,"COST_BASIS_UNSAFE_NUMBER");let i;typeof e=="bigint"?i=e.toString():typeof e=="string"?i=e:f(`${t} must be an exact decimal string or BigInt`),/^\d+$/.test(i)||f(`${t} must be a non-negative base-10 integer string`);let a=BigInt(i);return o&&a===0n&&f(`${t} must be positive`),a.toString()}function L(e){return e==null?null:e.toString()}function F(e,t){let n=v(e,t);return g({chain:b(n.chain??n.chainId,`${t}.chain`,{lower:!0}),account:b(n.account??n.address??n.owner,`${t}.account`)})}function E(e,t){return`${e.length}:${e}|${t.chain.length}:${t.chain}|${t.account.length}:${t.account}`}function ue(e,t="evidence"){if(e==null)return g({status:"unknown",references:[]});let n=v(e,t),o=b(n.status??"unknown",`${t}.status`,{lower:!0});Re.has(o)||f(`${t}.status must be complete, incomplete, or unknown`),n.references!=null&&!Array.isArray(n.references)&&f(`${t}.references must be an array`);let i=(n.references||[]).map((s,c)=>{let u=v(s,`${t}.references[${c}]`);return{kind:b(u.kind??u.type,`${t}.references[${c}].kind`,{lower:!0}),id:b(u.id??u.receiptId??u.txHash,`${t}.references[${c}].id`)}}).sort((s,c)=>M(s.kind,c.kind)||M(s.id,c.id)),a=[];for(let s of i)a.some(c=>c.kind===s.kind&&c.id===s.id)||a.push(s);return g({status:o,references:a})}function se(e,t){if(e==null)return[];(!Array.isArray(e)||e.length===0)&&f(`${t} must be a non-empty array`);let n=new Set;return e.map((o,i)=>{let a=v(o,`${t}[${i}]`),s=b(a.lotId,`${t}[${i}].lotId`);return n.has(s)&&f(`${t} repeats lotId ${JSON.stringify(s)}`),n.add(s),g({lotId:s,quantity:k(a.quantity,`${t}[${i}].quantity`,{positive:!0})})})}function Ce(e){N(e);let t=v(e,"event"),n=b(t.type,"event.type",{lower:!0});Te.has(n)||f("event.type must be acquisition, disposal, or transfer");let o=b(t.id??t.eventId,"event.id"),i=k(t.occurredAt??t.timestamp,"event.occurredAt"),a=b(t.asset??t.symbol??t.coin,"event.asset"),s=k(t.quantity??t.amount??t.size,"event.quantity",{positive:!0}),c=k(t.feeMinor??t.feeUsdMinor??"0","event.feeMinor"),u=ue(t.evidence),p=t.source==null?null:b(t.source,"event.source"),d={id:o,type:n,occurredAt:i,asset:a,quantity:s,feeMinor:c,source:p,evidence:u};if(n==="acquisition"){let I={...d,location:F(t.location??{chain:t.chain??t.chainId,account:t.account??t.address??t.owner},"event.location"),grossAmountMinor:k(t.grossAmountMinor??t.costMinor??t.basisBeforeFeesMinor,"event.grossAmountMinor",{optional:!0}),lotId:b(t.lotId??o,"event.lotId"),specificLots:[]};return g(I)}return g(n==="disposal"?{...d,location:F(t.location??{chain:t.chain??t.chainId,account:t.account??t.address??t.owner},"event.location"),grossAmountMinor:k(t.grossAmountMinor??t.proceedsMinor??t.proceedsBeforeFeesMinor,"event.grossAmountMinor",{optional:!0}),specificLots:se(t.specificLots??t.lotSelections,"event.specificLots")}:{...d,from:F(t.from,"event.from"),to:F(t.to,"event.to"),grossAmountMinor:null,specificLots:se(t.specificLots??t.lotSelections,"event.specificLots")})}function ze(e,t){let n=BigInt(e.occurredAt)-BigInt(t.occurredAt);return n<0n?-1:n>0n?1:M(e.id,t.id)}function je(e=[]){Array.isArray(e)||f("events must be an array");let t=new Map,n=0;for(let o of e){let i=Ce(o),a=K(i),s=t.get(i.id);if(s){s.canonical!==a&&f(`conflicting duplicate event id ${JSON.stringify(i.id)}`,"COST_BASIS_DUPLICATE_CONFLICT"),n+=1;continue}t.set(i.id,{event:i,canonical:a})}return g({events:[...t.values()].map(({event:o})=>o).sort(ze),duplicatesIgnored:n})}function Ne(e){let t=b(e??"fifo","method",{lower:!0});return xe.includes(t)||f("method must be fifo, lifo, hifo, or specific"),t}var ae=Object.freeze({acquisitionFees:new Set(["include-in-basis","exclude","unresolved"]),disposalFees:new Set(["reduce-proceeds","exclude","unresolved"]),transferFees:new Set(["include-in-basis","exclude","unresolved"])});function Fe(e){e!=null&&v(e,"treatment");let t=e||{},n={};for(let o of Object.keys(ae))n[o]=b(t[o]??"unresolved",`treatment.${o}`,{lower:!0}),ae[o].has(n[o])||f(`treatment.${o} has an unsupported value`);return g(n)}function Ve(e,t){N(e);let n=v(e,`marketValues[${t}]`);return g({id:b(n.id??n.valuationId,`marketValues[${t}].id`),asset:b(n.asset??n.symbol??n.coin,`marketValues[${t}].asset`),location:F(n.location??{chain:n.chain??n.chainId,account:n.account??n.address??n.owner},`marketValues[${t}].location`),quantity:k(n.quantity,`marketValues[${t}].quantity`),valueMinor:k(n.valueMinor??n.marketValueMinor,`marketValues[${t}].valueMinor`),asOf:k(n.asOf,`marketValues[${t}].asOf`),evidence:ue(n.evidence,`marketValues[${t}].evidence`)})}function le(e,t){return t==null||BigInt(e)<=BigInt(t)}function Pe(e=[],t=null){Array.isArray(e)||f("marketValues must be an array");let n=new Map,o=0;e.forEach((s,c)=>{let u=Ve(s,c),p=K(u),d=n.get(u.id);d?(d.canonical!==p&&f(`conflicting duplicate market value id ${JSON.stringify(u.id)}`,"COST_BASIS_DUPLICATE_CONFLICT"),o+=1):n.set(u.id,{row:u,canonical:p})});let i=[...n.values()].map(({row:s})=>s).filter(s=>le(s.asOf,t)),a=new Map;for(let s of i){let c=E(s.asset,s.location),u=a.get(c);(!u||BigInt(s.asOf)>BigInt(u.asOf)||s.asOf===u.asOf&&M(s.id,u.id)<0)&&a.set(c,s)}return{values:i.sort((s,c)=>M(s.id,c.id)),byHolding:a,duplicatesIgnored:o}}function h(e,t,n,o){e.push(g({code:t,eventId:n??null,detail:o}))}function He(e,t,n){if(e.grossAmountMinor==null)return h(n,"missing-acquisition-basis",e.id,"gross acquisition amount is unknown; lot basis remains unknown"),null;let o=BigInt(e.grossAmountMinor),i=BigInt(e.feeMinor);return i===0n?o:t.acquisitionFees==="include-in-basis"?o+i:t.acquisitionFees==="exclude"?o:(h(n,"unresolved-acquisition-fee-treatment",e.id,"fee treatment was not supplied; lot basis remains unknown"),null)}function Je(e,t,n){if(e.grossAmountMinor==null)return h(n,"missing-disposal-proceeds",e.id,"gross disposal proceeds are unknown"),null;let o=BigInt(e.grossAmountMinor),i=BigInt(e.feeMinor);return i===0n?o:t.disposalFees==="reduce-proceeds"?o-i:t.disposalFees==="exclude"?o:(h(n,"unresolved-disposal-fee-treatment",e.id,"fee treatment was not supplied; recognized proceeds remain unknown"),null)}function De(e,t){let n=(o,i)=>{let a=BigInt(o.acquiredAt)-BigInt(i.acquiredAt);return a<0n?-1:a>0n?1:M(o.lotId,i.lotId)};return e==="fifo"?[...t].sort(n):e==="lifo"?[...t].sort((o,i)=>-n(o,i)):e==="hifo"?[...t].sort((o,i)=>{let a=o.basisRemaining*i.quantityRemaining,s=i.basisRemaining*o.quantityRemaining;return a>s?-1:a<s?1:n(o,i)}):[...t]}function ce(e,t){let n=e.quantityRemaining,o=e.basisRemaining,i=null;return o!=null&&(i=t===n?o:o*t/n,e.basisRemaining-=i),e.quantityRemaining-=t,{lot:e,quantity:t,basis:i}}function Ue(e,t,n){let o=E(t,n);return e.filter(i=>i.key===o&&i.quantityRemaining>0n)}function Ge({event:e,lots:t,method:n,issues:o,tainted:i}){let a=e.type==="transfer"?e.from:e.location,s=E(e.asset,a),c=BigInt(e.quantity);if(i.has(s))return h(o,"inventory-state-incomplete",e.id,"an earlier unmatched record makes this holding indeterminate"),{matches:[],missing:c,key:s,indeterminate:!0};let u=Ue(t,e.asset,a);if(n==="hifo"&&u.some(I=>I.basisRemaining==null))return h(o,"hifo-basis-unknown",e.id,"HIFO cannot rank a lot whose basis is unknown"),i.add(s),{matches:[],missing:c,key:s,indeterminate:!0};let p=[],d=c;if(n==="specific"){if(e.specificLots.length===0)return h(o,"specific-lots-required",e.id,"specific-lot method requires explicit lot selections"),i.add(s),{matches:p,missing:d,key:s,indeterminate:!0};if(e.specificLots.reduce((_,S)=>_+BigInt(S.quantity),0n)!==c)return h(o,"specific-lot-quantity-mismatch",e.id,"specific-lot quantities do not equal the event quantity"),i.add(s),{matches:p,missing:d,key:s,indeterminate:!0};for(let _ of e.specificLots){let S=u.find(T=>T.lotId===_.lotId),z=BigInt(_.quantity);if(!S||S.quantityRemaining<z){h(o,"specific-lot-unavailable",e.id,`requested lot ${JSON.stringify(_.lotId)} is absent or too small`);continue}p.push(ce(S,z)),d-=z}}else{e.specificLots.length&&f(`event ${JSON.stringify(e.id)} supplies specificLots but method is ${n}`);for(let I of De(n,u)){if(d===0n)break;let _=d<I.quantityRemaining?d:I.quantityRemaining;p.push(ce(I,_)),d-=_}}return d>0n&&(h(o,"insufficient-inventory",e.id,"recorded lots do not cover the event quantity; no replacement basis was invented"),i.add(s)),{matches:p,missing:d,key:s,indeterminate:d>0n}}function Y(e,t,n){if(e==null)return t.map(()=>null);let o=e,i=n;return t.map(a=>{if(i===0n)return 0n;let s=a===i?o:o*a/i;return o-=s,i-=a,s})}function Ke(e,t){let n=[...e.map(o=>o.evidence.status),...t.map(o=>o.evidence.status)];return n.length===0||n.every(o=>o==="complete")?"complete":n.some(o=>o==="incomplete")?"incomplete":"unknown"}function C(e,t){let n=e.map(i=>i[t]),o=n.filter(i=>i!=null).reduce((i,a)=>i+BigInt(a),0n);return{value:n.every(i=>i!=null)?o.toString():null,known:o.toString()}}function Ye(e,t){return{lotId:e.lotId,originLotId:e.lotId,acquisitionEventId:e.id,asset:e.asset,location:e.location,key:E(e.asset,e.location),acquiredAt:e.occurredAt,quantityRemaining:BigInt(e.quantity),basisRemaining:t,evidenceStatus:e.evidence.status}}function de(e={},t={}){N(e),N(t),v(e,"input"),v(t,"options");let n=k(t.asOf??e.asOf,"asOf",{optional:!0}),o=je(e.events||[]),i=n==null?o.events:o.events.filter(r=>le(r.occurredAt,n)),a=Ne(t.method??e.method),s=Fe(t.treatment??e.treatment),c=Pe(e.marketValues||[],n),u=[],p=[],d=new Set,I=[],_=[],S=new Set;for(let r of i){if(r.type==="acquisition"){if(d.has(r.lotId)){h(u,"duplicate-lot-id",r.id,`lotId ${JSON.stringify(r.lotId)} is already in use`),S.add(E(r.asset,r.location));continue}d.add(r.lotId),p.push(Ye(r,He(r,s,u)));continue}let m=Ge({event:r,lots:p,method:a,issues:u,tainted:S});if(r.type==="disposal"){let l=Je(r,s,u),O=Y(l,m.matches.map(y=>y.quantity),BigInt(r.quantity)),w=m.matches.map((y,D)=>{let U=O[D];return g({lotId:y.lot.lotId,originLotId:y.lot.originLotId,quantity:y.quantity.toString(),basisMinor:L(y.basis),proceedsMinor:L(U),gainMinor:y.basis==null||U==null?null:(U-y.basis).toString(),acquiredAt:y.lot.acquiredAt,evidenceStatus:y.lot.evidenceStatus})}),A=w.filter(y=>y.basisMinor!=null).reduce((y,D)=>y+BigInt(D.basisMinor),0n),H=m.missing===0n&&w.every(y=>y.basisMinor!=null),J=m.missing===0n&&l!=null;I.push(g({eventId:r.id,asset:r.asset,location:r.location,occurredAt:r.occurredAt,quantity:r.quantity,grossProceedsMinor:r.grossAmountMinor,feeMinor:r.feeMinor,recognizedProceedsMinor:J?l.toString():null,basisMinor:H?A.toString():null,gainMinor:H&&J?(l-A).toString():null,unknownQuantity:m.missing.toString(),status:H&&J?"complete":"incomplete",evidenceStatus:r.evidence.status,matches:w}));continue}let $=BigInt(r.feeMinor),q=$>0n&&s.transferFees==="include-in-basis",x=$>0n&&s.transferFees==="unresolved";x&&h(u,"unresolved-transfer-fee-treatment",r.id,"fee treatment was not supplied; transferred lot basis remains unknown");let B=Y(q?$:0n,m.matches.map(l=>l.quantity),BigInt(r.quantity)),V=m.matches.map((l,O)=>{let w=l.basis;x?w=null:w!=null&&q&&(w+=B[O]);let A=`${r.id}:${O+1}`;return d.has(A)?(h(u,"duplicate-lot-id",r.id,`derived transfer lotId ${JSON.stringify(A)} is already in use`),S.add(E(r.asset,r.to)),null):(d.add(A),p.push({lotId:A,originLotId:l.lot.originLotId,acquisitionEventId:l.lot.acquisitionEventId,asset:r.asset,location:r.to,key:E(r.asset,r.to),acquiredAt:l.lot.acquiredAt,quantityRemaining:l.quantity,basisRemaining:w,evidenceStatus:r.evidence.status==="complete"&&l.lot.evidenceStatus==="complete"?"complete":"unknown"}),g({fromLotId:l.lot.lotId,toLotId:A,originLotId:l.lot.originLotId,quantity:l.quantity.toString(),basisMinor:L(w)}))}).filter(Boolean);m.indeterminate&&S.add(E(r.asset,r.to)),_.push(g({eventId:r.id,asset:r.asset,from:r.from,to:r.to,occurredAt:r.occurredAt,quantity:r.quantity,feeMinor:r.feeMinor,unknownQuantity:m.missing.toString(),status:m.indeterminate||V.some(l=>l.basisMinor==null)?"incomplete":"complete",moved:V}))}let z=p.filter(r=>r.quantityRemaining>0n).sort((r,m)=>M(r.key,m.key)||M(r.lotId,m.lotId)),T=new Map;for(let r of z)T.has(r.key)||T.set(r.key,[]),T.get(r.key).push(r);let R=[];for(let[r,m]of[...T].sort(([$],[q])=>M($,q))){let $=m.reduce((l,O)=>l+O.quantityRemaining,0n),q=c.byHolding.get(r)||null,x=S.has(r),B=q;q?BigInt(q.quantity)!==$&&(h(u,"market-value-quantity-mismatch",null,`market value ${JSON.stringify(q.id)} does not cover the recorded holding quantity`),B=null):h(u,"missing-market-value",null,`no market value was supplied for holding ${r}`),x&&(B=null);let V=Y(B?BigInt(B.valueMinor):null,m.map(l=>l.quantityRemaining),$);m.forEach((l,O)=>{let w=V[O],A=w==null||l.basisRemaining==null?null:w-l.basisRemaining;R.push(g({lotId:l.lotId,originLotId:l.originLotId,acquisitionEventId:l.acquisitionEventId,asset:l.asset,location:l.location,acquiredAt:l.acquiredAt,quantity:l.quantityRemaining.toString(),basisMinor:x?null:L(l.basisRemaining),marketValueMinor:L(w),unrealizedGainMinor:x?null:L(A),valuationId:B?.id??null,status:x||l.basisRemaining==null||w==null?"incomplete":"complete",evidenceStatus:l.evidenceStatus}))})}let X=C(I,"basisMinor"),Z=C(I,"recognizedProceedsMinor"),ee=C(I,"gainMinor"),te=C(R,"basisMinor"),ne=C(R,"marketValueMinor"),oe=C(R,"unrealizedGainMinor"),ie=i.every(r=>BigInt(r.feeMinor)>0n?r.type==="acquisition"?s.acquisitionFees!=="unresolved":r.type==="disposal"?s.disposalFees!=="unresolved":s.transferFees!=="unresolved":!0),be={recordVersion:Ee,recordType:"cost-basis-records",label:Be,asOf:n,method:a,units:{quantity:"exact asset minor units as base-10 integer strings",usd:"USD minor units as base-10 integer strings"},accountingFacts:{events:i,marketValues:c.values,duplicatesIgnored:o.duplicatesIgnored+c.duplicatesIgnored},jurisdictionalTreatment:{suppliedByCaller:s,status:ie?"specified":"unresolved",note:"Fee and lot-selection treatment can vary by jurisdiction. These caller-selected recordkeeping rules are not tax advice."},realized:{disposals:I,totals:{proceedsMinor:Z.value,basisMinor:X.value,gainMinor:ee.value,knownProceedsSubtotalMinor:Z.known,knownBasisSubtotalMinor:X.known,knownGainSubtotalMinor:ee.known}},transfers:_,holdings:R,unrealized:{totals:{marketValueMinor:ne.value,basisMinor:te.value,gainMinor:oe.value,knownMarketValueSubtotalMinor:ne.known,knownBasisSubtotalMinor:te.known,knownGainSubtotalMinor:oe.known}},completeness:{accounting:u.some(r=>r.code!=="missing-market-value")?"incomplete":"complete",valuation:R.every(r=>r.marketValueMinor!=null)?"complete":"incomplete",evidence:Ke(i,c.values),treatment:ie?"specified":"unresolved"},issues:u};return g(be)}import fe from"node:fs";var pe=1024*1024;function me(e=[],t={}){let n=[],o={};for(let i=0;i<e.length;i+=1){let a=e[i];if(!a.startsWith("--")){n.push(a);continue}let s=a.indexOf("="),c=a.slice(2,s===-1?void 0:s),u=t[c];if(!u)throw new TypeError(`unknown option --${c}`);if(Object.hasOwn(o,c))throw new TypeError(`duplicate option --${c}`);if(u==="boolean"){if(s!==-1)throw new TypeError(`option --${c} does not take a value`);o[c]=!0;continue}let p=s===-1?e[++i]:a.slice(s+1);if(p==null||p===""||p.startsWith("--"))throw new TypeError(`option --${c} requires a value`);o[c]=p}return{positionals:n,options:o}}function ge(e,t="input"){if(!e)throw new TypeError(`${t} JSON path or - is required`);let n=e==="-"?fe.readFileSync(0):fe.readFileSync(e);if(n.length>pe)throw new RangeError(`${t} exceeds ${pe} bytes`);let o;try{o=JSON.parse(n.toString("utf8"))}catch(i){throw new TypeError(`${t} must be valid JSON: ${i.message}`)}if(!o||typeof o!="object"||Array.isArray(o)||Object.getPrototypeOf(o)!==Object.prototype)throw new TypeError(`${t} must be a JSON object`);return o}function ye(e,t=process.stdout){t.write(`${JSON.stringify(e,null,2)}
|
|
2
|
+
`)}function he(e,t=process.stderr){return t.write(`oracle: ${e instanceof Error?e.message:String(e)}
|
|
3
|
+
`),2}var Q="oracle tax-lots <input.json|-> [--method fifo|lifo|hifo|specific] [--as-of <integer>]",rt={name:"tax-lots",summary:"build exact cost-basis records from supplied events",group:"read",usage:Q,async run(e){let t=e.argv??[];if(t.length===0||t.includes("--help")||t.includes("-h"))return process.stdout.write(`${Q}
|
|
4
|
+
`),0;try{let{positionals:n,options:o}=me(t,{method:"value","as-of":"value"});if(n.length!==1)throw new TypeError(Q);let i=ge(n[0]);return ye(de(i,{method:o.method,asOf:o["as-of"]})),0}catch(n){return he(n)}}};export{rt as default};
|