@wowok/agent-mcp 3.1.2 → 3.1.3

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.
Files changed (300) hide show
  1. package/dist/config/runtime.js +1 -1
  2. package/dist/customer/index.d.ts +3 -9
  3. package/dist/customer/index.js +1 -1
  4. package/dist/customer/industry-risks.d.ts +3 -17
  5. package/dist/customer/industry-risks.js +1 -1
  6. package/dist/customer/types.d.ts +1 -165
  7. package/dist/customer/types.js +1 -1
  8. package/dist/customer/user-preferences.d.ts +0 -49
  9. package/dist/customer/user-preferences.js +1 -1
  10. package/dist/evaluation/architecture.spec.d.ts +1 -0
  11. package/dist/evaluation/architecture.spec.js +1 -0
  12. package/dist/evaluation/builtins/graph-service.d.ts +16 -0
  13. package/dist/evaluation/builtins/graph-service.js +1 -0
  14. package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
  15. package/dist/evaluation/builtins/graph-service.spec.js +1 -0
  16. package/dist/evaluation/builtins/index.d.ts +1 -1
  17. package/dist/evaluation/builtins/index.js +1 -1
  18. package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
  19. package/dist/evaluation/builtins/purity.spec.js +1 -0
  20. package/dist/evaluation/engine.js +1 -1
  21. package/dist/evaluation/facets/catalog.d.ts +19 -0
  22. package/dist/evaluation/facets/catalog.js +1 -0
  23. package/dist/evaluation/guard-scan.d.ts +10 -0
  24. package/dist/evaluation/guard-scan.js +1 -0
  25. package/dist/evaluation/standards.d.ts +31 -0
  26. package/dist/evaluation/standards.js +1 -0
  27. package/dist/evaluation/standards.spec.d.ts +1 -0
  28. package/dist/evaluation/standards.spec.js +1 -0
  29. package/dist/evaluation/types.d.ts +9 -0
  30. package/dist/experience/realtime-feedback.js +1 -1
  31. package/dist/extensions/index.d.ts +1 -1
  32. package/dist/extensions/index.js +1 -1
  33. package/dist/extensions/industry-layers.d.ts +6 -5
  34. package/dist/extensions/industry-layers.js +1 -1
  35. package/dist/extensions/industry-pack.js +1 -1
  36. package/dist/graph/onchain/analyze.d.ts +13 -0
  37. package/dist/graph/onchain/analyze.js +1 -1
  38. package/dist/graph/onchain/analyze.spec.js +1 -1
  39. package/dist/graph/onchain/dataplane.d.ts +1 -1
  40. package/dist/graph/onchain/dataplane.js +1 -1
  41. package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
  42. package/dist/graph/onchain/edge-batch.spec.js +1 -0
  43. package/dist/graph/onchain/edge-schema.d.ts +10 -2
  44. package/dist/graph/onchain/edge-schema.js +1 -1
  45. package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
  46. package/dist/graph/onchain/entity-profile.spec.js +1 -0
  47. package/dist/graph/onchain/event-history.spec.d.ts +1 -0
  48. package/dist/graph/onchain/event-history.spec.js +1 -0
  49. package/dist/graph/onchain/expand.js +1 -1
  50. package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
  51. package/dist/graph/onchain/extract-deep.spec.js +1 -0
  52. package/dist/graph/onchain/extract.d.ts +11 -3
  53. package/dist/graph/onchain/extract.js +1 -1
  54. package/dist/graph/onchain/facet-projection.d.ts +99 -0
  55. package/dist/graph/onchain/facet-projection.js +1 -0
  56. package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
  57. package/dist/graph/onchain/facet-projection.spec.js +1 -0
  58. package/dist/graph/onchain/facts.d.ts +103 -0
  59. package/dist/graph/onchain/facts.js +1 -0
  60. package/dist/graph/onchain/facts.spec.d.ts +1 -0
  61. package/dist/graph/onchain/facts.spec.js +1 -0
  62. package/dist/graph/onchain/field-manifest.d.ts +29 -0
  63. package/dist/graph/onchain/field-manifest.js +1 -0
  64. package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
  65. package/dist/graph/onchain/field-manifest.spec.js +1 -0
  66. package/dist/graph/onchain/fixtures.d.ts +80 -0
  67. package/dist/graph/onchain/fixtures.js +1 -0
  68. package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
  69. package/dist/graph/onchain/fixtures.spec.js +1 -0
  70. package/dist/graph/onchain/index.d.ts +8 -2
  71. package/dist/graph/onchain/index.js +1 -1
  72. package/dist/graph/onchain/interest.js +1 -1
  73. package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
  74. package/dist/graph/onchain/label-lint.spec.js +1 -0
  75. package/dist/graph/onchain/names.d.ts +23 -0
  76. package/dist/graph/onchain/names.js +1 -0
  77. package/dist/graph/onchain/names.spec.d.ts +1 -0
  78. package/dist/graph/onchain/names.spec.js +1 -0
  79. package/dist/graph/onchain/onchain.spec.js +1 -1
  80. package/dist/graph/onchain/proposal-graph.d.ts +11 -0
  81. package/dist/graph/onchain/proposal-graph.js +1 -0
  82. package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
  83. package/dist/graph/onchain/proposal-graph.spec.js +1 -0
  84. package/dist/graph/onchain/sdk-batch.d.ts +5 -1
  85. package/dist/graph/onchain/sdk-batch.js +1 -1
  86. package/dist/graph/onchain/strategy.d.ts +16 -0
  87. package/dist/graph/onchain/strategy.js +1 -1
  88. package/dist/graph/onchain/strategy.spec.js +1 -1
  89. package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
  90. package/dist/graph/onchain/table-ledger.spec.js +1 -0
  91. package/dist/graph/onchain/types.d.ts +46 -6
  92. package/dist/graph/onchain/viewport.d.ts +1 -0
  93. package/dist/graph/onchain/viewport.js +1 -1
  94. package/dist/harness/index.d.ts +1 -5
  95. package/dist/harness/index.js +1 -1
  96. package/dist/harness/verify.d.ts +6 -1
  97. package/dist/harness/verify.js +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/knowledge/allocation-ledger.js +1 -1
  100. package/dist/knowledge/allocation-risk.d.ts +0 -2
  101. package/dist/knowledge/allocation-risk.js +1 -1
  102. package/dist/knowledge/arb-risk.d.ts +0 -1
  103. package/dist/knowledge/arb-risk.js +1 -1
  104. package/dist/knowledge/arbitration-risk.d.ts +0 -2
  105. package/dist/knowledge/arbitration-risk.js +1 -1
  106. package/dist/knowledge/baselines/evaluation-baselines.json +79 -0
  107. package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
  108. package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
  109. package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
  110. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
  111. package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
  112. package/dist/knowledge/baselines/risk-cases.js +1 -0
  113. package/dist/knowledge/bridge-risk.d.ts +0 -1
  114. package/dist/knowledge/bridge-risk.js +1 -1
  115. package/dist/knowledge/contact-risk.d.ts +0 -1
  116. package/dist/knowledge/contact-risk.js +1 -1
  117. package/dist/knowledge/contract-invariants.d.ts +1 -0
  118. package/dist/knowledge/contract-invariants.js +1 -1
  119. package/dist/knowledge/demand-risk.d.ts +0 -1
  120. package/dist/knowledge/demand-risk.js +1 -1
  121. package/dist/knowledge/getting-started.js +1 -1
  122. package/dist/knowledge/guard-eval.d.ts +15 -0
  123. package/dist/knowledge/guard-eval.js +1 -0
  124. package/dist/knowledge/guard-eval.spec.d.ts +1 -0
  125. package/dist/knowledge/guard-eval.spec.js +1 -0
  126. package/dist/knowledge/guard-lint.d.ts +1 -1
  127. package/dist/knowledge/guard-lint.js +1 -1
  128. package/dist/knowledge/guard-risk.d.ts +4 -19
  129. package/dist/knowledge/guard-risk.js +1 -1
  130. package/dist/knowledge/index.d.ts +41 -43
  131. package/dist/knowledge/index.js +1 -1
  132. package/dist/knowledge/industry-registry.js +1 -1
  133. package/dist/knowledge/industry-rule-node.d.ts +7 -0
  134. package/dist/knowledge/industry-rule-node.js +1 -0
  135. package/dist/knowledge/jsonrpc-enum.js +1 -1
  136. package/dist/knowledge/machine-risk.d.ts +0 -6
  137. package/dist/knowledge/machine-risk.js +1 -1
  138. package/dist/knowledge/order-risk.d.ts +1 -9
  139. package/dist/knowledge/order-risk.js +1 -1
  140. package/dist/knowledge/payment-risk.d.ts +0 -1
  141. package/dist/knowledge/payment-risk.js +1 -1
  142. package/dist/knowledge/permission-risk.d.ts +0 -3
  143. package/dist/knowledge/permission-risk.js +1 -1
  144. package/dist/knowledge/personal-risk.d.ts +0 -1
  145. package/dist/knowledge/personal-risk.js +1 -1
  146. package/dist/knowledge/progress-risk.d.ts +0 -2
  147. package/dist/knowledge/progress-risk.js +1 -1
  148. package/dist/knowledge/proof-risk.d.ts +0 -1
  149. package/dist/knowledge/proof-risk.js +1 -1
  150. package/dist/knowledge/puzzle-projections.d.ts +11 -0
  151. package/dist/knowledge/puzzle-projections.js +1 -0
  152. package/dist/knowledge/registrar-risk.d.ts +0 -1
  153. package/dist/knowledge/registrar-risk.js +1 -1
  154. package/dist/knowledge/repository-risk.d.ts +0 -1
  155. package/dist/knowledge/repository-risk.js +1 -1
  156. package/dist/knowledge/resource-risk.d.ts +0 -1
  157. package/dist/knowledge/resource-risk.js +1 -1
  158. package/dist/knowledge/reward-risk.d.ts +1 -5
  159. package/dist/knowledge/reward-risk.js +1 -1
  160. package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
  161. package/dist/knowledge/rule-node-analyzers.js +1 -0
  162. package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
  163. package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
  164. package/dist/knowledge/rule-outcome.d.ts +5 -0
  165. package/dist/knowledge/rule-outcome.js +1 -0
  166. package/dist/knowledge/safety-rules.js +1 -1
  167. package/dist/knowledge/scenario-topology.js +1 -1
  168. package/dist/knowledge/service-risk-node.js +1 -1
  169. package/dist/knowledge/service-risk.d.ts +0 -3
  170. package/dist/knowledge/service-risk.js +1 -1
  171. package/dist/knowledge/template-registry.js +1 -1
  172. package/dist/knowledge/tools-reference.js +1 -1
  173. package/dist/knowledge/treasury-risk.d.ts +2 -3
  174. package/dist/knowledge/treasury-risk.js +1 -1
  175. package/dist/knowledge/util-risk.d.ts +0 -1
  176. package/dist/knowledge/util-risk.js +1 -1
  177. package/dist/monitor/MonitorLoop.js +1 -1
  178. package/dist/persona/bridge.js +1 -1
  179. package/dist/persona/facet-profile.d.ts +33 -0
  180. package/dist/persona/facet-profile.js +1 -0
  181. package/dist/persona/model.d.ts +2 -1
  182. package/dist/persona/model.js +1 -1
  183. package/dist/persona/topology-focus.d.ts +2 -2
  184. package/dist/persona/topology-focus.js +1 -1
  185. package/dist/persona/types.d.ts +12 -0
  186. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  187. package/dist/playbooks/service-build/facet-money.d.ts +22 -0
  188. package/dist/playbooks/service-build/facet-money.js +1 -0
  189. package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
  190. package/dist/playbooks/service-build/facet-money.spec.js +1 -0
  191. package/dist/playbooks/service-build/machine-panorama.d.ts +3 -0
  192. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  193. package/dist/playbooks/service-build/object-panorama.d.ts +27 -27
  194. package/dist/playbooks/service-build/object-panorama.js +1 -1
  195. package/dist/playbooks/service-build/pipeline-actions.d.ts +2 -2
  196. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  197. package/dist/playbooks/service-build/risk-aggregator.d.ts +2 -1
  198. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  199. package/dist/playbooks/service-build/service-panorama.d.ts +4 -9
  200. package/dist/playbooks/service-build/service-panorama.js +1 -1
  201. package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
  202. package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
  203. package/dist/playbooks/service-build/topology-query.d.ts +13 -2
  204. package/dist/playbooks/service-build/topology-query.js +1 -1
  205. package/dist/review/arb.d.ts +0 -2
  206. package/dist/review/arb.js +1 -1
  207. package/dist/review/order.d.ts +0 -1
  208. package/dist/review/order.js +1 -1
  209. package/dist/role/profiles.js +1 -1
  210. package/dist/rules.d.ts +1 -2
  211. package/dist/rules.js +1 -1
  212. package/dist/safety/confirm-gate.js +1 -1
  213. package/dist/schema/call/base.d.ts +3372 -668
  214. package/dist/schema/call/base.js +1 -1
  215. package/dist/schema/call/handler.js +1 -1
  216. package/dist/schema/call/receipt.d.ts +28 -0
  217. package/dist/schema/call/receipt.js +1 -0
  218. package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
  219. package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
  220. package/dist/schema/call/semantic.d.ts +5 -2
  221. package/dist/schema/call/semantic.js +1 -1
  222. package/dist/schema/call/treasury.js +1 -1
  223. package/dist/schema/common/index.js +1 -1
  224. package/dist/schema/evaluation/index.d.ts +289 -211
  225. package/dist/schema/evaluation/index.js +1 -1
  226. package/dist/schema/goal/index.d.ts +1 -1
  227. package/dist/schema/goal/planning.d.ts +2 -2
  228. package/dist/schema/index.d.ts +0 -1
  229. package/dist/schema/index.js +1 -1
  230. package/dist/schema/industry-pack/index.d.ts +1 -1
  231. package/dist/schema/keeper/index.d.ts +1 -1
  232. package/dist/schema/local/index.js +1 -1
  233. package/dist/schema/operations.d.ts +26 -10
  234. package/dist/schema/operations.js +1 -1
  235. package/dist/schema/persona/index.d.ts +24 -24
  236. package/dist/schema/query/bi.d.ts +613 -0
  237. package/dist/schema/query/bi.js +1 -1
  238. package/dist/schema/query/index.d.ts +9 -9
  239. package/dist/schema/schema-version.js +1 -1
  240. package/dist/schema/workspace/index.d.ts +2 -2
  241. package/dist/schema-query-impl/index.js +1 -1
  242. package/dist/schemas/account_operation.output.json +1 -1
  243. package/dist/schemas/bridge_operation.output.json +1 -1
  244. package/dist/schemas/evaluation_operation.output.json +691 -163
  245. package/dist/schemas/evaluation_operation.schema.json +0 -429
  246. package/dist/schemas/index.json +1 -7
  247. package/dist/schemas/keeper_operation.output.json +1 -1
  248. package/dist/schemas/local_history_operation.output.json +1 -1
  249. package/dist/schemas/local_info_operation.output.json +1 -1
  250. package/dist/schemas/local_mark_operation.output.json +1 -1
  251. package/dist/schemas/messenger_operation.output.json +1 -1
  252. package/dist/schemas/monitor_events.output.json +1 -1
  253. package/dist/schemas/monitor_subscription.output.json +1 -1
  254. package/dist/schemas/onchain_events.output.json +1 -1
  255. package/dist/schemas/onchain_operations.output.json +6357 -3724
  256. package/dist/schemas/onchain_operations.schema.json +2 -2
  257. package/dist/schemas/onchain_operations_treasury.schema.json +2 -2
  258. package/dist/schemas/onchain_table_data.output.json +61 -71
  259. package/dist/schemas/query_toolkit.output.json +841 -8
  260. package/dist/schemas/query_toolkit.schema.json +59 -1
  261. package/dist/strategy/metrics.js +1 -1
  262. package/dist/tools/handlers/bridge.js +1 -1
  263. package/dist/tools/handlers/config.js +1 -1
  264. package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
  265. package/dist/tools/handlers/dispatch-expectations.js +1 -0
  266. package/dist/tools/handlers/evaluation.js +1 -1
  267. package/dist/tools/handlers/onchain.js +1 -1
  268. package/dist/tools/handlers/query.js +1 -1
  269. package/dist/tools/index.js +1 -1
  270. package/dist/tools/registry/evaluation.d.ts +2 -0
  271. package/dist/tools/registry/evaluation.js +1 -0
  272. package/dist/tools/registry/query.js +1 -1
  273. package/dist/tools/shared.d.ts +0 -1
  274. package/dist/tools/shared.js +1 -1
  275. package/dist/tools/wrap.js +1 -1
  276. package/package.json +4 -3
  277. package/dist/customer/customer-advice.d.ts +0 -32
  278. package/dist/customer/customer-advice.js +0 -1
  279. package/dist/customer/info-puzzle.d.ts +0 -146
  280. package/dist/customer/info-puzzle.js +0 -1
  281. package/dist/customer/order-strategy.d.ts +0 -17
  282. package/dist/customer/order-strategy.js +0 -1
  283. package/dist/customer/preorder-compare.d.ts +0 -24
  284. package/dist/customer/preorder-compare.js +0 -1
  285. package/dist/customer/reminder-system.d.ts +0 -42
  286. package/dist/customer/reminder-system.js +0 -1
  287. package/dist/customer/risk-assessment.d.ts +0 -13
  288. package/dist/customer/risk-assessment.js +0 -1
  289. package/dist/evaluation/builtins/service-risk.d.ts +0 -7
  290. package/dist/evaluation/builtins/service-risk.js +0 -1
  291. package/dist/knowledge/trust-metrics.d.ts +0 -66
  292. package/dist/knowledge/trust-metrics.js +0 -1
  293. package/dist/schema/trust/index.d.ts +0 -334
  294. package/dist/schema/trust/index.js +0 -1
  295. package/dist/schemas/trust_score.output.json +0 -847
  296. package/dist/schemas/trust_score.schema.json +0 -364
  297. package/dist/tools/handlers/trust.d.ts +0 -16
  298. package/dist/tools/handlers/trust.js +0 -1
  299. package/dist/tools/registry/trust.d.ts +0 -2
  300. package/dist/tools/registry/trust.js +0 -1
@@ -69,10 +69,8 @@ export interface RewardRiskCheckContext {
69
69
  guard_expected_progress_state?: string;
70
70
  machine_has_wonder_node?: boolean;
71
71
  }
72
- export declare const REWARD_RISK_VERSION = "1.0.0";
72
+ export declare const REWARD_RISK_VERSION = "1.1.0";
73
73
  export declare function getAllRewardRiskRules(): RewardRiskRule[];
74
- export declare function getRewardRiskRulesCount(): number;
75
- export declare function getRewardRiskRulesByCategory(category: RewardRiskCategory): RewardRiskRule[];
76
74
  export interface RewardRiskAssessment {
77
75
  summary: string;
78
76
  scene?: RewardScene;
@@ -83,5 +81,3 @@ export interface RewardRiskAssessment {
83
81
  needs_human_review: boolean;
84
82
  }
85
83
  export declare function assessRewardRisks(ctx: RewardRiskCheckContext): RewardRiskAssessment;
86
- export declare const REWARD_STAKEHOLDERS: RewardStakeholder[];
87
- export declare function getRewardRiskRulesByStakeholder(stakeholder: RewardStakeholder): RewardRiskRule[];
@@ -1 +1 @@
1
- import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';import{resolveGuardConstructor}from'./reward-ledger.js';const R_R_1_01={'id':'R-R-1-01','category':'structural','trigger':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20(200)','check':a=>{if(!a['guard_add']||a['guard_add']['length']===0x0)return null;const b=a['current_guard_count']??0x0,c=a['guard_add']['length'];if(b+c>MAX_GUARD_COUNT_REWARD)return{'id':'R-R-1-01','level':'HIGH','category':'structural','title':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD','description':'Reward\x20has\x20'+b+'\x20guards,\x20adding\x20'+c+'\x20would\x20total\x20'+(b+c)+',\x20'+('exceeds\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD+'.\x20Move\x20aborts\x20with\x20E_GUARD_COUNT_EXCEEDED\x20(3).'),'affected_stakeholders':['owner','service_provider'],'scenario':'Adding\x20too\x20many\x20guards\x20to\x20a\x20single\x20Reward\x20(e.g.\x20milestone\x20reward\x20with\x20>\x20200\x20recipients)','mitigation':'Split\x20into\x20multiple\x20Reward\x20objects,\x20or\x20use\x20GuardIdentifier\x20recipient\x20to\x20handle\x20multiple\x20recipients\x20with\x20a\x20single\x20guard.','evidence':'current='+b+',\x20add='+c,'related_move_error':'E_GUARD_COUNT_EXCEEDED\x20(3)','auto_fixable':![]};return null;}},R_R_1_02={'id':'R-R-1-02','category':'structural','trigger':'claim\x20would\x20push\x20recipient\x20record\x20count\x20to\x20MAX_RECORD_COUNT_REWARD\x20(5200)','check':a=>{if(!a['claim'])return null;const b=a['current_record_count_for_recipient']??0x0;if(b>=MAX_RECORD_COUNT_REWARD)return{'id':'R-R-1-02','level':'HIGH','category':'structural','title':'claim\x20blocked\x20—\x20recipient\x20record\x20count\x20at\x20limit','description':'Recipient\x20already\x20has\x20'+b+'\x20records,\x20at\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'.\x20'+'Next\x20claim\x20will\x20abort\x20with\x20E_RECORD_COUNT_EXCEEDED\x20(8).\x20The\x20recipient\x20can\x20no\x20longer\x20claim\x20from\x20this\x20Reward.','affected_stakeholders':['claimer'],'scenario':'High-frequency\x20claimer\x20hits\x20the\x205200-record\x20ceiling\x20(e.g.\x20cashback\x20on\x20every\x20micro-order)','mitigation':'Owner\x20can\x20create\x20a\x20new\x20Reward\x20for\x20the\x20same\x20recipient,\x20OR\x20redesign\x20the\x20Guard\x20to\x20batch\x20claims\x20(larger\x20amount\x20per\x20claim).','evidence':'recipient_records='+b,'related_move_error':'E_RECORD_COUNT_EXCEEDED\x20(8)','auto_fixable':![]};return null;}},R_R_1_03={'id':'R-R-1-03','category':'structural','trigger':'guard_add\x20batch\x20size\x20>\x20MAX_GUARD_COUNT_REWARD\x20(200)\x20—\x20schema-level\x20overflow','check':a=>{if(!a['guard_add'])return null;if(a['guard_add']['length']>MAX_GUARD_COUNT_REWARD)return{'id':'R-R-1-03','level':'CRITICAL','category':'structural','title':'guard_add\x20batch\x20exceeds\x20absolute\x20limit','description':'Single\x20guard_add\x20call\x20tries\x20to\x20add\x20'+a['guard_add']['length']+'\x20guards\x20in\x20one\x20transaction,\x20'+('exceeds\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD+'.\x20SDK\x20rejects\x20this\x20in\x20operate().'),'affected_stakeholders':['owner'],'scenario':'Bulk\x20guard\x20addition\x20without\x20splitting\x20transactions','mitigation':'Split\x20into\x20multiple\x20transactions,\x20each\x20≤\x20'+MAX_GUARD_COUNT_REWARD+'\x20new\x20guards.','evidence':'batch_size='+a['guard_add']['length'],'auto_fixable':!![]};return null;}},R_R_2_01={'id':'R-R-2-01','category':'semantic','trigger':'guard_add\x20with\x20GuardIdentifier\x20recipient\x20where\x20identifier\x20type\x20is\x20not\x20address','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b];if('GuardIdentifier'in c['recipient']){const d=c['recipient']['GuardIdentifier'];if(a['passport_identifier_is_address']&&a['passport_identifier_is_address'][d]===![])return{'id':'R-R-2-01','level':'HIGH','category':'semantic','title':'guard_add['+b+']:\x20recipient\x20GuardIdentifier\x20'+d+'\x20is\x20not\x20address-typed','description':'RewardGuard\x20constructor\x20calls\x20is_identifier_address(guard,\x20'+d+').\x20If\x20the\x20identifier\x20type\x20is\x20not\x20address,\x20'+'Move\x20aborts\x20with\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20recipient\x20identifier\x20is\x20u64/bool\x20instead\x20of\x20address','mitigation':'Use\x20a\x20Guard\x20with\x20an\x20address-typed\x20identifier\x20for\x20recipient,\x20OR\x20switch\x20to\x20Entity/Signer\x20recipient.','evidence':'guard_add['+b+'].recipient.GuardIdentifier='+d+',\x20is_address=false','related_move_error':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','auto_fixable':![]};}}return null;}},R_R_2_02={'id':'R-R-2-02','category':'semantic','trigger':'guard_add\x20with\x20GuardU64Identifier\x20amount\x20where\x20identifier\x20type\x20is\x20not\x20u64','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b],d=String(c['amount']['type'])['toUpperCase']();if(d==='GUARDU64IDENTIFIER'||d==='GUARD_U64_IDENTIFIER'){if(typeof c['amount']['value']!=='number')continue;const e=c['amount']['value'];if(a['passport_submission_value_types']&&a['passport_submission_value_types'][e]!=='u64')return{'id':'R-R-2-02','level':'HIGH','category':'semantic','title':'guard_add['+b+']:\x20amount\x20GuardU64Identifier\x20'+e+'\x20is\x20not\x20u64-typed','description':'RewardGuard\x20constructor\x20calls\x20get_submission_value_type(guard,\x20'+e+');\x20if\x20None\x20or\x20≠\x20TYPE_U64,\x20'+'Move\x20aborts\x20with\x20E_AMOUNT_NOT_U64\x20(5).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20amount\x20identifier\x20is\x20not\x20u64-typed','mitigation':'Use\x20a\x20Guard\x20with\x20a\x20u64-typed\x20identifier\x20for\x20amount,\x20OR\x20switch\x20to\x20Fixed\x20amount.','evidence':'guard_add['+b+'].amount.value='+e+',\x20value_type='+(a['passport_submission_value_types'][e]??'unknown'),'related_move_error':'E_AMOUNT_NOT_U64\x20(5)','auto_fixable':![]};}}return null;}},R_R_2_03={'id':'R-R-2-03','category':'semantic','trigger':'guard_add\x20with\x20store_from_id\x20set\x20but\x20identifier\x20is\x20not\x20number/address\x20compatible','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b];if(c['store_from_id']==null)continue;if(a['guard_store_from_id_compatible']&&a['guard_store_from_id_compatible'][c['guard']]===![])return{'id':'R-R-2-03','level':'MEDIUM','category':'semantic','title':'guard_add['+b+']:\x20store_from_id\x20incompatible\x20with\x20guard','description':'RewardGuard\x20constructor\x20with\x20store_from_id=Some\x20calls\x20is_identifier_address_compatible(guard,\x20store_from_id).\x20'+'If\x20the\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address,\x20Move\x20aborts\x20with\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20store_from_id\x20points\x20to\x20a\x20non-address/non-number\x20identifier','mitigation':'Use\x20a\x20compatible\x20identifier,\x20OR\x20drop\x20store_from_id\x20(set\x20to\x20null)\x20if\x20cross-reference\x20is\x20not\x20needed.','evidence':'guard='+c['guard']+',\x20store_from_id='+c['store_from_id'],'related_move_error':'E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)','auto_fixable':!![]};}return null;}},R_R_2_04={'id':'R-R-2-04','category':'semantic','trigger':'guard_add\x20with\x20invalid\x20Recipient\x20×\x20Amount\x20pairing\x20(no\x20matching\x20constructor)','check':a=>{if(!a['guard_add'])return null;const b={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'};for(let c=0x0;c<a['guard_add']['length'];c++){const d=a['guard_add'][c],e=Object['keys'](d['recipient'])[0x0],f=b[e],h=String(d['amount']['type'])['toUpperCase'](),j=h==='FIXED'?'Fixed':'GuardU64Identifier',k=resolveGuardConstructor(f,j);if(!k)return{'id':'R-R-2-04','level':'HIGH','category':'semantic','title':'guard_add['+c+']:\x20invalid\x20Recipient\x20×\x20Amount\x20pairing','description':'recipient='+f+',\x20amount='+j+'\x20—\x20no\x20matching\x20Move\x20constructor.\x20'+'SDK\x20reward_guard()\x20will\x20W_ERROR\x20with\x20\x22Invalid\x20recipient\x20or\x20amount\x20type\x20combination\x22.','affected_stakeholders':['owner'],'scenario':'Schema\x20validation\x20bypassed\x20or\x20stale\x20client','mitigation':'Use\x20one\x20of\x20the\x206\x20valid\x20pairings:\x20guard_u8_u8,\x20guard_u8_u64,\x20guard_entity_u8,\x20guard_entity_u64,\x20guard_signer_u8,\x20guard_signer_u64.','evidence':'recipient='+f+',\x20amount='+j,'auto_fixable':![]};}return null;}},R_R_3_01={'id':'R-R-3-01','category':'permission','trigger':'claim\x20attempted\x20without\x20permission\x20context\x20—\x20claim\x20is\x20passport-driven','check':a=>{if(!a['claim'])return null;return{'id':'R-R-3-01','level':'MEDIUM','category':'permission','title':'claim\x20is\x20permission-free\x20—\x20anyone\x20with\x20a\x20valid\x20Passport\x20can\x20claim','description':'reward::claim()\x20does\x20NOT\x20assert\x20any\x20permission\x20index.\x20Eligibility\x20is\x20determined\x20entirely\x20by\x20the\x20'+'Guard\x20verification\x20(passport::result_for_guard).\x20If\x20the\x20Guard\x20is\x20too\x20permissive,\x20funds\x20can\x20be\x20drained\x20by\x20anyone.','affected_stakeholders':['owner','service_provider'],'scenario':'Loose\x20Guard\x20allows\x20unauthorized\x20claims\x20(e.g.\x20time-only\x20Guard\x20without\x20service\x20binding)','mitigation':'1)\x20Use\x20Guards\x20that\x20bind\x20to\x20specific\x20Service/Order\x20context.\x202)\x20Set\x20expiration_time.\x203)\x20Monitor\x20balance\x20and\x20refill\x20only\x20what\x27s\x20needed.','evidence':'claim='+a['claim'],'auto_fixable':![]};}},R_R_3_02={'id':'R-R-3-02','category':'permission','trigger':'owner_receive\x20(156)\x20—\x20broad\x20blast\x20radius,\x20owner\x20can\x20drain\x20balance','check':a=>{if(a['owner_receive']==null)return null;return{'id':'R-R-3-02','level':'HIGH','category':'permission','title':'owner_receive\x20drains\x20balance\x20to\x20Permission\x20owner','description':'reward::owner_receive\x20(156\x20permission)\x20unwraps\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20and\x20forwards\x20to\x20Permission\x20owner.\x20'+'If\x20156\x20is\x20granted\x20too\x20broadly,\x20any\x20156-holder\x20can\x20sweep\x20receivables.\x20(Note:\x20owner_receive\x20does\x20NOT\x20directly\x20drain\x20balance\x20—\x20'+'only\x20Receiving<K>\x20envelopes\x20sent\x20to\x20the\x20Reward\x27s\x20id.)','affected_stakeholders':['owner','service_provider'],'scenario':'Compromised\x20156-holder\x20sweeps\x20receivables\x20before\x20owner','mitigation':'1)\x20Grant\x20156\x20only\x20to\x20the\x20Permission\x20owner\x20address.\x202)\x20Reconcile\x20Receiving<K>\x20inflows\x20vs\x20owner_receive\x20events.','evidence':'owner_receive\x20set','auto_fixable':![]};}},R_R_3_03={'id':'R-R-3-03','category':'permission','trigger':'guard_expiration_time_add\x20(155)\x20—\x20can\x20permanently\x20lock\x20guard\x20additions','check':a=>{if(a['guard_expiration_time']===undefined)return null;if(a['guard_expiration_time']!==null&&a['current_clock_ms']!==undefined){const b=a['guard_expiration_time']-a['current_clock_ms'],c=0x16d*0x18*0x3c*0x3c*0x3e8;if(b>c)return{'id':'R-R-3-03','level':'MEDIUM','category':'permission','title':'guard_expiration_time_add\x20locks\x20guard\x20additions\x20for\x20>\x201\x20year','description':'Setting\x20guard_not_added_expiration_time\x20to\x20'+a['guard_expiration_time']+'\x20'+'(>\x201\x20year\x20from\x20now)\x20effectively\x20freezes\x20the\x20guard\x20list.\x20While\x20this\x20is\x20sometimes\x20intentional\x20'+'(milestone\x20rewards),\x20it\x20cannot\x20be\x20undone\x20without\x20setting\x20a\x20new\x20time\x20(which\x20itself\x20requires\x20155\x20permission).','affected_stakeholders':['owner'],'scenario':'Operator\x20sets\x20excessively\x20long\x20lock\x20period\x20by\x20mistake','mitigation':'Confirm\x20intent.\x20If\x20wrong,\x20call\x20guard_expiration_time_add\x20again\x20with\x20a\x20shorter\x20time\x20(must\x20be\x20≥\x20current\x20clock\x20per\x20E_GUARD_LOCKED_TIME_NOT_INCREASING).','evidence':'lock_until='+a['guard_expiration_time']+',\x20clock='+a['current_clock_ms'],'auto_fixable':![]};}return null;}},R_R_4_01={'id':'R-R-4-01','category':'lifecycle','trigger':'claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now\x20(E_GUARD_EXPIRED)','check':a=>{if(!a['claim'])return null;return null;}},R_R_4_02={'id':'R-R-4-02','category':'lifecycle','trigger':'claim:\x20balance\x20<\x20amount\x20(E_INSUFFICIENT_BALANCE)','check':a=>{if(!a['claim'])return null;if(a['current_balance']!==undefined&&a['current_guard_count']!==undefined){const b=BigInt(a['current_balance']);if(b===0x0n)return{'id':'R-R-4-02','level':'HIGH','category':'lifecycle','title':'claim\x20on\x20Reward\x20with\x20zero\x20balance','description':'Reward\x20balance\x20is\x200.\x20Any\x20claim\x20will\x20abort\x20with\x20E_INSUFFICIENT_BALANCE\x20(6).\x20'+'Owner\x20must\x20coin_add\x20(153)\x20or\x20receive\x20(154)\x20to\x20replenish.','affected_stakeholders':['claimer','owner'],'scenario':'Marketing\x20campaign\x20budget\x20exhausted\x20but\x20guards\x20remain\x20active','mitigation':'1)\x20Owner:\x20coin_add\x20to\x20replenish.\x202)\x20Owner:\x20guard_remove_expired\x20+\x20guard_expiration_time_add\x20to\x20deactivate.\x203)\x20Claimer:\x20wait\x20for\x20replenishment.','evidence':'balance=0','related_move_error':'E_INSUFFICIENT_BALANCE\x20(6)','auto_fixable':![]};}return null;}},R_R_4_03={'id':'R-R-4-03','category':'lifecycle','trigger':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration\x20(E_GUARD_LOCKED_TIME)','check':a=>{if(!a['guard_add']||a['guard_add']['length']===0x0)return null;if(a['current_guard_not_added_expiration_time']==null)return null;if(a['current_clock_ms']===undefined)return null;if(a['current_clock_ms']<=a['current_guard_not_added_expiration_time'])return{'id':'R-R-4-03','level':'HIGH','category':'lifecycle','title':'guard_add\x20blocked\x20by\x20time-lock\x20(guard_not_added_expiration_time)','description':'guard_not_added_expiration_time\x20is\x20Some('+a['current_guard_not_added_expiration_time']+');\x20'+('clock\x20is\x20'+a['current_clock_ms']+'.\x20Move\x20asserts\x20clock\x20>\x20expiration_time\x20')+'(E_GUARD_LOCKED_TIME\x20=\x2010).','affected_stakeholders':['owner'],'scenario':'Trying\x20to\x20add\x20guards\x20during\x20a\x20flash\x20sale\x20lock\x20period','mitigation':'1)\x20Wait\x20until\x20clock\x20>\x20expiration_time.\x202)\x20Call\x20guard_expiration_time_add\x20(155)\x20to\x20extend\x20the\x20lock\x20(cannot\x20shorten\x20below\x20current\x20clock).','evidence':'lock_until='+a['current_guard_not_added_expiration_time']+',\x20clock='+a['current_clock_ms'],'related_move_error':'E_GUARD_LOCKED_TIME\x20(10)','auto_fixable':![]};return null;}},R_R_4_04={'id':'R-R-4-04','category':'lifecycle','trigger':'guard_expiration_time_add\x20regression\x20(new\x20time\x20<\x20current\x20clock)','check':a=>{if(a['guard_expiration_time']===undefined)return null;if(a['guard_expiration_time']===null)return null;if(a['current_clock_ms']===undefined)return null;if(a['guard_expiration_time']<=a['current_clock_ms'])return{'id':'R-R-4-04','level':'HIGH','category':'lifecycle','title':'guard_expiration_time_add:\x20new\x20time\x20must\x20be\x20in\x20the\x20future','description':'New\x20guard_not_added_expiration_time\x20=\x20'+a['guard_expiration_time']+'\x20≤\x20clock\x20'+a['current_clock_ms']+'.\x20'+'Move\x20aborts\x20with\x20E_GUARD_LOCKED_TIME_INVALID\x20(11).','affected_stakeholders':['owner'],'scenario':'Operator\x20sets\x20lock\x20time\x20in\x20the\x20past\x20by\x20mistake','mitigation':'Set\x20guard_expiration_time\x20to\x20a\x20value\x20>\x20'+a['current_clock_ms']+'\x20(current\x20clock).','evidence':'new_time='+a['guard_expiration_time']+',\x20clock='+a['current_clock_ms'],'related_move_error':'E_GUARD_LOCKED_TIME_INVALID\x20(11)','auto_fixable':!![]};return null;}},R_R_5_01={'id':'R-R-5-01','category':'cross_object','trigger':'claim:\x20guard\x20not\x20found\x20in\x20self.guards\x20(E_GUARD_NOT_FOUND)','check':a=>{if(!a['claim'])return null;if(!a['target_guard_addresses'])return null;if(!a['target_guard_addresses']['includes'](a['claim']))return{'id':'R-R-5-01','level':'HIGH','category':'cross_object','title':'claim:\x20supplied\x20guard\x20not\x20in\x20Reward.guards','description':'Guard\x20'+a['claim']+'\x20is\x20not\x20in\x20the\x20Reward\x27s\x20guard\x20list.\x20Move\x20iterates\x20self.guards\x20and\x20'+'aborts\x20with\x20E_GUARD_NOT_FOUND\x20(7)\x20if\x20no\x20match.','affected_stakeholders':['claimer'],'scenario':'Claimer\x20uses\x20the\x20wrong\x20Guard\x20object\x20(typo\x20or\x20wrong\x20Service)','mitigation':'1)\x20Verify\x20the\x20Guard\x20address\x20via\x20query\x20ObjectReward.\x202)\x20Ensure\x20the\x20Guard\x20was\x20added\x20via\x20guard_add\x20(152).','evidence':'claim_guard='+a['claim']+',\x20known_guards='+a['target_guard_addresses']['join'](','),'related_move_error':'E_GUARD_NOT_FOUND\x20(7)','auto_fixable':![]};return null;}},R_R_5_02={'id':'R-R-5-02','category':'cross_object','trigger':'coin_add:\x20coin\x20type\x20T\x20mismatch\x20with\x20Reward<T>','check':a=>{if(!a['coin_add']||!a['reward_type'])return null;if(a['coin_add']['coin_type']!==a['reward_type'])return{'id':'R-R-5-02','level':'CRITICAL','category':'cross_object','title':'coin_add:\x20coin\x20type\x20T\x20mismatch','description':'Reward\x20is\x20Reward<'+a['reward_type']+'>\x20but\x20coin_add\x20passes\x20Coin<'+a['coin_add']['coin_type']+'>.\x20'+'Move\x20type-system\x20mismatch;\x20SDK\x20W_ERROR\x20in\x20operate().','affected_stakeholders':['owner'],'scenario':'Operator\x20tries\x20to\x20deposit\x20wrong\x20coin\x20type\x20(e.g.\x20USDC\x20into\x20a\x20WOW\x20Reward)','mitigation':'Use\x20Coin<'+a['reward_type']+'>\x20for\x20coin_add.','evidence':'reward_type='+a['reward_type']+',\x20coin_type='+a['coin_add']['coin_type'],'auto_fixable':![]};return null;}},R_R_5_03={'id':'R-R-5-03','category':'cross_object','trigger':'receive:\x20Payment<T>\x20type\x20mismatch\x20with\x20Reward<T>','check':a=>{if(!a['receive']||!a['reward_type'])return null;if(a['receive']['token_type']!==a['reward_type'])return{'id':'R-R-5-03','level':'CRITICAL','category':'cross_object','title':'receive:\x20Payment\x20token_type\x20mismatch','description':'Reward\x20is\x20Reward<'+a['reward_type']+'>\x20but\x20receive\x27s\x20Payment<CoinWrapper<'+a['receive']['token_type']+'>>.\x20'+'SDK\x20W_ERROR\x20in\x20operate().','affected_stakeholders':['owner'],'scenario':'Operator\x20tries\x20to\x20receive\x20wrong-token\x20Payment','mitigation':'Use\x20Payment<'+a['reward_type']+'>\x20for\x20receive.','evidence':'reward_type='+a['reward_type']+',\x20payment_token='+a['receive']['token_type'],'auto_fixable':![]};return null;}},R_R_6_01={'id':'R-R-6-01','category':'business_semantic','trigger':'intent\x20mentions\x20praise/positive-review\x20but\x20Guard\x20checks\x20non-wonder\x20progress\x20node','check':a=>{if(!a['user_intent_phrases']||a['user_intent_phrases']['length']===0x0)return null;if(!a['guard_expected_progress_state'])return null;const b=a['user_intent_phrases']['join']('\x20')['toLowerCase'](),c=['praise','wonder','thumbs_up','positive\x20review','satisfaction\x20reward','praise\x20reward'],d=c['some'](f=>b['includes'](f['toLowerCase']()));if(!d)return null;if(a['machine_has_wonder_node']===![])return null;const e=a['guard_expected_progress_state'];if(e!=='wonder')return{'id':'R-R-6-01','level':'HIGH','category':'business_semantic','title':'Guard\x20checks\x20progress==\x22'+e+'\x22\x20but\x20intent\x20indicates\x20praise\x20reward\x20(wonder\x20node)','description':'User\x20intent\x20mentions\x20praise/positive-review/wonder,\x20which\x20maps\x20to\x20the\x20\x27wonder\x27\x20progress\x20node\x20'+'(customer\x20gives\x20positive\x20review\x20AFTER\x20service\x20completion).\x20But\x20the\x20Guard\x27s\x20table\x20bakes\x20'+('expected\x20state=\x22'+e+'\x22,\x20allowing\x20reward\x20claim\x20at\x20the\x20wrong\x20lifecycle\x20stage.\x20')+'This\x20violates\x20the\x20business\x20semantics:\x20\x22praise\x20reward\x22\x20should\x20only\x20be\x20claimable\x20AFTER\x20the\x20'+'customer\x20advances\x20to\x20the\x20\x27wonder\x27\x20node,\x20not\x20before.\x20'+'Guard\x20is\x20immutable\x20—\x20fixing\x20this\x20requires\x20creating\x20a\x20new\x20Guard\x20+\x20Reward\x20pair.','affected_stakeholders':['owner','service_provider','claimer'],'scenario':'Designer\x20builds\x20Guard\x20checking\x20\x27completed\x27\x20instead\x20of\x20\x27wonder\x27\x20for\x20a\x20praise\x20reward','mitigation':'Set\x20the\x20Guard\x20table\x27s\x20expected\x20progress\x20state\x20to\x20\x27wonder\x27\x20(the\x20positive-review\x20node).\x20'+'The\x20correct\x20pattern:\x20ordered\x20→\x20in_service\x20→\x20completed\x20→\x20wonder\x20(praise)\x20triggers\x20reward\x20claim.\x20'+'Reference:\x20reward-templates.ts\x20wonder_praise\x20template.','evidence':'intent=\x22'+b+'\x22,\x20expected_state=\x22'+e+'\x22,\x20expected_wonder=true','auto_fixable':![]};return null;}},R_R_6_02={'id':'R-R-6-02','category':'business_semantic','trigger':'Guard\x20checks\x20wonder\x20node\x20but\x20intent\x20does\x20not\x20mention\x20praise','check':a=>{if(!a['user_intent_phrases']||a['user_intent_phrases']['length']===0x0)return null;if(!a['guard_expected_progress_state'])return null;if(a['guard_expected_progress_state']!=='wonder')return null;const b=a['user_intent_phrases']['join']('\x20')['toLowerCase'](),c=['praise','wonder','thumbs_up','positive\x20review','satisfaction\x20reward','praise\x20reward'],d=c['some'](e=>b['includes'](e['toLowerCase']()));if(d)return null;return{'id':'R-R-6-02','level':'MEDIUM','category':'business_semantic','title':'Guard\x20checks\x20wonder\x20node\x20but\x20intent\x20does\x20not\x20mention\x20praise','description':'Guard\x27s\x20expected\x20progress\x20state\x20is\x20\x22wonder\x22\x20(positive-review\x20node),\x20but\x20the\x20user\x20intent\x20'+'does\x20not\x20mention\x20any\x20praise/positive-review\x20keyword.\x20This\x20may\x20be\x20a\x20copy-paste\x20from\x20a\x20wonder_praise\x20'+'template\x20without\x20adjusting\x20the\x20Guard\x20for\x20the\x20actual\x20business\x20semantics.\x20If\x20this\x20is\x20a\x20'+'general\x20feedback\x20reward\x20(wonder_feedback),\x20this\x20is\x20fine.\x20Otherwise,\x20verify\x20the\x20node\x20choice.','affected_stakeholders':['owner'],'scenario':'Designer\x20copies\x20wonder_praise\x20template\x20but\x20actually\x20wants\x20a\x20completion-based\x20reward','mitigation':'Verify:\x20if\x20intent\x20is\x20praise\x20reward,\x20add\x20\x27praise/positive\x20review\x27\x20to\x20description.\x20'+'If\x20intent\x20is\x20completion-based\x20reward,\x20change\x20Guard\x20to\x20check\x20\x27completed\x27\x20node.','evidence':'expected_state=\x22wonder\x22,\x20intent=\x22'+b+'\x22\x20(no\x20praise\x20keyword)','auto_fixable':![]};}},R_R_7_01={'id':'R-R-7-01','category':'fund_recovery','trigger':'coin_add/receive\x20(deposit)\x20or\x20guard_add\x20without\x20an\x20owner\x20fund-recovery\x20escape\x20guard','check':a=>{const b=!!(a['coin_add']||a['receive']),c=a['guard_add']??[];if(!b&&c['length']===0x0)return null;const d=c['some'](e=>{const f=!!e['recipient']&&typeof e['recipient']==='object'&&'Signer'in e['recipient'],h=String(e['amount']?.['type'])==='GuardU64Identifier';return f&&h;});if(d)return null;return{'id':'R-R-7-01','level':b?'MEDIUM':'LOW','category':'fund_recovery','title':'No\x20owner\x20fund-recovery\x20escape\x20guard\x20on\x20this\x20Reward','description':'claim()\x20is\x20the\x20ONLY\x20exit\x20from\x20the\x20Reward\x27s\x20balance\x20field\x20(reward.move),\x20and\x20none\x20of\x20the\x20guards\x20being\x20'+'configured\x20is\x20an\x20owner\x20escape\x20hatch\x20—\x20any\x20unclaimed\x20remainder\x20stays\x20locked\x20forever.\x20Note:\x20owner_receive\x20'+'(op\x20156)\x20does\x20NOT\x20help\x20here:\x20it\x20only\x20extracts\x20objects\x20the\x20Reward\x20RECEIVED\x20via\x20transfer\x20'+'(Receiving<CoinWrapper<K>>\x20or\x20NFT-like\x20objects)\x20to\x20the\x20Permission\x20owner\x20and\x20never\x20touches\x20balance;\x20'+'receive\x20(op\x20154)\x20is\x20what\x20joins\x20payments\x20into\x20balance.\x20This\x20is\x20a\x20configuration\x20gap,\x20not\x20a\x20contract\x20defect.','affected_stakeholders':['owner'],'scenario':'A\x20marketing\x20Reward\x20is\x20fully\x20consumed\x20by\x20guards,\x20the\x20campaign\x20ends\x20with\x20a\x20residual\x20balance,\x20and\x20the\x20'+'merchant\x20has\x20no\x20guard\x20that\x20lets\x20them\x20reclaim\x20it.','mitigation':'Add\x20an\x20escape\x20guard\x20alongside\x20the\x20other\x20guards:\x20'+'(1)\x20Guard:\x20logic_and(logic_equal(query(1002\x20permission.owner\x20[permission_address]),\x20Signer),\x20'+'logic_greater_equal(Clock,\x20<unlock_time>))\x20—\x20verifies\x20the\x20tx\x20sender\x20is\x20the\x20live\x20Permission\x20owner,\x20with\x20'+'the\x20Clock\x20comparison\x20acting\x20as\x20the\x20lock\x20period\x20(e.g.\x2030\x20days);\x20'+'(2)\x20RewardGuard\x20entry:\x20recipient=Signer,\x20amount=GuardU64Identifier(u8\x20submission\x20mark),\x20'+'expiration_time=unlock_time\x20+\x20claim\x20window\x20(or\x20None)\x20—\x20remember\x20the\x20contract\x20asserts\x20'+'clock\x20<=\x20expiration_time,\x20i.e.\x20expiration\x20is\x20the\x20last\x20claimable\x20moment,\x20not\x20the\x20unlock\x20moment;\x20'+'(3)\x20after\x20unlock\x20the\x20owner\x20claims\x20by\x20submitting\x20the\x20full\x20remaining\x20balance\x20to\x20recover\x20100%.','evidence':'deposit='+b+',\x20guard_add='+c['length']+',\x20'+'escape=false\x20(no\x20entry\x20with\x20Signer\x20recipient\x20+\x20GuardU64Identifier\x20amount)','auto_fixable':![]};}},ALL_RULES=[R_R_1_01,R_R_1_02,R_R_1_03,R_R_2_01,R_R_2_02,R_R_2_03,R_R_2_04,R_R_3_01,R_R_3_02,R_R_3_03,R_R_4_01,R_R_4_02,R_R_4_03,R_R_4_04,R_R_5_01,R_R_5_02,R_R_5_03,R_R_6_01,R_R_6_02,R_R_7_01];export const REWARD_RISK_VERSION='1.0.0';export function getAllRewardRiskRules(){return[...ALL_RULES];}export function getRewardRiskRulesCount(){return ALL_RULES['length'];}export function getRewardRiskRulesByCategory(a){return ALL_RULES['filter'](b=>b['category']===a);}export function assessRewardRisks(a){const b=[];for(const f of ALL_RULES){const g=f['check'](a);if(g)b['push'](g);}const c=b['length']===0x0?'LOW':b['some'](h=>h['level']==='CRITICAL')?'CRITICAL':b['some'](h=>h['level']==='HIGH')?'HIGH':b['some'](h=>h['level']==='MEDIUM')?'MEDIUM':'LOW',d={};for(const h of b){d[h['category']]=(d[h['category']]??0x0)+0x1;}const e={};for(const i of b){for(const j of i['affected_stakeholders']){if(!e[j])e[j]=[];e[j]['push'](i['id']+':\x20'+i['mitigation']);}}return{'summary':'Assessed\x20'+b['length']+'\x20risk(s)\x20across\x20'+Object['keys'](d)['length']+'\x20categories','risks':b,'overall_risk':c,'risks_by_category':d,'stakeholder_advice':e,'needs_human_review':b['some'](k=>k['level']==='CRITICAL'||k['level']==='HIGH')};}export const REWARD_STAKEHOLDERS=['owner','claimer','service_provider','system'];export function getRewardRiskRulesByStakeholder(a){return ALL_RULES['filter'](b=>{if(a==='owner')return['structural','permission','lifecycle','business_semantic']['includes'](b['category']);if(a==='claimer')return b['id']['startsWith']('R-R-4-0')||b['id']==='R-R-5-01'||b['id']==='R-R-1-02'||b['id']==='R-R-6-01';if(a==='service_provider')return b['id']==='R-R-4-02'||b['id']==='R-R-3-01'||b['id']==='R-R-3-02'||b['id']==='R-R-6-01';if(a==='system')return b['category']==='cross_object';return![];});}
1
+ import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';import{resolveGuardConstructor}from'./reward-ledger.js';const R_R_1_01={'id':'R-R-1-01','category':'structural','trigger':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20(200)','check':a=>{if(!a['guard_add']||a['guard_add']['length']===0x0)return null;const b=a['current_guard_count']??0x0,c=a['guard_add']['length'];if(b+c>MAX_GUARD_COUNT_REWARD)return{'id':'R-R-1-01','level':'HIGH','category':'structural','title':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD','description':'Reward\x20has\x20'+b+'\x20guards,\x20adding\x20'+c+'\x20would\x20total\x20'+(b+c)+',\x20'+('exceeds\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD+'.\x20Move\x20aborts\x20with\x20E_GUARD_COUNT_EXCEEDED\x20(3).'),'affected_stakeholders':['owner','service_provider'],'scenario':'Adding\x20too\x20many\x20guards\x20to\x20a\x20single\x20Reward\x20(e.g.\x20milestone\x20reward\x20with\x20>\x20200\x20recipients)','mitigation':'Split\x20into\x20multiple\x20Reward\x20objects,\x20or\x20use\x20GuardIdentifier\x20recipient\x20to\x20handle\x20multiple\x20recipients\x20with\x20a\x20single\x20guard.','evidence':'current='+b+',\x20add='+c,'related_move_error':'E_GUARD_COUNT_EXCEEDED\x20(3)','auto_fixable':![]};return null;}},R_R_1_02={'id':'R-R-1-02','category':'structural','trigger':'claim\x20would\x20push\x20recipient\x20record\x20count\x20to\x20MAX_RECORD_COUNT_REWARD\x20(5200)','check':a=>{if(!a['claim'])return null;const b=a['current_record_count_for_recipient']??0x0;if(b>=MAX_RECORD_COUNT_REWARD)return{'id':'R-R-1-02','level':'HIGH','category':'structural','title':'claim\x20blocked\x20—\x20recipient\x20record\x20count\x20at\x20limit','description':'Recipient\x20already\x20has\x20'+b+'\x20records,\x20at\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'.\x20'+'Next\x20claim\x20will\x20abort\x20with\x20E_RECORD_COUNT_EXCEEDED\x20(8).\x20The\x20recipient\x20can\x20no\x20longer\x20claim\x20from\x20this\x20Reward.','affected_stakeholders':['claimer'],'scenario':'High-frequency\x20claimer\x20hits\x20the\x205200-record\x20ceiling\x20(e.g.\x20cashback\x20on\x20every\x20micro-order)','mitigation':'Owner\x20can\x20create\x20a\x20new\x20Reward\x20for\x20the\x20same\x20recipient,\x20OR\x20redesign\x20the\x20Guard\x20to\x20batch\x20claims\x20(larger\x20amount\x20per\x20claim).','evidence':'recipient_records='+b,'related_move_error':'E_RECORD_COUNT_EXCEEDED\x20(8)','auto_fixable':![]};return null;}},R_R_1_03={'id':'R-R-1-03','category':'structural','trigger':'guard_add\x20batch\x20size\x20>\x20MAX_GUARD_COUNT_REWARD\x20(200)\x20—\x20schema-level\x20overflow','check':a=>{if(!a['guard_add'])return null;if(a['guard_add']['length']>MAX_GUARD_COUNT_REWARD)return{'id':'R-R-1-03','level':'CRITICAL','category':'structural','title':'guard_add\x20batch\x20exceeds\x20absolute\x20limit','description':'Single\x20guard_add\x20call\x20tries\x20to\x20add\x20'+a['guard_add']['length']+'\x20guards\x20in\x20one\x20transaction,\x20'+('exceeds\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD+'.\x20SDK\x20rejects\x20this\x20in\x20operate().'),'affected_stakeholders':['owner'],'scenario':'Bulk\x20guard\x20addition\x20without\x20splitting\x20transactions','mitigation':'Split\x20into\x20multiple\x20transactions,\x20each\x20≤\x20'+MAX_GUARD_COUNT_REWARD+'\x20new\x20guards.','evidence':'batch_size='+a['guard_add']['length'],'auto_fixable':!![]};return null;}},R_R_2_01={'id':'R-R-2-01','category':'semantic','trigger':'guard_add\x20with\x20GuardIdentifier\x20recipient\x20where\x20identifier\x20type\x20is\x20not\x20address','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b];if('GuardIdentifier'in c['recipient']){const d=c['recipient']['GuardIdentifier'];if(a['passport_identifier_is_address']&&a['passport_identifier_is_address'][d]===![])return{'id':'R-R-2-01','level':'HIGH','category':'semantic','title':'guard_add['+b+']:\x20recipient\x20GuardIdentifier\x20'+d+'\x20is\x20not\x20address-typed','description':'RewardGuard\x20constructor\x20calls\x20is_identifier_address(guard,\x20'+d+').\x20If\x20the\x20identifier\x20type\x20is\x20not\x20address,\x20'+'Move\x20aborts\x20with\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20recipient\x20identifier\x20is\x20u64/bool\x20instead\x20of\x20address','mitigation':'Use\x20a\x20Guard\x20with\x20an\x20address-typed\x20identifier\x20for\x20recipient,\x20OR\x20switch\x20to\x20Entity/Signer\x20recipient.','evidence':'guard_add['+b+'].recipient.GuardIdentifier='+d+',\x20is_address=false','related_move_error':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','auto_fixable':![]};}}return null;}},R_R_2_02={'id':'R-R-2-02','category':'semantic','trigger':'guard_add\x20with\x20GuardU64Identifier\x20amount\x20where\x20identifier\x20type\x20is\x20not\x20u64','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b],d=String(c['amount']['type'])['toUpperCase']();if(d==='GUARDU64IDENTIFIER'||d==='GUARD_U64_IDENTIFIER'){if(typeof c['amount']['value']!=='number')continue;const e=c['amount']['value'];if(a['passport_submission_value_types']&&a['passport_submission_value_types'][e]!=='u64')return{'id':'R-R-2-02','level':'HIGH','category':'semantic','title':'guard_add['+b+']:\x20amount\x20GuardU64Identifier\x20'+e+'\x20is\x20not\x20u64-typed','description':'RewardGuard\x20constructor\x20calls\x20get_submission_value_type(guard,\x20'+e+');\x20if\x20None\x20or\x20≠\x20TYPE_U64,\x20'+'Move\x20aborts\x20with\x20E_AMOUNT_NOT_U64\x20(5).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20amount\x20identifier\x20is\x20not\x20u64-typed','mitigation':'Use\x20a\x20Guard\x20with\x20a\x20u64-typed\x20identifier\x20for\x20amount,\x20OR\x20switch\x20to\x20Fixed\x20amount.','evidence':'guard_add['+b+'].amount.value='+e+',\x20value_type='+(a['passport_submission_value_types'][e]??'unknown'),'related_move_error':'E_AMOUNT_NOT_U64\x20(5)','auto_fixable':![]};}}return null;}},R_R_2_03={'id':'R-R-2-03','category':'semantic','trigger':'guard_add\x20with\x20store_from_id\x20set\x20but\x20identifier\x20is\x20not\x20number/address\x20compatible','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b];if(c['store_from_id']==null)continue;if(a['guard_store_from_id_compatible']&&a['guard_store_from_id_compatible'][c['guard']]===![])return{'id':'R-R-2-03','level':'MEDIUM','category':'semantic','title':'guard_add['+b+']:\x20store_from_id\x20incompatible\x20with\x20guard','description':'RewardGuard\x20constructor\x20with\x20store_from_id=Some\x20calls\x20is_identifier_address_compatible(guard,\x20store_from_id).\x20'+'If\x20the\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address,\x20Move\x20aborts\x20with\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20store_from_id\x20points\x20to\x20a\x20non-address/non-number\x20identifier','mitigation':'Use\x20a\x20compatible\x20identifier,\x20OR\x20drop\x20store_from_id\x20(set\x20to\x20null)\x20if\x20cross-reference\x20is\x20not\x20needed.','evidence':'guard='+c['guard']+',\x20store_from_id='+c['store_from_id'],'related_move_error':'E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)','auto_fixable':!![]};}return null;}},R_R_2_04={'id':'R-R-2-04','category':'semantic','trigger':'guard_add\x20with\x20invalid\x20Recipient\x20×\x20Amount\x20pairing\x20(no\x20matching\x20constructor)','check':a=>{if(!a['guard_add'])return null;const b={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'};for(let c=0x0;c<a['guard_add']['length'];c++){const d=a['guard_add'][c],e=Object['keys'](d['recipient'])[0x0],f=b[e],h=String(d['amount']['type'])['toUpperCase'](),j=h==='FIXED'?'Fixed':'GuardU64Identifier',k=resolveGuardConstructor(f,j);if(!k)return{'id':'R-R-2-04','level':'HIGH','category':'semantic','title':'guard_add['+c+']:\x20invalid\x20Recipient\x20×\x20Amount\x20pairing','description':'recipient='+f+',\x20amount='+j+'\x20—\x20no\x20matching\x20Move\x20constructor.\x20'+'SDK\x20reward_guard()\x20will\x20W_ERROR\x20with\x20\x22Invalid\x20recipient\x20or\x20amount\x20type\x20combination\x22.','affected_stakeholders':['owner'],'scenario':'Schema\x20validation\x20bypassed\x20or\x20stale\x20client','mitigation':'Use\x20one\x20of\x20the\x206\x20valid\x20pairings:\x20guard_u8_u8,\x20guard_u8_u64,\x20guard_entity_u8,\x20guard_entity_u64,\x20guard_signer_u8,\x20guard_signer_u64.','evidence':'recipient='+f+',\x20amount='+j,'auto_fixable':![]};}return null;}},R_R_2_05={'id':'R-R-2-05','category':'semantic','trigger':'guard_add\x20with\x20a\x20GuardIdentifier\x20recipient\x20slot\x20—\x20the\x20payout\x20address\x20is\x20only\x20as\x20safe\x20as\x20the\x20Guard\x20predicate;\x20owner\x20security\x20due\x20diligence','check':a=>{const b=a['guard_add'];if(!b)return null;const c=[];for(const d of b){d['recipient']&&typeof d['recipient']==='object'&&'GuardIdentifier'in d['recipient']&&c['push'](d['guard']);}if(c['length']===0x0)return null;return{'id':'R-R-2-05','level':'MEDIUM','category':'semantic','title':'Claim\x20payout\x20address\x20comes\x20from\x20a\x20submission\x20slot\x20—\x20verify\x20the\x20Guard\x20predicate\x20constrains\x20it','description':'For\x20guard_add\x20entry\x20'+c['join'](',\x20')+',\x20the\x20claim\x20recipient\x20is\x20Recipient::GuardIdentifier:\x20claim()\x20reads\x20the\x20payout\x20'+'address\x20from\x20the\x20claim-time\x20passport\x20submission,\x20and\x20claim()\x20itself\x20needs\x20no\x20Permission.\x20Whether\x20that\x20address\x20is\x20legitimate\x20is\x20'+'decided\x20entirely\x20inside\x20the\x20Guard\x20predicate\x20—\x20a\x20guard\x20whose\x20predicate\x20passes\x20without\x20constraining\x20the\x20recipient\x20slot\x20lets\x20any\x20'+'passing\x20party\x20fill\x20the\x20slot\x20with\x20their\x20own\x20address\x20and\x20claim\x20the\x20pool.\x20This\x20is\x20legal\x20by\x20design\x20(the\x20slot\x20CAN\x20be\x20constrained\x20by\x20'+'the\x20predicate),\x20so\x20the\x20safety\x20duty\x20is\x20the\x20configurer\x27s,\x20not\x20the\x20runtime\x27s.','affected_stakeholders':['owner','service_provider'],'scenario':'Owner\x20mounts\x20a\x20claim\x20Guard\x20whose\x20root\x20does\x20not\x20bind\x20the\x20submitted\x20recipient\x20(e.g.,\x20no\x20Signer/entity\x20constraint)','mitigation':'1)\x20Review\x20the\x20full\x20Guard\x20definition\x20and\x20confirm\x20the\x20predicate\x20constrains\x20the\x20recipient\x20identifier\x20(e.g.,\x20compare\x20it\x20to\x20Signer\x20'+'or\x20to\x20an\x20intended\x20entity\x20address).\x202)\x20If\x20the\x20payout\x20should\x20be\x20a\x20fixed\x20party,\x20use\x20an\x20Entity\x20recipient;\x20if\x20it\x20should\x20be\x20the\x20caller,\x20'+'use\x20Signer\x20—\x20neither\x20depends\x20on\x20a\x20submitted\x20slot.\x203)\x20Regress\x20on\x20testnet:\x20a\x20claim\x20to\x20an\x20address\x20the\x20predicate\x20does\x20not\x20authorize\x20'+'must\x20be\x20rejected\x20by\x20the\x20guard.','evidence':'guard_add\x20with\x20GuardIdentifier\x20recipient:\x20['+c['join'](',\x20')+']','auto_fixable':![]};}},R_R_3_01={'id':'R-R-3-01','category':'permission','trigger':'claim\x20attempted\x20without\x20permission\x20context\x20—\x20claim\x20is\x20passport-driven','check':a=>{if(!a['claim'])return null;return{'id':'R-R-3-01','level':'MEDIUM','category':'permission','title':'claim\x20is\x20permission-free\x20—\x20anyone\x20with\x20a\x20valid\x20Passport\x20can\x20claim','description':'reward::claim()\x20does\x20NOT\x20assert\x20any\x20permission\x20index.\x20Eligibility\x20is\x20determined\x20entirely\x20by\x20the\x20'+'Guard\x20verification\x20(passport::result_for_guard).\x20If\x20the\x20Guard\x20is\x20too\x20permissive,\x20funds\x20can\x20be\x20drained\x20by\x20anyone.','affected_stakeholders':['owner','service_provider'],'scenario':'Loose\x20Guard\x20allows\x20unauthorized\x20claims\x20(e.g.\x20time-only\x20Guard\x20without\x20service\x20binding)','mitigation':'1)\x20Use\x20Guards\x20that\x20bind\x20to\x20specific\x20Service/Order\x20context.\x202)\x20Set\x20expiration_time.\x203)\x20Monitor\x20balance\x20and\x20refill\x20only\x20what\x27s\x20needed.','evidence':'claim='+a['claim'],'auto_fixable':![]};}},R_R_3_02={'id':'R-R-3-02','category':'permission','trigger':'owner_receive\x20(156)\x20—\x20broad\x20blast\x20radius,\x20owner\x20can\x20drain\x20balance','check':a=>{if(a['owner_receive']==null)return null;return{'id':'R-R-3-02','level':'HIGH','category':'permission','title':'owner_receive\x20drains\x20balance\x20to\x20Permission\x20owner','description':'reward::owner_receive\x20(156\x20permission)\x20unwraps\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20and\x20forwards\x20to\x20Permission\x20owner.\x20'+'If\x20156\x20is\x20granted\x20too\x20broadly,\x20any\x20156-holder\x20can\x20sweep\x20receivables.\x20(Note:\x20owner_receive\x20does\x20NOT\x20directly\x20drain\x20balance\x20—\x20'+'only\x20Receiving<K>\x20envelopes\x20sent\x20to\x20the\x20Reward\x27s\x20id.)','affected_stakeholders':['owner','service_provider'],'scenario':'Compromised\x20156-holder\x20sweeps\x20receivables\x20before\x20owner','mitigation':'1)\x20Grant\x20156\x20only\x20to\x20the\x20Permission\x20owner\x20address.\x202)\x20Reconcile\x20Receiving<K>\x20inflows\x20vs\x20owner_receive\x20events.','evidence':'owner_receive\x20set','auto_fixable':![]};}},R_R_3_03={'id':'R-R-3-03','category':'permission','trigger':'guard_expiration_time_add\x20(155)\x20—\x20can\x20permanently\x20lock\x20guard\x20additions','check':a=>{if(a['guard_expiration_time']===undefined)return null;if(a['guard_expiration_time']!==null&&a['current_clock_ms']!==undefined){const b=a['guard_expiration_time']-a['current_clock_ms'],c=0x16d*0x18*0x3c*0x3c*0x3e8;if(b>c)return{'id':'R-R-3-03','level':'MEDIUM','category':'permission','title':'guard_expiration_time_add\x20locks\x20guard\x20additions\x20for\x20>\x201\x20year','description':'Setting\x20guard_not_added_expiration_time\x20to\x20'+a['guard_expiration_time']+'\x20'+'(>\x201\x20year\x20from\x20now)\x20effectively\x20freezes\x20the\x20guard\x20list.\x20While\x20this\x20is\x20sometimes\x20intentional\x20'+'(milestone\x20rewards),\x20it\x20cannot\x20be\x20undone\x20without\x20setting\x20a\x20new\x20time\x20(which\x20itself\x20requires\x20155\x20permission).','affected_stakeholders':['owner'],'scenario':'Operator\x20sets\x20excessively\x20long\x20lock\x20period\x20by\x20mistake','mitigation':'Confirm\x20intent.\x20If\x20wrong,\x20call\x20guard_expiration_time_add\x20again\x20with\x20a\x20shorter\x20time\x20(must\x20be\x20≥\x20current\x20clock\x20per\x20E_GUARD_LOCKED_TIME_NOT_INCREASING).','evidence':'lock_until='+a['guard_expiration_time']+',\x20clock='+a['current_clock_ms'],'auto_fixable':![]};}return null;}},R_R_4_01={'id':'R-R-4-01','category':'lifecycle','trigger':'claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now\x20(E_GUARD_EXPIRED)','check':a=>{if(!a['claim'])return null;return null;}},R_R_4_02={'id':'R-R-4-02','category':'lifecycle','trigger':'claim:\x20balance\x20<\x20amount\x20(E_INSUFFICIENT_BALANCE)','check':a=>{if(!a['claim'])return null;if(a['current_balance']!==undefined&&a['current_guard_count']!==undefined){const b=BigInt(a['current_balance']);if(b===0x0n)return{'id':'R-R-4-02','level':'HIGH','category':'lifecycle','title':'claim\x20on\x20Reward\x20with\x20zero\x20balance','description':'Reward\x20balance\x20is\x200.\x20Any\x20claim\x20will\x20abort\x20with\x20E_INSUFFICIENT_BALANCE\x20(6).\x20'+'Owner\x20must\x20coin_add\x20(153)\x20or\x20receive\x20(154)\x20to\x20replenish.','affected_stakeholders':['claimer','owner'],'scenario':'Marketing\x20campaign\x20budget\x20exhausted\x20but\x20guards\x20remain\x20active','mitigation':'1)\x20Owner:\x20coin_add\x20to\x20replenish.\x202)\x20Owner:\x20guard_remove_expired\x20+\x20guard_expiration_time_add\x20to\x20deactivate.\x203)\x20Claimer:\x20wait\x20for\x20replenishment.','evidence':'balance=0','related_move_error':'E_INSUFFICIENT_BALANCE\x20(6)','auto_fixable':![]};}return null;}},R_R_4_03={'id':'R-R-4-03','category':'lifecycle','trigger':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration\x20(E_GUARD_LOCKED_TIME)','check':a=>{if(!a['guard_add']||a['guard_add']['length']===0x0)return null;if(a['current_guard_not_added_expiration_time']==null)return null;if(a['current_clock_ms']===undefined)return null;if(a['current_clock_ms']<=a['current_guard_not_added_expiration_time'])return{'id':'R-R-4-03','level':'HIGH','category':'lifecycle','title':'guard_add\x20blocked\x20by\x20time-lock\x20(guard_not_added_expiration_time)','description':'guard_not_added_expiration_time\x20is\x20Some('+a['current_guard_not_added_expiration_time']+');\x20'+('clock\x20is\x20'+a['current_clock_ms']+'.\x20Move\x20asserts\x20clock\x20>\x20expiration_time\x20')+'(E_GUARD_LOCKED_TIME\x20=\x2010).','affected_stakeholders':['owner'],'scenario':'Trying\x20to\x20add\x20guards\x20during\x20a\x20flash\x20sale\x20lock\x20period','mitigation':'1)\x20Wait\x20until\x20clock\x20>\x20expiration_time.\x202)\x20Call\x20guard_expiration_time_add\x20(155)\x20to\x20extend\x20the\x20lock\x20(cannot\x20shorten\x20below\x20current\x20clock).','evidence':'lock_until='+a['current_guard_not_added_expiration_time']+',\x20clock='+a['current_clock_ms'],'related_move_error':'E_GUARD_LOCKED_TIME\x20(10)','auto_fixable':![]};return null;}},R_R_4_04={'id':'R-R-4-04','category':'lifecycle','trigger':'guard_expiration_time_add\x20regression\x20(new\x20time\x20<\x20current\x20clock)','check':a=>{if(a['guard_expiration_time']===undefined)return null;if(a['guard_expiration_time']===null)return null;if(a['current_clock_ms']===undefined)return null;if(a['guard_expiration_time']<=a['current_clock_ms'])return{'id':'R-R-4-04','level':'HIGH','category':'lifecycle','title':'guard_expiration_time_add:\x20new\x20time\x20must\x20be\x20in\x20the\x20future','description':'New\x20guard_not_added_expiration_time\x20=\x20'+a['guard_expiration_time']+'\x20≤\x20clock\x20'+a['current_clock_ms']+'.\x20'+'Move\x20aborts\x20with\x20E_GUARD_LOCKED_TIME_INVALID\x20(11).','affected_stakeholders':['owner'],'scenario':'Operator\x20sets\x20lock\x20time\x20in\x20the\x20past\x20by\x20mistake','mitigation':'Set\x20guard_expiration_time\x20to\x20a\x20value\x20>\x20'+a['current_clock_ms']+'\x20(current\x20clock).','evidence':'new_time='+a['guard_expiration_time']+',\x20clock='+a['current_clock_ms'],'related_move_error':'E_GUARD_LOCKED_TIME_INVALID\x20(11)','auto_fixable':!![]};return null;}},R_R_5_01={'id':'R-R-5-01','category':'cross_object','trigger':'claim:\x20guard\x20not\x20found\x20in\x20self.guards\x20(E_GUARD_NOT_FOUND)','check':a=>{if(!a['claim'])return null;if(!a['target_guard_addresses'])return null;if(!a['target_guard_addresses']['includes'](a['claim']))return{'id':'R-R-5-01','level':'HIGH','category':'cross_object','title':'claim:\x20supplied\x20guard\x20not\x20in\x20Reward.guards','description':'Guard\x20'+a['claim']+'\x20is\x20not\x20in\x20the\x20Reward\x27s\x20guard\x20list.\x20Move\x20iterates\x20self.guards\x20and\x20'+'aborts\x20with\x20E_GUARD_NOT_FOUND\x20(7)\x20if\x20no\x20match.','affected_stakeholders':['claimer'],'scenario':'Claimer\x20uses\x20the\x20wrong\x20Guard\x20object\x20(typo\x20or\x20wrong\x20Service)','mitigation':'1)\x20Verify\x20the\x20Guard\x20address\x20via\x20query\x20ObjectReward.\x202)\x20Ensure\x20the\x20Guard\x20was\x20added\x20via\x20guard_add\x20(152).','evidence':'claim_guard='+a['claim']+',\x20known_guards='+a['target_guard_addresses']['join'](','),'related_move_error':'E_GUARD_NOT_FOUND\x20(7)','auto_fixable':![]};return null;}},R_R_5_02={'id':'R-R-5-02','category':'cross_object','trigger':'coin_add:\x20coin\x20type\x20T\x20mismatch\x20with\x20Reward<T>','check':a=>{if(!a['coin_add']||!a['reward_type'])return null;if(a['coin_add']['coin_type']!==a['reward_type'])return{'id':'R-R-5-02','level':'CRITICAL','category':'cross_object','title':'coin_add:\x20coin\x20type\x20T\x20mismatch','description':'Reward\x20is\x20Reward<'+a['reward_type']+'>\x20but\x20coin_add\x20passes\x20Coin<'+a['coin_add']['coin_type']+'>.\x20'+'Move\x20type-system\x20mismatch;\x20SDK\x20W_ERROR\x20in\x20operate().','affected_stakeholders':['owner'],'scenario':'Operator\x20tries\x20to\x20deposit\x20wrong\x20coin\x20type\x20(e.g.\x20USDC\x20into\x20a\x20WOW\x20Reward)','mitigation':'Use\x20Coin<'+a['reward_type']+'>\x20for\x20coin_add.','evidence':'reward_type='+a['reward_type']+',\x20coin_type='+a['coin_add']['coin_type'],'auto_fixable':![]};return null;}},R_R_5_03={'id':'R-R-5-03','category':'cross_object','trigger':'receive:\x20Payment<T>\x20type\x20mismatch\x20with\x20Reward<T>','check':a=>{if(!a['receive']||!a['reward_type'])return null;if(a['receive']['token_type']!==a['reward_type'])return{'id':'R-R-5-03','level':'CRITICAL','category':'cross_object','title':'receive:\x20Payment\x20token_type\x20mismatch','description':'Reward\x20is\x20Reward<'+a['reward_type']+'>\x20but\x20receive\x27s\x20Payment<CoinWrapper<'+a['receive']['token_type']+'>>.\x20'+'SDK\x20W_ERROR\x20in\x20operate().','affected_stakeholders':['owner'],'scenario':'Operator\x20tries\x20to\x20receive\x20wrong-token\x20Payment','mitigation':'Use\x20Payment<'+a['reward_type']+'>\x20for\x20receive.','evidence':'reward_type='+a['reward_type']+',\x20payment_token='+a['receive']['token_type'],'auto_fixable':![]};return null;}},R_R_6_01={'id':'R-R-6-01','category':'business_semantic','trigger':'intent\x20mentions\x20praise/positive-review\x20but\x20Guard\x20checks\x20non-wonder\x20progress\x20node','check':a=>{if(!a['user_intent_phrases']||a['user_intent_phrases']['length']===0x0)return null;if(!a['guard_expected_progress_state'])return null;const b=a['user_intent_phrases']['join']('\x20')['toLowerCase'](),c=['praise','wonder','thumbs_up','positive\x20review','satisfaction\x20reward','praise\x20reward'],d=c['some'](f=>b['includes'](f['toLowerCase']()));if(!d)return null;if(a['machine_has_wonder_node']===![])return null;const e=a['guard_expected_progress_state'];if(e!=='wonder')return{'id':'R-R-6-01','level':'HIGH','category':'business_semantic','title':'Guard\x20checks\x20progress==\x22'+e+'\x22\x20but\x20intent\x20indicates\x20praise\x20reward\x20(wonder\x20node)','description':'User\x20intent\x20mentions\x20praise/positive-review/wonder,\x20which\x20maps\x20to\x20the\x20\x27wonder\x27\x20progress\x20node\x20'+'(customer\x20gives\x20positive\x20review\x20AFTER\x20service\x20completion).\x20But\x20the\x20Guard\x27s\x20table\x20bakes\x20'+('expected\x20state=\x22'+e+'\x22,\x20allowing\x20reward\x20claim\x20at\x20the\x20wrong\x20lifecycle\x20stage.\x20')+'This\x20violates\x20the\x20business\x20semantics:\x20\x22praise\x20reward\x22\x20should\x20only\x20be\x20claimable\x20AFTER\x20the\x20'+'customer\x20advances\x20to\x20the\x20\x27wonder\x27\x20node,\x20not\x20before.\x20'+'Guard\x20is\x20immutable\x20—\x20fixing\x20this\x20requires\x20creating\x20a\x20new\x20Guard\x20+\x20Reward\x20pair.','affected_stakeholders':['owner','service_provider','claimer'],'scenario':'Designer\x20builds\x20Guard\x20checking\x20\x27completed\x27\x20instead\x20of\x20\x27wonder\x27\x20for\x20a\x20praise\x20reward','mitigation':'Set\x20the\x20Guard\x20table\x27s\x20expected\x20progress\x20state\x20to\x20\x27wonder\x27\x20(the\x20positive-review\x20node).\x20'+'The\x20correct\x20pattern:\x20ordered\x20→\x20in_service\x20→\x20completed\x20→\x20wonder\x20(praise)\x20triggers\x20reward\x20claim.\x20'+'Reference:\x20reward-templates.ts\x20wonder_praise\x20template.','evidence':'intent=\x22'+b+'\x22,\x20expected_state=\x22'+e+'\x22,\x20expected_wonder=true','auto_fixable':![]};return null;}},R_R_6_02={'id':'R-R-6-02','category':'business_semantic','trigger':'Guard\x20checks\x20wonder\x20node\x20but\x20intent\x20does\x20not\x20mention\x20praise','check':a=>{if(!a['user_intent_phrases']||a['user_intent_phrases']['length']===0x0)return null;if(!a['guard_expected_progress_state'])return null;if(a['guard_expected_progress_state']!=='wonder')return null;const b=a['user_intent_phrases']['join']('\x20')['toLowerCase'](),c=['praise','wonder','thumbs_up','positive\x20review','satisfaction\x20reward','praise\x20reward'],d=c['some'](e=>b['includes'](e['toLowerCase']()));if(d)return null;return{'id':'R-R-6-02','level':'MEDIUM','category':'business_semantic','title':'Guard\x20checks\x20wonder\x20node\x20but\x20intent\x20does\x20not\x20mention\x20praise','description':'Guard\x27s\x20expected\x20progress\x20state\x20is\x20\x22wonder\x22\x20(positive-review\x20node),\x20but\x20the\x20user\x20intent\x20'+'does\x20not\x20mention\x20any\x20praise/positive-review\x20keyword.\x20This\x20may\x20be\x20a\x20copy-paste\x20from\x20a\x20wonder_praise\x20'+'template\x20without\x20adjusting\x20the\x20Guard\x20for\x20the\x20actual\x20business\x20semantics.\x20If\x20this\x20is\x20a\x20'+'general\x20feedback\x20reward\x20(wonder_feedback),\x20this\x20is\x20fine.\x20Otherwise,\x20verify\x20the\x20node\x20choice.','affected_stakeholders':['owner'],'scenario':'Designer\x20copies\x20wonder_praise\x20template\x20but\x20actually\x20wants\x20a\x20completion-based\x20reward','mitigation':'Verify:\x20if\x20intent\x20is\x20praise\x20reward,\x20add\x20\x27praise/positive\x20review\x27\x20to\x20description.\x20'+'If\x20intent\x20is\x20completion-based\x20reward,\x20change\x20Guard\x20to\x20check\x20\x27completed\x27\x20node.','evidence':'expected_state=\x22wonder\x22,\x20intent=\x22'+b+'\x22\x20(no\x20praise\x20keyword)','auto_fixable':![]};}},R_R_7_01={'id':'R-R-7-01','category':'fund_recovery','trigger':'coin_add/receive\x20(deposit)\x20or\x20guard_add\x20without\x20an\x20owner\x20fund-recovery\x20escape\x20guard','check':a=>{const b=!!(a['coin_add']||a['receive']),c=a['guard_add']??[];if(!b&&c['length']===0x0)return null;const d=c['some'](e=>{const f=!!e['recipient']&&typeof e['recipient']==='object'&&'Signer'in e['recipient'],h=String(e['amount']?.['type'])==='GuardU64Identifier';return f&&h;});if(d)return null;return{'id':'R-R-7-01','level':b?'MEDIUM':'LOW','category':'fund_recovery','title':'No\x20owner\x20fund-recovery\x20escape\x20guard\x20on\x20this\x20Reward','description':'claim()\x20is\x20the\x20ONLY\x20exit\x20from\x20the\x20Reward\x27s\x20balance\x20field\x20(reward.move),\x20and\x20none\x20of\x20the\x20guards\x20being\x20'+'configured\x20is\x20an\x20owner\x20escape\x20hatch\x20—\x20any\x20unclaimed\x20remainder\x20stays\x20locked\x20forever.\x20Note:\x20owner_receive\x20'+'(op\x20156)\x20does\x20NOT\x20help\x20here:\x20it\x20only\x20extracts\x20objects\x20the\x20Reward\x20RECEIVED\x20via\x20transfer\x20'+'(Receiving<CoinWrapper<K>>\x20or\x20NFT-like\x20objects)\x20to\x20the\x20Permission\x20owner\x20and\x20never\x20touches\x20balance;\x20'+'receive\x20(op\x20154)\x20is\x20what\x20joins\x20payments\x20into\x20balance.\x20This\x20is\x20a\x20configuration\x20gap,\x20not\x20a\x20contract\x20defect.','affected_stakeholders':['owner'],'scenario':'A\x20marketing\x20Reward\x20is\x20fully\x20consumed\x20by\x20guards,\x20the\x20campaign\x20ends\x20with\x20a\x20residual\x20balance,\x20and\x20the\x20'+'merchant\x20has\x20no\x20guard\x20that\x20lets\x20them\x20reclaim\x20it.','mitigation':'Add\x20an\x20escape\x20guard\x20alongside\x20the\x20other\x20guards:\x20'+'(1)\x20Guard:\x20logic_and(logic_equal(query(1002\x20permission.owner\x20[permission_address]),\x20Signer),\x20'+'logic_greater_equal(Clock,\x20<unlock_time>))\x20—\x20verifies\x20the\x20tx\x20sender\x20is\x20the\x20live\x20Permission\x20owner,\x20with\x20'+'the\x20Clock\x20comparison\x20acting\x20as\x20the\x20lock\x20period\x20(e.g.\x2030\x20days);\x20'+'(2)\x20RewardGuard\x20entry:\x20recipient=Signer,\x20amount=GuardU64Identifier(u8\x20submission\x20mark),\x20'+'expiration_time=unlock_time\x20+\x20claim\x20window\x20(or\x20None)\x20—\x20remember\x20the\x20contract\x20asserts\x20'+'clock\x20<=\x20expiration_time,\x20i.e.\x20expiration\x20is\x20the\x20last\x20claimable\x20moment,\x20not\x20the\x20unlock\x20moment;\x20'+'(3)\x20after\x20unlock\x20the\x20owner\x20claims\x20by\x20submitting\x20the\x20full\x20remaining\x20balance\x20to\x20recover\x20100%.','evidence':'deposit='+b+',\x20guard_add='+c['length']+',\x20'+'escape=false\x20(no\x20entry\x20with\x20Signer\x20recipient\x20+\x20GuardU64Identifier\x20amount)','auto_fixable':![]};}},ALL_RULES=[R_R_1_01,R_R_1_02,R_R_1_03,R_R_2_01,R_R_2_02,R_R_2_03,R_R_2_04,R_R_2_05,R_R_3_01,R_R_3_02,R_R_3_03,R_R_4_01,R_R_4_02,R_R_4_03,R_R_4_04,R_R_5_01,R_R_5_02,R_R_5_03,R_R_6_01,R_R_6_02,R_R_7_01];export const REWARD_RISK_VERSION='1.1.0';export function getAllRewardRiskRules(){return[...ALL_RULES];}export function assessRewardRisks(a){const b=[];for(const f of ALL_RULES){const g=f['check'](a);if(g)b['push'](g);}const c=b['length']===0x0?'LOW':b['some'](h=>h['level']==='CRITICAL')?'CRITICAL':b['some'](h=>h['level']==='HIGH')?'HIGH':b['some'](h=>h['level']==='MEDIUM')?'MEDIUM':'LOW',d={};for(const h of b){d[h['category']]=(d[h['category']]??0x0)+0x1;}const e={};for(const i of b){for(const j of i['affected_stakeholders']){if(!e[j])e[j]=[];e[j]['push'](i['id']+':\x20'+i['mitigation']);}}return{'summary':'Assessed\x20'+b['length']+'\x20risk(s)\x20across\x20'+Object['keys'](d)['length']+'\x20categories','risks':b,'overall_risk':c,'risks_by_category':d,'stakeholder_advice':e,'needs_human_review':b['some'](k=>k['level']==='CRITICAL'||k['level']==='HIGH')};}
@@ -0,0 +1,43 @@
1
+ import { type NodeAnalyzer } from "../graph/onchain/index.js";
2
+ export declare const MACHINE_RULE_NODE_ANALYZER_ID = "MK1";
3
+ export declare const machineRuleNodeAnalyzer: NodeAnalyzer;
4
+ export declare const GUARD_RULE_NODE_ANALYZER_ID = "GD1";
5
+ export declare const guardRuleNodeAnalyzer: NodeAnalyzer;
6
+ export declare const PERMISSION_RULE_NODE_ANALYZER_ID = "PM1";
7
+ export declare const permissionRuleNodeAnalyzer: NodeAnalyzer;
8
+ export declare const ALLOCATION_RULE_NODE_ANALYZER_ID = "AL1";
9
+ export declare function allocationPackRisks(puzzle: unknown): unknown[];
10
+ export declare const allocationRuleNodeAnalyzer: NodeAnalyzer;
11
+ export declare const TREASURY_RULE_NODE_ANALYZER_ID = "TR1";
12
+ export declare const treasuryRuleNodeAnalyzer: NodeAnalyzer;
13
+ export declare const ARBITRATION_RULE_NODE_ANALYZER_ID = "AR1";
14
+ export declare const arbitrationRuleNodeAnalyzer: NodeAnalyzer;
15
+ export declare const ARB_L3_RULE_NODE_ANALYZER_ID = "AR3";
16
+ export declare const arbL3RuleNodeAnalyzer: NodeAnalyzer;
17
+ export declare const REWARD_RULE_NODE_ANALYZER_ID = "RW1";
18
+ export declare const rewardRuleNodeAnalyzer: NodeAnalyzer;
19
+ export declare const PROGRESS_RULE_NODE_ANALYZER_ID = "PR1";
20
+ export declare const progressRuleNodeAnalyzer: NodeAnalyzer;
21
+ export declare const ORDER_RULE_NODE_ANALYZER_ID = "OR1";
22
+ export declare const orderRuleNodeAnalyzer: NodeAnalyzer;
23
+ export declare const CONTACT_RULE_NODE_ANALYZER_ID = "CT1";
24
+ export declare const contactRuleNodeAnalyzer: NodeAnalyzer;
25
+ export declare const REPOSITORY_RULE_NODE_ANALYZER_ID = "RP1";
26
+ export declare const repositoryRuleNodeAnalyzer: NodeAnalyzer;
27
+ export declare const DEMAND_RULE_NODE_ANALYZER_ID = "DM1";
28
+ export declare const demandRuleNodeAnalyzer: NodeAnalyzer;
29
+ export declare const PAYMENT_RULE_NODE_ANALYZER_ID = "PY1";
30
+ export declare const paymentRuleNodeAnalyzer: NodeAnalyzer;
31
+ export declare const PROOF_RULE_NODE_ANALYZER_ID = "PF1";
32
+ export declare const proofRuleNodeAnalyzer: NodeAnalyzer;
33
+ export declare const RESOURCE_RULE_NODE_ANALYZER_ID = "RS1";
34
+ export declare const resourceRuleNodeAnalyzer: NodeAnalyzer;
35
+ export declare const PERSONAL_RULE_NODE_ANALYZER_ID = "PS1";
36
+ export declare const personalRuleNodeAnalyzer: NodeAnalyzer;
37
+ export declare const UTIL_RULE_NODE_ANALYZER_ID = "UT1";
38
+ export declare const utilRuleNodeAnalyzer: NodeAnalyzer;
39
+ export declare const REGISTRAR_RULE_NODE_ANALYZER_ID = "RG1";
40
+ export declare const registrarRuleNodeAnalyzer: NodeAnalyzer;
41
+ export declare const BRIDGE_RULE_NODE_ANALYZER_ID = "BR1";
42
+ export declare const bridgeRuleNodeAnalyzer: NodeAnalyzer;
43
+ export declare const RULE_NODE_ANALYZERS: NodeAnalyzer[];
@@ -0,0 +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];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{describe,expect,it}from'vitest';import{readFileSync}from'node:fs';import{fileURLToPath}from'node:url';import{dirname,join}from'node:path';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'../graph/onchain/dataplane.js';import{expandTopology}from'../graph/onchain/expand.js';import{buildProposalGraph,buildViewport,runNodeAnalyzers}from'../graph/onchain/index.js';import{RISK_CASES}from'./baselines/risk-cases.js';import{RULE_NODE_ANALYZERS}from'./rule-node-analyzers.js';import{recipientAuditRisks}from'./rule-outcome.js';const REGISTRY_PACKS=new Set(['service','machine','guard','permission','allocation','treasury','arbitration','arb','reward','progress','order','contact','repository','demand','payment','proof','resource','personal','util','registrar','bridge']),CASES=RISK_CASES['filter'](a=>REGISTRY_PACKS['has'](a['pack'])),here=dirname(fileURLToPath(import.meta.url)),SNAPSHOT=JSON['parse'](readFileSync(join(here,'baselines','risk-baselines.json'),'utf-8'));function keysOf(a){return a['map'](b=>b['id']+':'+b['level']['toUpperCase']())['sort']();}async function migratedKeys(a,b){const d={[a['objectType']]:{'puzzle':b,'completeness':{},'missing_dimensions':[]}},e=await buildProposalGraph(d,{'network':ENTRYPOINT['Testnet']}),f=buildViewport(e,e['seed'],'neutral'),h=runNodeAnalyzers(f,RULE_NODE_ANALYZERS);return h['filter'](i=>i['ruleId']!=null)['map'](i=>i['ruleId']+':'+i['severity']['toUpperCase']())['sort']();}describe('rule-pack\x20node\x20analyzers\x20—\x20batch\x20A+B+C\x20parity\x20(T23/T24/T25)',()=>{it['each'](CASES['map'](a=>[a['pack'],a]))('TR-23.1/TR-24.1/TR-25.1\x20%s:\x20empty\x20round\x20reproduces\x20the\x20Task\x202\x20baseline',async(a,b)=>{const d=SNAPSHOT[a];expect(d)['toBeDefined'](),expect(await migratedKeys(b,b['empty']))['toEqual'](keysOf(d['empty']));}),it['each'](CASES['map'](a=>[a['pack'],a]))('TR-23.1/TR-24.1/TR-25.1\x20%s:\x20trigger\x20round\x20reproduces\x20the\x20Task\x202\x20baseline',async(a,b)=>{const d=SNAPSHOT[a];expect(d)['toBeDefined']();const e=await migratedKeys(b,b['trigger']);if(a==='allocation'){const f=e['filter'](h=>h['startsWith']('R-A-'));expect(f)['toEqual'](keysOf(d['trigger']));const g=e['filter'](h=>h['startsWith']('RC-FIND-'));expect(g['length'])['toBeGreaterThan'](0x0),expect(g)['toEqual'](recipientAuditRisks(b['trigger'])['map'](h=>{const i=h??{};return String(i['id'])+':'+String(i['level'])['toUpperCase']();})['sort']());return;}expect(e)['toEqual'](keysOf(d['trigger']));});}),describe('rule-pack\x20node\x20analyzers\x20—\x20on-chain\x20fixtures\x20(T23/T24/T25)',()=>{it('TR-23.2\x20SR1\x20state\x20rules\x20fire\x20on\x20a\x20fetched\x20on-chain\x20Service\x20through\x20the\x20unified\x20list',async()=>{const a='0x'+'14'+'cd'['repeat'](0x1f),b=new FakeDataPlane({'objects':new Map([[a['toLowerCase'](),{'object':a,'type':'Service','data':{'bPublished':!![],'bPaused':!![],'compensation_fund':'9','arbitrations':[]}}]]),'keyedFields':new Map(),'tables':new Map()}),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':a,'edges':{'tableEdges':['machine.node']}}),d=buildViewport(c,a['toLowerCase'](),'neutral'),e=runNodeAnalyzers(d,RULE_NODE_ANALYZERS),f=e['filter'](h=>h['id']['startsWith']('SR1:'));expect(f)['toHaveLength'](0x2),expect(f['every'](h=>h['detail']['includes']('R-S-4-05')||h['detail']['includes']('R-S-5-05')))['toBe'](!![]),expect(f['every'](h=>h['ruleId']===undefined))['toBe'](!![]),expect(f['every'](h=>h['source']===undefined))['toBe'](!![]),expect(e['filter'](h=>h['id']['startsWith']('MK1:')||h['id']['startsWith']('GD1:')||h['id']['startsWith']('PM1:')||h['id']['startsWith']('AL1:')||h['id']['startsWith']('TR1:')||h['id']['startsWith']('AR1:')||h['id']['startsWith']('AR3:')||h['id']['startsWith']('RW1:')||h['id']['startsWith']('PR1:')||h['id']['startsWith']('OR1:')||h['id']['startsWith']('CT1:')||h['id']['startsWith']('RP1:')||h['id']['startsWith']('DM1:')||h['id']['startsWith']('PY1:')||h['id']['startsWith']('PF1:')||h['id']['startsWith']('RS1:')||h['id']['startsWith']('PS1:')||h['id']['startsWith']('UT1:')||h['id']['startsWith']('RG1:')||h['id']['startsWith']('BR1:')))['toEqual']([]);}),it['each']([['Machine','15',{'pairs':[]}],['Guard','19',{'description':'chain\x20guard'}],['Permission','10',{'description':'chain\x20permission'}],['Allocation','18',{'description':'chain\x20allocation'}],['Treasury','1c',{'description':'chain\x20treasury'}],['Arb','11',{'description':'chain\x20arb'}],['Reward','12',{'description':'chain\x20reward'}],['Progress','13',{'description':'chain\x20progress'}],['Order','14',{'description':'chain\x20order'}],['Contact','1d',{'description':'chain\x20contact'}],['Repository','1e',{'description':'chain\x20repository'}],['Demand','1f',{'description':'chain\x20demand'}],['Payment','16',{'description':'chain\x20payment'}],['Resource','17',{'description':'chain\x20resource'}],['Proof','1a',{'description':'chain\x20proof'}],['EntityRegistrar','1b',{'description':'chain\x20registrar'}]])('TR-23.2\x20on-chain\x20%s:\x20packs\x20without\x20an\x20on-chain\x20projection\x20run\x20zero\x20rules\x20(honest\x20zero)',async(a,b,c)=>{const d='0x'+b+'ef'['repeat'](0x1f),e={'object':d,'type':a,'data':c},f=new FakeDataPlane({'objects':new Map([[d['toLowerCase'](),e]]),'keyedFields':new Map(),'tables':new Map()}),h=await expandTopology(f,{'network':ENTRYPOINT['Mainnet'],'seed':d,'edges':{'tableEdges':['machine.node']}});expect(h['nodes']['get'](d['toLowerCase']())?.['state'])['toBe']('fetched');const i=buildViewport(h,d['toLowerCase'](),'neutral');expect(runNodeAnalyzers(i,RULE_NODE_ANALYZERS))['toEqual']([]);});}),describe('rule-pack\x20node\x20analyzers\x20—\x20external\x20fact\x20nodes\x20(TR-25.1)',()=>{const a=CASES['find'](d=>d['pack']==='bridge'),b=CASES['find'](d=>d['pack']==='payment');it('TR-25.1\x20bridge\x20synthesizes\x20a\x20Bridge-typed\x20EXTERNAL\x20fact\x20node;\x20findings\x20stamp\x20source\x20external',async()=>{const c=await buildProposalGraph({'bridge':{'puzzle':a['trigger'],'completeness':{},'missing_dimensions':[]}},{'network':ENTRYPOINT['Testnet']}),d=c['nodes']['get']('proposal::bridge');expect(d?.['kind'])['toBe']('object'),expect(d?.['objectType'])['toBe']('Bridge'),expect(d?.['proposal']?.['provenance'])['toBe']('external');const e=buildViewport(c,'proposal::bridge','neutral'),f=runNodeAnalyzers(e,RULE_NODE_ANALYZERS)['filter'](h=>h['id']['startsWith']('BR1:'));expect(f['length'])['toBeGreaterThan'](0x0),expect(f['every'](h=>h['source']==='external'))['toBe'](!![]);}),it('TR-25.1\x20default\x20proposal\x20nodes\x20stay\x20intent\x20nodes\x20stamped\x20source\x20proposal',async()=>{const c=await buildProposalGraph({'payment':{'puzzle':b['trigger'],'completeness':{},'missing_dimensions':[]}},{'network':ENTRYPOINT['Testnet']}),d=c['nodes']['get']('proposal::payment');expect(d?.['objectType'])['toBe']('Payment'),expect(d?.['proposal']?.['provenance'])['toBeUndefined']();const e=buildViewport(c,'proposal::payment','neutral'),f=runNodeAnalyzers(e,RULE_NODE_ANALYZERS)['filter'](h=>h['id']['startsWith']('PY1:'));expect(f['length'])['toBeGreaterThan'](0x0),expect(f['every'](h=>h['source']==='proposal'))['toBe'](!![]);});});
@@ -0,0 +1,5 @@
1
+ import type { Confidence, NodeRuleOutcome, TopoNode } from "../graph/onchain/index.js";
2
+ export declare function riskToOutcome(risk: unknown, confidence: Confidence, carryNative?: boolean): NodeRuleOutcome;
3
+ export declare function safeRunPack(fn: (ctx: any) => unknown, ctx: unknown): unknown[];
4
+ export declare function puzzlePayloadOf(node: TopoNode): Record<string, unknown> | undefined;
5
+ export declare function recipientAuditRisks(puzzle: unknown): unknown[];
@@ -0,0 +1 @@
1
+ import{analyzeRecipientConstraints}from'./recipient-constraint.js';function severityOf(a){const b=String(a??'')['toUpperCase']();if(b==='CRITICAL')return'critical';if(b==='HIGH')return'high';if(b==='MEDIUM')return'medium';if(b==='LOW')return'low';return'info';}const STAKEHOLDER_ROLE={'owner':'merchant','provider':'merchant','admin':'merchant','customer':'buyer','user':'buyer','buyer':'buyer','arbitrator':'arbitrator','entity':'system','system':'system'};function stakeholderRoles(a){if(!Array['isArray'](a))return['neutral','merchant'];const b=[...new Set(a['map'](c=>STAKEHOLDER_ROLE[String(c?.['toLowerCase']?.()??c)])['filter'](Boolean))];return b['length']>0x0?b:['neutral','merchant'];}export function riskToOutcome(a,b,c=![]){const d=a??{},e=d['id']??d['risk_rule_id']??d['rule_id'],f=d['title']??d['message']??d['description']??d['trigger']??d['name'],g=d['mitigation']??d['fix_suggestion']??d['suggestion']??d['recommendation'],h=d['evidence']!=null?String(d['evidence']):'',i=[d['detail'],d['description'],d['explanation']]['map'](l=>typeof l==='string'?l:'')['find'](l=>l['length']>0x0)??'',j=[i,h?'Evidence:\x20'+h:'']['filter'](l=>l['length']>0x0)['join']('\x20—\x20'),k=e!=null?String(e):'?';return{'severity':severityOf(d['level']??d['severity']),'title':(typeof f==='string'&&f?f:'Risk\x20rule\x20'+k)+'\x20('+k+')','detail':j||'Risk\x20rule\x20'+k+'\x20triggered.','suggestion':typeof g==='string'?g:'','roles':stakeholderRoles(d['affected_stakeholders']),'confidence':b,'ruleId':k,...h?{'evidence':h}:{},...c?{'nativeRisk':a}:{}};}export function safeRunPack(a,b){try{const c=a(b??{});if(Array['isArray'](c))return c;if(c&&typeof c==='object'){const d=c['risks'];if(Array['isArray'](d))return d;const e=c['detected_risks'];if(Array['isArray'](e))return e;}return[];}catch{return[];}}export function puzzlePayloadOf(a){if(!a['proposal'])return undefined;const b=a['raw'],c=b?.['data']??b;return c!=null&&typeof c==='object'?c:undefined;}export function recipientAuditRisks(a){try{const b=a??{},c=b['allocators_config'],d=c?.['allocators'];if(!Array['isArray'](d)||d['length']===0x0)return[];const e=analyzeRecipientConstraints({'trigger_source':b['trigger_source']??'service_order_allocators',...typeof b['host_service']==='string'?{'host_service':b['host_service']}:{},...typeof b['allocation']==='string'?{'allocation':b['allocation']}:{},'allocators':d['map'](f=>({'guard':f['guard'],'sharing':f['sharing']??[]})),'guards':b['guards']??{}});return e['findings']['map'](g=>({'id':g['code'],'level':g['resolution_required']&&g['severity']==='MEDIUM'?'HIGH':g['severity'],'title':g['title'],'description':g['explanation'],'mitigation':g['mitigation'],'evidence':g['evidence_paths']['join'](',')}));}catch{return[];}}
@@ -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=e=>{if(typeof e==='number')return String(e);if(typeof e==='string'&&e!=='')return e;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?.['revenue']?.[0x0]?.['amount']?.['balance'],a?.['deposit']?.['coin']?.['balance'],a?.['withdraw']?.['amount']?.['fixed']];for(const e of d){const f=b(e);if(f!==null)return f;}if(Array['isArray'](a?.['guard_add']))for(const h of a['guard_add']){if(h?.['amount']?.['type']==='Fixed'){const i=b(h['amount']['value']);if(i!==null)return i;}}for(const j of[a?.['allocators'],a?.['order_allocators']]){if(!j||typeof j!=='object')continue;const k=b(j['threshold']);if(k!==null)return k;for(const l of Array['isArray'](j['allocators'])?j['allocators']:[]){if(Array['isArray'](l?.['sharing']))for(const n of l['sharing']){if(n?.['mode']==='Amount'){const o=b(n['sharing']);if(o!==null)return o;}}const m=b(l?.['max']);if(m!==null)return m;}}return null;}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','trust_score'],'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 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=e=>{if(typeof e==='number')return String(e);if(typeof e==='string'&&e!=='')return e;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?.['revenue']?.[0x0]?.['amount']?.['balance'],a?.['deposit']?.['coin']?.['balance'],a?.['withdraw']?.['amount']?.['fixed']];for(const e of d){const f=b(e);if(f!==null)return f;}if(Array['isArray'](a?.['guard_add']))for(const h of a['guard_add']){if(h?.['amount']?.['type']==='Fixed'){const i=b(h['amount']['value']);if(i!==null)return i;}}for(const j of[a?.['allocators'],a?.['order_allocators']]){if(!j||typeof j!=='object')continue;const k=b(j['threshold']);if(k!==null)return k;for(const l of Array['isArray'](j['allocators'])?j['allocators']:[]){if(Array['isArray'](l?.['sharing']))for(const n of l['sharing']){if(n?.['mode']==='Amount'){const o=b(n['sharing']);if(o!==null)return o;}}const m=b(l?.['max']);if(m!==null)return m;}}return null;}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;