@wowok/agent-mcp 3.0.4 → 3.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -20
- package/dist/customer/account-events.js +1 -1
- package/dist/evaluation/path-reasoning.d.ts +4 -2
- package/dist/evaluation/path-reasoning.js +1 -1
- package/dist/extensions/constraint-registry.d.ts +2 -2
- package/dist/extensions/constraint-registry.js +1 -1
- package/dist/extensions/custom-registry-file.d.ts +22 -0
- package/dist/extensions/custom-registry-file.js +1 -0
- package/dist/extensions/index.d.ts +2 -1
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-pack.d.ts +7 -0
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/metric-registry.d.ts +2 -2
- package/dist/extensions/metric-registry.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/extensions/registry.d.ts +2 -2
- package/dist/extensions/registry.js +1 -1
- package/dist/extensions/types.d.ts +4 -0
- package/dist/goal/GoalEngine.d.ts +13 -1
- package/dist/goal/GoalEngine.js +1 -1
- package/dist/goal/next-steps.d.ts +12 -0
- package/dist/goal/next-steps.js +1 -0
- package/dist/goal/pursue.d.ts +18 -0
- package/dist/goal/pursue.js +1 -0
- package/dist/goal/types.d.ts +72 -0
- package/dist/goal/types.js +1 -1
- package/dist/graph/onchain/analyze.d.ts +44 -0
- package/dist/graph/onchain/analyze.js +1 -0
- package/dist/graph/onchain/analyze.spec.d.ts +1 -0
- package/dist/graph/onchain/analyze.spec.js +1 -0
- package/dist/graph/onchain/anti-cheat.d.ts +39 -0
- package/dist/graph/onchain/anti-cheat.js +1 -0
- package/dist/graph/onchain/anti-cheat.spec.d.ts +1 -0
- package/dist/graph/onchain/anti-cheat.spec.js +1 -0
- package/dist/graph/onchain/dataplane.d.ts +44 -0
- package/dist/graph/onchain/dataplane.js +1 -0
- package/dist/graph/onchain/edge-schema.d.ts +60 -0
- package/dist/graph/onchain/edge-schema.js +1 -0
- package/dist/graph/onchain/expand.d.ts +4 -0
- package/dist/graph/onchain/expand.js +1 -0
- package/dist/graph/onchain/extract.d.ts +21 -0
- package/dist/graph/onchain/extract.js +1 -0
- package/dist/graph/onchain/index.d.ts +17 -0
- package/dist/graph/onchain/index.js +1 -0
- package/dist/graph/onchain/interest.d.ts +10 -0
- package/dist/graph/onchain/interest.js +1 -0
- package/dist/graph/onchain/interest.spec.d.ts +1 -0
- package/dist/graph/onchain/interest.spec.js +1 -0
- package/dist/graph/onchain/onchain.spec.d.ts +1 -0
- package/dist/graph/onchain/onchain.spec.js +1 -0
- package/dist/graph/onchain/order-status.d.ts +53 -0
- package/dist/graph/onchain/order-status.js +1 -0
- package/dist/graph/onchain/project-relationship.d.ts +3 -0
- package/dist/graph/onchain/project-relationship.js +1 -0
- package/dist/graph/onchain/sdk-batch.d.ts +123 -0
- package/dist/graph/onchain/sdk-batch.js +1 -0
- package/dist/graph/onchain/sdk-dataplane.d.ts +43 -0
- package/dist/graph/onchain/sdk-dataplane.js +1 -0
- package/dist/graph/onchain/strategy.d.ts +54 -0
- package/dist/graph/onchain/strategy.js +1 -0
- package/dist/graph/onchain/strategy.spec.d.ts +1 -0
- package/dist/graph/onchain/strategy.spec.js +1 -0
- package/dist/graph/onchain/types.d.ts +238 -0
- package/dist/graph/onchain/types.js +1 -0
- package/dist/graph/onchain/viewport.d.ts +5 -0
- package/dist/graph/onchain/viewport.js +1 -0
- package/dist/harness/recover.js +1 -1
- package/dist/index.js +1 -1
- package/dist/intent/enrich.js +1 -1
- package/dist/keeper/detectors.d.ts +1 -1
- package/dist/keeper/detectors.js +1 -1
- package/dist/knowledge/account-marks.js +1 -1
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocation-templates.js +1 -1
- package/dist/knowledge/anti-cheat.d.ts +2 -37
- package/dist/knowledge/anti-cheat.js +1 -1
- package/dist/knowledge/contract-invariants.js +1 -1
- package/dist/knowledge/getting-started.d.ts +37 -0
- package/dist/knowledge/getting-started.js +1 -0
- package/dist/knowledge/goal-completion.d.ts +12 -0
- package/dist/knowledge/goal-completion.js +1 -1
- package/dist/knowledge/guard-render.d.ts +1 -0
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-submission-brief.d.ts +83 -0
- package/dist/knowledge/guard-submission-brief.js +1 -0
- package/dist/knowledge/guard-submission-prompt.d.ts +13 -0
- package/dist/knowledge/guard-submission-prompt.js +1 -1
- package/dist/knowledge/index.d.ts +10 -4
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-strategy.d.ts +91 -0
- package/dist/knowledge/industry-strategy.js +1 -0
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/market-metrics.d.ts +14 -3
- package/dist/knowledge/market-metrics.js +1 -1
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/operation-dictionary.d.ts +1 -1
- package/dist/knowledge/payment-tracker.d.ts +63 -0
- package/dist/knowledge/payment-tracker.js +1 -0
- package/dist/knowledge/recipient-constraint.d.ts +160 -0
- package/dist/knowledge/recipient-constraint.js +1 -0
- package/dist/knowledge/safety-rules.d.ts +1 -1
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-topology.d.ts +6 -1
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/service-risk-node.d.ts +3 -0
- package/dist/knowledge/service-risk-node.js +1 -0
- package/dist/knowledge/service-risk.d.ts +2 -0
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/service-templates.d.ts +2 -0
- package/dist/knowledge/service-templates.js +1 -1
- package/dist/knowledge/strategy-manuals.d.ts +17 -0
- package/dist/knowledge/strategy-manuals.js +1 -0
- package/dist/knowledge/supply-chain.d.ts +3 -1
- package/dist/knowledge/supply-chain.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +3 -118
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.d.ts +4 -0
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/monitor/ScopeResolver.js +1 -1
- package/dist/participation/arbitrator-interest.d.ts +2 -0
- package/dist/participation/arbitrator-interest.js +1 -1
- package/dist/participation/collaborator-interest.d.ts +2 -0
- package/dist/participation/collaborator-interest.js +1 -1
- package/dist/participation/customer-interest.d.ts +2 -0
- package/dist/participation/customer-interest.js +1 -1
- package/dist/participation/merchant-interest.d.ts +2 -0
- package/dist/participation/merchant-interest.js +1 -1
- package/dist/participation/radar-core.d.ts +15 -15
- package/dist/participation/radar-core.js +1 -1
- package/dist/participation/supplier-interest.d.ts +2 -0
- package/dist/participation/supplier-interest.js +1 -1
- package/dist/persona/analyzer.d.ts +2 -1
- package/dist/persona/bridge.d.ts +5 -1
- package/dist/persona/bridge.js +1 -1
- package/dist/persona/defaults.js +1 -1
- package/dist/persona/distill-goal.d.ts +7 -1
- package/dist/persona/distill-goal.js +1 -1
- package/dist/persona/index.d.ts +13 -3
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.d.ts +12 -2
- package/dist/persona/model.js +1 -1
- package/dist/persona/overrides.d.ts +1 -0
- package/dist/persona/overrides.js +1 -1
- package/dist/persona/topology-focus.d.ts +29 -0
- package/dist/persona/topology-focus.js +1 -0
- package/dist/persona/types.d.ts +81 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/context-assembly.js +1 -1
- package/dist/playbooks/service-build/machine-nodes.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +7 -0
- package/dist/playbooks/service-build/merchant-guide.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/pipeline-actions.d.ts +2 -2
- package/dist/playbooks/service-build/pipeline-actions.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.d.ts +1 -0
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/risk-aggregator.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +4 -0
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/topology-query.d.ts +14 -0
- package/dist/playbooks/service-build/topology-query.js +1 -0
- package/dist/relationship/derivation.js +1 -1
- package/dist/role/index.d.ts +1 -0
- package/dist/role/index.js +1 -1
- package/dist/role/profiles.d.ts +26 -0
- package/dist/role/profiles.js +1 -0
- package/dist/safety/confirm-gate.d.ts +4 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/allocation.d.ts +6 -6
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +1 -1
- package/dist/schema/call/guard.d.ts +20 -20
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +4 -4
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/employee/index.d.ts +7 -7
- package/dist/schema/evaluation/index.d.ts +26 -13
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +53 -17
- package/dist/schema/goal/index.js +1 -1
- package/dist/schema/goal/planning.d.ts +7 -7
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +13 -6
- package/dist/schema/industry-pack/index.js +1 -1
- package/dist/schema/industry-pack/modes.d.ts +6 -6
- package/dist/schema/intent-radar/index.d.ts +16 -16
- package/dist/schema/local/index.d.ts +8 -4
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +428 -72
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +177 -34
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +15744 -1
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +891 -24
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +168 -43
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +16 -0
- package/dist/schema/schema-query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/strategy-review/index.d.ts +137 -0
- package/dist/schema/strategy-review/index.js +1 -0
- package/dist/schema/trust/index.d.ts +6 -6
- package/dist/schema/workflow/index.d.ts +2 -2
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +8 -4
- package/dist/schemas/account_operation.schema.json +6 -2
- package/dist/schemas/bridge_operation.schema.json +10 -10
- package/dist/schemas/evaluation_operation.output.json +24 -0
- package/dist/schemas/evaluation_operation.schema.json +7 -7
- package/dist/schemas/goal_operation.schema.json +124 -0
- package/dist/schemas/guard2file.schema.json +2 -2
- package/dist/schemas/index.json +7 -1
- package/dist/schemas/industry_pack_operation.output.json +39 -0
- package/dist/schemas/local_mark_operation.schema.json +2 -2
- package/dist/schemas/machineNode2file.schema.json +2 -2
- package/dist/schemas/messenger_operation.output.json +934 -236
- package/dist/schemas/messenger_operation.schema.json +93 -242
- package/dist/schemas/onchain_events.schema.json +1 -1
- package/dist/schemas/onchain_operations.schema.json +54 -54
- package/dist/schemas/onchain_operations_allocation.schema.json +5 -5
- package/dist/schemas/onchain_operations_arbitration.schema.json +2 -2
- package/dist/schemas/onchain_operations_contact.schema.json +2 -2
- package/dist/schemas/onchain_operations_demand.schema.json +2 -2
- package/dist/schemas/onchain_operations_gen_passport.schema.json +2 -2
- package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
- package/dist/schemas/onchain_operations_guard.schema.json +2 -2
- package/dist/schemas/onchain_operations_machine.schema.json +8 -8
- package/dist/schemas/onchain_operations_order.schema.json +2 -2
- package/dist/schemas/onchain_operations_payment.schema.json +3 -3
- package/dist/schemas/onchain_operations_permission.schema.json +2 -2
- package/dist/schemas/onchain_operations_personal.schema.json +2 -2
- package/dist/schemas/onchain_operations_progress.schema.json +2 -2
- package/dist/schemas/onchain_operations_proof.schema.json +2 -2
- package/dist/schemas/onchain_operations_repository.schema.json +5 -5
- package/dist/schemas/onchain_operations_reward.schema.json +2 -2
- package/dist/schemas/onchain_operations_service.schema.json +5 -5
- package/dist/schemas/onchain_operations_treasury.schema.json +4 -4
- package/dist/schemas/onchain_table_data.output.json +197 -13
- package/dist/schemas/onchain_table_data.schema.json +43 -43
- package/dist/schemas/persona_operation.output.json +37778 -262
- package/dist/schemas/persona_operation.schema.json +5960 -1
- package/dist/schemas/query_toolkit.output.json +1615 -10
- package/dist/schemas/query_toolkit.schema.json +232 -42
- package/dist/schemas/schema_query.schema.json +25 -1
- package/dist/schemas/strategy_review_operation.output.json +532 -0
- package/dist/schemas/strategy_review_operation.schema.json +66 -0
- package/dist/schemas/wowok_buildin_info.output.json +188 -6
- package/dist/schemas/wowok_buildin_info.schema.json +14 -0
- package/dist/strategy/collectors.d.ts +66 -0
- package/dist/strategy/collectors.js +1 -0
- package/dist/strategy/collectors.spec.d.ts +1 -0
- package/dist/strategy/collectors.spec.js +1 -0
- package/dist/strategy/index.d.ts +5 -0
- package/dist/strategy/index.js +1 -0
- package/dist/strategy/metrics.d.ts +20 -0
- package/dist/strategy/metrics.js +1 -0
- package/dist/strategy/review.d.ts +48 -0
- package/dist/strategy/review.js +1 -0
- package/dist/strategy/scorecard.d.ts +32 -0
- package/dist/strategy/scorecard.js +1 -0
- package/dist/strategy/store.d.ts +26 -0
- package/dist/strategy/store.js +1 -0
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/goal.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/permission.js +1 -1
- package/dist/tools/handlers/persona.js +1 -1
- package/dist/tools/handlers/query.d.ts +6 -0
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/strategy-review.d.ts +2 -0
- package/dist/tools/handlers/strategy-review.js +1 -0
- package/dist/tools/handlers/watch.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/agent.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/registry/messenger.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/rules-hook.d.ts +2 -0
- package/dist/tools/rules-hook.js +1 -1
- package/dist/tools/shared.d.ts +2 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type EdgeSchema } from "./edge-schema.js";
|
|
2
|
+
import type { RawObject, TableItem, TopoEdgePayload } from "./types.js";
|
|
3
|
+
export declare function normAddr(v: unknown): string | undefined;
|
|
4
|
+
export declare function rootOf(raw: RawObject | undefined): Record<string, unknown>;
|
|
5
|
+
export interface RawRef {
|
|
6
|
+
to: string;
|
|
7
|
+
from?: string;
|
|
8
|
+
payload?: TopoEdgePayload;
|
|
9
|
+
key?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ExtractedEdges {
|
|
12
|
+
schemaId: string;
|
|
13
|
+
refs: RawRef[];
|
|
14
|
+
}
|
|
15
|
+
export declare function wfNodeId(machine: string, name: string): string;
|
|
16
|
+
export declare function extractReverseRefs(parent: string, field: unknown): RawRef[];
|
|
17
|
+
export declare function extractTableRefs(schemaId: string, sourceId: string, items: TableItem[]): ExtractedEdges[];
|
|
18
|
+
export declare function inferObjectType(addr: string): string | undefined;
|
|
19
|
+
export declare function extractCoinType(typeRaw: unknown): string | undefined;
|
|
20
|
+
export declare function extractObjectEdges(objectType: string, raw: RawObject): ExtractedEdges[];
|
|
21
|
+
export declare function schemaById(id: string): EdgeSchema | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{objectTypeFromAddress}from'@wowok/wowok';import{EDGE_SCHEMAS}from'./edge-schema.js';const ADDR_RE=/^0x[0-9a-f]{64}$/;export function normAddr(a){if(typeof a!=='string')return undefined;const b=a['trim']()['toLowerCase']();return ADDR_RE['test'](b)?b:undefined;}export function rootOf(a){const b=a;return b?.['data']??b??{};}function dig(a,b){return b['split']('.')['reduce']((c,d)=>{if(c==null)return undefined;return c[d];},a);}function asArray(a){if(Array['isArray'](a))return a;if(a==null)return[];return[a];}function addrOf(a,b){if(typeof a==='string')return normAddr(a);if(a&&typeof a==='object'){const c=a;return normAddr(c[b]??c['guard']??c['address']??c['who']);}return undefined;}function deepAddrs(b,c,d){let e=b;for(const g of c){if(Array['isArray'](e))e=e['flatMap'](h=>asArray(h?.[g]));else e&&typeof e==='object'?e=e[g]:e=undefined;}const f=[];for(const h of asArray(e)){if(typeof h==='string'){const i=normAddr(h);if(i)f['push']({'addr':i,'item':{}});}else{if(h&&typeof h==='object'){const j=h,k=addrOf(j,d||'guard');if(k)f['push']({'addr':k,'item':j});}}}return f;}export function wfNodeId(a,b){return(normAddr(a)??a['toLowerCase']())+'::node::'+b;}function strAmt(a){if(a==null)return undefined;if(typeof a==='bigint')return a['toString']();const b=String(a);return b===''?undefined:b;}function extractFieldEdges(b,c,d){const e=rootOf(c),f=[];for(const g of EDGE_SCHEMAS){if(g['source']!==b)continue;const i=g['read'];if(i['kind']==='reverse'||i['kind']==='table'||i['kind']==='derived')continue;let j=[];switch(i['kind']){case'field':{const k=addrOf(dig(e,i['path']),'guard');if(k)j=[{'to':k}];break;}case'fields':{j=asArray(dig(e,i['path']))['map'](l=>addrOf(l,'guard'))['filter'](l=>!!l)['map'](l=>({'to':l}));break;}case'structFields':{j=asArray(dig(e,i['path']))['map'](l=>{const m=addrOf(l,i['field']);if(!m)return undefined;const n=typeof l==='object'&&l?l:{};return{'to':m,'payload':payloadFor(g['id'],n,d)};})['filter'](l=>!!l);break;}case'deep':{if(g['id']==='progress.named_operator'){const l=asArray(e['namedOperator']);for(const m of l){const n=m??{};for(const p of asArray(n['operators'])){const q=normAddr(p);if(q)j['push']({'to':q,'key':String(n['name']??''),'payload':{'namedOperator':n['name']!=null?String(n['name']):null}});}}}else j=deepAddrs(e,i['segments'],i['field'])['map'](({addr:r,item:s})=>({'to':r,'payload':payloadFor(g['id'],s,d)}));break;}}g['family']==='M'&&d&&(j=j['map'](s=>({...s,'payload':{'coinType':d,...s['payload']}})));if(j['length']>0x0)f['push']({'schemaId':g['id'],'refs':j});}return f;}function payloadFor(a,b,c){switch(a){case'payment.recipient':{const d=strAmt(b['amount']);return d!=null?{'amount':d,'coinType':c}:undefined;}case'arb.voter':return{'weight':Number(b['weight']??0x0)||undefined};case'allocation.guard':case'service.order_allocator_guard':return b['mode']!=null?{'mode':clampMode(Number(b['mode']))}:undefined;default:return undefined;}}function clampMode(a){return a===0x1||a===0x2?a:0x0;}export function extractReverseRefs(a,b){const c=b??{},e=[];if(a==='0xaaa'){for(const f of asArray(c['votes'])){const g=f??{},h=normAddr(g['who']);if(!h)continue;e['push']({'to':h,'payload':{'voteBits':(g['like']?0x2:0x0)|(g['dislike']?0x4:0x0)|(g['favor']?0x8:0x0),'voteLike':!!g['like'],'voteDislike':!!g['dislike'],'voteFavor':!!g['favor']}});}return e;}for(const i of asArray(c['items'])){const j=i??{},k=normAddr(j['permission']??j['contact']??j['order']??j['who']);if(!k)continue;const l=j['role']!=null?Number(j['role']):undefined;e['push']({'to':k,'payload':l!=null?{'roleBits':l}:undefined});}return e;}export function extractTableRefs(a,b,c){switch(a){case'permission.entity':{const e=[];for(const f of c){const g=rootOf(f['object']),h=normAddr(g['address']),i=Array['isArray'](g['perm'])?g['perm']['map'](Number):[];if(h)e['push']({'to':h,'payload':{'permIndices':i}});}return e['length']?[{'schemaId':a,'refs':e}]:[];}case'demand.presenter':{const j=[];for(const k of c){const l=rootOf(k['object']),m=normAddr(l['address']);if(!m)continue;j['push']({'to':m,'payload':{'service':normAddr(l['service'])??undefined,'score':l['acceptance_score']!=null?Number(l['acceptance_score']):undefined,'recommend':l['recommend']!=null?String(l['recommend']):undefined}});}return j['length']?[{'schemaId':a,'refs':j}]:[];}case'machine.node':return extractMachineTable(b,c);default:return[];}}function extractMachineTable(a,b){const c=[],e=[],g=[],h=new Set(),i=k=>{const l=String(k??'')['trim']();if(!l)return undefined;const m=wfNodeId(a,l);return!h['has'](m)&&(h['add'](m),c['push']({'to':m,'key':l,'payload':{'node':l}})),m;};for(const k of b){const l=rootOf(k['object']),m=String(l['name']??''),n=i(m);if(!n)continue;for(const o of asArray(l['value'])){const q=o??{},r=String(q['prev_node']??'')['trim']();if(r)i(r);const s=r?wfNodeId(a,r):undefined,t=Number(q['threshold']??0x0);for(const u of asArray(q['forwards'])){const v=u??{},w=String(v['name']??''),x=addrOf(v['guard'],'guard');s&&e['push']({'from':s,'to':n,'key':w||undefined,'payload':{'forward':w||undefined,'prevNode':r||undefined,'node':m,'threshold':t||undefined,'guard':x??undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}}),x&&g['push']({'to':x,'key':w||undefined,'payload':{'forward':w||undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}});}}}const j=[];if(c['length'])j['push']({'schemaId':'machine.node','refs':c});if(e['length'])j['push']({'schemaId':'wf.transition','refs':e});if(g['length'])j['push']({'schemaId':'wf.forward_guard','refs':g});return j;}export function inferObjectType(a){return objectTypeFromAddress(a)??undefined;}export function extractCoinType(a){if(typeof a!=='string'||!a['includes']('<'))return undefined;const b=a['slice'](a['indexOf']('<')+0x1,a['lastIndexOf']('>'));return b['trim']()||undefined;}export function extractObjectEdges(a,b){return extractFieldEdges(a,b,extractCoinType(b['type_raw']));}export function schemaById(a){return EDGE_SCHEMAS['find'](b=>b['id']===a);}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./edge-schema.js";
|
|
3
|
+
export * from "./extract.js";
|
|
4
|
+
export * from "./order-status.js";
|
|
5
|
+
export { MAX_OBJECTS_PER_QUERY, DEFAULT_BUDGET, mergeBudget, chunk50, mapPool, FakeDataPlane } from "./dataplane.js";
|
|
6
|
+
export type { FakePlaneState } from "./dataplane.js";
|
|
7
|
+
export { SdkDataPlane } from "./sdk-dataplane.js";
|
|
8
|
+
export * from "./sdk-batch.js";
|
|
9
|
+
export { expandTopology, orderCompletionInGraph } from "./expand.js";
|
|
10
|
+
export { TOPOLOGY_INTENTS, INTENT_PRESETS, resolveExpansionStrategy, isTopologyIntent, normalizeTopologyFocusPref, type TopologyIntent, type IntentPreset, type StrategyFragment, type ExpansionStrategy, type StrategyResolutionInput, type ExplicitExpansionParams, type TopologyFocusPref, } from "./strategy.js";
|
|
11
|
+
export { detectFakeOrders, detectFakeReviews, detectShellMerchant, reputationTradeNote, assessAntiCheat, } from "./anti-cheat.js";
|
|
12
|
+
export type { AntiCheatSeverity, AntiCheatSignal, OrderEvidence, ReviewEvidence, MerchantEvidence, } from "./anti-cheat.js";
|
|
13
|
+
export { buildViewport, edgesOut, edgesInc, nodeOf } from "./viewport.js";
|
|
14
|
+
export { buildRoleInterest, toCommercialRole, viewerRoleOf, type RoleInterestResult, } from "./interest.js";
|
|
15
|
+
export { buildControlIndex } from "./analyze.js";
|
|
16
|
+
export { projectRelationshipFacts } from "./project-relationship.js";
|
|
17
|
+
export { DEFAULT_ANALYZERS, registerAnalyzer, getAnalyzer, listAnalyzers, runAnalyzers, adaptNodeAnalyzer, runNodeAnalyzers, pathConfidence, type NodeRuleBinding, type NodeRuleOutcome, } from "./analyze.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from'./types.js';export*from'./edge-schema.js';export*from'./extract.js';export*from'./order-status.js';export{MAX_OBJECTS_PER_QUERY,DEFAULT_BUDGET,mergeBudget,chunk50,mapPool,FakeDataPlane}from'./dataplane.js';export{SdkDataPlane}from'./sdk-dataplane.js';export*from'./sdk-batch.js';export{expandTopology,orderCompletionInGraph}from'./expand.js';export{TOPOLOGY_INTENTS,INTENT_PRESETS,resolveExpansionStrategy,isTopologyIntent,normalizeTopologyFocusPref}from'./strategy.js';export{detectFakeOrders,detectFakeReviews,detectShellMerchant,reputationTradeNote,assessAntiCheat}from'./anti-cheat.js';export{buildViewport,edgesOut,edgesInc,nodeOf}from'./viewport.js';export{buildRoleInterest,toCommercialRole,viewerRoleOf}from'./interest.js';export{buildControlIndex}from'./analyze.js';export{projectRelationshipFacts}from'./project-relationship.js';export{DEFAULT_ANALYZERS,registerAnalyzer,getAnalyzer,listAnalyzers,runAnalyzers,adaptNodeAnalyzer,runNodeAnalyzers,pathConfidence}from'./analyze.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CommercialRole } from "../../role/types.js";
|
|
2
|
+
import { type PersonaDrive } from "../../evaluation/game-strategy.js";
|
|
3
|
+
import type { Finding, InterestPayload, TopologyGraph, ViewerRole } from "./types.js";
|
|
4
|
+
export declare function toCommercialRole(role: string): CommercialRole;
|
|
5
|
+
export declare function viewerRoleOf(role: CommercialRole): ViewerRole;
|
|
6
|
+
export interface RoleInterestResult {
|
|
7
|
+
finding: Finding;
|
|
8
|
+
view: InterestPayload;
|
|
9
|
+
}
|
|
10
|
+
export declare function buildRoleInterest(graph: TopologyGraph, observerInput: string, role: CommercialRole, drive?: PersonaDrive): RoleInterestResult;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{COMMERCIAL_ROLES}from'../../role/types.js';import{resolveInterests,ROLE_INTERESTS}from'../../evaluation/game-strategy.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{consequenceOf,recommendedCallForExecutionPath}from'../../participation/radar-core.js';import{buildViewport}from'./viewport.js';import{buildControlIndex,pathConfidence,runAnalyzers}from'./analyze.js';import{orderCompletionInGraph}from'./expand.js';const VIEWER_OF={'customer':'buyer','prospect':'buyer','demander':'demander','merchant':'merchant','collaborator':'collaborator','supplier':'supplier','arbitrator':'arbitrator','neutral':'neutral','system':'system'},COMMERCIAL_ROLE_SET=new Set(COMMERCIAL_ROLES);export function toCommercialRole(a){if(a==='buyer')return'customer';return COMMERCIAL_ROLE_SET['has'](a)?a:'neutral';}export function viewerRoleOf(a){return VIEWER_OF[a];}function root(a){const b=a?.['raw'],c=b?.['data']??b;return c&&typeof c==='object'?c:undefined;}function str(a){return typeof a==='string'&&a!=='0x0'?a:undefined;}function objNode(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']());return c&&a['visibleNodes']['has'](c['id'])&&c['kind']==='object'&&c['raw']?c:undefined;}function visible(a,b){return a['visibleEdges']['filter'](c=>c['schema']===b);}function outEdges(a,b,c){const d=b['toLowerCase']();return a['visibleEdges']['filter'](f=>f['schema']===c&&f['from']===d);}function incEdges(a,b,c){const d=b['toLowerCase']();return a['visibleEdges']['filter'](f=>f['schema']===c&&f['to']===d);}function wfMachineOf(a){const b=a['indexOf']('::node::');return b>=0x0?a['slice'](0x0,b):'';}function wfNodeName(a){const b=a['indexOf']('::node::');return b>=0x0?a['slice'](b+'::node::'['length']):a;}function heldPermissionIndices(a,c){const d=new Map();for(const f of outEdges(a,c,'eoa.permission')){const g=new Set();d['set'](f['to'],g);for(const h of outEdges(a,f['to'],'permission.entity')){for(const i of Array['isArray'](h['payload']?.['permIndices'])?h['payload']['permIndices']:[]){const j=Number(i);if(Number['isInteger'](j))g['add'](j);}}}return d;}const MAX_STAKES=0x10;function orderStake(a,b,c,e){const f=objNode(a,b),g=root(f)??{},h=orderCompletionInGraph(a['graph'],b);return{'object':b['toLowerCase'](),'object_type':f?.['objectType']??'Order','positions':c,...str(g['amount'])?{'amount':String(g['amount'])}:{},...f?.['coinType']?{'coin_type':f['coinType']}:{},...h['status']!=='unknown'||f?{'state':h['status']}:{},'evidence':e};}function arbState(a,b){return str(root(objNode(a,b))?.['status']);}function collectStakes(a,b,c,d){const f=new Map(),g=(j,k,l,m)=>{const n=j['toLowerCase'](),o=f['get'](n);if(o){if(!o['positions']['includes'](k))o['positions']['push'](k);for(const p of l)if(!o['evidence']['includes'](p))o['evidence']['push'](p);return;}if(f['size']>=MAX_STAKES)return;f['set'](n,m([k],l));},h=new Set();for(const j of outEdges(a,b,'eoa.order'))h['add'](j['to']);for(const k of incEdges(a,b,'order.builder'))h['add'](k['from']);for(const l of h){g(l,'buyer',['eoa.order','order.builder'],(m,n)=>orderStake(a,l,m,n));}const i=new Set(d['keys']());for(const m of outEdges(a,b,'eoa.permission'))i['add'](m['to']);for(const [n,o]of c['objectsByEoa']){if(n!==b)continue;for(const p of o){const q=a['graph']['nodes']['get'](p);q?.['objectType']==='Demand'?g(p,'demand_owner',['eoa.permission','demand.permission'],(r,s)=>{const t=outEdges(a,p,'demand.presenter')['length'];return{'object':p['toLowerCase'](),'object_type':'Demand','positions':r,'state':t+'\x20presenter(s)','evidence':s};}):g(p,'controller',['eoa.permission','permission.core_binding'],(r,s)=>({'object':p['toLowerCase'](),'object_type':q?.['objectType']??'object','positions':r,'evidence':s}));}}for(const r of visible(a,'demand.permission')){if(!i['has'](r['to']))continue;g(r['from'],'demand_owner',['demand.permission'],(s,t)=>{const u=outEdges(a,r['from'],'demand.presenter')['length'];return{'object':r['from']['toLowerCase'](),'object_type':'Demand','positions':s,'state':u+'\x20presenter(s)','evidence':t};});}for(const [s,t]of c['objectsByEoa']){if(s!==b)continue;for(const u of t){if(a['graph']['nodes']['get'](u)?.['objectType']!=='Service')continue;for(const w of outEdges(a,u,'service.order')){g(w['to'],'seller',['service.order'],(x,y)=>orderStake(a,w['to'],x,y));}}}for(const x of incEdges(a,b,'demand.presenter')){g(x['from'],'presenter',['demand.presenter'],(y,z)=>({'object':x['from']['toLowerCase'](),'object_type':a['graph']['nodes']['get'](x['from'])?.['objectType']??'Demand','positions':y,'evidence':z}));}for(const y of incEdges(a,b,'arb.voter')){g(y['from'],'voter',['arb.voter'],(z,A)=>{const B=arbState(a,y['from']);return{'object':y['from']['toLowerCase'](),'object_type':'Arb','positions':z,...B?{'state':B}:{},'evidence':A};});}for(const [z,A]of c['objectsByEoa']){if(z!==b)continue;for(const B of A){if(a['graph']['nodes']['get'](B)?.['objectType']!=='Arbitration')continue;for(const C of incEdges(a,B,'arb.arbitration_service')){g(C['from'],'arbitration_owner',['arb.arbitration_service'],(D,E)=>{const F=arbState(a,C['from']);return{'object':C['from']['toLowerCase'](),'object_type':'Arb','positions':D,...F?{'state':F}:{},'evidence':E};});}}}for(const [D,E]of f){if(a['graph']['nodes']['get'](D)?.['objectType']!=='Order')continue;if(outEdges(a,D,'order.dispute')['length']>0x0&&!E['positions']['includes']('disputant')){E['positions']['push']('disputant');if(!E['evidence']['includes']('order.dispute'))E['evidence']['push']('order.dispute');}}return[...f['values']()];}const MAX_ACTION_GROUPS=0x8;function forwardsAt(a,b,c){const d=b['toLowerCase']()+'::node::',f=[];for(const g of a['visibleEdges']){if(g['schema']!=='wf.transition'||!g['from']['startsWith'](d))continue;if(wfNodeName(g['from'])!==c)continue;f['push']({'edge':g,'name':String(g['payload']?.['forward']??g['payload']?.['prevNode']+'→'+g['payload']?.['node']),'toNode':String(g['payload']?.['node']??wfNodeName(g['to'])),'permissionIndex':typeof g['payload']?.['permissionIndex']==='number'?g['payload']['permissionIndex']:null,'namedOperator':typeof g['payload']?.['namedOperator']==='string'?g['payload']['namedOperator']:null,'guard':str(g['payload']?.['guard']),'weight':typeof g['payload']?.['weight']==='number'?g['payload']['weight']:undefined,'threshold':typeof g['payload']?.['threshold']==='number'?g['payload']['threshold']:undefined});}return f;}function executionPathOf(a,b,c){if(a['permissionIndex']!=null)return c['has'](a['permissionIndex'])?'permission':'not_available';if(a['namedOperator']==='')return b?'order_holder':'not_available';return'not_available';}function allocationSummaryOf(a,b,c,e){const f=outEdges(a,b,'order.allocation')[0x0]?.['to'];if(!f)return undefined;const g=root(objNode(a,f)),h=Array['isArray'](g?.['allocators'])?g['allocators']:[];if(h['length']===0x0)return undefined;let i=0x0,j=0x0,k=0x0,l=0x0;const m=o=>{if(typeof o==='string')return o['startsWith']('0x')||o['startsWith']('00')?o['toLowerCase']():undefined;if(o&&typeof o==='object'){const p=o;if('Entity'in p)return typeof p['Entity']==='string'?p['Entity']['toLowerCase']():undefined;}return undefined;},n=o=>(o&&typeof o==='object'&&'GuardIdentifier'in o)===!![];for(const o of h){const p=o??{};for(const q of Array['isArray'](p['sharing'])?p['sharing']:[]){const r=q??{};i++;const t=m(r['who']);if(t===c['toLowerCase']())k++;else{if(e&&t===e['toLowerCase']())l++;else{if(r['who']==='Signer')l++;else{if(n(r['who']))j++;}}}}}if(i===0x0)return undefined;return{'recipient_slots':i,'guard_gated_slots':j,'direct_to_me_slots':k,'to_payer_slots':l};}function actionGroupFor(a,b,c,e,g,h,i){const j=objNode(a,g),k=root(j)??{},l=str(k['progress']),m=str(k['machine'])??wfMachineOf(l??''),n=l?root(objNode(a,l)):undefined,o=str(n?.['current'])??'';if(!m||!o||!l)return undefined;const p=forwardsAt(a,m,o);if(p['length']===0x0)return undefined;const q=outEdges(a,g,'order.service')[0x0]?.['to'],r=q?root(objNode(a,q)):undefined,s=outEdges(a,g,'order.builder')[0x0]?.['to'],t=[],u=[],w=new Map(),x=[];for(const A of p){const B=executionPathOf(A,h,i);if(B==='not_available'){const D=A['permissionIndex']!=null?'requires\x20permission\x20index\x20'+A['permissionIndex']+'\x20(not\x20held\x20by\x20the\x20observer\x20in\x20this\x20view)':A['namedOperator']!=null&&A['namedOperator']!==''?'named\x20operator\x20\x27'+A['namedOperator']+'\x27\x20resolves\x20off-chain\x20(LocalMark)\x20—\x20not\x20decidable\x20from\x20graph\x20evidence':'unbound\x20forward\x20—\x20only\x20a\x20guard\x20or\x20the\x20payer\x27s\x20transaction\x20can\x20advance\x20it';u['push']({'forward':A['name'],'reason':D});const E=A['permissionIndex']!=null?'permission\x20index\x20'+A['permissionIndex']:A['namedOperator']!=null&&A['namedOperator']!==''?'named\x20operator\x20\x27'+A['namedOperator']+'\x27':'guard/payer-direct\x20only',F=w['get'](E)??[];F['push'](A['name']),w['set'](E,F);continue;}const C=recommendedCallForExecutionPath(B,A['guard']!=null);t['push']({'name':A['name'],'to_node':A['toNode'],'execution_path':B,...A['guard']?{'guard':A['guard']}:{},'consequence':consequenceOf(A['toNode'],undefined),...A['weight']!==undefined?{'weight':A['weight']}:{}});if(C)x['push']({'forward':A['name'],'call':C});}const y=Math['max'](0x1,...p['map'](G=>G['threshold']??0x1)),z=evaluateNodeGame({'current_node':o,'perspective':c,...e?.['risk_appetite']?{'appetite':e['risk_appetite']}:{},...y>0x1?{'threshold':y}:{},'allocation':allocationSummaryOf(a,g,b,s),...e?.['requirements']?{'requirements':e['requirements']}:{},...str(k['amount'])?{'order_amount':String(k['amount'])}:{},...r&&str(r['compensation_fund'])?{'compensation_fund':String(r['compensation_fund'])}:{},'operable':t,'waiting_on':[...w['entries']()]['map'](([G,H])=>({'role':G,'forwards':H}))});return{'order':g['toLowerCase'](),'machine':m['toLowerCase'](),'current_node':o,'advice':z,'recommended_calls':x,'blocked_forwards':u};}function collectActions(a,c,d,e,f,g){const h=new Set();for(const j of g['values']())for(const k of j)h['add'](k);const i=[];for(const l of f){if(i['length']>=MAX_ACTION_GROUPS)break;if(a['graph']['nodes']['get'](l['object'])?.['objectType']!=='Order')continue;const m=l['positions']['includes']('buyer'),n=actionGroupFor(a,c,d,e,l['object'],m,h);n&&(n['advice']['actions']['length']>0x0||n['blocked_forwards']['length']>0x0)&&i['push'](n);}return i;}function arbPerspectiveOf(a,b,c){if(c['positions']['includes']('voter')||c['positions']['includes']('arbitration_owner'))return'arbitrator';if(c['positions']['includes']('buyer')||c['positions']['includes']('disputant'))return'customer';if(c['positions']['includes']('seller'))return'merchant';return undefined;}function collectArbActions(a,b,c,d){const e=[];for(const f of d){if(a['graph']['nodes']['get'](f['object'])?.['objectType']!=='Arb')continue;const g=arbPerspectiveOf(a,b,f),h=arbState(a,f['object']);if(!g||!h)continue;e['push'](evaluateArbGame(h,g,{...c?.['risk_appetite']?{'risk_appetite':c['risk_appetite']}:{},...c?.['requirements']?{'requirements':c['requirements']}:{}}));}return e;}const SEVERITY_RANK={'info':0x0,'low':0x1,'medium':0x2,'high':0x3},MAX_COUNTERPARTIES=0x8;function collectCounterparties(a,b,c,d,e,f){const g=resolveInterests(c,d),h=[],i=(j,k,l)=>{if(h['length']>=MAX_COUNTERPARTIES)return;const m=ROLE_INTERESTS[k],n=[...g['prefer']['filter'](r=>m['avoid']['includes'](r)),...g['avoid']['filter'](r=>m['prefer']['includes'](r))],o=g['prefer']['filter'](r=>m['prefer']['includes'](r)),p=n['length']>0x0?'conflict':o['length']>0x0?'aligned':'neutral',q=p==='conflict'?'结构性利益冲突:你偏好\x20'+(g['prefer']['filter'](r=>m['avoid']['includes'](r))['join']('、')||'(无)')+',而\x20'+k+'\x20将其视为风险;对方追求\x20'+(m['prefer']['join']('、')||'(无)')+'。':p==='aligned'?'利益一致:双方都偏好\x20'+o['join']('、')+'。':'无直接利益交叠('+k+'\x20偏好\x20'+(m['prefer']['join']('、')||'无')+'、回避\x20'+(m['avoid']['join']('、')||'无')+')。';h['push']({'object':j['toLowerCase'](),'counter_role':k,'who':l,'their_prefer':m['prefer'],'their_avoid':m['avoid'],'alignment':p,'noteZh':q});};for(const j of e){if(a['graph']['nodes']['get'](j['object'])?.['objectType']!=='Order')continue;const k=outEdges(a,j['object'],'order.service')[0x0]?.['to'],l=k?[...f['controllers']['get'](k['toLowerCase']())??[]]:[];i(j['object'],'merchant',l);const m=outEdges(a,j['object'],'order.builder')[0x0]?.['to'];if(m&&m!==b['toLowerCase']())i(j['object'],'customer',[m]);if(outEdges(a,j['object'],'order.dispute')['length']>0x0)i(j['object'],'arbitrator',[]);}return h;}const MAX_RISK_REMINDERS=0xa;function collectRiskReminders(a,b){try{return runAnalyzers(a,{'kinds':['risk']})['filter'](c=>c['roles']['includes'](b)||c['roles']['includes']('neutral'))['sort']((c,d)=>SEVERITY_RANK[d['severity']]-SEVERITY_RANK[c['severity']])['slice'](0x0,MAX_RISK_REMINDERS);}catch{return[];}}export function buildRoleInterest(a,b,c,d){const e=b['toLowerCase'](),f=VIEWER_OF[c],g=buildViewport(a,e,f),h=buildControlIndex(g),i=heldPermissionIndices(g,e),j=collectStakes(g,e,h,i),k=collectActions(g,e,c,d,j,i),l=collectArbActions(g,e,d,j),m=collectCounterparties(g,e,c,d,j,h),n=collectRiskReminders(g,f),o=k['find'](y=>y['advice']['actions']['length']>0x0)?.['advice']['actions'][0x0],p=m['find'](y=>y['alignment']==='conflict'),q='以\x20'+c+'\x20身份观察\x20'+e+':'+(j['length']+'\x20项在途利益('+j['map'](y=>y['object_type']+':'+y['positions']['join']('/'))['slice'](0x0,0x4)['join']('、')+(j['length']>0x4?'\x20等':'')+');')+(o?'当前可执行的最优操作为订单\x20'+(k['find'](y=>y['advice']['actions'][0x0]===o)?.['order']??'')+'\x20的\x20\x27'+o['forward']+'\x27('+o['payoff_note']+');':k['length']>0x0?'存在在途订单但无可由本视角执行的操作(等待他方或链下解析);':'当前无可操作的在途订单;')+(l['length']>0x0?l['length']+'\x20个仲裁案件的行动建议;':'')+(p?'最大结构性对手张力:'+p['counter_role']+'('+p['noteZh']+')':'无明显对手张力')+(n['length']>0x0?';'+n['length']+'\x20条角色相关风险提醒。':'。'),r={'role':c,'observer':e,...d&&(d['risk_appetite']||d['requirements']?.['length'])?{'drive':d}:{},'stakes':j,'actions':k,'arb_actions':l,'counterparties':m,'risk_finding_ids':n['map'](y=>y['id']),'summaryZh':q},s=g['visibleEdges']['filter'](y=>['eoa.order','service.order','demand.presenter','arb.voter','order.dispute']['includes'](y['schema'])),{confidence:t,window:u}=pathConfidence(g,s),w=n['length']>0x0&&SEVERITY_RANK[n[0x0]['severity']]>=SEVERITY_RANK['medium']?n[0x0]['severity']:'info',x={'id':'IR:'+c+':'+e,'kind':'game','severity':w,'titleZh':'角色利益视图('+c+'):'+j['length']+'\x20项在途利益'+(o?',最优操作\x20\x27'+o['forward']+'\x27':''),'path':[e,...j['map'](y=>y['object'])],'confidence':t,...u?{'window':u}:{},'roles':[f],'detailZh':q,'suggestionZh':o?'按\x20advice\x20排序执行(\x27'+o['forward']+'\x27\x20需'+(o['guard']?'先通过\x20Guard\x20护照校验、':'')+'经\x20recommended_calls\x20给出的工具路由);对手张力与风险提醒见\x20payload。':'无可执行操作时:关注\x20blocked_forwards\x20的等待条件与对手张力变化,或切换\x20role/context_account\x20重新投影。','interest':r};return{'finding':x,'view':r};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{buildRoleInterest,toCommercialRole,viewerRoleOf}from'./interest.js';function mkNode(a,b,c){return{'id':a['toLowerCase'](),'kind':b?'object':'eoa',...b?{'objectType':b}:{},...c?{'raw':{'object':a,'data':c}}:{},'state':'fetched','origins':[{'depth':0x0}],'depth':0x0};}function mkEdge(a,b,c,d,e,f='complete'){return{'id':a+'|'+c['toLowerCase']()+'→'+d['toLowerCase'](),'schema':a,'family':b,'from':c['toLowerCase'](),'to':d['toLowerCase'](),'retention':f,'evidence':'spec','observedAt':0x0,...e?{'payload':e}:{}};}function mkGraph(a,b){const c=new Map(),d=new Map(),f=(g,h,i)=>{const j=g['get'](h)??[];j['push'](i),g['set'](h,j);};for(const g of b){f(c,g['from'],g),f(d,g['to'],g);}return{'network':'testnet','seed':'spec','builtAt':0x0,'nodes':new Map(a['map'](h=>[h['id'],h])),'edges':b,'out':c,'inc':d,'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}const CUSTOMER='00customer',MERCHANT='00merchant',ARB_EOA='00arb',DEMANDER='00demander',SUPPLIER='00supplier',SERVICE='0xservice',MACHINE='0xmachine',PROGRESS='0xprogress',ORDER='0xorder1',ALLOC='0xalloc',PERM_M='0xpermm',PERM_A='0xperma',PERM_D='0xpermd',ARB_SVC='0xarbsvc',ARB_CASE='0xarbcase',DEMAND='0xdemand';function machineEdges(a=MACHINE){const b=a['toLowerCase']();return[mkEdge('machine.node','W',b,b+'::node::shipping'),mkEdge('machine.node','W',b,b+'::node::done'),mkEdge('machine.node','W',b,b+'::node::refunded'),mkEdge('machine.node','W',b,b+'::node::pack'),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::done',{'node':'done','prevNode':'shipping','forward':'confirm','namedOperator':''}),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::refunded',{'node':'refunded','prevNode':'shipping','forward':'cancel','namedOperator':''}),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::pack',{'node':'pack','prevNode':'shipping','forward':'op','permissionIndex':0x7,'threshold':0x2,'weight':0x1})];}function orderGraphNodes(){return[mkNode(CUSTOMER),mkNode(MERCHANT),mkNode(SERVICE,'Service',{'compensation_fund':'500','bPublished':!![]}),mkNode(MACHINE,'Machine'),mkNode(PROGRESS,'Progress',{'current':'shipping','machine':MACHINE}),mkNode(ORDER,'Order',{'amount':'1000','builder':CUSTOMER,'service':SERVICE,'machine':MACHINE,'progress':PROGRESS}),mkNode(ALLOC,'Allocation',{'allocators':[{'guard':'0x0','sharing':[{'who':{'Entity':MERCHANT},'sharing':'10000','mode':0x1},{'who':'Signer','sharing':'0','mode':0x0},{'who':{'GuardIdentifier':0x1},'sharing':'0','mode':0x0}]}]}),mkNode(PERM_M,'Permission')];}function orderGraphEdges(){return[...machineEdges(),mkEdge('eoa.order','R',CUSTOMER,ORDER,undefined,'bounded_window'),mkEdge('order.builder','F',ORDER,CUSTOMER),mkEdge('order.service','F',ORDER,SERVICE),mkEdge('order.machine','F',ORDER,MACHINE),mkEdge('order.progress','F',ORDER,PROGRESS),mkEdge('order.allocation','F',ORDER,ALLOC),mkEdge('eoa.permission','R',MERCHANT,PERM_M,{'roleBits':0x1}),mkEdge('permission.core_binding','F',PERM_M,SERVICE),mkEdge('service.order','R',SERVICE,'0xorder2',undefined,'bounded_window'),mkEdge('order.builder','F','0xorder2','00someoneelse')];}describe('role\x20coordinate\x20mapping\x20(single\x20system)',()=>{it('maps\x20the\x20viewport\x20alias\x20and\x20persona\x20roles\x20onto\x20CommercialRole',()=>{expect(toCommercialRole('buyer'))['toBe']('customer'),expect(toCommercialRole('customer'))['toBe']('customer'),expect(toCommercialRole('demander'))['toBe']('demander'),expect(toCommercialRole('merchant'))['toBe']('merchant'),expect(toCommercialRole('arbitrator'))['toBe']('arbitrator'),expect(toCommercialRole('who-knows'))['toBe']('neutral');}),it('maps\x20every\x20CommercialRole\x20onto\x20a\x20viewer\x20role',()=>{expect(viewerRoleOf('customer'))['toBe']('buyer'),expect(viewerRoleOf('demander'))['toBe']('demander'),expect(viewerRoleOf('neutral'))['toBe']('neutral');});}),describe('buildRoleInterest\x20—\x20customer',()=>{const a=mkGraph(orderGraphNodes(),orderGraphEdges());it('projects\x20buyer\x20stakes\x20with\x20amount\x20and\x20completion\x20state',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer'),c=b['stakes']['find'](d=>d['object']===ORDER);expect(c)['toBeDefined'](),expect(c['positions'])['toContain']('buyer'),expect(c['amount'])['toBe']('1000'),expect(c['state'])['toBe']('in_progress'),expect(b['stakes']['some'](d=>d['object']==='0xorder2'))['toBe'](![]);}),it('ranks\x20operable\x20forwards\x20via\x20node-game\x20(order_holder\x20path)',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer');expect(b['actions'])['toHaveLength'](0x1);const c=b['actions'][0x0];expect(c['order'])['toBe'](ORDER),expect(c['current_node'])['toBe']('shipping');const d=c['advice']['actions']['map'](e=>e['forward']);expect(d)['toContain']('confirm'),expect(d)['toContain']('cancel'),expect(c['advice']['actions'][0x0]['forward'])['toBe']('cancel'),expect(c['advice']['actions'][0x0]['execution_path'])['toBe']('order_holder'),expect(c['blocked_forwards']['map'](e=>e['forward']))['toContain']('op'),expect(c['recommended_calls']['length'])['toBeGreaterThan'](0x0),expect(c['recommended_calls'][0x0]['call']['tool'])['toBe']('onchain_operations');}),it('derives\x20merchant\x20counterparty\x20tension\x20from\x20ROLE_INTERESTS\x20(conflict)',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer'),c=b['counterparties']['find'](d=>d['counter_role']==='merchant');expect(c)['toBeDefined'](),expect(c['alignment'])['toBe']('conflict'),expect(c['their_prefer'])['toContain']('fund_released_to_merchant');}),it('emits\x20one\x20IR\x20finding\x20carrying\x20the\x20structured\x20payload',()=>{const {finding:b,view:c}=buildRoleInterest(a,CUSTOMER,'customer');expect(b['id'])['toBe']('IR:customer:'+CUSTOMER),expect(b['kind'])['toBe']('game'),expect(b['interest'])['toBe'](c),expect(b['path'][0x0])['toBe'](CUSTOMER),expect(b['confidence'])['toBe']('windowed');}),it('re-anchors\x20scoring\x20with\x20a\x20conservative\x20persona\x20drive',()=>{const b=buildRoleInterest(a,CUSTOMER,'customer')['view'],c=buildRoleInterest(a,CUSTOMER,'customer',{'risk_appetite':'conservative'})['view'],d=b['actions'][0x0]['advice']['actions']['find'](f=>f['forward']==='confirm'),e=c['actions'][0x0]['advice']['actions']['find'](f=>f['forward']==='confirm');expect(e['risk_score'])['toBeGreaterThan'](d['risk_score']),expect(e['favorability'])['toBeLessThan'](d['favorability']);});}),describe('buildRoleInterest\x20—\x20merchant',()=>{const a=[...orderGraphNodes(),mkNode('0xorder2','Order',{'amount':'2000','builder':'00someoneelse','service':SERVICE,'machine':MACHINE,'progress':PROGRESS}),mkNode('00someoneelse')],b=[...orderGraphEdges()['filter'](d=>!(d['schema']==='order.builder'&&d['from']==='0xorder2')),mkEdge('order.builder','F','0xorder2','00someoneelse'),mkEdge('service.order','R',SERVICE,ORDER,undefined,'bounded_window'),mkEdge('permission.entity','W',PERM_M,MERCHANT,{'permIndices':[0x7]})],c=mkGraph(a,b);it('projects\x20controller\x20+\x20seller\x20stakes',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['stakes']['find'](g=>g['object']===SERVICE);expect(e?.['positions'])['toContain']('controller');const f=d['stakes']['find'](g=>g['object']===ORDER);expect(f?.['positions'])['toContain']('seller');}),it('executes\x20permission-gated\x20forwards\x20only\x20(OrderHolder\x20forwards\x20stay\x20blocked)',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['actions']['find'](h=>h['order']===ORDER);expect(e)['toBeDefined']();const f=e['advice']['actions']['find'](g=>g['forward']==='op');expect(f)['toBeDefined'](),expect(f['execution_path'])['toBe']('permission'),expect(e['recommended_calls']['find'](g=>g['forward']==='op')['call']['tool'])['toBe']('workflow_operation'),expect(e['blocked_forwards']['map'](g=>g['forward'])['sort']())['toEqual'](['cancel','confirm']),expect(e['advice']['actions'])['toHaveLength'](0x1),expect(e['advice']['actions'][0x0]['forward'])['toBe']('op'),expect(e['advice']['actions'][0x0]['is_optimal'])['toBe'](!![]);}),it('projects\x20the\x20allocation\x20waterfall\x20(direct_to_me\x20slots)',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['actions']['find'](h=>h['order']===ORDER),f=e['advice']['cooperation'];expect(f)['toBeDefined'](),expect(f['needed_from_others'])['toBeGreaterThan'](0x0);}),it('surfaces\x20role-relevant\x20R/AC\x20risk\x20reminders\x20(R2\x20exposure\x20fires\x20for\x20the\x20merchant\x20view)',()=>{const {view:d,finding:e}=buildRoleInterest(c,MERCHANT,'merchant');expect(d['risk_finding_ids']['some'](f=>f['startsWith']('R2:')))['toBe'](!![]),expect(e['severity'])['toBe']('high');});}),describe('buildRoleInterest\x20—\x20demander',()=>{const a=[mkNode(DEMANDER),mkNode(SUPPLIER),mkNode(PERM_D,'Permission'),mkNode(DEMAND,'Demand',{'description':'car\x20wash\x20in\x20london'})],b=[mkEdge('eoa.permission','R',DEMANDER,PERM_D,{'roleBits':0x1}),mkEdge('demand.permission','F',DEMAND,PERM_D),mkEdge('demand.presenter','R',DEMAND,SUPPLIER),mkEdge('demand.permission','F','0xdemand2','0xpermother')],c=mkGraph(a,b);it('anchors\x20own\x20demands\x20through\x20the\x20permission\x20(demand_owner\x20stake,\x20presenter\x20count)',()=>{const {view:d}=buildRoleInterest(c,DEMANDER,'demander'),e=d['stakes']['find'](f=>f['object']===DEMAND);expect(e)['toBeDefined'](),expect(e['positions'])['toContain']('demand_owner'),expect(e['state'])['toBe']('1\x20presenter(s)'),expect(d['stakes']['some'](f=>f['object']==='0xdemand2'))['toBe'](![]);});}),describe('buildRoleInterest\x20—\x20arbitrator',()=>{const a=[mkNode(ARB_EOA),mkNode(PERM_A,'Permission'),mkNode(ARB_SVC,'Arbitration',{'voting_guard':[]}),mkNode(ARB_CASE,'Arb',{'status':'Voting','order':ORDER}),...orderGraphNodes()],b=[mkEdge('eoa.permission','R',ARB_EOA,PERM_A,{'roleBits':0x1}),mkEdge('permission.core_binding','F',PERM_A,ARB_SVC),mkEdge('arb.arbitration_service','F',ARB_CASE,ARB_SVC),mkEdge('arb.voter','S',ARB_CASE,ARB_EOA,{'weight':0x1}),...orderGraphEdges()],c=mkGraph(a,b);it('collects\x20voter\x20stakes\x20and\x20arbitration-game\x20advice\x20(Voting\x20→\x20vote\x20is\x20optimal)',()=>{const {view:d}=buildRoleInterest(c,ARB_EOA,'arbitrator'),e=d['stakes']['find'](f=>f['object']===ARB_CASE);expect(e?.['positions'])['toContain']('voter'),expect(e?.['positions'])['toContain']('arbitration_owner'),expect(e?.['state'])['toBe']('Voting'),expect(d['arb_actions'])['toHaveLength'](0x1),expect(d['arb_actions'][0x0]['perspective'])['toBe']('arbitrator'),expect(d['arb_actions'][0x0]['actions'][0x0]['action'])['toBe']('vote'),expect(d['arb_actions'][0x0]['actions'][0x0]['is_optimal'])['toBe'](!![]);});}),describe('buildRoleInterest\x20—\x20prospect\x20(no\x20on-chain\x20stake)',()=>{it('returns\x20an\x20honest\x20empty\x20view\x20instead\x20of\x20guessing',()=>{const a=mkGraph(orderGraphNodes(),orderGraphEdges()),{view:b,finding:c}=buildRoleInterest(a,'00stranger','prospect');expect(b['stakes'])['toHaveLength'](0x0),expect(b['actions'])['toHaveLength'](0x0),expect(c['interest'])['toBe'](b),expect(c['kind'])['toBe']('game');});});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology,orderCompletionInGraph}from'./expand.js';import{extractObjectEdges,extractReverseRefs,extractTableRefs}from'./extract.js';import{annotateNodeName,deriveOrderCompletion,terminalNamesOfEdges,terminalNamesOfRows,workflowSubgraphFromRows,workflowSubgraphFromEdges}from'./order-status.js';import{COVERED_OBJECT_TYPES,EDGE_SCHEMAS}from'./edge-schema.js';import{FIELD_MUTABILITY_RULES,fieldMutabilityOf,isActionForbidden}from'../../knowledge/contract-invariants.js';import{buildViewport}from'./viewport.js';function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b),T_USDT='0x2::wow::coins::USDT',buyer=eoa(0x1),otherBuyer=eoa(0x2),merchant=eoa(0x3),collaborator=eoa(0x4),voter1=eoa(0x5),svc=obj(0x4,0xa),mac=obj(0x5,0xb),o1=obj(0x6,0x15),o2=obj(0x6,0x16),o3=obj(0x6,0x17),o4=obj(0x6,0x18),pr1=obj(0x7,0x1f),pr2=obj(0x7,0x20),pay=obj(0x8,0x29),perm=obj(0x0,0x33),g1=obj(0xa,0x3d),g2=obj(0xa,0x3e),gShip=obj(0xa,0x3f),gOther=obj(0xa,0x45),alloc=obj(0xd,0x47),arbsvc=obj(0x3,0x51),arb=obj(0x2,0x52);function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}const OBJECTS=[raw(svc,'Service',{'permission':perm,'machine':mac,'arbitrations':[arbsvc],'order_allocators':{'allocators':[{'guard':g1}]}},'0x2::service::Service<'+T_USDT+'>'),raw(o1,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr1,'allocation':alloc,'dispute':[arb]}),raw(o2,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr2,'allocation':alloc,'dispute':[]}),raw(o3,'Order',{'builder':buyer,'agent':[],'service':svc,'dispute':[]}),raw(o4,'Order',{'builder':otherBuyer,'agent':[],'service':svc,'machine':mac,'progress':undefined,'dispute':[]}),raw(mac,'Machine',{'permission':perm,'consensus_repositories':[]}),raw(pr1,'Progress',{'machine':mac,'task':o1,'current':'done'}),raw(pr2,'Progress',{'machine':mac,'task':o2,'current':'shipping'}),raw(alloc,'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':g1,'mode':0x0}]}},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(perm,'Permission',{'admin':[merchant]}),raw(g1,'Guard',{'relies':[g2]}),raw(g2,'Guard',{'relies':[]}),raw(gShip,'Guard',{'relies':[]}),raw(arbsvc,'Arbitration',{'permission':perm,'voting_guard':[{'guard':g1}]}),raw(arb,'Arb',{'order':o1,'arbitration':arbsvc,'voted':[{'voter':voter1,'weight':0x3}]}),raw(pay,'Payment',{'record':[{'recipient':merchant,'amount':'99900'}],'from_object':alloc,'info':{'for_object':o1,'for_guard':g1}},'0x2::payment::Payment<'+T_USDT+'>')];let TABLE_SEQ=0x0;function nodeTableItem(a,b,c){TABLE_SEQ++;const d='0x9'+TABLE_SEQ['toString'](0x10)['padStart'](0x3f,'0');return{'key':a,'objectId':d,'object':raw(d,'TableItem_MachineNode',{'name':b,'value':c})};}function permTableItem(a,b){const c='0x9'+a['slice'](0x2,0x1e)['padEnd'](0x3f,'0')['slice'](0x0,0x3f);return{'key':a,'objectId':c,'object':raw(c,'TableItem_PermissionPerm',{'address':a,'perm':b})};}function makePlane(){const a=[nodeTableItem('start','start',[]),nodeTableItem('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':gShip}]}]),nodeTableItem('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])],b=new Map(OBJECTS['map'](e=>[e['object']['toLowerCase'](),e])),c=new Map();c['set']('0xaa8',new Map([[buyer,{'items':[{'role':0x1,'order':o1,'time':0x1},{'role':0x2,'order':o2,'time':0x2},{'role':0x1,'order':o3,'time':0x3}]}]])),c['set']('0xaad',new Map([[merchant,{'items':[{'role':0x1,'permission':perm,'time':0x1}]}]])),c['set']('0xaae',new Map([[perm,{'items':[{'who':svc,'time':0x1}]}]])),c['set']('0xaaf',new Map([[svc,{'items':[{'who':o1,'time':0x1},{'who':o2,'time':0x2},{'who':o4,'time':0x3},{'who':gOther,'time':0x4}]}]]));const d=new Map([[mac['toLowerCase'](),a],[perm['toLowerCase'](),[permTableItem(collaborator,[0x1,0x2])]]]);return new FakeDataPlane({'objects':b,'keyedFields':c,'tables':d});}const FULL_EDGES={'tableEdges':['machine.node','permission.entity']};async function buildBuyerGraph(a){const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES,...a?{'budget':a}:{}});return{'graph':c,'plane':b};}describe('extract\x20—\x20field\x20edges',()=>{it('reads\x20scalar,\x20vector,\x20struct\x20and\x20deep\x20nested\x20refs\x20defensively',()=>{const a=extractObjectEdges('Service',OBJECTS[0x0]),b=new Map(a['map'](c=>[c['schemaId'],c['refs']['map'](d=>d['to'])]));expect(b['get']('service.permission'))['toEqual']([perm]),expect(b['get']('service.machine'))['toEqual']([mac]),expect(b['get']('service.arbitration'))['toEqual']([arbsvc]),expect(b['get']('service.order_allocator_guard'))['toEqual']([g1]);}),it('parses\x20coin\x20type\x20T\x20and\x20money\x20payloads\x20on\x20Payment',()=>{const a=extractObjectEdges('Payment',OBJECTS['find'](d=>d['object']===pay)),b=new Map(a['map'](d=>[d['schemaId'],d])),c=b['get']('payment.recipient')['refs'][0x0];expect(c['to'])['toBe'](merchant),expect(c['payload']?.['amount'])['toBe']('99900'),expect(c['payload']?.['coinType'])['toBe'](T_USDT),expect(b['get']('payment.from_object')['refs'][0x0]['to'])['toBe'](alloc),expect(b['get']('payment.for_guard')['refs'][0x0]['to'])['toBe'](g1);}),it('reverse\x20field\x20shapes:\x20items[]\x20and\x20votes[]\x20with\x20role/vote\x20payloads',()=>{expect(extractReverseRefs('0xaa8',{'items':[{'role':0x3,'order':o1}]})[0x0]['payload']?.['roleBits'])['toBe'](0x3);const a=extractReverseRefs('0xaaa',{'votes':[{'who':voter1,'like':!![],'favor':!![]}]});expect(a[0x0]['payload']?.['voteBits'])['toBe'](0x2|0x8);}),it('machine\x20table\x20rows\x20produce\x20node\x20+\x20transition\x20+\x20guard\x20edges',()=>{const a=makePlane()['state']['tables']['get'](mac['toLowerCase']()),b=extractTableRefs('machine.node',mac,a),c=new Map(b['map'](e=>[e['schemaId'],e['refs']]));expect(c['get']('machine.node')?.['length'])['toBe'](0x3);const d=c['get']('wf.transition');expect(d['map'](e=>[e['from']['includes']('start'),e['to']['includes']('shipping')]))['toContainEqual']([!![],!![]]),expect(c['get']('wf.forward_guard')?.[0x0]['to'])['toBe'](gShip);});}),describe('order-status\x20—\x20structural\x20authority',()=>{it('terminal\x20=\x20names\x20never\x20appearing\x20as\x20prev_node',()=>{const a=terminalNamesOfEdges([{'node':'shipping','prev_node':'start'},{'node':'done','prev_node':'shipping'}]);expect([...a])['toEqual'](['done']),expect([...terminalNamesOfRows([{'name':'a','value':[]},{'name':'b','value':[{'prev_node':'a'}]}])])['toEqual'](['b']);}),it('four\x20completion\x20states',()=>{const a=new Set(['done']);expect(deriveOrderCompletion({'machine':null})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':null})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'shipping','terminalNames':a})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':a})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':null})['status'])['toBe']('unknown');}),it('name\x20vocabulary\x20is\x20annotation\x20only',()=>{expect(annotateNodeName('order_refunded'))['toBe']('refund'),expect(annotateNodeName('dispute_node'))['toBe']('exception'),expect(annotateNodeName('shipping'))['toBeNull']();}),it('workflowSubgraphFromRows\x20flattens\x20pairs/forwards\x20and\x20keeps\x20structural\x20terminals',()=>{const a=workflowSubgraphFromRows([{'name':'shipped','value':[{'prev_node':'paid','threshold':0x2,'forwards':[{'name':'ship','guard':{'guard':'0xg','retained_submission':[]},'weight':0x1},{'name':'airdrop','namedOperator':'op','permissionIndex':0x3}]}]},{'name':'done','value':[{'prev_node':'shipped','forwards':[{'name':'confirm'}]}]}],'0xm');expect(a['machine'])['toBe']('0xm'),expect(a['transitions']['map'](b=>b['prevNode']+'>'+b['forward']+'>'+b['node']))['toEqual'](['paid>ship>shipped','paid>airdrop>shipped','shipped>confirm>done']),expect(a['transitions'][0x0]['guard'])['toBe']('0xg'),expect(a['transitions'][0x0]['threshold'])['toBe'](0x2),expect(a['transitions'][0x1]['namedOperator'])['toBe']('op'),expect(a['transitions'][0x1]['permissionIndex'])['toBe'](0x3),expect([...a['terminalNames']])['toEqual'](['done']);}),it('workflowSubgraphFromEdges\x20reads\x20wf.transition\x20payloads\x20and\x20filters\x20by\x20machine',()=>{const a=[{'schema':'wf.transition','from':'0xm1::node::paid','to':'0xm1::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}},{'schema':'wf.transition','from':'0xm2::node::paid','to':'0xm2::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm'}},{'schema':'machine.node','from':'0xm1','to':'0xm1::node::paid'}],b=workflowSubgraphFromEdges(a);expect(b['transitions'])['toHaveLength'](0x2);const c=workflowSubgraphFromEdges(a,'0xm1');expect(c['transitions'])['toHaveLength'](0x1),expect(c['transitions'][0x0])['toMatchObject']({'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}),expect([...c['terminalNames']])['toEqual'](['done']);});}),describe('expandTopology\x20—\x20wave\x20BFS\x20over\x20DataPlane',()=>{it('connects\x20F/R/W/S/M\x20edges\x20with\x20dedupe\x20and\x20no\x20per-id\x20fan-out',async()=>{const {graph:a,plane:b}=await buildBuyerGraph(),c=new Set(a['edges']['map'](f=>f['schema']));for(const e of['eoa.order','order.service','order.progress','order.allocation','service.permission','service.machine','service.order_allocator_guard','service.arbitration','machine.permission','progress.machine','machine.node','wf.transition','wf.forward_guard','guard.relies','arb.order','arb.voter','allocation.guard']){expect(c['has'](e),'missing\x20edge\x20'+e)['toBe'](!![]);}const d=a['edges']['filter'](f=>f['schema']==='service.order')['map'](f=>f['to']);expect(new Set(d))['toEqual'](new Set([o1,o2,o4])),expect(a['nodes']['get'](svc)?.['objectType'])['toBe']('Service'),expect(a['edges']['length'])['toBe'](new Set(a['edges']['map'](f=>f['id']))['size']),expect(b['batches']['objects'])['toBeLessThanOrEqual'](0x6),expect(a['gaps'])['toEqual']([]);}),it('resolves\x20completion\x20from\x20the\x20graph;\x20unknown\x20when\x20machine\x20table\x20not\x20expanded',async()=>{const {graph:a}=await buildBuyerGraph();expect(orderCompletionInGraph(a,o1)['status'])['toBe']('completed'),expect(orderCompletionInGraph(a,o2)['status'])['toBe']('in_progress'),expect(orderCompletionInGraph(a,o3)['status'])['toBe']('completed');const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer});expect(orderCompletionInGraph(c,o1)['status'])['toBe']('unknown');}),it('caps\x20per-kind\x20fanout\x20and\x20records\x20truncation;\x20window\x20edges\x20flagged',async()=>{const {graph:a}=await buildBuyerGraph({'perKindCaps':{'eoa.order':0x1}});expect(a['edges']['filter'](b=>b['schema']==='eoa.order'))['toHaveLength'](0x1),expect(a['truncations']['some'](b=>b['schema']==='eoa.order'))['toBe'](!![]),expect(a['edges']['find'](b=>b['schema']==='eoa.order')?.['truncated'])['toBe'](!![]);}),it('fail-soft:\x20missing\x20objects\x20become\x20gaps,\x20build\x20still\x20succeeds',async()=>{const a=makePlane();a['state']['objects']['delete'](mac['toLowerCase']());const b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES});expect(b['nodes']['get'](mac)?.['state'])['toBe']('error'),expect(b['gaps'])['toContain'](mac),expect(b['edges']['some'](c=>c['schema']==='order.service'))['toBe'](!![]);}),it('enforces\x20maxDepth',async()=>{const {graph:a}=await buildBuyerGraph({'maxDepth':0x1});expect(a['nodes']['has'](o1))['toBe'](!![]),expect(a['nodes']['has'](svc))['toBe'](![]),expect(a['budgetExhausted']['depth'])['toBe'](!![]);});}),describe('DataPlane\x20batching',()=>{it('chunks\x20at\x2050\x20and\x20counts\x20logical\x20RPC\x20batches',async()=>{const a=new FakeDataPlane({});await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),expect(a['dedupHits'])['toBe'](0x65);});}),describe('viewport',()=>{it('buyer\x20never\x20sees\x20other\x20customers\x20through\x20service.order',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'buyer');expect(b['visibleNodes']['has'](o1))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](![]);}),it('merchant\x20sees\x20shop\x20orders\x20and\x20their\x20parties',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,merchant,'merchant');expect(b['visibleNodes']['has'](perm))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](!![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](!![]),expect(b['visibleNodes']['has'](collaborator))['toBe'](!![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](!![]);}),it('neutral\x20role\x20sees\x20the\x20full\x20canon\x20graph',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'neutral');expect(b['visibleNodes']['size'])['toBe'](a['nodes']['size']);});}),describe('edge\x20schema\x20registry',()=>{it('covers\x20the\x20core\x20commercial\x20object\x20types',()=>{for(const a of['Service','Order','Machine','Progress','Payment','Allocation','Arbitration','Arb','Permission','Guard','Demand','Reward','Contact','Treasury']){expect(COVERED_OBJECT_TYPES)['toContain'](a);}});}),describe('EdgeSchema.contract\x20—\x20field\x20mutability\x20ground\x20truth',()=>{const a=['service.machine','service.buy_guard','service.arbitration','service.reward','service.repository','progress.machine','progress.task','machine.consensus_repository','machine.node','allocation.guard'];it('marks\x20exactly\x20the\x20address-field\x20edges\x20with\x20mutability\x20metadata',()=>{const b=EDGE_SCHEMAS['filter'](c=>c['contract'])['map'](c=>c['id'])['sort']();expect(b)['toEqual']([...a]['sort']());}),it('carries\x20the\x20publish-freeze\x20distinction\x20(machine\x20frozen,\x20buy_guard\x20mutable)',()=>{const b=EDGE_SCHEMAS['find'](d=>d['id']==='service.machine')['contract'];expect(b['frozenWhen'])['toBe']('after\x20publish'),expect(b['forbiddenActions'])['toContain']('set'),expect(b['unfreeze'])['toBeNull']();const c=EDGE_SCHEMAS['find'](d=>d['id']==='service.buy_guard')['contract'];expect(c['frozenWhen'])['toBeNull'](),expect(c['allowedActions'])['toContain']('set');}),it('derives\x20the\x20knowledge\x20field-rule\x20table\x20without\x20duplicating\x20facts',()=>{expect(fieldMutabilityOf('Service','machine')?.['frozen_when'])['toBe']('after\x20publish'),expect(fieldMutabilityOf('Machine','nodes')?.['forbidden_actions'])['toContain']('update'),expect(fieldMutabilityOf('Allocation','allocators')?.['frozen_when'])['toBe']('after\x20create\x20(share)'),expect(EDGE_SCHEMAS['find'](c=>c['id']==='allocation.guard')['contract']['field'])['toBe']('allocators');const b=FIELD_MUTABILITY_RULES['map'](c=>c['object_type']+'.'+c['field']);expect(new Set(b)['size'])['toBe'](b['length']),expect(FIELD_MUTABILITY_RULES)['toHaveLength'](0x14),expect(isActionForbidden('Service','machine','set',!![]))['toBe'](!![]),expect(isActionForbidden('Service','machine','set',![]))['toBe'](![]),expect(isActionForbidden('Service','buy_guard','set',!![]))['toBe'](![]);});});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface StructPair {
|
|
2
|
+
node: string;
|
|
3
|
+
prev_node: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function terminalNamesOfEdges(edges: StructPair[]): Set<string>;
|
|
6
|
+
export declare function terminalNamesOfRows(rows: Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
value?: Array<{
|
|
9
|
+
prev_node?: string | null;
|
|
10
|
+
}>;
|
|
11
|
+
}>): Set<string>;
|
|
12
|
+
export type OrderCompletion = "completed" | "in_progress" | "unknown";
|
|
13
|
+
export interface CompletionInput {
|
|
14
|
+
machine?: string | null;
|
|
15
|
+
progress?: string | null;
|
|
16
|
+
currentNode?: string | null;
|
|
17
|
+
terminalNames?: Set<string> | null;
|
|
18
|
+
}
|
|
19
|
+
export interface CompletionResult {
|
|
20
|
+
status: OrderCompletion;
|
|
21
|
+
terminal?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function deriveOrderCompletion(input: CompletionInput, onUnknown?: () => void): CompletionResult;
|
|
24
|
+
export type TerminalFlavor = "completion" | "refund" | "exception";
|
|
25
|
+
export declare function annotateNodeName(name: string): TerminalFlavor | null;
|
|
26
|
+
export declare function annotateTerminals(terminalNames: Set<string>): Map<string, TerminalFlavor>;
|
|
27
|
+
export interface WfTransitionView {
|
|
28
|
+
node: string;
|
|
29
|
+
prevNode: string;
|
|
30
|
+
forward?: string;
|
|
31
|
+
threshold?: number;
|
|
32
|
+
guard?: string | null;
|
|
33
|
+
weight?: number | null;
|
|
34
|
+
namedOperator?: string | null;
|
|
35
|
+
permissionIndex?: number | null;
|
|
36
|
+
}
|
|
37
|
+
export interface WorkflowSubgraph {
|
|
38
|
+
machine?: string;
|
|
39
|
+
transitions: WfTransitionView[];
|
|
40
|
+
terminalNames: Set<string>;
|
|
41
|
+
}
|
|
42
|
+
export declare function workflowSubgraphFromEdges(edges: Array<{
|
|
43
|
+
schema?: string;
|
|
44
|
+
from?: string;
|
|
45
|
+
to?: string;
|
|
46
|
+
payload?: Record<string, unknown> | null;
|
|
47
|
+
}>, machine?: string): WorkflowSubgraph;
|
|
48
|
+
export interface MachineRowLike {
|
|
49
|
+
name: string;
|
|
50
|
+
value?: Array<Record<string, unknown> | null> | null;
|
|
51
|
+
pairs?: Array<Record<string, unknown> | null> | null;
|
|
52
|
+
}
|
|
53
|
+
export declare function workflowSubgraphFromRows(rows: MachineRowLike[], machine?: string): WorkflowSubgraph;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function terminalNamesOfEdges(a){const b=new Set(),c=new Set();for(const d of a){if(!d?.['node'])continue;b['add'](d['node']);if(d['prev_node'])c['add'](d['prev_node']);}return new Set([...b]['filter'](f=>!c['has'](f)));}export function terminalNamesOfRows(a){const b=new Set(a['map'](d=>d['name'])),c=new Set();for(const d of a)for(const e of d['value']??[])if(e['prev_node'])c['add'](e['prev_node']);return new Set([...b]['filter'](f=>!c['has'](f)));}export function deriveOrderCompletion(a,b){if(!a['machine'])return{'status':'completed'};if(!a['progress']||!a['currentNode'])return{'status':'in_progress'};if(!a['terminalNames'])return b?.(),{'status':'unknown'};if(a['terminalNames']['has'](a['currentNode']))return{'status':'completed','terminal':a['currentNode']};return{'status':'in_progress'};}const COMPLETION_RE=/(^|_)(completed?|done|finished|received|delivered|accepted|confirmed|finalized|success|approved|active)(_|$)/i,REFUND_RE=/(^|_)(cancel(led)?|refund(ed)?|return(ed|_approved)?|expired)(_|$)/i,EXCEPTION_RE=/(^|_)(interrupt(ed)?|exception|dispute(d)?|fail(ed)?|abort(ed)?|reject(ed)?)(_|$)/i;export function annotateNodeName(a){if(COMPLETION_RE['test'](a))return'completion';if(REFUND_RE['test'](a))return'refund';if(EXCEPTION_RE['test'](a))return'exception';return null;}export function annotateTerminals(a){const b=new Map();for(const c of a){const d=annotateNodeName(c);if(d)b['set'](c,d);}return b;}function subgraphOf(a,b){return{'machine':b,'transitions':a,'terminalNames':terminalNamesOfEdges(a['map'](c=>({'node':c['node'],'prev_node':c['prevNode']})))};}function flattenGuard(a){if(a&&typeof a==='object'&&typeof a['guard']==='string')return a['guard'];return typeof a==='string'?a:null;}export function workflowSubgraphFromEdges(a,b){const c=b?b['toLowerCase']()+'::node::':undefined,d=[];for(const f of a){if(f['schema']!=='wf.transition')continue;if(c&&!f['from']?.['startsWith'](c)&&!f['to']?.['startsWith'](c))continue;const g=f['payload']??{};if(typeof g['node']!=='string'||typeof g['prevNode']!=='string')continue;d['push']({'node':g['node'],'prevNode':g['prevNode'],'forward':typeof g['forward']==='string'?g['forward']:undefined,'threshold':typeof g['threshold']==='number'?g['threshold']:undefined,'guard':flattenGuard(g['guard']),'weight':typeof g['weight']==='number'?g['weight']:null,'namedOperator':g['namedOperator']!=null?String(g['namedOperator']):null,'permissionIndex':typeof g['permissionIndex']==='number'?g['permissionIndex']:null});}return subgraphOf(d,b);}export function workflowSubgraphFromRows(a,b){const c=[];for(const d of a){const e=typeof d?.['name']==='string'?d['name']:'';if(!e)continue;for(const g of d['value']??d['pairs']??[]){const h=g??{},i=typeof h['prev_node']==='string'?h['prev_node']:'',j=typeof h['threshold']==='number'?h['threshold']:undefined,k=Array['isArray'](h['forwards'])&&h['forwards']['length']>0x0?h['forwards']:[undefined];for(const l of k){const m=l??{},n=m['name'];c['push']({'node':e,'prevNode':i,'forward':typeof n==='string'&&n?n:undefined,'threshold':j,'guard':flattenGuard(m['guard']),'weight':typeof m['weight']==='number'?m['weight']:null,'namedOperator':typeof m['namedOperator']==='string'?m['namedOperator']:typeof m['named_operator']==='string'?m['named_operator']:null,'permissionIndex':typeof m['permissionIndex']==='number'?m['permissionIndex']:typeof m['permission_index']==='number'?m['permission_index']:null});}}}return subgraphOf(c,b);}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{rootOf}from'./extract.js';const MAX_MANAGED_TOTAL=0x3c,MAX_ORDERS=0x28,MAX_DEMANDS=0x14,MAX_ALLOCATIONS=0x28,MAX_CONTACTS=0x14,MAX_MACHINES=0xa,MAX_ARB_SERVICES=0xf;function fld(a,b){if(!a?.['raw'])return undefined;const c=rootOf(a['raw']);return c[b];}function addrList(a,b){const c=fld(a,b);return(Array['isArray'](c)?c:[])['filter'](d=>typeof d==='string');}function outEdges(a,b,c){return(a['out']['get'](b['toLowerCase']())??[])['filter'](d=>d['schema']===c);}function rawOf(a,b){return b?a['nodes']['get'](b['toLowerCase']()):undefined;}function managedTargets(a,b){const c=new Set();for(const d of[...outEdges(a,b,'permission.core_binding'),...outEdges(a,b,'permission.tx_binding')]){c['add'](d['to']);}return[...c]['map'](f=>a['nodes']['get'](f))['filter'](f=>!!f&&f['kind']==='object');}function mapMode(a){if(a===0x1||a==='Rate')return'Rate';if(a===0x2||a==='Surplus')return'Surplus';return'Amount';}export function projectRelationshipFacts(b,c){const f=c['toLowerCase'](),g=outEdges(b,f,'eoa.permission'),h=[],i=new Map();for(const C of g){const D=b['nodes']['get'](C['to']);if(!D)continue;const E=outEdges(b,D['id'],'permission.entity')['map'](H=>({'address':H['to'],'perm_indices':H['payload']?.['permIndices']??[]})),F=managedTargets(b,D['id']),G=F['filter'](H=>!!H['objectType'])['map'](H=>({'object_type':H['objectType'],'address':H['id']}));for(const H of G){if(i['size']>=MAX_MANAGED_TOTAL)break;i['set'](H['address']['toLowerCase'](),H);}h['push']({'address':D['id'],'owner':fld(D,'owner')??'','admins':addrList(D,'admin'),'entities':E,'anchor_role_bits':C['payload']?.['roleBits'],'managed_objects':G});}const j=I=>[...i['values']()]['filter'](J=>J['object_type']===I)['map'](J=>J['address']),k=j('Service'),l=j('Machine')['slice'](0x0,MAX_MACHINES),n=j('Demand')['slice'](0x0,MAX_DEMANDS),p=j('Contact')['slice'](0x0,MAX_CONTACTS),q=j('Arbitration'),r=new Map();for(const I of outEdges(b,f,'eoa.order'))r['set'](I['to'],'buyer');for(const J of k){for(const K of outEdges(b,J,'service.order'))r['set'](K['to'],'merchant');}const t=[],u={};for(const L of[...r['keys']()]['slice'](0x0,MAX_ORDERS)){const M=rawOf(b,L);if(!M||M['objectType']!=='Order')continue;const N=fld(M,'service')??'';t['push']({'address':M['id'],'owner':fld(M,'owner')??fld(M,'builder')??'','agents':addrList(M,'agent'),'service':N,'amount':fld(M,'amount'),'allocation':fld(M,'allocation'),'dispute_arbitrations':addrList(M,'dispute'),'claimed_by':fld(M,'claimed_by')??null});if(N){const O=rawOf(b,N),P=outEdges(b,N,'service.permission')[0x0]?.['to'],Q=rawOf(b,P),R=fld(Q,'owner');if(R)u[O?.['id']??N['toLowerCase']()]=R;}}const v=n['map'](S=>{const T=rawOf(b,S),U=outEdges(b,S,'demand.permission')[0x0]?.['to'],V=fld(rawOf(b,U),'owner')??'',W=outEdges(b,S,'demand.presenter')['map'](Y=>({'address':Y['to'],'service':typeof Y['payload']?.['service']==='string'?Y['payload']['service']:undefined,'acceptance_score':typeof Y['payload']?.['score']==='number'?Y['payload']['score']:undefined})),X=(fld(T,'guards')??[])['map'](Y=>typeof Y==='string'?Y:Y?.['guard'])['filter'](Y=>typeof Y==='string');return{'address':T['id'],'owner':V,'presenters':W,'rewards':addrList(T,'rewards'),'guards':X};}),w=[...new Set(t['map'](S=>S['allocation'])['filter'](S=>!!S))]['slice'](0x0,MAX_ALLOCATIONS),x=w['map'](S=>{const T=rawOf(b,S),U=fld(T,'allocators')??rootOf(T['raw']),V=Array['isArray'](U)?U:Array['isArray'](U?.['allocators'])?U['allocators']:[],W=V['flatMap'](X=>(Array['isArray'](X?.['sharing'])?X['sharing']:[])['map'](Y=>({'who':Y?.['who']??Y,'mode':mapMode(Y?.['mode']),'sharing':Y?.['sharing']!=null?String(Y['sharing']):undefined,'guard':typeof X?.['guard']==='string'?X['guard']:undefined})));return{'address':T['id'],'owner':fld(T,'owner'),'sharing':W};}),y=p['map'](S=>{const T=rawOf(b,S),U=outEdges(b,S,'contact.permission')[0x0]?.['to'],V=fld(rawOf(b,U),'owner')??'',W=(fld(T,'ims')??[])['map'](X=>typeof X==='string'?X:X?.['at'])['filter'](X=>typeof X==='string');return{'address':T['id'],'ims':W,'owner':V};}),z=l['map'](S=>{const T=rawOf(b,S),U=outEdges(b,S,'machine.permission')[0x0]?.['to'],V=S['toLowerCase']()+'::node::',W=b['edges']['filter'](X=>X['schema']==='wf.transition'&&X['from']['startsWith'](V))['map'](X=>({'node':X['payload']?.['prevNode']??'','next_node':X['payload']?.['node']??'','forward_name':X['payload']?.['forward']??'','named_operator':X['payload']?.['namedOperator']??null,'permission_index':X['payload']?.['permissionIndex']??null,'guard':X['payload']?.['guard']??null}));return{'address':T['id'],'permission_address':U,'forwards':W};}),A=new Map();for(const S of t){const T=r['get'](S['address']['toLowerCase']())??'buyer';for(const U of S['dispute_arbitrations']??[])A['set'](U['toLowerCase'](),T);}const B=[];for(const [V,W]of A){const X=rawOf(b,V);if(!X)continue;const Y=(fld(X,'voted')??[])['map'](Z=>({'address':typeof Z?.['voter']==='string'?Z['voter']:'','weight':typeof Z?.['weight']==='number'?Z['weight']:undefined}))['filter'](Z=>Z['address']['length']>0x0);B['push']({'address':X['id'],'object_kind':'case','voters':Y,'order':fld(X,'order'),'arbitration':fld(X,'arbitration'),'anchor_side':W,'bound_services':[]});}for(const Z of q['slice'](0x0,MAX_ARB_SERVICES)){if(A['has'](Z['toLowerCase']()))continue;B['push']({'address':Z,'object_kind':'service','voters':[],'bound_services':[]});}return{'anchor':f,'permissions':h,'machines':z,'orders':t,'demands':v,'allocations':x,'contacts':y,'arbitrations':B,'service_owners':u};}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
export interface ParsedForward {
|
|
2
|
+
name: string;
|
|
3
|
+
weight: number;
|
|
4
|
+
namedOperator?: string | null;
|
|
5
|
+
permissionIndex?: number | null;
|
|
6
|
+
guard?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ParsedPair {
|
|
9
|
+
prev_node: string;
|
|
10
|
+
threshold: number;
|
|
11
|
+
forwards: ParsedForward[];
|
|
12
|
+
}
|
|
13
|
+
export interface ParsedMachineNode {
|
|
14
|
+
name: string;
|
|
15
|
+
pairs: ParsedPair[];
|
|
16
|
+
}
|
|
17
|
+
export declare const QUERY_OBJECTS_BATCH = 50;
|
|
18
|
+
export declare function batchQueryObjectsByIds(ids: string[], network?: string, noCache?: boolean): Promise<any[]>;
|
|
19
|
+
export interface TableFieldEntry {
|
|
20
|
+
key: string;
|
|
21
|
+
objectId: string;
|
|
22
|
+
}
|
|
23
|
+
export interface BatchTableItem extends TableFieldEntry {
|
|
24
|
+
object?: any;
|
|
25
|
+
}
|
|
26
|
+
export interface BatchTableResult {
|
|
27
|
+
items: BatchTableItem[];
|
|
28
|
+
truncated: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface FetchTableEntriesResult {
|
|
31
|
+
entries: TableFieldEntry[];
|
|
32
|
+
truncated: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function fetchTableEntries(parent: string, opts?: {
|
|
35
|
+
network?: string;
|
|
36
|
+
noCache?: boolean;
|
|
37
|
+
limit?: number;
|
|
38
|
+
maxItems?: number;
|
|
39
|
+
}): Promise<FetchTableEntriesResult>;
|
|
40
|
+
export declare function fetchAllFieldObjectIds(parent: string, network?: string, noCache?: boolean): Promise<string[]>;
|
|
41
|
+
export declare function batchQueryTableItems(parent: string, opts?: {
|
|
42
|
+
network?: string;
|
|
43
|
+
noCache?: boolean;
|
|
44
|
+
limit?: number;
|
|
45
|
+
maxItems?: number;
|
|
46
|
+
}): Promise<BatchTableResult>;
|
|
47
|
+
export declare function fetchMachineNodes(machine: string, network?: string, noCache?: boolean): Promise<ParsedMachineNode[]>;
|
|
48
|
+
export declare function batchReadAddressKeyedFields(parent: string, addresses: string[], network?: string, noCache?: boolean): Promise<Map<string, any>>;
|
|
49
|
+
export declare function batchReadKeyedItems(parent: string, addresses: string[], network?: string, noCache?: boolean): Promise<Map<string, any>>;
|
|
50
|
+
export declare function batchReadU64KeyedFields(parent: string, indices: Array<number | string | bigint>, network?: string, noCache?: boolean): Promise<Map<string, any>>;
|
|
51
|
+
export declare const ENTITY_REGISTRAR_OBJECT_ID = "0x0000000000000000000000000000000000000000000000000000000000000aab";
|
|
52
|
+
export declare const ENTITY_LINKER_OBJECT_ID = "0x0000000000000000000000000000000000000000000000000000000000000aaa";
|
|
53
|
+
export declare function batchFetchEntityRegistrar(addresses: string[], network?: string, noCache?: boolean): Promise<Map<string, any>>;
|
|
54
|
+
export declare function batchFetchEntityLinker(addresses: string[], network?: string, noCache?: boolean): Promise<Map<string, any>>;
|
|
55
|
+
export declare const ENTITY_PERMISSION_OBJECT_ID = "0xaad";
|
|
56
|
+
export declare const ENTITY_PERMISSION_ROLES: {
|
|
57
|
+
readonly OWNER: 1;
|
|
58
|
+
readonly ADMIN: 2;
|
|
59
|
+
readonly ENTITY: 4;
|
|
60
|
+
};
|
|
61
|
+
export interface EntityPermissionItem {
|
|
62
|
+
role: number;
|
|
63
|
+
permission: string;
|
|
64
|
+
time: number;
|
|
65
|
+
}
|
|
66
|
+
export interface EntityPermissionContext {
|
|
67
|
+
items: EntityPermissionItem[];
|
|
68
|
+
byPermission: Map<string, number>;
|
|
69
|
+
}
|
|
70
|
+
export declare function batchFetchEntityPermission(addresses: string[], network?: string, noCache?: boolean): Promise<Map<string, EntityPermissionContext>>;
|
|
71
|
+
export declare function fetchEntityPermission(entityAddr: string, network?: string, noCache?: boolean): Promise<EntityPermissionContext | undefined>;
|
|
72
|
+
export declare const ENTITY_CONTACT_OBJECT_ID = "0xaa9";
|
|
73
|
+
export interface EntityContactItem {
|
|
74
|
+
contact: string;
|
|
75
|
+
time: number;
|
|
76
|
+
}
|
|
77
|
+
export interface EntityContactContext {
|
|
78
|
+
items: EntityContactItem[];
|
|
79
|
+
byContact: Map<string, number>;
|
|
80
|
+
}
|
|
81
|
+
export declare function batchFetchEntityContact(addresses: string[], network?: string, noCache?: boolean): Promise<Map<string, EntityContactContext>>;
|
|
82
|
+
export declare function fetchEntityContact(entityAddr: string, network?: string, noCache?: boolean): Promise<EntityContactContext | undefined>;
|
|
83
|
+
export declare const ENTITY_ORDER_OBJECT_ID = "0xaa8";
|
|
84
|
+
export declare const ENTITY_ORDER_ROLES: {
|
|
85
|
+
readonly OWNER: 1;
|
|
86
|
+
readonly AGENT: 2;
|
|
87
|
+
};
|
|
88
|
+
export interface EntityOrderItem {
|
|
89
|
+
role: number;
|
|
90
|
+
order: string;
|
|
91
|
+
time: number;
|
|
92
|
+
}
|
|
93
|
+
export interface EntityOrderContext {
|
|
94
|
+
items: EntityOrderItem[];
|
|
95
|
+
byOrder: Map<string, number>;
|
|
96
|
+
}
|
|
97
|
+
export declare function batchFetchEntityOrder(addresses: string[], network?: string, noCache?: boolean): Promise<Map<string, EntityOrderContext>>;
|
|
98
|
+
export declare const OBJECT_LINKER_CORE_OBJECT_ID = "0xaae";
|
|
99
|
+
export declare const OBJECT_LINKER_TX_OBJECT_ID = "0xaaf";
|
|
100
|
+
export interface ObjectLinkerItem {
|
|
101
|
+
who: string;
|
|
102
|
+
time: number;
|
|
103
|
+
}
|
|
104
|
+
export interface ObjectLinkerContext {
|
|
105
|
+
items: ObjectLinkerItem[];
|
|
106
|
+
byWho: Map<string, number>;
|
|
107
|
+
}
|
|
108
|
+
export declare function batchFetchObjectLinker(objectId: string, targetAddrs: string[], network?: string, noCache?: boolean): Promise<Map<string, ObjectLinkerContext>>;
|
|
109
|
+
export declare function batchFetchObjectLinkerCore(targetAddrs: string[], network?: string, noCache?: boolean): Promise<Map<string, ObjectLinkerContext>>;
|
|
110
|
+
export declare function batchFetchObjectLinkerTx(targetAddrs: string[], network?: string, noCache?: boolean): Promise<Map<string, ObjectLinkerContext>>;
|
|
111
|
+
export declare function fetchObjectLinkerCore(targetAddr: string, network?: string, noCache?: boolean): Promise<ObjectLinkerContext | undefined>;
|
|
112
|
+
export declare function fetchObjectLinkerTx(targetAddr: string, network?: string, noCache?: boolean): Promise<ObjectLinkerContext | undefined>;
|
|
113
|
+
export declare function fetchServiceOrders(targetAddr: string, network?: string, noCache?: boolean): Promise<ObjectLinkerContext | undefined>;
|
|
114
|
+
export interface PermissionContext {
|
|
115
|
+
admin: Set<string>;
|
|
116
|
+
table: Map<string, Set<number>>;
|
|
117
|
+
}
|
|
118
|
+
export interface OrderContext {
|
|
119
|
+
builder: string;
|
|
120
|
+
agent: Set<string>;
|
|
121
|
+
}
|
|
122
|
+
export declare function fetchPermissionContext(permAddr: string, network?: string, noCache?: boolean): Promise<PermissionContext | undefined>;
|
|
123
|
+
export declare function fetchOrderContext(orderAddr: string, network?: string, noCache?: boolean): Promise<OrderContext | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ObjectType,objectTypeFromAddress}from'@wowok/wowok';import{MAX_OBJECTS_PER_QUERY}from'./dataplane.js';import{SdkDataPlane}from'./sdk-dataplane.js';export const QUERY_OBJECTS_BATCH=MAX_OBJECTS_PER_QUERY;const planes=new Map();function batchPlane(a,b){const c=(a??'')+'|'+(b?0x1:0x0);let d=planes['get'](c);return!d&&(d=new SdkDataPlane(a??undefined,{'noCache':b}),planes['set'](c,d)),d;}function parentToken(a){return String(a)['toLowerCase']();}export async function batchQueryObjectsByIds(a,b,c){const d=await batchPlane(b,c)['getObjects'](a);return[...d['values']()];}export async function fetchTableEntries(a,b){const {items:c,truncated:d}=await batchPlane(b?.['network'],b?.['noCache'])['getTable'](a,{'maxItems':b?.['maxItems'],'pageLimit':b?.['limit'],'fetchValues':![]});return{'entries':c['map'](f=>({'key':f['key'],'objectId':f['objectId']})),'truncated':d};}export async function fetchAllFieldObjectIds(a,b,c){const {entries:d}=await fetchTableEntries(a,{'network':b,'noCache':c});return d['map'](f=>f['objectId']);}export async function batchQueryTableItems(a,b){const c=await batchPlane(b?.['network'],b?.['noCache'])['getTable'](a,{'maxItems':b?.['maxItems'],'pageLimit':b?.['limit']});return{'items':c['items'],'truncated':c['truncated']};}export async function fetchMachineNodes(a,b,c){const d=await batchQueryObjectsByIds([a],b,c),e=d[0x0],f=e?.['object']??(typeof a==='string'&&a['startsWith']('0x')?a:undefined);if(!f)return[];const {items:g}=await batchQueryTableItems(f,{'network':b,'noCache':c});return g['map'](h=>h['object'])['filter'](h=>h?.['type']==='TableItem_MachineNode')['map'](h=>{const i=h?.['data']??h,j=typeof i?.['name']==='string'?i['name']:'',k=Array['isArray'](i?.['value'])?i['value']:Array['isArray'](i?.['pairs'])?i['pairs']:[];if(!j)return null;return{'name':j,'pairs':k['map'](l=>({'prev_node':String(l?.['prev_node']??''),'threshold':Number(l?.['threshold']??0x0),'forwards':Array['isArray'](l?.['forwards'])?l['forwards']['map'](m=>{const n=typeof m?.['guard']==='object'&&m?.['guard']!==null?m['guard']['guard']??undefined:typeof m?.['guard']==='string'?m['guard']:undefined;return{'name':String(m?.['name']??''),'weight':Number(m?.['weight']??0x0),'namedOperator':m?.['namedOperator']!==undefined&&m?.['namedOperator']!==null?String(m['namedOperator']):undefined,'permissionIndex':m?.['permissionIndex']!==undefined&&m?.['permissionIndex']!==null?Number(m['permissionIndex']):undefined,'guard':n};}):[]}))};})['filter'](h=>h!==null);}export async function batchReadAddressKeyedFields(a,b,c,d){const e=[...new Set((b??[])['map'](f=>String(f)['toLowerCase']())['filter'](f=>f['startsWith']('0x')))];return batchPlane(c,d)['getKeyedFields'](parentToken(a),e);}export async function batchReadKeyedItems(a,b,c,d){const e=[...new Set((b??[])['map'](f=>String(f)['toLowerCase']())['filter'](f=>f['startsWith']('0x')))];return batchPlane(c,d)['getKeyedFields'](parentToken(a),e,{'strict':!![]});}export async function batchReadU64KeyedFields(a,b,c,d){const e=[...new Set((b??[])['map'](f=>String(f))['filter'](f=>f!==''&&Number['isFinite'](Number(f))))];return batchPlane(c,d)['getKeyedFields'](parentToken(a),e,{'keyType':'u64'});}export const ENTITY_REGISTRAR_OBJECT_ID='0x0000000000000000000000000000000000000000000000000000000000000aab';export const ENTITY_LINKER_OBJECT_ID='0x0000000000000000000000000000000000000000000000000000000000000aaa';export async function batchFetchEntityRegistrar(a,b,c){try{return await batchReadAddressKeyedFields(ENTITY_REGISTRAR_OBJECT_ID,a,b,c);}catch{return new Map();}}export async function batchFetchEntityLinker(a,b,c){try{return await batchReadAddressKeyedFields(ENTITY_LINKER_OBJECT_ID,a,b,c);}catch{return new Map();}}export const ENTITY_PERMISSION_OBJECT_ID='0xaad';export const ENTITY_PERMISSION_ROLES={'OWNER':0x1,'ADMIN':0x2,'ENTITY':0x4};export async function batchFetchEntityPermission(b,c,e){const f=new Map(),g=await batchReadKeyedItems(ENTITY_PERMISSION_OBJECT_ID,b,c,e);for(const h of new Set((b??[])['map'](i=>String(i)['toLowerCase']()))){f['set'](h,{'items':[],'byPermission':new Map()});}for(const [i,j]of g){const k=j,l=[],m=new Map();for(const n of Array['isArray'](k?.['items'])?k['items']:[]){const o=Number(n?.['role']??0x0),p=String(n?.['permission']??'')['toLowerCase'](),q=Number(n?.['time']??0x0);p&&(l['push']({'role':o,'permission':p,'time':q}),m['set'](p,(m['get'](p)??0x0)|o));}f['set'](i,{'items':l,'byPermission':m});}return f;}export async function fetchEntityPermission(a,b,c){try{const d=await batchFetchEntityPermission([a],b,c);return d['get'](String(a)['toLowerCase']());}catch{return undefined;}}export const ENTITY_CONTACT_OBJECT_ID='0xaa9';export async function batchFetchEntityContact(b,c,e){const f=new Map(),g=await batchReadKeyedItems(ENTITY_CONTACT_OBJECT_ID,b,c,e);for(const h of new Set((b??[])['map'](i=>String(i)['toLowerCase']()))){f['set'](h,{'items':[],'byContact':new Map()});}for(const [i,j]of g){const k=j,l=[],m=new Map();for(const n of Array['isArray'](k?.['items'])?k['items']:[]){const o=String(n?.['contact']??'')['toLowerCase'](),p=Number(n?.['time']??0x0);o&&(l['push']({'contact':o,'time':p}),m['set'](o,(m['get'](o)??0x0)||p));}f['set'](i,{'items':l,'byContact':m});}return f;}export async function fetchEntityContact(a,b,c){try{const d=await batchFetchEntityContact([a],b,c);return d['get'](String(a)['toLowerCase']());}catch{return undefined;}}export const ENTITY_ORDER_OBJECT_ID='0xaa8';export const ENTITY_ORDER_ROLES={'OWNER':0x1,'AGENT':0x2};export async function batchFetchEntityOrder(b,c,e){const f=new Map(),g=await batchReadKeyedItems(ENTITY_ORDER_OBJECT_ID,b,c,e);for(const h of new Set((b??[])['map'](i=>String(i)['toLowerCase']()))){f['set'](h,{'items':[],'byOrder':new Map()});}for(const [i,j]of g){const k=j,l=[],m=new Map();for(const n of Array['isArray'](k?.['items'])?k['items']:[]){const o=Number(n?.['role']??0x0),p=String(n?.['order']??'')['toLowerCase'](),q=Number(n?.['time']??0x0);p&&(l['push']({'role':o,'order':p,'time':q}),m['set'](p,(m['get'](p)??0x0)|o));}f['set'](i,{'items':l,'byOrder':m});}return f;}export const OBJECT_LINKER_CORE_OBJECT_ID='0xaae';export const OBJECT_LINKER_TX_OBJECT_ID='0xaaf';export async function batchFetchObjectLinker(b,c,e,f){const g=new Map(),h=await batchReadKeyedItems(b,c,e,f);for(const i of new Set((c??[])['map'](j=>String(j)['toLowerCase']()))){g['set'](i,{'items':[],'byWho':new Map()});}for(const [j,k]of h){const l=k,m=[],n=new Map();for(const o of Array['isArray'](l?.['items'])?l['items']:[]){const p=String(o?.['who']??'')['toLowerCase'](),q=Number(o?.['time']??0x0);p&&(m['push']({'who':p,'time':q}),n['set'](p,q));}g['set'](j,{'items':m,'byWho':n});}return g;}export function batchFetchObjectLinkerCore(a,b,c){return batchFetchObjectLinker(OBJECT_LINKER_CORE_OBJECT_ID,a,b,c);}export function batchFetchObjectLinkerTx(a,b,c){return batchFetchObjectLinker(OBJECT_LINKER_TX_OBJECT_ID,a,b,c);}async function fetchObjectLinker(a,b,c,d){try{const e=await batchFetchObjectLinker(a,[b],c,d);return e['get'](String(b)['toLowerCase']());}catch{return undefined;}}export function fetchObjectLinkerCore(a,b,c){return fetchObjectLinker(OBJECT_LINKER_CORE_OBJECT_ID,a,b,c);}export function fetchObjectLinkerTx(a,b,c){return fetchObjectLinker(OBJECT_LINKER_TX_OBJECT_ID,a,b,c);}export async function fetchServiceOrders(a,b,c){const d=await fetchObjectLinkerTx(a,b,c);if(!d)return undefined;const e=d['items']['filter'](f=>objectTypeFromAddress(f['who'])===ObjectType['Order']);return{'items':e,'byWho':new Map(e['map'](f=>[f['who'],f['time']]))};}export async function fetchPermissionContext(a,b,c){try{const e=await batchQueryObjectsByIds([a],b,c),f=e[0x0],g=f?.['data']??f,h=new Set((g?.['admin']??[])['map'](k=>String(k)['toLowerCase']())),i=new Map(),{items:j}=await batchQueryTableItems(a,{'network':b,'noCache':c});for(const k of j){const l=k['object'],m=l?.['data']??l;m?.['address']!=null&&Array['isArray'](m['perm'])&&i['set'](String(m['address'])['toLowerCase'](),new Set(m['perm']['map'](n=>Number(n))));}return{'admin':h,'table':i};}catch{return undefined;}}export async function fetchOrderContext(a,b,c){try{const e=await batchQueryObjectsByIds([a],b,c),f=e[0x0];if(f?.['type']!=='Order'&&f?.['data']?.['type']!=='Order')return undefined;const g=f?.['data']??f;return{'builder':String(g['builder']??g['owner']??''),'agent':new Set((g['agent']??[])['map'](h=>String(h)['toLowerCase']()))};}catch{return undefined;}}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type ENTRYPOINT } from "@wowok/wowok";
|
|
2
|
+
import type { DataPlane, EventCursor, EventPage, RawObject, TableItem } from "./types.js";
|
|
3
|
+
export interface SdkPlaneStats {
|
|
4
|
+
batches: number;
|
|
5
|
+
byChannel: {
|
|
6
|
+
objects: number;
|
|
7
|
+
keyedFields: number;
|
|
8
|
+
tables: number;
|
|
9
|
+
events: number;
|
|
10
|
+
};
|
|
11
|
+
dedupHits: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class SdkDataPlane implements DataPlane {
|
|
14
|
+
private readonly network;
|
|
15
|
+
private readonly opts?;
|
|
16
|
+
private readonly objectCache;
|
|
17
|
+
private readonly keyedCache;
|
|
18
|
+
readonly stats: SdkPlaneStats;
|
|
19
|
+
constructor(network: ENTRYPOINT, opts?: {
|
|
20
|
+
concurrency?: number;
|
|
21
|
+
noCache?: boolean;
|
|
22
|
+
} | undefined);
|
|
23
|
+
getObjects(ids: string[], opts?: {
|
|
24
|
+
strict?: boolean;
|
|
25
|
+
}): Promise<Map<string, RawObject>>;
|
|
26
|
+
getKeyedFields(parent: string, keys: string[], opts?: {
|
|
27
|
+
keyType?: "address" | "u64";
|
|
28
|
+
strict?: boolean;
|
|
29
|
+
}): Promise<Map<string, RawObject>>;
|
|
30
|
+
getTable(parent: string, opts?: {
|
|
31
|
+
maxItems?: number;
|
|
32
|
+
pageLimit?: number;
|
|
33
|
+
fetchValues?: boolean;
|
|
34
|
+
}): Promise<{
|
|
35
|
+
items: TableItem[];
|
|
36
|
+
truncated: boolean;
|
|
37
|
+
}>;
|
|
38
|
+
getEvents(type: string, opts?: {
|
|
39
|
+
cursor?: EventCursor | null;
|
|
40
|
+
maxPages?: number;
|
|
41
|
+
limit?: number;
|
|
42
|
+
}): Promise<EventPage>;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{bcs,deriveDynamicFieldID,query_events,query_objects,query_table,LocalMark}from'@wowok/wowok';import{chunk50,mapPool}from'./dataplane.js';export class SdkDataPlane{['network'];['opts'];['objectCache']=new Map();['keyedCache']=new Map();['stats']={'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0};constructor(a,b){this['network']=a,this['opts']=b;}async['getObjects'](a,b){const c=a['map'](j=>String(j)['toLowerCase']()),d=await LocalMark['Instance']()['get_many_address'](c),e=[...new Set(d['filter'](j=>!!j))],f=new Map(),g=[],h=this['opts']?.['noCache']===!![];for(const j of e){const k=h?undefined:this['objectCache']['get'](j);k?(this['stats']['dedupHits']++,f['set'](j,k)):g['push'](j);}if(g['length']===0x0)return f;const i=chunk50(g);return await mapPool(i,this['opts']?.['concurrency']??0x4,async l=>{this['stats']['batches']++,this['stats']['byChannel']['objects']++;try{const m=await query_objects({'objects':l,'no_cache':this['opts']?.['noCache'],'network':this['network']});for(const n of m?.['objects']??[]){const p=String(n?.['object']??'')['toLowerCase']();if(!p)continue;if(!h)this['objectCache']['set'](p,n);f['set'](p,n);}}catch(q){if(b?.['strict'])throw q;}}),f;}async['getKeyedFields'](a,b,c){const d=c?.['keyType']??'address',e=String(a)['toLowerCase'](),f=a+':'+d,g=this['opts']?.['noCache']===!![],h=g?undefined:this['keyedCache']['get'](f),i=new Map(),j=[];for(const o of b){const p=String(o)['toLowerCase'](),q=h?.['get'](p);if(q){this['stats']['dedupHits']++,i['set'](p,q);continue;}const r=d==='u64'?bcs['u64']()['serialize'](Number(p))['toBytes']():bcs['Address']['serialize'](p)['toBytes'](),s=deriveDynamicFieldID(e,d,r)['toLowerCase']();j['push']({'key':p,'fieldId':s});}if(j['length']===0x0)return i;const k=new Map();for(const t of j)k['set'](t['fieldId'],t['key']);const l=chunk50(j)['length'],m=await this['getObjects']([...k['keys']()],{'strict':c?.['strict']});this['stats']['byChannel']['objects']=Math['max'](0x0,this['stats']['byChannel']['objects']-l),this['stats']['byChannel']['keyedFields']+=l;const n=h??new Map();for(const [u,v]of k){const x=m['get'](u);if(!x)continue;const y=x['data']??x,z=y;n['set'](v,z),i['set'](v,z);}if(!g)this['keyedCache']['set'](f,n);return i;}async['getTable'](a,b){const c=[];let d=![],f;for(;;){this['stats']['batches']++,this['stats']['byChannel']['tables']++;let g;try{g=await query_table({'parent':a,'cursor':f??undefined,'limit':b?.['pageLimit'],'no_cache':this['opts']?.['noCache'],'network':this['network']});}catch{break;}for(const h of g?.['items']??[]){const i=String(h?.['object']??'')['toLowerCase']();if(i['startsWith']('0x'))c['push']({'key':String(h?.['key']?.['value']??''),'objectId':i});}if(b?.['maxItems']!=null&&c['length']>=b['maxItems']){c['length']=b['maxItems'],d=g?.['hasNextPage']===!![];break;}if(g?.['hasNextPage']!==!![]||!g['nextCursor'])break;f=String(g['nextCursor']);}if(b?.['fetchValues']!==![]&&c['length']>0x0){const j=await this['getObjects'](c['map'](k=>k['objectId']));for(const k of c)k['object']=j['get'](k['objectId']);}return{'items':c,'truncated':d};}async['getEvents'](a,b){const c=[];let d=b?.['cursor']??null;const e=b?.['maxPages']??0x1,f=b?.['limit']??0x32;let g=![];for(let h=0x0;h<e;h++){this['stats']['batches']++,this['stats']['byChannel']['events']++;let i;try{i=await query_events({'type':a,'cursor':d,'limit':f,'order':'descending','no_cache':this['opts']?.['noCache'],'network':this['network']});}catch{g=!![];break;}const j=i?.['data']??[];c['push'](...j);if(i?.['hasNextPage']!==!![]||!i['nextCursor']){d=i?.['nextCursor']??null;break;}d=i['nextCursor'];if(h+0x1===e)g=!![];}return{'events':c,'cursor':d,'truncated':g};}}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { EdgeFamily, ExpandBudget, EdgeWhitelist } from "./types.js";
|
|
2
|
+
export type TopologyIntent = "full_map" | "order_health" | "fund_flow" | "workflow" | "counterparty" | "reputation" | "permission" | "supply_chain" | "arbitration" | "demand_match";
|
|
3
|
+
export declare const TOPOLOGY_INTENTS: readonly TopologyIntent[];
|
|
4
|
+
export declare function isTopologyIntent(v: unknown): v is TopologyIntent;
|
|
5
|
+
export interface StrategyFragment {
|
|
6
|
+
families?: EdgeFamily[];
|
|
7
|
+
schemas?: string[];
|
|
8
|
+
tableEdges?: string[];
|
|
9
|
+
familyDepths?: Partial<Record<EdgeFamily, number>>;
|
|
10
|
+
maxDepth?: number;
|
|
11
|
+
maxNodes?: number;
|
|
12
|
+
maxFanout?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface IntentPreset extends StrategyFragment {
|
|
15
|
+
description: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const INTENT_PRESETS: Record<TopologyIntent, IntentPreset>;
|
|
18
|
+
export interface ExpansionStrategy {
|
|
19
|
+
intents: TopologyIntent[];
|
|
20
|
+
edges: EdgeWhitelist;
|
|
21
|
+
budget: Partial<ExpandBudget>;
|
|
22
|
+
trace: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface ExplicitExpansionParams {
|
|
25
|
+
families?: EdgeFamily[];
|
|
26
|
+
schemas?: string[];
|
|
27
|
+
deny?: string[];
|
|
28
|
+
tableEdges?: string[];
|
|
29
|
+
budget?: Partial<ExpandBudget>;
|
|
30
|
+
}
|
|
31
|
+
export interface StrategyResolutionInput {
|
|
32
|
+
intents?: TopologyIntent[];
|
|
33
|
+
personaPref?: StrategyFragment & {
|
|
34
|
+
intents?: TopologyIntent[];
|
|
35
|
+
};
|
|
36
|
+
roleDefault?: {
|
|
37
|
+
intents?: TopologyIntent[];
|
|
38
|
+
} & StrategyFragment;
|
|
39
|
+
industryTemplate?: StrategyFragment & {
|
|
40
|
+
label?: string;
|
|
41
|
+
};
|
|
42
|
+
explicitEdges?: ExplicitExpansionParams;
|
|
43
|
+
}
|
|
44
|
+
export declare function resolveExpansionStrategy(input: StrategyResolutionInput): ExpansionStrategy;
|
|
45
|
+
export interface TopologyFocusPref {
|
|
46
|
+
intents?: TopologyIntent[];
|
|
47
|
+
families?: EdgeFamily[];
|
|
48
|
+
table_edges?: string[];
|
|
49
|
+
family_depths?: Partial<Record<EdgeFamily, number>>;
|
|
50
|
+
max_depth?: number;
|
|
51
|
+
max_nodes?: number;
|
|
52
|
+
max_fanout?: number;
|
|
53
|
+
}
|
|
54
|
+
export declare function normalizeTopologyFocusPref(v: unknown): TopologyFocusPref | undefined;
|