@wowok/agent-mcp 3.1.7 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/exposure.d.ts +10 -10
- package/dist/config/judgment.d.ts +25 -25
- package/dist/config/rule-engine.d.ts +25 -25
- package/dist/customer/user-preferences.d.ts +2 -2
- package/dist/evaluation/arbitration-game.js +1 -1
- package/dist/evaluation/capability.d.ts +1 -1
- package/dist/evaluation/extract.js +1 -1
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/extensions/industry-pack.d.ts +3 -2
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/extensions/registry.js +1 -1
- package/dist/extensions/types.d.ts +1 -0
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/analyze.spec.js +1 -1
- package/dist/graph/onchain/edge-schema.js +1 -1
- package/dist/graph/onchain/extract.js +1 -1
- package/dist/graph/onchain/field-manifest.js +1 -1
- package/dist/graph/onchain/project-relationship.js +1 -1
- package/dist/graph/onchain/types.d.ts +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/keeper/KeeperScan.d.ts +2 -1
- package/dist/keeper/KeeperScan.js +1 -1
- package/dist/keeper/detectors.d.ts +9 -0
- package/dist/keeper/detectors.js +1 -1
- package/dist/keeper/keeper.spec.js +1 -1
- package/dist/keeper/types.d.ts +1 -1
- package/dist/keeper/types.js +1 -1
- package/dist/knowledge/allocation-ledger.d.ts +4 -1
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.d.ts +2 -0
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +1 -1
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/arb-risk.d.ts +3 -1
- package/dist/knowledge/arb-risk.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-risk.js +1 -1
- package/dist/knowledge/arbitration-templates.d.ts +1 -0
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +13 -2
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/allocation.json +50 -1
- package/dist/knowledge/baselines/rules/arb.json +20 -1
- package/dist/knowledge/baselines/rules/arbitration.json +27 -0
- package/dist/knowledge/baselines/rules/guard.json +75 -2
- package/dist/knowledge/baselines/rules/machine.json +38 -13
- package/dist/knowledge/baselines/rules/order.json +2 -2
- package/dist/knowledge/builtin-templates.d.ts +3 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-anchor-reach.d.ts +19 -0
- package/dist/knowledge/guard-anchor-reach.js +1 -0
- package/dist/knowledge/guard-bindings.js +1 -1
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-ledger.js +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-render.d.ts +6 -0
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-submission-prompt.d.ts +6 -0
- package/dist/knowledge/guard-submission-prompt.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/index.d.ts +4 -4
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-generalizer.js +1 -1
- package/dist/knowledge/industry-registry.d.ts +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-ledger.js +1 -1
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-templates.js +1 -1
- package/dist/knowledge/order-ledger.js +1 -1
- package/dist/knowledge/order-templates.js +1 -1
- package/dist/knowledge/permission-ledger.js +1 -1
- package/dist/knowledge/release-sentinel.d.ts +12 -0
- package/dist/knowledge/release-sentinel.js +1 -0
- package/dist/knowledge/repository-write-semantics.d.ts +27 -0
- package/dist/knowledge/repository-write-semantics.js +1 -0
- package/dist/knowledge/rule-node-analyzers.d.ts +6 -0
- package/dist/knowledge/rule-node-analyzers.js +1 -1
- package/dist/knowledge/safety-rules.d.ts +5 -1
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +10 -1
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/service-allocation-semantics.d.ts +36 -0
- package/dist/knowledge/service-allocation-semantics.js +1 -0
- package/dist/knowledge/strategy-manuals.d.ts +3 -5
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-loader.d.ts +28 -12
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +26 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/allocation-advice.d.ts +38 -0
- package/dist/participation/allocation-advice.js +1 -0
- package/dist/participation/radar-core.d.ts +2 -0
- package/dist/persona/types.d.ts +3 -2
- package/dist/persona/types.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/intent-analyzer.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +70 -63
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/mode-actions.d.ts +5 -0
- package/dist/playbooks/service-build/mode-actions.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/semantic-graph.d.ts +1 -0
- package/dist/playbooks/service-build/semantic-graph.js +1 -1
- package/dist/playbooks/service-build/service-quote.d.ts +2 -0
- package/dist/playbooks/service-build/service-quote.js +1 -0
- package/dist/relationship/derivation.d.ts +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +30 -8
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +6 -3
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/guard.d.ts +8 -8
- package/dist/schema/call/machine.d.ts +56 -0
- package/dist/schema/call/machine.js +1 -1
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +84 -22
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/common/tokentype-short-probe.spec.js +1 -0
- package/dist/schema/evaluation/index.d.ts +8 -80
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +9 -42
- package/dist/schema/goal/planning.d.ts +25 -60
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +2 -20
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/interaction/index.d.ts +1 -1
- package/dist/schema/keeper/index.d.ts +3 -0
- package/dist/schema/keeper/index.js +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/operations.d.ts +74 -14
- package/dist/schema/persona/index.d.ts +279 -384
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +149 -10
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +35 -16
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +4 -4
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/watch/index.d.ts +2 -2
- package/dist/schema-query-impl/index.d.ts +1 -0
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +2 -2
- package/dist/schemas/benchmark_migration_operation.output.json +116 -2
- package/dist/schemas/benchmark_migration_operation.schema.json +2 -10
- package/dist/schemas/bridge_operation.output.json +2 -2
- package/dist/schemas/evaluation_operation.schema.json +7 -70
- package/dist/schemas/goal_operation.schema.json +6 -39
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/intent_radar.output.json +4 -20
- package/dist/schemas/keeper_operation.output.json +2 -2
- package/dist/schemas/keeper_operation.schema.json +9 -4
- package/dist/schemas/local_history_operation.output.json +2 -2
- package/dist/schemas/local_info_operation.output.json +2 -2
- package/dist/schemas/local_mark_operation.output.json +2 -2
- package/dist/schemas/messenger_operation.output.json +2 -2
- package/dist/schemas/monitor_events.output.json +2 -2
- package/dist/schemas/monitor_subscription.output.json +2 -2
- package/dist/schemas/onchain_events.output.json +2 -2
- package/dist/schemas/onchain_operations.output.json +6 -6
- package/dist/schemas/onchain_operations.schema.json +227 -54
- package/dist/schemas/onchain_operations_allocation.schema.json +11 -10
- package/dist/schemas/onchain_operations_arbitration.schema.json +13 -13
- package/dist/schemas/onchain_operations_machine.schema.json +27 -5
- package/dist/schemas/onchain_operations_order.schema.json +1 -1
- package/dist/schemas/onchain_operations_payment.schema.json +2 -2
- package/dist/schemas/onchain_operations_reward.schema.json +1 -1
- package/dist/schemas/onchain_operations_service.schema.json +171 -21
- package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
- package/dist/schemas/onchain_table_data.output.json +57 -4
- package/dist/schemas/persona_operation.output.json +11 -88
- package/dist/schemas/persona_operation.schema.json +4 -32
- package/dist/schemas/query_toolkit.output.json +320 -22
- package/dist/schemas/query_toolkit.schema.json +53 -0
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/dispatch-expectations.spec.js +1 -1
- package/dist/tools/handlers/keeper.d.ts +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
- package/dist/knowledge/alloc-audit-policy.spec.js +0 -1
- package/dist/knowledge/event-semantics.spec.d.ts +0 -1
- package/dist/knowledge/event-semantics.spec.js +0 -1
- package/dist/knowledge/facts-sync.spec.d.ts +0 -1
- package/dist/knowledge/facts-sync.spec.js +0 -1
- package/dist/knowledge/guard-design-patterns.spec.d.ts +0 -1
- package/dist/knowledge/guard-design-patterns.spec.js +0 -1
- package/dist/knowledge/guard-eval.spec.d.ts +0 -1
- package/dist/knowledge/guard-eval.spec.js +0 -1
- package/dist/knowledge/rule-node-analyzers.spec.d.ts +0 -1
- package/dist/knowledge/rule-node-analyzers.spec.js +0 -1
- package/dist/knowledge/safety-rules.extract-amount.spec.d.ts +0 -1
- package/dist/knowledge/safety-rules.extract-amount.spec.js +0 -1
- package/dist/knowledge/template-loader.spec.d.ts +0 -1
- package/dist/knowledge/template-loader.spec.js +0 -1
- package/dist/knowledge/template-scanner.spec.d.ts +0 -1
- package/dist/knowledge/template-scanner.spec.js +0 -1
- /package/dist/{knowledge/alloc-audit-policy.spec.d.ts → schema/common/tokentype-short-probe.spec.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
export const ORDER_TEMPLATES=[{'id':'T-O-01','name':'Standard\x20retail\x20order\x20(single\x20item,\x20no\x20machine)','description':'Template\x20for\x20buying\x20a\x20single\x20retail\x20item\x20from\x20a\x20Service\x20without\x20a\x20Machine\x20workflow.\x20Order\x20created\x20through\x20the\x20Service\x27s\x20purchase\x20entry.','applicable_scenes':['order_create','order_required_info'],'industry_tags':['retail','universal'],'params':[{'name':'service_address','type':'address','description':'Service\x20object\x20address\x20(the\x20purchase\x20target)','required':!![]},{'name':'purchase_item_name','type':'string','description':'Item\x20name\x20(must\x20match\x20Service\x27s\x20sale\x20item\x20name)','required':!![]},{'name':'purchase_item_price','type':'string','description':'Item\x20price\x20in\x20MIST\x20(string\x20for\x20u64\x20precision)','required':!![]},{'name':'purchase_item_quantity','type':'number','description':'Quantity\x20to\x20purchase','required':!![],'default':0x1},{'name':'wip_hash','type':'string','description':'WIP\x20hash\x20(NOT\x20empty\x20string\x20—\x20use\x20\x270x\x27\x20+\x20actual\x20hash)','required':!![]},{'name':'discount_address','type':'address','description':'Discount\x20object\x20address\x20(optional)','required':![]},{'name':'named_order','type':'string','description':'Order\x20alias\x20name\x20(optional,\x20for\x20SDK\x20lookup)','required':![]},{'name':'contact_address','type':'address','description':'Contact\x20object\x20address\x20for\x20required_info\x20(recipient)','required':![]}],'body':a=>{const b={'_note':'Order\x20creation\x20goes\x20through\x20the\x20Service\x20purchase\x20operation,\x20not\x20CallOrder_Data.\x20Use\x20this\x20template\x20to\x20populate\x20CallService_Data.buy.','_call_target':'service','object':a['service_address'],'buy':{'items':[{'name':a['purchase_item_name'],'price':a['purchase_item_price'],'quantity':a['purchase_item_quantity'],'wip_hash':a['wip_hash']}],'discount':a['discount_address']??null,'named_order':a['named_order']??null,'machine_forward':null}};return a['contact_address']&&(b['_post_buy_required_info']=a['contact_address']),b;},'notes':['Order\x20is\x20NOT\x20created\x20directly\x20—\x20the\x20Service\x20purchase\x20atomically\x20builds\x20Order\x20+\x20Allocation\x20+\x20Progress','wip_hash\x20must\x20NOT\x20be\x20empty\x20string\x20—\x20use\x20actual\x20hash\x20to\x20avoid\x20\x27WIP\x20hash\x20not\x20match\x27\x20error','Item\x20name\x20+\x20price\x20must\x20match\x20a\x20sale\x20item\x20configured\x20on\x20the\x20Service'],'permission_layer':'via_service_buy','irreversible':!![]},{'id':'T-O-02','name':'Workflow\x20order\x20advance\x20(machine\x20+\x20progress\x20forward)','description':'Template\x20for\x20advancing\x20an\x20Order\x27s\x20Progress\x20via\x20named\x20forward.\x20Both\x20owner\x20and\x20agent\x20can\x20advance.','applicable_scenes':['order_advance'],'industry_tags':['workflow','logistics','service'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'next_node_name','type':'string','description':'Target\x20node\x20name\x20to\x20advance\x20to','required':!![]},{'name':'forward_name','type':'string','description':'Forward\x20name\x20(must\x20exist\x20on\x20current\x20node)','required':!![]},{'name':'operator','type':'address','description':'Named\x20operator\x20address\x20(optional,\x20null\x20for\x20anyone)','required':![]},{'name':'guard_submission','type':'object','description':'Guard\x20submission\x20object\x20(optional,\x20required\x20if\x20forward\x20has\x20guard)','required':![]},{'name':'message','type':'string','description':'Optional\x20message\x20attached\x20to\x20this\x20advance','required':![]}],'body':a=>{const b={'object':a['order_address'],'progress':{'next_node_name':a['next_node_name'],'forward':{'name':a['forward_name'],'operator':a['operator']??null,'guard':a['guard_submission']??null},'op':'next'}};if(a['message'])b['progress']['message']=a['message'];return b;},'notes':['L2\x20operation\x20—\x20both\x20owner\x20and\x20agent\x20can\x20advance','Node\x20transition\x20is\x20IRREVERSIBLE\x20(no\x20backward\x20movement)','If\x20forward\x20has\x20a\x20Guard,\x20guard_submission\x20is\x20required','Service.machine\x20is\x20snapshotted\x20at\x20buy\x20time\x20—\x20Order.machine\x20will\x20NOT\x20update\x20if\x20Service.machine\x20changes\x20later'],'permission_layer':'L2_owner_or_agent','irreversible':!![]},{'id':'T-O-03','name':'Set\x20agent\x20list\x20(multi-agent\x20logistics\x20delegation)','description':'Template\x20for\x20setting\x20up\x20multiple\x20agents\x20to\x20operate\x20the\x20Order\x20(advance\x20Progress,\x20file\x20arbitration).\x20Setting\x20the\x20agent\x20list\x20REPLACES\x20the\x20entire\x20list.','applicable_scenes':['order_set_agent'],'industry_tags':['logistics','team','service'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'agent_addresses','type':'string[]','description':'Agent\x20addresses\x20(overwrites\x20entire\x20list)','required':!![]}],'body':a=>({'object':a['order_address'],'agent':a['agent_addresses']}),'notes':['L1\x20operation\x20—\x20OWNER-ONLY\x20(owner-asserted)','Max\x2010\x20DISTINCT\x20agents\x20(input\x20is\x20deduped\x20on-chain;\x20assert\x20length\x20<\x20MAX_AGENT_COUNT\x20before\x20each\x20push)','Can\x20be\x20called\x20at\x20ANY\x20time\x20—\x20NOT\x20frozen\x20after\x20Progress\x20binding','Agents\x20can\x20advance\x20Progress\x20and\x20file\x20arbitration\x20—\x20but\x20CANNOT\x20change\x20owner\x20or\x20required_info\x20(L1\x20ops)','Overwrites\x20entire\x20agent\x20list\x20(not\x20additive)\x20—\x20omitted\x20agents\x20silently\x20lose\x20access'],'permission_layer':'L1_owner_only','irreversible':![]},{'id':'T-O-04','name':'File\x20arbitration\x20(arb_confirm\x20with\x20proposition)','description':'Template\x20for\x20filing\x20an\x20arbitration\x20case\x20with\x20description\x20+\x20proposition\x20list.\x20Triggers\x20the\x20order\x27s\x20dispute\x20filing,\x20appending\x20the\x20Arb\x20to\x20the\x20dispute\x20vector.','applicable_scenes':['order_arb_confirm'],'industry_tags':['dispute','arbitration','universal'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'Arbitration\x20object\x20address\x20(must\x20exist)','required':!![]},{'name':'confirm','type':'string','description':'Confirm\x20materials\x20valid?\x20\x27true\x27\x20or\x20\x27false\x27','required':!![],'default':'true'},{'name':'description','type':'string','description':'Compensation\x20application\x20description\x20(required\x20for\x20the\x20case\x20description\x20record)','required':!![]},{'name':'propositions','type':'string[]','description':'Compensation\x20claims\x20list\x20(e.g.\x20[\x27Refund\x20full\x20amount\x27,\x20\x27Compensation\x20for\x20delay\x27])','required':!![]}],'body':a=>({'object':a['order_address'],'arb_confirm':{'arb':a['arb_address'],'confirm':a['confirm']==='true','description':a['description'],'proposition':a['propositions']}}),'notes':['L2\x20operation\x20—\x20both\x20owner\x20and\x20agent\x20can\x20file','IRREVERSIBLE\x20—\x20once\x20filed,\x20Arb\x20process\x20cannot\x20be\x20cancelled','Triggers\x20the\x20dispute\x20filing\x20—\x20appends\x20the\x20Arb\x20to\x20the\x20order\x27s\x20dispute\x20vector\x20(max\x2010)','If\x20claimed_by\x20is\x20already\x20set,\x20aborts\x20E_ORDER_ALREADY_CLAIMED','Use\x20T-O-08\x20(arb_objection)\x20to\x20object\x20to\x20Arb\x20ruling\x20after\x20this\x20step'],'permission_layer':'L2_owner_or_agent','irreversible':!![]},{'id':'T-O-05','name':'Receive\x20payment\x20(Receiving-gated\x20collect)','description':'Template\x20for\x20collecting\x20CoinWrapper\x20or\x20arbitrary\x20Receiving<K>\x20distributed\x20by\x20an\x20allocation\x20run.\x20Funds\x20forwarded\x20to\x20order.owner.\x20No\x20owner\x20assert\x20—\x20caller\x20must\x20hold\x20the\x20Receiving\x20object.','applicable_scenes':['order_receive'],'industry_tags':['finance','universal'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'received_object_id','type':'string','description':'Receiving\x20object\x20ID\x20(CoinWrapper\x20or\x20Receiving<K>)','required':!![]}],'body':a=>({'object':a['order_address'],'receive':{'received':a['received_object_id']}}),'notes':['Gated\x20by\x20Receiving\x20existence\x20—\x20an\x20allocation\x20run\x20must\x20have\x20created\x20a\x20Receiving\x20at\x20the\x20caller\x27s\x20address\x20(verify\x20the\x20object\x20ID\x20via\x20explorer)','Receiving\x20must\x20match\x20the\x20Payment\x20object\x20(EPAYMENT_NOT_MATCH\x20on\x20mismatch)','No\x20owner\x20assert\x20—\x20ANY\x20caller\x20holding\x20the\x20Receiving\x20can\x20complete\x20the\x20receive;\x20funds\x20ALWAYS\x20go\x20to\x20order.owner','Can\x20be\x20called\x20multiple\x20times\x20(e.g.\x20partial\x20refunds)','Funds\x20are\x20unwrapped\x20(CoinWrapper\x20→\x20Coin)\x20and\x20transferred\x20to\x20owner\x20address','For\x20ownership\x20transfer,\x20use\x20T-O-06\x20variant\x20(transfer_to)\x20instead'],'permission_layer':'L4_object_gated','irreversible':![]},{'id':'T-O-06','name':'Claim\x20compensation\x20(arb_claim_compensation\x20—\x20IRREVERSIBLE)','description':'Template\x20for\x20claiming\x20compensation\x20from\x20a\x20ruled\x20Arb.\x20Sets\x20claimed_by\x20—\x20ONE-TIME,\x20IRREVERSIBLE,\x20blocks\x20all\x20future\x20disputes.','applicable_scenes':['order_arb_claim_compensation'],'industry_tags':['dispute','arbitration'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'RULED\x20Arb\x20object\x20address\x20(must\x20be\x20in\x20Arbitrated\x20state)','required':!![]}],'body':a=>({'object':a['order_address'],'arb_claim_compensation':{'arb':a['arb_address']}}),'notes':['⚠️⚠️\x20IRREVERSIBLE\x20—\x20claimed_by\x20cannot\x20be\x20reset','After\x20claim:\x20NO\x20new\x20disputes\x20can\x20be\x20filed\x20(E_ORDER_ALREADY_CLAIMED)','Arb\x20must\x20be\x20in\x20Arbitrated\x20state\x20(ruled,\x20not\x20pending)\x20—\x20gated\x20on\x20the\x20arbitration\x20being\x20finished','No\x20op-permission\x20assert\x20on\x20the\x20Order\x20—\x20gated\x20by\x20the\x20ruled\x20Arb\x20status;\x20compensation\x20is\x20paid\x20to\x20the\x20tx\x20sender','Triggers\x20the\x20compensation\x20flow\x20—\x20the\x20Service\x27s\x20compensation\x20fund\x20pays\x20out\x20and\x20the\x20order\x20records\x20the\x20compensation','Verify\x20arb_address\x20TWICE\x20before\x20submitting\x20—\x20there\x20is\x20no\x20undo'],'permission_layer':'L4_object_gated','irreversible':!![]},{'id':'T-O-07','name':'Update\x20required_info\x20(Contact\x20recipient\x20or\x20WTS\x20Proof)','description':'Template\x20for\x20setting\x20required_info\x20—\x20either\x20a\x20Contact\x20object\x20(recipient\x20info)\x20or\x20WTS\x20Proof\x20object\x20(delivery\x20proof).\x20Owner-only.','applicable_scenes':['order_required_info'],'industry_tags':['logistics','universal'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'info_type','type':'string','description':'\x27contact\x27\x20(recipient)\x20or\x20\x27wts_proof\x27\x20(delivery\x20proof)\x20or\x20\x27clear\x27\x20(set\x20to\x20null)','required':!![]},{'name':'info_address','type':'address','description':'Contact\x20or\x20WTS\x20Proof\x20object\x20address\x20(not\x20needed\x20if\x20info_type=\x27clear\x27)','required':![]}],'body':a=>{if(a['info_type']==='clear')return{'object':a['order_address'],'required_info':null};if(!a['info_address'])throw new Error('info_address\x20required\x20when\x20info_type=\x27'+a['info_type']+'\x27');return{'object':a['order_address'],'required_info':a['info_address']};},'notes':['L1\x20operation\x20—\x20OWNER-ONLY\x20(owner-asserted);\x20agent\x20CANNOT\x20update\x20required_info','REVERSIBLE\x20—\x20can\x20be\x20called\x20multiple\x20times','Contact\x20object\x20=\x20recipient\x20info\x20(shipping\x20address,\x20contact\x20details)','WTS\x20Proof\x20object\x20=\x20delivery\x20proof\x20(generated\x20via\x20Wowok\x20Messenger)','null\x20clears\x20the\x20field'],'permission_layer':'L1_owner_only','irreversible':![]},{'id':'T-O-08','name':'Object\x20to\x20Arb\x20ruling\x20(arb_objection\x20—\x20request\x20re-arbitration)','description':'Template\x20for\x20objecting\x20to\x20an\x20Arb\x20ruling\x20and\x20requesting\x20re-arbitration.\x20Requires\x20Arb\x20status\x20=\x20Arbitrated.','applicable_scenes':['order_arb_objection'],'industry_tags':['dispute','arbitration'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'RULED\x20Arb\x20object\x20address\x20(must\x20be\x20in\x20Arbitrated\x20state)','required':!![]},{'name':'objection_reason','type':'string','description':'Reason\x20for\x20objection\x20(required\x20when\x20objecting)','required':!![]}],'body':a=>({'object':a['order_address'],'arb_objection':{'arb':a['arb_address'],'objection':a['objection_reason']}}),'notes':['L2\x20operation\x20—\x20both\x20owner\x20and\x20agent\x20can\x20object','IRREVERSIBLE\x20—\x20triggers\x20re-arbitration\x20flow','Arb\x20must\x20be\x20in\x20Arbitrated\x20state\x20(after\x20initial\x20ruling)','Cannot\x20object\x20if\x20claimed_by\x20is\x20already\x20set\x20(E_ORDER_ALREADY_CLAIMED)'],'permission_layer':'L2_owner_or_agent','irreversible':!![]}];export const ORDER_TEMPLATES_VERSION='1.0.0';export const ORDER_TEMPLATES_COUNT=ORDER_TEMPLATES['length'];export function getAllOrderTemplates(){return[...ORDER_TEMPLATES];}export function getTemplateById(a){return ORDER_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return ORDER_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return ORDER_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function getTemplatesByPermissionLayer(a){return ORDER_TEMPLATES['filter'](b=>b['permission_layer']===a);}export function getIrreversibleTemplates(){return ORDER_TEMPLATES['filter'](a=>a['irreversible']);}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listOrderTemplates(){return ORDER_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes'],'irreversible':a['irreversible']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name'],'template':c};}try{const f=c['body'](b);return{'ok':!![],'body':f,'template':c};}catch(g){return{'ok':![],'error':'Template\x20body\x20generation\x20failed:\x20'+g['message'],'template':c};}}export function suggestTemplateFromIntent(a){const b=a['toLowerCase'](),c=[['buy','T-O-01'],['purchase','T-O-01'],['advance','T-O-02'],['forward','T-O-02'],['set\x20agent','T-O-03'],['agent','T-O-03'],['arb_confirm','T-O-04'],['file\x20dispute','T-O-04'],['apply\x20arbitration','T-O-04'],['receive','T-O-05'],['collect','T-O-05'],['claim\x20compensation','T-O-06'],['required_info','T-O-07'],['contact','T-O-07'],['recipient','T-O-07'],['arb_objection','T-O-08'],['objection','T-O-08']];for(const [d,e]of c){if(b['includes'](d['toLowerCase']()))return getTemplateById(e);}return undefined;}export function getTemplateParameters(a){return getTemplateById(a)?.['params'];}export function validateTemplateParams(a,b){const c=getTemplateById(a);if(!c)return['Template\x20'+a+'\x20not\x20found'];const d=[];for(const e of c['params']){if(e['required']&&!(e['name']in b)){d['push']('Missing\x20required\x20param:\x20'+e['name']);continue;}if(!(e['name']in b))continue;const f=b[e['name']];if(e['type']==='address')(typeof f!=='string'||!f['startsWith']('0x')||f['length']<0x28)&&d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20valid\x20Wow\x20address\x20(got:\x20'+f+')');else{if(e['type']==='string'){if(typeof f!=='string')d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20string');}else{if(e['type']==='number'){if(typeof f!=='number'||!Number['isFinite'](f))d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20number');}else e['type']==='string[]'&&((!Array['isArray'](f)||!f['every'](g=>typeof g==='string'))&&d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20string[]'));}}}return d;}
|
|
1
|
+
export const ORDER_TEMPLATES=[{'id':'T-O-01','name':'Standard\x20retail\x20order\x20(single\x20item,\x20no\x20machine)','description':'Template\x20for\x20buying\x20a\x20single\x20retail\x20item\x20from\x20a\x20Service\x20without\x20a\x20Machine\x20workflow.\x20Order\x20created\x20through\x20the\x20Service\x27s\x20purchase\x20entry.','applicable_scenes':['order_create','order_required_info'],'industry_tags':['retail','universal'],'params':[{'name':'service_address','type':'address','description':'Service\x20object\x20address\x20(the\x20purchase\x20target)','required':!![]},{'name':'purchase_item_name','type':'string','description':'Item\x20name\x20(must\x20match\x20Service\x27s\x20sale\x20item\x20name)','required':!![]},{'name':'purchase_item_price','type':'string','description':'Item\x20price\x20in\x20MIST\x20(string\x20for\x20u64\x20precision)','required':!![]},{'name':'purchase_item_quantity','type':'number','description':'Quantity\x20to\x20purchase','required':!![],'default':0x1},{'name':'wip_hash','type':'string','description':'WIP\x20hash\x20(NOT\x20empty\x20string\x20—\x20use\x20\x270x\x27\x20+\x20actual\x20hash)','required':!![]},{'name':'discount_address','type':'address','description':'Discount\x20object\x20address\x20(optional)','required':![]},{'name':'named_order','type':'string','description':'Order\x20alias\x20name\x20(optional,\x20for\x20SDK\x20lookup)','required':![]},{'name':'contact_address','type':'address','description':'Merchant\x27s\x20IM\x20user\x20address\x20for\x20required_info\x20(the\x20Im.at\x20entry\x20resolved\x20from\x20the\x20Service\x27s\x20Contact)','required':![]}],'body':a=>{const b={'_note':'Order\x20creation\x20goes\x20through\x20the\x20Service\x20purchase\x20operation,\x20not\x20CallOrder_Data.\x20Use\x20this\x20template\x20to\x20populate\x20CallService_Data.buy.','_call_target':'service','object':a['service_address'],'buy':{'items':[{'name':a['purchase_item_name'],'price':a['purchase_item_price'],'quantity':a['purchase_item_quantity'],'wip_hash':a['wip_hash']}],'discount':a['discount_address']??null,'named_order':a['named_order']??null,'machine_forward':null}};return a['contact_address']&&(b['_post_buy_required_info']=a['contact_address']),b;},'notes':['Order\x20is\x20NOT\x20created\x20directly\x20—\x20the\x20Service\x20purchase\x20atomically\x20builds\x20Order\x20+\x20Allocation\x20+\x20Progress','wip_hash\x20must\x20NOT\x20be\x20empty\x20string\x20—\x20use\x20actual\x20hash\x20to\x20avoid\x20\x27WIP\x20hash\x20not\x20match\x27\x20error','Item\x20name\x20+\x20price\x20must\x20match\x20a\x20sale\x20item\x20configured\x20on\x20the\x20Service'],'permission_layer':'via_service_buy','irreversible':!![]},{'id':'T-O-02','name':'Workflow\x20order\x20advance\x20(machine\x20+\x20progress\x20forward)','description':'Template\x20for\x20advancing\x20an\x20Order\x27s\x20Progress\x20via\x20named\x20forward.\x20Both\x20owner\x20and\x20agent\x20can\x20advance.','applicable_scenes':['order_advance'],'industry_tags':['workflow','logistics','service'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'next_node_name','type':'string','description':'Target\x20node\x20name\x20to\x20advance\x20to','required':!![]},{'name':'forward_name','type':'string','description':'Forward\x20name\x20(must\x20exist\x20on\x20current\x20node)','required':!![]},{'name':'operator','type':'address','description':'Named\x20operator\x20address\x20(optional,\x20null\x20for\x20anyone)','required':![]},{'name':'guard_submission','type':'object','description':'Guard\x20submission\x20object\x20(optional,\x20required\x20if\x20forward\x20has\x20guard)','required':![]},{'name':'message','type':'string','description':'Optional\x20message\x20attached\x20to\x20this\x20advance','required':![]}],'body':a=>{const b={'object':a['order_address'],'progress':{'next_node_name':a['next_node_name'],'forward':{'name':a['forward_name'],'operator':a['operator']??null,'guard':a['guard_submission']??null},'op':'next'}};if(a['message'])b['progress']['message']=a['message'];return b;},'notes':['L2\x20operation\x20—\x20both\x20owner\x20and\x20agent\x20can\x20advance','Node\x20transition\x20is\x20IRREVERSIBLE\x20(no\x20backward\x20movement)','If\x20forward\x20has\x20a\x20Guard,\x20guard_submission\x20is\x20required','Service.machine\x20is\x20snapshotted\x20at\x20buy\x20time\x20—\x20Order.machine\x20will\x20NOT\x20update\x20if\x20Service.machine\x20changes\x20later'],'permission_layer':'L2_owner_or_agent','irreversible':!![]},{'id':'T-O-03','name':'Set\x20agent\x20list\x20(multi-agent\x20logistics\x20delegation)','description':'Template\x20for\x20setting\x20up\x20multiple\x20agents\x20to\x20operate\x20the\x20Order\x20(advance\x20Progress,\x20file\x20arbitration).\x20Setting\x20the\x20agent\x20list\x20REPLACES\x20the\x20entire\x20list.','applicable_scenes':['order_set_agent'],'industry_tags':['logistics','team','service'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'agent_addresses','type':'string[]','description':'Agent\x20addresses\x20(overwrites\x20entire\x20list)','required':!![]}],'body':a=>({'object':a['order_address'],'agent':a['agent_addresses']}),'notes':['L1\x20operation\x20—\x20OWNER-ONLY\x20(owner-asserted)','Max\x2010\x20DISTINCT\x20agents\x20(input\x20is\x20deduped\x20on-chain;\x20assert\x20length\x20<\x20MAX_AGENT_COUNT\x20before\x20each\x20push)','Can\x20be\x20called\x20at\x20ANY\x20time\x20—\x20NOT\x20frozen\x20after\x20Progress\x20binding','Agents\x20can\x20advance\x20Progress\x20and\x20file\x20arbitration\x20—\x20but\x20CANNOT\x20change\x20owner\x20or\x20required_info\x20(L1\x20ops)','Overwrites\x20entire\x20agent\x20list\x20(not\x20additive)\x20—\x20omitted\x20agents\x20silently\x20lose\x20access'],'permission_layer':'L1_owner_only','irreversible':![]},{'id':'T-O-04','name':'File\x20arbitration\x20(arb_confirm\x20with\x20proposition)','description':'Template\x20for\x20filing\x20an\x20arbitration\x20case\x20with\x20description\x20+\x20proposition\x20list.\x20Triggers\x20the\x20order\x27s\x20dispute\x20filing,\x20appending\x20the\x20Arb\x20to\x20the\x20dispute\x20vector.','applicable_scenes':['order_arb_confirm'],'industry_tags':['dispute','arbitration','universal'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'Arbitration\x20object\x20address\x20(must\x20exist)','required':!![]},{'name':'confirm','type':'string','description':'Confirm\x20materials\x20valid?\x20\x27true\x27\x20or\x20\x27false\x27','required':!![],'default':'true'},{'name':'description','type':'string','description':'Compensation\x20application\x20description\x20(required\x20for\x20the\x20case\x20description\x20record)','required':!![]},{'name':'propositions','type':'string[]','description':'Compensation\x20claims\x20list\x20(e.g.\x20[\x27Refund\x20full\x20amount\x27,\x20\x27Compensation\x20for\x20delay\x27])','required':!![]}],'body':a=>({'object':a['order_address'],'arb_confirm':{'arb':a['arb_address'],'confirm':a['confirm']==='true','description':a['description'],'proposition':a['propositions']}}),'notes':['L2\x20operation\x20—\x20both\x20owner\x20and\x20agent\x20can\x20file','IRREVERSIBLE\x20—\x20once\x20filed,\x20Arb\x20process\x20cannot\x20be\x20cancelled','Triggers\x20the\x20dispute\x20filing\x20—\x20appends\x20the\x20Arb\x20to\x20the\x20order\x27s\x20dispute\x20vector\x20(max\x2010)','If\x20claimed_by\x20is\x20already\x20set,\x20aborts\x20E_ORDER_ALREADY_CLAIMED','Use\x20T-O-08\x20(arb_objection)\x20to\x20object\x20to\x20Arb\x20ruling\x20after\x20this\x20step'],'permission_layer':'L2_owner_or_agent','irreversible':!![]},{'id':'T-O-05','name':'Receive\x20payment\x20(Receiving-gated\x20collect)','description':'Template\x20for\x20collecting\x20CoinWrapper\x20or\x20arbitrary\x20Receiving<K>\x20distributed\x20by\x20an\x20allocation\x20run.\x20Funds\x20forwarded\x20to\x20order.owner.\x20No\x20owner\x20assert\x20—\x20caller\x20must\x20hold\x20the\x20Receiving\x20object.','applicable_scenes':['order_receive'],'industry_tags':['finance','universal'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'received_object_id','type':'string','description':'Receiving\x20object\x20ID\x20(CoinWrapper\x20or\x20Receiving<K>)','required':!![]}],'body':a=>({'object':a['order_address'],'receive':{'received':a['received_object_id']}}),'notes':['Gated\x20by\x20Receiving\x20existence\x20—\x20an\x20allocation\x20run\x20must\x20have\x20created\x20a\x20Receiving\x20at\x20the\x20caller\x27s\x20address\x20(verify\x20the\x20object\x20ID\x20via\x20explorer)','Receiving\x20must\x20match\x20the\x20Payment\x20object\x20(EPAYMENT_NOT_MATCH\x20on\x20mismatch)','No\x20owner\x20assert\x20—\x20ANY\x20caller\x20holding\x20the\x20Receiving\x20can\x20complete\x20the\x20receive;\x20funds\x20ALWAYS\x20go\x20to\x20order.owner','Can\x20be\x20called\x20multiple\x20times\x20(e.g.\x20partial\x20refunds)','Funds\x20are\x20unwrapped\x20(CoinWrapper\x20→\x20Coin)\x20and\x20transferred\x20to\x20owner\x20address','For\x20ownership\x20transfer,\x20use\x20T-O-06\x20variant\x20(transfer_to)\x20instead'],'permission_layer':'L4_object_gated','irreversible':![]},{'id':'T-O-06','name':'Claim\x20compensation\x20(arb_claim_compensation\x20—\x20IRREVERSIBLE)','description':'Template\x20for\x20claiming\x20compensation\x20from\x20a\x20ruled\x20Arb.\x20Sets\x20claimed_by\x20—\x20ONE-TIME,\x20IRREVERSIBLE,\x20blocks\x20all\x20future\x20disputes.','applicable_scenes':['order_arb_claim_compensation'],'industry_tags':['dispute','arbitration'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'RULED\x20Arb\x20object\x20address\x20(must\x20be\x20in\x20Arbitrated\x20state)','required':!![]}],'body':a=>({'object':a['order_address'],'arb_claim_compensation':{'arb':a['arb_address']}}),'notes':['⚠️⚠️\x20IRREVERSIBLE\x20—\x20claimed_by\x20cannot\x20be\x20reset','After\x20claim:\x20NO\x20new\x20disputes\x20can\x20be\x20filed,\x20and\x20the\x20order\x20rejects\x20all\x20further\x20payout\x20claims\x20(owner\x20receive\x20aborts\x20E_ORDER_ALREADY_CLAIMED)\x20—\x20escrow\x20left\x20on\x20the\x20order\x20becomes\x20unclaimable','Arb\x20must\x20be\x20in\x20Arbitrated\x20state\x20(ruled,\x20not\x20pending)\x20—\x20gated\x20on\x20the\x20arbitration\x20being\x20finished','No\x20op-permission\x20assert\x20on\x20the\x20Order\x20—\x20gated\x20by\x20the\x20ruled\x20Arb\x20status;\x20compensation\x20is\x20paid\x20to\x20the\x20order\x20owner','Triggers\x20the\x20compensation\x20flow\x20—\x20the\x20Service\x27s\x20compensation\x20fund\x20pays\x20out\x20and\x20the\x20order\x20records\x20the\x20compensation','Verify\x20arb_address\x20TWICE\x20before\x20submitting\x20—\x20there\x20is\x20no\x20undo'],'permission_layer':'L4_object_gated','irreversible':!![]},{'id':'T-O-07','name':'Update\x20required_info\x20(Contact\x20recipient\x20or\x20WTS\x20Proof)','description':'Template\x20for\x20setting\x20required_info\x20—\x20either\x20a\x20Contact\x20object\x20(recipient\x20info)\x20or\x20WTS\x20Proof\x20object\x20(delivery\x20proof).\x20Owner-only.','applicable_scenes':['order_required_info'],'industry_tags':['logistics','universal'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'info_type','type':'string','description':'\x27contact\x27\x20(recipient)\x20or\x20\x27wts_proof\x27\x20(delivery\x20proof)\x20or\x20\x27clear\x27\x20(set\x20to\x20null)','required':!![]},{'name':'info_address','type':'address','description':'Contact\x20or\x20WTS\x20Proof\x20object\x20address\x20(not\x20needed\x20if\x20info_type=\x27clear\x27)','required':![]}],'body':a=>{if(a['info_type']==='clear')return{'object':a['order_address'],'required_info':null};if(!a['info_address'])throw new Error('info_address\x20required\x20when\x20info_type=\x27'+a['info_type']+'\x27');return{'object':a['order_address'],'required_info':a['info_address']};},'notes':['L1\x20operation\x20—\x20OWNER-ONLY\x20(owner-asserted);\x20agent\x20CANNOT\x20update\x20required_info','REVERSIBLE\x20—\x20can\x20be\x20called\x20multiple\x20times','Contact\x20object\x20=\x20recipient\x20info\x20(shipping\x20address,\x20contact\x20details)','WTS\x20Proof\x20object\x20=\x20delivery\x20proof\x20(generated\x20via\x20Wowok\x20Messenger)','null\x20clears\x20the\x20field'],'permission_layer':'L1_owner_only','irreversible':![]},{'id':'T-O-08','name':'Object\x20to\x20Arb\x20ruling\x20(arb_objection\x20—\x20request\x20re-arbitration)','description':'Template\x20for\x20objecting\x20to\x20an\x20Arb\x20ruling\x20and\x20requesting\x20re-arbitration.\x20Requires\x20Arb\x20status\x20=\x20Arbitrated.','applicable_scenes':['order_arb_objection'],'industry_tags':['dispute','arbitration'],'params':[{'name':'order_address','type':'address','description':'Order\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'RULED\x20Arb\x20object\x20address\x20(must\x20be\x20in\x20Arbitrated\x20state)','required':!![]},{'name':'objection_reason','type':'string','description':'Reason\x20for\x20objection\x20(required\x20when\x20objecting)','required':!![]}],'body':a=>({'object':a['order_address'],'arb_objection':{'arb':a['arb_address'],'objection':a['objection_reason']}}),'notes':['L2\x20operation\x20—\x20both\x20owner\x20and\x20agent\x20can\x20object','IRREVERSIBLE\x20—\x20triggers\x20re-arbitration\x20flow','Arb\x20must\x20be\x20in\x20Arbitrated\x20state\x20(after\x20initial\x20ruling)','Cannot\x20object\x20if\x20claimed_by\x20is\x20already\x20set\x20(E_ORDER_ALREADY_CLAIMED)'],'permission_layer':'L2_owner_or_agent','irreversible':!![]}];export const ORDER_TEMPLATES_VERSION='1.0.0';export const ORDER_TEMPLATES_COUNT=ORDER_TEMPLATES['length'];export function getAllOrderTemplates(){return[...ORDER_TEMPLATES];}export function getTemplateById(a){return ORDER_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return ORDER_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return ORDER_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function getTemplatesByPermissionLayer(a){return ORDER_TEMPLATES['filter'](b=>b['permission_layer']===a);}export function getIrreversibleTemplates(){return ORDER_TEMPLATES['filter'](a=>a['irreversible']);}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listOrderTemplates(){return ORDER_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes'],'irreversible':a['irreversible']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name'],'template':c};}try{const f=c['body'](b);return{'ok':!![],'body':f,'template':c};}catch(g){return{'ok':![],'error':'Template\x20body\x20generation\x20failed:\x20'+g['message'],'template':c};}}export function suggestTemplateFromIntent(a){const b=a['toLowerCase'](),c=[['buy','T-O-01'],['purchase','T-O-01'],['advance','T-O-02'],['forward','T-O-02'],['set\x20agent','T-O-03'],['agent','T-O-03'],['arb_confirm','T-O-04'],['file\x20dispute','T-O-04'],['apply\x20arbitration','T-O-04'],['receive','T-O-05'],['collect','T-O-05'],['claim\x20compensation','T-O-06'],['required_info','T-O-07'],['contact','T-O-07'],['recipient','T-O-07'],['arb_objection','T-O-08'],['objection','T-O-08']];for(const [d,e]of c){if(b['includes'](d['toLowerCase']()))return getTemplateById(e);}return undefined;}export function getTemplateParameters(a){return getTemplateById(a)?.['params'];}export function validateTemplateParams(a,b){const c=getTemplateById(a);if(!c)return['Template\x20'+a+'\x20not\x20found'];const d=[];for(const e of c['params']){if(e['required']&&!(e['name']in b)){d['push']('Missing\x20required\x20param:\x20'+e['name']);continue;}if(!(e['name']in b))continue;const f=b[e['name']];if(e['type']==='address')(typeof f!=='string'||!f['startsWith']('0x')||f['length']<0x28)&&d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20valid\x20Wow\x20address\x20(got:\x20'+f+')');else{if(e['type']==='string'){if(typeof f!=='string')d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20string');}else{if(e['type']==='number'){if(typeof f!=='number'||!Number['isFinite'](f))d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20number');}else e['type']==='string[]'&&((!Array['isArray'](f)||!f['every'](g=>typeof g==='string'))&&d['push']('Param\x20'+e['name']+'\x20must\x20be\x20a\x20string[]'));}}}return d;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PERMISSION_TYPES=[{'name':'Permission','scope':'organization','definedOn':'Permission\x20Object\x20(standalone\x20on-chain\x20object,\x20referenced\x20by\x20service/machine/etc.)','controls':'Who\x20can\x20modify\x20the\x20bound\x20object\x27s\x20settings,\x20publish\x20it,\x20manage\x20its\x20funds,\x20etc.','grantedBy':'The\x20object\x27s\x20creator\x20(owner)\x20or\x20anyone\x20the\x20creator\x20delegates\x20to','example':'A\x20shop\x20owner\x20creates\x20a\x20Permission\x20allowing\x20only\x20their\x20staff\x20to\x20modify\x20the\x20Service\x27s\x20price.'},{'name':'NamedOperator','scope':'order','definedOn':'Per-order\x20(specified\x20in\x20the\x20order\x20creation/modification\x20by\x20the\x20service)','controls':'Who\x20can\x20operate\x20on\x20a\x20specific\x20order:\x20advance\x20progress,\x20settle,\x20refund,\x20etc.','grantedBy':'The\x20service\x20(via\x20its\x20order_allocators\x20or\x20explicit\x20named\x20operators)','example':'A\x20delivery\x20service\x20assigns\x20Alice\x20as\x20the\x20NamedOperator\x20for\x20order\x20#123\x20—\x20only\x20Alice\x20can\x20mark\x20it\x20delivered.'},{'name':'OrderHolder','scope':'order_holder','definedOn':'Per-order\x20(the\x20\x27\x27\x20empty\x20string\x20address\x20=\x20the\x20order\x27s\x20current\x20holder)','controls':'Who\x20currently\x20holds\x20the\x20order\x20and\x20can\x20perform\x20holder-specific\x20actions\x20(accept,\x20reject,\x20pay)','grantedBy':'Implicitly\x20assigned\x20when\x20an\x20order\x20is\x20created\x20or\x20transferred','example':'Bob\x20places\x20an\x20order\x20—\x20he\x20becomes\x20the\x20OrderHolder.\x20He\x20can\x20accept\x20delivery\x20or\x20request\x20arbitration.'}];const PERMISSION_TYPE_INDEX=new Map(PERMISSION_TYPES['map'](a=>[a['name'],a]));export function getPermissionType(a){return PERMISSION_TYPE_INDEX['get'](a);}export const REPOSITORY_PERMISSIONS=[{'index':0x64,'name':'REPOSITORY_NEW','description':'Create\x20new\x20Repository\x20policy','governed_operation':'create_repository'},{'index':0x65,'name':'REPOSITORY_DESCRIPTION','description':'Modify\x20Repository\x20description','governed_operation':'set_repository_description'},{'index':0x66,'name':'REPOSITORY_POLICY','description':'Modify\x20Repository\x20policy','governed_operation':'set_repository_policy'},{'index':0x67,'name':'REPOSITORY_REWARD','description':'Set\x20Repository\x20reward','governed_operation':'set_repository_reward'},{'index':0x68,'name':'REPOSITORY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_repository_by_owner'},{'index':0x69,'name':'REPOSITORY_UM','description':'Set\x20UM\x20(User\x20Manager)','governed_operation':'set_repository_user_manager'}];export const REWARD_PERMISSIONS=[{'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward','governed_operation':'create_reward'},{'index':0x97,'name':'REWARD_DESCRIPTION','description':'Modify\x20Reward\x20description','governed_operation':'set_reward_description'},{'index':0x98,'name':'REWARD_GUARD','description':'Set\x20Reward\x20guard','governed_operation':'set_reward_guard'},{'index':0x99,'name':'REWARD_COIN_ADD','description':'Add\x20coins\x20to\x20Reward','governed_operation':'add_reward_coin'},{'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20reward','governed_operation':'receive_reward'},{'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Extend\x20guard\x20expiration','governed_operation':'extend_reward_guard_expiration'},{'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_reward_by_owner'},{'index':0x9d,'name':'REWARD_UM','description':'Set\x20UM','governed_operation':'set_reward_user_manager'}];export const MACHINE_PERMISSIONS=[{'index':0xc8,'name':'MACHINE_NEW','description':'Create\x20new\x20Machine','governed_operation':'create_machine'},{'index':0xc9,'name':'MACHINE_DESCRIPTION','description':'Modify\x20Machine\x20description','governed_operation':'set_machine_description'},{'index':0xcb,'name':'MACHINE_CONSENSUS_REPOSITORIES','description':'Set\x20consensus\x20Repositories','governed_operation':'set_consensus_repositories'},{'index':0xcc,'name':'MACHINE_PAUSE','description':'Pause/resume\x20Machine','governed_operation':'pause_or_resume_machine'},{'index':0xcd,'name':'MACHINE_PUBLISH','description':'Publish\x20Machine\x20(irreversible)','governed_operation':'publish_machine'},{'index':0xce,'name':'MACHINE_NODE','description':'Modify\x20Machine\x20nodes','governed_operation':'manage_machine_nodes'},{'index':0xcf,'name':'MACHINE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_machine_by_owner'},{'index':0xd0,'name':'MACHINE_UM','description':'Set\x20UM','governed_operation':'set_machine_user_manager'}];export const PROGRESS_PERMISSIONS=[{'index':0xdc,'name':'PROGRESS_NEW','description':'Create\x20new\x20Progress','governed_operation':'create_progress'},{'index':0xdd,'name':'PROGRESS_NAMED_OPERATOR','description':'Manage\x20named\x20operators','governed_operation':'manage_named_operators'},{'index':0xde,'name':'PROGRESS_TASK','description':'Submit\x20task','governed_operation':'submit_task'},{'index':0xdf,'name':'PROGRESS_CONTEXT_REPOSITORY','description':'Set\x20context\x20Repository','governed_operation':'set_progress_context_repository'},{'index':0xe0,'name':'PROGRESS_UNHOLD','description':'Unhold\x20Progress','governed_operation':'unhold_progress'},{'index':0xe1,'name':'PROGRESS_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_progress_by_owner'}];export const TREASURY_PERMISSIONS=[{'index':0xfa,'name':'TREASURY_NEW','description':'Create\x20new\x20Treasury','governed_operation':'create_treasury'},{'index':0xfb,'name':'TREASURY_DESCRIPTION','description':'Modify\x20Treasury\x20description','governed_operation':'set_treasury_description'},{'index':0xfc,'name':'TREASURY_DEPOSIT','description':'Deposit\x20funds','governed_operation':'deposit_into_treasury'},{'index':0xfd,'name':'TREASURY_RECEIVE','description':'Receive\x20funds','governed_operation':'receive_treasury_funds'},{'index':0xfe,'name':'TREASURY_WITHDRAW','description':'Withdraw\x20funds','governed_operation':'withdraw_treasury_funds'},{'index':0xff,'name':'TREASURY_EXTERNAL_DEPOSIT_GUARD','description':'Manage\x20external\x20deposit\x20Guard\x20list','governed_operation':'manage_external_deposit_guards'},{'index':0x100,'name':'TREASURY_EXTERNAL_WITHDRAW_GUARD','description':'Manage\x20external\x20withdraw\x20Guard\x20list','governed_operation':'manage_external_withdraw_guards'},{'index':0x101,'name':'TREASURY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_treasury_by_owner'},{'index':0x102,'name':'TREASURY_UM','description':'Set\x20UM','governed_operation':'set_treasury_user_manager'}];export const SERVICE_PERMISSIONS=[{'index':0x12c,'name':'SERVICE_NEW','description':'Create\x20new\x20Service','governed_operation':'create_service'},{'index':0x12d,'name':'SERVICE_DESCRIPTION','description':'Modify\x20Service\x20description','governed_operation':'set_service_description'},{'index':0x12f,'name':'SERVICE_LOCATION','description':'Set\x20Service\x20location','governed_operation':'set_service_location'},{'index':0x130,'name':'SERVICE_REPOSITORY','description':'Set\x20Service\x20repository','governed_operation':'set_service_repository'},{'index':0x131,'name':'SERVICE_SALES','description':'Modify\x20sales','governed_operation':'manage_sales'},{'index':0x132,'name':'SERVICE_MACHINE','description':'Bind/modify\x20Machine','governed_operation':'set_service_machine'},{'index':0x133,'name':'SERVICE_BUY_GUARD','description':'Set\x20buy\x20guard','governed_operation':'set_service_buy_guard'},{'index':0x134,'name':'SERVICE_ARBITRATION','description':'Set\x20Arbitration','governed_operation':'set_service_arbitration'},{'index':0x135,'name':'SERVICE_CUSTOMER_INFO_REQUIRED','description':'Set\x20customer\x20info\x20required','governed_operation':'set_customer_info_required'},{'index':0x136,'name':'SERVICE_PAUSE','description':'Pause/resume\x20Service','governed_operation':'pause_or_resume_service'},{'index':0x137,'name':'SERVICE_PUBLISH','description':'Publish\x20Service','governed_operation':'publish_service'},{'index':0x138,'name':'SERVICE_DISCOUNT','description':'Set\x20discount','governed_operation':'set_discount'},{'index':0x139,'name':'SERVICE_ORDER_ALLOCATOR','description':'Set\x20order\x20allocator','governed_operation':'set_order_allocator'},{'index':0x13a,'name':'SERVICE_COMPENSATION_FUND_DEPOSIT','description':'Deposit\x20to\x20compensation\x20fund','governed_operation':'deposit_compensation_fund'},{'index':0x13b,'name':'SERVICE_COMPENSATION_FUND_WITHDRAW','description':'Withdraw\x20from\x20compensation\x20fund','governed_operation':'withdraw_compensation_fund'},{'index':0x13c,'name':'SERVICE_COMPENSATION_FUND_FREEZE','description':'Freeze\x20compensation\x20fund','governed_operation':'freeze_compensation_fund'},{'index':0x13d,'name':'SERVICE_COMPENSATION_FUND_UNFREEZE','description':'Unfreeze\x20compensation\x20fund','governed_operation':'unfreeze_compensation_fund'},{'index':0x13e,'name':'SERVICE_REWARD','description':'Set\x20reward','governed_operation':'set_service_reward'},{'index':0x13f,'name':'SERVICE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_service_by_owner'},{'index':0x140,'name':'SERVICE_UM','description':'Set\x20UM','governed_operation':'set_service_user_manager'},{'index':0x141,'name':'SERVICE_ARB_STATEMENT','description':'Append\x20seller\x20statement\x20to\x20an\x20Arb\x20case','governed_operation':'arb_statement_on_case'}];export const ARBITRATION_PERMISSIONS=[{'index':0x15e,'name':'ARBITRATION_NEW','description':'Create\x20new\x20Arbitration','governed_operation':'create_arbitration'},{'index':0x15f,'name':'ARBITRATION_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_arbitration_description'},{'index':0x161,'name':'ARBITRATION_LOCATION','description':'Set\x20location','governed_operation':'set_arbitration_location'},{'index':0x162,'name':'ARBITRATION_VOTING_GUARD','description':'Set\x20voting\x20guard','governed_operation':'set_arbitration_voting_guard'},{'index':0x163,'name':'ARBITRATION_USAGE_GUARD','description':'Set\x20usage\x20guard','governed_operation':'set_arbitration_usage_guard'},{'index':0x164,'name':'ARBITRATION_PAUSE','description':'Pause/resume','governed_operation':'pause_or_resume_arbitration'},{'index':0x165,'name':'ARBITRATION_FEE','description':'Set\x20fee','governed_operation':'set_arbitration_fee'},{'index':0x166,'name':'ARBITRATION_VOTE','description':'Vote','governed_operation':'cast_arbitration_vote'},{'index':0x167,'name':'ARBITRATION_ARBITRATION','description':'Arbitrate\x20dispute','governed_operation':'issue_arbitration_ruling'},{'index':0x168,'name':'ARBITRATION_FEEDBACK','description':'Provide\x20feedback','governed_operation':'give_arbitration_feedback'},{'index':0x169,'name':'ARBITRATION_CONFIRM','description':'Confirm\x20resolution','governed_operation':'confirm_arbitration_result'},{'index':0x16a,'name':'ARBITRATION_VOTING_DEADLINE_CHANGE','description':'Change\x20voting\x20deadline','governed_operation':'change_arbitration_voting_deadline'},{'index':0x16b,'name':'ARBITRATION_RESET','description':'Reset\x20arbitration','governed_operation':'reset_arbitration'},{'index':0x16c,'name':'ARBITRATION_ARB_WITHDRAW','description':'Arb\x20withdraw','governed_operation':'withdraw_arbitration_funds'},{'index':0x16d,'name':'ARBITRATION_FEES_ALLOC','description':'Allocate\x20fees','governed_operation':'allocate_arbitration_fees'},{'index':0x16e,'name':'ARBITRATION_FEES_TRANSFER','description':'Transfer\x20fees','governed_operation':'transfer_arbitration_fees'},{'index':0x16f,'name':'ARBITRATION_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_arbitration_by_owner'},{'index':0x170,'name':'ARBITRATION_UM','description':'Set\x20UM','governed_operation':'set_arbitration_user_manager'}];export const DEMAND_PERMISSIONS=[{'index':0x190,'name':'DEMAND_NEW','description':'Create\x20new\x20Demand','governed_operation':'create_demand'},{'index':0x191,'name':'DEMAND_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_demand_description'},{'index':0x192,'name':'DEMAND_LOCATION','description':'Set\x20location','governed_operation':'set_demand_location'},{'index':0x194,'name':'DEMAND_GUARD','description':'Set\x20guard','governed_operation':'set_demand_guard'},{'index':0x195,'name':'DEMAND_REWARD','description':'Set\x20reward','governed_operation':'set_demand_reward'},{'index':0x196,'name':'DEMAND_FEEDBACK','description':'Provide\x20feedback','governed_operation':'give_demand_feedback'},{'index':0x197,'name':'DEMAND_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_demand_by_owner'},{'index':0x198,'name':'DEMAND_UM','description':'Set\x20UM','governed_operation':'set_demand_user_manager'}];export const CONTACT_PERMISSIONS=[{'index':0x1c2,'name':'CONTACT_NEW','description':'Create\x20new\x20Contact','governed_operation':'create_contact'},{'index':0x1c3,'name':'CONTACT_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_contact_description'},{'index':0x1c4,'name':'CONTACT_LOCATION','description':'Set\x20location','governed_operation':'set_contact_location'},{'index':0x1c5,'name':'CONTACT_IM','description':'Set\x20IM','governed_operation':'set_contact_im'},{'index':0x1c6,'name':'CONTACT_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_contact_by_owner'}];export const PERMISSION_SCENES=[{'id':'service_permission','name':'Service\x20publish\x20&\x20operation\x20permission','host_object':'Service','permission_index_range':'300-320','builtin_indexes':SERVICE_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['publish_service\x20(311)','pause_or_resume_service\x20(310)','set_service_machine\x20(306)','set_service_buy_guard\x20(307)','set_order_allocator\x20(313)','set_service_reward\x20(318)','manage_compensation_fund\x20(314-317)'],'mutable_after_publish':!![],'common_patterns':['Owner-only\x20publish:\x20only\x20owner/admin\x20has\x20SERVICE_PUBLISH\x20(311)','Separate\x20pause\x20role:\x20delegate\x20SERVICE_PAUSE\x20(310)\x20to\x20operator','Allocator\x20guard:\x20SERVICE_ORDER_ALLOCATOR\x20(313)\x20guarded\x20by\x20Guard'],'recommended_templates':['T-P-03','T-P-02']},{'id':'machine_permission','name':'Machine\x20workflow\x20permission','host_object':'Machine','permission_index_range':'200-208','builtin_indexes':MACHINE_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['publish_machine\x20(205)','manage_machine_nodes\x20(206)','pause_or_resume_machine\x20(204)','set_consensus_repositories\x20(203)'],'mutable_after_publish':!![],'common_patterns':['Pre-publish\x20node\x20editing:\x20MACHINE_NODE\x20(206)\x20before\x20publish\x20only','Post-publish:\x20only\x20Forward.guard\x20can\x20be\x20modified;\x20node\x20structure\x20frozen','Consensus\x20repositories:\x20MACHINE_CONSENSUS_REPOSITORIES\x20(203)\x20for\x20multi-repo\x20consensus'],'recommended_templates':['T-P-04','T-P-01']},{'id':'treasury_permission','name':'Treasury\x20fund\x20management\x20permission','host_object':'Treasury','permission_index_range':'250-258','builtin_indexes':TREASURY_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['deposit_into_treasury\x20(252)','withdraw_treasury_funds\x20(254)','manage_external_deposit_guards\x20(255)','manage_external_withdraw_guards\x20(256)','receive_treasury_by_owner\x20(257)','set_treasury_user_manager\x20(258)'],'mutable_after_publish':!![],'common_patterns':['Guard-protected\x20external\x20ops:\x20TREASURY_EXTERNAL_*_GUARD\x20(255/256)\x20for\x20cross-treasury\x20safety;\x20external_deposit/external_withdraw\x20use\x20Guard\x20+\x20Passport,\x20no\x20Permission\x20index','Withdraw\x20restricted\x20to\x20owner+admin:\x20TREASURY_WITHDRAW\x20(254)\x20tightly\x20held','UM\x20delegation:\x20TREASURY_UM\x20(258)\x20for\x20contact\x20management'],'recommended_templates':['T-P-05','T-P-02']},{'id':'allocation_permission','name':'Allocation\x20strategy\x20permission\x20(custom)','host_object':'Allocation','permission_index_range':'>=1000\x20(custom)','builtin_indexes':[],'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['execute_allocation\x20(custom\x20index)','receive_allocation\x20(custom\x20index)'],'mutable_after_publish':!![],'common_patterns':['Custom\x20index\x20>=\x201000\x20for\x20business-specific\x20allocation\x20rules','Guard-bound\x20alloc:\x20alloc\x20operation\x20requires\x20Guard\x20verification','Multi-entity:\x20multiple\x20allocators\x20share\x20same\x20permission_index'],'recommended_templates':['T-P-01','T-P-02']},{'id':'arbitration_permission','name':'Arbitration\x20case\x20management\x20permission','host_object':'Arbitration','permission_index_range':'350-368','builtin_indexes':ARBITRATION_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['cast_arbitration_vote\x20(358)','issue_arbitration_ruling\x20(359)','give_arbitration_feedback\x20(360)','confirm_arbitration_result\x20(361)','change_arbitration_voting_deadline\x20(362)','reset_arbitration\x20(363)','allocate_arbitration_fees\x20(365)'],'mutable_after_publish':!![],'common_patterns':['Arb\x20committee:\x20ARBITRATION_VOTE\x20(358)\x20granted\x20to\x20multiple\x20arbiters','Open\x20voting\x20guard:\x20voting_guard\x20allows\x20public\x20to\x20vote\x20(weight=1)','Guard-based\x20usage:\x20usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed'],'recommended_templates':['T-P-06','T-P-02']},{'id':'repository_permission','name':'Repository\x20policy\x20management\x20permission','host_object':'Repository','permission_index_range':'100-105','builtin_indexes':REPOSITORY_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_repository_policy\x20(102)','set_repository_reward\x20(103)'],'mutable_after_publish':!![],'common_patterns':['Public\x20read:\x20anyone\x20can\x20read\x20Repository\x20data','Owner-write:\x20REPOSITORY_POLICY\x20(102)\x20restricted\x20to\x20owner/admin','Reward\x20binding:\x20REPOSITORY_REWARD\x20(103)\x20for\x20incentive\x20distribution'],'recommended_templates':['T-P-01']},{'id':'reward_permission','name':'Reward\x20distribution\x20permission','host_object':'Reward','permission_index_range':'150-157','builtin_indexes':REWARD_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_reward_guard\x20(152)','add_reward_coin\x20(153)','receive_reward\x20(154)','extend_reward_guard_expiration\x20(155)'],'mutable_after_publish':!![],'common_patterns':['Guard-bound\x20claim:\x20REWARD_RECEIVE\x20(154)\x20protected\x20by\x20Guard','Coin\x20refill:\x20REWARD_COIN_ADD\x20(153)\x20for\x20owner-only\x20top-up','Expiration\x20extension:\x20REWARD_GUARD_EXPIRATION_TIME_ADD\x20(155)\x20for\x20deadline\x20mgmt'],'recommended_templates':['T-P-01']},{'id':'progress_permission','name':'Progress\x20workflow\x20advancement\x20permission','host_object':'Progress','permission_index_range':'220-225','builtin_indexes':PROGRESS_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['submit_task\x20(222)','manage_named_operators\x20(221)','set_progress_context_repository\x20(223)','unhold_progress\x20(224)'],'mutable_after_publish':![],'common_patterns':['Named\x20operator:\x20PROGRESS_NAMED_OPERATOR\x20(221)\x20for\x20assigned\x20operators','Task\x20submission:\x20PROGRESS_TASK\x20(222)\x20for\x20any\x20authorized\x20submitter','Machine-bound:\x20Progress\x20permission\x20effective\x20only\x20after\x20Machine\x20publish'],'recommended_templates':['T-P-01']},{'id':'demand_permission','name':'Demand\x20publication\x20permission','host_object':'Demand','permission_index_range':'400-408','builtin_indexes':DEMAND_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_demand_guard\x20(404)','set_demand_reward\x20(405)','give_demand_feedback\x20(406)'],'mutable_after_publish':!![],'common_patterns':['Public\x20demand:\x20anyone\x20can\x20view;\x20only\x20owner\x20can\x20publish','Feedback\x20channel:\x20DEMAND_FEEDBACK\x20(406)\x20for\x20community\x20input','Guard\x20filtering:\x20DEMAND_GUARD\x20(404)\x20for\x20service\x20eligibility'],'recommended_templates':['T-P-01']},{'id':'contact_permission','name':'Contact/Messenger\x20management\x20permission','host_object':'Contact','permission_index_range':'450-454','builtin_indexes':CONTACT_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_contact_im\x20(453)'],'mutable_after_publish':!![],'common_patterns':['Personal\x20contact:\x20usually\x20single-owner','IM\x20binding:\x20CONTACT_IM\x20(453)\x20for\x20chat\x20platform\x20binding'],'recommended_templates':['T-P-01']},{'id':'ownership_transfer','name':'Permission\x20ownership\x20transfer\x20(cross-scene)','host_object':'Standalone','permission_index_range':'N/A','builtin_indexes':[],'owner_operations':['builder\x20(transfer)'],'admin_operations':[],'permission_index_operations':[],'mutable_after_publish':!![],'common_patterns':['Owner-only:\x20transfer\x20requires\x20the\x20current\x20owner\x20as\x20the\x20signer','Irreversible:\x20once\x20transferred,\x20original\x20owner\x20loses\x20all\x20control','New\x20owner\x20auto-admin:\x20new\x20owner\x20becomes\x20admin\x20automatically','Pre-transfer\x20backup:\x20export\x20Permission\x20JSON\x20before\x20transfer'],'recommended_templates':['T-P-08']}];export const PERMISSION_LEDGER_VERSION='1.0.0';export function getScenesByHostObject(a){return PERMISSION_SCENES['filter'](b=>b['host_object']===a);}export function findSceneById(a){return PERMISSION_SCENES['find'](b=>b['id']===a);}export function findSceneByPermissionIndex(a){for(const b of PERMISSION_SCENES){if(b['builtin_indexes']['some'](c=>c['index']===a))return b;}return undefined;}export function getBuiltinPermissionByIndex(a){for(const b of PERMISSION_SCENES){const c=b['builtin_indexes']['find'](d=>d['index']===a);if(c)return c;}return undefined;}export function isBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function inferSceneFromIntent(a){const b=a['toLowerCase']();if(b['includes']('transfer')||b['includes']('handover'))return findSceneById('ownership_transfer');const c=[['service','Service'],['machine','Machine'],['treasury','Treasury'],['arbitration','Arbitration'],['repository','Repository'],['reward','Reward'],['progress','Progress'],['demand','Demand'],['contact','Contact'],['messenger','Contact'],['allocation','Allocation']];for(const [d,e]of c){if(b['includes'](d)){const f=getScenesByHostObject(e);if(f['length']>0x0)return f[0x0];}}return undefined;}export function getAllBuiltinPermissions(){return PERMISSION_SCENES['flatMap'](a=>a['builtin_indexes']);}export function getPermissionScenesCount(){return PERMISSION_SCENES['length'];}
|
|
1
|
+
export const PERMISSION_TYPES=[{'name':'Permission','scope':'organization','definedOn':'Permission\x20Object\x20(standalone\x20on-chain\x20object,\x20referenced\x20by\x20service/machine/etc.)','controls':'Who\x20can\x20modify\x20the\x20bound\x20object\x27s\x20settings,\x20publish\x20it,\x20manage\x20its\x20funds,\x20etc.','grantedBy':'The\x20object\x27s\x20creator\x20(owner)\x20or\x20anyone\x20the\x20creator\x20delegates\x20to','example':'A\x20shop\x20owner\x20creates\x20a\x20Permission\x20allowing\x20only\x20their\x20staff\x20to\x20modify\x20the\x20Service\x27s\x20price.'},{'name':'NamedOperator','scope':'order','definedOn':'Per-order\x20(specified\x20in\x20the\x20order\x20creation/modification\x20by\x20the\x20service)','controls':'Who\x20can\x20operate\x20on\x20a\x20specific\x20order:\x20advance\x20progress,\x20settle,\x20refund,\x20etc.','grantedBy':'The\x20service\x20(via\x20its\x20order_allocators\x20or\x20explicit\x20named\x20operators)','example':'A\x20delivery\x20service\x20assigns\x20Alice\x20as\x20the\x20NamedOperator\x20for\x20order\x20#123\x20—\x20only\x20Alice\x20can\x20mark\x20it\x20delivered.'},{'name':'OrderHolder','scope':'order_holder','definedOn':'Per-order\x20(the\x20\x27\x27\x20empty\x20string\x20address\x20=\x20the\x20order\x27s\x20current\x20holder)','controls':'Who\x20currently\x20holds\x20the\x20order\x20and\x20can\x20perform\x20holder-specific\x20actions\x20(accept,\x20reject,\x20pay)','grantedBy':'Implicitly\x20assigned\x20when\x20an\x20order\x20is\x20created\x20or\x20transferred','example':'Bob\x20places\x20an\x20order\x20—\x20he\x20becomes\x20the\x20OrderHolder.\x20He\x20can\x20accept\x20delivery\x20or\x20request\x20arbitration.'}];const PERMISSION_TYPE_INDEX=new Map(PERMISSION_TYPES['map'](a=>[a['name'],a]));export function getPermissionType(a){return PERMISSION_TYPE_INDEX['get'](a);}export const REPOSITORY_PERMISSIONS=[{'index':0x64,'name':'REPOSITORY_NEW','description':'Create\x20new\x20Repository\x20policy','governed_operation':'create_repository'},{'index':0x65,'name':'REPOSITORY_DESCRIPTION','description':'Modify\x20Repository\x20description','governed_operation':'set_repository_description'},{'index':0x66,'name':'REPOSITORY_POLICY','description':'Modify\x20Repository\x20policy','governed_operation':'set_repository_policy'},{'index':0x67,'name':'REPOSITORY_REWARD','description':'Set\x20Repository\x20reward','governed_operation':'set_repository_reward'},{'index':0x68,'name':'REPOSITORY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_repository_by_owner'},{'index':0x69,'name':'REPOSITORY_UM','description':'Set\x20UM\x20(User\x20Manager)','governed_operation':'set_repository_user_manager'}];export const REWARD_PERMISSIONS=[{'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward','governed_operation':'create_reward'},{'index':0x97,'name':'REWARD_DESCRIPTION','description':'Modify\x20Reward\x20description','governed_operation':'set_reward_description'},{'index':0x98,'name':'REWARD_GUARD','description':'Set\x20Reward\x20guard','governed_operation':'set_reward_guard'},{'index':0x99,'name':'REWARD_COIN_ADD','description':'Add\x20coins\x20to\x20Reward','governed_operation':'add_reward_coin'},{'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20reward','governed_operation':'receive_reward'},{'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Extend\x20guard\x20expiration','governed_operation':'extend_reward_guard_expiration'},{'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_reward_by_owner'},{'index':0x9d,'name':'REWARD_UM','description':'Set\x20UM','governed_operation':'set_reward_user_manager'}];export const MACHINE_PERMISSIONS=[{'index':0xc8,'name':'MACHINE_NEW','description':'Create\x20new\x20Machine','governed_operation':'create_machine'},{'index':0xc9,'name':'MACHINE_DESCRIPTION','description':'Modify\x20Machine\x20description','governed_operation':'set_machine_description'},{'index':0xcb,'name':'MACHINE_CONSENSUS_REPOSITORIES','description':'Set\x20consensus\x20Repositories','governed_operation':'set_consensus_repositories'},{'index':0xcc,'name':'MACHINE_PAUSE','description':'Pause/resume\x20Machine','governed_operation':'pause_or_resume_machine'},{'index':0xcd,'name':'MACHINE_PUBLISH','description':'Publish\x20Machine\x20(irreversible)','governed_operation':'publish_machine'},{'index':0xce,'name':'MACHINE_NODE','description':'Modify\x20Machine\x20nodes','governed_operation':'manage_machine_nodes'},{'index':0xcf,'name':'MACHINE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_machine_by_owner'},{'index':0xd0,'name':'MACHINE_UM','description':'Set\x20UM','governed_operation':'set_machine_user_manager'}];export const PROGRESS_PERMISSIONS=[{'index':0xdc,'name':'PROGRESS_NEW','description':'Create\x20new\x20Progress','governed_operation':'create_progress'},{'index':0xdd,'name':'PROGRESS_NAMED_OPERATOR','description':'Manage\x20named\x20operators','governed_operation':'manage_named_operators'},{'index':0xde,'name':'PROGRESS_TASK','description':'Submit\x20task','governed_operation':'submit_task'},{'index':0xdf,'name':'PROGRESS_CONTEXT_REPOSITORY','description':'Set\x20context\x20Repository','governed_operation':'set_progress_context_repository'},{'index':0xe0,'name':'PROGRESS_UNHOLD','description':'Unhold\x20Progress','governed_operation':'unhold_progress'},{'index':0xe1,'name':'PROGRESS_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_progress_by_owner'}];export const TREASURY_PERMISSIONS=[{'index':0xfa,'name':'TREASURY_NEW','description':'Create\x20new\x20Treasury','governed_operation':'create_treasury'},{'index':0xfb,'name':'TREASURY_DESCRIPTION','description':'Modify\x20Treasury\x20description','governed_operation':'set_treasury_description'},{'index':0xfc,'name':'TREASURY_DEPOSIT','description':'Deposit\x20funds','governed_operation':'deposit_into_treasury'},{'index':0xfd,'name':'TREASURY_RECEIVE','description':'Receive\x20funds','governed_operation':'receive_treasury_funds'},{'index':0xfe,'name':'TREASURY_WITHDRAW','description':'Withdraw\x20funds','governed_operation':'withdraw_treasury_funds'},{'index':0xff,'name':'TREASURY_EXTERNAL_DEPOSIT_GUARD','description':'Manage\x20external\x20deposit\x20Guard\x20list','governed_operation':'manage_external_deposit_guards'},{'index':0x100,'name':'TREASURY_EXTERNAL_WITHDRAW_GUARD','description':'Manage\x20external\x20withdraw\x20Guard\x20list','governed_operation':'manage_external_withdraw_guards'},{'index':0x101,'name':'TREASURY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_treasury_by_owner'},{'index':0x102,'name':'TREASURY_UM','description':'Set\x20UM','governed_operation':'set_treasury_user_manager'}];export const SERVICE_PERMISSIONS=[{'index':0x12c,'name':'SERVICE_NEW','description':'Create\x20new\x20Service','governed_operation':'create_service'},{'index':0x12d,'name':'SERVICE_DESCRIPTION','description':'Modify\x20Service\x20description','governed_operation':'set_service_description'},{'index':0x12f,'name':'SERVICE_LOCATION','description':'Set\x20Service\x20location','governed_operation':'set_service_location'},{'index':0x130,'name':'SERVICE_REPOSITORY','description':'Set\x20Service\x20repository','governed_operation':'set_service_repository'},{'index':0x131,'name':'SERVICE_SALES','description':'Modify\x20sales','governed_operation':'manage_sales'},{'index':0x132,'name':'SERVICE_MACHINE','description':'Bind/modify\x20Machine','governed_operation':'set_service_machine'},{'index':0x133,'name':'SERVICE_BUY_GUARD','description':'Set\x20buy\x20guard','governed_operation':'set_service_buy_guard'},{'index':0x134,'name':'SERVICE_ARBITRATION','description':'Set\x20Arbitration','governed_operation':'set_service_arbitration'},{'index':0x135,'name':'SERVICE_CUSTOMER_INFO_REQUIRED','description':'Set\x20customer\x20info\x20required','governed_operation':'set_customer_info_required'},{'index':0x136,'name':'SERVICE_PAUSE','description':'Pause/resume\x20Service','governed_operation':'pause_or_resume_service'},{'index':0x137,'name':'SERVICE_PUBLISH','description':'Publish\x20Service','governed_operation':'publish_service'},{'index':0x138,'name':'SERVICE_DISCOUNT','description':'Set\x20discount','governed_operation':'set_discount'},{'index':0x139,'name':'SERVICE_ORDER_ALLOCATOR','description':'Set\x20order\x20allocator','governed_operation':'set_order_allocator'},{'index':0x13a,'name':'SERVICE_COMPENSATION_FUND_DEPOSIT','description':'Deposit\x20to\x20compensation\x20fund','governed_operation':'deposit_compensation_fund'},{'index':0x13b,'name':'SERVICE_COMPENSATION_FUND_WITHDRAW','description':'Withdraw\x20from\x20compensation\x20fund','governed_operation':'withdraw_compensation_fund'},{'index':0x13c,'name':'SERVICE_COMPENSATION_FUND_FREEZE','description':'Freeze\x20compensation\x20fund','governed_operation':'freeze_compensation_fund'},{'index':0x13d,'name':'SERVICE_COMPENSATION_FUND_UNFREEZE','description':'Unfreeze\x20compensation\x20fund','governed_operation':'unfreeze_compensation_fund'},{'index':0x13e,'name':'SERVICE_REWARD','description':'Set\x20reward','governed_operation':'set_service_reward'},{'index':0x13f,'name':'SERVICE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_service_by_owner'},{'index':0x140,'name':'SERVICE_UM','description':'Set\x20UM','governed_operation':'set_service_user_manager'},{'index':0x141,'name':'SERVICE_ARB_STATEMENT','description':'Append\x20seller\x20statement\x20to\x20an\x20Arb\x20case','governed_operation':'arb_statement_on_case'}];export const ARBITRATION_PERMISSIONS=[{'index':0x15e,'name':'ARBITRATION_NEW','description':'Create\x20new\x20Arbitration','governed_operation':'create_arbitration'},{'index':0x15f,'name':'ARBITRATION_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_arbitration_description'},{'index':0x161,'name':'ARBITRATION_LOCATION','description':'Set\x20location','governed_operation':'set_arbitration_location'},{'index':0x162,'name':'ARBITRATION_VOTING_GUARD','description':'Set\x20voting\x20guard','governed_operation':'set_arbitration_voting_guard'},{'index':0x163,'name':'ARBITRATION_USAGE_GUARD','description':'Set\x20usage\x20guard','governed_operation':'set_arbitration_usage_guard'},{'index':0x164,'name':'ARBITRATION_PAUSE','description':'Pause/resume','governed_operation':'pause_or_resume_arbitration'},{'index':0x165,'name':'ARBITRATION_FEE','description':'Set\x20fee','governed_operation':'set_arbitration_fee'},{'index':0x166,'name':'ARBITRATION_VOTE','description':'Vote\x20(empty\x20voting_guard\x20=\x20equal\x20weight\x201-person-1-vote,\x20but\x20358\x20is\x20still\x20required\x20per\x20voter\x20—\x20NOT\x20permissionless)','governed_operation':'cast_arbitration_vote'},{'index':0x167,'name':'ARBITRATION_ARBITRATION','description':'Arbitrate\x20dispute','governed_operation':'issue_arbitration_ruling'},{'index':0x168,'name':'ARBITRATION_FEEDBACK','description':'Provide\x20feedback','governed_operation':'give_arbitration_feedback'},{'index':0x169,'name':'ARBITRATION_CONFIRM','description':'Confirm\x20resolution','governed_operation':'confirm_arbitration_result'},{'index':0x16a,'name':'ARBITRATION_VOTING_DEADLINE_CHANGE','description':'Change\x20voting\x20deadline','governed_operation':'change_arbitration_voting_deadline'},{'index':0x16b,'name':'ARBITRATION_RESET','description':'Reset\x20arbitration','governed_operation':'reset_arbitration'},{'index':0x16c,'name':'ARBITRATION_ARB_WITHDRAW','description':'Arb\x20withdraw','governed_operation':'withdraw_arbitration_funds'},{'index':0x16d,'name':'ARBITRATION_FEES_ALLOC','description':'Allocate\x20fees','governed_operation':'allocate_arbitration_fees'},{'index':0x16e,'name':'ARBITRATION_FEES_TRANSFER','description':'Transfer\x20fees','governed_operation':'transfer_arbitration_fees'},{'index':0x16f,'name':'ARBITRATION_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_arbitration_by_owner'},{'index':0x170,'name':'ARBITRATION_UM','description':'Set\x20UM','governed_operation':'set_arbitration_user_manager'}];export const DEMAND_PERMISSIONS=[{'index':0x190,'name':'DEMAND_NEW','description':'Create\x20new\x20Demand','governed_operation':'create_demand'},{'index':0x191,'name':'DEMAND_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_demand_description'},{'index':0x192,'name':'DEMAND_LOCATION','description':'Set\x20location','governed_operation':'set_demand_location'},{'index':0x194,'name':'DEMAND_GUARD','description':'Set\x20guard','governed_operation':'set_demand_guard'},{'index':0x195,'name':'DEMAND_REWARD','description':'Set\x20reward','governed_operation':'set_demand_reward'},{'index':0x196,'name':'DEMAND_FEEDBACK','description':'Provide\x20feedback','governed_operation':'give_demand_feedback'},{'index':0x197,'name':'DEMAND_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_demand_by_owner'},{'index':0x198,'name':'DEMAND_UM','description':'Set\x20UM','governed_operation':'set_demand_user_manager'}];export const CONTACT_PERMISSIONS=[{'index':0x1c2,'name':'CONTACT_NEW','description':'Create\x20new\x20Contact','governed_operation':'create_contact'},{'index':0x1c3,'name':'CONTACT_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_contact_description'},{'index':0x1c4,'name':'CONTACT_LOCATION','description':'Set\x20location','governed_operation':'set_contact_location'},{'index':0x1c5,'name':'CONTACT_IM','description':'Set\x20IM','governed_operation':'set_contact_im'},{'index':0x1c6,'name':'CONTACT_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_contact_by_owner'}];export const PERMISSION_SCENES=[{'id':'service_permission','name':'Service\x20publish\x20&\x20operation\x20permission','host_object':'Service','permission_index_range':'300-320','builtin_indexes':SERVICE_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['publish_service\x20(311)','pause_or_resume_service\x20(310)','set_service_machine\x20(306)','set_service_buy_guard\x20(307)','set_order_allocator\x20(313)','set_service_reward\x20(318)','manage_compensation_fund\x20(314-317)'],'mutable_after_publish':!![],'common_patterns':['Owner-only\x20publish:\x20only\x20owner/admin\x20has\x20SERVICE_PUBLISH\x20(311)','Separate\x20pause\x20role:\x20delegate\x20SERVICE_PAUSE\x20(310)\x20to\x20operator','Allocator\x20guard:\x20SERVICE_ORDER_ALLOCATOR\x20(313)\x20guarded\x20by\x20Guard'],'recommended_templates':['T-P-03','T-P-02']},{'id':'machine_permission','name':'Machine\x20workflow\x20permission','host_object':'Machine','permission_index_range':'200-208','builtin_indexes':MACHINE_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['publish_machine\x20(205)','manage_machine_nodes\x20(206)','pause_or_resume_machine\x20(204)','set_consensus_repositories\x20(203)'],'mutable_after_publish':!![],'common_patterns':['Pre-publish\x20node\x20editing:\x20MACHINE_NODE\x20(206)\x20before\x20publish\x20only','Post-publish:\x20only\x20Forward.guard\x20can\x20be\x20modified;\x20node\x20structure\x20frozen','Consensus\x20repositories:\x20MACHINE_CONSENSUS_REPOSITORIES\x20(203)\x20for\x20multi-repo\x20consensus'],'recommended_templates':['T-P-04','T-P-01']},{'id':'treasury_permission','name':'Treasury\x20fund\x20management\x20permission','host_object':'Treasury','permission_index_range':'250-258','builtin_indexes':TREASURY_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['deposit_into_treasury\x20(252)','withdraw_treasury_funds\x20(254)','manage_external_deposit_guards\x20(255)','manage_external_withdraw_guards\x20(256)','receive_treasury_by_owner\x20(257)','set_treasury_user_manager\x20(258)'],'mutable_after_publish':!![],'common_patterns':['Guard-protected\x20external\x20ops:\x20TREASURY_EXTERNAL_*_GUARD\x20(255/256)\x20for\x20cross-treasury\x20safety;\x20external_deposit/external_withdraw\x20use\x20Guard\x20+\x20Passport,\x20no\x20Permission\x20index','Withdraw\x20restricted\x20to\x20owner+admin:\x20TREASURY_WITHDRAW\x20(254)\x20tightly\x20held','UM\x20delegation:\x20TREASURY_UM\x20(258)\x20for\x20contact\x20management'],'recommended_templates':['T-P-05','T-P-02']},{'id':'allocation_permission','name':'Allocation\x20strategy\x20permission\x20(custom)','host_object':'Allocation','permission_index_range':'>=1000\x20(custom)','builtin_indexes':[],'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['execute_allocation\x20(custom\x20index)','receive_allocation\x20(custom\x20index)'],'mutable_after_publish':!![],'common_patterns':['Custom\x20index\x20>=\x201000\x20for\x20business-specific\x20allocation\x20rules','Guard-bound\x20alloc:\x20alloc\x20operation\x20requires\x20Guard\x20verification','Multi-entity:\x20multiple\x20allocators\x20share\x20same\x20permission_index'],'recommended_templates':['T-P-01','T-P-02']},{'id':'arbitration_permission','name':'Arbitration\x20case\x20management\x20permission','host_object':'Arbitration','permission_index_range':'350-368','builtin_indexes':ARBITRATION_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['cast_arbitration_vote\x20(358)','issue_arbitration_ruling\x20(359)','give_arbitration_feedback\x20(360)','confirm_arbitration_result\x20(361)','change_arbitration_voting_deadline\x20(362)','reset_arbitration\x20(363)','allocate_arbitration_fees\x20(365)'],'mutable_after_publish':!![],'common_patterns':['Arb\x20committee:\x20ARBITRATION_VOTE\x20(358)\x20granted\x20to\x20multiple\x20arbiters','Open\x20voting\x20guard:\x20voting_guard\x20allows\x20public\x20to\x20vote\x20(weight=1)','Guard-based\x20usage:\x20usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed'],'recommended_templates':['T-P-06','T-P-02']},{'id':'repository_permission','name':'Repository\x20policy\x20management\x20permission','host_object':'Repository','permission_index_range':'100-105','builtin_indexes':REPOSITORY_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_repository_policy\x20(102)','set_repository_reward\x20(103)'],'mutable_after_publish':!![],'common_patterns':['Public\x20read:\x20anyone\x20can\x20read\x20Repository\x20data','Owner-write:\x20REPOSITORY_POLICY\x20(102)\x20restricted\x20to\x20owner/admin','Reward\x20binding:\x20REPOSITORY_REWARD\x20(103)\x20for\x20incentive\x20distribution'],'recommended_templates':['T-P-01']},{'id':'reward_permission','name':'Reward\x20distribution\x20permission','host_object':'Reward','permission_index_range':'150-157','builtin_indexes':REWARD_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_reward_guard\x20(152)','add_reward_coin\x20(153)','receive_reward\x20(154)','extend_reward_guard_expiration\x20(155)'],'mutable_after_publish':!![],'common_patterns':['Guard-bound\x20claim:\x20REWARD_RECEIVE\x20(154)\x20protected\x20by\x20Guard','Coin\x20refill:\x20REWARD_COIN_ADD\x20(153)\x20for\x20owner-only\x20top-up','Expiration\x20extension:\x20REWARD_GUARD_EXPIRATION_TIME_ADD\x20(155)\x20for\x20deadline\x20mgmt'],'recommended_templates':['T-P-01']},{'id':'progress_permission','name':'Progress\x20workflow\x20advancement\x20permission','host_object':'Progress','permission_index_range':'220-225','builtin_indexes':PROGRESS_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['submit_task\x20(222)','manage_named_operators\x20(221)','set_progress_context_repository\x20(223)','unhold_progress\x20(224)'],'mutable_after_publish':![],'common_patterns':['Named\x20operator:\x20PROGRESS_NAMED_OPERATOR\x20(221)\x20for\x20assigned\x20operators','Task\x20submission:\x20PROGRESS_TASK\x20(222)\x20for\x20any\x20authorized\x20submitter','Machine-bound:\x20Progress\x20permission\x20effective\x20only\x20after\x20Machine\x20publish'],'recommended_templates':['T-P-01']},{'id':'demand_permission','name':'Demand\x20publication\x20permission','host_object':'Demand','permission_index_range':'400-408','builtin_indexes':DEMAND_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_demand_guard\x20(404)','set_demand_reward\x20(405)','give_demand_feedback\x20(406)'],'mutable_after_publish':!![],'common_patterns':['Public\x20demand:\x20anyone\x20can\x20view;\x20only\x20owner\x20can\x20publish','Feedback\x20channel:\x20DEMAND_FEEDBACK\x20(406)\x20for\x20community\x20input','Guard\x20filtering:\x20DEMAND_GUARD\x20(404)\x20for\x20service\x20eligibility'],'recommended_templates':['T-P-01']},{'id':'contact_permission','name':'Contact/Messenger\x20management\x20permission','host_object':'Contact','permission_index_range':'450-454','builtin_indexes':CONTACT_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_contact_im\x20(453)'],'mutable_after_publish':!![],'common_patterns':['Personal\x20contact:\x20usually\x20single-owner','IM\x20binding:\x20CONTACT_IM\x20(453)\x20for\x20chat\x20platform\x20binding'],'recommended_templates':['T-P-01']},{'id':'ownership_transfer','name':'Permission\x20ownership\x20transfer\x20(cross-scene)','host_object':'Standalone','permission_index_range':'N/A','builtin_indexes':[],'owner_operations':['builder\x20(transfer)'],'admin_operations':[],'permission_index_operations':[],'mutable_after_publish':!![],'common_patterns':['Owner-only:\x20transfer\x20requires\x20the\x20current\x20owner\x20as\x20the\x20signer','Irreversible:\x20once\x20transferred,\x20original\x20owner\x20loses\x20all\x20control','New\x20owner\x20auto-admin:\x20new\x20owner\x20becomes\x20admin\x20automatically','Pre-transfer\x20backup:\x20export\x20Permission\x20JSON\x20before\x20transfer'],'recommended_templates':['T-P-08']}];export const PERMISSION_LEDGER_VERSION='1.0.0';export function getScenesByHostObject(a){return PERMISSION_SCENES['filter'](b=>b['host_object']===a);}export function findSceneById(a){return PERMISSION_SCENES['find'](b=>b['id']===a);}export function findSceneByPermissionIndex(a){for(const b of PERMISSION_SCENES){if(b['builtin_indexes']['some'](c=>c['index']===a))return b;}return undefined;}export function getBuiltinPermissionByIndex(a){for(const b of PERMISSION_SCENES){const c=b['builtin_indexes']['find'](d=>d['index']===a);if(c)return c;}return undefined;}export function isBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function inferSceneFromIntent(a){const b=a['toLowerCase']();if(b['includes']('transfer')||b['includes']('handover'))return findSceneById('ownership_transfer');const c=[['service','Service'],['machine','Machine'],['treasury','Treasury'],['arbitration','Arbitration'],['repository','Repository'],['reward','Reward'],['progress','Progress'],['demand','Demand'],['contact','Contact'],['messenger','Contact'],['allocation','Allocation']];for(const [d,e]of c){if(b['includes'](d)){const f=getScenesByHostObject(e);if(f['length']>0x0)return f[0x0];}}return undefined;}export function getAllBuiltinPermissions(){return PERMISSION_SCENES['flatMap'](a=>a['builtin_indexes']);}export function getPermissionScenesCount(){return PERMISSION_SCENES['length'];}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ReleaseSentinel {
|
|
2
|
+
version: number;
|
|
3
|
+
hash: string;
|
|
4
|
+
}
|
|
5
|
+
export type ReleaseFileState = "current" | "outdated" | "user_modified" | "user_file";
|
|
6
|
+
export declare function releaseBodyHash(content: string): string;
|
|
7
|
+
export declare function releaseSentinelLine(kind: string, version: number, hash: string): string;
|
|
8
|
+
export declare function stripReleaseSentinel(raw: string, kind: string): {
|
|
9
|
+
sentinel: ReleaseSentinel | null;
|
|
10
|
+
content: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function classifyRelease(sentinel: ReleaseSentinel, content: string, currentVersion: number): ReleaseFileState;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createHash}from'node:crypto';export function releaseBodyHash(a){return createHash('sha256')['update'](a,'utf8')['digest']('hex')['slice'](0x0,0x10);}export function releaseSentinelLine(a,b,c){return'<!--\x20builtin:'+a+':v'+b+':'+c+'\x20-->';}function kindRe(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}export function stripReleaseSentinel(a,b){const c=a['replace'](/^\uFEFF/,''),d=new RegExp('^<!--\x20builtin:'+kindRe(b)+':v(\x5cd+):([0-9a-f]+)\x20-->\x5cr?\x5cn'),e=d['exec'](c);if(!e)return{'sentinel':null,'content':c};return{'sentinel':{'version':Number(e[0x1]),'hash':e[0x2]},'content':c['replace'](d,'')};}export function classifyRelease(a,b,c){if(releaseBodyHash(b)!==a['hash'])return'user_modified';return a['version']<c?'outdated':'current';}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { TopoNode, Viewport } from "../graph/onchain/index.js";
|
|
2
|
+
export declare const REPOSITORY_WRITE_SEMANTICS_NODE_ANALYZER_ID = "RP2";
|
|
3
|
+
export type RepositoryWriteRuleId = "R-REP-W-01" | "R-REP-W-02" | "R-REP-W-03" | "R-REP-W-04" | "R-REP-W-05" | "R-REP-W-06" | "R-REP-W-07" | "R-REP-W-08";
|
|
4
|
+
export interface RepositoryWriteRisk {
|
|
5
|
+
id: RepositoryWriteRuleId;
|
|
6
|
+
level: "info" | "low" | "medium" | "high" | "critical";
|
|
7
|
+
title: string;
|
|
8
|
+
description: string;
|
|
9
|
+
mitigation?: string;
|
|
10
|
+
evidence?: string;
|
|
11
|
+
affected_stakeholders: Array<"owner" | "customer" | "buyer" | "system">;
|
|
12
|
+
confidence: "exact" | "bounded";
|
|
13
|
+
}
|
|
14
|
+
export type TopologyResolution = {
|
|
15
|
+
status: "fetched";
|
|
16
|
+
} | {
|
|
17
|
+
status: "masked";
|
|
18
|
+
} | {
|
|
19
|
+
status: "unfetched";
|
|
20
|
+
state: string;
|
|
21
|
+
} | {
|
|
22
|
+
status: "absent";
|
|
23
|
+
depthCapped: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare function resolveInViewport(addr: string, v: Viewport): TopologyResolution;
|
|
26
|
+
export declare function repositoryWritePayloadOf(node: TopoNode): Record<string, unknown> | undefined;
|
|
27
|
+
export declare function analyzeRepositoryWriteSemantics(data: Record<string, unknown>, _node: TopoNode, v: Viewport): RepositoryWriteRisk[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const REPOSITORY_WRITE_SEMANTICS_NODE_ANALYZER_ID='RP2';function asRecord(a){return a!=null&&typeof a==='object'&&!Array['isArray'](a)?a:undefined;}function idFromOf(a){if(typeof a==='number')return a;if(typeof a==='string'){const b=a['toLowerCase']();if(b==='none')return 0x0;if(b==='clock')return 0x1;if(b==='signer')return 0x2;const c=Number(a);return Number['isNaN'](c)?undefined:c;}return undefined;}function addrOf(a){return typeof a==='string'&&a['length']>0x0?a['toLowerCase']():undefined;}function optAddr(a){if(a==null)return undefined;return addrOf(a);}function hasSubmission(a){if(a==null)return![];if(typeof a==='boolean')return a;return!![];}function normalizePolicies(a){const b=a['policies'];if(!Array['isArray'](b))return[];const c=[];for(const d of b){const e=asRecord(d);if(!e)continue;const f=typeof e['name']==='string'?e['name']:'(unnamed)',h=[];if(Array['isArray'](e['write_guard']))for(const j of e['write_guard']){const k=asRecord(j);if(!k)continue;h['push']({...addrOf(k['guard'])!==undefined?{'guard':addrOf(k['guard'])}:{},'idFromSubmission':k['id_from_submission']??k['idFromSubmission'],'dataFromSubmission':k['data_from_submission']??k['dataFromSubmission']});}else{if(typeof e['write_guard_count']==='number'&&e['write_guard_count']>0x0)for(let l=0x0;l<e['write_guard_count'];l++){h['push']({'idFromSubmission':e['has_id_from_submission'],'dataFromSubmission':e['has_data_from_submission']});}}c['push']({'name':f,'idFrom':idFromOf(e['id_from']??e['idFrom']),'guards':h,...optAddr(e['quote_guard']??e['quoteGuard'])!==undefined?{'quoteGuard':optAddr(e['quote_guard']??e['quoteGuard'])}:{}});}return c;}export function resolveInViewport(a,b){const c=a['toLowerCase']();if(b['maskedNodes']['has'](c))return{'status':'masked'};const d=b['graph']['nodes']['get'](c);if(d){if(d['state']==='fetched')return{'status':'fetched'};return{'status':'unfetched','state':d['state']};}return{'status':'absent','depthCapped':b['graph']['budgetExhausted']['depth']===!![]};}function depthAdvisory(a){return a['graph']['budgetExhausted']['depth']===!![]?'The\x20expansion\x20depth\x20budget\x20was\x20exhausted\x20(default\x20depth\x20is\x204);\x20request\x20a\x20deeper\x20topology\x20read\x20(a\x20larger\x20exploration\x20depth)\x20to\x20resolve\x20it.':'Request\x20a\x20deeper\x20or\x20wider\x20topology\x20read\x20(raise\x20the\x20exploration\x20depth\x20beyond\x20the\x20default\x204,\x20or\x20widen\x20the\x20expanded\x20edge\x20set)\x20to\x20resolve\x20it.';}function guardList(a){const b=a['guards']['map'](c=>c['guard'])['filter'](Boolean);return b['length']>0x0?b['join'](',\x20'):a['guards']['length']+'\x20guard(s)';}const isPlain=a=>!hasSubmission(a['idFromSubmission'])&&!hasSubmission(a['dataFromSubmission']);function classificationFindings(a){const b=[],c=a['guards']['length']>0x0;if(a['idFrom']===0x1||a['idFrom']===0x2){const d=a['idFrom']===0x1?'rows\x20are\x20clock-sequenced\x20(row\x20id\x20generated\x20from\x20the\x20clock)\x20—\x20an\x20append-only\x20ledger\x20channel':'rows\x20are\x20keyed\x20by\x20writer\x20address\x20(row\x20id\x20=\x20signer)\x20—\x20one\x20controllable\x20row\x20per\x20writer';return b['push']({'id':'R-REP-W-01','level':'info','title':'Policy\x20\x22'+a['name']+'\x22:\x20'+(a['idFrom']===0x1?'clock-append':'signer-keyed')+'\x20write\x20path','description':d+'.\x20Submission-extracted\x20row\x20ids\x20are\x20forbidden\x20here\x20by\x20construction\x20(routing\x20conflict).\x20'+(c?'Writes\x20are\x20additionally\x20gated\x20by\x20guard(s):\x20'+guardList(a)+'.':'NO\x20write\x20guard\x20is\x20configured\x20—\x20the\x20write\x20action\x20itself\x20is\x20open\x20to\x20anyone\x20(anyone\x20may\x20append'+(a['idFrom']===0x2?'\x20their\x20own\x20row':'')+').'),'mitigation':c?undefined:'Add\x20a\x20write\x20guard\x20to\x20the\x20policy\x20if\x20the\x20write\x20channel\x20must\x20be\x20permissioned.','evidence':'policy=\x22'+a['name']+'\x22\x20id_from='+a['idFrom']+'\x20write_guards='+a['guards']['length'],'affected_stakeholders':['owner','system'],'confidence':'exact'}),b;}if(a['idFrom']===0x0&&c){const e=a['guards']['filter'](f=>!isPlain(f))['length'];b['push']({'id':'R-REP-W-01','level':'info','title':'Policy\x20\x22'+a['name']+'\x22:\x20guard-gated\x20write\x20path','description':'Row\x20ids\x20are\x20caller-\x20or\x20submission-supplied;\x20every\x20write\x20must\x20unlock\x20guard(s):\x20'+guardList(a)+',\x20through\x20a\x20passport.\x20'+(e>0x0?e+'\x20guard(s)\x20extract\x20the\x20row\x20id\x20and/or\x20data\x20from\x20their\x20submission\x20values\x20(mixed\x20entry\x20—\x20ALL\x20guards\x20must\x20unlock).\x20':'')+'A\x20single-guard\x20batch\x20entry\x20also\x20exists:\x20for\x20guards\x20WITHOUT\x20submission\x20extraction,\x20unlocking\x20ANY\x20ONE\x20configured\x20guard\x20authorizes\x20the\x20write.','evidence':'policy=\x22'+a['name']+'\x22\x20id_from=0\x20write_guards='+a['guards']['length'],'affected_stakeholders':['owner','customer'],'confidence':'exact'});}return b;}function chainIllegalFindings(a){if(a['idFrom']!==0x0){const b=a['guards']['filter'](c=>hasSubmission(c['idFromSubmission']));if(b['length']===0x0)return[];return[{'id':'R-REP-W-07','level':'high','title':'Policy\x20\x22'+a['name']+'\x22:\x20submission-extracted\x20row\x20id\x20on\x20an\x20auto-id\x20policy','description':'id_from='+a['idFrom']+'\x20generates\x20row\x20ids\x20from\x20the\x20'+(a['idFrom']===0x1?'clock':'signer')+',\x20but\x20'+b['length']+'\x20guard(s)\x20declare\x20id_from_submission\x20—\x20publishing\x20aborts\x20(routing\x20conflict,\x20chain\x20error\x2023).\x20Remove\x20the\x20submission-id\x20setting\x20from\x20every\x20guard\x20of\x20this\x20policy.','evidence':'policy=\x22'+a['name']+'\x22\x20id_from='+a['idFrom']+'\x20guards_with_id_submission='+b['length'],'affected_stakeholders':['owner'],'confidence':'exact'}];}if(a['guards']['length']>0x0)return[];return[{'id':'R-REP-W-07','level':'high','title':'Policy\x20\x22'+a['name']+'\x22:\x20unguarded\x20caller-keyed\x20writes','description':'id_from=0\x20with\x20an\x20EMPTY\x20write\x20guard\x20resurrects\x20the\x20fully\x20open\x20write\x20channel\x20(anyone\x20writes\x20and\x20REMOVES\x20arbitrary\x20rows\x20under\x20this\x20policy\x20name).\x20Publishing\x20aborts\x20by\x20design\x20(chain\x20error\x2022)\x20—\x20configure\x20at\x20least\x20one\x20write\x20guard.','evidence':'policy=\x22'+a['name']+'\x22\x20id_from=0\x20write_guards=0','affected_stakeholders':['owner','customer'],'confidence':'exact'}];}function orUnlockFindings(a){if(a['guards']['length']<0x2)return[];const b=a['guards']['filter'](isPlain);if(b['length']===0x0)return[];return[{'id':'R-REP-W-08','level':'medium','title':'Policy\x20\x22'+a['name']+'\x22:\x20single-guard\x20unlock\x20path\x20lowers\x20the\x20write\x20floor','description':a['guards']['length']+'\x20guards\x20are\x20configured,\x20but\x20the\x20plain\x20batch\x20entry\x20unlocks\x20writes\x20with\x20ANY\x20ONE\x20submission-free\x20guard\x20—\x20the\x20WEAKEST\x20of\x20['+b['map'](c=>c['guard']??'(proposal\x20guard)')['join'](',\x20')+']\x20defines\x20the\x20effective\x20write\x20floor,\x20not\x20the\x20full\x20committee.\x20Tighten\x20or\x20remove\x20the\x20weakest\x20guard,\x20or\x20give\x20every\x20guard\x20submission\x20extraction\x20(which\x20forces\x20the\x20all-guards\x20mixed\x20entry).','evidence':'policy=\x22'+a['name']+'\x22\x20guards='+a['guards']['length']+'\x20plain='+b['length'],'affected_stakeholders':['owner','customer'],'confidence':'exact'}];}function resolutionFinding(a,b,c,d,e,f,g,h){if(e['status']==='fetched')return undefined;const i=e['status']==='masked'?c+'\x20'+d+'\x20is\x20present\x20in\x20the\x20graph\x20but\x20ACCESS-GATED\x20for\x20the\x20current\x20viewer\x20—\x20'+f+'\x20cannot\x20be\x20witnessed\x20without\x20access\x20to\x20it.':e['status']==='unfetched'?c+'\x20'+d+'\x20is\x20in\x20the\x20graph\x20but\x20its\x20state\x20is\x20\x22'+e['state']+'\x22\x20—\x20'+f+'\x20cannot\x20be\x20witnessed\x20from\x20an\x20unfetched\x20object.':c+'\x20'+d+'\x20is\x20OUTSIDE\x20the\x20witnessed\x20topology\x20—\x20'+f+'\x20cannot\x20be\x20assessed.\x20'+depthAdvisory(h);return{'id':a,'level':b,'title':c+'\x20unresolved\x20—\x20write-permission\x20semantics\x20incomplete','description':i,'mitigation':e['status']==='absent'?'Re-run\x20the\x20analysis\x20with\x20a\x20deeper\x20exploration,\x20or\x20resolve\x20the\x20object\x20explicitly\x20and\x20re-analyze.':e['status']==='masked'?'Widen\x20viewer\x20access\x20and\x20re-analyze.':'Retry\x20once\x20the\x20object\x20fetch\x20succeeds.','evidence':c+'='+d+'\x20resolution='+e['status'],'affected_stakeholders':g,'confidence':'bounded'};}export function repositoryWritePayloadOf(a){if(a['proposal']){const e=a['raw'],f=e?.['data']??e;return f!=null&&typeof f==='object'&&!Array['isArray'](f)?f:undefined;}const b=a['raw'],c=b?.['data']??b;return c!=null&&typeof c==='object'&&!Array['isArray'](c)?c:undefined;}export function analyzeRepositoryWriteSemantics(a,b,c){const d=[],h=normalizePolicies(a),i=optAddr(a['permission']);if(i){const k=resolutionFinding('R-REP-W-04','medium','Repository\x20permission\x20(control\x20plane,\x20perm\x20100-105)',i,resolveInViewport(i,c),'who\x20holds\x20the\x20administrative\x20surface\x20(policy\x20add/remove,\x20messenger\x20binding,\x20owner\x20fund\x20recovery\x20and\x20the\x20rest\x20of\x20the\x20control\x20indices)',['owner','system'],c);if(k)d['push'](k);}if(h['length']===0x0)return d['push']({'id':'R-REP-W-01','level':'info','title':'Repository\x20has\x20no\x20write\x20policies','description':'No\x20PolicyRule\x20is\x20configured\x20—\x20the\x20repository\x20exposes\x20NO\x20data-write\x20surface\x20at\x20all\x20(writes\x20abort\x20with\x20an\x20unknown-policy\x20error).\x20Configure\x20a\x20policy\x20to\x20open\x20an\x20evidence\x20channel.','evidence':'policies=0','affected_stakeholders':['owner'],'confidence':'exact'}),d;for(const l of h){d['push'](...classificationFindings(l)),d['push'](...chainIllegalFindings(l)),d['push'](...orUnlockFindings(l));for(const m of l['guards']){if(!m['guard'])continue;const n=resolutionFinding('R-REP-W-02','medium','Write\x20guard\x20of\x20policy\x20\x22'+l['name']+'\x22',m['guard'],resolveInViewport(m['guard'],c),'what\x20the\x20guard\x20demands\x20before\x20a\x20row\x20lands\x20under\x20\x22'+l['name']+'\x22',['owner','customer'],c);if(n)d['push'](n);if(resolveInViewport(m['guard'],c)['status']==='fetched'){const o=c['graph']['out']['get'](m['guard'])??[];for(const p of o){if(p['schema']!=='guard.relies')continue;const q=resolutionFinding('R-REP-W-03','medium','Sub-guard\x20relied\x20on\x20by\x20the\x20write\x20guard\x20of\x20policy\x20\x22'+l['name']+'\x22',p['to'],resolveInViewport(p['to'],c),'the\x20sub-condition\x20that\x20participates\x20in\x20the\x20write\x20decision',['owner','customer'],c);if(q)d['push'](q);}}}if(l['quoteGuard']){const r=resolveInViewport(l['quoteGuard'],c),s=resolutionFinding('R-REP-W-05','medium','Quote\x20(read)\x20guard\x20of\x20policy\x20\x22'+l['name']+'\x22',l['quoteGuard'],r,'who\x20may\x20read\x20rows\x20under\x20this\x20policy\x20(subscription\x20gate)',['owner','customer','buyer'],c);if(s)d['push'](s);if(r['status']==='fetched'){const t=(c['graph']['out']['get'](l['quoteGuard'])??[])['filter'](u=>u['schema']==='guard.relies');t['length']>0x0&&d['push']({'id':'R-REP-W-05','level':'high','title':'Quote\x20guard\x20of\x20policy\x20\x22'+l['name']+'\x22\x20still\x20relies\x20on\x20sub-guards','description':'The\x20read\x20gate\x20must\x20be\x20a\x20DEPENDED\x20guard\x20(immutable,\x20no\x20relies)\x20—\x20this\x20one\x20carries\x20'+t['length']+'\x20reliance\x20edge(s),\x20so\x20the\x20configuration\x20cannot\x20exist\x20on-chain\x20and\x20the\x20payload\x20has\x20drifted\x20from\x20chain\x20truth.','evidence':'quote_guard='+l['quoteGuard']+'\x20relies='+t['length'],'affected_stakeholders':['owner','customer'],'confidence':'bounded'});}}}const j=optAddr(a['um']);if(j){const u=resolutionFinding('R-REP-W-06','low','Repository\x20membership\x20book\x20(um)',j,resolveInViewport(j,c),'which\x20members\x20may\x20read\x20or\x20write\x20under\x20member-scoped\x20policies',['owner','customer'],c);if(u)d['push'](u);}return d;}
|
|
@@ -8,6 +8,10 @@ export declare const permissionRuleNodeAnalyzer: NodeAnalyzer;
|
|
|
8
8
|
export declare const ALLOCATION_RULE_NODE_ANALYZER_ID = "AL1";
|
|
9
9
|
export declare function allocationPackRisks(puzzle: unknown): unknown[];
|
|
10
10
|
export declare const allocationRuleNodeAnalyzer: NodeAnalyzer;
|
|
11
|
+
export declare const SERVICE_ALLOCATION_SEMANTICS_ANALYZER_ID = "SA1";
|
|
12
|
+
export declare const ALLOCATION_SEMANTICS_ANALYZER_ID = "SA2";
|
|
13
|
+
export declare const serviceAllocationSemanticsNodeAnalyzer: NodeAnalyzer;
|
|
14
|
+
export declare const allocationSemanticsNodeAnalyzer: NodeAnalyzer;
|
|
11
15
|
export declare const TREASURY_RULE_NODE_ANALYZER_ID = "TR1";
|
|
12
16
|
export declare const treasuryRuleNodeAnalyzer: NodeAnalyzer;
|
|
13
17
|
export declare const ARBITRATION_RULE_NODE_ANALYZER_ID = "AR1";
|
|
@@ -24,6 +28,8 @@ export declare const CONTACT_RULE_NODE_ANALYZER_ID = "CT1";
|
|
|
24
28
|
export declare const contactRuleNodeAnalyzer: NodeAnalyzer;
|
|
25
29
|
export declare const REPOSITORY_RULE_NODE_ANALYZER_ID = "RP1";
|
|
26
30
|
export declare const repositoryRuleNodeAnalyzer: NodeAnalyzer;
|
|
31
|
+
export declare const REPOSITORY_WRITE_SEMANTICS_NODE_ANALYZER_ID = "RP2";
|
|
32
|
+
export declare const repositoryWriteSemanticsNodeAnalyzer: NodeAnalyzer;
|
|
27
33
|
export declare const DEMAND_RULE_NODE_ANALYZER_ID = "DM1";
|
|
28
34
|
export declare const demandRuleNodeAnalyzer: NodeAnalyzer;
|
|
29
35
|
export declare const PAYMENT_RULE_NODE_ANALYZER_ID = "PY1";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{adaptNodeAnalyzer}from'../graph/onchain/index.js';import{assessMachineRisks}from'./machine-risk.js';import{runGuardRulePack}from'./guard-risk.js';import{assessPermissionRisks}from'./permission-risk.js';import{assessAllocationRisks}from'./allocation-risk.js';import{assessTreasuryRisks}from'./treasury-risk.js';import{assessArbitrationRisks}from'./arbitration-risk.js';import{checkArbRisks}from'./arb-risk.js';import{assessRewardRisks}from'./reward-risk.js';import{assessProgressRisks}from'./progress-risk.js';import{assessOrderRisks}from'./order-risk.js';import{checkContactRisks}from'./contact-risk.js';import{checkRepositoryRisks}from'./repository-risk.js';import{checkDemandRisks}from'./demand-risk.js';import{checkPaymentRisks}from'./payment-risk.js';import{checkProofRisks}from'./proof-risk.js';import{checkResourceRisks}from'./resource-risk.js';import{checkPersonalRisks}from'./personal-risk.js';import{checkUtilRisks}from'./util-risk.js';import{checkRegistrarRisks}from'./registrar-risk.js';import{checkBridgeRisks}from'./bridge-risk.js';import{puzzlePayloadOf,recipientAuditRisks,riskToOutcome,safeRunPack}from'./rule-outcome.js';import{projectAllocationPuzzle,PUZZLE_PROJECTIONS}from'./puzzle-projections.js';import{serviceRiskNodeAnalyzer}from'./service-risk-node.js';import{serviceAllocatorAuditNodeAnalyzer}from'./service-allocator-audit-node.js';import{industryRuleNodeAnalyzer}from'./industry-rule-node.js';function packInspect(a,b,c){return(e,f)=>{const g=puzzlePayloadOf(e);if(g){const j=c?.['projectPuzzle']?c['projectPuzzle'](g):g;return safeRunPack(()=>a(j),j)['map'](k=>riskToOutcome(k,'derived',c?.['carryNative']??![]));}const h=e['raw'],i=h?.['data']??h;if(!i||!b)return[];return b(i,e,f)['map'](k=>riskToOutcome(k,'exact'));};}export const MACHINE_RULE_NODE_ANALYZER_ID='MK1';export const machineRuleNodeAnalyzer=adaptNodeAnalyzer({'id':MACHINE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Machine','inspect':packInspect(a=>safeRunPack(b=>assessMachineRisks(b,{}),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['machine']})});export const GUARD_RULE_NODE_ANALYZER_ID='GD1';export const guardRuleNodeAnalyzer=adaptNodeAnalyzer({'id':GUARD_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Guard','inspect':packInspect(a=>safeRunPack(b=>runGuardRulePack(b),a),undefined,{'carryNative':!![],'projectPuzzle':PUZZLE_PROJECTIONS['guard']})});export const PERMISSION_RULE_NODE_ANALYZER_ID='PM1';export const permissionRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PERMISSION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Permission','inspect':packInspect(a=>safeRunPack(b=>assessPermissionRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['permission']})});export const ALLOCATION_RULE_NODE_ANALYZER_ID='AL1';export function allocationPackRisks(a){const b=projectAllocationPuzzle(a);return[...safeRunPack(d=>assessAllocationRisks(d),b),...recipientAuditRisks(b)];}export const allocationRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ALLOCATION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Allocation','inspect':packInspect(allocationPackRisks)});export const TREASURY_RULE_NODE_ANALYZER_ID='TR1';export const treasuryRuleNodeAnalyzer=adaptNodeAnalyzer({'id':TREASURY_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Treasury','inspect':packInspect(a=>safeRunPack(b=>assessTreasuryRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['treasury']})});export const ARBITRATION_RULE_NODE_ANALYZER_ID='AR1';export const arbitrationRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ARBITRATION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Arb','inspect':packInspect(a=>safeRunPack(b=>assessArbitrationRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['arbitration']})});export const ARB_L3_RULE_NODE_ANALYZER_ID='AR3';export const arbL3RuleNodeAnalyzer=adaptNodeAnalyzer({'id':ARB_L3_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Arb','inspect':packInspect(a=>safeRunPack(b=>checkArbRisks(b),a))});export const REWARD_RULE_NODE_ANALYZER_ID='RW1';export const rewardRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REWARD_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Reward','inspect':packInspect(a=>safeRunPack(b=>assessRewardRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['reward']})});export const PROGRESS_RULE_NODE_ANALYZER_ID='PR1';export const progressRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PROGRESS_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Progress','inspect':packInspect(a=>safeRunPack(b=>assessProgressRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['progress']})});export const ORDER_RULE_NODE_ANALYZER_ID='OR1';export const orderRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ORDER_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Order','inspect':packInspect(a=>safeRunPack(b=>assessOrderRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['order']})});export const CONTACT_RULE_NODE_ANALYZER_ID='CT1';export const contactRuleNodeAnalyzer=adaptNodeAnalyzer({'id':CONTACT_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Contact','inspect':packInspect(a=>safeRunPack(b=>checkContactRisks(b),a))});export const REPOSITORY_RULE_NODE_ANALYZER_ID='RP1';export const repositoryRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REPOSITORY_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Repository','inspect':packInspect(a=>safeRunPack(b=>checkRepositoryRisks(b),a))});export const DEMAND_RULE_NODE_ANALYZER_ID='DM1';export const demandRuleNodeAnalyzer=adaptNodeAnalyzer({'id':DEMAND_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Demand','inspect':packInspect(a=>safeRunPack(b=>checkDemandRisks(b),a))});export const PAYMENT_RULE_NODE_ANALYZER_ID='PY1';export const paymentRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PAYMENT_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Payment','inspect':packInspect(a=>safeRunPack(b=>checkPaymentRisks(b),a))});export const PROOF_RULE_NODE_ANALYZER_ID='PF1';export const proofRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PROOF_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Proof','inspect':packInspect(a=>safeRunPack(b=>checkProofRisks(b),a))});export const RESOURCE_RULE_NODE_ANALYZER_ID='RS1';export const resourceRuleNodeAnalyzer=adaptNodeAnalyzer({'id':RESOURCE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Resource','inspect':packInspect(a=>safeRunPack(b=>checkResourceRisks(b),a))});export const PERSONAL_RULE_NODE_ANALYZER_ID='PS1';export const personalRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PERSONAL_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Personal','inspect':packInspect(a=>safeRunPack(b=>checkPersonalRisks(b),a))});export const UTIL_RULE_NODE_ANALYZER_ID='UT1';export const utilRuleNodeAnalyzer=adaptNodeAnalyzer({'id':UTIL_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Util','inspect':packInspect(a=>safeRunPack(b=>checkUtilRisks(b),a))});export const REGISTRAR_RULE_NODE_ANALYZER_ID='RG1';export const registrarRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REGISTRAR_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'EntityRegistrar','inspect':packInspect(a=>safeRunPack(b=>checkRegistrarRisks(b),a))});export const BRIDGE_RULE_NODE_ANALYZER_ID='BR1';export const bridgeRuleNodeAnalyzer=adaptNodeAnalyzer({'id':BRIDGE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Bridge','inspect':packInspect(a=>safeRunPack(b=>checkBridgeRisks(b),a))});export const RULE_NODE_ANALYZERS=[serviceRiskNodeAnalyzer,serviceAllocatorAuditNodeAnalyzer,industryRuleNodeAnalyzer,machineRuleNodeAnalyzer,guardRuleNodeAnalyzer,permissionRuleNodeAnalyzer,allocationRuleNodeAnalyzer,treasuryRuleNodeAnalyzer,arbitrationRuleNodeAnalyzer,arbL3RuleNodeAnalyzer,rewardRuleNodeAnalyzer,progressRuleNodeAnalyzer,orderRuleNodeAnalyzer,contactRuleNodeAnalyzer,repositoryRuleNodeAnalyzer,demandRuleNodeAnalyzer,paymentRuleNodeAnalyzer,proofRuleNodeAnalyzer,resourceRuleNodeAnalyzer,personalRuleNodeAnalyzer,utilRuleNodeAnalyzer,registrarRuleNodeAnalyzer,bridgeRuleNodeAnalyzer];
|
|
1
|
+
import{adaptNodeAnalyzer}from'../graph/onchain/index.js';import{assessMachineRisks}from'./machine-risk.js';import{runGuardRulePack}from'./guard-risk.js';import{assessPermissionRisks}from'./permission-risk.js';import{assessAllocationRisks}from'./allocation-risk.js';import{assessTreasuryRisks}from'./treasury-risk.js';import{assessArbitrationRisks}from'./arbitration-risk.js';import{checkArbRisks}from'./arb-risk.js';import{assessRewardRisks}from'./reward-risk.js';import{assessProgressRisks}from'./progress-risk.js';import{assessOrderRisks}from'./order-risk.js';import{checkContactRisks}from'./contact-risk.js';import{checkRepositoryRisks}from'./repository-risk.js';import{analyzeRepositoryWriteSemantics,repositoryWritePayloadOf}from'./repository-write-semantics.js';import{analyzeAllocationInstanceSemantics,analyzeServiceAllocationSemantics}from'./service-allocation-semantics.js';import{checkDemandRisks}from'./demand-risk.js';import{checkPaymentRisks}from'./payment-risk.js';import{checkProofRisks}from'./proof-risk.js';import{checkResourceRisks}from'./resource-risk.js';import{checkPersonalRisks}from'./personal-risk.js';import{checkUtilRisks}from'./util-risk.js';import{checkRegistrarRisks}from'./registrar-risk.js';import{checkBridgeRisks}from'./bridge-risk.js';import{puzzlePayloadOf,recipientAuditRisks,riskToOutcome,safeRunPack}from'./rule-outcome.js';import{projectAllocationPuzzle,PUZZLE_PROJECTIONS}from'./puzzle-projections.js';import{serviceRiskNodeAnalyzer}from'./service-risk-node.js';import{serviceAllocatorAuditNodeAnalyzer}from'./service-allocator-audit-node.js';import{industryRuleNodeAnalyzer}from'./industry-rule-node.js';function packInspect(a,b,c){return(e,f)=>{const g=puzzlePayloadOf(e);if(g){const j=c?.['projectPuzzle']?c['projectPuzzle'](g):g;return safeRunPack(()=>a(j),j)['map'](k=>riskToOutcome(k,'derived',c?.['carryNative']??![]));}const h=e['raw'],i=h?.['data']??h;if(!i||!b)return[];return b(i,e,f)['map'](k=>riskToOutcome(k,'exact'));};}export const MACHINE_RULE_NODE_ANALYZER_ID='MK1';export const machineRuleNodeAnalyzer=adaptNodeAnalyzer({'id':MACHINE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Machine','inspect':packInspect(a=>safeRunPack(b=>assessMachineRisks(b,{}),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['machine']})});export const GUARD_RULE_NODE_ANALYZER_ID='GD1';export const guardRuleNodeAnalyzer=adaptNodeAnalyzer({'id':GUARD_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Guard','inspect':packInspect(a=>safeRunPack(b=>runGuardRulePack(b),a),undefined,{'carryNative':!![],'projectPuzzle':PUZZLE_PROJECTIONS['guard']})});export const PERMISSION_RULE_NODE_ANALYZER_ID='PM1';export const permissionRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PERMISSION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Permission','inspect':packInspect(a=>safeRunPack(b=>assessPermissionRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['permission']})});export const ALLOCATION_RULE_NODE_ANALYZER_ID='AL1';export function allocationPackRisks(a){const b=projectAllocationPuzzle(a);return[...safeRunPack(d=>assessAllocationRisks(d),b),...recipientAuditRisks(b)];}export const allocationRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ALLOCATION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Allocation','inspect':packInspect(allocationPackRisks)});export const SERVICE_ALLOCATION_SEMANTICS_ANALYZER_ID='SA1';export const ALLOCATION_SEMANTICS_ANALYZER_ID='SA2';export const serviceAllocationSemanticsNodeAnalyzer=adaptNodeAnalyzer({'id':SERVICE_ALLOCATION_SEMANTICS_ANALYZER_ID,'kind':'risk','objectType':'Service','inspect':(a,b)=>{const c=a['raw'],e=c?.['data']??c;if(!e||a['proposal'])return[];return analyzeServiceAllocationSemantics(e,a,b)['map'](f=>riskToOutcome(f,f['confidence']));}});export const allocationSemanticsNodeAnalyzer=adaptNodeAnalyzer({'id':ALLOCATION_SEMANTICS_ANALYZER_ID,'kind':'risk','objectType':'Allocation','inspect':(a,b)=>{const c=a['raw'],e=c?.['data']??c;if(!e||a['proposal'])return[];return analyzeAllocationInstanceSemantics(e,a,b)['map'](f=>riskToOutcome(f,f['confidence']));}});export const TREASURY_RULE_NODE_ANALYZER_ID='TR1';export const treasuryRuleNodeAnalyzer=adaptNodeAnalyzer({'id':TREASURY_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Treasury','inspect':packInspect(a=>safeRunPack(b=>assessTreasuryRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['treasury']})});export const ARBITRATION_RULE_NODE_ANALYZER_ID='AR1';export const arbitrationRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ARBITRATION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Arb','inspect':packInspect(a=>safeRunPack(b=>assessArbitrationRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['arbitration']})});export const ARB_L3_RULE_NODE_ANALYZER_ID='AR3';export const arbL3RuleNodeAnalyzer=adaptNodeAnalyzer({'id':ARB_L3_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Arb','inspect':packInspect(a=>safeRunPack(b=>checkArbRisks(b),a))});export const REWARD_RULE_NODE_ANALYZER_ID='RW1';export const rewardRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REWARD_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Reward','inspect':packInspect(a=>safeRunPack(b=>assessRewardRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['reward']})});export const PROGRESS_RULE_NODE_ANALYZER_ID='PR1';export const progressRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PROGRESS_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Progress','inspect':packInspect(a=>safeRunPack(b=>assessProgressRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['progress']})});export const ORDER_RULE_NODE_ANALYZER_ID='OR1';export const orderRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ORDER_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Order','inspect':packInspect(a=>safeRunPack(b=>assessOrderRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['order']})});export const CONTACT_RULE_NODE_ANALYZER_ID='CT1';export const contactRuleNodeAnalyzer=adaptNodeAnalyzer({'id':CONTACT_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Contact','inspect':packInspect(a=>safeRunPack(b=>checkContactRisks(b),a))});export const REPOSITORY_RULE_NODE_ANALYZER_ID='RP1';export const repositoryRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REPOSITORY_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Repository','inspect':packInspect(a=>safeRunPack(b=>checkRepositoryRisks(b),a))});export const REPOSITORY_WRITE_SEMANTICS_NODE_ANALYZER_ID='RP2';export const repositoryWriteSemanticsNodeAnalyzer=adaptNodeAnalyzer({'id':REPOSITORY_WRITE_SEMANTICS_NODE_ANALYZER_ID,'kind':'risk','objectType':'Repository','inspect':(a,b)=>{const c=repositoryWritePayloadOf(a);if(!c)return[];return analyzeRepositoryWriteSemantics(c,a,b)['map'](d=>riskToOutcome(d,d['confidence']));}});export const DEMAND_RULE_NODE_ANALYZER_ID='DM1';export const demandRuleNodeAnalyzer=adaptNodeAnalyzer({'id':DEMAND_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Demand','inspect':packInspect(a=>safeRunPack(b=>checkDemandRisks(b),a))});export const PAYMENT_RULE_NODE_ANALYZER_ID='PY1';export const paymentRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PAYMENT_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Payment','inspect':packInspect(a=>safeRunPack(b=>checkPaymentRisks(b),a))});export const PROOF_RULE_NODE_ANALYZER_ID='PF1';export const proofRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PROOF_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Proof','inspect':packInspect(a=>safeRunPack(b=>checkProofRisks(b),a))});export const RESOURCE_RULE_NODE_ANALYZER_ID='RS1';export const resourceRuleNodeAnalyzer=adaptNodeAnalyzer({'id':RESOURCE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Resource','inspect':packInspect(a=>safeRunPack(b=>checkResourceRisks(b),a))});export const PERSONAL_RULE_NODE_ANALYZER_ID='PS1';export const personalRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PERSONAL_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Personal','inspect':packInspect(a=>safeRunPack(b=>checkPersonalRisks(b),a))});export const UTIL_RULE_NODE_ANALYZER_ID='UT1';export const utilRuleNodeAnalyzer=adaptNodeAnalyzer({'id':UTIL_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Util','inspect':packInspect(a=>safeRunPack(b=>checkUtilRisks(b),a))});export const REGISTRAR_RULE_NODE_ANALYZER_ID='RG1';export const registrarRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REGISTRAR_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'EntityRegistrar','inspect':packInspect(a=>safeRunPack(b=>checkRegistrarRisks(b),a))});export const BRIDGE_RULE_NODE_ANALYZER_ID='BR1';export const bridgeRuleNodeAnalyzer=adaptNodeAnalyzer({'id':BRIDGE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Bridge','inspect':packInspect(a=>safeRunPack(b=>checkBridgeRisks(b),a))});export const RULE_NODE_ANALYZERS=[serviceRiskNodeAnalyzer,serviceAllocatorAuditNodeAnalyzer,industryRuleNodeAnalyzer,machineRuleNodeAnalyzer,guardRuleNodeAnalyzer,permissionRuleNodeAnalyzer,allocationRuleNodeAnalyzer,serviceAllocationSemanticsNodeAnalyzer,allocationSemanticsNodeAnalyzer,treasuryRuleNodeAnalyzer,arbitrationRuleNodeAnalyzer,arbL3RuleNodeAnalyzer,rewardRuleNodeAnalyzer,progressRuleNodeAnalyzer,orderRuleNodeAnalyzer,contactRuleNodeAnalyzer,repositoryRuleNodeAnalyzer,repositoryWriteSemanticsNodeAnalyzer,demandRuleNodeAnalyzer,paymentRuleNodeAnalyzer,proofRuleNodeAnalyzer,resourceRuleNodeAnalyzer,personalRuleNodeAnalyzer,utilRuleNodeAnalyzer,registrarRuleNodeAnalyzer,bridgeRuleNodeAnalyzer];
|
|
@@ -30,12 +30,16 @@ export declare const DEFAULT_VALUE_WARNINGS: {
|
|
|
30
30
|
};
|
|
31
31
|
export declare const DEFAULT_AMOUNT_THRESHOLD: bigint;
|
|
32
32
|
export declare function getAmountThreshold(): bigint;
|
|
33
|
+
export declare const DEFAULT_FUND_COVERAGE_MIN = 1;
|
|
34
|
+
export declare function getFundCoverageMin(): number;
|
|
33
35
|
export declare function formatAmount(value: string | bigint): string;
|
|
34
36
|
export declare function collectDefaultWarnings(env: any, data: any): string[];
|
|
35
37
|
export declare const BRIDGE_FUND_OPERATION_TYPES: readonly string[];
|
|
36
38
|
export declare const CONFIRMATION_RULES: ConfirmationRule[];
|
|
37
39
|
export declare function resolveOverrideId(rule_id: string, operation_type: string): string | undefined;
|
|
38
|
-
export declare function extractAmount(data: any
|
|
40
|
+
export declare function extractAmount(data: any, opts?: {
|
|
41
|
+
excludeConfigAmounts?: boolean;
|
|
42
|
+
}): string | null;
|
|
39
43
|
export type ReuseRecommendation = "always_reuse" | "strongly_recommended" | "recommended" | "optional";
|
|
40
44
|
export interface ObjectReuseRule {
|
|
41
45
|
rule_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{formatMist,GasTokenType,MAINNET_BRIDGE_CONFIG,formatUnits,isFundApprovalExempt}from'@wowok/wowok';export const DEFAULT_VALUE_WARNINGS={'defaultAccount':'Using\x20default\x20account\x20(env.account=\x22\x22)','mainnet':'Operating\x20on\x20mainnet\x20—\x20irreversible','replaceExistName':'replaceExistName=true\x20will\x20unbind\x20the\x20existing\x20name\x20(breaking\x20refs):\x20the\x20previously\x20named\x20object\x20stays\x20on-chain\x20but\x20becomes\x20unreachable\x20by\x20name\x20—\x20any\x20funds\x20it\x20holds\x20(e.g.\x20an\x20old\x20Order\x27s\x20Allocation)\x20are\x20orphaned.\x20Re-running\x20a\x20build\x20with\x20the\x20same\x20name\x20creates\x20a\x20SECOND\x20object,\x20not\x20a\x20replacement','defaultToken':'Using\x20default\x20token\x200x2::wow::WOW'};export const DEFAULT_AMOUNT_THRESHOLD=BigInt(0x174876e800);export function getAmountThreshold(){const a=process['env']['WOWOK_AMOUNT_THRESHOLD'];if(!a)return DEFAULT_AMOUNT_THRESHOLD;try{return BigInt(a);}catch{return DEFAULT_AMOUNT_THRESHOLD;}}export function formatAmount(a){return formatMist(a);}function bestEffortTokenType(a){return a?.['object']?.['type_parameter']??a?.['type_parameter'];}function describeAmount(a,b){if(!b||b===GasTokenType)try{return formatMist(a);}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+GasTokenType;}return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}function containsReplaceExistName(a,b,c){if(a===null||typeof a!=='object'||b>0x8)return![];const d=a;if(c['has'](d))return![];c['add'](d);if(d['replaceExistName']===!![])return!![];for(const e of Object['values'](d)){if(containsReplaceExistName(e,b+0x1,c))return!![];}return![];}export function collectDefaultWarnings(a,b){const c=[],d=a?.['account'];(d===undefined||d==='')&&c['push'](DEFAULT_VALUE_WARNINGS['defaultAccount']);const e=a?.['network'];e&&/mainnet/i['test'](String(e))&&c['push'](DEFAULT_VALUE_WARNINGS['mainnet']);const f=b?.['namedNew']??b?.['object'];return f&&typeof f==='object'&&f['replaceExistName']===!![]&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),b&&typeof b==='object'&&containsReplaceExistName(b,0x0,new Set())&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),[...new Set(c)];}export const BRIDGE_FUND_OPERATION_TYPES=['cross_chain_wow_to_evm','cross_chain_evm_to_wow','claim_wow_to_evm','resume_transfer','withdraw'];function describeBridgeAmount(a,b,c){if(b==='WOW'||!b&&c==='wow_to_evm')return formatMist(a);const d=MAINNET_BRIDGE_CONFIG?.['tokens']?.['find'](f=>f['symbol']?.['toUpperCase']()===b?.['toUpperCase']()),e=d?c==='wow_to_evm'?d['wowDecimals']:d['evmDecimals']:undefined;if(e===undefined)return a+'\x20raw\x20smallest\x20units\x20of\x20'+(b??'the\x20bridge\x20token');try{return formatUnits(BigInt(a),e)+'\x20'+b;}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}}export const CONFIRMATION_RULES=[{'id':'bridge_fund_movement','when':(a,b,c)=>BRIDGE_FUND_OPERATION_TYPES['includes'](a),'level':'irreversible','preview':(a,b,c)=>{const d=typeof b?.['amount']==='string'?b['amount']:undefined,e=typeof b?.['token']==='string'?b['token']:undefined,f=b?.['withdrawTo']??b?.['recipientWowAddress']??b?.['to']??(a==='claim_wow_to_evm'||a==='resume_transfer'?b?.['transferId']:undefined),g=a==='cross_chain_wow_to_evm'?'wow_to_evm':'evm_side';return{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','amount':d!==undefined?{'value':d,'token':e??(g==='wow_to_evm'?GasTokenType:'ETH'),'human_readable':describeBridgeAmount(d,e,g),'recipient':f}:undefined,'warnings':[...collectDefaultWarnings(c,b),a==='withdraw'?'EVM\x20withdrawal\x20from\x20activeEvmAccount\x20—\x20funds\x20move\x20to\x20an\x20external\x20EVM\x20address;\x20irreversible.':'Cross-chain\x20bridge\x20transfer\x20—\x20funds\x20leave\x20the\x20source\x20chain;\x20recovery\x20(if\x20any)\x20requires\x20the\x20opposite-side\x20claim\x20or\x20resume_transfer,\x20never\x20a\x20rollback.']};},'bypass_on_explicit_intent':[]},{'id':'irreversible_fund_or_verdict','when':(a,b,c)=>{const d=c?.['network'],e=bestEffortTokenType(b)??GasTokenType;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['map'](g=>g?.['amount']?.['balance'])['filter'](g=>typeof g==='string'||typeof g==='number');if(f['length']===b['revenue']['length']&&f['every'](g=>isFundApprovalExempt(d,e,String(g))))return![];return!![];}if(a==='treasury'&&b?.['withdraw']){const g=extractAmount(b);if(g!==null&&isFundApprovalExempt(d,e,g))return![];return!![];}if(a==='payment')return!![];if(a==='arbitration'&&b?.['arbitration']!==undefined)return!![];if(b?.['receive']!==undefined||b?.['owner_receive']!==undefined||b?.['received_coins']!==undefined||b?.['compensation_fund_receive']!==undefined)return!![];if(b?.['alloc_by_guard']!==undefined)return!![];if(a==='reward'&&b?.['claim']!==undefined)return!![];if(a==='service'&&b?.['compensation_fund_withdraw']!==undefined)return!![];if(a==='order'&&b?.['arb_claim_compensation']!==undefined)return!![];if(a==='arbitration'&&(b?.['arb_withdraw']!==undefined||b?.['fees_transfer']!==undefined))return!![];if(a==='treasury'){if(b?.['withdraw'])return!![];return![];}return![];},'level':'irreversible','preview':(a,b,c)=>{let d;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['find'](g=>typeof g?.['amount']?.['balance']==='string'||typeof g?.['amount']?.['balance']==='number');if(f){const g=String(f['amount']['balance']);d={'value':g,'human_readable':describeAmount(g,bestEffortTokenType(b))};}else d={'value':'','human_readable':'entire\x20Coin\x20object(s)\x20(amount\x20resolved\x20by\x20the\x20fund\x20layer)'};}const e=[];return a==='reward'&&b?.['claim']!==undefined&&e['push']('Reward\x20claim\x20—\x20Guard-verified\x20payout\x20splits\x20the\x20pool\x20balance\x20and\x20transfers\x20coins\x20to\x20the\x20claimer;\x20the\x20exact\x20amount\x20is\x20determined\x20by\x20the\x20Reward\x27s\x20guard\x20config.'),a==='service'&&b?.['compensation_fund_withdraw']!==undefined&&e['push']('Compensation\x20fund\x20withdraw\x20—\x20withdraws\x20the\x20ENTIRE\x20compensation_fund\x20into\x20a\x20new\x20Payment\x20owned\x20by\x20\x27'+(b['compensation_fund_withdraw']?.['receipt']??'(recipient)')+'\x27.'),a==='order'&&b?.['arb_claim_compensation']!==undefined&&e['push']('Order\x20compensation\x20claim\x20—\x20splits\x20the\x20Service\x27s\x20compensation_fund\x20and\x20transfers\x20the\x20awarded\x20coins\x20to\x20the\x20caller;\x20irreversible.'),a==='arbitration'&&b?.['arb_withdraw']!==undefined&&e['push']('Arb\x20fee\x20withdraw\x20—\x20sweeps\x20the\x20Arb\x27s\x20fee\x20balance\x20into\x20the\x20Arbitration\x20object\x27s\x20balance.'),a==='arbitration'&&b?.['fees_transfer']!==undefined&&e['push']('Arbitration\x20fees\x20transfer\x20—\x20withdraws\x20the\x20ENTIRE\x20Arbitration\x20balance\x20into\x20a\x20new\x20Payment\x20for\x20the\x20target\x20Allocation/Treasury;\x20irreversible.'),{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),...e],'amount':a==='payment'&&d?{...d,'token':bestEffortTokenType(b)??GasTokenType,'recipient':b?.['revenue']?.[0x0]?.['recipient']}:undefined};},'bypass_on_explicit_intent':[]},{'id':'publish_immutable','when':(a,b,c)=>{if(a==='service'&&(b?.['publish']===!![]||b?.['bPublished']===!![]))return!![];if(a==='machine'&&b?.['publish']===!![])return!![];return![];},'level':'publish','preview':(a,b,c)=>({'level':'publish','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':a==='service'?['machine','order_allocators']:['nodes','pairs','forwards'],'warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['force\x20publish','publish\x20now']},{'id':'amount_sensitive','when':(a,b,c)=>{const d=extractAmount(b);if(d!==null){if(isFundApprovalExempt(c?.['network'],bestEffortTokenType(b)??GasTokenType,d))return![];return!![];}if(a==='service'&&b?.['order_new'])return!![];if(a==='treasury'&&b?.['deposit']?.['coin']?.['coin'])return!![];if(a==='reward'&&b?.['coin_add']?.['coin'])return!![];if(a==='allocation'&&b?.['coin']?.['coin'])return!![];return![];},'level':'amount','preview':(a,b,c)=>{const d=extractAmount(b),e=bestEffortTokenType(b);return{'level':'amount','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','amount':d?{'value':d,'token':e??GasTokenType,'human_readable':describeAmount(d,e)}:{'value':'','token':e??GasTokenType,'human_readable':'entire\x20Coin\x20object\x20(amount\x20resolved\x20on-chain)'},'warnings':collectDefaultWarnings(c,b)};},'bypass_on_explicit_intent':[]},{'id':'default_values','when':(a,b,c)=>{return collectDefaultWarnings(c,b)['length']>0x0;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['use\x20default\x20account','default\x20account\x20is\x20fine','use\x20the\x20default\x20account','default\x20account\x20works\x20fine']},{'id':'guard_create_immutable','when':(a,b,c)=>{if(a==='guard')return!![];return![];},'level':'irreversible','preview':(a,b,c)=>{const d=b?.['table']??[],e=b?.['root'],f=b?.['rely'],g=typeof e==='object'&&e!==null&&'type'in e?e['type']:typeof e==='object'&&e!==null&&'type'in e&&e['type']==='file'?'file':'unknown',h=['table','root'];if(f)h['push']('rely');return{'level':'irreversible','operation':a,'object':b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':h,'irreversible':!![],'warnings':[...collectDefaultWarnings(c,b),'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation','Table\x20entries:\x20'+d['length']+'\x20(max\x20256)','Root\x20node\x20type:\x20'+g+'\x20(must\x20return\x20Bool)',...f?['Rely\x20dependencies:\x20'+(f['guards']?.['length']??0x0)+'\x20(max\x204,\x20AND/OR\x20logic)']:[],'To\x20modify\x20later:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind']};},'bypass_on_explicit_intent':[]},{'id':'guard_gen_passport_test','when':(a,b,c)=>{if(a==='gen_passport')return!![];return![];},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['guard'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'gen_passport\x20will\x20consume\x20gas\x20for\x20static\x20testing']}),'bypass_on_explicit_intent':['test\x20guard','testing\x20guard','gen\x20passport','generate\x20passport']},{'id':'progress_advance','when':(a,b,c)=>{if(a!=='progress')return![];return b?.['operate']?.['op']==='next'||b?.['owner_receive']!==undefined;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'Advancing\x20the\x20progress\x20node\x20may\x20release\x20funds\x20per\x20the\x20machine\x20allocation']}),'bypass_on_explicit_intent':[]}];export function resolveOverrideId(a,b){if(a==='publish_immutable'){if(b==='service')return'service.publish';if(b==='machine')return'machine.publish';return undefined;}if(a==='progress_advance')return'node.advance';if(a==='default_values')return'confirm.default_values';if(a==='guard_gen_passport_test')return'confirm.gen_passport_test';return undefined;}export function extractAmount(a){if(!a)return null;const b=h=>{if(typeof h==='number')return String(h);if(typeof h==='string'&&h!=='')return h;return null;},d=[a?.['balance'],a?.['amount'],a?.['compensation_fund_add']?.['balance'],a?.['coin_add']?.['balance'],a?.['coin']?.['balance'],a?.['order_new']?.['buy']?.['total_pay']?.['balance'],a?.['dispute']?.['fee']?.['balance'],a?.['fee'],a?.['arbitration']?.['indemnity'],a?.['deposit']?.['coin']?.['balance'],a?.['withdraw']?.['amount']?.['fixed']],e=[];for(const h of d){const i=b(h);if(i!==null)e['push'](i);}if(Array['isArray'](a?.['revenue']))for(const j of a['revenue']){const k=b(j?.['amount']?.['balance']);if(k!==null)e['push'](k);}if(Array['isArray'](a?.['guard_add']))for(const l of a['guard_add']){if(l?.['amount']?.['type']==='Fixed'){const m=b(l['amount']['value']);if(m!==null)e['push'](m);}}for(const n of[a?.['allocators'],a?.['order_allocators']]){if(!n||typeof n!=='object')continue;const o=b(n['threshold']);if(o!==null)e['push'](o);for(const p of Array['isArray'](n['allocators'])?n['allocators']:[]){if(Array['isArray'](p?.['sharing']))for(const t of p['sharing']){if(t?.['mode']==='Amount'){const u=b(t['sharing']);if(u!==null)e['push'](u);}}const q=b(p?.['max']);if(q!==null)e['push'](q);}}const f=e['filter'](w=>{try{return BigInt(w)!==0x0n;}catch{return!![];}});if(f['length']===0x0)return null;if(f['length']===0x1)return f[0x0];try{return f['reduce']((w,x)=>w+BigInt(x),0x0n)['toString']();}catch{return f[0x0];}}export const OBJECT_REUSE_RULES=[{'rule_id':'REUSE-001','object_type':'permission','recommendation':'strongly_recommended','reason':'Centralized\x20permission\x20control\x20across\x20all\x20services','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Permission\x20to\x20reuse?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-002','object_type':'machine','recommendation':'recommended','reason':'Save\x20design\x20time\x20for\x20similar\x20processes','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Machine\x20whose\x20workflow\x20fits?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-003','object_type':'guard','recommendation':'recommended','reason':'Avoid\x20redundant\x20validation\x20rules','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Guard\x20with\x20matching\x20validation\x20logic?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-004','object_type':'contact','recommendation':'recommended','reason':'Single\x20point\x20of\x20customer-service\x20management','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Contact\x20for\x20customer\x20service?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-005','object_type':'arbitration','recommendation':'always_reuse','reason':'Customers\x20choose\x20from\x20established\x20arbiters;\x20creating\x20a\x20new\x20Arbitration\x20is\x20an\x20operator-level\x20decision','ask_user':'Which\x20existing\x20Arbitration\x20service\x20should\x20disputes\x20route\x20to?\x20Provide\x20the\x20name\x20or\x20ID.'}];export const CREATE_VS_MODIFY_PATTERN={'reuse_form':'string','create_form':'object','resolution_api':'GetObjectExisted','note':'String\x20reference\x20=\x20REUSE\x20(name\x20resolution\x20failure\x20is\x20a\x20hard\x20error);\x20object\x20shape\x20=\x20CREATE\x20(always).'};export const IMMUTABILITY_RULES=[{'rule_id':'IMMUT-001','object_type':'machine','trigger':'publish','immutable_fields':['nodes','pairs','forwards'],'message':'Machine\x20topology\x20is\x20immutable\x20after\x20publish\x20—\x20verify\x20all\x20nodes/forwards\x20via\x20machineNode2file\x20BEFORE\x20publishing'},{'rule_id':'IMMUT-002','object_type':'service','trigger':'publish','immutable_fields':['machine','order_allocators','arbitrations'],'mutable_after':['sales'],'message':'Service.machine,\x20order_allocators\x20and\x20arbitrations\x20are\x20frozen\x20after\x20publish;\x20sales\x20remains\x20fully\x20modifiable\x20(L3)\x20without\x20pause'},{'rule_id':'IMMUT-003','object_type':'guard','trigger':'create','immutable_fields':['table','root','rely'],'message':'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation.\x20To\x20change:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind'}];export const OPERATION_TYPE_CLASSIFICATION={'LOCAL_ONLY':['account_operation','local_mark_operation','local_info_operation','config_operation'],'ONCHAIN':['onchain_operations','wip_file','bridge_operation','messenger_operation'],'QUERY':['query_toolkit','onchain_table_data','onchain_events','guard2file','machineNode2file','schema_query','wowok_buildin_info'],'ENCRYPTED':['messenger_operation']};export const OPERATION_CLASS_META={'LOCAL_ONLY':{'gas':![],'confirmation_required':![],'note':'Local\x20state\x20only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ONCHAIN':{'gas':!![],'confirmation_required':!![],'note':'On-chain\x20write\x20—\x20gas\x20consumed,\x20explicit\x20user\x20confirmation\x20REQUIRED\x20before\x20execution'},'QUERY':{'gas':![],'confirmation_required':![],'note':'Read-only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ENCRYPTED':{'gas':![],'confirmation_required':![],'note':'Local\x20encryption\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'}};export function classifyTool(a){if(OPERATION_TYPE_CLASSIFICATION['ENCRYPTED']['includes'](a))return'ENCRYPTED';for(const b of['LOCAL_ONLY','ONCHAIN','QUERY']){if(OPERATION_TYPE_CLASSIFICATION[b]['includes'](a))return b;}return undefined;}export const NAMING_CONVENTIONS={'scheme':'<projectPrefix>_<type>_<purpose>_<version>','parts':{'project_prefix':{'example':'shopFunny_','purpose':'Prevents\x20cross-project\x20collisions'},'type_prefix':{'example':'machine_\x20/\x20guard_\x20/\x20service_','purpose':'Clarifies\x20object\x20type'},'purpose_suffix':{'example':'serviceWithdraw','purpose':'Describes\x20function'},'version_suffix':{'example':'_v2','purpose':'Enables\x20iteration\x20without\x20replaceExistName'}},'entry_id':{'pattern':'^<object_type>:<name>$','example':'service:myshop_service'},'replace_exist_name':{'default':![],'false_effect':'Throws\x20error\x20if\x20name\x20is\x20in\x20use\x20—\x20safe\x20default','true_effect':'Existing\x20object/account\x20with\x20the\x20same\x20name\x20is\x20suspended/unbound\x20to\x20free\x20the\x20name','account_default_forbidden':'replaceExistName:true\x20on\x20the\x20default\x20account\x20(name=\x27\x27)\x20is\x20FORBIDDEN\x20—\x20use\x20suspend()\x20explicitly','recommendation':'DISCOURAGED\x20—\x20prefer\x20versioned\x20names\x20(_v1,\x20_v2)\x20for\x20production'},'recommendations':['Always\x20provide\x20tags\x20on\x20object\x20creation\x20for\x20filtering\x20and\x20management','Use\x20names\x20as\x20primary\x20identifiers;\x20use\x20short\x20address\x20form\x20(0x1234...def)\x20only\x20for\x20display','All\x20cross-object\x20references\x20(Guard\x20tables,\x20Service\x20bindings,\x20Machine\x20forwards)\x20use\x20NAMES\x20—\x20resolved\x20per-network\x20at\x20build\x20time']};export function checkObjectReuseRules(a){const b=[];for(const c of a){if(!c['is_new'])continue;const d=OBJECT_REUSE_RULES['find'](e=>e['object_type']===c['object_type']);if(!d)continue;(d['recommendation']==='always_reuse'||d['recommendation']==='strongly_recommended')&&b['push']({'rule_id':d['rule_id'],'severity':d['recommendation']==='always_reuse'?'warn':'info','message':'Creating\x20NEW\x20'+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20—\x20reuse\x20is\x20'+d['recommendation']+':\x20'+d['reason']+'.\x20'+d['ask_user']});}return b;}export function checkImmutabilityRules(a){const b=[];for(const c of a){const d=IMMUTABILITY_RULES['find'](e=>e['object_type']===c['object_type']&&e['trigger']===c['trigger']);if(!d)continue;b['push']({'rule_id':d['rule_id'],'severity':'warn','message':''+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20'+c['trigger']+':\x20'+d['message']+'.\x20Immutable:\x20['+d['immutable_fields']['join'](',\x20')+']'+(d['mutable_after']?'.\x20Still\x20mutable:\x20['+d['mutable_after']['join'](',\x20')+']':'')});}return b;}export const SAFETY_RULES_VERSION=0x2;
|
|
1
|
+
import{formatMist,GasTokenType,MAINNET_BRIDGE_CONFIG,formatUnits,isFundApprovalExempt}from'@wowok/wowok';export const DEFAULT_VALUE_WARNINGS={'defaultAccount':'Using\x20default\x20account\x20(env.account=\x22\x22)','mainnet':'Operating\x20on\x20mainnet\x20—\x20irreversible','replaceExistName':'replaceExistName=true\x20will\x20unbind\x20the\x20existing\x20name\x20(breaking\x20refs):\x20the\x20previously\x20named\x20object\x20stays\x20on-chain\x20but\x20becomes\x20unreachable\x20by\x20name\x20—\x20any\x20funds\x20it\x20holds\x20(e.g.\x20an\x20old\x20Order\x27s\x20Allocation)\x20are\x20orphaned.\x20Re-running\x20a\x20build\x20with\x20the\x20same\x20name\x20creates\x20a\x20SECOND\x20object,\x20not\x20a\x20replacement','defaultToken':'Using\x20default\x20token\x200x2::wow::WOW'};export const DEFAULT_AMOUNT_THRESHOLD=BigInt(0x174876e800);export function getAmountThreshold(){const a=process['env']['WOWOK_AMOUNT_THRESHOLD'];if(!a)return DEFAULT_AMOUNT_THRESHOLD;try{return BigInt(a);}catch{return DEFAULT_AMOUNT_THRESHOLD;}}export const DEFAULT_FUND_COVERAGE_MIN=0x1;export function getFundCoverageMin(){const a=process['env']['WOWOK_FUND_COVERAGE_MIN'];if(a===undefined||a['trim']()==='')return DEFAULT_FUND_COVERAGE_MIN;const b=Number(a);if(!Number['isFinite'](b)||b<0x0)return DEFAULT_FUND_COVERAGE_MIN;return b;}export function formatAmount(a){return formatMist(a);}function bestEffortTokenType(a){return a?.['object']?.['type_parameter']??a?.['type_parameter'];}function describeAmount(a,b){if(!b||b===GasTokenType)try{return formatMist(a);}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+GasTokenType;}return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}function containsReplaceExistName(a,b,c){if(a===null||typeof a!=='object'||b>0x8)return![];const d=a;if(c['has'](d))return![];c['add'](d);if(d['replaceExistName']===!![])return!![];for(const e of Object['values'](d)){if(containsReplaceExistName(e,b+0x1,c))return!![];}return![];}export function collectDefaultWarnings(a,b){const c=[],d=a?.['account'];(d===undefined||d==='')&&c['push'](DEFAULT_VALUE_WARNINGS['defaultAccount']);const e=a?.['network'];e&&/mainnet/i['test'](String(e))&&c['push'](DEFAULT_VALUE_WARNINGS['mainnet']);const f=b?.['namedNew']??b?.['object'];return f&&typeof f==='object'&&f['replaceExistName']===!![]&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),b&&typeof b==='object'&&containsReplaceExistName(b,0x0,new Set())&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),[...new Set(c)];}export const BRIDGE_FUND_OPERATION_TYPES=['cross_chain_wow_to_evm','cross_chain_evm_to_wow','claim_wow_to_evm','resume_transfer','withdraw'];function describeBridgeAmount(a,b,c){if(b==='WOW'||!b&&c==='wow_to_evm')return formatMist(a);const d=MAINNET_BRIDGE_CONFIG?.['tokens']?.['find'](f=>f['symbol']?.['toUpperCase']()===b?.['toUpperCase']()),e=d?c==='wow_to_evm'?d['wowDecimals']:d['evmDecimals']:undefined;if(e===undefined)return a+'\x20raw\x20smallest\x20units\x20of\x20'+(b??'the\x20bridge\x20token');try{return formatUnits(BigInt(a),e)+'\x20'+b;}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}}export const CONFIRMATION_RULES=[{'id':'bridge_fund_movement','when':(a,b,c)=>BRIDGE_FUND_OPERATION_TYPES['includes'](a),'level':'irreversible','preview':(a,b,c)=>{const d=typeof b?.['amount']==='string'?b['amount']:undefined,e=typeof b?.['token']==='string'?b['token']:undefined,f=b?.['withdrawTo']??b?.['recipientWowAddress']??b?.['to']??(a==='claim_wow_to_evm'||a==='resume_transfer'?b?.['transferId']:undefined),g=a==='cross_chain_wow_to_evm'?'wow_to_evm':'evm_side';return{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','amount':d!==undefined?{'value':d,'token':e??(g==='wow_to_evm'?GasTokenType:'ETH'),'human_readable':describeBridgeAmount(d,e,g),'recipient':f}:undefined,'warnings':[...collectDefaultWarnings(c,b),a==='withdraw'?'EVM\x20withdrawal\x20from\x20activeEvmAccount\x20—\x20funds\x20move\x20to\x20an\x20external\x20EVM\x20address;\x20irreversible.':'Cross-chain\x20bridge\x20transfer\x20—\x20funds\x20leave\x20the\x20source\x20chain;\x20recovery\x20(if\x20any)\x20requires\x20the\x20opposite-side\x20claim\x20or\x20resume_transfer,\x20never\x20a\x20rollback.']};},'bypass_on_explicit_intent':[]},{'id':'irreversible_fund_or_verdict','when':(a,b,c)=>{const d=c?.['network'],e=bestEffortTokenType(b)??GasTokenType;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['map'](g=>g?.['amount']?.['balance'])['filter'](g=>typeof g==='string'||typeof g==='number');if(f['length']===b['revenue']['length']&&f['every'](g=>isFundApprovalExempt(d,e,String(g))))return![];return!![];}if(a==='treasury'&&b?.['withdraw']){const g=extractAmount(b);if(g!==null&&isFundApprovalExempt(d,e,g))return![];return!![];}if(a==='payment')return!![];if(a==='arbitration'&&b?.['arbitration']!==undefined)return!![];if(b?.['receive']!==undefined||b?.['owner_receive']!==undefined||b?.['received_coins']!==undefined||b?.['compensation_fund_receive']!==undefined)return!![];if(b?.['alloc_by_guard']!==undefined)return!![];if(a==='reward'&&b?.['claim']!==undefined)return!![];if(a==='service'&&b?.['compensation_fund_withdraw']!==undefined)return!![];if(a==='order'&&b?.['arb_claim_compensation']!==undefined)return!![];if(a==='arbitration'&&(b?.['arb_withdraw']!==undefined||b?.['fees_transfer']!==undefined))return!![];if(a==='treasury'){if(b?.['withdraw'])return!![];return![];}return![];},'level':'irreversible','preview':(a,b,c)=>{let d;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['find'](g=>typeof g?.['amount']?.['balance']==='string'||typeof g?.['amount']?.['balance']==='number');if(f){const g=String(f['amount']['balance']);d={'value':g,'human_readable':describeAmount(g,bestEffortTokenType(b))};}else d={'value':'','human_readable':'entire\x20Coin\x20object(s)\x20(amount\x20resolved\x20by\x20the\x20fund\x20layer)'};}const e=[];return a==='reward'&&b?.['claim']!==undefined&&e['push']('Reward\x20claim\x20—\x20Guard-verified\x20payout\x20splits\x20the\x20pool\x20balance\x20and\x20transfers\x20coins\x20to\x20the\x20claimer;\x20the\x20exact\x20amount\x20is\x20determined\x20by\x20the\x20Reward\x27s\x20guard\x20config.'),a==='service'&&b?.['compensation_fund_withdraw']!==undefined&&e['push']('Compensation\x20fund\x20withdraw\x20—\x20withdraws\x20the\x20ENTIRE\x20compensation_fund\x20into\x20a\x20new\x20Payment\x20owned\x20by\x20\x27'+(b['compensation_fund_withdraw']?.['receipt']??'(recipient)')+'\x27.'),a==='order'&&b?.['arb_claim_compensation']!==undefined&&e['push']('Order\x20compensation\x20claim\x20—\x20splits\x20the\x20Service\x27s\x20compensation_fund\x20and\x20transfers\x20the\x20awarded\x20coins\x20to\x20the\x20caller;\x20irreversible.'),a==='arbitration'&&b?.['arb_withdraw']!==undefined&&e['push']('Arb\x20fee\x20withdraw\x20—\x20sweeps\x20the\x20Arb\x27s\x20fee\x20balance\x20into\x20the\x20Arbitration\x20object\x27s\x20balance.'),a==='arbitration'&&b?.['fees_transfer']!==undefined&&e['push']('Arbitration\x20fees\x20transfer\x20—\x20withdraws\x20the\x20ENTIRE\x20Arbitration\x20balance\x20into\x20a\x20new\x20Payment\x20for\x20the\x20target\x20Allocation/Treasury;\x20irreversible.'),{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),...e],'amount':a==='payment'&&d?{...d,'token':bestEffortTokenType(b)??GasTokenType,'recipient':b?.['revenue']?.[0x0]?.['recipient']}:undefined};},'bypass_on_explicit_intent':[]},{'id':'publish_immutable','when':(a,b,c)=>{if(a==='service'&&(b?.['publish']===!![]||b?.['bPublished']===!![]))return!![];if(a==='machine'&&b?.['publish']===!![])return!![];return![];},'level':'publish','preview':(a,b,c)=>({'level':'publish','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':a==='service'?['machine','order_allocators']:['nodes','pairs','forwards'],'warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['force\x20publish','publish\x20now']},{'id':'amount_sensitive','when':(a,b,c)=>{const d=extractAmount(b);if(d!==null){if(isFundApprovalExempt(c?.['network'],bestEffortTokenType(b)??GasTokenType,d))return![];return!![];}if(a==='service'&&b?.['order_new'])return!![];if(a==='treasury'&&b?.['deposit']?.['coin']?.['coin'])return!![];if(a==='reward'&&b?.['coin_add']?.['coin'])return!![];if(a==='allocation'&&b?.['coin']?.['coin'])return!![];return![];},'level':'amount','preview':(a,b,c)=>{const d=extractAmount(b),e=bestEffortTokenType(b);return{'level':'amount','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','amount':d?{'value':d,'token':e??GasTokenType,'human_readable':describeAmount(d,e)}:{'value':'','token':e??GasTokenType,'human_readable':'entire\x20Coin\x20object\x20(amount\x20resolved\x20on-chain)'},'warnings':collectDefaultWarnings(c,b)};},'bypass_on_explicit_intent':[]},{'id':'default_values','when':(a,b,c)=>{return collectDefaultWarnings(c,b)['length']>0x0;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['use\x20default\x20account','default\x20account\x20is\x20fine','use\x20the\x20default\x20account','default\x20account\x20works\x20fine']},{'id':'guard_create_immutable','when':(a,b,c)=>{if(a==='guard')return!![];return![];},'level':'irreversible','preview':(a,b,c)=>{const d=b?.['table']??[],e=b?.['root'],f=b?.['rely'],g=typeof e==='object'&&e!==null&&'type'in e?e['type']:typeof e==='object'&&e!==null&&'type'in e&&e['type']==='file'?'file':'unknown',h=['table','root'];if(f)h['push']('rely');let i='';try{i=JSON['stringify'](e??{});}catch{i='';}const j=[],k=(Array['isArray'](d)?d:[])['filter'](l=>l&&l['b_submission']===!![]&&String(l['value_type'])['toLowerCase']()==='address');if(k['length']>0x0){const l=/order\.service|progress\.machine|arb\.service|order\.machine/i['test'](i);!l&&j['push']('PRE-LINT\x20R-C3-05:\x20submitted\x20Address\x20slot(s)\x20are\x20not\x20bound\x20to\x20this\x20project\x20in\x20the\x20root\x20(no\x20order.service/progress.machine\x20comparison)\x20—\x20a\x20cross-project\x20object\x20can\x20satisfy\x20this\x20Guard.\x20Add\x20the\x20binding\x20BEFORE\x20confirming:\x20the\x20Guard\x20is\x20immutable\x20after\x20creation'),!/signer/i['test'](i)&&j['push']('PRE-LINT\x20identity:\x20submitted\x20data\x20is\x20not\x20tied\x20to\x20the\x20transaction\x20signer\x20(no\x20context(Signer)\x20clause)\x20—\x20anyone\x20able\x20to\x20trigger\x20the\x20host\x20operation\x20can\x20submit\x20arbitrary\x20values.\x20Add\x20a\x20Signer\x20binding\x20if\x20the\x20submitter\x20must\x20be\x20authorized');}return{'level':'irreversible','operation':a,'object':b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':h,'irreversible':!![],'warnings':[...collectDefaultWarnings(c,b),'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation','Table\x20entries:\x20'+d['length']+'\x20(max\x20256)','Root\x20node\x20type:\x20'+g+'\x20(must\x20return\x20Bool)',...f?['Rely\x20dependencies:\x20'+(f['guards']?.['length']??0x0)+'\x20(max\x204,\x20AND/OR\x20logic)']:[],...j,'To\x20modify\x20later:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind']};},'bypass_on_explicit_intent':[]},{'id':'guard_gen_passport_test','when':(a,b,c)=>{if(a==='gen_passport')return!![];return![];},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['guard'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'gen_passport\x20will\x20consume\x20gas\x20for\x20static\x20testing']}),'bypass_on_explicit_intent':['test\x20guard','testing\x20guard','gen\x20passport','generate\x20passport']},{'id':'progress_advance','when':(a,b,c)=>{if(a!=='progress')return![];return b?.['operate']?.['op']==='next'||b?.['owner_receive']!==undefined;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'Advancing\x20the\x20progress\x20node\x20may\x20release\x20funds\x20per\x20the\x20machine\x20allocation']}),'bypass_on_explicit_intent':[]}];export function resolveOverrideId(a,b){if(a==='publish_immutable'){if(b==='service')return'service.publish';if(b==='machine')return'machine.publish';return undefined;}if(a==='progress_advance')return'node.advance';if(a==='default_values')return'confirm.default_values';if(a==='guard_gen_passport_test')return'confirm.gen_passport_test';return undefined;}export function extractAmount(a,b){if(!a)return null;const d=i=>{if(typeof i==='number')return String(i);if(typeof i==='string'&&i!=='')return i;return null;},e=[a?.['balance'],a?.['amount'],a?.['compensation_fund_add']?.['balance'],a?.['coin_add']?.['balance'],a?.['coin']?.['balance'],a?.['order_new']?.['buy']?.['total_pay']?.['balance'],a?.['dispute']?.['fee']?.['balance'],a?.['fee'],a?.['arbitration']?.['indemnity'],a?.['deposit']?.['coin']?.['balance'],a?.['withdraw']?.['amount']?.['fixed']],f=[];for(const i of e){const j=d(i);if(j!==null)f['push'](j);}if(Array['isArray'](a?.['revenue']))for(const k of a['revenue']){const l=d(k?.['amount']?.['balance']);if(l!==null)f['push'](l);}if(Array['isArray'](a?.['guard_add']))for(const m of a['guard_add']){if(m?.['amount']?.['type']==='Fixed'){const n=d(m['amount']['value']);if(n!==null)f['push'](n);}}if(!b?.['excludeConfigAmounts'])for(const o of[a?.['allocators'],a?.['order_allocators']]){if(!o||typeof o!=='object')continue;const p=d(o['threshold']);if(p!==null)f['push'](p);for(const q of Array['isArray'](o['allocators'])?o['allocators']:[]){if(Array['isArray'](q?.['sharing']))for(const u of q['sharing']){if(u?.['mode']==='Amount'){const w=d(u['sharing']);if(w!==null)f['push'](w);}}const t=d(q?.['max']);if(t!==null)f['push'](t);}}const h=f['filter'](x=>{try{return BigInt(x)!==0x0n;}catch{return!![];}});if(h['length']===0x0)return null;if(h['length']===0x1)return h[0x0];try{return h['reduce']((x,y)=>x+BigInt(y),0x0n)['toString']();}catch{return h[0x0];}}export const OBJECT_REUSE_RULES=[{'rule_id':'REUSE-001','object_type':'permission','recommendation':'strongly_recommended','reason':'Centralized\x20permission\x20control\x20across\x20all\x20services','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Permission\x20to\x20reuse?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-002','object_type':'machine','recommendation':'recommended','reason':'Save\x20design\x20time\x20for\x20similar\x20processes','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Machine\x20whose\x20workflow\x20fits?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-003','object_type':'guard','recommendation':'recommended','reason':'Avoid\x20redundant\x20validation\x20rules','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Guard\x20with\x20matching\x20validation\x20logic?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-004','object_type':'contact','recommendation':'recommended','reason':'Single\x20point\x20of\x20customer-service\x20management','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Contact\x20for\x20customer\x20service?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-005','object_type':'arbitration','recommendation':'always_reuse','reason':'Customers\x20choose\x20from\x20established\x20arbiters;\x20creating\x20a\x20new\x20Arbitration\x20is\x20an\x20operator-level\x20decision','ask_user':'Which\x20existing\x20Arbitration\x20service\x20should\x20disputes\x20route\x20to?\x20Provide\x20the\x20name\x20or\x20ID.'}];export const CREATE_VS_MODIFY_PATTERN={'reuse_form':'string','create_form':'object','resolution_api':'GetObjectExisted','note':'String\x20reference\x20=\x20REUSE\x20(name\x20resolution\x20failure\x20is\x20a\x20hard\x20error);\x20object\x20shape\x20=\x20CREATE\x20(always).'};export const IMMUTABILITY_RULES=[{'rule_id':'IMMUT-001','object_type':'machine','trigger':'publish','immutable_fields':['nodes','pairs','forwards'],'message':'Machine\x20topology\x20is\x20immutable\x20after\x20publish\x20—\x20verify\x20all\x20nodes/forwards\x20via\x20machineNode2file\x20BEFORE\x20publishing'},{'rule_id':'IMMUT-002','object_type':'service','trigger':'publish','immutable_fields':['machine','order_allocators'],'mutable_after':['arbitrations','rewards','sales'],'message':'Service.machine\x20and\x20order_allocators\x20are\x20PERMANENTLY\x20frozen\x20after\x20publish\x20(L1);\x20arbitrations/rewards\x20can\x20still\x20be\x20ADDED\x20but\x20remove/clear\x20is\x20time-locked\x20(L2:\x20pause\x20+\x20setting_lock_duration);\x20sales\x20remains\x20fully\x20modifiable\x20(L3)\x20without\x20pause'},{'rule_id':'IMMUT-003','object_type':'guard','trigger':'create','immutable_fields':['table','root','rely'],'message':'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation.\x20To\x20change:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind'}];export const OPERATION_TYPE_CLASSIFICATION={'LOCAL_ONLY':['account_operation','local_mark_operation','local_info_operation','config_operation'],'ONCHAIN':['onchain_operations','wip_file','bridge_operation','messenger_operation'],'QUERY':['query_toolkit','onchain_table_data','onchain_events','guard2file','machineNode2file','schema_query','wowok_buildin_info'],'ENCRYPTED':['messenger_operation']};export const OPERATION_CLASS_META={'LOCAL_ONLY':{'gas':![],'confirmation_required':![],'note':'Local\x20state\x20only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ONCHAIN':{'gas':!![],'confirmation_required':!![],'note':'On-chain\x20write\x20—\x20gas\x20consumed,\x20explicit\x20user\x20confirmation\x20REQUIRED\x20before\x20execution'},'QUERY':{'gas':![],'confirmation_required':![],'note':'Read-only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ENCRYPTED':{'gas':![],'confirmation_required':![],'note':'Local\x20encryption\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'}};export function classifyTool(a){if(OPERATION_TYPE_CLASSIFICATION['ENCRYPTED']['includes'](a))return'ENCRYPTED';for(const b of['LOCAL_ONLY','ONCHAIN','QUERY']){if(OPERATION_TYPE_CLASSIFICATION[b]['includes'](a))return b;}return undefined;}export const NAMING_CONVENTIONS={'scheme':'<projectPrefix>_<type>_<purpose>_<version>','parts':{'project_prefix':{'example':'shopFunny_','purpose':'Prevents\x20cross-project\x20collisions'},'type_prefix':{'example':'machine_\x20/\x20guard_\x20/\x20service_','purpose':'Clarifies\x20object\x20type'},'purpose_suffix':{'example':'serviceWithdraw','purpose':'Describes\x20function'},'version_suffix':{'example':'_v2','purpose':'Enables\x20iteration\x20without\x20replaceExistName'}},'entry_id':{'pattern':'^<object_type>:<name>$','example':'service:myshop_service'},'replace_exist_name':{'default':![],'false_effect':'Throws\x20error\x20if\x20name\x20is\x20in\x20use\x20—\x20safe\x20default','true_effect':'Existing\x20object/account\x20with\x20the\x20same\x20name\x20is\x20suspended/unbound\x20to\x20free\x20the\x20name','account_default_forbidden':'replaceExistName:true\x20on\x20the\x20default\x20account\x20(name=\x27\x27)\x20is\x20FORBIDDEN\x20—\x20use\x20suspend()\x20explicitly','recommendation':'DISCOURAGED\x20—\x20prefer\x20versioned\x20names\x20(_v1,\x20_v2)\x20for\x20production'},'recommendations':['Always\x20provide\x20tags\x20on\x20object\x20creation\x20for\x20filtering\x20and\x20management','Use\x20names\x20as\x20primary\x20identifiers;\x20use\x20short\x20address\x20form\x20(0x1234...def)\x20only\x20for\x20display','All\x20cross-object\x20references\x20(Guard\x20tables,\x20Service\x20bindings,\x20Machine\x20forwards)\x20use\x20NAMES\x20—\x20resolved\x20per-network\x20at\x20build\x20time']};export function checkObjectReuseRules(a){const b=[];for(const c of a){if(!c['is_new'])continue;const d=OBJECT_REUSE_RULES['find'](e=>e['object_type']===c['object_type']);if(!d)continue;(d['recommendation']==='always_reuse'||d['recommendation']==='strongly_recommended')&&b['push']({'rule_id':d['rule_id'],'severity':d['recommendation']==='always_reuse'?'warn':'info','message':'Creating\x20NEW\x20'+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20—\x20reuse\x20is\x20'+d['recommendation']+':\x20'+d['reason']+'.\x20'+d['ask_user']});}return b;}export function checkImmutabilityRules(a){const b=[];for(const c of a){const d=IMMUTABILITY_RULES['find'](e=>e['object_type']===c['object_type']&&e['trigger']===c['trigger']);if(!d)continue;b['push']({'rule_id':d['rule_id'],'severity':'warn','message':''+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20'+c['trigger']+':\x20'+d['message']+'.\x20Immutable:\x20['+d['immutable_fields']['join'](',\x20')+']'+(d['mutable_after']?'.\x20Still\x20mutable:\x20['+d['mutable_after']['join'](',\x20')+']':'')});}return b;}export const SAFETY_RULES_VERSION=0x2;
|