@oracle-agent/oracle 0.25.2 → 0.25.4
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/README.md +33 -1
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +53 -53
- package/dist/bin/oracle-data-mcp.mjs +12 -12
- package/dist/bin/oracle-public-server.mjs +15 -15
- package/dist/bin/oracle-route.mjs +14 -14
- package/dist/cli/commands/chat.mjs +96 -96
- package/dist/cli/commands/doctor.mjs +3 -3
- package/dist/cli/commands/eval.mjs +414 -85
- package/dist/cli/commands/farm.mjs +21 -21
- package/dist/cli/commands/model.mjs +101 -101
- package/dist/cli/commands/receipt.mjs +2 -2
- package/dist/cli/commands/sign.mjs +9 -9
- package/dist/cli/commands/signer.mjs +12 -12
- package/dist/cli/commands/strategy.mjs +11 -11
- package/dist/cli/commands/swap.mjs +10 -10
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/data/desk-data.mjs +51 -51
- package/dist/data/providers/universal-evm-nft-transfer.mjs +1 -0
- package/dist/data/providers/universal-ordinals-transfer.mjs +1 -0
- package/dist/data/providers/universal-solana-nft-transfer.mjs +1 -0
- package/dist/index.mjs +53 -53
- package/dist/local-signer/index.mjs +3 -3
- package/dist/nft/index.mjs +1 -1
- package/dist/nft/universal-mint-router.mjs +47 -0
- package/dist/nft/universal-nft-lifecycle.mjs +1 -0
- package/dist/prepare-envelope.mjs +1 -1
- package/dist/router/index.mjs +9 -9
- package/dist/router/prepare-bridge.mjs +18 -18
- package/dist/strategy/index.mjs +11 -11
- package/package.json +6 -1
- package/public/oracle-splash/downloads/index.html +4 -4
- package/public/oracle-splash/index.html +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var u="ROUTE_ONLY",k=Object.freeze({MINT:"mint",BUY:"buy",LIST:"list",CANCEL_LISTING:"cancel_listing",SEND:"send"}),y=new Set(Object.values(k)),I=new Set(["action","family","network","standard","collection","tokenId","mint","inscription","outpoint","owner","seller","sender","recipient","quantity","marketplace","protocol","price","expiry","fees","royalties","listingId","artifactKind"]),j=new Set(["amount","currency"]),S=new Set(["value","unit"]),$=new Set(["id","family","networks","standards","marketplaces","protocols","artifactKinds","actions","surface"]),E=new Set(["provider","operations"]),a=class extends TypeError{constructor(t,n="invalid-intent"){super(`universal NFT lifecycle: ${t}`),this.name="UniversalNftLifecycleError",this.code=n}};function f(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new a(`${t} must be a plain object`);return e}function l(e,t,n){for(let r of Object.keys(e))if(!t.has(r))throw new a(`${n} has unknown field ${r}`,"unknown-field")}function o(e,t){if(typeof e!="string"||e.length===0||e.trim()!==e||/[\u0000-\u001f\u007f]/.test(e))throw new a(`${t} must be an exact non-empty string`);return e}function w(e,t,{positive:n=!1}={}){if(e=o(e,t),!/^(0|[1-9]\d*)$/.test(e)||n&&e==="0")throw new a(`${t} must be a canonical ${n?"positive":"non-negative"} integer string`);return e}function c(e,t,{allowEmpty:n=!1}={}){if(!Array.isArray(e)||!n&&e.length===0)throw new a(`${t} must be ${n?"an":"a non-empty"} array`);let r=e.map((i,s)=>o(i,`${t}[${s}]`));if(new Set(r).size!==r.length)throw new a(`${t} contains duplicates`);return r}function b(e,t){return e=f(e,t),l(e,j,t),{amount:w(e.amount,`${t}.amount`),currency:o(e.currency,`${t}.currency`)}}function m(e,t){if(!Array.isArray(e))throw new a(`${t} must be an array`,"missing-bounds");return e.map((n,r)=>b(n,`${t}[${r}]`))}function L(e){if(e=f(e,"expiry"),l(e,S,"expiry"),!Number.isSafeInteger(e.value)||e.value<0||e.unit!=="unix-ms")throw new a("expiry must be a non-negative safe unix-ms value","invalid-expiry");return{value:e.value,unit:"unix-ms"}}function z(e,t,n){Object.hasOwn(e,n)&&(t[n]=o(e[n],n))}function h(e){e=f(e,"intent"),l(e,I,"intent");let t=o(e.action,"action");if(!y.has(t))throw new a(`unsupported action ${t}`,"invalid-action");let n={action:t,family:o(e.family,"family"),network:o(e.network,"network"),standard:o(e.standard,"standard"),collection:o(e.collection,"collection")};for(let i of["tokenId","mint","inscription","outpoint"])z(e,n,i);let r=["tokenId","mint","inscription"].filter(i=>Object.hasOwn(n,i));if(t==="mint"){if(r.length!==0||n.outpoint)throw new a("mint routes bind the collection/drop and must not invent a post-mint asset identity","invalid-identity")}else{if(r.length!==1)throw new a("exactly one tokenId, mint, or inscription identity is required","invalid-identity");if(n.family==="bitcoin"&&!n.outpoint)throw new a("Bitcoin identity requires outpoint","invalid-identity")}if(t==="list"||t==="cancel_listing")n.seller=o(e.seller,"seller");else if(t==="send"){if(!Object.hasOwn(e,"owner")&&!Object.hasOwn(e,"sender"))throw new a("send requires owner or sender","missing-actor");Object.hasOwn(e,"owner")&&(n.owner=o(e.owner,"owner")),Object.hasOwn(e,"sender")&&(n.sender=o(e.sender,"sender"))}else n.owner=o(e.owner,"owner");if((t==="send"||t==="buy"||t==="mint")&&(n.recipient=o(e.recipient,"recipient")),n.quantity=w(e.quantity,"quantity",{positive:!0}),n.marketplace=o(e.marketplace,"marketplace"),n.protocol=o(e.protocol,"protocol"),n.artifactKind=o(e.artifactKind,"artifactKind"),["mint","buy","list"].includes(t)){if(!["price","expiry","fees","royalties"].every(i=>Object.hasOwn(e,i)))throw new a(`${t} requires price, expiry, fees, and royalties`,"missing-bounds");n.price=b(e.price,"price"),n.expiry=L(e.expiry),n.fees=m(e.fees,"fees"),n.royalties=m(e.royalties,"royalties")}return t==="cancel_listing"&&(n.listingId=o(e.listingId,"listingId")),n}function N(e){e=f(e,"adapter"),l(e,$,"adapter");let t=c(e.actions,"adapter.actions");for(let i of t)if(!y.has(i))throw new a(`adapter has unknown action ${i}`,"invalid-action");let n=f(e.surface,"adapter.surface");l(n,E,"adapter.surface");let r=f(n.operations,"adapter.surface.operations");for(let i of t)o(r[i],`adapter.surface.operations.${i}`);for(let i of Object.keys(r))if(!t.includes(i))throw new a(`operation ${i} is not declared`,"unknown-field");return Object.freeze({id:o(e.id,"adapter.id"),family:o(e.family,"adapter.family"),networks:Object.freeze(c(e.networks,"adapter.networks")),standards:Object.freeze(c(e.standards,"adapter.standards")),marketplaces:Object.freeze(c(e.marketplaces,"adapter.marketplaces")),protocols:Object.freeze(c(e.protocols,"adapter.protocols")),artifactKinds:Object.freeze(c(e.artifactKinds,"adapter.artifactKinds")),actions:Object.freeze(t),tier:u,custody:"user",surface:Object.freeze({provider:o(n.provider,"adapter.surface.provider"),operations:Object.freeze({...r})})})}function _(e=[]){if(!Array.isArray(e))throw new a("entries must be an array");let t=e.map(N);if(new Set(t.map(r=>r.id)).size!==t.length)throw new a("adapter ids must be unique","duplicate-adapter");function n(r,i){return t.filter(s=>s.family===r.family&&s.networks.includes(r.network)&&s.standards.includes(r.standard)&&s.marketplaces.includes(r.marketplace)&&s.protocols.includes(r.protocol)&&s.artifactKinds.includes(r.artifactKind)&&(!i||s.actions.includes(r.action)))}return Object.freeze({tier:u,custody:"user",adapters:Object.freeze(t),get(r){return t.find(i=>i.id===r)||null},route(r){let i=h(r),s=n(i,!0);if(s.length===1)return s[0];throw s.length>1?new a("ambiguous adapter route","ambiguous-route"):n(i,!1).length?new a(`adapter lacks ${i.action}`,"unsupported-operation"):new a("no exact adapter route","unsupported-operation")}})}var d=(e,t,n,r,i,s,p,O,g,x)=>({id:e,family:t,networks:n,standards:r,marketplaces:i,protocols:s,artifactKinds:p,actions:O,surface:{provider:g,operations:x}}),v=_([d("opensea-evm-market","evm",["eip155:1","eip155:10","eip155:137","eip155:8453","eip155:42161","eip155:4663"],["erc721","erc1155"],["opensea"],["seaport","seadrop"],["provider-request"],["mint","list","cancel_listing"],"opensea-nft",{mint:"prepareMint",list:"prepareList",cancel_listing:"prepareCancel"}),d("evm-asset-safe-transfer","evm",["eip155:1","eip155:10","eip155:137","eip155:8453","eip155:42161","eip155:4663"],["erc721","erc1155"],["none"],["erc721","erc1155"],["evm-safe-transfer"],["send"],"universal-evm-nft-transfer",{send:"prepare"}),d("magic-eden-solana-market","solana",["solana:mainnet"],["metaplex-nft","metaplex-core"],["magic-eden"],["magic-eden-solana"],["solana-transaction"],["buy","list"],"magiceden-sol",{buy:"prepareBuy",list:"prepareList"}),d("solana-nft-transfer","solana",["solana:mainnet"],["metaplex-nft","metaplex-core"],["none"],["spl-token"],["solana-transaction"],["send"],"universal-solana-nft-transfer",{send:"prepare"}),d("satflow-ordinals-market","bitcoin",["bitcoin:mainnet","bitcoin:testnet","bitcoin:signet"],["ordinals"],["satflow"],["ordinals"],["bitcoin-psbt"],["buy","list"],"satflow",{buy:"preparePurchase",list:"prepareList"}),d("bitcoin-ordinal-transfer","bitcoin",["bitcoin:mainnet","bitcoin:testnet","bitcoin:signet"],["ordinals"],["none"],["ordinals"],["bitcoin-psbt"],["send"],"universal-ordinals-transfer",{send:"prepare"})]);function T(e,{access:t="public",feeProfile:n="default",registry:r=v,nowMs:i=Date.now()}={}){if(!new Set(["public","admin"]).has(t))throw new a("access must be public or admin","invalid-access");if(!Number.isSafeInteger(i)||i<0)throw new a("nowMs must be a non-negative safe integer","invalid-expiry");let s=h(e);if(s.expiry&&i>=s.expiry.value)throw new a("lifecycle intent has expired","expired-intent");let p=r.route(s);return Object.freeze({tier:u,custody:"user",prepareOnly:!1,routeOnly:!0,access:t,feeProfile:o(n,"feeProfile"),fees:Object.freeze({oracle:"0",currency:"none"}),adapterId:p.id,surface:Object.freeze({provider:p.surface.provider,operation:p.surface.operations[s.action]}),intent:Object.freeze(s)})}export{k as NFT_LIFECYCLE_ACTIONS,u as NFT_LIFECYCLE_TIER,v as UNIVERSAL_NFT_LIFECYCLE_REGISTRY,a as UniversalNftLifecycleError,h as canonicalizeNftLifecycleIntent,_ as createUniversalNftLifecycleRegistry,T as routeUniversalNftLifecycle};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash as
|
|
1
|
+
import{createHash as R,createHmac as _,timingSafeEqual as $}from"node:crypto";var S=2,h=300*1e3,w=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();function N(e){let r=e==null||e===""?h:Number(e);return!Number.isFinite(r)||r<0?h:Math.min(r,w)}function d(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(d).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${d(e[t])}`).join(",")}}`}function x(e){let r=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return r.length>=16?r:""}function l(e=process.env){return x(process.env)||x(e)}function y(e){let{prepareHash:r,prepareMac:t,note:o,...s}=e||{};return s}function E(e){let r=y(e);return R("sha256").update(d(r)).digest("hex")}function M(e,r=l()){return r?_("sha256",r).update(String(e)).digest("hex"):""}function H(e,r){try{let t=Buffer.from(String(e),"hex"),o=Buffer.from(String(r),"hex");return t.length===0||t.length!==o.length?!1:$(t,o)}catch{return!1}}function j(e,{provider:r,kind:t,env:o=process.env,nowMs:s=Date.now(),expiresAtMs:n}={}){if(!e||typeof e!="object")throw new Error("stampPrepared: payload object required");let c=Object.prototype.hasOwnProperty.call(e,"oraclePrepared");if(c&&typeof e.oraclePrepared!="boolean")throw new Error("stampPrepared: oraclePrepared must be boolean");let p={...e,provider:e.provider||r,kind:e.kind||t,requiresUserSignature:e.requiresUserSignature!==!1,signingReady:!1,broadcastReady:!1,executionReady:!1,oraclePrepared:c?e.oraclePrepared:!0};if(!p.provider)throw new Error("stampPrepared: provider required");if(!p.kind)throw new Error("stampPrepared: kind required");let i=Number(s),u=n==null?i+h:Number(n),a=u-i;if(!Number.isSafeInteger(i)||!Number.isSafeInteger(u)||a<=0||a>w)throw new Error("stampPrepared: bounded preparedAt/expiresAt required");let m={...p,preparedAt:i,expiresAt:u,prepareVersion:S},b=E(m),A=l(o),P=A?M(b,A):void 0,g={...m,prepareHash:b};return P&&(g.prepareMac=P),g}function v(e,{maxAgeMs:r=h,nowMs:t=Date.now(),providers:o=null,kinds:s=null,label:n="operator"}={}){if(!e||typeof e!="object")throw new Error(`${n}: prepared envelope object required`);if(e.oraclePrepared!==!0)throw new Error(`${n}: prepared integrity envelope missing \u2014 use an @oracle-agent/oracle prepare result`);if(Number(e.prepareVersion)!==S)throw new Error(`${n}: unsupported prepareVersion ${e.prepareVersion}`);let c=E(e);if(String(e.prepareHash||"")!==c)throw new Error(`${n}: prepareHash mismatch \u2014 payload was altered after prepare`);let p=Number(e.preparedAt),i=Number(e.expiresAt),u=N(r),a=t-p,f=i-p;if(!Number.isFinite(a)||!Number.isFinite(i)||!Number.isFinite(f)||a<0||f<=0||f>w||a>u||t>=i)throw new Error(`${n}: prepare envelope expired or clock-skewed (ageMs=${a}, max=${u})`);if(o&&!new Set(o).has(e.provider))throw new Error(`${n}: provider ${e.provider} not allowed here`);if(s&&!new Set(s).has(e.kind))throw new Error(`${n}: kind ${e.kind} not allowed here`);return!0}function O(e,r={}){v(e,r);let t=r.label||"operator",o=l(r.env||process.env);if(!o)throw new Error(`${t}: trusted prepare stamp requires ORACLE_STAMP_HMAC_SECRET`);let s=E(e),n=String(e.prepareMac||""),c=M(s,o);if(!n||!H(n,c))throw new Error(`${t}: prepareMac mismatch \u2014 stamp not from trusted preparer`);return!0}export{w as PREPARE_HARD_MAX_AGE_MS,h as PREPARE_MAX_AGE_MS,S as PREPARE_VERSION,v as assertPreparedChecksum,O as assertPreparedEnvelope,E as computePrepareHash,M as computePrepareMac,y as prepareBodyForHash,N as resolvePrepareMaxAgeMs,j as stampPrepared};
|