@wowok/agent-mcp 3.3.7 → 3.3.9
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/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/guard-verbs.js +1 -1
- package/dist/chain-semantics/object-graph.js +1 -1
- package/dist/communication/message-cursors.d.ts +35 -0
- package/dist/communication/message-cursors.js +1 -0
- package/dist/communication/wts-attestation.d.ts +5 -0
- package/dist/communication/wts-attestation.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/compile.d.ts +2 -2
- package/dist/composition/compile.js +1 -1
- package/dist/composition/inflight.d.ts +7 -0
- package/dist/composition/inflight.js +1 -1
- package/dist/composition/materialize.d.ts +4 -1
- package/dist/composition/materialize.js +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +1 -1
- package/dist/config/store-policy.d.ts +14 -0
- package/dist/config/store-policy.js +1 -0
- package/dist/config/store-policy.spec.d.ts +1 -0
- package/dist/config/store-policy.spec.js +1 -0
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/user-preferences.js +1 -1
- package/dist/evaluation/builtins/graph-service.spec.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/business-modules.d.ts +1 -1
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/graph/onchain/facts.d.ts +1 -0
- package/dist/graph/onchain/facts.js +1 -1
- package/dist/graph/onchain/facts.spec.js +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/knowledge/acquisition-flywheel.js +1 -1
- package/dist/knowledge/allocation-ledger.d.ts +1 -0
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.d.ts +6 -2
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +37 -0
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/plan.json +32 -2
- package/dist/knowledge/builtin-templates.d.ts +13 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/commission-landing.d.ts +26 -0
- package/dist/knowledge/commission-landing.js +1 -0
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/fund-layer.d.ts +7 -0
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/guard-render.d.ts +7 -0
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-generalizer.js +1 -1
- package/dist/knowledge/industry-registry.d.ts +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-fork-watch.d.ts +9 -0
- package/dist/knowledge/machine-fork-watch.js +1 -0
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/projection.spec.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +8 -2
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/semantic-ir.d.ts +24 -5
- package/dist/knowledge/semantic-ir.js +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-index.js +1 -1
- package/dist/knowledge/template-loader.d.ts +11 -0
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +4 -2
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/template-validation.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +12 -6
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.d.ts +10 -2
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/mode-actions.d.ts +1 -0
- package/dist/playbooks/service-build/mode-actions.js +1 -1
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/playbooks/service-build/service-quote.spec.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +72 -1
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +3 -0
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/base.d.ts +24 -0
- package/dist/schema/call/bridge.d.ts +6 -0
- package/dist/schema/call/error-codes.d.ts +1 -1
- package/dist/schema/call/error-codes.js +1 -1
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +24 -0
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/goal/index.d.ts +14 -0
- package/dist/schema/goal/planning.d.ts +26 -0
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +9 -1
- package/dist/schema/industry-pack/modes.d.ts +9 -1
- package/dist/schema/industry-pack/modes.js +1 -1
- package/dist/schema/local/index.d.ts +60 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +278 -1
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +1 -0
- package/dist/schema/query/bi.d.ts +38 -0
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +3 -0
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/service-clone/index.d.ts +17 -0
- package/dist/schema/service-clone/index.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +6 -0
- package/dist/schemas/benchmark_migration_operation.output.json +254 -2
- package/dist/schemas/benchmark_migration_operation.schema.json +87 -5
- package/dist/schemas/bridge_operation.output.json +6 -0
- package/dist/schemas/config_operation.output.json +95 -0
- package/dist/schemas/config_operation.schema.json +16 -1
- package/dist/schemas/goal_operation.schema.json +22 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/industry_pack_operation.output.json +4 -0
- package/dist/schemas/industry_pack_operation.schema.json +40 -3
- package/dist/schemas/local_cache_operation.output.json +6 -0
- package/dist/schemas/local_history_operation.output.json +6 -0
- package/dist/schemas/local_info_operation.output.json +6 -0
- package/dist/schemas/local_mark_operation.output.json +6 -0
- package/dist/schemas/messenger_operation.output.json +609 -1
- package/dist/schemas/messenger_operation.schema.json +96 -1
- package/dist/schemas/onchain_operations.output.json +6 -0
- package/dist/schemas/onchain_operations.schema.json +334 -7
- package/dist/schemas/onchain_operations_allocation.schema.json +10 -1
- package/dist/schemas/onchain_operations_guard.schema.json +318 -0
- package/dist/schemas/onchain_operations_order.schema.json +1 -1
- package/dist/schemas/onchain_operations_service.schema.json +5 -5
- package/dist/schemas/query_toolkit.output.json +271 -8
- package/dist/schemas/service_clone_operation.output.json +79 -0
- package/dist/tools/handlers/benchmark-migration.d.ts +14 -0
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +19 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.d.ts +1 -0
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/service-clone.d.ts +18 -0
- package/dist/tools/handlers/service-clone.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config,LocalMark,query_objects,query_object_last_updated,query_table,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a379a}from'../../tools/handlers/name-resolution.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a);function freshnessOf(a){const b=a?a['version']??a['data']?.['version']:undefined;return{'read_at_ms':Date['now'](),'version':b===undefined||b===null||String(b)===''?null:String(b),'note':'live\x20read\x20(cache\x20bypassed);\x20a\x20read\x20issued\x20in\x20the\x20same\x20second\x20as\x20a\x20committing\x20transaction\x20can\x20trail\x20the\x20committed\x20effect\x20by\x20one\x20checkpoint\x20—\x20if\x20any\x20field\x20contradicts\x20a\x20transaction\x20just\x20submitted,\x20re-query\x20once\x20(compare\x20version\x20across\x20reads)\x20before\x20concluding'};}const ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],scalarValueStr=a=>{if(a==null)return null;if(typeof a==='string')return a;if(typeof a==='number'||typeof a==='boolean')return String(a);if(typeof a==='bigint')return a['toString']();if(a instanceof Uint8Array)try{return new TextDecoder()['decode'](a);}catch{return Array['from'](a['slice'](0x0,0x20))['map'](c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('')+(a['length']>0x20?'...':'');}try{return JSON['stringify'](a,(b,c)=>typeof c==='bigint'?c['toString']():c);}catch{return null;}};export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b,c=!![]){const d=await a379a(a,'object_address');let f=b??undefined,g=null;if(!f)f=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[d],'network':f,...c?{'no_cache':!![]}:{}});g=h?.['objects']?.[0x0]??null;if(!g&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==f){const j=await query_objects({'objects':[d],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(g=k,f=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+d+'\x20on\x20'+f+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!g)throw new Error(d+'\x20not\x20found\x20on\x20'+f+(b?'':'\x20(session\x20default\x20network\x20—\x20not\x20an\x20explicit\x20request)')+'.\x20Verify\x20BOTH\x20the\x20object\x20ID\x20and\x20the\x20network:\x20an\x20object\x20that\x20exists\x20on\x20'+'one\x20network\x20answers\x20\x22not\x20found\x22\x20on\x20the\x20other.\x20Pass\x20context_network\x20'+'to\x20query\x20a\x20specific\x20network\x20before\x20concluding\x20the\x20object\x20does\x20not\x20exist.');return g['object']=g['object']??d,{'network':String(f),'obj':g};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){const d=0x32,f=0xc8,g=0x32,h=[];let i=0x0,j=!![];try{const l=[];let m=null;for(;;){const n=await query_table({'parent':a,'cursor':m,'limit':g,'no_cache':!![],'network':b}),o=Array['isArray'](n?.['items'])?n['items']:[];for(const p of o){if(typeof p?.['object']==='string')l['push'](p['object']);}i+=o['length'];if(n?.['hasNextPage']===!![]&&typeof n?.['nextCursor']==='string'&&i<f){m=n['nextCursor'];continue;}j=n?.['hasNextPage']!==!![];break;}if(l['length']>0x0){const q=await batchQueryObjectsByIds(l,b,!![]);for(const s of Array['isArray'](q)?q:[]){const t=s,u=t?.['data'];if(t?.['entity']===undefined&&t?.['name']===undefined)continue;h['push']({'entity':str(t?.['entity']),'name':str(t?.['name']),'value':scalarValueStr(u?.['value']??t?.['value']),'value_type':str(u?.['value_type'])});}}}catch(v){return c['push']('data:\x20table\x20enumeration\x20failed\x20('+(v instanceof Error?v['message']:String(v))+')\x20—\x20entries\x20below\x20are\x20NOT\x20the\x20full\x20set;\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':null,'items':h['slice'](0x0,d)};}if(i===0x0)return{'count':0x0,'items':[]};const k=h['slice'](0x0,d);return(!j||i>d)&&c['push']('data:\x20showing\x20'+k['length']+'\x20of\x20'+i+'\x20row(s)'+(j?'':'\x20(walk\x20capped\x20at\x20'+f+')')+'\x20—\x20full\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':i,'items':k};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network'],b['no_cache']!==![]),h=String(f['object']),j=[],k=await resolveHead(h,f,j),l=String(f['type']??'');if(l==='Progress'){const m=arr(f['session'])[0x0],n=m?{'next_node':str(m['next_node']),'weights':num(m['weights']),'threshold':num(m['threshold']),'forwards':arr(m['forwards'])['map'](r=>{const t=r;return{'forward':str(t['forward'])??'','who':str(t['who']),'accomplished':t['accomplished']===!![],'msg':str(t['msg']),'time':num(t['time'])};})}:null,q=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,h,e,j,'machine');return{'action':'object_panorama','object':h,'object_type':'Progress','network':e,'head':k,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](t=>String(t)),'operators':arr(f['namedOperator'])['map'](r=>{const t=r;return{'name':str(t['name'])??'','operators':arr(t['operators'])['map'](u=>String(u))};}),'session':n,'related':q,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Demand')return{'action':'object_panorama','object':h,'object_type':'Demand','network':e,'head':k,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':num(f['presenters_count'])},'rewards':arr(f['rewards'])['map'](t=>String(t)),'guards':arr(f['guards'])['map'](r=>({'guard':str(r['guard'])??''})),'presenters':await buildPresenters(h,e,j),'data_gaps':j};if(l==='Order'){let r=null;try{const G=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});r=G?.['timestamp_ms']?Number(G['timestamp_ms'])||null:null;}catch{}let t='none',u=null,w=null;const x=str(f['allocation']),y=str(f['progress']),z=str(f['service']),A=[x,y,z]['filter'](H=>!!H);let B=null;if(A['length']>0x0)try{const H=await query_objects({'objects':A,'network':e}),I=H?.['objects']??[];if(x){t='pending';const J=I['find'](L=>L?.['object']===x),K=Number(J?.['balance']??NaN);if(Number['isFinite'](K)&&K===0x0)t='allocated';}if(y){const L=I['find'](M=>M?.['object']===y);u=str(L?.['current']),w=num(L?.['current_time']);}if(z){const M=I['find'](N=>N?.['object']===z);B=coinOfTypeRaw(M?.['type_raw']??M?.['type']);}}catch{}const C=await buildRelatedList(h,h,e,j,'order'),D=str(f['amount']),E=await formatMoneyAnnotation(D,B,e),F=await Promise['all'](arr(f['items'])['map'](async N=>{const O=N,P=str(O['price']),Q=await formatMoneyAnnotation(P,B,e);return{'name':str(O['name']),'price':P,'price_display':Q['display'],'price_tip':Q['tip'],'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}));return{'action':'object_panorama','object':h,'object_type':'Order','network':e,'head':k,'coin_type':B,'fields':{'service':z,'machine':str(f['machine']),'progress':y,'allocation':x,'discount':str(f['discount']),'amount':D,'amount_display':E['display'],'amount_tip':E['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':r,'related':C,'allocation_state':t,'progress_next':u,'progress_since':w,'items':F,'disputes':arr(f['dispute'])['map'](N=>String(N)),'agents':arr(f['agent'])['map'](N=>String(N)),'data_gaps':j};}if(l==='Arb'){const N=f['indemnity'];let O=null;try{const X=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});O=X?.['timestamp_ms']?Number(X['timestamp_ms'])||null:null;}catch{}const P=str(f['order']);let Q=null;if(P)try{const Y=await query_objects({'objects':[P],'network':e}),Z=Y?.['objects']?.[0x0];Q=str(Z?.['service']);}catch{}const R=await buildRelatedList(h,h,e,j,'arb'),S=coinOfTypeRaw(f['type_raw']),T=str(f['fee']),U=await formatMoneyAnnotation(T,S,e),V=N?str(N['amount']):null,W=await formatMoneyAnnotation(V,S,e);return{'action':'object_panorama','object':h,'object_type':'Arb','network':e,'head':k,'coin_type':S,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':Q,'fee':T,'fee_display':U['display'],'fee_tip':U['tip'],'feedback':str(f['feedback']),'indemnity':N?{'amount':V,'amount_display':W['display'],'amount_tip':W['tip'],'time':num(N['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Arbitration'){const a0=coinOfTypeRaw(f['type_raw']??f['type']),a1=str(f['fee']),a2=await formatMoneyAnnotation(a1,a0,e),a3=str(f['balance']),a4=await formatMoneyAnnotation(a3,a0,e),a5=a8=>{if(a8&&typeof a8==='object'){const a9=a8;if(a9['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(a9['GuardIdentifier']);if(a9['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(a9['FixedValue']);}return typeof a8==='number'||typeof a8==='string'?String(a8):null;},a6=arr(f['voting_guard'])['map'](a8=>{const a9=a8;return{'guard':str(a9['guard'])??'','vote_weight':a5(a9['vote_weight'])};}),a7={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const a8=await fetchObjectLinkerTx(h,e,!![]),a9=a8?.['items']??[];a7['window_saturated']=ringWindowSaturated(a9['length']);const aa=a9['filter'](ad=>objectTypeFromAddress(typeof ad?.['who']==='string'?ad['who']:'')===ObjectType['Arb']);a7['count']=aa['length'];for(const ad of aa){if(typeof ad?.['time']==='number'){if(a7['stats']['first_created_ms']===null||ad['time']<a7['stats']['first_created_ms'])a7['stats']['first_created_ms']=ad['time'];if(a7['stats']['last_created_ms']===null||ad['time']>a7['stats']['last_created_ms'])a7['stats']['last_created_ms']=ad['time'];}}const ab=aa['slice'](-0x3)['reverse'](),ac=new Map();if(ab['length']>0x0)try{const ae=await batchQueryObjectsByIds(ab['map'](af=>String(af['who'])),e,!![]);for(const af of ae){if(af?.['object'])ac['set'](af['object'],af);}}catch{j['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const ag of ab){const ah=typeof ag?.['who']==='string'?ag['who']:'';if(!ah)continue;const ai=ac['get'](ah);a7['items']['push']({'arb':ah,'order':ai?str(ai['order']):null,'status':ai?ARB_STATUS_NAMES[num(ai['status'])??-0x1]??str(ai['status']):null,'time':typeof ag?.['time']==='number'?ag['time']:null});}a7['preview_truncated']=a7['count']>a7['items']['length'],a7['preview_truncated']&&(a7['drilldown']={'total_count':a7['count'],'analyzed_count':a7['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+h+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a7['count']+(a7['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{j['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':h,'object_type':'Arbitration','network':e,'head':k,'coin_type':a0,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a1,'fee_display':a2['display'],'fee_tip':a2['tip'],'balance':a3,'balance_display':a4['display'],'balance_tip':a4['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a6,'cases':a7,'data_gaps':j};}if(l==='Repository')return{'action':'object_panorama','object':h,'object_type':'Repository','network':e,'head':k,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](aj=>{const ak=aj;return{'name':str(ak['name'])??'','description':str(ak['description']),'id_from':str(ak['id_from']),'value_type':str(ak['value_type']),'write_guards':arr(ak['write_guard'])['length'],'quote_guard':str(ak['quote_guard']),'write_once':ak['write_once']===!![]};}),'rewards':arr(f['rewards'])['map'](aj=>String(aj)),'data_entries':await buildRepositoryData(h,e,j),'data_gaps':j};if(l==='Proof'){const aj=ar=>typeof ar==='string'&&ar?createHash('sha256')['update'](ar)['digest']('hex')['slice'](0x0,0x10):null,ak=str(f['server_pubkey']),al=str(f['server_signature']),am=num(f['time']),an=num(f['proof_type']),ao=str(f['proof']),ap={'action':'object_panorama','object':h,'object_type':'Proof','network':e,'head':k,'fields':{'description':str(f['description']),'anchored_root':ao,'item_count':num(f['item_count']),'proof_type':an,'proof_type_label':an===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE,\x20proof.move:11)\x20—\x20convention,\x20not\x20chain-validated':(an??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(proof.move\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about_address']??f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':am,'time_iso':am!==null?new Date(am)['toISOString']():null},'server_pubkey':{'present':!!ak,'length':ak?ak['length']:null,'fingerprint':aj(f['server_pubkey'])},'server_signature':{'present':!!al,'length':al?al['length']:null,'fingerprint':aj(f['server_signature'])},'data_gaps':[...j,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},aq=b['wts_file_path'];if(aq){const ar=await readWtsDocument(aq);ar===undefined?ap['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+aq+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ap['wts_anchor_check']=checkWtsProofAnchor(ar,{'proof':ao,'server_pubkey':ak,'time':am,'signer':ap['fields']['signer'],'address':h});}return ap;}if(l==='Allocation'){const as=str(f['balance']);let at=coinOfTypeRaw(f['type_raw']??f['type']);const au=arr(f['allocators']),av=f['allocators'],aw=str(av?.['threshold'])??str(f['threshold']);if(!at){const aC=str(f['payment_info']?.['for_object']);if(aC)try{const aD=await query_objects({'objects':[aC],'network':e}),aE=(aD?.['objects']??[])['find'](aG=>aG?.['object']===aC),aF=str(aE?.['service']);if(aF){const aG=await query_objects({'objects':[aF],'network':e}),aH=(aG?.['objects']??[])['find'](aI=>aI?.['object']===aF);at=coinOfTypeRaw(aH?.['type_raw']??aH?.['type']);}}catch{}}const ax=await formatMoneyAnnotation(as,at,e),ay=f['payment_info'],az={0x0:'0=Amount\x20(fixed\x20raw\x20units)',0x1:'1=Rate\x20(per-10000\x20of\x20the\x20pool\x20base)',0x2:'2=Surplus\x20(everything\x20left\x20after\x20fixed\x20rows)',0x3:'3=RateGross\x20(per-10000\x20of\x20the\x20GROSS\x20pool)'},aA=await buildRelatedList(h,h,e,j,'allocation');let aB=null;try{const aI=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});aB=aI?.['timestamp_ms']?Number(aI['timestamp_ms'])||null:null;}catch{}return{'action':'object_panorama','object':h,'object_type':'Allocation','network':e,'head':k,'coin_type':at,'fields':{'balance':as,'balance_display':ax['display'],'balance_tip':ax['tip'],'threshold':aw,'for_object':str(ay?.['for_object']),'for_guard':str(ay?.['for_guard']),'remark':str(ay?.['remark']),'index':str(ay?.['index'])},'allocators':au['map'](aJ=>{const aK=aJ;return{'guard':str(aK['guard']),'sharing':arr(aK['sharing'])['map'](aL=>{const aM=aL,aN=aM['who'];let aO='unknown',aP=null;if(aN&&typeof aN==='object'){if(typeof aN['GuardIdentifier']==='number'||typeof aN['GuardIdentifier']==='string')aO='guard_identifier',aP=num(aN['GuardIdentifier']);else{if(aN['Entity']&&typeof aN['Entity']==='object')aO='entity',aP=str(aN['Entity']['name_or_address']);else typeof aN['Signer']==='string'&&(aO='signer',aP=aN['Signer']);}}const aQ=num(aM['mode']);return{'who_kind':aO,'who_value':aP,'resolution_note':aO==='guard_identifier'?'slot\x20'+String(aP)+':\x20reads\x20the\x20rail\x20guard\x27s\x20SUBMITTED\x20value\x20for\x20this\x20slot\x20at\x20spend\x20time\x20(order-scoped\x20rails\x20submit\x20the\x20Order\x20address\x20—\x20for_object\x20above).\x20A\x20STATIC\x20row\x20in\x20this\x20slot\x20is\x20the\x20F21\x20bricked\x20shape;\x20cross-check\x20the\x20guard\x27s\x20declared\x20submission\x20slots.':aO==='entity'?'static\x20address:\x20pins\x20this\x20literal\x20recipient\x20regardless\x20of\x20the\x20guard\x27s\x20submitted\x20slots.':aO==='signer'?'signer:\x20resolves\x20to\x20whoever\x20executes\x20the\x20spend\x20transaction.':'unrecognized\x20recipient\x20variant\x20—\x20SDK\x20decode\x20gap;\x20report\x20with\x20the\x20raw\x20object.','sharing':str(aM['sharing']),'mode':aQ,'mode_label':az[aQ??-0x1]??(aQ??'?')+'\x20=\x20unrecognized\x20mode'};})};}),'updated_ms':aB,'related':aA,'data_gaps':j};}if(l==='Reward'){const aJ=coinOfTypeRaw(f['type_raw']??l),aK=str(f['balance']);let aL={'display':null,'tip':null};try{aL=await formatMoneyAnnotation(aK,aJ,e);}catch{}const aM=[];for(const aN of arr(f['guards'])){const aO=aN,aP=aO?.['amount'],aQ=aP!=null&&(aP['type']===0x1||aP['type']==='Fixed'),aR=aP!=null&&(aP['type']===0x2||aP['type']==='GuardU64Identifier'),aS=num(aO?.['expiration_time']);aM['push']({'guard':str(aO?.['guard'])??'','amount_type':aQ?'fixed':aR?'guard_submission':'unknown','amount':aQ?str(aP?.['value']):aR?'submission\x20identifier\x20'+(str(aP?.['value'])??'?'):null,'amount_display':aQ?(await formatMoneyAnnotation(str(aP?.['value']),aJ,e))['display']:null,'expiration_time':aS,'expiration_display':aS!=null?new Date(aS)['toISOString']():null,'expired':aS!=null?Date['now']()>aS:null});}return{'action':'object_panorama','object':h,'object_type':'Reward','network':e,'head':k,'freshness':freshnessOf(f),'coin_type':aJ,'fields':{'pool_balance':aK,'pool_balance_display':aL['display'],'claims':aM},'claim_records':{'count':null,'note':'Claim\x20history\x20is\x20recipient-keyed\x20on\x20this\x20Reward\x27s\x20table\x20—\x20read\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Reward\x20address).'},'data_gaps':j};}return j['push']('No\x20semantic\x20decoder\x20for\x20type\x20\x27'+(l||'unknown')+'\x27\x20—\x20fields\x20below\x20are\x20the\x20RAW\x20on-chain\x20payload,\x20not\x20interpreted.\x20'+'Semantic\x20decoders\x20exist\x20for:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Allocation\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Reward\x20/\x20Proof.'),{'action':'object_panorama','object':h,'network':e,'head':k,'freshness':freshnessOf(f),'object_type':'Unknown','raw_type':l||'unknown','coin_type':coinOfTypeRaw(l),'fields':js(f),'data_gaps':j};}
|
|
1
|
+
import{Config,LocalMark,query_objects,query_object_last_updated,query_table,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a384a}from'../../tools/handlers/name-resolution.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a);function freshnessOf(a){const b=a?a['version']??a['data']?.['version']:undefined;return{'read_at_ms':Date['now'](),'version':b===undefined||b===null||String(b)===''?null:String(b),'note':'live\x20read\x20(cache\x20bypassed);\x20a\x20read\x20issued\x20in\x20the\x20same\x20second\x20as\x20a\x20committing\x20transaction\x20can\x20trail\x20the\x20committed\x20effect\x20by\x20one\x20checkpoint\x20—\x20if\x20any\x20field\x20contradicts\x20a\x20transaction\x20just\x20submitted,\x20re-query\x20once\x20(compare\x20version\x20across\x20reads)\x20before\x20concluding'};}const ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],scalarValueStr=a=>{if(a==null)return null;if(typeof a==='string')return a;if(typeof a==='number'||typeof a==='boolean')return String(a);if(typeof a==='bigint')return a['toString']();if(a instanceof Uint8Array)try{return new TextDecoder()['decode'](a);}catch{return Array['from'](a['slice'](0x0,0x20))['map'](c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('')+(a['length']>0x20?'...':'');}try{return JSON['stringify'](a,(b,c)=>typeof c==='bigint'?c['toString']():c);}catch{return null;}};export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b,c=!![]){const d=await a384a(a,'object_address');let f=b??undefined,g=null;if(!f)f=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[d],'network':f,...c?{'no_cache':!![]}:{}});g=h?.['objects']?.[0x0]??null;if(!g&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==f){const j=await query_objects({'objects':[d],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(g=k,f=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+d+'\x20on\x20'+f+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!g)throw new Error(d+'\x20not\x20found\x20on\x20'+f+(b?'':'\x20(session\x20default\x20network\x20—\x20not\x20an\x20explicit\x20request)')+'.\x20Verify\x20BOTH\x20the\x20object\x20ID\x20and\x20the\x20network:\x20an\x20object\x20that\x20exists\x20on\x20'+'one\x20network\x20answers\x20\x22not\x20found\x22\x20on\x20the\x20other.\x20Pass\x20context_network\x20'+'to\x20query\x20a\x20specific\x20network\x20before\x20concluding\x20the\x20object\x20does\x20not\x20exist.');return g['object']=g['object']??d,{'network':String(f),'obj':g};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){const d=0x32,f=0xc8,g=0x32,h=[];let i=0x0,j=!![];try{const l=[];let m=null;for(;;){const n=await query_table({'parent':a,'cursor':m,'limit':g,'no_cache':!![],'network':b}),o=Array['isArray'](n?.['items'])?n['items']:[];for(const p of o){if(typeof p?.['object']==='string')l['push'](p['object']);}i+=o['length'];if(n?.['hasNextPage']===!![]&&typeof n?.['nextCursor']==='string'&&i<f){m=n['nextCursor'];continue;}j=n?.['hasNextPage']!==!![];break;}if(l['length']>0x0){const q=await batchQueryObjectsByIds(l,b,!![]);for(const s of Array['isArray'](q)?q:[]){const t=s,u=t?.['data'];if(t?.['entity']===undefined&&t?.['name']===undefined)continue;h['push']({'entity':str(t?.['entity']),'name':str(t?.['name']),'value':scalarValueStr(u?.['value']??t?.['value']),'value_type':str(u?.['value_type'])});}}}catch(v){return c['push']('data:\x20table\x20enumeration\x20failed\x20('+(v instanceof Error?v['message']:String(v))+')\x20—\x20entries\x20below\x20are\x20NOT\x20the\x20full\x20set;\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':null,'items':h['slice'](0x0,d)};}if(i===0x0)return{'count':0x0,'items':[]};const k=h['slice'](0x0,d);return(!j||i>d)&&c['push']('data:\x20showing\x20'+k['length']+'\x20of\x20'+i+'\x20row(s)'+(j?'':'\x20(walk\x20capped\x20at\x20'+f+')')+'\x20—\x20full\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':i,'items':k};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network'],b['no_cache']!==![]),h=String(f['object']),j=[],k=await resolveHead(h,f,j),l=String(f['type']??'');if(l==='Progress'){const m=arr(f['session'])[0x0],n=m?{'next_node':str(m['next_node']),'weights':num(m['weights']),'threshold':num(m['threshold']),'forwards':arr(m['forwards'])['map'](r=>{const t=r;return{'forward':str(t['forward'])??'','who':str(t['who']),'accomplished':t['accomplished']===!![],'msg':str(t['msg']),'time':num(t['time'])};})}:null,q=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,h,e,j,'machine');return{'action':'object_panorama','object':h,'object_type':'Progress','network':e,'head':k,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](t=>String(t)),'operators':arr(f['namedOperator'])['map'](r=>{const t=r;return{'name':str(t['name'])??'','operators':arr(t['operators'])['map'](u=>String(u))};}),'session':n,'related':q,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Demand')return{'action':'object_panorama','object':h,'object_type':'Demand','network':e,'head':k,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':num(f['presenters_count'])},'rewards':arr(f['rewards'])['map'](t=>String(t)),'guards':arr(f['guards'])['map'](r=>({'guard':str(r['guard'])??''})),'presenters':await buildPresenters(h,e,j),'data_gaps':j};if(l==='Order'){let r=null;try{const G=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});r=G?.['timestamp_ms']?Number(G['timestamp_ms'])||null:null;}catch{}let t='none',u=null,w=null;const x=str(f['allocation']),y=str(f['progress']),z=str(f['service']),A=[x,y,z]['filter'](H=>!!H);let B=null;if(A['length']>0x0)try{const H=await query_objects({'objects':A,'network':e}),I=H?.['objects']??[];if(x){t='pending';const J=I['find'](L=>L?.['object']===x),K=Number(J?.['balance']??NaN);if(Number['isFinite'](K)&&K===0x0)t='allocated';}if(y){const L=I['find'](M=>M?.['object']===y);u=str(L?.['current']),w=num(L?.['current_time']);}if(z){const M=I['find'](N=>N?.['object']===z);B=coinOfTypeRaw(M?.['type_raw']??M?.['type']);}}catch{}const C=await buildRelatedList(h,h,e,j,'order'),D=str(f['amount']),E=await formatMoneyAnnotation(D,B,e),F=await Promise['all'](arr(f['items'])['map'](async N=>{const O=N,P=str(O['price']),Q=await formatMoneyAnnotation(P,B,e);return{'name':str(O['name']),'price':P,'price_display':Q['display'],'price_tip':Q['tip'],'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}));return{'action':'object_panorama','object':h,'object_type':'Order','network':e,'head':k,'coin_type':B,'fields':{'service':z,'machine':str(f['machine']),'progress':y,'allocation':x,'discount':str(f['discount']),'amount':D,'amount_display':E['display'],'amount_tip':E['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':r,'related':C,'allocation_state':t,'progress_next':u,'progress_since':w,'items':F,'disputes':arr(f['dispute'])['map'](N=>String(N)),'agents':arr(f['agent'])['map'](N=>String(N)),'data_gaps':j};}if(l==='Arb'){const N=f['indemnity'];let O=null;try{const X=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});O=X?.['timestamp_ms']?Number(X['timestamp_ms'])||null:null;}catch{}const P=str(f['order']);let Q=null;if(P)try{const Y=await query_objects({'objects':[P],'network':e}),Z=Y?.['objects']?.[0x0];Q=str(Z?.['service']);}catch{}const R=await buildRelatedList(h,h,e,j,'arb'),S=coinOfTypeRaw(f['type_raw']),T=str(f['fee']),U=await formatMoneyAnnotation(T,S,e),V=N?str(N['amount']):null,W=await formatMoneyAnnotation(V,S,e);return{'action':'object_panorama','object':h,'object_type':'Arb','network':e,'head':k,'coin_type':S,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':Q,'fee':T,'fee_display':U['display'],'fee_tip':U['tip'],'feedback':str(f['feedback']),'indemnity':N?{'amount':V,'amount_display':W['display'],'amount_tip':W['tip'],'time':num(N['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Arbitration'){const a0=coinOfTypeRaw(f['type_raw']??f['type']),a1=str(f['fee']),a2=await formatMoneyAnnotation(a1,a0,e),a3=str(f['balance']),a4=await formatMoneyAnnotation(a3,a0,e),a5=a8=>{if(a8&&typeof a8==='object'){const a9=a8;if(a9['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(a9['GuardIdentifier']);if(a9['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(a9['FixedValue']);}return typeof a8==='number'||typeof a8==='string'?String(a8):null;},a6=arr(f['voting_guard'])['map'](a8=>{const a9=a8;return{'guard':str(a9['guard'])??'','vote_weight':a5(a9['vote_weight'])};}),a7={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const a8=await fetchObjectLinkerTx(h,e,!![]),a9=a8?.['items']??[];a7['window_saturated']=ringWindowSaturated(a9['length']);const aa=a9['filter'](ad=>objectTypeFromAddress(typeof ad?.['who']==='string'?ad['who']:'')===ObjectType['Arb']);a7['count']=aa['length'];for(const ad of aa){if(typeof ad?.['time']==='number'){if(a7['stats']['first_created_ms']===null||ad['time']<a7['stats']['first_created_ms'])a7['stats']['first_created_ms']=ad['time'];if(a7['stats']['last_created_ms']===null||ad['time']>a7['stats']['last_created_ms'])a7['stats']['last_created_ms']=ad['time'];}}const ab=aa['slice'](-0x3)['reverse'](),ac=new Map();if(ab['length']>0x0)try{const ae=await batchQueryObjectsByIds(ab['map'](af=>String(af['who'])),e,!![]);for(const af of ae){if(af?.['object'])ac['set'](af['object'],af);}}catch{j['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const ag of ab){const ah=typeof ag?.['who']==='string'?ag['who']:'';if(!ah)continue;const ai=ac['get'](ah);a7['items']['push']({'arb':ah,'order':ai?str(ai['order']):null,'status':ai?ARB_STATUS_NAMES[num(ai['status'])??-0x1]??str(ai['status']):null,'time':typeof ag?.['time']==='number'?ag['time']:null});}a7['preview_truncated']=a7['count']>a7['items']['length'],a7['preview_truncated']&&(a7['drilldown']={'total_count':a7['count'],'analyzed_count':a7['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+h+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a7['count']+(a7['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{j['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':h,'object_type':'Arbitration','network':e,'head':k,'coin_type':a0,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a1,'fee_display':a2['display'],'fee_tip':a2['tip'],'balance':a3,'balance_display':a4['display'],'balance_tip':a4['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a6,'cases':a7,'data_gaps':j};}if(l==='Repository')return{'action':'object_panorama','object':h,'object_type':'Repository','network':e,'head':k,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](aj=>{const ak=aj;return{'name':str(ak['name'])??'','description':str(ak['description']),'id_from':str(ak['id_from']),'value_type':str(ak['value_type']),'write_guards':arr(ak['write_guard'])['length'],'quote_guard':str(ak['quote_guard']),'write_once':ak['write_once']===!![]};}),'rewards':arr(f['rewards'])['map'](aj=>String(aj)),'data_entries':await buildRepositoryData(h,e,j),'data_gaps':j};if(l==='Proof'){const aj=ar=>typeof ar==='string'&&ar?createHash('sha256')['update'](ar)['digest']('hex')['slice'](0x0,0x10):null,ak=str(f['server_pubkey']),al=str(f['server_signature']),am=num(f['time']),an=num(f['proof_type']),ao=str(f['proof']),ap={'action':'object_panorama','object':h,'object_type':'Proof','network':e,'head':k,'fields':{'description':str(f['description']),'anchored_root':ao,'item_count':num(f['item_count']),'proof_type':an,'proof_type_label':an===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE,\x20proof.move:11)\x20—\x20convention,\x20not\x20chain-validated':(an??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(proof.move\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about_address']??f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':am,'time_iso':am!==null?new Date(am)['toISOString']():null},'server_pubkey':{'present':!!ak,'length':ak?ak['length']:null,'fingerprint':aj(f['server_pubkey'])},'server_signature':{'present':!!al,'length':al?al['length']:null,'fingerprint':aj(f['server_signature'])},'data_gaps':[...j,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},aq=b['wts_file_path'];if(aq){const ar=await readWtsDocument(aq);ar===undefined?ap['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+aq+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ap['wts_anchor_check']=checkWtsProofAnchor(ar,{'proof':ao,'server_pubkey':ak,'time':am,'signer':ap['fields']['signer'],'address':h});}return ap;}if(l==='Allocation'){const as=str(f['balance']);let at=coinOfTypeRaw(f['type_raw']??f['type']);const au=arr(f['allocators']),av=f['allocators'],aw=str(av?.['threshold'])??str(f['threshold']);if(!at){const aC=str(f['payment_info']?.['for_object']);if(aC)try{const aD=await query_objects({'objects':[aC],'network':e}),aE=(aD?.['objects']??[])['find'](aG=>aG?.['object']===aC),aF=str(aE?.['service']);if(aF){const aG=await query_objects({'objects':[aF],'network':e}),aH=(aG?.['objects']??[])['find'](aI=>aI?.['object']===aF);at=coinOfTypeRaw(aH?.['type_raw']??aH?.['type']);}}catch{}}const ax=await formatMoneyAnnotation(as,at,e),ay=f['payment_info'],az={0x0:'0=Amount\x20(fixed\x20raw\x20units)',0x1:'1=Rate\x20(per-10000\x20of\x20the\x20pool\x20base)',0x2:'2=Surplus\x20(everything\x20left\x20after\x20fixed\x20rows)',0x3:'3=RateGross\x20(per-10000\x20of\x20the\x20GROSS\x20pool)'},aA=await buildRelatedList(h,h,e,j,'allocation');let aB=null;try{const aI=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});aB=aI?.['timestamp_ms']?Number(aI['timestamp_ms'])||null:null;}catch{}return{'action':'object_panorama','object':h,'object_type':'Allocation','network':e,'head':k,'coin_type':at,'fields':{'balance':as,'balance_display':ax['display'],'balance_tip':ax['tip'],'threshold':aw,'for_object':str(ay?.['for_object']),'for_guard':str(ay?.['for_guard']),'remark':str(ay?.['remark']),'index':str(ay?.['index'])},'allocators':au['map'](aJ=>{const aK=aJ;return{'guard':str(aK['guard']),'sharing':arr(aK['sharing'])['map'](aL=>{const aM=aL,aN=aM['who'];let aO='unknown',aP=null;if(aN&&typeof aN==='object'){if(typeof aN['GuardIdentifier']==='number'||typeof aN['GuardIdentifier']==='string')aO='guard_identifier',aP=num(aN['GuardIdentifier']);else{if(aN['Entity']&&typeof aN['Entity']==='object')aO='entity',aP=str(aN['Entity']['name_or_address']);else typeof aN['Signer']==='string'&&(aO='signer',aP=aN['Signer']);}}const aQ=num(aM['mode']);return{'who_kind':aO,'who_value':aP,'resolution_note':aO==='guard_identifier'?'slot\x20'+String(aP)+':\x20reads\x20the\x20rail\x20guard\x27s\x20SUBMITTED\x20value\x20for\x20this\x20slot\x20at\x20spend\x20time\x20(order-scoped\x20rails\x20submit\x20the\x20Order\x20address\x20—\x20for_object\x20above).\x20A\x20STATIC\x20row\x20in\x20this\x20slot\x20is\x20the\x20F21\x20bricked\x20shape;\x20cross-check\x20the\x20guard\x27s\x20declared\x20submission\x20slots.':aO==='entity'?'static\x20address:\x20pins\x20this\x20literal\x20recipient\x20regardless\x20of\x20the\x20guard\x27s\x20submitted\x20slots.':aO==='signer'?'signer:\x20resolves\x20to\x20whoever\x20executes\x20the\x20spend\x20transaction.':'unrecognized\x20recipient\x20variant\x20—\x20SDK\x20decode\x20gap;\x20report\x20with\x20the\x20raw\x20object.','sharing':str(aM['sharing']),'mode':aQ,'mode_label':az[aQ??-0x1]??(aQ??'?')+'\x20=\x20unrecognized\x20mode'};})};}),'updated_ms':aB,'related':aA,'data_gaps':j};}if(l==='Reward'){const aJ=coinOfTypeRaw(f['type_raw']??l),aK=str(f['balance']);let aL={'display':null,'tip':null};try{aL=await formatMoneyAnnotation(aK,aJ,e);}catch{}const aM=[];for(const aN of arr(f['guards'])){const aO=aN,aP=aO?.['amount'],aQ=aP!=null&&(aP['type']===0x1||aP['type']==='Fixed'),aR=aP!=null&&(aP['type']===0x2||aP['type']==='GuardU64Identifier'),aS=num(aO?.['expiration_time']);aM['push']({'guard':str(aO?.['guard'])??'','amount_type':aQ?'fixed':aR?'guard_submission':'unknown','amount':aQ?str(aP?.['value']):aR?'submission\x20identifier\x20'+(str(aP?.['value'])??'?'):null,'amount_display':aQ?(await formatMoneyAnnotation(str(aP?.['value']),aJ,e))['display']:null,'expiration_time':aS,'expiration_display':aS!=null?new Date(aS)['toISOString']():null,'expired':aS!=null?Date['now']()>aS:null});}return{'action':'object_panorama','object':h,'object_type':'Reward','network':e,'head':k,'freshness':freshnessOf(f),'coin_type':aJ,'fields':{'pool_balance':aK,'pool_balance_display':aL['display'],'claims':aM},'claim_records':{'count':null,'note':'Claim\x20history\x20is\x20recipient-keyed\x20on\x20this\x20Reward\x27s\x20table\x20—\x20read\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Reward\x20address).'},'data_gaps':j};}return j['push']('No\x20semantic\x20decoder\x20for\x20type\x20\x27'+(l||'unknown')+'\x27\x20—\x20fields\x20below\x20are\x20the\x20RAW\x20on-chain\x20payload,\x20not\x20interpreted.\x20'+'Semantic\x20decoders\x20exist\x20for:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Allocation\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Reward\x20/\x20Proof.'),{'action':'object_panorama','object':h,'network':e,'head':k,'freshness':freshnessOf(f),'object_type':'Unknown','raw_type':l||'unknown','coin_type':coinOfTypeRaw(l),'fields':js(f),'data_gaps':j};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a381a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{buildNodeActionAdvice}from'../../participation/node-action-advisor.js';import{isTerminalArbStatus}from'../../knowledge/arbitration-ledger.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a381a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function allocatorGuardAddresses(b){const c=Array['isArray'](b)?b:Array['isArray'](b?.['allocators'])?b['allocators']:[],d=[];for(const e of c){const f=e?.['guard'];if(typeof f==='string'&&f['startsWith']('0x'))d['push'](f);}return d;}async function fetchAllocatorGuardDefs(a,b,c){const d=new Map(),f=[...new Set(allocatorGuardAddresses(a))];if(f['length']===0x0)return d;try{const h=await batchQueryObjectsByIds(f,b);for(const i of h){const j=fld(i,'object'),k=fld(i,'root');if(j&&k!==undefined&&k!==null){const l=fld(i,'table'),m=Array['isArray'](l)?l['filter'](n=>n!=null&&typeof n==='object')['filter'](n=>typeof n['identifier']==='number')['map'](n=>({'identifier':n['identifier'],'value_type':n['value_type'],'value':n['value'],'name':typeof n['name']==='string'?n['name']:undefined,'b_submission':n['b_submission']===!![]})):undefined;d['set'](j,{'root':k,...m&&m['length']>0x0?{'table':m}:{}});}}}catch(n){c['push']('Allocator\x20guard\x20fetch\x20failed:\x20'+n['message']+'\x20—\x20Signer-recipient\x20payoff\x20stays\x20conservative\x20'+'(unresolved\x20guards\x20cannot\x20clear\x20an\x20RC-FIND-01\x20suspicion).');}return d;}function summarizeAllocation(a,b,c){const d=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(d['length']===0x0)return undefined;let e=0x0,f=0x0,g=0x0,h=0x0;const i=[],j=b['toLowerCase']();for(const k of d){const l=k?.['sharing']??[];for(const n of l){e++;const o=classifyRecipient(n['who']);if(!o)continue;if(o['kind']==='submission')f++;else{if(o['kind']==='signer')h++;else{if(o['kind']==='entity'&&o['address']['toLowerCase']()===j)g++;}}}const m=typeof k?.['guard']==='string'?c['get'](k['guard']):undefined;i['push'](derivePayoffFromSharing(l,'service_order_allocators',m));}return{'recipient_slots':e,'guard_gated_slots':f,'direct_to_me_slots':g,'to_payer_slots':h,'payoffs':i};}export async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??await Config['Instance']()['network_get'](),d=a['radar_include_alerts']??!![],f=[],h=await resolveAddress(a['radar_account'],'radar_account'),i=await Promise['all'](a['radar_targets']['map'](async M=>({'progress':await resolveAddress(M['progress'],'progress'),'order':M['order']?await resolveAddress(M['order'],'order'):undefined}))),j=i['flatMap'](M=>M['order']?[M['progress'],M['order']]:[M['progress']]),k=await batchQueryObjectsByIds(j,b,!![]),l=new Map();for(const M of k){const N=fld(M,'object');if(N)l['set'](N,M);}const m=new Map(),q=new Map();for(const O of i){const P=l['get'](O['progress']);if(!P){f['push']('Progress\x20'+O['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}m['set'](O['progress'],P);if(O['order']){const Q=l['get'](O['order']);if(Q)q['set'](O['order'],Q);else f['push']('Order\x20'+O['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+O['progress']+'.');}}i['length']>0x0&&m['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+i['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const s=[...new Set([...m['values']()]['map'](R=>fld(R,'machine'))['filter'](R=>!!R))],u=[...new Set([...q['values']()]['map'](R=>fld(R,'service'))['filter'](R=>!!R))],w=[...new Set([...q['values']()]['flatMap'](R=>{const S=fld(R,'dispute');return Array['isArray'](S)?S:[];}))],x=[...new Set([...q['values']()]['map'](R=>fld(R,'allocation'))['filter'](R=>!!R&&R['startsWith']('0x')))],y=new Map(),z=new Map(),A=new Map(),B=new Map(),C=new Map();await Promise['all']([...s['map'](async R=>{try{const [S,T]=await Promise['all']([batchQueryObjectsByIds([R],b),fetchMachineNodes(R,b,!![])]);if(S[0x0])y['set'](R,S[0x0]);z['set'](R,toWorkflowSubgraph(T,R));}catch(U){f['push']('Machine\x20'+R+'\x20fetch\x20failed:\x20'+U['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(u['length']===0x0)return;try{const R=await batchQueryObjectsByIds(u,b);for(const S of R){const T=fld(S,'object');if(T)A['set'](T,S);}}catch(U){f['push']('Service\x20query\x20failed:\x20'+U['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(w['length']===0x0)return;try{const R=await batchQueryObjectsByIds(w,b);for(const S of R){const T=fld(S,'object');if(T)B['set'](T,S);}}catch(U){f['push']('Arb\x20query\x20failed:\x20'+U['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(x['length']===0x0)return;try{const R=await batchQueryObjectsByIds(x,b,!![]);for(const S of R){const T=fld(S,'object');if(T)C['set'](T,S);}}catch(U){f['push']('Allocation\x20pool\x20query\x20failed:\x20'+U['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const D=new Map(),E=[...new Set(s['map'](R=>fld(y['get'](R),'permission'))['filter'](R=>!!R))],F=new Map();await Promise['all'](E['map'](async R=>{try{const [S,T]=await Promise['all']([batchQueryObjectsByIds([R],b),fetchEntityPermissions(R,b)]),U=S[0x0];F['set'](R,{'address':R,'entity_count':fld(U,'entity_count'),'perm_remark':fld(U,'perm_remark'),'entityPermissions':T,'owner':fld(U,'builder')});}catch(V){f['push']('Permission\x20'+R+'\x20fetch\x20failed:\x20'+V['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const R of s){const S=fld(y['get'](R),'permission');if(S&&F['has'](S))D['set'](R,F['get'](S));}const G=new Map();await Promise['all']([...A['entries']()]['map'](async([T,U])=>{G['set'](T,await fetchAllocatorGuardDefs(fld(U,'order_allocators'),b,f));}));let H=0x0;const I=new Map();try{const T=await watch_conversations({'account':h,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),U=Array['isArray'](T)?T:T?.['conversations']??[];for(const V of U){const W=V?.['peerAddress'],X=typeof V?.['unreadCount']==='number'?V['unreadCount']:0x0;typeof W==='string'&&X>0x0&&(I['set'](W['toLowerCase'](),X),H+=X);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const J=[],K=Date['now']();for(const Y of i){const Z=m['get'](Y['progress']);if(!Z)continue;const a0=Y['order']?q['get'](Y['order']):undefined;!Y['order']&&f['push']('Target\x20progress\x20'+Y['progress']+'\x20carries\x20NO\x20order\x20address\x20—\x20order-holder\x20identity,\x20'+'buyer/customer\x20perspective\x20routing\x20and\x20order-scoped\x20amounts\x20are\x20UNVERIFIED\x20for\x20this\x20'+'target;\x20the\x20participation\x20stance\x20below\x20is\x20downgraded\x20accordingly.\x20Pass\x20the\x20order\x20'+'address\x20to\x20restore\x20full\x20analysis.');const a1=fld(Z,'machine'),a2=fld(Z,'current')??'',a3=fld(Z,'namedOperator')??[],a4={};for(const am of a3){if(am?.['name'])a4[am['name']]=Array['isArray'](am['operators'])?am['operators']:[];}const a5=a0?fld(a0,'service'):undefined,a6=a5?A['get'](a5):undefined;let a7;const a8=a0?fld(a0,'builder'):undefined;if(a0&&a8===h){const an=fld(a0,'dispute')??[];for(const ao of an){const ap=B['get'](ao);if(!ap)continue;const aq=fld(ap,'indemnity');if(aq){a7={'arbitration':fld(ap,'arbitration')??ao,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ao+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a9=isConsequenceNode(a2,'completed'),aa=isConsequenceNode(a2,'refunded'),ab=[];if(a6&&a8===h){if(aa)f['push']('Rewards\x20suppressed\x20for\x20order\x20'+(Y['order']??Y['progress'])+':\x20the\x20order\x20sits\x20on\x20a\x20refund/exception\x20'+('terminal\x20node\x20('+(a2||'unknown')+'),\x20so\x20Service\x20rewards\x20are\x20not\x20advertised\x20as\x20claimable\x20against\x20it.'));else{const ar=fld(a6,'rewards')??[];for(const as of ar){ab['push']({'address':as,'description':'Service\x20reward\x20'+as+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}}let ac=0x0;if(I['size']>0x0){const at=new Set();if(a8)at['add'](a8['toLowerCase']());for(const au of Object['values'](a4)){for(const av of au)at['add'](av['toLowerCase']());}at['delete'](h['toLowerCase']());for(const aw of at){ac+=I['get'](aw)??0x0;}}const ad={'account':h,'progress_address':Y['progress'],'order_address':Y['order'],'current_node':a2,'order_holder':a8,'workflow':a1?z['get'](a1):undefined,'permission':a1?D['get'](a1)??null:null,'named_accounts':a4,'claimable_rewards':ab['length']>0x0?ab:undefined,'pending_compensation':a7,'rating_pending':a9&&a8===h,'review_summary':a['radar_review_summary'],'unread_messages':ac>0x0?ac:undefined,'last_progress_at':fld(Z,'current_time')??undefined,'now':K},ae=analyzeOrderParticipation(ad),af=(fld(a6,'arbitrations')??[])['length']>0x0,ag=a0?fld(a0,'dispute')??[]:[],ah=ag['map'](ax=>B['get'](ax))['filter'](ax=>ax!=null),ai=ah['find'](ax=>{const ay=fld(ax,'status');return ay==null||!isTerminalArbStatus(ay);}),aj=summarizeAllocation(fld(a6,'order_allocators'),h,a5?G['get'](a5)??new Map():new Map()),ak=a0?fld(a0,'allocation'):undefined,al=a0&&ak?C['get'](ak['toLowerCase']()):undefined;try{const ax=buildNodeActionAdvice({'radar':ae,'is_order_holder':a8===h,'order_amount':balanceStr(fld(a0,'amount')),'token_type':balanceToken(fld(a0,'amount')),'compensation_fund':balanceStr(fld(a6,'compensation_fund')),'arbitration_bound':af,'has_dispute':ag['length']>0x0,'dispute_active':ai!=null,'arb_status':ai?fld(ai,'status'):undefined,'rewards_count':(fld(a6,'rewards')??[])['length'],'completed':a9,'refunded':aa,'allocation_pool':al&&ak?{'address':ak,'balance':fld(al,'balance'),'allocators':fld(al,'allocators'),'threshold':fld(al,'threshold'),'payment':fld(al,'payment'),'for_object':fld(al,'payment_info')!==undefined?fld(al,'payment_info')?.['for_object']:fld(al,'for_object')}:undefined,'allocation_summary':aj,'last_progress_at':ad['last_progress_at'],'now':K,'unread_messages':ac>0x0?ac:undefined});ae['interest_analysis']=ax['interest_analysis'],ae['fund_advice']=ax['fund_advice'],ae['advice']={'context':ax['context'],'kernels_run':ax['kernels_run'],'node_game':ax['node_game'],'arb_game':ax['arb_game'],'actions':ax['actions']};for(const ay of ax['advisory_gaps'])f['push'](ay);}catch(az){f['push']('Action\x20advice\x20failed\x20for\x20'+Y['progress']+':\x20'+az['message']+'.');}a0&&ak&&!al&&f['push']('Allocation\x20pool\x20'+ak+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+Y['progress']+'.');if(d&&a0){const aA={'order_id':Y['order'],'service_id':a5??'','current_node':a2||undefined,'created_at':Number(fld(a0,'time')??K)||K,'last_progress_at':fld(Z,'current_time')??undefined,'now':K,'order_amount':((()=>{try{return BigInt(fld(a0,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aB=fld(a6,'compensation_fund');return aB!=null?BigInt(aB):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a6,'type_raw'))),'has_arbitration':(fld(a6,'arbitrations')??[])['length']>0x0,'pending_user_action':ae['operable']['some'](aB=>aB['execution_path']==='order_holder'),'completed':a9,'refunded':aa};try{const aB=monitorOrder({'current':aA,'thresholds':a['radar_monitor_thresholds']});aB['length']>0x0&&(ae['attached_alerts']=aB);}catch(aC){f['push']('Order\x20monitor\x20failed\x20for\x20'+Y['order']+':\x20'+aC['message']+'.');}}J['push'](ae);}const L=aggregateRadar(J,H);return{'action':'participation_radar','account':h,'orders_analyzed':L['orders_analyzed'],'actionable':L['actionable'],'waiting':L['waiting'],'all_pending_claims':L['all_pending_claims'],'unread_messages_total':L['unread_messages_total'],'data_gaps':f,'summary':L['summary']};}
|
|
1
|
+
import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a386a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{buildNodeActionAdvice}from'../../participation/node-action-advisor.js';import{isTerminalArbStatus}from'../../knowledge/arbitration-ledger.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a386a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function allocatorGuardAddresses(b){const c=Array['isArray'](b)?b:Array['isArray'](b?.['allocators'])?b['allocators']:[],d=[];for(const e of c){const f=e?.['guard'];if(typeof f==='string'&&f['startsWith']('0x'))d['push'](f);}return d;}async function fetchAllocatorGuardDefs(a,b,c){const d=new Map(),f=[...new Set(allocatorGuardAddresses(a))];if(f['length']===0x0)return d;try{const h=await batchQueryObjectsByIds(f,b);for(const i of h){const j=fld(i,'object'),k=fld(i,'root');if(j&&k!==undefined&&k!==null){const l=fld(i,'table'),m=Array['isArray'](l)?l['filter'](n=>n!=null&&typeof n==='object')['filter'](n=>typeof n['identifier']==='number')['map'](n=>({'identifier':n['identifier'],'value_type':n['value_type'],'value':n['value'],'name':typeof n['name']==='string'?n['name']:undefined,'b_submission':n['b_submission']===!![]})):undefined;d['set'](j,{'root':k,...m&&m['length']>0x0?{'table':m}:{}});}}}catch(n){c['push']('Allocator\x20guard\x20fetch\x20failed:\x20'+n['message']+'\x20—\x20Signer-recipient\x20payoff\x20stays\x20conservative\x20'+'(unresolved\x20guards\x20cannot\x20clear\x20an\x20RC-FIND-01\x20suspicion).');}return d;}function summarizeAllocation(a,b,c){const d=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(d['length']===0x0)return undefined;let e=0x0,f=0x0,g=0x0,h=0x0;const i=[],j=b['toLowerCase']();for(const k of d){const l=k?.['sharing']??[];for(const n of l){e++;const o=classifyRecipient(n['who']);if(!o)continue;if(o['kind']==='submission')f++;else{if(o['kind']==='signer')h++;else{if(o['kind']==='entity'&&o['address']['toLowerCase']()===j)g++;}}}const m=typeof k?.['guard']==='string'?c['get'](k['guard']):undefined;i['push'](derivePayoffFromSharing(l,'service_order_allocators',m));}return{'recipient_slots':e,'guard_gated_slots':f,'direct_to_me_slots':g,'to_payer_slots':h,'payoffs':i};}export async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??await Config['Instance']()['network_get'](),d=a['radar_include_alerts']??!![],f=[],h=await resolveAddress(a['radar_account'],'radar_account'),i=await Promise['all'](a['radar_targets']['map'](async M=>({'progress':await resolveAddress(M['progress'],'progress'),'order':M['order']?await resolveAddress(M['order'],'order'):undefined}))),j=i['flatMap'](M=>M['order']?[M['progress'],M['order']]:[M['progress']]),k=await batchQueryObjectsByIds(j,b,!![]),l=new Map();for(const M of k){const N=fld(M,'object');if(N)l['set'](N,M);}const m=new Map(),q=new Map();for(const O of i){const P=l['get'](O['progress']);if(!P){f['push']('Progress\x20'+O['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}m['set'](O['progress'],P);if(O['order']){const Q=l['get'](O['order']);if(Q)q['set'](O['order'],Q);else f['push']('Order\x20'+O['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+O['progress']+'.');}}i['length']>0x0&&m['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+i['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const s=[...new Set([...m['values']()]['map'](R=>fld(R,'machine'))['filter'](R=>!!R))],u=[...new Set([...q['values']()]['map'](R=>fld(R,'service'))['filter'](R=>!!R))],w=[...new Set([...q['values']()]['flatMap'](R=>{const S=fld(R,'dispute');return Array['isArray'](S)?S:[];}))],x=[...new Set([...q['values']()]['map'](R=>fld(R,'allocation'))['filter'](R=>!!R&&R['startsWith']('0x')))],y=new Map(),z=new Map(),A=new Map(),B=new Map(),C=new Map();await Promise['all']([...s['map'](async R=>{try{const [S,T]=await Promise['all']([batchQueryObjectsByIds([R],b),fetchMachineNodes(R,b,!![])]);if(S[0x0])y['set'](R,S[0x0]);z['set'](R,toWorkflowSubgraph(T,R));}catch(U){f['push']('Machine\x20'+R+'\x20fetch\x20failed:\x20'+U['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(u['length']===0x0)return;try{const R=await batchQueryObjectsByIds(u,b);for(const S of R){const T=fld(S,'object');if(T)A['set'](T,S);}}catch(U){f['push']('Service\x20query\x20failed:\x20'+U['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(w['length']===0x0)return;try{const R=await batchQueryObjectsByIds(w,b);for(const S of R){const T=fld(S,'object');if(T)B['set'](T,S);}}catch(U){f['push']('Arb\x20query\x20failed:\x20'+U['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(x['length']===0x0)return;try{const R=await batchQueryObjectsByIds(x,b,!![]);for(const S of R){const T=fld(S,'object');if(T)C['set'](T,S);}}catch(U){f['push']('Allocation\x20pool\x20query\x20failed:\x20'+U['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const D=new Map(),E=[...new Set(s['map'](R=>fld(y['get'](R),'permission'))['filter'](R=>!!R))],F=new Map();await Promise['all'](E['map'](async R=>{try{const [S,T]=await Promise['all']([batchQueryObjectsByIds([R],b),fetchEntityPermissions(R,b)]),U=S[0x0];F['set'](R,{'address':R,'entity_count':fld(U,'entity_count'),'perm_remark':fld(U,'perm_remark'),'entityPermissions':T,'owner':fld(U,'builder')});}catch(V){f['push']('Permission\x20'+R+'\x20fetch\x20failed:\x20'+V['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const R of s){const S=fld(y['get'](R),'permission');if(S&&F['has'](S))D['set'](R,F['get'](S));}const G=new Map();await Promise['all']([...A['entries']()]['map'](async([T,U])=>{G['set'](T,await fetchAllocatorGuardDefs(fld(U,'order_allocators'),b,f));}));let H=0x0;const I=new Map();try{const T=await watch_conversations({'account':h,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),U=Array['isArray'](T)?T:T?.['conversations']??[];for(const V of U){const W=V?.['peerAddress'],X=typeof V?.['unreadCount']==='number'?V['unreadCount']:0x0;typeof W==='string'&&X>0x0&&(I['set'](W['toLowerCase'](),X),H+=X);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const J=[],K=Date['now']();for(const Y of i){const Z=m['get'](Y['progress']);if(!Z)continue;const a0=Y['order']?q['get'](Y['order']):undefined;!Y['order']&&f['push']('Target\x20progress\x20'+Y['progress']+'\x20carries\x20NO\x20order\x20address\x20—\x20order-holder\x20identity,\x20'+'buyer/customer\x20perspective\x20routing\x20and\x20order-scoped\x20amounts\x20are\x20UNVERIFIED\x20for\x20this\x20'+'target;\x20the\x20participation\x20stance\x20below\x20is\x20downgraded\x20accordingly.\x20Pass\x20the\x20order\x20'+'address\x20to\x20restore\x20full\x20analysis.');const a1=fld(Z,'machine'),a2=fld(Z,'current')??'',a3=fld(Z,'namedOperator')??[],a4={};for(const am of a3){if(am?.['name'])a4[am['name']]=Array['isArray'](am['operators'])?am['operators']:[];}const a5=a0?fld(a0,'service'):undefined,a6=a5?A['get'](a5):undefined;let a7;const a8=a0?fld(a0,'builder'):undefined;if(a0&&a8===h){const an=fld(a0,'dispute')??[];for(const ao of an){const ap=B['get'](ao);if(!ap)continue;const aq=fld(ap,'indemnity');if(aq){a7={'arbitration':fld(ap,'arbitration')??ao,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ao+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a9=isConsequenceNode(a2,'completed'),aa=isConsequenceNode(a2,'refunded'),ab=[];if(a6&&a8===h){if(aa)f['push']('Rewards\x20suppressed\x20for\x20order\x20'+(Y['order']??Y['progress'])+':\x20the\x20order\x20sits\x20on\x20a\x20refund/exception\x20'+('terminal\x20node\x20('+(a2||'unknown')+'),\x20so\x20Service\x20rewards\x20are\x20not\x20advertised\x20as\x20claimable\x20against\x20it.'));else{const ar=fld(a6,'rewards')??[];for(const as of ar){ab['push']({'address':as,'description':'Service\x20reward\x20'+as+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}}let ac=0x0;if(I['size']>0x0){const at=new Set();if(a8)at['add'](a8['toLowerCase']());for(const au of Object['values'](a4)){for(const av of au)at['add'](av['toLowerCase']());}at['delete'](h['toLowerCase']());for(const aw of at){ac+=I['get'](aw)??0x0;}}const ad={'account':h,'progress_address':Y['progress'],'order_address':Y['order'],'current_node':a2,'order_holder':a8,'workflow':a1?z['get'](a1):undefined,'permission':a1?D['get'](a1)??null:null,'named_accounts':a4,'claimable_rewards':ab['length']>0x0?ab:undefined,'pending_compensation':a7,'rating_pending':a9&&a8===h,'review_summary':a['radar_review_summary'],'unread_messages':ac>0x0?ac:undefined,'last_progress_at':fld(Z,'current_time')??undefined,'now':K},ae=analyzeOrderParticipation(ad),af=(fld(a6,'arbitrations')??[])['length']>0x0,ag=a0?fld(a0,'dispute')??[]:[],ah=ag['map'](ax=>B['get'](ax))['filter'](ax=>ax!=null),ai=ah['find'](ax=>{const ay=fld(ax,'status');return ay==null||!isTerminalArbStatus(ay);}),aj=summarizeAllocation(fld(a6,'order_allocators'),h,a5?G['get'](a5)??new Map():new Map()),ak=a0?fld(a0,'allocation'):undefined,al=a0&&ak?C['get'](ak['toLowerCase']()):undefined;try{const ax=buildNodeActionAdvice({'radar':ae,'is_order_holder':a8===h,'order_amount':balanceStr(fld(a0,'amount')),'token_type':balanceToken(fld(a0,'amount')),'compensation_fund':balanceStr(fld(a6,'compensation_fund')),'arbitration_bound':af,'has_dispute':ag['length']>0x0,'dispute_active':ai!=null,'arb_status':ai?fld(ai,'status'):undefined,'rewards_count':(fld(a6,'rewards')??[])['length'],'completed':a9,'refunded':aa,'allocation_pool':al&&ak?{'address':ak,'balance':fld(al,'balance'),'allocators':fld(al,'allocators'),'threshold':fld(al,'threshold'),'payment':fld(al,'payment'),'for_object':fld(al,'payment_info')!==undefined?fld(al,'payment_info')?.['for_object']:fld(al,'for_object')}:undefined,'allocation_summary':aj,'last_progress_at':ad['last_progress_at'],'now':K,'unread_messages':ac>0x0?ac:undefined});ae['interest_analysis']=ax['interest_analysis'],ae['fund_advice']=ax['fund_advice'],ae['advice']={'context':ax['context'],'kernels_run':ax['kernels_run'],'node_game':ax['node_game'],'arb_game':ax['arb_game'],'actions':ax['actions']};for(const ay of ax['advisory_gaps'])f['push'](ay);}catch(az){f['push']('Action\x20advice\x20failed\x20for\x20'+Y['progress']+':\x20'+az['message']+'.');}a0&&ak&&!al&&f['push']('Allocation\x20pool\x20'+ak+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+Y['progress']+'.');if(d&&a0){const aA={'order_id':Y['order'],'service_id':a5??'','current_node':a2||undefined,'created_at':Number(fld(a0,'time')??K)||K,'last_progress_at':fld(Z,'current_time')??undefined,'now':K,'order_amount':((()=>{try{return BigInt(fld(a0,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aB=fld(a6,'compensation_fund');return aB!=null?BigInt(aB):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a6,'type_raw'))),'has_arbitration':(fld(a6,'arbitrations')??[])['length']>0x0,'pending_user_action':ae['operable']['some'](aB=>aB['execution_path']==='order_holder'),'completed':a9,'refunded':aa};try{const aB=monitorOrder({'current':aA,'thresholds':a['radar_monitor_thresholds']});aB['length']>0x0&&(ae['attached_alerts']=aB);}catch(aC){f['push']('Order\x20monitor\x20failed\x20for\x20'+Y['order']+':\x20'+aC['message']+'.');}}J['push'](ae);}const L=aggregateRadar(J,H);return{'action':'participation_radar','account':h,'orders_analyzed':L['orders_analyzed'],'actionable':L['actionable'],'waiting':L['waiting'],'all_pending_claims':L['all_pending_claims'],'unread_messages_total':L['unread_messages_total'],'data_gaps':f,'summary':L['summary']};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config}from'@wowok/wowok/w/local';import{resolveAddress as
|
|
1
|
+
import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a389a}from'../../tools/handlers/name-resolution.js';import{deriveRelationshipProfile}from'../../relationship/index.js';import{analyzeDemanderInterest}from'../../participation/demander-interest.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{SdkDataPlane,expandTopology,projectRelationshipFacts}from'../../graph/onchain/index.js';export async function resolveAddress(a,b){return a389a(a,b);}export async function handleRelationshipProfile(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const b=a['context_network']??await Config['Instance']()['network_get'](),c=await resolveAddress(a['radar_account'],'radar_account'),d=new SdkDataPlane(b),e=await expandTopology(d,{'network':b,'seed':c,'budget':{'maxDepth':0x4,'maxNodes':0x384,'maxRpcs':0xa0,'perKindCaps':{'eoa.permission':0x19,'permission.core_binding':0x3c,'permission.tx_binding':0x3c,'eoa.order':0x28,'service.order':0x28,'order.allocation':0x28,'demand.presenter':0x3c,'machine.node':0x78}},'edges':{'tableEdges':['permission.entity','demand.presenter','machine.node']}}),f=[...e['gaps']];for(const z of e['truncations']){f['push']('truncated\x20'+z['schema']+'\x20at\x20'+z['nodeId']+':\x20observed\x20at\x20least\x20'+z['observed']+'\x20edge(s)');}if(e['budgetExhausted']['rpcs'])f['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(see\x20budget\x20settings).');if(e['budgetExhausted']['nodes'])f['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial.');const g=projectRelationshipFacts(e,c),{machines:h,orders:i,demands:j,allocations:k,contacts:l,arbitrations:m}={'machines':g['machines']??[],'orders':g['orders']??[],'demands':g['demands']??[],'allocations':g['allocations']??[],'contacts':g['contacts']??[],'arbitrations':g['arbitrations']??[]},n=deriveRelationshipProfile(g),o=new Set();if(k['length']>0x0)o['add']('Allocation');if(j['length']>0x0)o['add']('Demand');if(h['some'](A=>(A['forwards']??[])['some'](B=>B['guard'])))o['add']('MachineForward');if(m['length']>0x0)o['add']('Arbitration');for(const A of o){const B=GUARD_BINDING_REGISTRY['filter'](D=>D['object']===A);if(B['length']===0x0)continue;const C=B['map'](D=>{const E=D['preset_kind']==='amount'&&D['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+D['slot']+E+'\x20['+D['preset_kind']+']\x20—\x20creator:\x20'+D['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+D['user'];})['join']('\x20|\x20');n['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+A+'(s)\x20in\x20this\x20topology:\x20'+C+'.');}k['length']>0x0&&n['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);m['some'](D=>D['object_kind']==='service')&&f['push']('Arbitration\x20service\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration\x20services\x20contribute\x20binding\x20presence\x20only\x20(Arb\x20CASE\x20votes\x20ARE\x20parsed\x20into\x20arbitration_delegation/dispute_resolution\x20edges).');const p=['Permission'];if(i['length']>0x0)p['push']('Order');if(h['length']>0x0)p['push']('Machine','Progress');if(k['length']>0x0)p['push']('Allocation','Payment');if(j['length']>0x0)p['push']('Demand');if(m['length']>0x0)p['push']('Arbitration','Arb');if(l['length']>0x0)p['push']('Contact');if(Object['keys'](g['service_owners']??{})['length']>0x0)p['push']('Service','Guard');const q=detectBridgesForObjects(p);if(q['length']>0x0){const D=q['slice'](0x0,0x8)['map'](E=>summarizeBridge(E))['join']('\x0a-\x20');n['notes']['push']('Scenario\x20topology\x20('+q['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20'+('\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+D));}const r=a['relation_kinds']?new Set(a['relation_kinds']):undefined,s=r?n['edges']['filter'](E=>r['has'](E['kind'])):n['edges'],u=s['reduce']((E,F)=>{return E[F['kind']]=(E[F['kind']]??0x0)+0x1,E;},{});let w=c+'\x20holds\x20'+s['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](n['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](u)['length']>0x0?':\x20'+Object['entries'](u)['map'](([E,F])=>E+'×'+F)['join'](',\x20')+'.':'.');s['length']===0x0&&f['length']>0x0&&(w+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const x=(E,F)=>E['toLowerCase']()===F['toLowerCase'](),y=j['filter'](E=>E['owner']&&x(E['owner'],c))['map'](E=>({'demand':E['address'],...analyzeDemanderInterest({'account':c,'demand':E['address'],'presenters':E['presenters']??[],'rewards':(E['rewards']??[])['map'](F=>({'address':F})),'guards':E['guards']??[],'open':!(E['presenters']??[])['some'](F=>F['acceptance_score']!==undefined)})}));return y['length']>0x0&&(w+='\x20Anchor\x20demands\x20'+y['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':c,'edges':s,'by_counterparty':n['by_counterparty'],'notes':n['notes'],'data_gaps':f,'summary':w,...y['length']>0x0?{'demander_interest':y}:{}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config,LocalMark,query_serviceContext,query_object_last_updated,query_affiliations,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{resolveAddress as a389a}from'../../tools/handlers/name-resolution.js';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{batchQueryObjectsByIds,fetchServiceOrders,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{computeFundListingWall}from'../../graph/onchain/facts.js';import{projectExploration}from'../../graph/onchain/exploration.js';import{buildMachineGraph}from'./machine-nodes.js';import{formatMoneyAnnotation}from'./facet-money.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function ownerAddr(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let h=d??await Config['Instance']()['network_get']();const j=[];let k=await a389a(c,'service'),l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h});if(!l?.['service']&&d){const ac=await Config['Instance']()['network_get']();ac&&ac!==h&&(h=ac,l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h}));}const m=l['service'];k=m['object']??k;const q=new Set(),w=ad=>{if(ad)q['add'](ad);};w(k),w(m['machine']),w(m['permission']),w(m['um']);for(const ad of m['arbitrations']??[])w(ad);for(const ae of m['rewards']??[])w(ae);for(const af of m['repositories']??[])w(af);const x=l['permission'];if(x){const ag=Array['isArray'](x['admin'])?x['admin']:[];ag[0x0]&&w(typeof ag[0x0]==='string'?ag[0x0]:ag[0x0]?.['account']);if(x['builder'])w(x['builder']);}const y=await markOfMany([...q]),z=y['get'](k)??{'name':null,'tags':[],'updated_at_ms':null},A=z['name'],B=ah=>ah?y['get'](ah)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let C=null;const D=l['machine'],E=l['machine_nodes']??[];if(D||E['length']>0x0){const {nodes:ah,edges:ai}=buildMachineGraph(E);C={'address':D?.['object']??m['machine']??'','name':B(D?.['object']??m['machine'])['name'],'description':D?.['description']??null,'published':typeof D?.['bPublished']==='boolean'?D['bPublished']:null,'paused':typeof D?.['bPaused']==='boolean'?D['bPaused']:null,'node_count':typeof D?.['node_count']==='number'?D['node_count']:null,'consensus_repositories':Array['isArray'](D?.['consensus_repositories'])?D['consensus_repositories']:[],'nodes':ah,'edges':ai};}let F=null;try{const aj=await query_object_last_updated({'object':k,'network':h});aj?.['timestamp_ms']&&(F={'timestamp_ms':aj['timestamp_ms'],'digest':aj['digest']??null,'sender':aj['sender']??null});}catch{j['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let G=null;try{G=await resolveSupplyChainGraph(k,h);}catch{j['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let H=null,I=[];const J=m?.['type_raw']??m?.['type']??'',K=J['match'](/<(.+)>$/),L=K?K[0x1]:null,M=(ak,al)=>{const am=[];return ak?am['push']('Pricing\x20&\x20settlement\x20coin:\x20'+ak+'\x20—\x20the\x20Service\x27s\x20generic\x20T,\x20FIXED\x20at\x20creation\x20(immutable).\x20Sales\x20prices\x20and\x20order\x20amounts\x20are\x20denominated\x20in\x20this\x20exact\x20token;\x20buyers\x20must\x20hold\x20it\x20to\x20order.'):am['push']('Pricing\x20&\x20settlement\x20coin:\x20unavailable\x20from\x20the\x20Service\x20type\x20(no\x20generic\x20found)\x20—\x20treat\x20amounts\x20as\x20raw\x20smallest\x20units.'),am['push']('To\x20price\x20in\x20a\x20different\x20token,\x20publish\x20a\x20NEW\x20Service\x20with\x20type_parameter\x20set\x20to\x20that\x20token\x27s\x20full\x20type\x20—\x20this\x20one\x20keeps\x20settling\x20in\x20its\x20coin.'),/testnet/i['test'](al)?am['push']('Testnet\x20has\x20ONLY\x20WOW\x20(no\x20stablecoins\x20are\x20bridged)\x20—\x20testnet\x20services\x20stay\x20WOW-denominated;\x20multi-token\x20pricing\x20is\x20a\x20mainnet\x20capability.'):am['push']('Mainnet\x20accepts\x20bridged\x20tokens\x20(USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20WBTC\x20/\x20WOW):\x20buyers\x20bridge\x20them\x20from\x20Ethereum\x20via\x20the\x20cross-chain\x20bridge.\x20Query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag\x20(wowTypeTag)\x20to\x20use\x20in\x20type_parameter\x20when\x20publishing.'),am['join']('\x20');},N=ak=>formatMoneyAnnotation(ak,L,h),O=0x3,P=0x32;let Q=null;try{const ak=await fetchServiceOrders(k,h,!![]),al=Array['isArray'](ak?.['items'])?ak['items']:[],am=al['slice'](-P),an=al['slice'](-O),ao=am['map'](aM=>typeof aM?.['who']==='string'?aM['who']:'')['filter'](aM=>aM!==''),ap=an['map'](aM=>typeof aM?.['who']==='string'?aM['who']:'')['filter'](aM=>aM!==''),aq=new Map();try{if(ao['length']>0x0){const aM=await batchQueryObjectsByIds(ao,h,!![]);for(const aN of aM){aN&&aN['type']===ObjectType['Order']&&aq['set'](aN['object'],aN);}}}catch{j['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const ar=new Map();try{const aO=new Set();for(const aP of aq['values']()){if(aP?.['allocation'])aO['add'](aP['allocation']);}if(aO['size']>0x0){const aQ=await batchQueryObjectsByIds(Array['from'](aO),h,!![]);for(const aR of aQ){if(!aR?.['object'])continue;if(aR['type']===ObjectType['Allocation']){const aS=Number(aR?.['balance']??0x0);ar['set'](aR['object'],Number['isFinite'](aS)&&aS===0x0?'allocated':'pending');}}}}catch{j['push']('recent_orders:\x20allocation\x20details\x20unavailable\x20(non-blocking)');}const as=new Map(),at=new Map();try{const aT=new Set();for(const aU of ap){const aV=aq['get'](aU);if(aV?.['progress'])aT['add'](aV['progress']);}if(aT['size']>0x0){const aW=await batchQueryObjectsByIds(Array['from'](aT),h,!![]);for(const aX of aW){if(!aX?.['object'])continue;if(aX['type']===ObjectType['Progress']){const aY=aX?.['current'];as['set'](aX['object'],typeof aY==='string'&&aY!==''?aY:null),at['set'](aX['object'],Number(aX?.['current_time'])||null);}}}}catch{j['push']('recent_orders:\x20progress\x20details\x20unavailable\x20(non-blocking)');}I=Array['from'](aq['values']())['map'](aZ=>({'id':aZ['object'],'created_at_ms':Number(aZ['time'])||undefined,'claimed_by':aZ['claimed_by']??null,'current_node':aZ['progress']?as['get'](aZ['progress'])??null:null}));const au=new Map();try{const aZ=ap,b0=await Promise['allSettled'](aZ['map'](b1=>query_object_last_updated({'object':b1,'network':h})));for(let b1=0x0;b1<aZ['length'];b1++){const b2=b0[b1];au['set'](aZ[b1],b2['status']==='fulfilled'&&b2['value']?.['timestamp_ms']?Number(b2['value']['timestamp_ms'])||null:null);}}catch{j['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const av=await Promise['all'](an['map'](async b3=>{const b4=typeof b3?.['who']==='string'?b3['who']:'',b5=aq['get'](b4),b6=b5?.['amount']!==null&&b5?.['amount']!==undefined?String(b5['amount']):'',b7=await N(b6);return{'order':b4,'time':typeof b3?.['time']==='number'?b3['time']:0x0,'updated_ms':au['get'](b4)??null,'amount':b6,'amount_display':b7['display'],'amount_tip':b7['tip'],'progress':b5?.['progress']??null,'allocation':b5?.['allocation']??null,'disputes':Array['isArray'](b5?.['dispute'])?b5['dispute']:[],'agent':Array['isArray'](b5?.['agent'])?b5['agent']:[],'owner':ownerAddr(b5?.['builder']??b5?.['owner']),'claimed_by':b5?.['claimed_by']??null,'required_info':b5?.['required_info']??null,'progress_next':b5?.['progress']?as['get'](b5['progress'])??null:null,'progress_since':b5?.['progress']?at['get'](b5['progress'])??null:null,'allocation_state':b5?.['allocation']?ar['get'](b5['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](b5?.['items'])?b5['items']:[])['map'](async b8=>({'name':String(b8?.['name']??''),'price_display':(await N(b8?.['price']!==null&&b8?.['price']!==undefined?String(b8['price']):null))['display'],'quantity':String(b8?.['quantity']??'0'),'wip_hash':String(b8?.['wip_hash']??'')})))};})),aw=av['filter'](b3=>b3['order']!==''),ax=ao['map'](b3=>aq['get'](b3))['filter'](b3=>!!b3);let ay=0x0n,az=0x0,aA=0x0,aB=0x0,aC=0x0,aD=0x0,aE=null,aF=null;for(const b3 of ax){const b4=b3?.['amount']!==null&&b3?.['amount']!==undefined?String(b3['amount']):'';/^\d+$/['test'](b4)&&(ay+=BigInt(b4),az++);if(Array['isArray'](b3?.['dispute'])&&b3['dispute']['length']>0x0)aA++;const b5=b3?.['allocation']?ar['get'](b3['allocation'])??'pending':'none';if(b5==='pending')aB++;else{if(b5==='allocated')aC++;else aD++;}}for(const b6 of am){if(typeof b6?.['time']==='number'){if(aE===null||b6['time']<aE)aE=b6['time'];if(aF===null||b6['time']>aF)aF=b6['time'];}}const aG=az>0x0?ay['toString']():null,aH=aG!==null?await N(aG):null,aI=al['length'],aJ=ak?.['ring_saturated']??ringWindowSaturated(aI),aK=aw['length'],aL='Analyze\x20ALL\x20orders\x20of\x20Service\x20'+k+'\x20('+h+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20orders\x20live\x20in\x20the\x20Service\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+aI+(aJ?',\x20saturated':'')+').\x20')+'For\x20each\x20order\x20call\x20object_panorama\x20with\x20the\x20order\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20order:\x20'+'order\x20address\x20chip\x20(first\x20column)\x20|\x20created\x20+\x20last-updated\x20(local\x20dates)\x20|\x20amount\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20fund\x20state\x20(none\x20/\x20pending\x20/\x20allocated)\x20|\x20current\x20machine\x20node\x20|\x20disputes\x20(each\x20dispute\x20case\x20as\x20its\x20own\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20—\x20an\x20order\x27s\x20progress,\x20allocation\x20and\x20arb\x20cases\x20are\x20its\x20children\x20and\x20are\x20never\x20split\x20into\x20a\x20separate\x20flat\x20list)\x20|\x20buyer\x20address\x20chip.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(amount\x20distribution,\x20stuck\x20or\x20paused\x20orders,\x20dispute\x20rate).\x20Orders\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Service\x20itself.';Q={'count':aI,'window_saturated':aJ,'preview_truncated':aI>aK,'stats':{'scope_count':ax['length'],'scoped':ax['length']<aI,'amount_sum_raw':aG,'amount_sum_display':aH?.['display']??null,'amount_sum_tip':aH?.['tip']??null,'amount_known_count':az,'disputed_order_count':aA,'allocation_pending_count':aB,'allocation_allocated_count':aC,'allocation_none_count':aD,'first_created_ms':aE,'last_created_ms':aF},...aI>aK?{'drilldown':{'total_count':aI,'analyzed_count':aK,'stats_scope_count':ax['length'],'prompt':aL},'order_addresses':ax['map'](b7=>b7['object'])}:{},'items':aw};}catch{j['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}try{const b7=[m,l['machine'],l['buy_guard'],...l['allocator_guards']??[]]['filter'](Boolean);H=generateBusinessReport({'objects':b7,'machine_nodes':E['map'](b8=>({'name':b8['name']})),'machine_edges':C?.['edges']?C['edges']['map'](b8=>({'from':b8['from'],'to':b8['to']})):undefined,'orders':I['length']>0x0?I:undefined,'now_ms':Date['now']()});}catch{j['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const R=[];try{const b8=await query_affiliations({'address':k,'no_cache':!![],'network':h}),b9=new Set(),ba=new Map();for(const bc of b8?.['entries']??[]){const bd=typeof bc?.['who']==='string'?bc['who']:'';if(!bd||b9['has'](bd))continue;b9['add'](bd);const be=objectTypeFromAddress(bd);if(!be)continue;if(be===ObjectType['Order'])continue;const bf=String(be);let bg=ba['get'](bf);!bg&&(bg=[],ba['set'](bf,bg)),bg['push']({'address':bd,'type_label':bf,'name':B(bd)['name'],'time':typeof bc?.['time']==='number'?bc['time']:null,'via':typeof bc?.['table']==='string'?bc['table']:null});}const bb=['Progress','Allocation','Payment','Guard'];for(const bh of bb){const bi=ba['get'](bh);bi&&bi['length']>0x0&&(R['push']({'type_label':bh,'items':bi}),ba['delete'](bh));}for(const [bj,bk]of ba){if(bk['length']>0x0)R['push']({'type_label':bj,'items':bk});}}catch{j['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const S=new Set(),T=bl=>{typeof bl==='string'&&/^0x[0-9a-fA-F]{40,64}$/['test'](bl)&&S['add'](bl['toLowerCase']());};T(m['buy_guard']);for(const bl of E){for(const bm of bl?.['pairs']??[]){for(const bn of bm?.['forwards']??[])T(bn?.['guard']);}}for(const bo of m['order_allocators']?.['allocators']??[])T(bo?.['guard']);for(const bp of l['allocator_guards']??[])T(bp?.['object']);for(const bq of Object['values'](l['referenced']??{})){const br=bq;if(!br||typeof br!=='object')continue;if(br['type']===ObjectType['Reward']){for(const bs of br['guards']??[])T(bs?.['guard']);}if(br['type']===ObjectType['Treasury']){for(const bt of br['external_withdraw_guard']??[])T(bt?.['guard']);for(const bu of br['external_deposit_guard']??[])T(bu?.['guard']);}(br['type']===ObjectType['Arbitration']||br['type']===ObjectType['Arb'])&&T(br['voting_guard']);}const U=R['find'](bv=>bv['type_label']===String(ObjectType['Guard']));if(U){U['items']=U['items']['filter'](bv=>!S['has'](bv['address']['toLowerCase']()));if(U['items']['length']===0x0)R['splice'](R['indexOf'](U),0x1);else{const bv=U['items'];try{const bw=await batchQueryObjectsByIds(bv['map'](by=>by['address']),h,!![]),bx=new Map();for(const by of bw){if(by?.['object'])bx['set'](String(by['object'])['toLowerCase'](),by);}for(const bz of bv){const bA=bx['get'](bz['address']['toLowerCase']());if(!bA){bz['explanation']=null;continue;}const bB=Array['isArray'](bA['table'])?bA['table']:[],bC=[];let bD=0x0;for(const bF of bB){if(bF?.['b_submission']===!![]){bD++;continue;}bF?.['value_type']==='Address'&&typeof bF?.['value']==='string'&&bF['value']['startsWith']('0x')&&bC['push'](bF['value']);}const bE=bC['some'](bG=>bG['toLowerCase']()===k['toLowerCase']());bz['explanation']={'description':typeof bA['description']==='string'?bA['description']:null,'table_refs':bC,'references_this_service':bE,'submission_slots':bD,'note':bE?'One-off\x20verification\x20guard:\x20NOT\x20mounted\x20on\x20any\x20host\x20field;\x20its\x20table\x20carries\x20this\x20Service\x20as\x20an\x20on-chain\x20constant\x20(the\x20affiliation\x20is\x20written\x20at\x20creation).\x20It\x20acts\x20only\x20when\x20submitted\x20inside\x20a\x20passport\x20at\x20runtime.':'Guard\x20surfaced\x20by\x20the\x20affiliation\x20window\x20only;\x20not\x20mounted\x20on\x20any\x20host\x20field\x20reachable\x20from\x20this\x20panorama.\x20It\x20acts\x20only\x20when\x20referenced\x20at\x20runtime\x20(passport\x20submission\x20or\x20a\x20host\x20outside\x20this\x20view).'};}}catch{j['push']('related:\x20unbound-guard\x20explanation\x20unavailable\x20(non-blocking)');}}}const V=new Map();for(const bG of l['allocator_guards']??[]){const bH=bG;if(bH?.['object'])V['set'](String(bH['object'])['toLowerCase'](),bH);}const W=[];for(const bI of Array['isArray'](m['sales'])?m['sales']:[]){const bJ=balanceStr(bI?.['price']),bK=await N(bJ);W['push']({'name':typeof bI?.['name']==='string'?bI['name']:'','price':bJ,'price_display':bK['display'],'price_tip':bK['tip'],'stock':balanceStr(bI?.['stock']),'suspension':bI?.['suspension']===!![],'wip':typeof bI?.['wip']==='string'?bI['wip']:'','wip_hash':typeof bI?.['wip_hash']==='string'?bI['wip_hash']:''});}const X=bL=>bL===0x0?'amount':bL===0x2?'surplus':'rate',Y=bL=>{const bM=bL?.['who'];if(bM&&typeof bM==='object'&&'Entity'in bM){const bN=bM['Entity'],bO=typeof bN==='string'?bN:typeof bN?.['name_or_address']==='string'?bN['name_or_address']:null;return{'who':bO?'Entity\x20'+bO:'Entity','entity':bO&&/^0x[0-9a-fA-F]{6,64}$/['test'](bO)?bO:null,'mode':X(bL?.['mode']),'value':balanceStr(bL?.['sharing'])};}if(bM&&typeof bM==='object'&&'GuardIdentifier'in bM)return{'who':'Guard\x20identifier\x20#'+bM['GuardIdentifier'],'entity':null,'mode':X(bL?.['mode']),'value':balanceStr(bL?.['sharing'])};return{'who':'Signer','entity':null,'mode':X(bL?.['mode']),'value':balanceStr(bL?.['sharing'])};},Z=m['order_allocators']?{'description':m['order_allocators']['description']??'','threshold':balanceStr(m['order_allocators']['threshold']),'allocators':(m['order_allocators']['allocators']??[])['map'](bL=>({'guard':bL['guard'],'sharing_count':Array['isArray'](bL['sharing'])?bL['sharing']['length']:0x0,'sharing':(Array['isArray'](bL['sharing'])?bL['sharing']:[])['map'](Y),'max':balanceStr(bL['max']??null),'guard_summary':summarizeGuard(V['get'](String(bL['guard']??'')['toLowerCase']()))}))}:null,a0=[];{const bL=new Map();for(const bM of m['order_allocators']?.['allocators']??[]){for(const bN of Array['isArray'](bM['sharing'])?bM['sharing']:[]){const bO=Y(bN);if(bO['entity']){const bP=bO['entity']['toLowerCase'](),bQ=bL['get'](bP)??{'raw':bO['entity'],'guards':[]};bQ['guards']['push'](bM['guard']??''),bL['set'](bP,bQ);}}}if(bL['size']>0x0)try{const bR=await batchQueryObjectsByIds([...bL['keys']()],h,!![]),bS=new Map();for(const bT of bR){if(bT?.['object'])bS['set'](String(bT['object'])['toLowerCase'](),bT);}for(const [bU,bV]of bL){const bW=bS['get'](bU),bX='order_allocators\x20sharing\x20of\x20allocator\x20guard\x20'+bV['guards'][0x0];if(bW&&bW['permission']!==undefined){const bY=balanceStr(bW['balance']),bZ=await N(bY);a0['push']({'address':String(bW['object']),'kind':'treasury','description':typeof bW['description']==='string'?bW['description']:null,'permission':typeof bW['permission']==='string'?bW['permission']:null,'balance':bY,'balance_display':bZ['display'],'balance_tip':bZ['tip'],'external_deposit_guard_count':Array['isArray'](bW['external_deposit_guard'])?bW['external_deposit_guard']['length']:null,'external_withdraw_guard_count':Array['isArray'](bW['external_withdraw_guard'])?bW['external_withdraw_guard']['length']:null,'via':bX});}else a0['push']({'address':bV['raw'],'kind':'account','description':null,'permission':null,'balance':null,'balance_display':null,'balance_tip':null,'external_deposit_guard_count':null,'external_withdraw_guard_count':null,'via':bX});}}catch{j['push']('income_recipients:\x20Sharing\x20entity\x20read\x20failed\x20(non-blocking)');}}const a1=summarizePermission(l['permission'],B(m['permission'])),a2=a1?.['owner']??F?.['sender']??null,a3=a2?await markOf(a2):null,a4=await N(balanceStr(m['compensation_fund'])),a5=balanceStr(m['compensation_fund']),a6=/^\d+$/['test'](a5?.['trim']()??'')?BigInt(a5['trim']()):null,a7=a6===null?null:(a6/0x3n)['toString'](),a8=a7===null?null:await N(a7),a9=a6===null?null:a6===0x0n?'No\x20compensation\x20fund:\x20this\x20Service\x20carries\x20NO\x20payout\x20protection\x20—\x20a\x20won\x20arbitration\x20award\x20cannot\x20be\x20paid\x20(the\x20claim\x20aborts,\x20code\x2027).\x20Running\x20without\x20a\x20fund\x20is\x20a\x20legitimate\x20merchant\x20choice,\x20but\x20it\x20is\x20one\x20a\x20buyer\x20should\x20see\x20before\x20ordering.':'Orders\x20at\x20or\x20under\x20this\x20cap\x20are\x20fully\x20protected\x20(award\x20ceiling\x203x\x20order).\x20Above\x20the\x20cap\x20there\x20is\x20NO\x20partial\x20payout\x20—\x20settlement\x20is\x20all-or-nothing\x20and\x20the\x20claim\x20aborts\x20(code\x2027)\x20until\x20the\x20fund\x20covers\x20the\x20award;\x20the\x20order\x20itself\x20is\x20unaffected.';let aa=null;if(a6!==null&&a6>0x0n){const c0=W['filter'](c4=>!c4['suspension']&&/^\d+$/['test'](c4['price']?.['trim']()??''))['map'](c4=>({'name':c4['name'],'price':BigInt(c4['price']['trim']())})),c1=computeFundListingWall(a6,c0),c2=await Promise['all'](c1['blocked']['map'](async c4=>({'name':c4['name'],'price':c4['price']['toString'](),'price_display':(await N(c4['price']['toString']()))['display']}))),c3=c2['length']===0x0?null:'The\x20fund\x20currently\x20backs\x20orders\x20up\x20to\x20'+(a8?.['display']??a7)+'.\x20'+((c2['length']===0x1?'1\x20listing\x20is':c2['length']+'\x20listings\x20are')+'\x20priced\x20above\x20that\x20and\x20cannot\x20be\x20checked\x20out\x20—\x20the\x20buy\x20gate\x20refuses\x20the\x20order\x20(no\x20money\x20moves)\x20because\x20the\x20fund\x20cannot\x20back\x20its\x20maximum\x20award.\x20')+'The\x20highest-priced\x20listing\x20is\x20blocked\x20first;\x20top\x20the\x20fund\x20above\x203x\x20a\x20listing\x27s\x20price\x20(service.compensation_fund_add)\x20or\x20cut\x20the\x20price\x20to\x20restore\x20it.\x20'+'This\x20recomputes\x20on\x20every\x20read:\x20after\x20every\x20award\x20that\x20spends\x20the\x20fund,\x20re-check\x20your\x20top\x20listing.';aa={'blocked':c2,'note':c3};}const ab=projectExploration([],{'truncations':[],'budgetExhausted':{},'dataGaps':j});return{'action':'service_panorama','network':h,'service':{'address':k,'name':A,'description':m['description']??'','location':m['location']??'','published':m['bPublished']===!![],'paused':m['bPaused']===!![],'paused_time':typeof m['paused_time']==='number'?m['paused_time']:typeof m['paused_time']==='string'&&/^\d+$/['test'](m['paused_time'])?Number(m['paused_time']):null,'setting_lock_duration':balanceStr(m['setting_lock_duration']),'customer_required':Array['isArray'](m['customer_required'])?m['customer_required']:[],'compensation_fund':balanceStr(m['compensation_fund']),'compensation_fund_display':a4['display'],'compensation_fund_tip':a4['tip'],'compensation_fund_cover_cap':a7,'compensation_fund_cover_cap_display':a8?.['display']??null,'compensation_fund_cover_cap_note':a9,'compensation_fund_listing_wall':aa,'sales':W,'machine':m['machine']??null,'buy_guard':m['buy_guard']??null,'permission':m['permission']??'','um':m['um']??null,'arbitrations':Array['isArray'](m['arbitrations'])?m['arbitrations']:[],'rewards':Array['isArray'](m['rewards'])?m['rewards']:[],'repositories':Array['isArray'](m['repositories'])?m['repositories']:[],'order_allocators':Z,'income_recipients':a0,'payment_token':{'coin_type':L,'guidance':M(L,h)},'onchain_last_updated':F,'tags':z['tags']??[],'owner':a2,'owner_name':a3?.['name']??null},'machine_graph':C,'buy_guard':summarizeGuard(l['buy_guard']),'permission':a1,'related':{'groups':R},'supply_chain':G,'business_report':H,'recent_orders':Q,'data_gaps':j,...ab['open_questions']['length']>0x0?{'exploration':ab}:{}};}
|
|
1
|
+
import{Config,LocalMark,query_serviceContext,query_object_last_updated,query_affiliations,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{resolveAddress as a394a}from'../../tools/handlers/name-resolution.js';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{batchQueryObjectsByIds,fetchServiceOrders,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{computeFundListingWall}from'../../graph/onchain/facts.js';import{classifyFundWaterLevelUnits,fundWaterReminder}from'../../knowledge/fund-layer.js';import{projectExploration}from'../../graph/onchain/exploration.js';import{buildMachineGraph}from'./machine-nodes.js';import{formatMoneyAnnotation}from'./facet-money.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function ownerAddr(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let h=d??await Config['Instance']()['network_get']();const j=[];let k=await a394a(c,'service'),l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h});if(!l?.['service']&&d){const ac=await Config['Instance']()['network_get']();ac&&ac!==h&&(h=ac,l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h}));}const m=l['service'];k=m['object']??k;const q=new Set(),w=ad=>{if(ad)q['add'](ad);};w(k),w(m['machine']),w(m['permission']),w(m['um']);for(const ad of m['arbitrations']??[])w(ad);for(const ae of m['rewards']??[])w(ae);for(const af of m['repositories']??[])w(af);const x=l['permission'];if(x){const ag=Array['isArray'](x['admin'])?x['admin']:[];ag[0x0]&&w(typeof ag[0x0]==='string'?ag[0x0]:ag[0x0]?.['account']);if(x['builder'])w(x['builder']);}const y=await markOfMany([...q]),z=y['get'](k)??{'name':null,'tags':[],'updated_at_ms':null},A=z['name'],B=ah=>ah?y['get'](ah)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let C=null;const D=l['machine'],E=l['machine_nodes']??[];if(D||E['length']>0x0){const {nodes:ah,edges:ai}=buildMachineGraph(E);C={'address':D?.['object']??m['machine']??'','name':B(D?.['object']??m['machine'])['name'],'description':D?.['description']??null,'published':typeof D?.['bPublished']==='boolean'?D['bPublished']:null,'paused':typeof D?.['bPaused']==='boolean'?D['bPaused']:null,'node_count':typeof D?.['node_count']==='number'?D['node_count']:null,'consensus_repositories':Array['isArray'](D?.['consensus_repositories'])?D['consensus_repositories']:[],'nodes':ah,'edges':ai};}let F=null;try{const aj=await query_object_last_updated({'object':k,'network':h});aj?.['timestamp_ms']&&(F={'timestamp_ms':aj['timestamp_ms'],'digest':aj['digest']??null,'sender':aj['sender']??null});}catch{j['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let G=null;try{G=await resolveSupplyChainGraph(k,h);}catch{j['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let H=null,I=[];const J=m?.['type_raw']??m?.['type']??'',K=J['match'](/<(.+)>$/),L=K?K[0x1]:null,M=(ak,al)=>{const am=[];return ak?am['push']('Pricing\x20&\x20settlement\x20coin:\x20'+ak+'\x20—\x20the\x20Service\x27s\x20generic\x20T,\x20FIXED\x20at\x20creation\x20(immutable).\x20Sales\x20prices\x20and\x20order\x20amounts\x20are\x20denominated\x20in\x20this\x20exact\x20token;\x20buyers\x20must\x20hold\x20it\x20to\x20order.'):am['push']('Pricing\x20&\x20settlement\x20coin:\x20unavailable\x20from\x20the\x20Service\x20type\x20(no\x20generic\x20found)\x20—\x20treat\x20amounts\x20as\x20raw\x20smallest\x20units.'),am['push']('To\x20price\x20in\x20a\x20different\x20token,\x20publish\x20a\x20NEW\x20Service\x20with\x20type_parameter\x20set\x20to\x20that\x20token\x27s\x20full\x20type\x20—\x20this\x20one\x20keeps\x20settling\x20in\x20its\x20coin.'),/testnet/i['test'](al)?am['push']('Testnet\x20has\x20ONLY\x20WOW\x20(no\x20stablecoins\x20are\x20bridged)\x20—\x20testnet\x20services\x20stay\x20WOW-denominated;\x20multi-token\x20pricing\x20is\x20a\x20mainnet\x20capability.'):am['push']('Mainnet\x20accepts\x20bridged\x20tokens\x20(USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20WBTC\x20/\x20WOW):\x20buyers\x20bridge\x20them\x20from\x20Ethereum\x20via\x20the\x20cross-chain\x20bridge.\x20Query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag\x20(wowTypeTag)\x20to\x20use\x20in\x20type_parameter\x20when\x20publishing.'),am['join']('\x20');},N=ak=>formatMoneyAnnotation(ak,L,h),O=0x3,P=0x32;let Q=null;try{const ak=await fetchServiceOrders(k,h,!![]),al=Array['isArray'](ak?.['items'])?ak['items']:[],am=al['slice'](-P),an=al['slice'](-O),ao=am['map'](aM=>typeof aM?.['who']==='string'?aM['who']:'')['filter'](aM=>aM!==''),ap=an['map'](aM=>typeof aM?.['who']==='string'?aM['who']:'')['filter'](aM=>aM!==''),aq=new Map();try{if(ao['length']>0x0){const aM=await batchQueryObjectsByIds(ao,h,!![]);for(const aN of aM){aN&&aN['type']===ObjectType['Order']&&aq['set'](aN['object'],aN);}}}catch{j['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const ar=new Map();try{const aO=new Set();for(const aP of aq['values']()){if(aP?.['allocation'])aO['add'](aP['allocation']);}if(aO['size']>0x0){const aQ=await batchQueryObjectsByIds(Array['from'](aO),h,!![]);for(const aR of aQ){if(!aR?.['object'])continue;if(aR['type']===ObjectType['Allocation']){const aS=Number(aR?.['balance']??0x0);ar['set'](aR['object'],Number['isFinite'](aS)&&aS===0x0?'allocated':'pending');}}}}catch{j['push']('recent_orders:\x20allocation\x20details\x20unavailable\x20(non-blocking)');}const as=new Map(),at=new Map();try{const aT=new Set();for(const aU of ap){const aV=aq['get'](aU);if(aV?.['progress'])aT['add'](aV['progress']);}if(aT['size']>0x0){const aW=await batchQueryObjectsByIds(Array['from'](aT),h,!![]);for(const aX of aW){if(!aX?.['object'])continue;if(aX['type']===ObjectType['Progress']){const aY=aX?.['current'];as['set'](aX['object'],typeof aY==='string'&&aY!==''?aY:null),at['set'](aX['object'],Number(aX?.['current_time'])||null);}}}}catch{j['push']('recent_orders:\x20progress\x20details\x20unavailable\x20(non-blocking)');}I=Array['from'](aq['values']())['map'](aZ=>({'id':aZ['object'],'created_at_ms':Number(aZ['time'])||undefined,'claimed_by':aZ['claimed_by']??null,'current_node':aZ['progress']?as['get'](aZ['progress'])??null:null}));const au=new Map();try{const aZ=ap,b0=await Promise['allSettled'](aZ['map'](b1=>query_object_last_updated({'object':b1,'network':h})));for(let b1=0x0;b1<aZ['length'];b1++){const b2=b0[b1];au['set'](aZ[b1],b2['status']==='fulfilled'&&b2['value']?.['timestamp_ms']?Number(b2['value']['timestamp_ms'])||null:null);}}catch{j['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const av=await Promise['all'](an['map'](async b3=>{const b4=typeof b3?.['who']==='string'?b3['who']:'',b5=aq['get'](b4),b6=b5?.['amount']!==null&&b5?.['amount']!==undefined?String(b5['amount']):'',b7=await N(b6);return{'order':b4,'time':typeof b3?.['time']==='number'?b3['time']:0x0,'updated_ms':au['get'](b4)??null,'amount':b6,'amount_display':b7['display'],'amount_tip':b7['tip'],'progress':b5?.['progress']??null,'allocation':b5?.['allocation']??null,'disputes':Array['isArray'](b5?.['dispute'])?b5['dispute']:[],'agent':Array['isArray'](b5?.['agent'])?b5['agent']:[],'owner':ownerAddr(b5?.['builder']??b5?.['owner']),'claimed_by':b5?.['claimed_by']??null,'required_info':b5?.['required_info']??null,'progress_next':b5?.['progress']?as['get'](b5['progress'])??null:null,'progress_since':b5?.['progress']?at['get'](b5['progress'])??null:null,'allocation_state':b5?.['allocation']?ar['get'](b5['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](b5?.['items'])?b5['items']:[])['map'](async b8=>({'name':String(b8?.['name']??''),'price_display':(await N(b8?.['price']!==null&&b8?.['price']!==undefined?String(b8['price']):null))['display'],'quantity':String(b8?.['quantity']??'0'),'wip_hash':String(b8?.['wip_hash']??'')})))};})),aw=av['filter'](b3=>b3['order']!==''),ax=ao['map'](b3=>aq['get'](b3))['filter'](b3=>!!b3);let ay=0x0n,az=0x0,aA=0x0,aB=0x0,aC=0x0,aD=0x0,aE=null,aF=null;for(const b3 of ax){const b4=b3?.['amount']!==null&&b3?.['amount']!==undefined?String(b3['amount']):'';/^\d+$/['test'](b4)&&(ay+=BigInt(b4),az++);if(Array['isArray'](b3?.['dispute'])&&b3['dispute']['length']>0x0)aA++;const b5=b3?.['allocation']?ar['get'](b3['allocation'])??'pending':'none';if(b5==='pending')aB++;else{if(b5==='allocated')aC++;else aD++;}}for(const b6 of am){if(typeof b6?.['time']==='number'){if(aE===null||b6['time']<aE)aE=b6['time'];if(aF===null||b6['time']>aF)aF=b6['time'];}}const aG=az>0x0?ay['toString']():null,aH=aG!==null?await N(aG):null,aI=al['length'],aJ=ak?.['ring_saturated']??ringWindowSaturated(aI),aK=aw['length'],aL='Analyze\x20ALL\x20orders\x20of\x20Service\x20'+k+'\x20('+h+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20orders\x20live\x20in\x20the\x20Service\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+aI+(aJ?',\x20saturated':'')+').\x20')+'For\x20each\x20order\x20call\x20object_panorama\x20with\x20the\x20order\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20order:\x20'+'order\x20address\x20chip\x20(first\x20column)\x20|\x20created\x20+\x20last-updated\x20(local\x20dates)\x20|\x20amount\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20fund\x20state\x20(none\x20/\x20pending\x20/\x20allocated)\x20|\x20current\x20machine\x20node\x20|\x20disputes\x20(each\x20dispute\x20case\x20as\x20its\x20own\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20—\x20an\x20order\x27s\x20progress,\x20allocation\x20and\x20arb\x20cases\x20are\x20its\x20children\x20and\x20are\x20never\x20split\x20into\x20a\x20separate\x20flat\x20list)\x20|\x20buyer\x20address\x20chip.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(amount\x20distribution,\x20stuck\x20or\x20paused\x20orders,\x20dispute\x20rate).\x20Orders\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Service\x20itself.';Q={'count':aI,'window_saturated':aJ,'preview_truncated':aI>aK,'stats':{'scope_count':ax['length'],'scoped':ax['length']<aI,'amount_sum_raw':aG,'amount_sum_display':aH?.['display']??null,'amount_sum_tip':aH?.['tip']??null,'amount_known_count':az,'disputed_order_count':aA,'allocation_pending_count':aB,'allocation_allocated_count':aC,'allocation_none_count':aD,'first_created_ms':aE,'last_created_ms':aF},...aI>aK?{'drilldown':{'total_count':aI,'analyzed_count':aK,'stats_scope_count':ax['length'],'prompt':aL},'order_addresses':ax['map'](b7=>b7['object'])}:{},'items':aw};}catch{j['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}try{const b7=[m,l['machine'],l['buy_guard'],...l['allocator_guards']??[]]['filter'](Boolean);H=generateBusinessReport({'objects':b7,'machine_nodes':E['map'](b8=>({'name':b8['name']})),'machine_edges':C?.['edges']?C['edges']['map'](b8=>({'from':b8['from'],'to':b8['to']})):undefined,'orders':I['length']>0x0?I:undefined,'now_ms':Date['now']()});}catch{j['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const R=[];try{const b8=await query_affiliations({'address':k,'no_cache':!![],'network':h}),b9=new Set(),ba=new Map();for(const bc of b8?.['entries']??[]){const bd=typeof bc?.['who']==='string'?bc['who']:'';if(!bd||b9['has'](bd))continue;b9['add'](bd);const be=objectTypeFromAddress(bd);if(!be)continue;if(be===ObjectType['Order'])continue;const bf=String(be);let bg=ba['get'](bf);!bg&&(bg=[],ba['set'](bf,bg)),bg['push']({'address':bd,'type_label':bf,'name':B(bd)['name'],'time':typeof bc?.['time']==='number'?bc['time']:null,'via':typeof bc?.['table']==='string'?bc['table']:null});}const bb=['Progress','Allocation','Payment','Guard'];for(const bh of bb){const bi=ba['get'](bh);bi&&bi['length']>0x0&&(R['push']({'type_label':bh,'items':bi}),ba['delete'](bh));}for(const [bj,bk]of ba){if(bk['length']>0x0)R['push']({'type_label':bj,'items':bk});}}catch{j['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const S=new Set(),T=bl=>{typeof bl==='string'&&/^0x[0-9a-fA-F]{40,64}$/['test'](bl)&&S['add'](bl['toLowerCase']());};T(m['buy_guard']);for(const bl of E){for(const bm of bl?.['pairs']??[]){for(const bn of bm?.['forwards']??[])T(bn?.['guard']);}}for(const bo of m['order_allocators']?.['allocators']??[])T(bo?.['guard']);for(const bp of l['allocator_guards']??[])T(bp?.['object']);for(const bq of Object['values'](l['referenced']??{})){const br=bq;if(!br||typeof br!=='object')continue;if(br['type']===ObjectType['Reward']){for(const bs of br['guards']??[])T(bs?.['guard']);}if(br['type']===ObjectType['Treasury']){for(const bt of br['external_withdraw_guard']??[])T(bt?.['guard']);for(const bu of br['external_deposit_guard']??[])T(bu?.['guard']);}(br['type']===ObjectType['Arbitration']||br['type']===ObjectType['Arb'])&&T(br['voting_guard']);}const U=R['find'](bv=>bv['type_label']===String(ObjectType['Guard']));if(U){U['items']=U['items']['filter'](bv=>!S['has'](bv['address']['toLowerCase']()));if(U['items']['length']===0x0)R['splice'](R['indexOf'](U),0x1);else{const bv=U['items'];try{const bw=await batchQueryObjectsByIds(bv['map'](by=>by['address']),h,!![]),bx=new Map();for(const by of bw){if(by?.['object'])bx['set'](String(by['object'])['toLowerCase'](),by);}for(const bz of bv){const bA=bx['get'](bz['address']['toLowerCase']());if(!bA){bz['explanation']=null;continue;}const bB=Array['isArray'](bA['table'])?bA['table']:[],bC=[];let bD=0x0;for(const bF of bB){if(bF?.['b_submission']===!![]){bD++;continue;}bF?.['value_type']==='Address'&&typeof bF?.['value']==='string'&&bF['value']['startsWith']('0x')&&bC['push'](bF['value']);}const bE=bC['some'](bG=>bG['toLowerCase']()===k['toLowerCase']());bz['explanation']={'description':typeof bA['description']==='string'?bA['description']:null,'table_refs':bC,'references_this_service':bE,'submission_slots':bD,'note':bE?'One-off\x20verification\x20guard:\x20NOT\x20mounted\x20on\x20any\x20host\x20field;\x20its\x20table\x20carries\x20this\x20Service\x20as\x20an\x20on-chain\x20constant\x20(the\x20affiliation\x20is\x20written\x20at\x20creation).\x20It\x20acts\x20only\x20when\x20submitted\x20inside\x20a\x20passport\x20at\x20runtime.':'Guard\x20surfaced\x20by\x20the\x20affiliation\x20window\x20only;\x20not\x20mounted\x20on\x20any\x20host\x20field\x20reachable\x20from\x20this\x20panorama.\x20It\x20acts\x20only\x20when\x20referenced\x20at\x20runtime\x20(passport\x20submission\x20or\x20a\x20host\x20outside\x20this\x20view).'};}}catch{j['push']('related:\x20unbound-guard\x20explanation\x20unavailable\x20(non-blocking)');}}}const V=new Map();for(const bG of l['allocator_guards']??[]){const bH=bG;if(bH?.['object'])V['set'](String(bH['object'])['toLowerCase'](),bH);}const W=[];for(const bI of Array['isArray'](m['sales'])?m['sales']:[]){const bJ=balanceStr(bI?.['price']),bK=await N(bJ);W['push']({'name':typeof bI?.['name']==='string'?bI['name']:'','price':bJ,'price_display':bK['display'],'price_tip':bK['tip'],'stock':balanceStr(bI?.['stock']),'suspension':bI?.['suspension']===!![],'wip':typeof bI?.['wip']==='string'?bI['wip']:'','wip_hash':typeof bI?.['wip_hash']==='string'?bI['wip_hash']:''});}const X=bL=>bL===0x0?'amount':bL===0x2?'surplus':'rate',Y=bL=>{const bM=bL?.['who'];if(bM&&typeof bM==='object'&&'Entity'in bM){const bN=bM['Entity'],bO=typeof bN==='string'?bN:typeof bN?.['name_or_address']==='string'?bN['name_or_address']:null;return{'who':bO?'Entity\x20'+bO:'Entity','entity':bO&&/^0x[0-9a-fA-F]{6,64}$/['test'](bO)?bO:null,'mode':X(bL?.['mode']),'value':balanceStr(bL?.['sharing'])};}if(bM&&typeof bM==='object'&&'GuardIdentifier'in bM)return{'who':'Guard\x20identifier\x20#'+bM['GuardIdentifier'],'entity':null,'mode':X(bL?.['mode']),'value':balanceStr(bL?.['sharing'])};return{'who':'Signer','entity':null,'mode':X(bL?.['mode']),'value':balanceStr(bL?.['sharing'])};},Z=m['order_allocators']?{'description':m['order_allocators']['description']??'','threshold':balanceStr(m['order_allocators']['threshold']),'allocators':(m['order_allocators']['allocators']??[])['map'](bL=>({'guard':bL['guard'],'sharing_count':Array['isArray'](bL['sharing'])?bL['sharing']['length']:0x0,'sharing':(Array['isArray'](bL['sharing'])?bL['sharing']:[])['map'](Y),'max':balanceStr(bL['max']??null),'guard_summary':summarizeGuard(V['get'](String(bL['guard']??'')['toLowerCase']()))}))}:null,a0=[];{const bL=new Map();for(const bM of m['order_allocators']?.['allocators']??[]){for(const bN of Array['isArray'](bM['sharing'])?bM['sharing']:[]){const bO=Y(bN);if(bO['entity']){const bP=bO['entity']['toLowerCase'](),bQ=bL['get'](bP)??{'raw':bO['entity'],'guards':[]};bQ['guards']['push'](bM['guard']??''),bL['set'](bP,bQ);}}}if(bL['size']>0x0)try{const bR=await batchQueryObjectsByIds([...bL['keys']()],h,!![]),bS=new Map();for(const bT of bR){if(bT?.['object'])bS['set'](String(bT['object'])['toLowerCase'](),bT);}for(const [bU,bV]of bL){const bW=bS['get'](bU),bX='order_allocators\x20sharing\x20of\x20allocator\x20guard\x20'+bV['guards'][0x0];if(bW&&bW['permission']!==undefined){const bY=balanceStr(bW['balance']),bZ=await N(bY);a0['push']({'address':String(bW['object']),'kind':'treasury','description':typeof bW['description']==='string'?bW['description']:null,'permission':typeof bW['permission']==='string'?bW['permission']:null,'balance':bY,'balance_display':bZ['display'],'balance_tip':bZ['tip'],'external_deposit_guard_count':Array['isArray'](bW['external_deposit_guard'])?bW['external_deposit_guard']['length']:null,'external_withdraw_guard_count':Array['isArray'](bW['external_withdraw_guard'])?bW['external_withdraw_guard']['length']:null,'via':bX});}else a0['push']({'address':bV['raw'],'kind':'account','description':null,'permission':null,'balance':null,'balance_display':null,'balance_tip':null,'external_deposit_guard_count':null,'external_withdraw_guard_count':null,'via':bX});}}catch{j['push']('income_recipients:\x20Sharing\x20entity\x20read\x20failed\x20(non-blocking)');}}const a1=summarizePermission(l['permission'],B(m['permission'])),a2=a1?.['owner']??F?.['sender']??null,a3=a2?await markOf(a2):null,a4=await N(balanceStr(m['compensation_fund'])),a5=balanceStr(m['compensation_fund']),a6=/^\d+$/['test'](a5?.['trim']()??'')?BigInt(a5['trim']()):null,a7=a6===null?null:(a6/0x3n)['toString'](),a8=a7===null?null:await N(a7),a9=a6===null?null:a6===0x0n?'No\x20compensation\x20fund:\x20this\x20Service\x20carries\x20NO\x20payout\x20protection\x20—\x20a\x20won\x20arbitration\x20award\x20cannot\x20be\x20paid\x20(the\x20claim\x20aborts,\x20code\x2027).\x20Running\x20without\x20a\x20fund\x20is\x20a\x20legitimate\x20merchant\x20choice,\x20but\x20it\x20is\x20one\x20a\x20buyer\x20should\x20see\x20before\x20ordering.':'Orders\x20at\x20or\x20under\x20this\x20cap\x20are\x20fully\x20protected\x20(award\x20ceiling\x203x\x20order).\x20Above\x20the\x20cap\x20there\x20is\x20NO\x20partial\x20payout\x20—\x20settlement\x20is\x20all-or-nothing\x20and\x20the\x20claim\x20aborts\x20(code\x2027)\x20until\x20the\x20fund\x20covers\x20the\x20award;\x20the\x20order\x20itself\x20is\x20unaffected.';let aa=null;if(a6!==null){const c0=W['filter'](c8=>!c8['suspension']&&/^\d+$/['test'](c8['price']?.['trim']()??''))['map'](c8=>({'name':c8['name'],'price':BigInt(c8['price']['trim']())})),c1=computeFundListingWall(a6,c0),c2=await Promise['all'](c1['blocked']['map'](async c8=>({'name':c8['name'],'price':c8['price']['toString'](),'price_display':(await N(c8['price']['toString']()))['display']}))),c3=c2['length']===0x0?null:'The\x20fund\x20currently\x20backs\x20orders\x20up\x20to\x20'+(a8?.['display']??a7)+'.\x20'+((c2['length']===0x1?'1\x20listing\x20is':c2['length']+'\x20listings\x20are')+'\x20priced\x20above\x20that\x20and\x20check\x20out\x20UNDER-COVERED\x20—\x20the\x20order\x20proceeds\x20with\x20a\x20buy-time\x20warning\x20(拍板⑤\x20dm-mtw-261027\x20demoted\x20the\x20refusal;\x20no\x20money\x20is\x20blocked),\x20but\x20the\x20fund\x20cannot\x20back\x20its\x20maximum\x20award:\x20a\x20ruling\x20at\x20the\x20cap\x20aborts\x20code\x2027\x20(claim\x20NOT\x20consumed)\x20until\x20a\x20top-up.\x20')+'The\x20highest-priced\x20listing\x20is\x20affected\x20first;\x20top\x20the\x20fund\x20above\x203x\x20a\x20listing\x27s\x20price\x20(service.compensation_fund_add)\x20or\x20cut\x20the\x20price\x20to\x20fully\x20cover\x20it.\x20'+'This\x20recomputes\x20on\x20every\x20read:\x20after\x20every\x20award\x20that\x20spends\x20the\x20fund,\x20re-check\x20your\x20top\x20listing.',c4=c0['reduce']((c8,c9)=>c9['price']>c8?c9['price']:c8,0x0n),c5=c4*0x3n,c6=a6<=0x0n?'depleted':classifyFundWaterLevelUnits(a6,c5)??'healthy';let c7=null;c6!=='healthy'&&(c7=fundWaterReminder(c6,{'balance':a6<=0x0n?'0':(await N(a6['toString']()))['display'],'threshold':(await N(c5['toString']()))['display']})),aa={'blocked':c2,'note':c3,'water_level':c6,'water_reminder':c7};}const ab=projectExploration([],{'truncations':[],'budgetExhausted':{},'dataGaps':j});return{'action':'service_panorama','network':h,'service':{'address':k,'name':A,'description':m['description']??'','location':m['location']??'','published':m['bPublished']===!![],'paused':m['bPaused']===!![],'paused_time':typeof m['paused_time']==='number'?m['paused_time']:typeof m['paused_time']==='string'&&/^\d+$/['test'](m['paused_time'])?Number(m['paused_time']):null,'setting_lock_duration':balanceStr(m['setting_lock_duration']),'customer_required':Array['isArray'](m['customer_required'])?m['customer_required']:[],'compensation_fund':balanceStr(m['compensation_fund']),'compensation_fund_display':a4['display'],'compensation_fund_tip':a4['tip'],'compensation_fund_cover_cap':a7,'compensation_fund_cover_cap_display':a8?.['display']??null,'compensation_fund_cover_cap_note':a9,'compensation_fund_listing_wall':aa,'sales':W,'machine':m['machine']??null,'buy_guard':m['buy_guard']??null,'permission':m['permission']??'','um':m['um']??null,'arbitrations':Array['isArray'](m['arbitrations'])?m['arbitrations']:[],'rewards':Array['isArray'](m['rewards'])?m['rewards']:[],'repositories':Array['isArray'](m['repositories'])?m['repositories']:[],'order_allocators':Z,'income_recipients':a0,'payment_token':{'coin_type':L,'guidance':M(L,h)},'onchain_last_updated':F,'tags':z['tags']??[],'owner':a2,'owner_name':a3?.['name']??null},'machine_graph':C,'buy_guard':summarizeGuard(l['buy_guard']),'permission':a1,'related':{'groups':R},'supply_chain':G,'business_report':H,'recent_orders':Q,'data_gaps':j,...ab['open_questions']['length']>0x0?{'exploration':ab}:{}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config,LocalMark,query_objects,query_serviceContext}from'@wowok/wowok';import{resolveAddress as a390a}from'../../tools/handlers/name-resolution.js';import{formatMoneyAnnotation}from'./facet-money.js';const balanceStr=a=>a===null||a===undefined?'0':typeof a==='bigint'?a['toString']():String(a);async function displayOf(a,b,c){try{return(await formatMoneyAnnotation(a,b,c))['display'];}catch{return a;}}function describeRecipient(a){if(typeof a==='string')return a;if(a&&typeof a==='object'){const b=a;if('GuardIdentifier'in b)return'submission\x20slot\x20'+String(b['GuardIdentifier']);if('Entity'in b){const c=b['Entity'],d=c&&typeof c==='object'?c['name_or_address']:c;return d===''?'Entity(\x22\x22)\x20—\x20MCP\x20default\x20local\x20account':'Entity:'+String(d);}return JSON['stringify'](a);}return'unknown';}export async function handleServiceQuote(a){const b=a['context_network']??undefined??await Config['Instance']()['network_get'](),d=await a390a(a['service_address'],'service_address'),f=await query_serviceContext({'service':d,'network':b}),h=f['service'];if(!h)throw new Error('Service\x20\x27'+a['service_address']+'\x27\x20not\x20found\x20on\x20network\x20'+b+'.');const i=h?.['type_raw']??h?.['type']??'',j=i['match'](/<(.+)>$/),k=j?j[0x1]:null,l=Array['isArray'](h['sales'])?h['sales']:[],m=new Map();for(const M of l){if(!M||typeof M['name']!=='string')continue;m['set'](M['name'],{'price':balanceStr(M['price']?.['balance']??M['price']??0x0),'suspended':M['suspension']===!![]});}const n=a['items']??[...m['keys']()]['map'](N=>({'name':N,'quantity':0x1})),p=n['filter'](N=>!m['has'](N['name']));if(p['length']>0x0)throw new Error('Sale(s)\x20not\x20found\x20on\x20this\x20Service:\x20'+p['map'](N=>'\x27'+N['name']+'\x27')['join'](',\x20')+'.\x20'+('Available\x20sales:\x20'+([...m['keys']()]['map'](N=>'\x27'+N+'\x27')['join'](',\x20')||'<none>')+'.'));if(n['length']===0x0)throw new Error('This\x20Service\x20has\x20NO\x20configured\x20sales\x20—\x20nothing\x20to\x20quote.');const q=[];let t=0x0n;for(const N of n){const O=m['get'](N['name']),P=BigInt(O['price']||'0'),Q=P*BigInt(N['quantity']);t+=Q,q['push']({'name':N['name'],'quantity':N['quantity'],'unit_price':O['price'],'unit_price_display':await displayOf(O['price'],k,b),'line_total':Q['toString'](),'suspended':O['suspended']});}let u=t,w=null;if(typeof a['discount']==='string'&&a['discount']['trim']()!==''){const R=await a390a(a['discount'],'discount');let S=null;try{const a3=await query_objects({'objects':[R],'network':b});S=a3?.['objects']?.[0x0]??null;}catch{S=null;}if(!S)throw new Error('E_DISCOUNT_NOT_FOUND:\x20coupon\x20\x27'+R+'\x27\x20not\x20found\x20—\x20it\x20was\x20already\x20burned\x20on\x20a\x20'+'previous\x20buy\x20(a\x20burned\x20coupon\x20is\x20destroyed\x20on\x20chain\x20and\x20cannot\x20be\x20quoted\x20again)\x20'+'or\x20the\x20address\x20is\x20wrong.\x20Re-quote\x20without\x20the\x20coupon.');const T=String(S['service']??'');if(T['toLowerCase']()!==d['toLowerCase']())throw new Error('E_SERVICE_DISCOUNT_NOT_MATCH:\x20coupon\x20\x27'+R+'\x27\x20is\x20bound\x20to\x20service\x20'+((T||'<unparseable>')+',\x20not\x20to\x20'+d+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const U=a4=>{const a5=balanceStr(a4)['trim']();return/^\d+$/['test'](a5)?BigInt(a5):0x0n;},V=BigInt(Date['now']()),W=U(S['time_start']),X=U(S['time_end']);if(V<W||V>X)throw new Error('E_DISCOUNT_TIME_INVALID:\x20coupon\x20\x27'+R+'\x27\x20is\x20valid\x20'+(W+'–'+X+'\x20(ms\x20epoch),\x20now\x20is\x20'+V+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const Y=Number(S['discount_type'])===0x0,Z=U(S['off']),a0=S['benchmark']===null||S['benchmark']===undefined?null:U(S['benchmark']),a1=a0===null?!![]:t>=a0;let a2=![];a1&&(a2=!![],u=Y?t-t*Z/0x2710n:t>Z?t-Z:0x0n),w={'coupon':R,'name':typeof S['name']==='string'?S['name']:null,'type':Y?'rates':'minus','off':Z['toString'](),'benchmark':a0===null?null:a0['toString'](),'benchmark_met':a1,'applied':a2,'list_total':t['toString'](),'final_total':u['toString'](),'final_total_display':await displayOf(u['toString'](),k,b),'note':a2?u===0x0n?'DEAD\x20BASKET\x20(F-BS-75):\x20the\x20coupon\x20covers\x20the\x20entire\x20basket,\x20but\x20the\x20chain\x20REFUSES\x20zero-total\x20'+'buys\x20—\x20the\x20client\x20gate\x20(order_new_zero_total_dead_order)\x20and\x20the\x20on-chain\x20zero-total\x20gate\x20'+'(abort\x2042)\x20both\x20reject\x20this\x20buy;\x20NOTHING\x20is\x20purchasable\x20at\x20total\x200,\x20free\x20product\x20or\x20not.\x20'+'Lower\x20the\x20coupon\x20value\x20so\x20the\x20final\x20total\x20stays\x20>=\x201\x20smallest\x20unit\x20(or\x20price\x20a\x20deliberate\x20'+'free\x20tier\x20at\x201\x20smallest\x20unit).\x20allow_zero_total\x20on\x20the\x20coupon\x20is\x20disclosure-only\x20and\x20does\x20'+'NOT\x20unlock\x20this\x20buy\x20(F-BS-74).':'Discounted\x20total\x20shown\x20—\x20order_new.buy.total_pay.balance\x20must\x20equal\x20final_total.\x20'+'BURN-ON-USE\x20(F-ETS-03):\x20attaching\x20this\x20coupon\x20to\x20a\x20buy\x20DESTROYS\x20it\x20on\x20chain\x20—\x20the\x20coupon\x20'+'object\x20is\x20gone\x20once\x20the\x20order\x20is\x20created\x20(a\x20later\x20quote\x20hits\x20E_DISCOUNT_NOT_FOUND).\x20'+'CANCELLATION\x20REFUNDS\x20THE\x20DISCOUNTED\x20AMOUNT\x20ONLY:\x20refund\x20rails\x20pay\x20the\x20order\x27s\x20escrowed\x20'+'amount\x20(this\x20final_total),\x20so\x20a\x20cancelled\x20order\x20does\x20NOT\x20restore\x20the\x20coupon\x27s\x20face\x20value\x20—\x20'+'the\x20difference\x20is\x20forfeited\x20even\x20on\x20a\x20no-fault\x20cancel.\x20Disclose\x20this\x20to\x20the\x20buyer\x20before\x20checkout.':'⚠\x20Benchmark\x20NOT\x20met\x20(list\x20total\x20'+t+'\x20<\x20'+a0+'):\x20the\x20chain\x20REJECTS\x20this\x20buy\x20when\x20the\x20coupon\x20is\x20attached\x20(error\x2038\x20—\x20full\x20rollback,\x20nothing\x20paid,\x20coupon\x20preserved).\x20Raise\x20the\x20basket\x20to\x20>=\x20'+a0+',\x20or\x20order\x20without\x20the\x20coupon\x20and\x20keep\x20it.'};}const x=balanceStr(h['compensation_fund']??0x0),y=/^\d+$/['test'](x['trim']())?BigInt(x['trim']()):0x0n,z=0x3n*u,A=z>y?z-y:0x0n,B=y/0x3n,C=await displayOf(B['toString'](),k,b),D={'fund_balance':y['toString'](),'fund_balance_display':await displayOf(y['toString'](),k,b),'max_coverable_order':B['toString'](),'max_coverable_order_display':C,'required_for_this_basket':z['toString'](),'required_display':await displayOf(z['toString'](),k,b),'shortfall':A['toString'](),'shortfall_display':await displayOf(A['toString'](),k,b),'covered':y>=z,'note':y===0x0n?'This\x20Service\x20runs\x20WITHOUT\x20a\x20compensation\x20fund\x20—\x20a\x20legitimate\x20merchant\x20choice,\x20never\x20blocked\x20at\x20buy.\x20An\x20arbitration\x20award\x20beyond\x20the\x20pool\x20aborts\x20the\x20buyer\x27s\x20payout\x20(code\x2027,\x20claim\x20NOT\x20consumed)\x20and\x20waits\x20on\x20the\x20merchant\x20wallet.':y>=z?'The\x20fund\x20covers\x203x\x20this\x20basket\x27s\x20amount\x20—\x20a\x20single\x20ruling\x20at\x20the\x20maximum\x20award\x20multiple\x20is\x20payable\x20from\x20the\x20pool.\x20Storefront\x20ceiling:\x20no\x20order\x20above\x20'+C+'\x20(fund/3)\x20can\x20be\x20created\x20—\x20quote\x20a\x20bigger\x20basket\x20against\x20the\x20ceiling,\x20not\x20just\x20this\x20one.':'BELOW\x20the\x20per-order\x20payout\x20requirement:\x20order\x20creation\x20will\x20be\x20BLOCKED\x20(compensation_fund_below_order_ceiling\x20—\x20no\x20money\x20moves)\x20until\x20the\x20merchant\x20tops\x20up\x20via\x20service.compensation_fund_add\x20by\x20'+await displayOf(A['toString'](),k,b)+'\x20(to\x20>=\x203x\x20this\x20basket).\x20Standing\x20ceiling:\x20orders\x20above\x20'+C+'\x20(fund/3)\x20are\x20refused\x20at\x20buy,\x20so\x20this\x20basket\x20is\x20only\x20the\x20latest\x20casualty\x20—\x20every\x20bigger\x20SKU\x20is\x20unbuyable\x20too.'},E=await displayOf(u['toString'](),k,b),F=h['order_allocators'],G=Array['isArray'](F?.['allocators'])?F['allocators']:[],H=G['length']>0x0?G[0x0]:undefined,I=H?{'allocator_index':0x0,'note':'Sharing\x20rows\x20of\x20the\x20FIRST\x20order_allocator\x20(index\x200\x20—\x20NOT\x20necessarily\x20the\x20normal\x20'+'payout\x20path:\x20services\x20that\x20ship\x20refund-first\x20rails\x20put\x20the\x20refund\x20track\x20at\x20index\x200,\x20'+'klk15\x20C-06).\x20Guards\x20select\x20per-case\x20allocators\x20(refund\x20/\x20damage\x20/\x20late-cancel),\x20so\x20'+'the\x20LIVE\x20split\x20depends\x20on\x20which\x20guard\x20passes\x20—\x20identify\x20the\x20settlement\x20allocator\x20'+'via\x20service_panorama\x20before\x20ordering.','sharing':(Array['isArray'](H['sharing'])?H['sharing']:[])['map'](a4=>({'recipient':describeRecipient(a4?.['who']),'mode':typeof a4?.['mode']==='string'?a4['mode']:null,'value':balanceStr(a4?.['sharing']?.['balance']??a4?.['sharing']??0x0)}))}:null,J=Array['isArray'](h['rewards'])?h['rewards']['filter'](a4=>typeof a4==='string'&&a4!==''):[];let K=null;if(J['length']>0x0){const a4=[],a5=[];let a6=[];try{const a7=await query_objects({'objects':J,'network':b});a6=Array['isArray'](a7?.['objects'])?a7['objects']:[];}catch(a8){a4['push']('Reward\x20lookup\x20failed\x20('+(a8 instanceof Error?a8['message']:String(a8))+')\x20—\x20reward\x20terms\x20NOT\x20verified;\x20do\x20not\x20rely\x20on\x20them.');}for(const a9 of J){const aa=a6['find'](an=>typeof an?.['object']==='string'&&an['object']['toLowerCase']()===a9['toLowerCase']());if(!aa){a4['push']('Reward\x20\x27'+a9+'\x27\x20could\x20not\x20be\x20read\x20—\x20its\x20terms\x20are\x20unknown;\x20do\x20not\x20rely\x20on\x20it.');continue;}const ab=balanceStr(aa['balance']??0x0),ac=/^\d+$/['test'](ab)?BigInt(ab):0x0n,ad=[];let ae=0x0n,af=![];for(const an of Array['isArray'](aa['guards'])?aa['guards']:[]){const ao=an?.['amount'],ap=ao!=null&&(ao['type']===0x1||ao['type']==='Fixed'),aq=an?.['expiration_time'],ar=aq==null?null:Number(aq),as=ar!=null&&Number['isFinite'](ar)?ar:null;if(ap){const at=balanceStr(ao['value']??0x0),au=/^\d+$/['test'](at)?BigInt(at):0x0n;if(au>ae)ae=au;ad['push']({'guard':String(an?.['guard']??''),'amount_type':'fixed','amount':at,'amount_display':await displayOf(at,k,b),'expiration_time':as,'expiration_display':as!=null?new Date(as)['toISOString']():null,'expired':as!=null?Date['now']()>as:null,'min_rating':null});}else af=!![],ad['push']({'guard':String(an?.['guard']??''),'amount_type':'guard_submission','amount':'submission\x20identifier\x20'+String(ao?.['value']??'?'),'amount_display':null,'expiration_time':as,'expiration_display':as!=null?new Date(as)['toISOString']():null,'expired':as!=null?Date['now']()>as:null,'min_rating':null});}const ag=Array['from'](new Set(ad['map'](av=>av['guard'])['filter'](av=>av!==''))),ah=new Map();if(ag['length']>0x0)try{const av=await query_objects({'objects':ag,'network':b});for(const aw of Array['isArray'](av?.['objects'])?av['objects']:[]){if(typeof aw?.['object']==='string')ah['set'](aw['object']['toLowerCase'](),aw);}}catch{a4['push']('Claim\x20guard\x20lookup\x20failed\x20—\x20rating\x20conditions\x20on\x20'+ag['length']+'\x20claim\x20guard(s)\x20NOT\x20verified;\x20do\x20not\x20promise\x20the\x20incentive.');}const ai=(ax,ay=0x0)=>{if(!ax||typeof ax!=='object'||ay>0x4)return null;if(ax['root']&&Array['isArray'](ax['table']))return ax;for(const az of Object['values'](ax)){if(az&&typeof az==='object'){const aA=ai(az,ay+0x1);if(aA)return aA;}}return null;},aj=(ax,ay)=>{const az=ax['table']['find'](aB=>aB?.['identifier']===ay&&aB?.['b_submission']===![]);if(!az)return null;const aA=typeof az['value']==='number'?az['value']:Number(String(az['value']??''));return Number['isFinite'](aA)?aA:null;},ak=(ax,ay,az=0x0)=>{if(!ax||typeof ax!=='object'||az>0x18)return null;const aA=typeof ax['type']==='string'?ax['type']:'';if(aA==='logic_as_u256_greater_or_equal'||aA==='logic_as_u256_greater'||aA==='logic_as_u256_equal'){const aB=Array['isArray'](ax['nodes'])?ax['nodes']:[],aC=aB[0x0];if(aB['length']>=0x2&&JSON['stringify'](aC??{})['includes']('repository.data')){const aD=aB[aB['length']-0x1],aE=aD?.['type']==='identifier'?aj(ay,Number(aD['identifier'])):typeof aD?.['value']==='number'?aD['value']:null;if(aE!=null){const aF=aA==='logic_as_u256_greater_or_equal'?'>=':aA==='logic_as_u256_greater'?'>':'==';return aF+'\x20'+aE;}}}for(const aG of Object['values'](ax)){if(Array['isArray'](aG))for(const aH of aG){const aI=ak(aH,ay,az+0x1);if(aI)return aI;}else{if(aG&&typeof aG==='object'){const aJ=ak(aG,ay,az+0x1);if(aJ)return aJ;}}}return null;};for(const ax of ad){ax['min_rating']=null;const ay=ah['get'](ax['guard']['toLowerCase']());if(!ay)continue;let az;try{az=JSON['stringify'](ay,(aD,aE)=>aE instanceof Uint8Array?Buffer['from'](aE)['toString']('base64'):aE);}catch{continue;}const aA=az['includes']('\x22rating\x22')||az['includes']('114,97,116,105,110,103')||az['toLowerCase']()['includes']('726174696e67')||az['includes']('cmF0aW5n');if(!aA)continue;const aB=ai(ay),aC=aB?ak(aB['root'],aB):null;if(aC)ax['min_rating']=aC;else{const aD=az['toLowerCase']();if(aD['includes']('\x22like\x22'))ax['min_rating']='like';else{if(aD['includes']('\x22dislike\x22'))ax['min_rating']='dislike';else ax['min_rating']='unknown';}}}const al=ac===0x0n?'Pool\x20is\x20EMPTY\x20—\x20any\x20claim\x20aborts\x20on-chain\x20on\x20the\x20reward\x20module\x27s\x20E_INSUFFICIENT_BALANCE\x20(not\x20the\x20allocation\x20module\x27s\x20same-named\x20constant);\x20do\x20not\x20budget\x20on\x20this\x20reward.':af||ae===0x0n?null:'Pool\x20covers\x20~'+(ac/ae)['toString']()+'\x20further\x20claim(s)\x20at\x20the\x20largest\x20configured\x20per-claim\x20amount.',am=ad['filter'](aE=>aE['min_rating']==='unknown')['length'];am>0x0&&a4['push'](am+'\x20claim(s)\x20gate\x20on\x20a\x20rating\x20condition\x20whose\x20polarity\x20could\x20not\x20be\x20parsed\x20'+'(min_rating=unknown)\x20—\x20read\x20the\x20claim\x20guard\x20before\x20promising\x20this\x20incentive\x20to\x20the\x20buyer'),a5['push']({'reward':a9,'description':typeof aa['description']==='string'?aa['description']:null,'pool_balance':ac['toString'](),'pool_balance_display':await displayOf(ac['toString'](),k,b),'record_count':Number['isFinite'](Number(aa['record_count']))?Number(aa['record_count']):0x0,'claims':ad,'coverage':al});}K={'note':'Pre-order\x20reward\x20terms\x20for\x20every\x20Reward\x20hung\x20on\x20this\x20Service\x20(bound\x20at\x20build\x20time):\x20pool\x20balance,\x20'+'per-claim\x20amount\x20and\x20claim\x20windows.\x20A\x20claim\x20aborts\x20after\x20its\x20window\x20(E_GUARD_EXPIRED)\x20or\x20'+'against\x20an\x20empty\x20pool\x20(E_INSUFFICIENT_BALANCE)\x20—\x20never\x20budget\x20on\x20an\x20expired\x20or\x20empty\x20'+'reward.\x20Claiming\x20requires\x20passing\x20the\x20claim\x20guard\x27s\x20conditions.','rewards':a5,'data_gaps':a4};}let L=null;try{const aE=await LocalMark['Instance']()['list']({'address':d});L=aE?.[0x0]?.['name']??null;}catch{L=null;}return{'action':'service_quote','network':String(b),'service':{'address':d,'name':L},'payment_token':{'coin_type':k,'display_note':k?'Prices\x20and\x20the\x20order\x20total\x20are\x20denominated\x20in\x20this\x20token\x27s\x20smallest\x20units;\x20displays\x20convert\x20with\x20the\x20token\x27s\x20on-chain\x20precision.':'Payment\x20token\x20could\x20not\x20be\x20parsed\x20from\x20the\x20Service\x20type\x20—\x20raw\x20smallest\x20units\x20only,\x20precision\x20NOT\x20guessed.'},'items':q,'total_pay':{'balance':u['toString'](),'display':E,'note':u===0x0n?'DEAD\x20BASKET\x20(F-BS-75):\x20this\x20quote\x20totals\x20ZERO\x20—\x20the\x20chain\x20REFUSES\x20zero-total\x20buys\x20(client\x20'+'order_new_zero_total_dead_order,\x20on-chain\x20abort\x2042),\x20so\x20this\x20basket\x20cannot\x20be\x20purchased\x20at\x20'+'all.\x20Either\x20the\x20basket\x20contains\x20a\x20zero-priced\x20SKU\x20(permanently\x20unbuyable\x20—\x20F-BS-76;\x20the\x20'+'merchant\x20must\x20reprice\x20it\x20to\x20>=\x201\x20smallest\x20unit)\x20or\x20a\x20coupon\x20zeroes\x20it\x20(lower\x20the\x20coupon\x20'+'value).\x20Do\x20NOT\x20attempt\x20the\x20buy.':w?.['applied']?'Discounted\x20total\x20—\x20order_new.buy.total_pay.balance\x20must\x20equal\x20this\x20exactly\x20(the\x20on-chain\x20buy\x20aborts\x20on\x20any\x20drift;\x20the\x20coupon\x20is\x20consumed\x20at\x20buy).':'order_new.buy.total_pay.balance\x20must\x20equal\x20this\x20exactly\x20when\x20passed\x20explicitly\x20—\x20the\x20on-chain\x20buy\x20aborts\x20on\x20any\x20drift.\x20WITHOUT\x20a\x20discount\x20you\x20may\x20also\x20omit\x20total_pay\x20entirely:\x20the\x20buy\x20auto-derives\x20this\x20exact\x20total\x20(M-K17).'},'discount':w,'allocation_preview':I,'compensation_fund_coverage':D,'reward_terms':K};}
|
|
1
|
+
import{Config,LocalMark,query_objects,query_serviceContext}from'@wowok/wowok';import{resolveAddress as a395a}from'../../tools/handlers/name-resolution.js';import{parseGuardTimeBounds}from'../../knowledge/guard-anchor-reach.js';import{formatMoneyAnnotation}from'./facet-money.js';const balanceStr=a=>a===null||a===undefined?'0':typeof a==='bigint'?a['toString']():String(a);async function displayOf(a,b,c){try{return(await formatMoneyAnnotation(a,b,c))['display'];}catch{return a;}}function describeRecipient(a){if(typeof a==='string')return a;if(a&&typeof a==='object'){const b=a;if('GuardIdentifier'in b)return'submission\x20slot\x20'+String(b['GuardIdentifier']);if('Entity'in b){const c=b['Entity'],d=c&&typeof c==='object'?c['name_or_address']:c;return d===''?'Entity(\x22\x22)\x20—\x20MCP\x20default\x20local\x20account':'Entity:'+String(d);}return JSON['stringify'](a);}return'unknown';}const PER_ORDER_REPLAY_NOTE='A\x20per-order\x20replay\x20on\x20the\x20reward\x20PULL\x20rail\x20needs\x20BOTH\x20a\x20guard_add\x20store_from_id\x20stamp\x20on\x20the\x20'+'submitted-Order\x20slot\x20(0\x20by\x20convention)\x20AND\x20an\x20order-scoped\x20where:{storeFromId:{identifier:<same\x20slot>}}\x20'+'record\x20gate\x20in\x20the\x20claim\x20guard\x20(SV-2).\x20For\x20a\x20per-order\x20once\x20the\x20CHAIN\x20enforces\x20regardless\x20of\x20guard-tree\x20'+'mistakes,\x20route\x20the\x20incentive\x20through\x20an\x20Allocation\x20leg\x20declaring\x20protocol\x20slot\x20254\x20(the\x20once\x20key\x20derives\x20'+'on-chain\x20from\x20bcs(payment_info.for_object);\x20a\x20second\x20alloc\x20aborts\x2016,\x20E_ONCE_TRIGGERED).',quoteOwnerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;};export async function handleServiceQuote(a){const b=a['context_network']??undefined??await Config['Instance']()['network_get'](),d=await a395a(a['service_address'],'service_address'),f=await query_serviceContext({'service':d,'network':b}),h=f['service'];if(!h)throw new Error('Service\x20\x27'+a['service_address']+'\x27\x20not\x20found\x20on\x20network\x20'+b+'.');const i=h?.['type_raw']??h?.['type']??'',j=i['match'](/<(.+)>$/),k=j?j[0x1]:null,l=Array['isArray'](h['sales'])?h['sales']:[],m=new Map();for(const P of l){if(!P||typeof P['name']!=='string')continue;m['set'](P['name'],{'price':balanceStr(P['price']?.['balance']??P['price']??0x0),'suspended':P['suspension']===!![]});}let n=0x0n;for(const Q of m['values']()){const R=/^\d+$/['test'](Q['price'])?BigInt(Q['price']):0x0n;R>0x0n&&(n===0x0n||R<n)&&(n=R);}const q=h['paused']===!![]||h['bPaused']===!![],t=a['items']??[...m['keys']()]['map'](S=>({'name':S,'quantity':0x1})),u=t['filter'](S=>!m['has'](S['name']));if(u['length']>0x0)throw new Error('Sale(s)\x20not\x20found\x20on\x20this\x20Service:\x20'+u['map'](S=>'\x27'+S['name']+'\x27')['join'](',\x20')+'.\x20'+('Available\x20sales:\x20'+([...m['keys']()]['map'](S=>'\x27'+S+'\x27')['join'](',\x20')||'<none>')+'.'));if(t['length']===0x0)throw new Error('This\x20Service\x20has\x20NO\x20configured\x20sales\x20—\x20nothing\x20to\x20quote.');const w=[];let x=0x0n;for(const S of t){const T=m['get'](S['name']),U=BigInt(T['price']||'0'),V=U*BigInt(S['quantity']);x+=V,w['push']({'name':S['name'],'quantity':S['quantity'],'unit_price':T['price'],'unit_price_display':await displayOf(T['price'],k,b),'line_total':V['toString'](),'suspended':T['suspended']});}let y=x,z=null;if(typeof a['discount']==='string'&&a['discount']['trim']()!==''){const W=await a395a(a['discount'],'discount');let X=null;try{const aa=await query_objects({'objects':[W],'network':b});X=aa?.['objects']?.[0x0]??null;}catch{X=null;}if(!X)throw new Error('E_DISCOUNT_NOT_FOUND:\x20coupon\x20\x27'+W+'\x27\x20not\x20found\x20—\x20it\x20was\x20already\x20burned\x20on\x20a\x20'+'previous\x20buy\x20(a\x20burned\x20coupon\x20is\x20destroyed\x20on\x20chain\x20and\x20cannot\x20be\x20quoted\x20again)\x20'+'or\x20the\x20address\x20is\x20wrong.\x20Re-quote\x20without\x20the\x20coupon.');const Y=String(X['service']??'');if(Y['toLowerCase']()!==d['toLowerCase']())throw new Error('E_SERVICE_DISCOUNT_NOT_MATCH:\x20coupon\x20\x27'+W+'\x27\x20is\x20bound\x20to\x20service\x20'+((Y||'<unparseable>')+',\x20not\x20to\x20'+d+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const Z=ab=>{const ac=balanceStr(ab)['trim']();return/^\d+$/['test'](ac)?BigInt(ac):0x0n;},a0=BigInt(Date['now']()),a1=Z(X['time_start']),a2=Z(X['time_end']);if(a0<a1||a0>a2)throw new Error('E_DISCOUNT_TIME_INVALID:\x20coupon\x20\x27'+W+'\x27\x20is\x20valid\x20'+(a1+'–'+a2+'\x20(ms\x20epoch),\x20now\x20is\x20'+a0+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const a3=Number(X['discount_type'])===0x0,a4=Z(X['off']),a5=quoteOwnerAddr(X['owner']),a6=a5?'Coupon\x20is\x20owned\x20by\x20'+a5+';\x20only\x20the\x20holder\x20can\x20redeem\x20it\x20—\x20a\x20coupon\x20held\x20by\x20another\x20address\x20cannot\x20be\x20applied\x20to\x20your\x20order,\x20have\x20the\x20owner\x20transfer\x20it\x20first\x20(call\x20service\x20discount_send).\x20Refunds\x20settle\x20the\x20post-coupon\x20amount\x20only.':'Coupon\x20holder\x20could\x20not\x20be\x20read\x20from\x20the\x20chain\x20—\x20VERIFY\x20the\x20holder\x20before\x20checkout:\x20only\x20the\x20holder\x20can\x20redeem,\x20a\x20coupon\x20held\x20by\x20another\x20address\x20cannot\x20be\x20applied\x20to\x20your\x20order\x20(have\x20the\x20owner\x20transfer\x20it\x20first\x20via\x20call\x20service\x20discount_send),\x20and\x20refunds\x20settle\x20the\x20post-coupon\x20amount\x20only.',a7=X['benchmark']===null||X['benchmark']===undefined?null:Z(X['benchmark']),a8=a7===null?!![]:x>=a7;let a9=![];a8&&(a9=!![],y=a3?x-x*a4/0x2710n:x>a4?x-a4:0x0n),z={'coupon':W,'name':typeof X['name']==='string'?X['name']:null,'owned_by':a5,'ownership_note':a6,'type':a3?'rates':'minus','off':a4['toString'](),'benchmark':a7===null?null:a7['toString'](),'benchmark_met':a8,'applied':a9,'list_total':x['toString'](),'final_total':y['toString'](),'final_total_display':await displayOf(y['toString'](),k,b),'note':a9?y===0x0n?'DEAD\x20BASKET\x20(F-BS-75):\x20the\x20coupon\x20covers\x20the\x20entire\x20basket,\x20but\x20the\x20chain\x20REFUSES\x20zero-total\x20'+'buys\x20—\x20the\x20client\x20gate\x20(order_new_zero_total_dead_order)\x20and\x20the\x20on-chain\x20zero-total\x20gate\x20'+'(abort\x2042)\x20both\x20reject\x20this\x20buy;\x20NOTHING\x20is\x20purchasable\x20at\x20total\x200,\x20free\x20product\x20or\x20not.\x20'+'Lower\x20the\x20coupon\x20value\x20so\x20the\x20final\x20total\x20stays\x20>=\x201\x20smallest\x20unit\x20(or\x20price\x20a\x20deliberate\x20'+'free\x20tier\x20at\x201\x20smallest\x20unit,\x20or\x20deliver\x20it\x20outside\x20the\x20sales\x20rails).\x20allow_zero_total\x20does\x20'+'NOT\x20unlock\x20this\x20buy\x20and\x20no\x20longer\x20waives\x20the\x20issuance\x20gate\x20either\x20(BSX-F07).':'Discounted\x20total\x20shown\x20—\x20order_new.buy.total_pay.balance\x20must\x20be\x20>=\x20this\x20final_total\x20(bs29\x20R-17:\x20total_pay\x20is\x20a\x20FLOOR;\x20the\x20order\x20escrows\x20exactly\x20this\x20amount,\x20an\x20over-funded\x20total\x20is\x20never\x20escrowed).\x20Pass\x20exactly\x20this\x20value;\x20the\x20coupon\x20is\x20consumed\x20at\x20buy.\x20'+'BURN-ON-USE\x20(F-ETS-03):\x20attaching\x20this\x20coupon\x20to\x20a\x20buy\x20DESTROYS\x20it\x20on\x20chain\x20—\x20the\x20coupon\x20'+'object\x20is\x20gone\x20once\x20the\x20order\x20is\x20created\x20(a\x20later\x20quote\x20hits\x20E_DISCOUNT_NOT_FOUND).\x20'+'CANCELLATION\x20REFUNDS\x20THE\x20DISCOUNTED\x20AMOUNT\x20ONLY:\x20refund\x20rails\x20pay\x20the\x20order\x27s\x20escrowed\x20'+'amount\x20(this\x20final_total),\x20so\x20a\x20cancelled\x20order\x20does\x20NOT\x20restore\x20the\x20coupon\x27s\x20face\x20value\x20—\x20'+'the\x20difference\x20is\x20forfeited\x20even\x20on\x20a\x20no-fault\x20cancel.\x20Disclose\x20this\x20to\x20the\x20buyer\x20before\x20checkout.':'⚠\x20Benchmark\x20NOT\x20met\x20(list\x20total\x20'+x+'\x20<\x20'+a7+'):\x20the\x20chain\x20REJECTS\x20this\x20buy\x20when\x20the\x20coupon\x20is\x20attached\x20(error\x2038\x20—\x20full\x20rollback,\x20nothing\x20paid,\x20coupon\x20preserved).\x20Raise\x20the\x20basket\x20to\x20>=\x20'+a7+',\x20or\x20order\x20without\x20the\x20coupon\x20and\x20keep\x20it.'};}const A=balanceStr(h['compensation_fund']??0x0),B=/^\d+$/['test'](A['trim']())?BigInt(A['trim']()):0x0n,C=0x3n*y,D=C>B?C-B:0x0n,E=B/0x3n,F=await displayOf(E['toString'](),k,b),G={'fund_balance':B['toString'](),'fund_balance_display':await displayOf(B['toString'](),k,b),'max_coverable_order':E['toString'](),'max_coverable_order_display':F,'required_for_this_basket':C['toString'](),'required_display':await displayOf(C['toString'](),k,b),'shortfall':D['toString'](),'shortfall_display':await displayOf(D['toString'](),k,b),'covered':B>=C,'note':B===0x0n?'This\x20Service\x20runs\x20WITHOUT\x20a\x20compensation\x20fund\x20—\x20a\x20legitimate\x20merchant\x20choice,\x20never\x20blocked\x20at\x20buy.\x20An\x20arbitration\x20award\x20beyond\x20the\x20pool\x20aborts\x20the\x20buyer\x27s\x20payout\x20(code\x2027,\x20claim\x20NOT\x20consumed)\x20and\x20waits\x20on\x20the\x20merchant\x20wallet.':B>=C?'The\x20fund\x20covers\x203x\x20this\x20basket\x27s\x20amount\x20—\x20a\x20single\x20ruling\x20at\x20the\x20maximum\x20award\x20multiple\x20is\x20payable\x20from\x20the\x20pool.\x20Storefront\x20ceiling:\x20orders\x20above\x20'+F+'\x20(fund/3)\x20are\x20NOT\x20fully\x20covered\x20(they\x20proceed\x20with\x20a\x20buy-time\x20warning)\x20—\x20quote\x20a\x20bigger\x20basket\x20against\x20the\x20ceiling,\x20not\x20just\x20this\x20one.':'BELOW\x20the\x20per-order\x20payout\x20requirement\x20(compensation_fund_below_order_ceiling):\x20the\x20buy\x20still\x20PROCEEDS\x20with\x20a\x20warning\x20—\x20coverage\x20is\x20no\x20longer\x20enforced\x20pre-buy\x20(拍板⑤\x20dm-mtw-261027).\x20Risk\x20to\x20disclose\x20to\x20the\x20buyer\x20BEFORE\x20checkout:\x20if\x20a\x20ruling\x20awards\x20at\x20the\x20cap,\x20settlement\x20is\x20ALL-OR-NOTHING\x20—\x20the\x20claim\x20aborts\x20(code\x2027),\x20nothing\x20is\x20paid,\x20and\x20it\x20waits\x20on\x20the\x20merchant\x20topping\x20up\x20via\x20service.compensation_fund_add\x20by\x20'+await displayOf(D['toString'](),k,b)+'\x20(to\x20>=\x203x\x20this\x20basket).\x20Standing\x20ceiling:\x20orders\x20above\x20'+F+'\x20(fund/3)\x20are\x20not\x20fully\x20covered,\x20so\x20this\x20basket\x20is\x20only\x20the\x20latest\x20casualty\x20—\x20every\x20bigger\x20SKU\x20is\x20under-covered\x20too.'},H=await displayOf(y['toString'](),k,b),I=h['order_allocators'],J=Array['isArray'](I?.['allocators'])?I['allocators']:[],K=J['length']>0x0?J[0x0]:undefined,L=K?{'allocator_index':0x0,'note':'Sharing\x20rows\x20of\x20the\x20FIRST\x20order_allocator\x20(index\x200\x20—\x20NOT\x20necessarily\x20the\x20normal\x20'+'payout\x20path:\x20services\x20that\x20ship\x20refund-first\x20rails\x20put\x20the\x20refund\x20track\x20at\x20index\x200,\x20'+'klk15\x20C-06).\x20Guards\x20select\x20per-case\x20allocators\x20(refund\x20/\x20damage\x20/\x20late-cancel),\x20so\x20'+'the\x20LIVE\x20split\x20depends\x20on\x20which\x20guard\x20passes\x20—\x20identify\x20the\x20settlement\x20allocator\x20'+'via\x20service_panorama\x20before\x20ordering.','sharing':(Array['isArray'](K['sharing'])?K['sharing']:[])['map'](ab=>({'recipient':describeRecipient(ab?.['who']),'mode':typeof ab?.['mode']==='string'?ab['mode']:null,'value':balanceStr(ab?.['sharing']?.['balance']??ab?.['sharing']??0x0)}))}:null,M=Array['isArray'](h['rewards'])?h['rewards']['filter'](ab=>typeof ab==='string'&&ab!==''):[];let N=null;if(M['length']>0x0){const ab=[],ac=[];let ad=[];try{const ae=await query_objects({'objects':M,'network':b});ad=Array['isArray'](ae?.['objects'])?ae['objects']:[];}catch(af){ab['push']('Reward\x20lookup\x20failed\x20('+(af instanceof Error?af['message']:String(af))+')\x20—\x20reward\x20terms\x20NOT\x20verified;\x20do\x20not\x20rely\x20on\x20them.');}for(const ag of M){const ah=ad['find'](ay=>typeof ay?.['object']==='string'&&ay['object']['toLowerCase']()===ag['toLowerCase']());if(!ah){ab['push']('Reward\x20\x27'+ag+'\x27\x20could\x20not\x20be\x20read\x20—\x20its\x20terms\x20are\x20unknown;\x20do\x20not\x20rely\x20on\x20it.');continue;}const ai=balanceStr(ah['balance']??0x0),aj=/^\d+$/['test'](ai)?BigInt(ai):0x0n,ak=[];let al=0x0n,am=![];for(const ay of Array['isArray'](ah['guards'])?ah['guards']:[]){const az=ay?.['amount'],aA=az!=null&&(az['type']===0x1||az['type']==='Fixed'),aB=ay?.['expiration_time'],aC=aB==null?null:Number(aB),aD=aC!=null&&Number['isFinite'](aC)?aC:null;if(aA){const aE=balanceStr(az['value']??0x0),aF=/^\d+$/['test'](aE)?BigInt(aE):0x0n;if(aF>al)al=aF;ak['push']({'guard':String(ay?.['guard']??''),'amount_type':'fixed','amount':aE,'amount_display':await displayOf(aE,k,b),'expiration_time':aD,'expiration_display':aD!=null?new Date(aD)['toISOString']():null,'expired':aD!=null?Date['now']()>aD:null,'min_rating':null,'claim_window':null});}else am=!![],ak['push']({'guard':String(ay?.['guard']??''),'amount_type':'guard_submission','amount':'submission\x20identifier\x20'+String(az?.['value']??'?'),'amount_display':null,'expiration_time':aD,'expiration_display':aD!=null?new Date(aD)['toISOString']():null,'expired':aD!=null?Date['now']()>aD:null,'min_rating':null,'claim_window':null});}const an=Array['from'](new Set(ak['map'](aG=>aG['guard'])['filter'](aG=>aG!==''))),ao=new Map();if(an['length']>0x0)try{const aG=await query_objects({'objects':an,'network':b});for(const aH of Array['isArray'](aG?.['objects'])?aG['objects']:[]){if(typeof aH?.['object']==='string')ao['set'](aH['object']['toLowerCase'](),aH);}}catch{ab['push']('Claim\x20guard\x20lookup\x20failed\x20—\x20rating\x20conditions\x20on\x20'+an['length']+'\x20claim\x20guard(s)\x20NOT\x20verified;\x20do\x20not\x20promise\x20the\x20incentive.');}const ap=(aI,aJ=0x0)=>{if(!aI||typeof aI!=='object'||aJ>0x4)return null;if(aI['root']&&Array['isArray'](aI['table']))return aI;for(const aK of Object['values'](aI)){if(aK&&typeof aK==='object'){const aL=ap(aK,aJ+0x1);if(aL)return aL;}}return null;},aq=(aI,aJ)=>{const aK=aI['table']['find'](aM=>aM?.['identifier']===aJ&&aM?.['b_submission']===![]);if(!aK)return null;const aL=typeof aK['value']==='number'?aK['value']:Number(String(aK['value']??''));return Number['isFinite'](aL)?aL:null;},ar=(aI,aJ,aK=0x0)=>{if(!aI||typeof aI!=='object'||aK>0x18)return null;const aL=typeof aI['type']==='string'?aI['type']:'';if(aL==='logic_as_u256_greater_or_equal'||aL==='logic_as_u256_greater'||aL==='logic_as_u256_equal'){const aM=Array['isArray'](aI['nodes'])?aI['nodes']:[],aN=aM[0x0];if(aM['length']>=0x2&&JSON['stringify'](aN??{})['includes']('repository.data')){const aO=aM[aM['length']-0x1],aP=aO?.['type']==='identifier'?aq(aJ,Number(aO['identifier'])):typeof aO?.['value']==='number'?aO['value']:null;if(aP!=null){const aQ=aL==='logic_as_u256_greater_or_equal'?'>=':aL==='logic_as_u256_greater'?'>':'==';return aQ+'\x20'+aP;}}}for(const aR of Object['values'](aI)){if(Array['isArray'](aR))for(const aS of aR){const aT=ar(aS,aJ,aK+0x1);if(aT)return aT;}else{if(aR&&typeof aR==='object'){const aU=ar(aR,aJ,aK+0x1);if(aU)return aU;}}}return null;};for(const aI of ak){aI['min_rating']=null;const aJ=ao['get'](aI['guard']['toLowerCase']());if(!aJ)continue;{const aO=ap(aJ),aP=aO?parseGuardTimeBounds(aO['root'],aO['table']):null;aP&&(aI['claim_window']={'opens_after_s':aP['lowerOffsetMs']!=null?aP['lowerOffsetMs']/0x3e8:null,'closes_after_s':aP['upperWindowMs']!=null?aP['upperWindowMs']/0x3e8:null,'anchor':aP['anchor']});}let aK;try{aK=JSON['stringify'](aJ,(aQ,aR)=>aR instanceof Uint8Array?Buffer['from'](aR)['toString']('base64'):aR);}catch{continue;}const aL=aK['includes']('\x22rating\x22')||aK['includes']('114,97,116,105,110,103')||aK['toLowerCase']()['includes']('726174696e67')||aK['includes']('cmF0aW5n');if(!aL)continue;const aM=ap(aJ),aN=aM?ar(aM['root'],aM):null;if(aN)aI['min_rating']=aN;else{const aQ=aK['toLowerCase']();if(aQ['includes']('\x22like\x22'))aI['min_rating']='like';else{if(aQ['includes']('\x22dislike\x22'))aI['min_rating']='dislike';else aI['min_rating']='unknown';}}}let as='';if(al>0x0n&&n>0x0n){const aR=Number(al)/Number(n);Number['isFinite'](aR)&&(as='\x20Bounty/cheapest-SKU\x20price\x20ratio:\x20'+aR['toFixed'](0x2)+'x\x20'+('('+await displayOf(al['toString'](),k,b)+'\x20vs\x20')+(await displayOf(n['toString'](),k,b)+').')+(aR>0.5?'\x20⚠\x20SCALE\x20(T-02):\x20each\x20claimed\x20order\x20pays\x20out\x20MORE\x20than\x20the\x20cheapest\x20sale\x20earns\x20—\x20a\x20bounty-farm\x20shape;\x20a\x20sybil\x20can\x20mint\x20cheap\x20orders\x20and\x20drain\x20this\x20pool.\x20Rebalance\x20the\x20bounty\x20or\x20the\x20catalog\x20before\x20funding.':''));}const at=aj===0x0n?'Pool\x20is\x20EMPTY\x20—\x20any\x20claim\x20aborts\x20on-chain\x20on\x20the\x20reward\x20module\x27s\x20E_INSUFFICIENT_BALANCE\x20(not\x20the\x20allocation\x20module\x27s\x20same-named\x20constant);\x20do\x20not\x20budget\x20on\x20this\x20reward.':am||al===0x0n?null:'Pool\x20covers\x20~'+(aj/al)['toString']()+'\x20further\x20claim(s)\x20at\x20the\x20largest\x20configured\x20per-claim\x20amount.'+as,au=Array['isArray'](ah['guards'])?ah['guards']:[],av=au['filter'](aS=>aS?.['store_from_id']!=null)['map'](aS=>Number(aS['store_from_id'])),aw=((()=>{if(au['length']===0x0)return{'scope':'unknown','detail':'No\x20mounted\x20guard\x20entry\x20was\x20readable,\x20so\x20the\x20claim\x20scope\x20could\x20not\x20be\x20determined\x20—\x20do\x20not\x20assume\x20a\x20per-order\x20bounty.','per_order_note':PER_ORDER_REPLAY_NOTE};if(av['length']===au['length']&&av['every'](aS=>aS===0x0))return{'scope':'once_per_order','detail':'Every\x20claim\x20entry\x20stamps\x20store_from_id=0\x20(the\x20conventional\x20submitted-Order\x20slot):\x20claims\x20are\x20keyed\x20per\x20(recipient,\x20guard,\x20order)\x20—\x20the\x20same\x20buyer\x20can\x20claim\x20again\x20on\x20a\x20NEW\x20order,\x20never\x20twice\x20on\x20the\x20same\x20one\x20(a\x20replay\x20aborts\x2013,\x20E_CLAIM_ALREADY_MADE).','per_order_note':PER_ORDER_REPLAY_NOTE};if(av['length']===au['length'])return{'scope':'once_per_stamp','detail':'Every\x20claim\x20entry\x20carries\x20a\x20store_from_id\x20stamp,\x20but\x20not\x20the\x20conventional\x20Order\x20slot\x200\x20(slots:\x20'+av['join'](',\x20')+'):\x20claims\x20are\x20keyed\x20per\x20(recipient,\x20guard,\x20stamped\x20value)\x20—\x20per-ORDER\x20only\x20when\x20that\x20slot\x20is\x20the\x20submitted\x20Order.','per_order_note':PER_ORDER_REPLAY_NOTE};if(av['length']===0x0)return{'scope':'once_per_recipient_guard','detail':'Every\x20claim\x20entry\x20has\x20an\x20EMPTY\x20store_from\x20slot:\x20ONE\x20claim\x20per\x20(recipient,\x20guard)\x20for\x20LIFE\x20—\x20the\x20same\x20buyer\x27s\x20second\x20order\x20claims\x20nothing\x20(abort\x2013,\x20E_CLAIM_ALREADY_MADE),\x20even\x20when\x20the\x20bounty\x20is\x20described\x20as\x20per-order.','per_order_note':PER_ORDER_REPLAY_NOTE};return{'scope':'mixed','detail':av['length']+'\x20of\x20'+au['length']+'\x20claim\x20entries\x20carry\x20a\x20store_from_id\x20stamp\x20—\x20those\x20are\x20per-stamp\x20scoped;\x20the\x20remaining\x20entries\x20are\x20once\x20per\x20(recipient,\x20guard)\x20for\x20life.\x20Read\x20each\x20claims[]\x20row.','per_order_note':PER_ORDER_REPLAY_NOTE};})()),ax=ak['filter'](aS=>aS['min_rating']==='unknown')['length'];ax>0x0&&ab['push'](ax+'\x20claim(s)\x20gate\x20on\x20a\x20rating\x20condition\x20whose\x20polarity\x20could\x20not\x20be\x20parsed\x20'+'(min_rating=unknown)\x20—\x20read\x20the\x20claim\x20guard\x20before\x20promising\x20this\x20incentive\x20to\x20the\x20buyer'),ac['push']({'reward':ag,'description':typeof ah['description']==='string'?ah['description']:null,'pool_balance':aj['toString'](),'pool_balance_display':await displayOf(aj['toString'](),k,b),'record_count':Number['isFinite'](Number(ah['record_count']))?Number(ah['record_count']):0x0,'claims':ak,'replay_scope':aw,'coverage':at});}N={'note':'Pre-order\x20reward\x20terms\x20for\x20every\x20Reward\x20hung\x20on\x20this\x20Service\x20(bound\x20at\x20build\x20time):\x20pool\x20balance,\x20'+'per-claim\x20amount\x20and\x20claim\x20windows.\x20A\x20claim\x20aborts\x20after\x20its\x20window\x20(E_GUARD_EXPIRED)\x20or\x20'+'against\x20an\x20empty\x20pool\x20(E_INSUFFICIENT_BALANCE)\x20—\x20never\x20budget\x20on\x20an\x20expired\x20or\x20empty\x20'+'reward.\x20Claiming\x20requires\x20passing\x20the\x20claim\x20guard\x27s\x20conditions.','rewards':ac,'data_gaps':ab};}let O=null;try{const aS=await LocalMark['Instance']()['list']({'address':d});O=aS?.[0x0]?.['name']??null;}catch{O=null;}return{'action':'service_quote','network':String(b),'service':{'address':d,'name':O},'paused':q,'payment_token':{'coin_type':k,'display_note':k?'Prices\x20and\x20the\x20order\x20total\x20are\x20denominated\x20in\x20this\x20token\x27s\x20smallest\x20units;\x20displays\x20convert\x20with\x20the\x20token\x27s\x20on-chain\x20precision.':'Payment\x20token\x20could\x20not\x20be\x20parsed\x20from\x20the\x20Service\x20type\x20—\x20raw\x20smallest\x20units\x20only,\x20precision\x20NOT\x20guessed.'},'items':w,'total_pay':{'balance':y['toString'](),'display':H,'note':(q?'⚠\x20SERVICE\x20PAUSED\x20(bs29\x20R-16):\x20this\x20Service\x20is\x20currently\x20paused\x20—\x20every\x20buy\x20is\x20refused\x20'+'(client\x20pre-buy\x20gate,\x20then\x20the\x20on-chain\x20E_PAUSED\x20assert,\x20service.move:526)\x20while\x20the\x20pause\x20'+'stands,\x20and\x20there\x20is\x20NO\x20on-chain\x20scheduled\x20resume:\x20the\x20merchant\x20must\x20submit\x20pause:false.\x20'+'The\x20prices\x20below\x20are\x20reference\x20only.\x20':'')+(y===0x0n?'DEAD\x20BASKET\x20(F-BS-75):\x20this\x20quote\x20totals\x20ZERO\x20—\x20the\x20chain\x20REFUSES\x20zero-total\x20buys\x20(client\x20'+'order_new_zero_total_dead_order,\x20on-chain\x20abort\x2042),\x20so\x20this\x20basket\x20cannot\x20be\x20purchased\x20at\x20'+'all.\x20Either\x20the\x20basket\x20contains\x20a\x20zero-priced\x20SKU\x20(permanently\x20unbuyable\x20—\x20F-BS-76;\x20the\x20'+'merchant\x20must\x20reprice\x20it\x20to\x20>=\x201\x20smallest\x20unit)\x20or\x20a\x20coupon\x20zeroes\x20it\x20(lower\x20the\x20coupon\x20'+'value).\x20Do\x20NOT\x20attempt\x20the\x20buy.\x20allow_zero_total\x20waives\x20nothing\x20(BSX-F07).':z?.['applied']?'FLOOR\x20semantics\x20(bs29\x20R-17,\x20service.move:480-481):\x20order_new.buy.total_pay.balance\x20must\x20be\x20>=\x20'+'this\x20discounted\x20total\x20—\x20an\x20under-funded\x20total\x20aborts\x20(E_COIN_NOT_ENOUGH);\x20an\x20over-funded\x20one\x20'+'succeeds\x20but\x20the\x20ORDER\x20still\x20escrows\x20exactly\x20this\x20amount\x20(the\x20excess\x20is\x20split\x20back,\x20never\x20'+'escrowed).\x20Pass\x20exactly\x20this\x20value.\x20The\x20on-chain\x20buy\x20aborts\x20only\x20on\x20an\x20UNDER-funded\x20total;\x20'+'the\x20coupon\x20is\x20consumed\x20at\x20buy.':'FLOOR\x20semantics\x20(bs29\x20R-17,\x20service.move:480-481):\x20order_new.buy.total_pay.balance\x20must\x20be\x20>=\x20'+'this\x20total\x20—\x20an\x20under-funded\x20total\x20aborts\x20(E_COIN_NOT_ENOUGH);\x20an\x20over-funded\x20one\x20'+'succeeds\x20but\x20the\x20ORDER\x20still\x20escrows\x20exactly\x20Σ(unit_price\x20×\x20quantity)\x20—\x20the\x20excess\x20is\x20split\x20'+'back\x20to\x20the\x20payer\x20and\x20never\x20enters\x20the\x20escrow.\x20WITHOUT\x20a\x20discount\x20you\x20may\x20also\x20omit\x20'+'total_pay\x20entirely:\x20the\x20buy\x20auto-derives\x20this\x20exact\x20total\x20(M-K17).')},'discount':z,'allocation_preview':L,'compensation_fund_coverage':G,'reward_terms':N};}
|