@wowok/agent-mcp 3.4.0 → 3.4.1

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 (405) hide show
  1. package/README.md +8 -0
  2. package/dist/chain-semantics/composition-truth.d.ts +102 -0
  3. package/dist/chain-semantics/composition-truth.js +1 -0
  4. package/dist/chain-semantics/eval-order.js +1 -1
  5. package/dist/chain-semantics/fund-flow.js +1 -1
  6. package/dist/chain-semantics/index.d.ts +1 -0
  7. package/dist/chain-semantics/index.js +1 -1
  8. package/dist/composition/audit.js +1 -1
  9. package/dist/composition/blueprint-view.d.ts +3 -3
  10. package/dist/composition/blueprint-view.js +1 -1
  11. package/dist/composition/compile.d.ts +24 -3
  12. package/dist/composition/compile.js +1 -1
  13. package/dist/composition/emit-phases.d.ts +206 -0
  14. package/dist/composition/emit-phases.js +1 -0
  15. package/dist/composition/generate.d.ts +40 -0
  16. package/dist/composition/generate.js +1 -0
  17. package/dist/composition/guard-fill.d.ts +44 -0
  18. package/dist/composition/guard-fill.js +1 -0
  19. package/dist/composition/inflight.d.ts +20 -2
  20. package/dist/composition/inflight.js +1 -1
  21. package/dist/composition/input-normalize.d.ts +15 -0
  22. package/dist/composition/input-normalize.js +1 -0
  23. package/dist/composition/materialize.d.ts +18 -13
  24. package/dist/composition/materialize.js +1 -1
  25. package/dist/composition/mode-gates.d.ts +35 -0
  26. package/dist/composition/mode-gates.js +1 -0
  27. package/dist/composition/param-disclosure.js +1 -1
  28. package/dist/composition/plan-retry-ledger.d.ts +21 -0
  29. package/dist/composition/plan-retry-ledger.js +1 -0
  30. package/dist/composition/plan.d.ts +7 -2
  31. package/dist/composition/plan.js +1 -1
  32. package/dist/composition/product-card.d.ts +94 -0
  33. package/dist/composition/product-card.js +1 -0
  34. package/dist/composition/supply-chain-emit.d.ts +46 -0
  35. package/dist/composition/supply-chain-emit.js +1 -0
  36. package/dist/config/config-audit.spec.js +1 -1
  37. package/dist/config/config-warnings.d.ts +2 -0
  38. package/dist/config/config-warnings.js +1 -0
  39. package/dist/config/exposure.d.ts +2 -2
  40. package/dist/config/judgment.d.ts +31 -5
  41. package/dist/config/judgment.js +1 -1
  42. package/dist/config/judgment.spec.js +1 -1
  43. package/dist/config/match-policy-file.d.ts +34 -0
  44. package/dist/config/match-policy-file.js +1 -0
  45. package/dist/config/match-policy-file.spec.d.ts +1 -0
  46. package/dist/config/match-policy-file.spec.js +1 -0
  47. package/dist/config/rule-engine.d.ts +5 -5
  48. package/dist/config/rule-engine.js +1 -1
  49. package/dist/config/runtime.d.ts +0 -1
  50. package/dist/config/runtime.js +1 -1
  51. package/dist/config/severity.d.ts +0 -2
  52. package/dist/config/severity.js +1 -1
  53. package/dist/config/store-policy.spec.js +1 -1
  54. package/dist/config/template-params.d.ts +42 -0
  55. package/dist/config/template-params.js +1 -0
  56. package/dist/config/template-params.spec.d.ts +1 -0
  57. package/dist/config/template-params.spec.js +1 -0
  58. package/dist/data/api/api.spec.js +1 -1
  59. package/dist/data/api/server.js +1 -1
  60. package/dist/data/projection/store.d.ts +2 -1
  61. package/dist/data/projection/store.js +1 -1
  62. package/dist/data/projection/types.d.ts +22 -0
  63. package/dist/data/sync/cdc.d.ts +1 -2
  64. package/dist/data/sync/cdc.js +1 -1
  65. package/dist/evaluation/acceptance.d.ts +8 -0
  66. package/dist/evaluation/acceptance.js +1 -1
  67. package/dist/evaluation/builtins/demand-match.js +1 -1
  68. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  69. package/dist/evaluation/capability.d.ts +2 -0
  70. package/dist/evaluation/category-match-rules.d.ts +0 -1
  71. package/dist/evaluation/category-match-rules.js +1 -1
  72. package/dist/evaluation/composer.d.ts +25 -0
  73. package/dist/evaluation/composer.js +1 -1
  74. package/dist/evaluation/engine.js +1 -1
  75. package/dist/evaluation/extract.d.ts +7 -0
  76. package/dist/evaluation/extract.js +1 -1
  77. package/dist/evaluation/game-strategy.d.ts +0 -3
  78. package/dist/evaluation/game-strategy.js +1 -1
  79. package/dist/evaluation/match-operation.d.ts +9 -0
  80. package/dist/evaluation/match-operation.js +1 -1
  81. package/dist/evaluation/match-policy-resolver.d.ts +9 -0
  82. package/dist/evaluation/match-policy-resolver.js +1 -0
  83. package/dist/evaluation/match-policy.d.ts +3 -1
  84. package/dist/evaluation/match-policy.js +1 -1
  85. package/dist/evaluation/region.d.ts +0 -6
  86. package/dist/evaluation/region.js +1 -1
  87. package/dist/evaluation/standards.d.ts +2 -1
  88. package/dist/evaluation/standards.js +1 -1
  89. package/dist/evaluation/structured-lines.d.ts +8 -0
  90. package/dist/evaluation/structured-lines.js +1 -0
  91. package/dist/evaluation/types.d.ts +6 -0
  92. package/dist/experience/realtime-feedback.js +1 -1
  93. package/dist/extensions/capability-manifest.d.ts +1 -0
  94. package/dist/extensions/capability-manifest.js +1 -1
  95. package/dist/extensions/capability.d.ts +91 -0
  96. package/dist/extensions/capability.js +1 -0
  97. package/dist/extensions/industry-audit.spec.js +1 -1
  98. package/dist/extensions/industry-pack.d.ts +13 -0
  99. package/dist/extensions/industry-pack.js +1 -1
  100. package/dist/extensions/modes.js +1 -1
  101. package/dist/extensions/registry.d.ts +0 -2
  102. package/dist/extensions/registry.js +1 -1
  103. package/dist/goal/GoalEngine.js +1 -1
  104. package/dist/graph/onchain/analyze.js +1 -1
  105. package/dist/graph/onchain/expand.js +1 -1
  106. package/dist/graph/onchain/exposure.js +1 -1
  107. package/dist/graph/onchain/facts.js +1 -1
  108. package/dist/graph/onchain/order-status.d.ts +0 -1
  109. package/dist/graph/onchain/order-status.js +1 -1
  110. package/dist/harness/recover.js +1 -1
  111. package/dist/harness/verify.d.ts +0 -3
  112. package/dist/harness/verify.js +1 -1
  113. package/dist/intent/types.d.ts +0 -1
  114. package/dist/intent/types.js +1 -1
  115. package/dist/keeper/detectors.js +1 -1
  116. package/dist/keeper/types.d.ts +0 -1
  117. package/dist/keeper/types.js +1 -1
  118. package/dist/knowledge/allocation-risk.d.ts +1 -0
  119. package/dist/knowledge/allocation-risk.js +1 -1
  120. package/dist/knowledge/allocator-rail-verifier.d.ts +6 -1
  121. package/dist/knowledge/allocator-rail-verifier.js +1 -1
  122. package/dist/knowledge/arbitration-ledger.js +1 -1
  123. package/dist/knowledge/arbitration-puzzle.js +1 -1
  124. package/dist/knowledge/audit-rules.d.ts +2 -2
  125. package/dist/knowledge/audit-rules.js +1 -1
  126. package/dist/knowledge/baselines/judgment-baselines.json +21 -2
  127. package/dist/knowledge/baselines/rules/oracle.json +120 -0
  128. package/dist/knowledge/baselines/rules/plan.json +384 -17
  129. package/dist/knowledge/baselines/rules/progress.json +20 -2
  130. package/dist/knowledge/builtin-templates.d.ts +12 -1
  131. package/dist/knowledge/builtin-templates.js +1 -1
  132. package/dist/knowledge/component-schema.js +1 -1
  133. package/dist/knowledge/contact-templates.d.ts +0 -1
  134. package/dist/knowledge/contact-templates.js +1 -1
  135. package/dist/knowledge/dynamic-pricing.js +1 -1
  136. package/dist/knowledge/fee-param-bindings.js +1 -1
  137. package/dist/knowledge/fund-layer.d.ts +1 -0
  138. package/dist/knowledge/fund-layer.js +1 -1
  139. package/dist/knowledge/game-scenarios.js +1 -1
  140. package/dist/knowledge/getting-started.js +1 -1
  141. package/dist/knowledge/guard-binding-table.d.ts +52 -0
  142. package/dist/knowledge/guard-binding-table.js +1 -0
  143. package/dist/knowledge/guard-binding-verifier.d.ts +30 -0
  144. package/dist/knowledge/guard-binding-verifier.js +1 -0
  145. package/dist/knowledge/guard-bindings.js +1 -1
  146. package/dist/knowledge/guard-blueprint.d.ts +68 -0
  147. package/dist/knowledge/guard-blueprint.js +1 -0
  148. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  149. package/dist/knowledge/guard-design-patterns.js +1 -1
  150. package/dist/knowledge/guard-field-cognition.js +1 -1
  151. package/dist/knowledge/guard-host-context.d.ts +24 -0
  152. package/dist/knowledge/guard-host-context.js +1 -0
  153. package/dist/knowledge/guard-lint.js +1 -1
  154. package/dist/knowledge/guard-node-gates.d.ts +3 -0
  155. package/dist/knowledge/guard-node-gates.js +1 -1
  156. package/dist/knowledge/guard-puzzle.js +1 -1
  157. package/dist/knowledge/guard-render.js +1 -1
  158. package/dist/knowledge/guard-risk.js +1 -1
  159. package/dist/knowledge/guard-submission-prompt.d.ts +11 -0
  160. package/dist/knowledge/guard-submission-prompt.js +1 -1
  161. package/dist/knowledge/guard-templates.d.ts +1 -1
  162. package/dist/knowledge/guard-templates.js +1 -1
  163. package/dist/knowledge/guard-translation.js +1 -1
  164. package/dist/knowledge/index.d.ts +1 -1
  165. package/dist/knowledge/index.js +1 -1
  166. package/dist/knowledge/industry-generalizer.d.ts +6 -1
  167. package/dist/knowledge/industry-generalizer.js +1 -1
  168. package/dist/knowledge/industry-registry.js +1 -1
  169. package/dist/knowledge/jsonrpc-enum.d.ts +38 -0
  170. package/dist/knowledge/jsonrpc-enum.js +1 -1
  171. package/dist/knowledge/machine-topology.js +1 -1
  172. package/dist/knowledge/machine-translation.js +1 -1
  173. package/dist/knowledge/object-dependency.d.ts +31 -0
  174. package/dist/knowledge/object-dependency.js +1 -0
  175. package/dist/knowledge/onchain-constants.d.ts +2 -0
  176. package/dist/knowledge/onchain-constants.js +1 -1
  177. package/dist/knowledge/param-schema.d.ts +23 -0
  178. package/dist/knowledge/param-schema.js +1 -1
  179. package/dist/knowledge/param-tiers.js +1 -1
  180. package/dist/knowledge/passport-ledger.js +1 -1
  181. package/dist/knowledge/path-oracle/coverage.d.ts +16 -0
  182. package/dist/knowledge/path-oracle/coverage.js +1 -0
  183. package/dist/knowledge/path-oracle/index.d.ts +5 -0
  184. package/dist/knowledge/path-oracle/index.js +1 -0
  185. package/dist/knowledge/path-oracle/products/food-delivery.d.ts +2 -0
  186. package/dist/knowledge/path-oracle/products/food-delivery.js +1 -0
  187. package/dist/knowledge/path-oracle/schema.d.ts +188 -0
  188. package/dist/knowledge/path-oracle/schema.js +1 -0
  189. package/dist/knowledge/pattern-resolutions.d.ts +2 -0
  190. package/dist/knowledge/pattern-resolutions.js +1 -1
  191. package/dist/knowledge/progress-ledger.js +1 -1
  192. package/dist/knowledge/progress-risk.js +1 -1
  193. package/dist/knowledge/projection.spec.js +1 -1
  194. package/dist/knowledge/protocol-facts.js +1 -1
  195. package/dist/knowledge/requirement-families.d.ts +13 -0
  196. package/dist/knowledge/requirement-families.js +1 -0
  197. package/dist/knowledge/reward-ledger.js +1 -1
  198. package/dist/knowledge/scenario-modes.d.ts +1 -0
  199. package/dist/knowledge/scenario-modes.js +1 -1
  200. package/dist/knowledge/semantic-ir.d.ts +4 -0
  201. package/dist/knowledge/semantic-ir.js +1 -1
  202. package/dist/knowledge/service-ledger.d.ts +1 -1
  203. package/dist/knowledge/service-ledger.js +1 -1
  204. package/dist/knowledge/sku-name-gate.d.ts +17 -0
  205. package/dist/knowledge/sku-name-gate.js +1 -0
  206. package/dist/knowledge/supply-chain.d.ts +9 -0
  207. package/dist/knowledge/supply-chain.js +1 -1
  208. package/dist/knowledge/template-loader.d.ts +14 -6
  209. package/dist/knowledge/template-loader.js +1 -1
  210. package/dist/knowledge/template-nav.d.ts +3 -1
  211. package/dist/knowledge/template-nav.js +1 -1
  212. package/dist/knowledge/template-prose.d.ts +1 -1
  213. package/dist/knowledge/template-registry.js +1 -1
  214. package/dist/knowledge/template-scanner.d.ts +62 -0
  215. package/dist/knowledge/template-scanner.js +1 -1
  216. package/dist/knowledge/template-test-profiles.js +1 -1
  217. package/dist/knowledge/tools-reference.js +1 -1
  218. package/dist/knowledge/workflow-guidance.d.ts +5 -0
  219. package/dist/knowledge/workflow-guidance.js +1 -1
  220. package/dist/monitor/MonitorLoop.js +1 -1
  221. package/dist/participation/radar-core.js +1 -1
  222. package/dist/participation/time-window.js +1 -1
  223. package/dist/persona/address-format.d.ts +0 -1
  224. package/dist/persona/address-format.js +1 -1
  225. package/dist/persona/bridge.js +1 -1
  226. package/dist/persona/index.d.ts +0 -2
  227. package/dist/persona/index.js +1 -1
  228. package/dist/persona/model.js +1 -1
  229. package/dist/persona/persona-audit.spec.js +1 -1
  230. package/dist/persona/types.d.ts +6 -0
  231. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  232. package/dist/playbooks/service-build/game-theory.d.ts +2 -2
  233. package/dist/playbooks/service-build/intent-analyzer.js +1 -1
  234. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  235. package/dist/playbooks/service-build/merchant-guide.d.ts +50 -23
  236. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  237. package/dist/playbooks/service-build/migration-planner.d.ts +2 -0
  238. package/dist/playbooks/service-build/migration-planner.js +1 -1
  239. package/dist/playbooks/service-build/mode-actions.js +1 -1
  240. package/dist/playbooks/service-build/object-panorama.d.ts +8 -0
  241. package/dist/playbooks/service-build/object-panorama.js +1 -1
  242. package/dist/playbooks/service-build/participation-radar.js +1 -1
  243. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  244. package/dist/playbooks/service-build/reverse-mapping.d.ts +6 -0
  245. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  246. package/dist/playbooks/service-build/service-panorama.d.ts +1 -0
  247. package/dist/playbooks/service-build/service-panorama.js +1 -1
  248. package/dist/playbooks/service-build/service-quote.js +1 -1
  249. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  250. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +10 -1
  251. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  252. package/dist/review/index.js +1 -1
  253. package/dist/review/repository.js +1 -1
  254. package/dist/safety/confirm-gate.js +1 -1
  255. package/dist/schema/benchmark-migration/index.d.ts +104 -0
  256. package/dist/schema/benchmark-migration/index.js +1 -1
  257. package/dist/schema/call/allocation.d.ts +15 -6
  258. package/dist/schema/call/allocation.js +1 -1
  259. package/dist/schema/call/base.d.ts +256 -0
  260. package/dist/schema/call/base.js +1 -1
  261. package/dist/schema/call/bridge.d.ts +32 -6
  262. package/dist/schema/call/demand.d.ts +15 -6
  263. package/dist/schema/call/demand.js +1 -1
  264. package/dist/schema/call/guard.d.ts +8 -8
  265. package/dist/schema/call/guard.js +1 -1
  266. package/dist/schema/call/handler.d.ts +3 -0
  267. package/dist/schema/call/handler.js +1 -1
  268. package/dist/schema/call/machine.d.ts +32 -8
  269. package/dist/schema/call/machine.js +1 -1
  270. package/dist/schema/call/order.d.ts +26 -8
  271. package/dist/schema/call/order.js +1 -1
  272. package/dist/schema/call/payment.d.ts +20 -8
  273. package/dist/schema/call/payment.js +1 -1
  274. package/dist/schema/call/permission-handler.js +1 -1
  275. package/dist/schema/call/permission.d.ts +330 -114
  276. package/dist/schema/call/permission.js +1 -1
  277. package/dist/schema/call/personal.d.ts +10 -4
  278. package/dist/schema/call/personal.js +1 -1
  279. package/dist/schema/call/progress.d.ts +16 -4
  280. package/dist/schema/call/reward.d.ts +10 -4
  281. package/dist/schema/call/reward.js +1 -1
  282. package/dist/schema/call/semantic.d.ts +1 -0
  283. package/dist/schema/call/semantic.js +1 -1
  284. package/dist/schema/call/service.d.ts +128 -40
  285. package/dist/schema/call/service.js +1 -1
  286. package/dist/schema/call/treasury.d.ts +15 -6
  287. package/dist/schema/call/treasury.js +1 -1
  288. package/dist/schema/common/index.js +1 -1
  289. package/dist/schema/config/index.d.ts +61 -0
  290. package/dist/schema/config/index.js +1 -1
  291. package/dist/schema/envelope-unify.d.ts +4 -0
  292. package/dist/schema/envelope-unify.js +1 -0
  293. package/dist/schema/evaluation/index.d.ts +216 -19
  294. package/dist/schema/evaluation/index.js +1 -1
  295. package/dist/schema/goal/index.d.ts +47 -0
  296. package/dist/schema/goal/planning.d.ts +115 -1
  297. package/dist/schema/goal/planning.js +1 -1
  298. package/dist/schema/industry-pack/index.d.ts +137 -6
  299. package/dist/schema/industry-pack/index.js +1 -1
  300. package/dist/schema/industry-pack/modes.d.ts +6 -6
  301. package/dist/schema/keeper/index.d.ts +26 -0
  302. package/dist/schema/local/index.d.ts +137 -0
  303. package/dist/schema/local/index.js +1 -1
  304. package/dist/schema/local/wip.d.ts +6 -0
  305. package/dist/schema/local/wip.js +1 -1
  306. package/dist/schema/messenger/index.d.ts +26 -0
  307. package/dist/schema/operations.d.ts +342 -83
  308. package/dist/schema/operations.js +1 -1
  309. package/dist/schema/persona/index.d.ts +2907 -640
  310. package/dist/schema/persona/index.js +1 -1
  311. package/dist/schema/query/bi.d.ts +145 -4
  312. package/dist/schema/query/bi.js +1 -1
  313. package/dist/schema/query/index.d.ts +266 -73
  314. package/dist/schema/query/index.js +1 -1
  315. package/dist/schema/schema-query/index.d.ts +1 -1
  316. package/dist/schema/schema-query/index.js +1 -1
  317. package/dist/schema/schema-version.js +1 -1
  318. package/dist/schema/utils/permission-machine-check.d.ts +2 -0
  319. package/dist/schema/utils/permission-machine-check.js +1 -1
  320. package/dist/schema/watch/index.d.ts +16 -0
  321. package/dist/schema/watch/index.js +1 -1
  322. package/dist/schema/workflow/index.d.ts +2 -2
  323. package/dist/schema/workflow/index.js +1 -1
  324. package/dist/schema-query-impl/index.d.ts +1 -1
  325. package/dist/schema-query-impl/index.js +1 -1
  326. package/dist/schemas/account_operation.output.json +94 -0
  327. package/dist/schemas/benchmark_migration_operation.output.json +338 -9
  328. package/dist/schemas/benchmark_migration_operation.schema.json +26 -1
  329. package/dist/schemas/bridge_operation.output.json +94 -0
  330. package/dist/schemas/config_operation.output.json +352 -0
  331. package/dist/schemas/config_operation.schema.json +20 -2
  332. package/dist/schemas/evaluation_operation.output.json +570 -4
  333. package/dist/schemas/evaluation_operation.schema.json +194 -3
  334. package/dist/schemas/goal_operation.schema.json +183 -0
  335. package/dist/schemas/index.json +1 -1
  336. package/dist/schemas/industry_pack_operation.output.json +621 -0
  337. package/dist/schemas/industry_pack_operation.schema.json +20 -2
  338. package/dist/schemas/keeper_operation.output.json +94 -0
  339. package/dist/schemas/local_cache_operation.output.json +94 -0
  340. package/dist/schemas/local_history_operation.output.json +94 -0
  341. package/dist/schemas/local_info_operation.output.json +94 -0
  342. package/dist/schemas/local_mark_operation.output.json +94 -0
  343. package/dist/schemas/messenger_operation.output.json +94 -0
  344. package/dist/schemas/monitor_events.output.json +94 -0
  345. package/dist/schemas/monitor_subscription.output.json +94 -0
  346. package/dist/schemas/onchain_events.output.json +94 -0
  347. package/dist/schemas/onchain_operations.output.json +313 -1
  348. package/dist/schemas/onchain_operations.schema.json +1248 -664
  349. package/dist/schemas/onchain_operations_allocation.schema.json +30 -15
  350. package/dist/schemas/onchain_operations_arbitration.schema.json +9 -2
  351. package/dist/schemas/onchain_operations_contact.schema.json +8 -1
  352. package/dist/schemas/onchain_operations_demand.schema.json +29 -14
  353. package/dist/schemas/onchain_operations_gen_passport.schema.json +8 -1
  354. package/dist/schemas/onchain_operations_guard.schema.json +290 -105
  355. package/dist/schemas/onchain_operations_machine.schema.json +49 -34
  356. package/dist/schemas/onchain_operations_order.schema.json +63 -40
  357. package/dist/schemas/onchain_operations_payment.schema.json +26 -11
  358. package/dist/schemas/onchain_operations_permission.schema.json +362 -235
  359. package/dist/schemas/onchain_operations_personal.schema.json +27 -15
  360. package/dist/schemas/onchain_operations_progress.schema.json +45 -30
  361. package/dist/schemas/onchain_operations_proof.schema.json +8 -1
  362. package/dist/schemas/onchain_operations_repository.schema.json +8 -1
  363. package/dist/schemas/onchain_operations_reward.schema.json +32 -17
  364. package/dist/schemas/onchain_operations_service.schema.json +221 -124
  365. package/dist/schemas/onchain_operations_treasury.schema.json +32 -17
  366. package/dist/schemas/onchain_table_data.output.json +258 -6
  367. package/dist/schemas/onchain_table_data.schema.json +92 -52
  368. package/dist/schemas/persona_operation.output.json +7752 -0
  369. package/dist/schemas/persona_operation.schema.json +1232 -4
  370. package/dist/schemas/query_toolkit.output.json +756 -116
  371. package/dist/schemas/query_toolkit.schema.json +138 -7
  372. package/dist/schemas/schema_query.schema.json +1 -1
  373. package/dist/schemas/watch_operation.output.json +83 -0
  374. package/dist/schemas/wip_file.output.json +8 -0
  375. package/dist/schemas/workflow_operation.schema.json +2 -2
  376. package/dist/tools/handlers/benchmark-migration.d.ts +11 -3
  377. package/dist/tools/handlers/benchmark-migration.js +1 -1
  378. package/dist/tools/handlers/config.js +1 -1
  379. package/dist/tools/handlers/evaluation.js +1 -1
  380. package/dist/tools/handlers/evaluation.spec.js +1 -1
  381. package/dist/tools/handlers/industry-pack.js +1 -1
  382. package/dist/tools/handlers/onchain.d.ts +20 -0
  383. package/dist/tools/handlers/onchain.js +1 -1
  384. package/dist/tools/handlers/persona.js +1 -1
  385. package/dist/tools/handlers/query.d.ts +8 -0
  386. package/dist/tools/handlers/query.js +1 -1
  387. package/dist/tools/handlers/winner-derivation.d.ts +20 -0
  388. package/dist/tools/handlers/winner-derivation.js +1 -0
  389. package/dist/tools/handlers/wip-upload.js +1 -1
  390. package/dist/tools/index.d.ts +1 -0
  391. package/dist/tools/index.js +1 -1
  392. package/dist/tools/registry/business.js +1 -1
  393. package/dist/tools/registry/config.js +1 -1
  394. package/dist/tools/registry/evaluation.js +1 -1
  395. package/dist/tools/registry/identity.js +1 -1
  396. package/dist/tools/registry/query.js +1 -1
  397. package/dist/tools/transport-integrity.d.ts +7 -0
  398. package/dist/tools/transport-integrity.js +1 -0
  399. package/dist/tools/upgrade-check.js +1 -1
  400. package/dist/tools/wrap.d.ts +5 -0
  401. package/dist/tools/wrap.js +1 -1
  402. package/package.json +2 -2
  403. package/dist/extensions/business-modules.d.ts +0 -54
  404. package/dist/extensions/business-modules.js +0 -1
  405. package/dist/schemas/guard-templates.json +0 -379
@@ -1 +1 @@
1
- const SVC='onchain_operations\x20operation_type=\x27service\x27\x20data.';export const SERVICE_SLOTS=[{'id':'service.permission','family':'permission','what':'The\x20Permission\x20object\x20that\x20owns\x20the\x20Service;\x20every\x20admin\x20write\x20(price,\x20stock,\x20publish,\x20guard\x20entities)\x20resolves\x20through\x20it.','how':{'surface':'create','via':'service\x20create\x20with\x20the\x20Permission\x20object,\x20then\x20permission_operation\x20for\x20roles/entities'},'effect':'Authorizes\x20every\x20admin\x20write;\x20an\x20empty/foreign\x20permission\x20is\x20the\x20widening\x20that\x20lets\x20a\x20stranger\x20edit\x20pricing.','related':['Permission','EntityRegistrar\x20/\x20EntityLinker\x20rows','admin\x20transfer'],'configurable':!![]},{'id':'service.description','family':'service','what':'The\x20public\x20listing\x20copy\x20a\x20buyer\x20reads\x20before\x20ordering.','how':{'surface':'post-publish','via':SVC+'description'},'effect':'Changes\x20what\x20the\x20market\x20shows;\x20it\x20is\x20free\x20text\x20with\x20no\x20on-chain\x20anchor,\x20so\x20a\x20number\x20quoted\x20here\x20(a\x20compensation\x20cap,\x20a\x20refund\x20promise)\x20is\x20marketing,\x20not\x20a\x20term.','related':['market\x20listing','quote\x20/\x20buy\x20display'],'configurable':!![]},{'id':'service.location','family':'service','what':'The\x20service\x20area\x20and\x20scope\x20(country\x20>\x20province\x20>\x20city\x20>\x20district).','how':{'surface':'post-publish','via':SVC+'location'},'effect':'Drives\x20market\x20discovery\x20and\x20the\x20buyer\x27s\x20expectation\x20of\x20where\x20fulfilment\x20happens.','related':['market\x20discovery','fulfilment\x20scope'],'configurable':!![]},{'id':'service.machine','family':'machine','what':'The\x20Machine\x20(workflow)\x20bound\x20to\x20the\x20Service;\x20every\x20order\x20COPIES\x20it\x20at\x20creation,\x20so\x20the\x20order\x20keeps\x20its\x20own\x20fulfilment\x20path.','how':{'surface':'pre-publish','via':'machine\x20create\x20(operation_type=\x27machine\x27)\x20+\x20'+SVC+'machine'},'effect':'Fixes\x20the\x20order\x20lifecycle:\x20the\x20nodes\x20a\x20buyer\x20can\x20be\x20moved\x20through\x20and\x20the\x20guards\x20that\x20must\x20pass.\x20Frozen\x20at\x20publish.','related':['Machine','Order.progress','guards\x20host=\x27machine\x27'],'configurable':!![]},{'id':'service.buy_guard','family':'guard','what':'The\x20guard\x20a\x20buyer\x27s\x20passport\x20must\x20pass\x20to\x20purchase\x20(qualification,\x20membership,\x20region).','how':{'surface':'pre-publish','via':'guard\x20create\x20(operation_type=\x27guard\x27)\x20+\x20'+SVC+'buy_guard'},'effect':'Denies\x20purchase\x20to\x20a\x20passport\x20that\x20fails\x20it;\x20the\x20requirement\x20is\x20immutable\x20after\x20publish.','related':['Guard','Passport','purchase\x20(plain\x20or\x20passport-backed)'],'configurable':!![]},{'id':'service.bPublished','family':'service','what':'The\x20publish\x20flag\x20—\x20the\x20object\x20becomes\x20purchasable\x20only\x20when\x20published\x20(and\x20not\x20paused).','how':{'surface':'post-publish','via':SVC+'publish\x20=\x20true'},'effect':'Emits\x20the\x20market-opportunity\x20event\x20that\x20makes\x20the\x20listing\x20discoverable\x20and\x20buyable.','related':['ServiceEvent','market\x20discovery'],'configurable':!![]},{'id':'service.bPaused','family':'service','what':'The\x20pause\x20flag\x20that\x20forbids\x20buying\x20without\x20unpublishing\x20the\x20listing.','how':{'surface':'post-publish','via':SVC+'pause\x20=\x20true\x20/\x20false'},'effect':'Every\x20buy\x20aborts\x20while\x20paused;\x20existing\x20orders\x20are\x20unaffected.','related':['Sales','buy'],'configurable':!![]},{'id':'service.sales','family':'sales','what':'The\x20list\x20of\x20products\x20for\x20sale;\x20the\x20order\x20total\x20is\x20sale.price\x20x\x20the\x20purchased\x20quantity.','how':{'surface':'post-publish','via':SVC+'sales\x20(op\x20add\x20/\x20set\x20/\x20remove\x20/\x20clear)'},'effect':'Changes\x20what\x20can\x20be\x20bought\x20and\x20at\x20what\x20price;\x20a\x20price\x20edit\x20does\x20not\x20touch\x20orders\x20already\x20placed\x20(their\x20amount\x20is\x20immutable).','related':['Sale','Order.amount','quote'],'configurable':!![]},{'id':'service.repositories','family':'repository','what':'On-chain\x20key-value\x20stores\x20the\x20workflow\x20writes\x20into\x20(review\x20rows,\x20certificates,\x20evidence).','how':{'surface':'pre-publish','via':SVC+'repositories\x20+\x20repository\x20create\x20(policies\x20freeze\x20at\x20creation)'},'effect':'A\x20write\x20passes\x20only\x20through\x20the\x20policy\x27s\x20write\x20guard;\x20a\x20policy\x20is\x20immutable\x20once\x20the\x20Repository\x20exists,\x20so\x20the\x20write\x20authority\x20must\x20be\x20right\x20at\x20creation.','related':['Repository','PolicyRule','guards\x20host=\x27repository\x27'],'configurable':!![]},{'id':'service.order_allocators','family':'allocator','what':'The\x20payout\x20plan\x20every\x20order\x20inherits:\x20who\x20receives\x20how\x20much\x20of\x20the\x20escrow,\x20and\x20which\x20guard\x20fires\x20each\x20leg.','how':{'surface':'pre-publish','via':SVC+'order_allocators\x20(set\x20before\x20publish;\x20append-only\x20afterwards)'},'effect':'Decides\x20the\x20money\x20split\x20of\x20every\x20future\x20order.\x20After\x20publish\x20the\x20existing\x20entries\x20are\x20frozen\x20and\x20NEW\x20entries\x20can\x20only\x20be\x20APPENDED,\x20each\x20emitting\x20OrderAllocatorsAppendedEvent\x20so\x20buyers\x20can\x20re-evaluate.','related':['Allocators','Allocation','guards\x20referenced\x20by\x20allocator.rows[].guard_key'],'configurable':!![]},{'id':'service.arbitrations','family':'arbitration','what':'The\x20independent\x20arbitration\x20venues\x20an\x20order\x20may\x20escalate\x20to.','how':{'surface':'pre-publish','via':SVC+'arbitrations\x20(bind\x20an\x20operational\x20venue)'},'effect':'Defines\x20who\x20can\x20rule\x20on\x20a\x20dispute.\x20A\x20venue\x20sharing\x20the\x20Service\x27s\x20own\x20Permission\x20is\x20rejected\x20on\x20chain\x20(E_ARBITRATION_PERMISSION_CONFLICT),\x20so\x20independence\x20is\x20structural.','related':['Arbitration','Permission','Order\x20arbitration'],'configurable':!![]},{'id':'service.compensation_fund','family':'treasury','what':'A\x20fund\x20the\x20arbitrator\x20can\x20award\x20from,\x20separate\x20from\x20the\x20order\x20escrow.','how':{'surface':'post-publish','via':SVC+'compensation_fund\x20(top-up)\x20+\x20setting_lock_duration'},'effect':'Widens\x20the\x20remedy\x20beyond\x20the\x20order\x27s\x20own\x20escrow.\x20The\x20per-order\x20ceiling\x20is\x20fund/3\x20(MAX_INDEMNITY_MULTIPLE),\x20and\x20an\x20award\x20shrinks\x20the\x20live\x20fund\x20in\x20place\x20—\x20a\x20headline\x20number\x20in\x20the\x20listing\x20goes\x20stale.','related':['Arbitration\x20award','setting_lock_duration','trust\x20copy'],'configurable':!![]},{'id':'service.setting_lock_duration','family':'service','what':'How\x20long\x20the\x20compensation\x20/\x20setting\x20window\x20stays\x20locked\x20after\x20an\x20order\x20is\x20placed.','how':{'surface':'post-publish','via':SVC+'setting_lock_duration'},'effect':'Sets\x20the\x20merchant\x27s\x20commitment\x20horizon\x20for\x20the\x20fund\x20and\x20the\x20settings\x20it\x20covers.','related':['compensation_fund','settings'],'configurable':!![]},{'id':'service.customer_required','family':'service','what':'Fields\x20the\x20buyer\x20is\x20asked\x20to\x20supply\x20at\x20purchase\x20(shipping\x20/\x20meetup\x20information).','how':{'surface':'post-publish','via':SVC+'customer_required'},'effect':'DECLARATIVE\x20ONLY:\x20the\x20on-chain\x20purchase\x20never\x20reads\x20it,\x20so\x20an\x20order\x20that\x20supplies\x20none\x20is\x20still\x20created.\x20Enforcement\x20exists\x20only\x20if\x20a\x20required-info\x20evidence\x20gate\x20guards\x20the\x20first\x20forward.','related':['required_info_evidence_gate','order.required_info','privacy\x20disclosure'],'configurable':!![]},{'id':'service.rewards','family':'reward','what':'Incentive\x20pools\x20(review\x20bounty,\x20referral)\x20bound\x20to\x20the\x20Service.','how':{'surface':'post-publish','via':SVC+'rewards\x20+\x20reward\x20create\x20(operation_type=\x27reward\x27)'},'effect':'A\x20claim\x20is\x20the\x20ONLY\x20exit\x20from\x20a\x20Reward\x27s\x20balance;\x20the\x20pool\x20is\x20funded\x20at\x20creation\x20and\x20every\x20claim\x20needs\x20the\x20binding\x20guard\x20to\x20pass.','related':['Reward','claim\x20guard','review\x20rail'],'configurable':!![]},{'id':'service.um','family':'service','what':'The\x20Contact\x20object\x20bound\x20as\x20the\x20service\x27s\x20communication\x20channel.','how':{'surface':'post-publish','via':SVC+'um\x20+\x20contact\x20create\x20(operation_type=\x27contact\x27)'},'effect':'Routes\x20pre-order\x20negotiation\x20and\x20evidence\x20conversations\x20to\x20that\x20contact\x27s\x20inbox.','related':['Contact','Messenger'],'configurable':!![]},{'id':'allocation.per_order','family':'allocation','what':'The\x20per-order\x20Allocation:\x20the\x20escrow\x20pool\x20created\x20from\x20the\x20Service\x27s\x20order_allocators\x20when\x20an\x20order\x20is\x20placed.','how':{'surface':'immutable','via':'created\x20by\x20buy\x20(order_new);\x20funded\x20later\x20via\x20order_renew\x20/\x20receive'},'effect':'Its\x20balance\x20can\x20grow\x20(a\x20later\x20capture\x20joins\x20the\x20SAME\x20order\x27s\x20allocation)\x20but\x20the\x20plan\x20that\x20distributes\x20it\x20is\x20the\x20Order\x27s\x20own;\x20distribution\x20requires\x20the\x20bound\x20guard\x20and\x20pays\x20every\x20leg\x20bound\x20to\x20that\x20guard.','related':['Order','Allocators','PaymentInfo.for_object'],'configurable':![],'why_not':'The\x20Allocation\x20is\x20created\x20by\x20the\x20purchase,\x20not\x20by\x20configuration.\x20Change\x20the\x20split\x20by\x20editing\x20the\x20Service\x27s\x20order_allocators\x20BEFORE\x20publish\x20(or\x20appending\x20after).'}];export const SALES_SLOTS=[{'id':'sale.price','family':'sales','what':'Unit\x20price\x20of\x20one\x20product;\x20the\x20order\x20total\x20is\x20price\x20x\x20quantity.','how':{'surface':'post-publish','via':SVC+'sales\x20op=\x27price_add\x27\x20/\x20\x27price_reduce\x27'},'effect':'Changes\x20the\x20price\x20of\x20future\x20orders\x20only\x20—\x20an\x20existing\x20order\x27s\x20amount\x20is\x20immutable.','related':['Order.amount','discount','quote'],'configurable':!![]},{'id':'sale.stock','family':'sales','what':'Units\x20available\x20for\x20sale.','how':{'surface':'post-publish','via':SVC+'sales\x20op=\x27stock_add\x27\x20/\x20\x27stock_reduce\x27'},'effect':'Caps\x20how\x20many\x20units\x20one\x20purchase\x20can\x20take;\x20a\x20refund\x20can\x20put\x20units\x20back\x20only\x20when\x20the\x20SKU\x20opted\x20in.','related':['quantity','restock_on_refund'],'configurable':!![]},{'id':'sale.suspension','family':'sales','what':'Per-product\x20suspension\x20flag\x20(the\x20\x27listing\x20inactive\x27\x20state).','how':{'surface':'post-publish','via':SVC+'sales\x20op=\x27suspend\x27\x20(suspension\x20true/false)'},'effect':'Buy\x20and\x20quote\x20abort\x20for\x20that\x20product\x20only;\x20price/stock/WIP\x20stay\x20bound.','related':['buy','quote'],'configurable':!![]},{'id':'sale.wip','family':'sales','what':'The\x20public\x20product-detail\x20page\x20URL\x20a\x20buyer\x20fetches\x20at\x20order\x20time.','how':{'surface':'post-publish','via':SVC+'sales\x20(wip\x20+\x20wip_hash)'},'effect':'Stored\x20on\x20chain\x20and\x20fetched\x20by\x20every\x20buyer;\x20an\x20unreachable\x20or\x20empty\x20URL\x20makes\x20the\x20listing\x20incomplete\x20and\x20can\x20abort\x20the\x20order.','related':['wip_file','wip_hash','market\x20completeness'],'configurable':!![]},{'id':'sale.restock_on_refund','family':'sales','what':'Per-SKU\x20opt-in:\x20a\x20refunded\x20order\x20puts\x20its\x20purchased\x20units\x20back\x20on\x20shelf.','how':{'surface':'post-publish','via':SVC+'restock\x20op=\x27flag\x27'},'effect':'Without\x20the\x20flag\x20the\x20order-level\x20restock\x20op\x20refuses\x20that\x20line;\x20flagging\x20does\x20not\x20itself\x20move\x20stock.','related':['refund','restock\x20op=\x27order\x27'],'configurable':!![]}];function firstSentence(a){const b=a['indexOf']('.\x20'),c=b===-0x1?a:a['slice'](0x0,b+0x1);return c['length']>0xf0?c['slice'](0x0,0xed)+'...':c;}function edgeOperator(a,b){if(typeof b==='string')return a['operator']??(b===''?'order_payer':'merchant');return b['operator']??a['operator']??(b['prev']===''?'order_payer':'merchant');}function edgesOf(a){const b=[];for(const c of a['machine_shape']){for(const d of c['from']??[]){const e=typeof d==='string'?{'prev':d}:d;b['push']({'from':e['prev']??'','to':c['name'],...e['guard_key']!==undefined?{'guard_key':e['guard_key']}:{},'operator':edgeOperator(c,d)});}}return b;}const FIXED_SPLIT_REASON='The\x20split\x20is\x20a\x20literal\x20in\x20the\x20template\x20body\x20—\x20no\x20fee_param\x20carries\x20it,\x20so\x20a\x20merchant\x20cannot\x20change\x20it\x20without\x20a\x20template\x20edit.',DERIVED_SPLIT_REASON='A\x20Surplus\x20row\x20has\x20no\x20value\x20of\x20its\x20own\x20—\x20it\x20pays\x20whatever\x20the\x20Rate/Amount\x20rows\x20leave\x20behind,\x20so\x20its\x20size\x20follows\x20from\x20the\x20other\x20rows.',STRUCTURAL_RAIL_REASON='This\x20row\x20pays\x20the\x20ENTIRE\x20escrow\x20(100%)\x20to\x20its\x20recipient\x20—\x20it\x20IS\x20the\x20settlement/refund\x20rail,\x20not\x20a\x20rate.\x20There\x20is\x20no\x20share\x20to\x20set:\x20the\x20amount\x20is\x20whatever\x20the\x20order\x20holds.',UNSET_LEG_REASON='This\x20row\x20pays\x20nothing\x20today\x20(0\x20bps):\x20a\x20declared\x20placeholder\x20leg\x20(usually\x20the\x20order-side\x20residual\x20of\x20a\x20two-leg\x20group).\x20Moving\x20money\x20through\x20it\x20changes\x20who\x20is\x20paid,\x20which\x20is\x20a\x20template\x20decision,\x20not\x20a\x20runtime\x20setting.';function allocatorSlots(a){const b=a['allocator']['rows']??[],c=[{'id':'allocator.group','family':'allocator','what':b['length']+'\x20allocator\x20row(s),\x20default\x20mode\x20\x27'+a['allocator']['mode']+'\x27,\x20recipient\x20\x27'+a['allocator']['recipient']+'\x27'+(a['allocator']['once_per_order']===!![]?',\x20one-shot\x20per\x20order':'')+(a['allocator']['refund_track']!==undefined?',\x20refund\x20track\x20'+a['allocator']['refund_track']:'')+'.','how':{'surface':'pre-publish','via':SVC+'order_allocators\x20(group\x20settings)'},'effect':'A\x20Rate\x20group\x20must\x20sum\x20to\x20exactly\x2010000\x20unless\x20a\x20Surplus\x20entry\x20absorbs\x20the\x20remainder;\x20a\x20distribution\x20call\x20submits\x20ONE\x20guard\x20and\x20every\x20row\x20bound\x20to\x20it\x20fires.','related':['Allocators.mode','Allocators.once_per_order','Allocators.refund_track'],'configurable':!![]}];return b['forEach']((d,e)=>{const f=d['value_from']??d['value_from_complement'],g=d['mode']==='surplus',h=!g&&d['value']!==undefined&&f===undefined,j=h&&d['mode']==='rate'?Number(d['value']):NaN,k=g?'surplus':f!==undefined?undefined:j===0x2710?'rail':j===0x0?'unset':'split',l=g?'the\x20remaining\x20balance':f!==undefined?d['mode']+'\x20from\x20fee_param\x20\x27'+f+'\x27'+(d['value_from_complement']!==undefined?'\x20(complement\x20of\x2010000)':''):d['mode']+'\x20'+String(d['value']);c['push']({'id':'allocator.rows['+e+']','family':'allocator','what':'Row\x20'+e+'\x20('+d['track']+'):\x20pays\x20'+l+'\x20to\x20'+(d['recipient']==='guard_identifier'?'the\x20submitted\x20Order\x20(slot\x20'+(d['recipient_key']??'?')+')':d['recipient']+'\x20\x27'+(d['recipient_key']??'')+'\x27')+'.','how':{'surface':'pre-publish','via':f!==undefined?SVC+'order_allocators\x20(row\x20'+e+'\x20reads\x20fee_param\x20\x27'+f+'\x27)':SVC+'order_allocators\x20(row\x20'+e+'\x20value\x20is\x20fixed\x20in\x20the\x20template\x20body)'},'effect':'Fires\x20only\x20when\x20guard\x20\x27'+(d['guard_key']??'(NONE\x20—\x20unbound)')+'\x27\x20passes;\x20the\x20amount\x20moves\x20at\x20that\x20moment\x20and\x20cannot\x20be\x20recalled.','related':[...d['guard_key']!==undefined?['guard:'+d['guard_key']]:[],...f!==undefined?['fee_param:'+f]:[],...d['recipient_key']!==undefined?['recipient:'+d['recipient_key']]:[]],'configurable':f!==undefined,...h?{'freeze':k}:g?{'freeze':'surplus'}:{},...g?{'why_not':DERIVED_SPLIT_REASON}:j===0x2710?{'why_not':STRUCTURAL_RAIL_REASON}:j===0x0?{'why_not':UNSET_LEG_REASON}:h?{'why_not':FIXED_SPLIT_REASON}:{}});}),c;}function guardSlots(a,b){const c=a['allocator']['rows']??[];return a['guards']['map']((d,e)=>{const f=d['key']!==undefined,h=d['key']??d['template_id']+'#'+e,j=b['filter'](p=>p['guard_key']===d['key']),k=c['filter'](p=>p['guard_key']===d['key']),l=d['host']==='repository',m=d['template_id']['startsWith']('pattern.'),n=d['host']==='repository'?'repository':d['host']==='reward'?'reward':d['host']==='arbitration'?'arbitration':'guard',o=l?'Repository\x20write\x20policy\x20\x27'+(d['policy']?.['name']??h)+'\x27\x20(id_from\x20'+(d['policy']?.['id_from']??'signer')+',\x20value_type\x20'+(d['policy']?.['value_type']??'String')+(d['policy']?.['write_once']===!![]?',\x20write_once':'')+')':j['length']>0x0?'forward(s)\x20'+j['map'](p=>(p['from']||'(entry)')+'\x20->\x20'+p['to']+'\x20('+p['operator']+')')['join'](',\x20'):k['length']>0x0?'allocator\x20row(s)\x20'+k['map'](p=>p['track'])['join']('/'):'no\x20mount\x20in\x20the\x20declared\x20graph';return{'id':'guard.'+h,'family':n,'what':(l?'Write\x20authorization':'Guard')+'\x20\x27'+h+'\x27\x20—\x20'+firstSentence(d['purpose']),'how':!f?{'surface':'pre-publish','via':'declared\x20in\x20the\x20template\x27s\x20guards[];\x20no\x20key,\x20so\x20nothing\x20can\x20address\x20it'}:m?{'surface':'pre-publish','via':'guard_resolutions[\x27'+h+'\x27]\x20(design\x20pattern\x20\x27'+d['template_id']+'\x27\x20resolves\x20at\x20build)'}:{'surface':'pre-publish','via':'resolved\x20from\x20\x27'+d['template_id']+'\x27\x20when\x20the\x20object\x20is\x20created'},'effect':l?'Only\x20a\x20passport\x20satisfying\x20this\x20guard\x20may\x20write\x20rows\x20of\x20that\x20policy;\x20the\x20policy\x20freezes\x20at\x20Repository\x20creation.':'A\x20move/claim\x20passes\x20only\x20when\x20this\x20guard\x20returns\x20true;\x20it\x20gates\x20'+o+'.','related':[...j['map'](p=>'edge:'+(p['from']||'(entry)')+'->'+p['to']),...k['map'](p=>'allocator:'+p['track']),...d['policy']!==undefined?['policy:'+(d['policy']['name']??h)]:[]],'configurable':f&&m,...!f?{'why_not':'Declared\x20with\x20NO\x20key:\x20no\x20edge\x20and\x20no\x20allocator\x20row\x20can\x20bind\x20it,\x20and\x20guard_resolutions\x20cannot\x20address\x20it\x20—\x20the\x20declaration\x20is\x20inert\x20until\x20the\x20template\x20gives\x20it\x20a\x20key.'}:m?{}:{'why_not':'The\x20template\x20id\x20\x27'+d['template_id']+'\x27\x20fixes\x20the\x20guard\x27s\x20node\x20structure;\x20the\x20merchant\x20changes\x20only\x20what\x20a\x20declared\x20parameter\x20feeds\x20into\x20it.'}};});}const MODE_SLOTS=[{'field':'payment_model','family':'machine','overridable':![],'what':'How\x20the\x20buyer\x20pays:\x20escrow\x20(single\x20funded\x20order),\x20milestone\x20(phased\x20ladder)\x20or\x20subscription\x20(recurring\x20terms).','effect':'Selects\x20the\x20funding\x20shape;\x20the\x20order\x20amount\x20is\x20immutable\x20once\x20created,\x20so\x20a\x20later\x20capture\x20funds\x20the\x20same\x20Allocation\x20rather\x20than\x20editing\x20it.'},{'field':'arbitration_mode','family':'arbitration','overridable':![],'what':'Who\x20rules:\x20an\x20independent\x20third-party\x20venue,\x20or\x20a\x20merchant-nominated\x20arbitrator.','effect':'Sets\x20the\x20dispute\x20authority.\x20Independence\x20(a\x20distinct\x20Permission)\x20is\x20what\x20R2\x20requires\x20and\x20what\x20the\x20chain\x27s\x20permission-conflict\x20check\x20enforces.'},{'field':'review_mode','family':'reward','overridable':!![],'what':'Whether\x20the\x20template\x20ships\x20a\x20review\x20rail\x20and\x20a\x20sale-time-planned\x20review\x20reward.','effect':'review_reward\x20emits\x20a\x20Reward,\x20a\x20funding\x20step\x20and\x20a\x20claim\x20guard\x20that\x20must\x20be\x20budgeted\x20at\x20build\x20time;\x20without\x20funding\x20the\x20incentive\x20must\x20not\x20be\x20promised.'},{'field':'after_sales_mode','family':'machine','overridable':!![],'what':'The\x20after-sales\x20rail\x20kind:\x20return,\x20exchange\x20or\x20warranty.','effect':'Compile\x20verifies\x20the\x20declared\x20rail\x20exists\x20in\x20the\x20machine;\x20money\x20safety\x20(window\x20anchor,\x20no\x20double\x20remedy)\x20is\x20enforced\x20on\x20every\x20build\x20regardless.'},{'field':'acceptance_mode','family':'machine','overridable':!![],'what':'How\x20a\x20delivery\x20is\x20accepted:\x20milestone\x20self-acceptance,\x20contest,\x20bounty\x20triage,\x20or\x20an\x20agent\x20evaluator.','effect':'A\x20judge-decided\x20mode\x20requires\x20an\x20independent\x20decider;\x20a\x20finite\x20revision\x20cap\x20is\x20only\x20real\x20when\x20a\x20counter-backed\x20repository\x20guard\x20exists.'},{'field':'reentry_kind','family':'machine','overridable':![],'what':'Whether\x20looping\x20back\x20through\x20the\x20flow\x20is\x20a\x20free\x20review\x20loop\x20or\x20a\x20charged\x20revisit.','effect':'Classifies\x20fund-gate\x20obligations\x20on\x20cycles:\x20a\x20paid\x20cycle\x20must\x20charge\x20per\x20revisit,\x20a\x20review\x20loop\x20must\x20not.'},{'field':'reward_claim_policy','family':'reward','overridable':![],'what':'Declared\x20claim\x20replay\x20policy\x20for\x20the\x20reward\x20machinery\x20(once\x20/\x20periodic\x20/\x20capped).','effect':'Discloses\x20the\x20replay\x20defence;\x20the\x20enforceable\x20half\x20is\x20the\x20record\x20gate\x20inside\x20the\x20claim\x20guard,\x20not\x20this\x20declaration.'}];function machineSlots(a,b){const c=[{'id':'machine.shape','family':'machine','what':a['machine_shape']['length']+'\x20nodes\x20/\x20'+b['length']+'\x20forwards\x20defining\x20the\x20order\x20lifecycle\x20('+a['machine_shape']['map'](d=>d['name'])['join'](',\x20')+').','how':{'surface':'pre-publish','via':'machine\x20create\x20(operation_type=\x27machine\x27)\x20then\x20bind\x20to\x20the\x20Service'},'effect':'Frozen\x20at\x20publish\x20(immutable);\x20every\x20order\x20copies\x20it,\x20so\x20a\x20topology\x20defect\x20is\x20permanent\x20and\x20every\x20later\x20order\x20inherits\x20it.','related':[...a['machine_shape']['map'](d=>'node:'+d['name'])],'configurable':![],'why_not':'A\x20published\x20Machine\x20is\x20immutable.\x20Fix\x20the\x20template\x20or\x20publish\x20a\x20new\x20Machine;\x20an\x20existing\x20order\x20keeps\x20the\x20shape\x20it\x20copied.'}];for(const d of MODE_SLOTS){const e=a[d['field']];if(e===undefined)continue;const f=typeof e==='object'&&e!==null?e['kind']:String(e);c['push']({'id':'machine.'+d['field'],'family':d['family'],'what':d['what']+'\x20(this\x20template:\x20\x27'+f+'\x27)','how':d['overridable']?{'surface':'pre-publish','via':'build\x20input\x20\x27'+d['field']+'\x27\x20(precedence:\x20input\x20>\x20template\x20declaration)'}:{'surface':'pre-publish','via':'template\x20declaration\x20\x27'+d['field']+'\x27\x20—\x20not\x20a\x20per-build\x20input'},'effect':d['effect'],'related':['declared:'+d['field']],'configurable':d['overridable'],...d['overridable']?{}:{'why_not':'The\x20template\x20declares\x20\x27'+d['field']+'\x27\x20as\x20a\x20whole\x20business\x20model;\x20no\x20build\x20input\x20overrides\x20it\x20—\x20a\x20different\x20model\x20means\x20a\x20different\x20template.'}});}a['compensation_fund_policy']!==undefined&&c['push']({'id':'machine.compensation_fund_policy','family':'treasury','what':'Compensation-fund\x20policy\x20for\x20this\x20template:\x20\x27'+a['compensation_fund_policy']+'\x27.','how':{'surface':'pre-publish','via':'template\x20declaration\x20compensation_fund_policy'},'effect':a['compensation_fund_policy']==='forbidden'?'The\x20build\x20must\x20NOT\x20emit\x20the\x20fund\x20top-up\x20step:\x20this\x20template\x27s\x20risk\x20carries\x20an\x20explicit\x20do-not-fund\x20ruling.':'The\x20fund\x20may\x20be\x20topped\x20up\x20as\x20a\x20deploy-time\x20step.','related':['service.compensation_fund'],'configurable':![],'why_not':'The\x20ruling\x20belongs\x20to\x20the\x20template\x27s\x20own\x20risk\x20model;\x20a\x20merchant\x20changing\x20it\x20would\x20be\x20overriding\x20the\x20safety\x20analysis\x20it\x20encodes.'});if(a['time_anchors']!==undefined)for(const [g,h]of Object['entries'](a['time_anchors'])){c['push']({'id':'machine.time_anchor.'+g,'family':'machine','what':'Timestamp\x20the\x20\x27'+g+'\x27\x20window\x20measures\x20from:\x20'+h+'.','how':{'surface':'pre-publish','via':'template\x20declaration\x20time_anchors\x20(resolved\x20into\x20the\x20guard\x20at\x20build)'},'effect':'Decides\x20whether\x20a\x20window\x20closes\x20correctly:\x20an\x20anchor\x20that\x20refreshes\x20on\x20every\x20forward\x20leaves\x20the\x20window\x20perpetually\x20open.','related':['window:'+g,'guard\x20clock\x20leg'],'configurable':![],'why_not':'The\x20anchor\x20follows\x20from\x20the\x20policy\x20the\x20template\x20encodes;\x20changing\x20it\x20changes\x20the\x20business\x20rule,\x20so\x20it\x20is\x20a\x20template\x20edit,\x20not\x20a\x20setting.'});}return c;}export function componentPlane(a){const b=edgesOf(a);return[...SERVICE_SLOTS,...SALES_SLOTS,...allocatorSlots(a),...machineSlots(a,b),...guardSlots(a,b)];}export function summarizeComponents(a){const b={};let c=0x0;for(const d of a){b[d['family']]=(b[d['family']]??0x0)+0x1;if(d['configurable'])c++;}return{'total':a['length'],'configurable':c,'fixed':a['length']-c,'hardcoded_splits':hardcodedSplits(a)['length'],'structural_rails':a['filter'](e=>e['freeze']==='rail')['length'],'unset_legs':a['filter'](e=>e['freeze']==='unset')['length'],'surplus_rows':a['filter'](e=>e['freeze']==='surplus')['length'],'by_family':b};}export function hardcodedSplits(a){return a['filter'](b=>b['freeze']==='split');}export function matchComponents(a,b,c=0xa){const d=a['trim']()['toLowerCase']();if(d==='')return[];const e=d['split'](/[^a-z0-9]+/)['filter'](g=>g['length']>0x1),f=[];for(const g of b){const h=(g['id']+'\x20'+g['family']+'\x20'+g['what']+'\x20'+g['how']['via']+'\x20'+g['effect']+'\x20'+g['related']['join']('\x20'))['toLowerCase']();if(!e['some'](j=>h['includes'](j)))continue;let i=0x0;if(g['id']['toLowerCase']()['includes'](d)||h['includes'](d))i+=0x6;for(const j of e){if(g['id']['toLowerCase']()['includes'](j))i+=0x3;else{if(h['includes'](j))i+=0x1;}}if(i>=0x3)f['push']({'slot':g,'score':i});}return f['sort']((k,l)=>l['score']-k['score']||k['slot']['id']['localeCompare'](l['slot']['id']))['slice'](0x0,c)['map'](k=>k['slot']);}
1
+ const SVC='onchain_operations\x20operation_type=\x27service\x27\x20data.';export const SERVICE_SLOTS=[{'id':'service.permission','family':'permission','what':'The\x20Permission\x20object\x20that\x20owns\x20the\x20Service;\x20every\x20admin\x20write\x20(price,\x20stock,\x20publish,\x20guard\x20entities)\x20resolves\x20through\x20it.','how':{'surface':'create','via':'service\x20create\x20with\x20the\x20Permission\x20object,\x20then\x20permission_operation\x20for\x20roles/entities'},'effect':'Authorizes\x20every\x20admin\x20write;\x20an\x20empty/foreign\x20permission\x20is\x20the\x20widening\x20that\x20lets\x20a\x20stranger\x20edit\x20pricing.','related':['Permission','EntityRegistrar\x20/\x20EntityLinker\x20rows','admin\x20transfer'],'configurable':!![]},{'id':'service.description','family':'service','what':'The\x20public\x20listing\x20copy\x20a\x20buyer\x20reads\x20before\x20ordering.','how':{'surface':'post-publish','via':SVC+'description'},'effect':'Changes\x20what\x20the\x20market\x20shows;\x20it\x20is\x20free\x20text\x20with\x20no\x20on-chain\x20anchor,\x20so\x20a\x20number\x20quoted\x20here\x20(a\x20compensation\x20cap,\x20a\x20refund\x20promise)\x20is\x20marketing,\x20not\x20a\x20term.','related':['market\x20listing','quote\x20/\x20buy\x20display'],'configurable':!![]},{'id':'service.location','family':'service','what':'The\x20service\x20area\x20and\x20scope\x20(country\x20>\x20province\x20>\x20city\x20>\x20district).','how':{'surface':'post-publish','via':SVC+'location'},'effect':'Drives\x20market\x20discovery\x20and\x20the\x20buyer\x27s\x20expectation\x20of\x20where\x20fulfilment\x20happens.','related':['market\x20discovery','fulfilment\x20scope'],'configurable':!![]},{'id':'service.machine','family':'machine','what':'The\x20Machine\x20(workflow)\x20bound\x20to\x20the\x20Service;\x20every\x20order\x20COPIES\x20it\x20at\x20creation,\x20so\x20the\x20order\x20keeps\x20its\x20own\x20fulfilment\x20path.','how':{'surface':'pre-publish','via':'machine\x20create\x20(operation_type=\x27machine\x27)\x20+\x20'+SVC+'machine'},'effect':'Fixes\x20the\x20order\x20lifecycle:\x20the\x20nodes\x20a\x20buyer\x20can\x20be\x20moved\x20through\x20and\x20the\x20guards\x20that\x20must\x20pass.\x20Frozen\x20at\x20publish.','related':['Machine','Order.progress','guards\x20host=\x27machine\x27'],'configurable':!![]},{'id':'service.buy_guard','family':'guard','what':'The\x20guard\x20a\x20buyer\x27s\x20passport\x20must\x20pass\x20to\x20purchase\x20(qualification,\x20membership,\x20region).','how':{'surface':'pre-publish','via':'guard\x20create\x20(operation_type=\x27guard\x27)\x20+\x20'+SVC+'buy_guard'},'effect':'Denies\x20purchase\x20to\x20a\x20passport\x20that\x20fails\x20it;\x20the\x20requirement\x20is\x20immutable\x20after\x20publish.','related':['Guard','Passport','purchase\x20(plain\x20or\x20passport-backed)'],'configurable':!![]},{'id':'service.bPublished','family':'service','what':'The\x20publish\x20flag\x20—\x20the\x20object\x20becomes\x20purchasable\x20only\x20when\x20published\x20(and\x20not\x20paused).','how':{'surface':'post-publish','via':SVC+'publish\x20=\x20true'},'effect':'Emits\x20the\x20market-opportunity\x20event\x20that\x20makes\x20the\x20listing\x20discoverable\x20and\x20buyable.','related':['ServiceEvent','market\x20discovery'],'configurable':!![]},{'id':'service.bPaused','family':'service','what':'The\x20pause\x20flag\x20that\x20forbids\x20buying\x20without\x20unpublishing\x20the\x20listing.','how':{'surface':'post-publish','via':SVC+'pause\x20=\x20true\x20/\x20false'},'effect':'Every\x20buy\x20aborts\x20while\x20paused;\x20existing\x20orders\x20are\x20unaffected.','related':['Sales','buy'],'configurable':!![]},{'id':'service.sales','family':'sales','what':'The\x20list\x20of\x20products\x20for\x20sale;\x20the\x20order\x20total\x20is\x20sale.price\x20x\x20the\x20purchased\x20quantity.','how':{'surface':'post-publish','via':SVC+'sales\x20(op\x20add\x20/\x20set\x20/\x20remove\x20/\x20clear)'},'effect':'Changes\x20what\x20can\x20be\x20bought\x20and\x20at\x20what\x20price;\x20a\x20price\x20edit\x20does\x20not\x20touch\x20orders\x20already\x20placed\x20(their\x20amount\x20is\x20immutable).','related':['Sale','Order.amount','quote'],'configurable':!![]},{'id':'service.repositories','family':'repository','what':'On-chain\x20key-value\x20stores\x20the\x20workflow\x20writes\x20into\x20(review\x20rows,\x20certificates,\x20evidence).','how':{'surface':'pre-publish','via':SVC+'repositories\x20+\x20repository\x20create\x20(policies\x20freeze\x20at\x20creation)'},'effect':'A\x20write\x20passes\x20only\x20through\x20the\x20policy\x27s\x20write\x20guard;\x20a\x20policy\x20is\x20immutable\x20once\x20the\x20Repository\x20exists,\x20so\x20the\x20write\x20authority\x20must\x20be\x20right\x20at\x20creation.','related':['Repository','PolicyRule','guards\x20host=\x27repository\x27'],'configurable':!![]},{'id':'service.order_allocators','family':'allocator','what':'The\x20payout\x20plan\x20every\x20order\x20inherits:\x20who\x20receives\x20how\x20much\x20of\x20the\x20escrow,\x20and\x20which\x20guard\x20fires\x20each\x20leg.','how':{'surface':'pre-publish','via':SVC+'order_allocators\x20(set\x20before\x20publish;\x20append-only\x20afterwards)'},'effect':'Decides\x20the\x20money\x20split\x20of\x20every\x20future\x20order.\x20After\x20publish\x20the\x20existing\x20entries\x20are\x20frozen\x20and\x20NEW\x20entries\x20can\x20only\x20be\x20APPENDED,\x20each\x20emitting\x20OrderAllocatorsAppendedEvent\x20so\x20buyers\x20can\x20re-evaluate.','related':['Allocators','Allocation','guards\x20referenced\x20by\x20allocator.rows[].guard_key'],'configurable':!![]},{'id':'service.arbitrations','family':'arbitration','what':'The\x20independent\x20arbitration\x20venues\x20an\x20order\x20may\x20escalate\x20to.','how':{'surface':'pre-publish','via':SVC+'arbitrations\x20(bind\x20an\x20operational\x20venue)'},'effect':'Defines\x20who\x20can\x20rule\x20on\x20a\x20dispute.\x20A\x20venue\x20sharing\x20the\x20Service\x27s\x20own\x20Permission\x20is\x20rejected\x20on\x20chain\x20(E_ARBITRATION_PERMISSION_CONFLICT),\x20so\x20independence\x20is\x20structural.','related':['Arbitration','Permission','Order\x20arbitration'],'configurable':!![]},{'id':'service.compensation_fund','family':'treasury','what':'A\x20fund\x20the\x20arbitrator\x20can\x20award\x20from,\x20separate\x20from\x20the\x20order\x20escrow.','how':{'surface':'post-publish','via':SVC+'compensation_fund\x20(top-up)\x20+\x20setting_lock_duration'},'effect':'Widens\x20the\x20remedy\x20beyond\x20the\x20order\x27s\x20own\x20escrow.\x20The\x20per-order\x20ceiling\x20is\x20fund/3\x20(MAX_INDEMNITY_MULTIPLE),\x20and\x20an\x20award\x20shrinks\x20the\x20live\x20fund\x20in\x20place\x20—\x20a\x20headline\x20number\x20in\x20the\x20listing\x20goes\x20stale.','related':['Arbitration\x20award','setting_lock_duration','trust\x20copy'],'configurable':!![]},{'id':'service.setting_lock_duration','family':'service','what':'How\x20long\x20the\x20compensation\x20/\x20setting\x20window\x20stays\x20locked\x20after\x20an\x20order\x20is\x20placed.','how':{'surface':'post-publish','via':SVC+'setting_lock_duration'},'effect':'Sets\x20the\x20merchant\x27s\x20commitment\x20horizon\x20for\x20the\x20fund\x20and\x20the\x20settings\x20it\x20covers.','related':['compensation_fund','settings'],'configurable':!![]},{'id':'service.customer_required','family':'service','what':'Fields\x20the\x20buyer\x20is\x20asked\x20to\x20supply\x20at\x20purchase\x20(shipping\x20/\x20meetup\x20information).','how':{'surface':'post-publish','via':SVC+'customer_required'},'effect':'DECLARATIVE\x20ONLY:\x20the\x20on-chain\x20purchase\x20never\x20reads\x20it,\x20so\x20an\x20order\x20that\x20supplies\x20none\x20is\x20still\x20created.\x20Enforcement\x20exists\x20only\x20if\x20a\x20required-info\x20evidence\x20gate\x20guards\x20the\x20first\x20forward.','related':['required_info_evidence_gate','order.required_info','privacy\x20disclosure'],'configurable':!![]},{'id':'service.rewards','family':'reward','what':'Incentive\x20pools\x20(review\x20bounty,\x20referral)\x20bound\x20to\x20the\x20Service.','how':{'surface':'post-publish','via':SVC+'rewards\x20+\x20reward\x20create\x20(operation_type=\x27reward\x27)'},'effect':'A\x20claim\x20is\x20the\x20ONLY\x20exit\x20from\x20a\x20Reward\x27s\x20balance;\x20the\x20pool\x20is\x20funded\x20at\x20creation\x20and\x20every\x20claim\x20needs\x20the\x20binding\x20guard\x20to\x20pass.','related':['Reward','claim\x20guard','review\x20rail'],'configurable':!![]},{'id':'service.um','family':'service','what':'The\x20Contact\x20object\x20bound\x20as\x20the\x20service\x27s\x20communication\x20channel.','how':{'surface':'post-publish','via':SVC+'um\x20+\x20contact\x20create\x20(operation_type=\x27contact\x27)'},'effect':'Routes\x20pre-order\x20negotiation\x20and\x20evidence\x20conversations\x20to\x20that\x20contact\x27s\x20inbox.','related':['Contact','Messenger'],'configurable':!![]},{'id':'allocation.per_order','family':'allocation','what':'The\x20per-order\x20Allocation:\x20the\x20escrow\x20pool\x20created\x20from\x20the\x20Service\x27s\x20order_allocators\x20when\x20an\x20order\x20is\x20placed.','how':{'surface':'immutable','via':'created\x20by\x20buy\x20(order_new);\x20funded\x20later\x20via\x20order_renew\x20/\x20receive'},'effect':'Its\x20balance\x20can\x20grow\x20(a\x20later\x20capture\x20joins\x20the\x20SAME\x20order\x27s\x20allocation)\x20but\x20the\x20plan\x20that\x20distributes\x20it\x20is\x20the\x20Order\x27s\x20own;\x20distribution\x20requires\x20the\x20bound\x20guard\x20and\x20pays\x20every\x20leg\x20bound\x20to\x20that\x20guard.','related':['Order','Allocators','PaymentInfo.for_object'],'configurable':![],'why_not':'The\x20Allocation\x20is\x20created\x20by\x20the\x20purchase,\x20not\x20by\x20configuration.\x20Change\x20the\x20split\x20by\x20editing\x20the\x20Service\x27s\x20order_allocators\x20BEFORE\x20publish\x20(or\x20appending\x20after).'}];export const SALES_SLOTS=[{'id':'sale.price','family':'sales','what':'Unit\x20price\x20of\x20one\x20product;\x20the\x20order\x20total\x20is\x20price\x20x\x20quantity.','how':{'surface':'post-publish','via':SVC+'sales\x20op=\x27price_add\x27\x20/\x20\x27price_reduce\x27'},'effect':'Changes\x20the\x20price\x20of\x20future\x20orders\x20only\x20—\x20an\x20existing\x20order\x27s\x20amount\x20is\x20immutable.','related':['Order.amount','discount','quote'],'configurable':!![]},{'id':'sale.stock','family':'sales','what':'Units\x20available\x20for\x20sale.','how':{'surface':'post-publish','via':SVC+'sales\x20op=\x27stock_add\x27\x20/\x20\x27stock_reduce\x27'},'effect':'Caps\x20how\x20many\x20units\x20one\x20purchase\x20can\x20take;\x20a\x20refund\x20can\x20put\x20units\x20back\x20only\x20when\x20the\x20SKU\x20opted\x20in.','related':['quantity','restock_on_refund'],'configurable':!![]},{'id':'sale.suspension','family':'sales','what':'Per-product\x20suspension\x20flag\x20(the\x20\x27listing\x20inactive\x27\x20state).','how':{'surface':'post-publish','via':SVC+'sales\x20op=\x27suspend\x27\x20(suspension\x20true/false)'},'effect':'Buy\x20and\x20quote\x20abort\x20for\x20that\x20product\x20only;\x20price/stock/WIP\x20stay\x20bound.','related':['buy','quote'],'configurable':!![]},{'id':'sale.wip','family':'sales','what':'The\x20public\x20product-detail\x20page\x20URL\x20a\x20buyer\x20fetches\x20at\x20order\x20time.','how':{'surface':'post-publish','via':SVC+'sales\x20(wip\x20+\x20wip_hash)'},'effect':'Stored\x20on\x20chain\x20and\x20fetched\x20by\x20every\x20buyer;\x20an\x20unreachable\x20or\x20empty\x20URL\x20makes\x20the\x20listing\x20incomplete\x20and\x20can\x20abort\x20the\x20order.','related':['wip_file','wip_hash','market\x20completeness'],'configurable':!![]},{'id':'sale.restock_on_refund','family':'sales','what':'Per-SKU\x20opt-in:\x20a\x20refunded\x20order\x20puts\x20its\x20purchased\x20units\x20back\x20on\x20shelf.','how':{'surface':'post-publish','via':SVC+'restock\x20op=\x27flag\x27'},'effect':'Without\x20the\x20flag\x20the\x20order-level\x20restock\x20op\x20refuses\x20that\x20line;\x20flagging\x20does\x20not\x20itself\x20move\x20stock.','related':['refund','restock\x20op=\x27order\x27'],'configurable':!![]}];function firstSentence(a){const b=a['indexOf']('.\x20'),c=b===-0x1?a:a['slice'](0x0,b+0x1);return c['length']>0xf0?c['slice'](0x0,0xed)+'...':c;}function edgeOperator(a,b){if(typeof b==='string')return a['operator']??(b===''?'order_payer':'merchant');return b['operator']??a['operator']??(b['prev']===''?'order_payer':'merchant');}function edgesOf(a){const b=[];for(const c of a['machine_shape']){for(const d of c['from']??[]){const e=typeof d==='string'?{'prev':d}:d;b['push']({'from':e['prev']??'','to':c['name'],...e['guard_key']!==undefined?{'guard_key':e['guard_key']}:{},'operator':edgeOperator(c,d)});}}return b;}const FIXED_SPLIT_REASON='The\x20split\x20is\x20a\x20literal\x20in\x20the\x20template\x20body\x20—\x20no\x20fee_param\x20carries\x20it,\x20so\x20a\x20merchant\x20cannot\x20change\x20it\x20without\x20a\x20template\x20edit.',DERIVED_SPLIT_REASON='A\x20Surplus\x20row\x20has\x20no\x20value\x20of\x20its\x20own\x20—\x20it\x20pays\x20whatever\x20the\x20Rate/Amount\x20rows\x20leave\x20behind,\x20so\x20its\x20size\x20follows\x20from\x20the\x20other\x20rows.',STRUCTURAL_RAIL_REASON='This\x20row\x20pays\x20the\x20ENTIRE\x20escrow\x20(100%)\x20to\x20its\x20recipient\x20—\x20it\x20IS\x20the\x20settlement/refund\x20rail,\x20not\x20a\x20rate.\x20There\x20is\x20no\x20share\x20to\x20set:\x20the\x20amount\x20is\x20whatever\x20the\x20order\x20holds.',UNSET_LEG_REASON='This\x20row\x20pays\x20nothing\x20today\x20(0\x20bps):\x20a\x20declared\x20placeholder\x20leg\x20(usually\x20the\x20order-side\x20residual\x20of\x20a\x20two-leg\x20group).\x20Moving\x20money\x20through\x20it\x20changes\x20who\x20is\x20paid,\x20which\x20is\x20a\x20template\x20decision,\x20not\x20a\x20runtime\x20setting.';function allocatorSlots(a){const b=a['allocator']['rows']??[],c=[{'id':'allocator.group','family':'allocator','what':b['length']+'\x20allocator\x20row(s),\x20default\x20mode\x20\x27'+a['allocator']['mode']+'\x27,\x20recipient\x20\x27'+a['allocator']['recipient']+'\x27'+(a['allocator']['once_per_order']===!![]?',\x20once-armed\x20replay\x20lock\x20per\x20ALLOCATOR\x20(each\x20allocator\x27s\x20own\x20254\x20slot\x20is\x20order-anchored\x20—\x20pdd\x20F-12:\x20this\x20is\x20allocator-level\x20replay\x20protection,\x20NOT\x20a\x20plan-wide\x20\x27one\x20claim\x20per\x20order\x27\x20guarantee;\x20a\x20plan\x20with\x20multiple\x20armed\x20allocators\x20can\x20still\x20pay\x20an\x20order\x20more\x20than\x20once\x20across\x20rails)':'')+(a['allocator']['refund_track']!==undefined?',\x20refund\x20track\x20'+a['allocator']['refund_track']:'')+'.','how':{'surface':'pre-publish','via':SVC+'order_allocators\x20(group\x20settings)'},'effect':'A\x20Rate\x20group\x20must\x20sum\x20to\x20exactly\x2010000\x20unless\x20a\x20Surplus\x20entry\x20absorbs\x20the\x20remainder;\x20a\x20distribution\x20call\x20submits\x20ONE\x20guard\x20and\x20every\x20row\x20bound\x20to\x20it\x20fires.','related':['Allocators.mode','Allocators.once_per_order','Allocators.refund_track'],'configurable':!![]}];return b['forEach']((d,e)=>{const f=d['value_from']??d['value_from_complement'],g=d['mode']==='surplus',h=!g&&d['value']!==undefined&&f===undefined,j=h&&d['mode']==='rate'?Number(d['value']):NaN,k=g?'surplus':f!==undefined?undefined:j===0x2710?'rail':j===0x0?'unset':'split',l=g?'the\x20remaining\x20balance':f!==undefined?d['mode']+'\x20from\x20fee_param\x20\x27'+f+'\x27'+(d['value_from_complement']!==undefined?'\x20(complement\x20of\x2010000)':''):d['mode']+'\x20'+String(d['value']);c['push']({'id':'allocator.rows['+e+']','family':'allocator','what':'Row\x20'+e+'\x20('+d['track']+'):\x20pays\x20'+l+'\x20to\x20'+(d['recipient']==='guard_identifier'?'the\x20submitted\x20Order\x20(slot\x20'+(d['recipient_key']??'?')+')':d['recipient']+'\x20\x27'+(d['recipient_key']??'')+'\x27')+'.','how':{'surface':'pre-publish','via':f!==undefined?SVC+'order_allocators\x20(row\x20'+e+'\x20reads\x20fee_param\x20\x27'+f+'\x27)':SVC+'order_allocators\x20(row\x20'+e+'\x20value\x20is\x20fixed\x20in\x20the\x20template\x20body)'},'effect':'Fires\x20only\x20when\x20guard\x20\x27'+(d['guard_key']??'(NONE\x20—\x20unbound)')+'\x27\x20passes;\x20the\x20amount\x20moves\x20at\x20that\x20moment\x20and\x20cannot\x20be\x20recalled.','related':[...d['guard_key']!==undefined?['guard:'+d['guard_key']]:[],...f!==undefined?['fee_param:'+f]:[],...d['recipient_key']!==undefined?['recipient:'+d['recipient_key']]:[]],'configurable':f!==undefined,...h?{'freeze':k}:g?{'freeze':'surplus'}:{},...g?{'why_not':DERIVED_SPLIT_REASON}:j===0x2710?{'why_not':STRUCTURAL_RAIL_REASON}:j===0x0?{'why_not':UNSET_LEG_REASON}:h?{'why_not':FIXED_SPLIT_REASON}:{}});}),c;}function guardSlots(a,b){const c=a['allocator']['rows']??[];return a['guards']['map']((d,e)=>{const f=d['key']!==undefined,h=d['key']??d['template_id']+'#'+e,j=b['filter'](p=>p['guard_key']===d['key']),k=c['filter'](p=>p['guard_key']===d['key']),l=d['host']==='repository',m=d['template_id']['startsWith']('pattern.'),n=d['host']==='repository'?'repository':d['host']==='reward'?'reward':d['host']==='arbitration'?'arbitration':'guard',o=l?'Repository\x20write\x20policy\x20\x27'+(d['policy']?.['name']??h)+'\x27\x20(id_from\x20'+(d['policy']?.['id_from']??'signer')+',\x20value_type\x20'+(d['policy']?.['value_type']??'String')+(d['policy']?.['write_once']===!![]?',\x20write_once':'')+')':j['length']>0x0?'forward(s)\x20'+j['map'](p=>(p['from']||'(entry)')+'\x20->\x20'+p['to']+'\x20('+p['operator']+')')['join'](',\x20'):k['length']>0x0?'allocator\x20row(s)\x20'+k['map'](p=>p['track'])['join']('/'):'no\x20mount\x20in\x20the\x20declared\x20graph';return{'id':'guard.'+h,'family':n,'what':(l?'Write\x20authorization':'Guard')+'\x20\x27'+h+'\x27\x20—\x20'+firstSentence(d['purpose']),'how':!f?{'surface':'pre-publish','via':'declared\x20in\x20the\x20template\x27s\x20guards[];\x20no\x20key,\x20so\x20nothing\x20can\x20address\x20it'}:m?{'surface':'pre-publish','via':'guard_resolutions[\x27'+h+'\x27]\x20(design\x20pattern\x20\x27'+d['template_id']+'\x27\x20resolves\x20at\x20build)'}:{'surface':'pre-publish','via':'resolved\x20from\x20\x27'+d['template_id']+'\x27\x20when\x20the\x20object\x20is\x20created'},'effect':l?'Only\x20a\x20passport\x20satisfying\x20this\x20guard\x20may\x20write\x20rows\x20of\x20that\x20policy;\x20the\x20policy\x20freezes\x20at\x20Repository\x20creation.':'A\x20move/claim\x20passes\x20only\x20when\x20this\x20guard\x20returns\x20true;\x20it\x20gates\x20'+o+'.','related':[...j['map'](p=>'edge:'+(p['from']||'(entry)')+'->'+p['to']),...k['map'](p=>'allocator:'+p['track']),...d['policy']!==undefined?['policy:'+(d['policy']['name']??h)]:[]],'configurable':f&&m,...!f?{'why_not':'Declared\x20with\x20NO\x20key:\x20no\x20edge\x20and\x20no\x20allocator\x20row\x20can\x20bind\x20it,\x20and\x20guard_resolutions\x20cannot\x20address\x20it\x20—\x20the\x20declaration\x20is\x20inert\x20until\x20the\x20template\x20gives\x20it\x20a\x20key.'}:m?{}:{'why_not':'The\x20template\x20id\x20\x27'+d['template_id']+'\x27\x20fixes\x20the\x20guard\x27s\x20node\x20structure;\x20the\x20merchant\x20changes\x20only\x20what\x20a\x20declared\x20parameter\x20feeds\x20into\x20it.'}};});}const MODE_SLOTS=[{'field':'payment_model','family':'machine','overridable':![],'what':'How\x20the\x20buyer\x20pays:\x20escrow\x20(single\x20funded\x20order),\x20milestone\x20(phased\x20ladder)\x20or\x20subscription\x20(recurring\x20terms).','effect':'Selects\x20the\x20funding\x20shape;\x20the\x20order\x20amount\x20is\x20immutable\x20once\x20created,\x20so\x20a\x20later\x20capture\x20funds\x20the\x20same\x20Allocation\x20rather\x20than\x20editing\x20it.'},{'field':'arbitration_mode','family':'arbitration','overridable':![],'what':'Who\x20rules:\x20an\x20independent\x20third-party\x20venue,\x20or\x20a\x20merchant-nominated\x20arbitrator.','effect':'Sets\x20the\x20dispute\x20authority.\x20Independence\x20(a\x20distinct\x20Permission)\x20is\x20what\x20R2\x20requires\x20and\x20what\x20the\x20chain\x27s\x20permission-conflict\x20check\x20enforces.'},{'field':'review_mode','family':'reward','overridable':!![],'what':'Whether\x20the\x20template\x20ships\x20a\x20review\x20rail\x20and\x20a\x20sale-time-planned\x20review\x20reward.','effect':'review_reward\x20emits\x20a\x20Reward,\x20a\x20funding\x20step\x20and\x20a\x20claim\x20guard\x20that\x20must\x20be\x20budgeted\x20at\x20build\x20time;\x20without\x20funding\x20the\x20incentive\x20must\x20not\x20be\x20promised.'},{'field':'after_sales_mode','family':'machine','overridable':!![],'what':'The\x20after-sales\x20rail\x20kind:\x20return,\x20exchange\x20or\x20warranty.','effect':'Compile\x20verifies\x20the\x20declared\x20rail\x20exists\x20in\x20the\x20machine;\x20money\x20safety\x20(window\x20anchor,\x20no\x20double\x20remedy)\x20is\x20enforced\x20on\x20every\x20build\x20regardless.'},{'field':'acceptance_mode','family':'machine','overridable':!![],'what':'How\x20a\x20delivery\x20is\x20accepted:\x20milestone\x20self-acceptance,\x20contest,\x20bounty\x20triage,\x20or\x20an\x20agent\x20evaluator.','effect':'A\x20judge-decided\x20mode\x20requires\x20an\x20independent\x20decider;\x20a\x20finite\x20revision\x20cap\x20is\x20only\x20real\x20when\x20a\x20counter-backed\x20repository\x20guard\x20exists.'},{'field':'reentry_kind','family':'machine','overridable':![],'what':'Whether\x20looping\x20back\x20through\x20the\x20flow\x20is\x20a\x20free\x20review\x20loop\x20or\x20a\x20charged\x20revisit.','effect':'Classifies\x20fund-gate\x20obligations\x20on\x20cycles:\x20a\x20paid\x20cycle\x20must\x20charge\x20per\x20revisit,\x20a\x20review\x20loop\x20must\x20not.'},{'field':'reward_claim_policy','family':'reward','overridable':![],'what':'Declared\x20claim\x20replay\x20policy\x20for\x20the\x20reward\x20machinery\x20(once\x20/\x20periodic\x20/\x20capped).','effect':'Discloses\x20the\x20replay\x20defence;\x20the\x20enforceable\x20half\x20is\x20the\x20record\x20gate\x20inside\x20the\x20claim\x20guard,\x20not\x20this\x20declaration.'}];function machineSlots(a,b){const c=[{'id':'machine.shape','family':'machine','what':a['machine_shape']['length']+'\x20nodes\x20/\x20'+b['length']+'\x20forwards\x20defining\x20the\x20order\x20lifecycle\x20('+a['machine_shape']['map'](d=>d['name'])['join'](',\x20')+').','how':{'surface':'pre-publish','via':'machine\x20create\x20(operation_type=\x27machine\x27)\x20then\x20bind\x20to\x20the\x20Service'},'effect':'Frozen\x20at\x20publish\x20(immutable);\x20every\x20order\x20copies\x20it,\x20so\x20a\x20topology\x20defect\x20is\x20permanent\x20and\x20every\x20later\x20order\x20inherits\x20it.','related':[...a['machine_shape']['map'](d=>'node:'+d['name'])],'configurable':![],'why_not':'A\x20published\x20Machine\x20is\x20immutable.\x20Fix\x20the\x20template\x20or\x20publish\x20a\x20new\x20Machine;\x20an\x20existing\x20order\x20keeps\x20the\x20shape\x20it\x20copied.'}];for(const d of MODE_SLOTS){const e=a[d['field']];if(e===undefined)continue;const f=typeof e==='object'&&e!==null?e['kind']:String(e);c['push']({'id':'machine.'+d['field'],'family':d['family'],'what':d['what']+'\x20(this\x20template:\x20\x27'+f+'\x27)','how':d['overridable']?{'surface':'pre-publish','via':'build\x20input\x20\x27'+d['field']+'\x27\x20(precedence:\x20input\x20>\x20template\x20declaration)'}:{'surface':'pre-publish','via':'template\x20declaration\x20\x27'+d['field']+'\x27\x20—\x20not\x20a\x20per-build\x20input'},'effect':d['effect'],'related':['declared:'+d['field']],'configurable':d['overridable'],...d['overridable']?{}:{'why_not':'The\x20template\x20declares\x20\x27'+d['field']+'\x27\x20as\x20a\x20whole\x20business\x20model;\x20no\x20build\x20input\x20overrides\x20it\x20—\x20a\x20different\x20model\x20means\x20a\x20different\x20template.'}});}a['compensation_fund_policy']!==undefined&&c['push']({'id':'machine.compensation_fund_policy','family':'treasury','what':'Compensation-fund\x20policy\x20for\x20this\x20template:\x20\x27'+a['compensation_fund_policy']+'\x27.','how':{'surface':'pre-publish','via':'template\x20declaration\x20compensation_fund_policy'},'effect':a['compensation_fund_policy']==='forbidden'?'The\x20build\x20must\x20NOT\x20emit\x20the\x20fund\x20top-up\x20step:\x20this\x20template\x27s\x20risk\x20carries\x20an\x20explicit\x20do-not-fund\x20ruling.':'The\x20fund\x20may\x20be\x20topped\x20up\x20as\x20a\x20deploy-time\x20step.','related':['service.compensation_fund'],'configurable':![],'why_not':'The\x20ruling\x20belongs\x20to\x20the\x20template\x27s\x20own\x20risk\x20model;\x20a\x20merchant\x20changing\x20it\x20would\x20be\x20overriding\x20the\x20safety\x20analysis\x20it\x20encodes.'});if(a['time_anchors']!==undefined)for(const [g,h]of Object['entries'](a['time_anchors'])){c['push']({'id':'machine.time_anchor.'+g,'family':'machine','what':'Timestamp\x20the\x20\x27'+g+'\x27\x20window\x20measures\x20from:\x20'+h+'.','how':{'surface':'pre-publish','via':'template\x20declaration\x20time_anchors\x20(resolved\x20into\x20the\x20guard\x20at\x20build)'},'effect':'Decides\x20whether\x20a\x20window\x20closes\x20correctly:\x20an\x20anchor\x20that\x20refreshes\x20on\x20every\x20forward\x20leaves\x20the\x20window\x20perpetually\x20open.','related':['window:'+g,'guard\x20clock\x20leg'],'configurable':![],'why_not':'The\x20anchor\x20follows\x20from\x20the\x20policy\x20the\x20template\x20encodes;\x20changing\x20it\x20changes\x20the\x20business\x20rule,\x20so\x20it\x20is\x20a\x20template\x20edit,\x20not\x20a\x20setting.'});}return c;}export function componentPlane(a){const b=edgesOf(a);return[...SERVICE_SLOTS,...SALES_SLOTS,...allocatorSlots(a),...machineSlots(a,b),...guardSlots(a,b)];}export function summarizeComponents(a){const b={};let c=0x0;for(const d of a){b[d['family']]=(b[d['family']]??0x0)+0x1;if(d['configurable'])c++;}return{'total':a['length'],'configurable':c,'fixed':a['length']-c,'hardcoded_splits':hardcodedSplits(a)['length'],'structural_rails':a['filter'](e=>e['freeze']==='rail')['length'],'unset_legs':a['filter'](e=>e['freeze']==='unset')['length'],'surplus_rows':a['filter'](e=>e['freeze']==='surplus')['length'],'by_family':b};}export function hardcodedSplits(a){return a['filter'](b=>b['freeze']==='split');}export function matchComponents(a,b,c=0xa){const d=a['trim']()['toLowerCase']();if(d==='')return[];const e=d['split'](/[^a-z0-9]+/)['filter'](g=>g['length']>0x1),f=[];for(const g of b){const h=(g['id']+'\x20'+g['family']+'\x20'+g['what']+'\x20'+g['how']['via']+'\x20'+g['effect']+'\x20'+g['related']['join']('\x20'))['toLowerCase']();if(!e['some'](j=>h['includes'](j)))continue;let i=0x0;if(g['id']['toLowerCase']()['includes'](d)||h['includes'](d))i+=0x6;for(const j of e){if(g['id']['toLowerCase']()['includes'](j))i+=0x3;else{if(h['includes'](j))i+=0x1;}}if(i>=0x3)f['push']({'slot':g,'score':i});}return f['sort']((k,l)=>l['score']-k['score']||k['slot']['id']['localeCompare'](l['slot']['id']))['slice'](0x0,c)['map'](k=>k['slot']);}
@@ -16,7 +16,6 @@ export interface ContactTemplate {
16
16
  notes?: string[];
17
17
  }
18
18
  export declare const CONTACT_TEMPLATES: ContactTemplate[];
19
- export declare const CONTACT_TEMPLATES_VERSION = "1.0.0";
20
19
  export declare function getContactTemplateById(id: string): ContactTemplate | undefined;
21
20
  export declare function fillTemplate(templateId: string, params: Record<string, string>): {
22
21
  ok: true;
@@ -1 +1 @@
1
- export const CONTACT_TEMPLATES=[{'id':'T-C-01','name':'Basic\x20contact','description':'Named\x20contact\x20with\x20a\x20permission\x20reference\x20and\x20description.\x20Bind\x20to\x20a\x20Service\x20via\x20`um`.','applicable_scenes':['contact_basic'],'industry_tags':['universal'],'params':[{'name':'name','type':'string','description':'Contact\x20object\x20name','required':!![]},{'name':'permission','type':'string','description':'Permission\x20object\x20name/address','required':!![]},{'name':'description','type':'string','description':'Contact\x20description\x20shown\x20to\x20customers','required':!![]}],'body':a=>({'object':{'name':a['name'],'permission':a['permission'],'replaceExistName':!![]},'description':a['description']}),'notes':['Bind\x20this\x20contact\x20to\x20a\x20Service\x20via\x20the\x20service\x20call\x27s\x20\x27um\x27\x20field']},{'id':'T-C-02','name':'Support\x20contact\x20with\x20IM','description':'Contact\x20with\x20an\x20initial\x20IM\x20entry\x20pointing\x20at\x20a\x20support\x20account\x20(after-sales\x20/\x20pre-order).','applicable_scenes':['contact_support'],'industry_tags':['retail','rental','education','travel','freelance','subscription'],'params':[{'name':'name','type':'string','description':'Contact\x20object\x20name','required':!![]},{'name':'permission','type':'string','description':'Permission\x20object\x20name/address','required':!![]},{'name':'description','type':'string','description':'Contact\x20description\x20shown\x20to\x20customers','required':!![]},{'name':'support_account','type':'string','description':'Support\x20account\x20name\x20or\x200x\x20address\x20for\x20IM','required':!![]},{'name':'im_description','type':'string','description':'IM\x20entry\x20description\x20(e.g.\x20\x27Primary\x20support\x20representative\x27)','required':!![]}],'body':a=>({'object':{'name':a['name'],'permission':a['permission'],'replaceExistName':!![]},'description':a['description'],'ims':{'op':'add','im':[{'at':a['support_account'],'description':a['im_description']}]}}),'notes':['ims.im[].at\x20accepts\x20an\x20account\x20name\x20or\x20a\x20full\x200x\x20address','ims\x20is\x20an\x20op\x20discriminated\x20union\x20—\x20{op:\x27add\x27|\x27set\x27|\x27remove\x27|\x27clear\x27}']}];export const CONTACT_TEMPLATES_VERSION='1.0.0';export function getContactTemplateById(a){return CONTACT_TEMPLATES['find'](b=>b['id']===a);}export function fillTemplate(a,b){const c=getContactTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}return{'ok':!![],'body':c['body'](b)};}
1
+ export const CONTACT_TEMPLATES=[{'id':'T-C-01','name':'Basic\x20contact','description':'Named\x20contact\x20with\x20a\x20permission\x20reference\x20and\x20description.\x20Bind\x20to\x20a\x20Service\x20via\x20`um`.','applicable_scenes':['contact_basic'],'industry_tags':['universal'],'params':[{'name':'name','type':'string','description':'Contact\x20object\x20name','required':!![]},{'name':'permission','type':'string','description':'Permission\x20object\x20name/address','required':!![]},{'name':'description','type':'string','description':'Contact\x20description\x20shown\x20to\x20customers','required':!![]}],'body':a=>({'object':{'name':a['name'],'permission':a['permission'],'replaceExistName':!![]},'description':a['description']}),'notes':['Bind\x20this\x20contact\x20to\x20a\x20Service\x20via\x20the\x20service\x20call\x27s\x20\x27um\x27\x20field']},{'id':'T-C-02','name':'Support\x20contact\x20with\x20IM','description':'Contact\x20with\x20an\x20initial\x20IM\x20entry\x20pointing\x20at\x20a\x20support\x20account\x20(after-sales\x20/\x20pre-order).','applicable_scenes':['contact_support'],'industry_tags':['retail','rental','education','travel','freelance','subscription'],'params':[{'name':'name','type':'string','description':'Contact\x20object\x20name','required':!![]},{'name':'permission','type':'string','description':'Permission\x20object\x20name/address','required':!![]},{'name':'description','type':'string','description':'Contact\x20description\x20shown\x20to\x20customers','required':!![]},{'name':'support_account','type':'string','description':'Support\x20account\x20name\x20or\x200x\x20address\x20for\x20IM','required':!![]},{'name':'im_description','type':'string','description':'IM\x20entry\x20description\x20(e.g.\x20\x27Primary\x20support\x20representative\x27)','required':!![]}],'body':a=>({'object':{'name':a['name'],'permission':a['permission'],'replaceExistName':!![]},'description':a['description'],'ims':{'op':'add','im':[{'at':a['support_account'],'description':a['im_description']}]}}),'notes':['ims.im[].at\x20accepts\x20an\x20account\x20name\x20or\x20a\x20full\x200x\x20address','ims\x20is\x20an\x20op\x20discriminated\x20union\x20—\x20{op:\x27add\x27|\x27set\x27|\x27remove\x27|\x27clear\x27}']}];export function getContactTemplateById(a){return CONTACT_TEMPLATES['find'](b=>b['id']===a);}export function fillTemplate(a,b){const c=getContactTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}return{'ok':!![],'body':c['body'](b)};}
@@ -1 +1 @@
1
- export const DYNAMIC_PRICING_VERSION=0x1;export const MUTABLE_FIELDS=[{'field':'sales','purpose':'Adjust\x20product/price','mutableAfterPublish':!![],'adjustmentMechanism':'Service.sales\x20mutable','metricToWatch':'Order\x20rate'},{'field':'discount','purpose':'Marketing\x20promotion','mutableAfterPublish':!![],'adjustmentMechanism':'add/set/destroy','metricToWatch':'Conversion\x20rate'},{'field':'description','purpose':'Trust\x20description','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Browse\x20duration'},{'field':'rewards','purpose':'Reward\x20marketing\x20campaigns','mutableAfterPublish':!![],'adjustmentMechanism':'add/remove','metricToWatch':'Repeat\x20rate'},{'field':'arbitrations','purpose':'Arbitration\x20upgrade','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Arbitration\x20rate'},{'field':'compensation_fund','purpose':'Trust\x20enhancement','mutableAfterPublish':!![],'adjustmentMechanism':'add','metricToWatch':'Trust\x20score'},{'field':'buy_guard','purpose':'Purchase\x20threshold','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Order\x20rate'},{'field':'pause','purpose':'Pause/resume','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Inventory\x20status'},{'field':'machine','purpose':'Workflow\x20template','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Process\x20speed'},{'field':'order_allocators','purpose':'Fund\x20allocation','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Allocation\x20fairness'},{'field':'type_parameter','purpose':'Payment\x20token','mutableAfterPublish':![],'adjustmentMechanism':'Immutable,\x20can\x20create\x20new\x20Service\x20+\x20Reward\x20to\x20guide\x20migration','metricToWatch':'Token\x20preference'}];export function suggestPricing(a){const {supplyCount:b,demandCount:c,avgPrice:d,myPrice:e,competitorPrices:f,recentOrderCount:g,repeatCustomerRate:h}=a,i=c/Math['max'](0x1,b);if(i>0x2){const j=Math['min'](0x1e,Math['round']((i-0x1)*0xa));return{'action':'increase','adjustmentPercent':j,'reason':'Demand/supply\x20ratio\x20'+i['toFixed'](0x1)+',\x20market\x20demand\x20exceeds\x20supply,\x20suggest\x20price\x20increase\x20of\x20'+j+'%','confidence':Math['min'](0.9,0.5+i*0.1)};}if(i<0.5){const k=Math['min'](0x14,Math['round']((0x1-i)*0xf));return{'action':'decrease','adjustmentPercent':k,'reason':'Demand/supply\x20ratio\x20'+i['toFixed'](0x1)+',\x20market\x20supply\x20exceeds\x20demand,\x20suggest\x20price\x20decrease\x20of\x20'+k+'%\x20to\x20improve\x20competitiveness','confidence':Math['min'](0.85,0.5+(0x1-i)*0.15)};}if(e&&f&&f['length']>0x0)try{const l=BigInt(e),m=f['map'](o=>BigInt(o)),n=m['reduce']((o,p)=>o+p,0x0n)/BigInt(m['length']);if(l>n*0x78n/0x64n)return{'action':'decrease','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20above\x20market\x20average,\x20suggest\x20price\x20decrease\x20to\x20improve\x20competitiveness','confidence':0.7};if(l<n*0x50n/0x64n)return{'action':'increase','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20below\x20market\x20average,\x20room\x20for\x20price\x20increase','confidence':0.65};}catch{}if(h!==undefined&&h>0.4)return{'action':'maintain','reason':'Repeat\x20customer\x20rate\x20'+Math['round'](h*0x64)+'%,\x20pricing\x20strategy\x20effective,\x20suggest\x20maintaining','confidence':0.8};if(h!==undefined&&h<0.1&&(g??0x0)>0xa)return{'action':'decrease','adjustmentPercent':0x5,'reason':'Repeat\x20customer\x20rate\x20only\x20'+Math['round'](h*0x64)+'%,\x20suggest\x20slight\x20price\x20decrease\x20or\x20add\x20Reward\x20to\x20attract\x20repeat\x20purchases','confidence':0.6};return{'action':'maintain','reason':'Market\x20supply\x20and\x20demand\x20balanced,\x20suggest\x20maintaining\x20current\x20pricing','confidence':0.5};}
1
+ export const DYNAMIC_PRICING_VERSION=0x1;export const MUTABLE_FIELDS=[{'field':'sales','purpose':'Adjust\x20product/price','mutableAfterPublish':!![],'adjustmentMechanism':'Service.sales\x20mutable','metricToWatch':'Order\x20rate'},{'field':'discount','purpose':'Marketing\x20promotion','mutableAfterPublish':!![],'adjustmentMechanism':'add/set/destroy','metricToWatch':'Conversion\x20rate'},{'field':'description','purpose':'Trust\x20description','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Browse\x20duration'},{'field':'rewards','purpose':'Reward\x20marketing\x20campaigns','mutableAfterPublish':!![],'adjustmentMechanism':'add/remove','metricToWatch':'Repeat\x20rate'},{'field':'arbitrations','purpose':'Arbitration\x20upgrade','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Arbitration\x20rate'},{'field':'compensation_fund','purpose':'Trust\x20enhancement','mutableAfterPublish':!![],'adjustmentMechanism':'add','metricToWatch':'Trust\x20score'},{'field':'buy_guard','purpose':'Purchase\x20threshold','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Order\x20rate'},{'field':'pause','purpose':'Pause/resume','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Inventory\x20status'},{'field':'machine','purpose':'Workflow\x20template','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Process\x20speed'},{'field':'order_allocators','purpose':'Fund\x20allocation','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Allocation\x20fairness'},{'field':'type_parameter','purpose':'Payment\x20token','mutableAfterPublish':![],'adjustmentMechanism':'Immutable,\x20can\x20create\x20new\x20Service\x20+\x20Reward\x20to\x20guide\x20migration','metricToWatch':'Token\x20preference'}];export function suggestPricing(a){const {supplyCount:b,demandCount:c,myPrice:d,competitorPrices:e,recentOrderCount:f,repeatCustomerRate:g}=a,h=c/Math['max'](0x1,b);if(h>0x2){const i=Math['min'](0x1e,Math['round']((h-0x1)*0xa));return{'action':'increase','adjustmentPercent':i,'reason':'Demand/supply\x20ratio\x20'+h['toFixed'](0x1)+',\x20market\x20demand\x20exceeds\x20supply,\x20suggest\x20price\x20increase\x20of\x20'+i+'%','confidence':Math['min'](0.9,0.5+h*0.1)};}if(h<0.5){const j=Math['min'](0x14,Math['round']((0x1-h)*0xf));return{'action':'decrease','adjustmentPercent':j,'reason':'Demand/supply\x20ratio\x20'+h['toFixed'](0x1)+',\x20market\x20supply\x20exceeds\x20demand,\x20suggest\x20price\x20decrease\x20of\x20'+j+'%\x20to\x20improve\x20competitiveness','confidence':Math['min'](0.85,0.5+(0x1-h)*0.15)};}if(d&&e&&e['length']>0x0)try{const k=BigInt(d),l=e['map'](n=>BigInt(n)),m=l['reduce']((n,o)=>n+o,0x0n)/BigInt(l['length']);if(k>m*0x78n/0x64n)return{'action':'decrease','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20above\x20market\x20average,\x20suggest\x20price\x20decrease\x20to\x20improve\x20competitiveness','confidence':0.7};if(k<m*0x50n/0x64n)return{'action':'increase','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20below\x20market\x20average,\x20room\x20for\x20price\x20increase','confidence':0.65};}catch{}if(g!==undefined&&g>0.4)return{'action':'maintain','reason':'Repeat\x20customer\x20rate\x20'+Math['round'](g*0x64)+'%,\x20pricing\x20strategy\x20effective,\x20suggest\x20maintaining','confidence':0.8};if(g!==undefined&&g<0.1&&(f??0x0)>0xa)return{'action':'decrease','adjustmentPercent':0x5,'reason':'Repeat\x20customer\x20rate\x20only\x20'+Math['round'](g*0x64)+'%,\x20suggest\x20slight\x20price\x20decrease\x20or\x20add\x20Reward\x20to\x20attract\x20repeat\x20purchases','confidence':0.6};return{'action':'maintain','reason':'Market\x20supply\x20and\x20demand\x20balanced,\x20suggest\x20maintaining\x20current\x20pricing','confidence':0.5};}
@@ -1 +1 @@
1
- import{TIME_GUARD_INSTANTIATIONS,TWIN_PARAM,unitScale}from'./pattern-resolutions.js';const HAND_WRITTEN_BINDINGS=[{'template':'delivery/restaurant-marketplace','guard_key':'deliver_confirm_timeout','param':'auto_confirm_hours','to':'duration_ms','scale':0x36ee80,'note':'buyer\x20silence\x20window'},{'template':'delivery/restaurant-marketplace','guard_key':'claim_filed','param':'claim_window_hours','to':'duration_ms','scale':0x36ee80,'note':'serial\x20claim\x20window\x20closes'},{'template':'delivery/restaurant-marketplace','guard_key':'settle_window_gate','param':'settle_hours','to':'duration_ms','scale':0x36ee80,'note':'settlement\x20opens'},{'template':'group_buy/platform-supplied-pickup','guard_key':'unclaimed_refund','param':'pickup_window_hours','to':'duration_ms','scale':0x36ee80,'note':'unclaimed\x20order\x20refunds'},{'template':'group_buy/platform-supplied-pickup','guard_key':'unclaimed_settle_open','param':'pickup_window_hours','to':'duration_ms','scale':0x36ee80,'note':'settlement\x20opens\x20after\x20pickup\x20window'},{'template':'group_buy/platform-supplied-pickup','guard_key':'unclaimed_refund_late','param':'pickup_window_hours','to':'duration_ms','scale':0x36ee80,'note':'keeper\x20late\x20refund\x20after\x20the\x20pickup\x20window\x20(the\x20refund_buyer\x20DEFAULT\x20exit,\x20dmcx\x20F-23)'},{'template':'group_buy/platform-supplied-pickup','guard_key':'claim_filed','param':'claim_window_hours','to':'duration_ms','scale':0x36ee80,'note':'serial\x20claim\x20window\x20closes'},{'template':'group_buy/platform-supplied-pickup','guard_key':'settle_window_gate','param':'settle_hours','to':'duration_ms','scale':0x36ee80,'note':'settlement\x20opens'},{'template':'group_buy/platform-supplied-pickup','guard_key':'return_window_pickup','param':'return_window_hours','to':'duration_ms','scale':0x36ee80,'note':'return\x20window\x20after\x20pickup'},{'template':'group_buy/platform-supplied-pickup','guard_key':'return_window_claim','param':'return_window_hours','to':'duration_ms','scale':0x36ee80,'note':'return\x20window\x20from\x20the\x20serial\x20claim\x20window\x20(M-T2:\x20the\x20keeper\x20can\x20open\x20claim_window\x20before\x20pickup\x20—\x20the\x20buyer\x20keeps\x20the\x20same\x20filing\x20right\x20from\x20THAT\x20rest\x20state)'},{'template':'group_buy/leader-sourced-community','guard_key':'return_window_delivered','param':'return_window_hours','to':'duration_ms','scale':0x36ee80,'note':'return\x20window\x20after\x20delivery'},{'template':'group_buy/leader-sourced-community','guard_key':'return_window_claim','param':'return_window_hours','to':'duration_ms','scale':0x36ee80,'note':'return\x20window\x20from\x20the\x20serial\x20claim\x20window\x20(M-T2:\x20distinct\x20edge,\x20own\x20key)'},{'template':'retail/vertical-handmade','guard_key':'return_window','param':'settlement_delay_days','to':'duration_ms','scale':0x5265c00,'note':'settle\x20delay\x20doubles\x20as\x20the\x20return\x20window\x20anchor'},{'template':'retail/vertical-handmade','guard_key':'review_window','param':'review_window_days','to':'duration_ms','scale':0x5265c00,'note':'review\x20window'},{'template':'group_buy/platform-supplied-pickup','guard_key':'return_transit_timeout','param':'return_transit_days','to':'duration_ms','scale':0x5265c00,'note':'return\x20transit\x20deadline'},{'template':'group_buy/leader-sourced-community','guard_key':'return_transit_timeout','param':'return_transit_days','to':'duration_ms','scale':0x5265c00,'note':'return\x20transit\x20deadline'},{'template':'education/mooc-degree','guard_key':'review_window','param':'review_window_days','to':'duration_ms','scale':0x5265c00,'note':'student\x20review\x20deadline\x20window'},{'template':'freelance/agent-task','guard_key':'auto_release','param':'evaluation_window_days','to':'claim_window_days','note':'auto-release\x20window'},{'template':'licensing/royalty-stream-auction','guard_key':'inspection_timeout','param':'inspection_window_days','to':'claim_window_days','note':'inspection\x20deadline'},{'template':'licensing/royalty-stream-auction','guard_key':'return_window','param':'inspection_window_days','to':'claim_window_days','note':'inspection\x20doubles\x20as\x20the\x20return\x20window'},{'template':'licensing/royalty-stream-auction','guard_key':'cancel_return','param':'inspection_window_days','to':'claim_window_days','note':'inspection\x20doubles\x20as\x20the\x20cancel\x20window'},{'template':'licensing/asset-license-metered','guard_key':'delivery_timeout','param':'delivery_window_days','to':'claim_window_days','note':'delivery\x20deadline'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'review_window','param':'review_window_days','to':'claim_window_days','note':'review\x20window'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'return_window','param':'return_window_days','to':'claim_window_days','note':'return\x20window'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'settle_clock','param':'settlement_delay_days','to':'claim_window_days','note':'settle\x20delay\x20after\x20delivery'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'review_settle_clock','param':'settlement_delay_days','to':'claim_window_days','note':'settle\x20delay\x20after\x20review'},{'template':'freelance/catalog-tiers','guard_key':'instant_cancel_24h','param':'instant_cancel_hours','to':'free_cancel_hours','note':'buyer\x20instant-cancel\x20window\x20(order.time\x20anchor)'},{'template':'travel/global-ota','guard_key':'no_show_evidence','param':'no_show_floor_hours','to':'not_before_hours','note':'no-show\x20evidence\x20floor'},{'template':'travel/global-ota','guard_key':'review_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'subscription/direct-fan-subscription','guard_key':'reward_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'licensing/royalty-stream-auction','guard_key':'review_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'licensing/asset-license-metered','guard_key':'review_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'retail/restock-supply','guard_key':'settle_alloc','param':'settlement_days','to':'claim_window_days','note':'serial\x20release\x20clock\x20on\x20the\x20allocator\x20(no\x20settlement\x20forward\x20exists)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_1','param':'cancel_tier_1_boundary_hours','to':'lower_hours','note':'tier-1\x20lower\x20band\x20edge\x20(7\x20days\x20by\x20default)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_2','param':'cancel_tier_1_boundary_hours','to':'upper_hours','note':'tier-1/tier-2\x20seam'},{'template':'travel/destination-experience','guard_key':'cancel_tier_2','param':'cancel_tier_2_boundary_hours','to':'lower_hours','note':'tier-2\x20lower\x20band\x20edge\x20(3\x20days\x20by\x20default)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_3','param':'cancel_tier_2_boundary_hours','to':'upper_hours','note':'tier-2/tier-3\x20seam'},{'template':'travel/destination-experience','guard_key':'cancel_tier_3','param':'cancel_tier_3_boundary_hours','to':'lower_hours','note':'tier-3\x20lower\x20band\x20edge\x20(1\x20day\x20by\x20default)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_4','param':'cancel_tier_3_boundary_hours','to':'upper_hours','note':'tier-3/tier-4\x20seam'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'reward_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'}];function derivedRows(){const a=[];for(const c of TIME_GUARD_INSTANTIATIONS){const d=c['days']!==undefined?'days':c['hours']!==undefined?'hours':undefined;if(d===undefined)continue;a['push']({'template':c['template'],'guard_key':c['guard_key'],'param':c['days']??c['hours'],'to':TWIN_PARAM[d],'scale':unitScale(d),...c['plus_days']!==undefined?{'plus':c['plus_days']}:{},'no_author_literal':!![],'note':c['note']});}return a;}export const FEE_PARAM_BINDINGS=[...HAND_WRITTEN_BINDINGS,...derivedRows()];const BY_SPEC=new Map();for(const b of FEE_PARAM_BINDINGS){const k=specKey(b['template'],b['guard_key']),rows=BY_SPEC['get'](k);if(rows===undefined)BY_SPEC['set'](k,[b]);else rows['push'](b);}function specKey(a,c){return a+'\x00'+c;}export function bindingsFor(a,c){return BY_SPEC['get'](specKey(a,c))??[];}export function applyFeeParamBindings(a,c,d,e,f){const g=BY_SPEC['get'](specKey(c,d));if(g===undefined)return a;let h=a;for(const i of g){const j=e[i['param']],l=j??f?.[i['param']];if(l===undefined||l===null)continue;const o=typeof l==='number'?l:Number(l);if(!Number['isFinite'](o))continue;let p=o;const q=i['plus']===undefined?[]:typeof i['plus']==='string'?[i['plus']]:i['plus'];let r=!![];for(const s of q){const t=e[s]??f?.[s],u=typeof t==='number'?t:Number(t);if(t===undefined||t===null||!Number['isFinite'](u)){r=![];break;}p+=u;}if(!r)continue;h={...h??{},[i['to']]:i['scale']===undefined?p:Math['round'](p*i['scale'])};}return h;}export function feeParamBindingIssues(a,c){const d=[],e=new Map(a['map'](f=>[f['id'],f]));for(const f of FEE_PARAM_BINDINGS){const h=e['get'](f['template']);if(h===undefined){d['push']({'binding':f,'problem':'template\x20\x27'+f['template']+'\x27\x20does\x20not\x20exist'});continue;}const i=h['fee_params'][f['param']];if(i===undefined){d['push']({'binding':f,'problem':'fee_param\x20\x27'+f['param']+'\x27\x20is\x20not\x20declared\x20by\x20'+f['template']});continue;}if(f['plus']!==undefined){const o=typeof f['plus']==='string'?[f['plus']]:f['plus'],p=o['filter'](q=>h['fee_params'][q]===undefined);if(p['length']>0x0){d['push']({'binding':f,'problem':'fee_param\x20\x27'+p['join']('\x27,\x20\x27')+'\x27\x20(plus)\x20is\x20not\x20declared\x20by\x20'+f['template']});continue;}}const j=h['guards']['find'](q=>q['key']===f['guard_key']);if(j===undefined){d['push']({'binding':f,'problem':'guard\x20key\x20\x27'+f['guard_key']+'\x27\x20is\x20not\x20declared\x20by\x20'+f['template']});continue;}const l=f['scale']===undefined?Number(i):Math['round'](Number(i)*f['scale']);if(f['no_author_literal']===!![])continue;const m=j['params']?.[f['to']];if(m!==undefined){Number(m)!==l&&d['push']({'binding':f,'problem':'literal\x20'+f['to']+'='+String(m)+'\x20!=\x20fee_param\x20'+f['param']+'='+String(i)+'\x20x\x20'+String(f['scale']??0x1)+'\x20('+l+')'});continue;}const n=c(j['template_id'],f['to']);if(n===undefined)d['push']({'binding':f,'problem':'guard\x20'+j['template_id']+'\x20declares\x20no\x20param\x20\x27'+f['to']+'\x27'});else Number(n)!==Number(i)&&d['push']({'binding':f,'problem':'guard\x20'+j['template_id']+'\x20default\x20'+f['to']+'='+n+'\x20!=\x20fee_param\x20'+f['param']+'='+String(i)+'\x20(no\x20literal\x20to\x20compare)'});}return d;}
1
+ import{MS_PER_DAY,MS_PER_HOUR,TIME_GUARD_INSTANTIATIONS,TWIN_PARAM,unitScale}from'./pattern-resolutions.js';const HAND_WRITTEN_BINDINGS=[{'template':'delivery/restaurant-marketplace','guard_key':'deliver_confirm_timeout','param':'auto_confirm_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'buyer\x20silence\x20window'},{'template':'delivery/restaurant-marketplace','guard_key':'claim_filed','param':'claim_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'serial\x20claim\x20window\x20closes'},{'template':'delivery/restaurant-marketplace','guard_key':'settle_window_gate','param':'settle_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'settlement\x20opens'},{'template':'delivery/restaurant-marketplace','guard_key':'cancel_no_capacity','param':'dispatch_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'dispatch\x20timeout\x20—\x20penalty-free\x20platform\x20force-cancel\x20(INV-FD-2)'},{'template':'group_buy/platform-supplied-pickup','guard_key':'unclaimed_refund','param':'pickup_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'unclaimed\x20order\x20refunds'},{'template':'group_buy/platform-supplied-pickup','guard_key':'unclaimed_settle_open','param':'pickup_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'settlement\x20opens\x20after\x20pickup\x20window'},{'template':'group_buy/platform-supplied-pickup','guard_key':'unclaimed_refund_late','param':'pickup_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'keeper\x20late\x20refund\x20after\x20the\x20pickup\x20window\x20(the\x20refund_buyer\x20DEFAULT\x20exit,\x20dmcx\x20F-23)'},{'template':'group_buy/platform-supplied-pickup','guard_key':'claim_filed','param':'claim_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'serial\x20claim\x20window\x20closes'},{'template':'group_buy/platform-supplied-pickup','guard_key':'settle_window_gate','param':'settle_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'settlement\x20opens'},{'template':'group_buy/platform-supplied-pickup','guard_key':'return_window_pickup','param':'return_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'return\x20window\x20after\x20pickup'},{'template':'group_buy/platform-supplied-pickup','guard_key':'return_window_claim','param':'return_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'return\x20window\x20from\x20the\x20serial\x20claim\x20window\x20(M-T2:\x20the\x20keeper\x20can\x20open\x20claim_window\x20before\x20pickup\x20—\x20the\x20buyer\x20keeps\x20the\x20same\x20filing\x20right\x20from\x20THAT\x20rest\x20state)'},{'template':'group_buy/leader-sourced-community','guard_key':'return_window_delivered','param':'return_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'return\x20window\x20after\x20delivery'},{'template':'group_buy/leader-sourced-community','guard_key':'return_window_claim','param':'return_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'return\x20window\x20from\x20the\x20serial\x20claim\x20window\x20(M-T2:\x20distinct\x20edge,\x20own\x20key)'},{'template':'group_buy/leader-sourced-community','guard_key':'shortfall_claim','param':'return_window_hours','to':'duration_ms','scale':MS_PER_HOUR,'note':'shortfall\x20(missing-items)\x20filing\x20window\x20—\x20the\x20SAME\x20after-sales\x20policy\x20as\x20the\x20return\x20twins\x20(the\x20author\x20literal\x20was\x20decorative\x20without\x20this\x20row)'},{'template':'retail/vertical-handmade','guard_key':'return_window','param':'settlement_delay_days','to':'duration_ms','scale':MS_PER_DAY,'note':'settle\x20delay\x20doubles\x20as\x20the\x20return\x20window\x20anchor'},{'template':'retail/vertical-handmade','guard_key':'review_window','param':'review_window_days','to':'duration_ms','scale':MS_PER_DAY,'note':'review\x20window'},{'template':'group_buy/platform-supplied-pickup','guard_key':'return_transit_timeout','param':'return_transit_days','to':'duration_ms','scale':MS_PER_DAY,'note':'return\x20transit\x20deadline'},{'template':'group_buy/leader-sourced-community','guard_key':'return_transit_timeout','param':'return_transit_days','to':'duration_ms','scale':MS_PER_DAY,'note':'return\x20transit\x20deadline'},{'template':'education/mooc-degree','guard_key':'review_window','param':'review_window_days','to':'duration_ms','scale':MS_PER_DAY,'note':'student\x20review\x20deadline\x20window'},{'template':'freelance/agent-task','guard_key':'auto_release','param':'evaluation_window_days','to':'claim_window_days','note':'auto-release\x20window'},{'template':'licensing/royalty-stream-auction','guard_key':'inspection_timeout','param':'inspection_window_days','to':'claim_window_days','note':'inspection\x20deadline'},{'template':'licensing/royalty-stream-auction','guard_key':'return_window','param':'inspection_window_days','to':'claim_window_days','note':'inspection\x20doubles\x20as\x20the\x20return\x20window'},{'template':'licensing/royalty-stream-auction','guard_key':'cancel_return','param':'inspection_window_days','to':'claim_window_days','note':'inspection\x20doubles\x20as\x20the\x20cancel\x20window'},{'template':'licensing/asset-license-metered','guard_key':'delivery_timeout','param':'delivery_window_days','to':'claim_window_days','note':'delivery\x20deadline'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'review_window','param':'review_window_days','to':'claim_window_days','note':'review\x20window'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'return_window','param':'return_window_days','to':'claim_window_days','note':'return\x20window'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'settle_clock','param':'settlement_delay_days','to':'claim_window_days','note':'settle\x20delay\x20after\x20delivery'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'review_settle_clock','param':'settlement_delay_days','to':'claim_window_days','note':'settle\x20delay\x20after\x20review'},{'template':'freelance/catalog-tiers','guard_key':'instant_cancel_24h','param':'instant_cancel_hours','to':'free_cancel_hours','note':'buyer\x20instant-cancel\x20window\x20(order.time\x20anchor)'},{'template':'travel/global-ota','guard_key':'no_show_evidence','param':'no_show_floor_hours','to':'not_before_hours','note':'no-show\x20evidence\x20floor'},{'template':'travel/global-ota','guard_key':'review_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'subscription/direct-fan-subscription','guard_key':'reward_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'licensing/royalty-stream-auction','guard_key':'review_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'licensing/asset-license-metered','guard_key':'review_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'},{'template':'retail/restock-supply','guard_key':'settle_alloc','param':'settlement_days','to':'claim_window_days','note':'serial\x20release\x20clock\x20on\x20the\x20allocator\x20(no\x20settlement\x20forward\x20exists)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_1','param':'cancel_tier_1_boundary_hours','to':'lower_hours','note':'tier-1\x20lower\x20band\x20edge\x20(7\x20days\x20by\x20default)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_2','param':'cancel_tier_1_boundary_hours','to':'upper_hours','note':'tier-1/tier-2\x20seam'},{'template':'travel/destination-experience','guard_key':'cancel_tier_2','param':'cancel_tier_2_boundary_hours','to':'lower_hours','note':'tier-2\x20lower\x20band\x20edge\x20(3\x20days\x20by\x20default)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_3','param':'cancel_tier_2_boundary_hours','to':'upper_hours','note':'tier-2/tier-3\x20seam'},{'template':'travel/destination-experience','guard_key':'cancel_tier_3','param':'cancel_tier_3_boundary_hours','to':'lower_hours','note':'tier-3\x20lower\x20band\x20edge\x20(1\x20day\x20by\x20default)'},{'template':'travel/destination-experience','guard_key':'cancel_tier_4','param':'cancel_tier_3_boundary_hours','to':'upper_hours','note':'tier-3/tier-4\x20seam'},{'template':'crowdfunding/reward-campaign-fulfillment','guard_key':'reward_claim','param':'reward_claim_closes_after_days','to':'closes_after_days','note':'bounty\x20claim\x20deadline'}];function derivedRows(){const a=[];for(const c of TIME_GUARD_INSTANTIATIONS){const d=c['days']!==undefined?'days':c['hours']!==undefined?'hours':undefined;if(d===undefined)continue;a['push']({'template':c['template'],'guard_key':c['guard_key'],'param':c['days']??c['hours'],'to':TWIN_PARAM[d],'scale':unitScale(d),...c['plus_days']!==undefined?{'plus':c['plus_days']}:{},'no_author_literal':!![],'note':c['note']});}return a;}export const FEE_PARAM_BINDINGS=[...HAND_WRITTEN_BINDINGS,...derivedRows()];const BY_SPEC=new Map();for(const b of FEE_PARAM_BINDINGS){const k=specKey(b['template'],b['guard_key']),rows=BY_SPEC['get'](k);if(rows===undefined)BY_SPEC['set'](k,[b]);else rows['push'](b);}function specKey(a,c){return a+'\x00'+c;}export function bindingsFor(a,c){return BY_SPEC['get'](specKey(a,c))??[];}export function applyFeeParamBindings(a,c,d,e,f){const g=BY_SPEC['get'](specKey(c,d));if(g===undefined)return a;let h=a;for(const i of g){const j=e[i['param']],l=j??f?.[i['param']];if(l===undefined||l===null)continue;const o=typeof l==='number'?l:Number(l);if(!Number['isFinite'](o))continue;let p=o;const q=i['plus']===undefined?[]:typeof i['plus']==='string'?[i['plus']]:i['plus'];let r=!![];for(const s of q){const t=e[s]??f?.[s],u=typeof t==='number'?t:Number(t);if(t===undefined||t===null||!Number['isFinite'](u)){r=![];break;}p+=u;}if(!r)continue;h={...h??{},[i['to']]:i['scale']===undefined?p:Math['round'](p*i['scale'])};}return h;}export function feeParamBindingIssues(a,c){const d=[],e=new Map(a['map'](f=>[f['id'],f]));for(const f of FEE_PARAM_BINDINGS){const h=e['get'](f['template']);if(h===undefined){d['push']({'binding':f,'problem':'template\x20\x27'+f['template']+'\x27\x20does\x20not\x20exist'});continue;}const i=h['fee_params'][f['param']];if(i===undefined){d['push']({'binding':f,'problem':'fee_param\x20\x27'+f['param']+'\x27\x20is\x20not\x20declared\x20by\x20'+f['template']});continue;}if(f['plus']!==undefined){const o=typeof f['plus']==='string'?[f['plus']]:f['plus'],p=o['filter'](q=>h['fee_params'][q]===undefined);if(p['length']>0x0){d['push']({'binding':f,'problem':'fee_param\x20\x27'+p['join']('\x27,\x20\x27')+'\x27\x20(plus)\x20is\x20not\x20declared\x20by\x20'+f['template']});continue;}}const j=h['guards']['find'](q=>q['key']===f['guard_key']);if(j===undefined){d['push']({'binding':f,'problem':'guard\x20key\x20\x27'+f['guard_key']+'\x27\x20is\x20not\x20declared\x20by\x20'+f['template']});continue;}const l=f['scale']===undefined?Number(i):Math['round'](Number(i)*f['scale']);if(f['no_author_literal']===!![])continue;const m=j['params']?.[f['to']];if(m!==undefined){Number(m)!==l&&d['push']({'binding':f,'problem':'literal\x20'+f['to']+'='+String(m)+'\x20!=\x20fee_param\x20'+f['param']+'='+String(i)+'\x20x\x20'+String(f['scale']??0x1)+'\x20('+l+')'});continue;}const n=c(j['template_id'],f['to']);if(n===undefined)d['push']({'binding':f,'problem':'guard\x20'+j['template_id']+'\x20declares\x20no\x20param\x20\x27'+f['to']+'\x27'});else Number(n)!==Number(i)&&d['push']({'binding':f,'problem':'guard\x20'+j['template_id']+'\x20default\x20'+f['to']+'='+n+'\x20!=\x20fee_param\x20'+f['param']+'='+String(i)+'\x20(no\x20literal\x20to\x20compare)'});}return d;}
@@ -96,6 +96,7 @@ export interface TokenDisplayHint {
96
96
  }
97
97
  export declare function registryDisplayHint(tokenType: string | undefined, network?: string): TokenDisplayHint | undefined;
98
98
  export declare function clearFundResolutionCaches(): void;
99
+ export declare function buildClaimLedgerEcho(events: unknown, digest: unknown): string | null;
99
100
  export declare function knownTokenSuggestions(network?: string): string;
100
101
  export declare function formatAmountText(raw: string | number | bigint, decimals?: number, symbol?: string): string;
101
102
  export interface TokenValueConversion {
@@ -1 +1 @@
1
- import{GasTokenType,WOW_DECIMALS,MAINNET_BRIDGE_CONFIG,formatUnits,parseToUnits,extractGenericTypeArg}from'@wowok/wowok';const GAS_TOKENS=[{'type':GasTokenType,'symbol':'WOW','decimals':WOW_DECIMALS,'name':'Wowok\x20Token','description':'Default\x20platform\x20gas\x20token\x20for\x20all\x20WoWok\x20operations.\x201\x20WOW\x20=\x2010^'+WOW_DECIMALS+'\x20MIST.\x20Available\x20on\x20testnet\x20and\x20mainnet.'}],TESTNET_TOKENS=[];function buildMainnetTokensFromSDK(){const a=MAINNET_BRIDGE_CONFIG?.['tokens'];if(!Array['isArray'](a))return[];const b=new Set();return a['filter'](c=>{if(b['has'](c['wowTypeTag']))return![];return b['add'](c['wowTypeTag']),!![];})['map'](c=>{const d=c['wowTypeTag']['split']('::')['pop']()??c['symbol'];return{'type':c['wowTypeTag'],'symbol':d,'decimals':c['wowDecimals'],'name':c['symbol']+'\x20(Bridge)','description':c['description']??'Bridge\x20token\x20on\x20WOW\x20mainnet.\x20'+c['wowDecimals']+'\x20decimals.'};});}export const OFFICIAL_TOKEN_REGISTRY={'gas':GAS_TOKENS,'testnet':TESTNET_TOKENS,'mainnet':buildMainnetTokensFromSDK()};export function getRegistryForNetwork(a){return[...OFFICIAL_TOKEN_REGISTRY['gas'],...a==='testnet'?OFFICIAL_TOKEN_REGISTRY['testnet']:[],...a==='mainnet'?OFFICIAL_TOKEN_REGISTRY['mainnet']:[]];}export function findInRegistryByType(a,b){const c=OFFICIAL_TOKEN_REGISTRY['gas']['find'](e=>e['type']===a);if(c)return c;const d=getRegistryForNetwork(b);return d['find'](e=>e['type']===a);}export function findInRegistryBySymbol(a,b){const c=a['toLowerCase'](),d=OFFICIAL_TOKEN_REGISTRY['gas']['filter'](g=>g['symbol']['toLowerCase']()===c),e=getRegistryForNetwork(b),f=e['filter'](g=>g['symbol']['toLowerCase']()===c&&!d['some'](h=>h['type']===g['type']));return[...d,...f];}export async function resolveTokenByType(a,b){const c=findInRegistryByType(a,b);if(c)return{'type':c['type'],'symbol':c['symbol'],'decimals':c['decimals'],'name':c['name'],'source':'registry','verified':!![]};const d=b!==undefined,e=cacheNet(b)+'::'+a;if(d){const f=RESOLUTION_CACHE['get'](e);if(f)return f;}try{const {TokenInfo:g}=await import('@wowok/wowok'),h=g['Instance'](),i=await h['fetch'](a,undefined,b);if(i){const j={'type':i['type'],'symbol':i['symbol']??'','decimals':i['decimals'],'name':i['name']??'','source':'cache','verified':![]};if(d)RESOLUTION_CACHE['set'](e,j);return j;}}catch{}return undefined;}export async function resolveTokensBySymbol(a,b,c){const d=[],e=findInRegistryBySymbol(a,b);for(const f of e){d['push']({'type':f['type'],'symbol':f['symbol'],'decimals':f['decimals'],'name':f['name'],'source':'registry','verified':!![]});}try{const {query_local_token_list:g}=await import('@wowok/wowok'),h=await g({'symbol':a},b);for(const i of h){if(d['some'](j=>j['type']===i['type']))continue;d['push']({'type':i['type'],'symbol':i['symbol']??'','decimals':i['decimals']??0x0,'name':i['name']??'','source':'cache','verified':![]});}}catch{}return c&&d['sort']((j,k)=>{if(j['type']===c)return-0x1;if(k['type']===c)return 0x1;if(j['verified']&&!k['verified'])return-0x1;if(!j['verified']&&k['verified'])return 0x1;return 0x0;}),d;}const AMOUNT_WITH_SYMBOL=/^(\d+(?:\.\d+)?)\s*([A-Za-z][A-Za-z0-9]*)$/;export function isAmountWithSymbol(a){if(typeof a!=='string')return![];const b=a['match'](AMOUNT_WITH_SYMBOL);if(!b)return![];const c=b[0x2];return c['length']>=0x2&&c['length']<=0xa;}export async function parseAmount(a,b,c){const d=a,e=await resolveTokenByType(b,c),f=e!==undefined,g=e?.['decimals']??0x9,h=e?.['symbol']??'',i=e?.['source']??'onchain',j=e?.['verified']??![];if(typeof a==='string'){const m=a['match'](AMOUNT_WITH_SYMBOL);if(m){const n=m[0x1],o=m[0x2];if(!f){const q=await resolveTokensBySymbol(o,c);if(q['length']>0x0){const r=q['length']>0x1?'MULTIPLE\x20issuers':'an\x20issuer';throw new Error('TOKEN\x20CHOICE\x20REQUIRED:\x20\x22'+a+'\x22\x20uses\x20symbol\x20\x22'+o+'\x22\x20which\x20matches\x20'+r+'\x20'+('on\x20this\x20network'+(q['length']>0x1?'\x20('+q['length']+'\x20candidates\x20—\x20the\x20bare\x20symbol\x20is\x20ambiguous)':'')+'.\x20')+'The\x20operation\x20is\x20REFUSED\x20until\x20you\x20present\x20these\x20candidates\x20to\x20the\x20USER\x20and\x20let\x20the\x20user\x20choose\x20'+'(the\x20user\x20may\x20answer\x20by\x20the\x20candidate\x20NUMBER,\x20e.g.\x20\x222\x22,\x20or\x20by\x20pasting\x20the\x20full\x20type).\x20'+'Then\x20re-issue\x20the\x20operation\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20string\x20in\x20type_parameter\x20'+'(package::module::Name)\x20—\x20a\x20bare\x20symbol\x20cannot\x20identify\x20the\x20issuer,\x20and\x20you\x20must\x20NEVER\x20guess\x20one.\x0a'+('\x20\x20Candidates\x20for\x20symbol\x20\x22'+o+'\x22:\x0a')+formatTokenCandidates(q)+'\x0a'+'\x20\x20After\x20choosing,\x20also\x20verify\x20the\x20WOW\x20network\x20selection\x20is\x20correct.');}throw new Error('MISSING\x20TOKEN\x20INFO:\x20cannot\x20convert\x20\x22'+a+'\x22\x20for\x20token\x20type\x20'+b+'\x20—\x20'+'the\x20token\x27s\x20precision\x20(decimals)\x20could\x20not\x20be\x20resolved\x20from\x20the\x20official\x20'+('registry,\x20local\x20cache,\x20or\x20on-chain\x20metadata,\x20and\x20no\x20token\x20with\x20symbol\x20\x22'+o+'\x22\x20')+'is\x20known\x20on\x20this\x20network.\x20Converting\x20a\x20unit\x20value\x20without\x20decimals\x20would\x20forge\x20a\x20'+'wrong\x20on-chain\x20amount\x20and\x20risk\x20asset\x20loss,\x20so\x20the\x20operation\x20is\x20REFUSED.\x20'+precisionUnknownGuidance(b,c));}if(h&&o['toLowerCase']()!==h['toLowerCase']()){const s=await resolveTokensBySymbol(o,c);if(s['length']>0x0){const t=s['length']>0x1?'multiple\x20issuers':'an\x20issuer';throw new Error('TOKEN\x20CHOICE\x20REQUIRED:\x20the\x20amount\x20\x22'+a+'\x22\x20uses\x20symbol\x20\x22'+o+'\x22,\x20but\x20the\x20operation\x27s\x20'+('token\x20is\x20currently\x20\x22'+h+'\x22\x20(type:\x20'+b+').\x20\x22'+o+'\x22\x20matches\x20'+t+'\x20on\x20this\x20')+('network'+(s['length']>0x1?'\x20('+s['length']+'\x20candidates\x20—\x20the\x20bare\x20symbol\x20is\x20ambiguous)':'')+'.\x20')+'Present\x20these\x20candidates\x20to\x20the\x20USER\x20and\x20let\x20the\x20user\x20choose\x20(the\x20user\x20may\x20answer\x20by\x20the\x20candidate\x20'+'NUMBER,\x20e.g.\x20\x222\x22,\x20or\x20by\x20pasting\x20the\x20full\x20type),\x20then\x20re-issue\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20in\x20'+'type_parameter\x20(package::module::Name)\x20—\x20never\x20guess\x20an\x20issuer.\x20The\x20operation\x20was\x20NOT\x20executed.\x0a'+('\x20\x20Candidates\x20for\x20symbol\x20\x22'+o+'\x22:\x0a')+formatTokenCandidates(s)+'\x0a'+('\x20\x20If\x20\x22'+h+'\x22\x20('+b+')\x20was\x20intended\x20instead,\x20write\x20the\x20amount\x20with\x20that\x20symbol\x20(e.g.\x20\x22'+n+h+'\x22).'));}throw new Error('Amount\x20symbol\x20\x22'+o+'\x22\x20does\x20not\x20match\x20the\x20resolved\x20token\x20symbol\x20\x22'+h+'\x22\x20'+('(token\x20type:\x20'+b+'),\x20and\x20no\x20token\x20with\x20symbol\x20\x22'+o+'\x22\x20is\x20known\x20on\x20this\x20network.\x20')+('Either\x20write\x20the\x20amount\x20with\x20the\x20correct\x20symbol\x20(e.g.\x20\x22'+n+h+'\x22),\x20or\x20—\x20if\x20a\x20')+'DIFFERENT\x20token\x20was\x20intended\x20—\x20provide\x20that\x20token\x27s\x20FULL\x20type\x20in\x20package::module::Name\x20form\x20in\x20'+'type_parameter\x20(a\x20bare\x20symbol\x20cannot\x20be\x20resolved).\x20'+knownTokenSuggestions(c));}const p=parseToUnits(n,g);return{'smallestUnit':p,'displayAmount':n+'\x20'+o,'originalInput':d,'tokenType':b,'tokenSymbol':h||o,'decimals':g,'converted':!![],'source':i,'verified':j,'precision_known':!![]};}}if(typeof a==='number'&&!Number['isSafeInteger'](a))throw new Error('Amount\x20'+a+'\x20is\x20outside\x20the\x20safe\x20integer\x20range\x20(±2^53\x20=\x20±9007199254740991):\x20'+'JS\x20numbers\x20lose\x20integer\x20precision\x20beyond\x20this\x20point.\x20Pass\x20the\x20raw\x20u64\x20as\x20a\x20NUMERIC\x20'+'STRING\x20(e.g.\x20\x229000000000000000000\x22)\x20or\x20a\x20display\x20string\x20with\x20the\x20token\x20symbol\x20'+'(e.g.\x20\x222.5WOW\x22).');if(typeof a==='string'&&!/^\d+$/['test'](a['trim']()))throw new Error('Invalid\x20raw\x20amount:\x20\x22'+a+'\x22.\x20Smallest-unit\x20amounts\x20must\x20be\x20non-negative\x20integer\x20'+'strings\x20(e.g.\x20\x222500000000\x22).\x20Decimal\x20unit\x20values\x20must\x20carry\x20the\x20token\x20symbol\x20'+'(e.g.\x20\x222.5WOW\x22)\x20so\x20the\x20Fund\x20Processing\x20Layer\x20can\x20convert\x20them\x20with\x20the\x20token\x27s\x20decimals.');let k;try{k=BigInt(a);}catch{throw new Error('Invalid\x20amount:\x20\x22'+a+'\x22.\x20Expected\x20a\x20number,\x20a\x20numeric\x20string\x20(smallest\x20unit),\x20'+'or\x20a\x20display-format\x20string\x20like\x20\x222.5WOW\x22\x20(matching\x20the\x20token\x27s\x20symbol).');}const l=f?formatUnits(k,g):k['toString']()+'\x20raw\x20smallest\x20units\x20(token\x20precision\x20unknown)';return{'smallestUnit':k,'displayAmount':f&&h?l+'\x20'+h:l,'originalInput':d,'tokenType':b,'tokenSymbol':h,'decimals':g,'converted':![],'source':i,'verified':j,'precision_known':f};}function formatTokenCandidates(a,b){return a['map']((d,e)=>{const f=d['verified']?'\x20[VERIFIED\x20—\x20official\x20registry]':'\x20[UNVERIFIED\x20—\x20on-chain\x20metadata]',g=d['name']?'\x20\x22'+d['name']+'\x22':'',h=b&&d['type']===b?'\x20\x20<--\x20USED\x20BY\x20THIS\x20OPERATION\x20(the\x20pinned\x20token\x20—\x20verify\x20before\x20approving)':'';return'\x20\x20\x20\x20\x20\x20'+(e+0x1)+'.\x20'+(d['symbol']??'')+g+'\x20—\x20full\x20type:\x20'+d['type']+'\x20('+(d['decimals']??'?')+'\x20decimals'+f+(d['source']?',\x20source:\x20'+d['source']:'')+')'+h;})['join']('\x0a');}export function generateFundConfirmation(a,b=[]){const c=b['length']>0x0,d=a[0x0]?.['tokenType'],e=['MONEY\x20TRANSACTION\x20CONFIRMATION\x20REQUIRED',''];for(const f of a){const g=f['verified']?'VERIFIED\x20—\x20official\x20registry':'UNVERIFIED\x20—\x20cache/on-chain\x20metadata',h=f['tokenSymbol']||'(no\x20symbol)';e['push']('\x20\x20•\x20'+f['context']+':\x20'+f['displayAmount']),e['push']('\x20\x20\x20\x20\x20\x20token:\x20'+h+'\x20—\x20full\x20type:\x20'+f['tokenType']),e['push']('\x20\x20\x20\x20\x20\x20decimals:\x20'+f['decimals']+'\x20(1\x20'+h+'\x20=\x2010^'+f['decimals']+'\x20raw\x20units);\x20'+('raw\x20amount:\x20'+f['smallestUnit']+';\x20'+g+';\x20source:\x20'+f['source'])),f['converted']&&e['push']('\x20\x20\x20\x20\x20\x20(input\x20was\x20a\x20display\x20amount\x20—\x20converted\x20to\x20smallest\x20units\x20with\x20the\x20token\x27s\x20decimals)');}if(c){e['push']('','TOKEN\x20CANDIDATES\x20—\x20multiple\x20on-chain\x20issuers\x20share\x20the\x20same\x20symbol.','The\x20token\x20this\x20operation\x20is\x20actually\x20pinned\x20to\x20is\x20marked','\x22<--\x20USED\x20BY\x20THIS\x20OPERATION\x22.\x20Verify\x20it\x20is\x20the\x20intended\x20issuer','BEFORE\x20approving.\x20If\x20it\x20is\x20wrong,\x20do\x20NOT\x20approve\x20—\x20re-issue\x20the','operation\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20string','(package::module::Name)\x20in\x20type_parameter;\x20a\x20bare\x20symbol\x20can\x20never','identify\x20the\x20issuer.');for(const i of b){e['push']('\x20\x20Symbol\x20\x22'+i['symbol']+'\x22\x20matches\x20these\x20tokens:'),e['push'](formatTokenCandidates(i['candidates'],d));}}return e['push']('','This\x20operation\x20involves\x20money.\x20Please\x20confirm\x20before\x20proceeding.'),{'requiresConfirmation':!![],'reason':c?'Money\x20transaction\x20—\x20user\x20must\x20verify\x20the\x20pinned\x20token\x20among\x20same-symbol\x20candidates\x20before\x20approving':'Money\x20transaction\x20requires\x20user\x20confirmation','fields':a,'ambiguities':b,'message':e['join']('\x0a')};}function extractTokenType(a,b,c){if(a?.['object']&&typeof a['object']==='object'&&a['object']['type_parameter'])return a['object']['type_parameter'];if(b==='payment'&&a?.['type_parameter'])return a['type_parameter'];if(c)return c;return GasTokenType;}function isFixedAmount(a){return a?.['type']==='Fixed';}function isFixedDiscount(a){const b=a?.['discount_type'];return b===0x1||b==='FIXED';}function isRatesDiscount(a){const b=a?.['discount_type'];return b===0x0||b==='RATES';}function isAmountModeSharing(a){return a?.['mode']==='Amount';}function isPriceDeltaOp(a){return a?.['op']==='price_add'||a?.['op']==='price_reduce';}const MONETARY_FIELDS={'service':[{'path':'sales.sales.price','context':'Service\x20sale\x20price'},{'path':'sales.value','context':'Service\x20sale\x20price\x20delta\x20(per-item\x20op)','filter':isPriceDeltaOp},{'path':'compensation_fund_add.balance','context':'Service\x20compensation\x20fund\x20deposit'},{'path':'order_new.buy.total_pay.balance','context':'Order\x20payment\x20amount'},{'path':'discount.discount_value','context':'Discount\x20fixed\x20deduction\x20(FIXED\x20type,\x20base\x20units)','filter':isFixedDiscount},{'path':'order_allocators.threshold','context':'Service\x20order\x20allocation\x20threshold'},{'path':'order_allocators.allocators.sharing.sharing','context':'Service\x20order\x20allocation\x20sharing\x20amount\x20(Amount\x20mode)','filter':isAmountModeSharing},{'path':'order_allocators.allocators.max','context':'Service\x20order\x20allocation\x20cap'}],'arbitration':[{'path':'dispute.fee.balance','context':'Arbitration\x20dispute\x20filing\x20coin\x20(attached)\x20—\x20the\x20case\x20escrows\x20the\x20VENUE\x27s\x20configured\x20fee;\x20any\x20excess\x20refunds\x20to\x20the\x20filer\x20at\x20filing'},{'path':'fee','context':'Arbitration\x20fee'},{'path':'arbitration.indemnity','context':'Arbitration\x20verdict\x20indemnity'}],'reward':[{'path':'coin_add.balance','context':'Reward\x20coin\x20add'},{'path':'guard_add.amount.value','context':'Reward\x20guard\x20fixed\x20amount','filter':isFixedAmount}],'treasury':[{'path':'deposit.coin.balance','context':'Treasury\x20deposit\x20amount'},{'path':'withdraw.amount.fixed','context':'Treasury\x20withdrawal\x20amount'}],'payment':[{'path':'revenue.amount.balance','context':'Payment\x20amount'}],'allocation':[{'path':'coin.balance','context':'Allocation\x20funding\x20amount'},{'path':'allocators.threshold','context':'Allocation\x20threshold'},{'path':'allocators.allocators.sharing.sharing','context':'Allocation\x20sharing\x20amount\x20(Amount\x20mode)','filter':isAmountModeSharing},{'path':'allocators.allocators.max','context':'Allocation\x20cap'}]};function getNestedValue(a,b){const c=b['split']('.');let d=a;for(const e of c){if(d==null)return undefined;d=d[e];}return d;}function resolveMonetaryLeaves(a,b){const c=b['split']('.'),d=[],e=(f,g,h)=>{if(f==null)return;const j=c[g];if(g===c['length']-0x1){f[j]!=null&&d['push']({'parent':f,'key':j,'displayPath':h+j});return;}const k=f[j];if(Array['isArray'](k))for(let l=0x0;l<k['length'];l++){e(k[l],g+0x1,''+h+j+'['+l+'].');}else e(k,g+0x1,''+h+j+'.');};return e(a,0x0,''),d;}export async function processFundOperation(a,b,c,d){const e={'convertedData':a,'warnings':[],'errors':[],'confirmation':null},f=MONETARY_FIELDS[b];if(!f)return e;const g=extractTokenType(a,b,d?.['objectTokenType']),h=[],i=[],j=new Map();for(const k of f){const l=resolveMonetaryLeaves(a,k['path']);for(const m of l){if(k['filter']&&!k['filter'](m['parent']))continue;await processSingleField(m['parent'],m['key'],m['displayPath'],k['context'],g,c,e,h,i,j);}}for(const o of resolveMonetaryLeaves(a,'discount.discount_value')){if(isRatesDiscount(o['parent'])){const p=o['parent']['discount_value'],q=typeof p==='number'?p:Number(p),r=Number['isFinite'](q)?(q/0x64)['toString']():p,s=o['parent']['count'],t=typeof s==='number'&&s>0x1?'\x20count:\x20'+s+'\x20mints\x20'+s+'\x20SEPARATE\x20single-use\x20Discount\x20objects.':'';e['warnings']['push']('DISCOUNT\x20RATE:\x20discount.discount_value\x20'+p+'\x20is\x20a\x20per-10000\x20rate\x20(off),\x20NOT\x20a\x20token\x20amount\x20—\x20'+(p+'/10000\x20of\x20the\x20order\x20total\x20is\x20deducted\x20('+r+'%\x20off;\x2010000\x20=\x20100%\x20off,\x20and\x20a\x20value\x20above\x2010000\x20is\x20rejected\x20for\x20RATES).'+t));}}if(h['length']>0x0){e['confirmation']=generateFundConfirmation(h,i);const u=h['length'],w=h['some'](y=>!y['verified']),x=i['length']>0x0;x&&e['warnings']['push']('TOKEN\x20CANDIDATES:\x20'+i['length']+'\x20token\x20symbol(s)\x20have\x20multiple\x20on-chain\x20issuers.\x20'+'The\x20confirmation\x20message\x20lists\x20every\x20candidate\x20with\x20full\x20details\x20and\x20marks\x20the\x20token\x20'+'pinned\x20by\x20this\x20operation.\x20Present\x20the\x20list\x20to\x20the\x20USER\x20and\x20verify\x20the\x20pinned\x20issuer\x20is\x20'+'the\x20intended\x20one\x20before\x20approving;\x20if\x20it\x20is\x20wrong,\x20do\x20NOT\x20proceed\x20—\x20re-issue\x20with\x20the\x20'+'chosen\x20token\x27s\x20FULL\x20type\x20string\x20(package::module::Name)\x20in\x20type_parameter.'),w&&e['warnings']['push']('UNVERIFIED\x20TOKEN:\x20some\x20monetary\x20fields\x20use\x20tokens\x20not\x20in\x20the\x20official\x20registry.\x20'+'Precision\x20was\x20resolved\x20from\x20cache/on-chain.\x20Verify\x20the\x20token\x20type\x20before\x20proceeding.'),e['warnings']['push']('MONEY\x20CONFIRMATION:\x20'+u+'\x20monetary\x20field(s)\x20require\x20user\x20confirmation.\x20'+('Token\x20type:\x20'+g+'.\x20Use\x20env.confirmed=true\x20after\x20user\x20consent.'));}return e;}async function processSingleField(a,b,c,d,e,f,g,h,i,j){const k=a[b];if(k==null)return;try{const l=await parseAmount(k,e,f);if(!l['precision_known']){g['errors']['push']('FUND\x20INPUT\x20BLOCKED\x20at\x20'+c+':\x20MISSING\x20TOKEN\x20INFO\x20for\x20'+e+'\x20—\x20'+('precision\x20(decimals)\x20could\x20not\x20be\x20resolved.\x20The\x20value\x20'+JSON['stringify'](k)+'\x20was\x20')+'NOT\x20converted,\x20confirmed,\x20or\x20submitted;\x20no\x20on-chain\x20action\x20was\x20taken.\x20'+precisionUnknownGuidance(e,f));return;}l['converted']&&(a[b]=l['smallestUnit']['toString']());h['push']({'path':c,'displayAmount':l['displayAmount'],'tokenType':l['tokenType'],'tokenSymbol':l['tokenSymbol'],'decimals':l['decimals'],'smallestUnit':l['smallestUnit']['toString'](),'verified':l['verified'],'source':l['source'],'converted':l['converted'],'context':d});if(l['tokenSymbol']){const m=l['tokenSymbol']['toLowerCase']();let n=j['get'](m);if(!n){const o=await resolveTokensBySymbol(l['tokenSymbol'],f,e);o['length']>0x1&&(n=o,j['set'](m,n),i['push']({'symbol':l['tokenSymbol'],'candidates':n['map'](p=>({'type':p['type'],'symbol':p['symbol'],'name':p['name'],'decimals':p['decimals'],'source':p['source'],'verified':p['verified']}))}));}}}catch(p){g['errors']['push']('FUND\x20INPUT\x20BLOCKED\x20at\x20'+c+':\x20'+p['message']);}}export function generateSkillsHint(a){if(!a||!a['requiresConfirmation'])return null;const b=a['ambiguities']['length']>0x0;if(b)return'SKILLS\x20HINT:\x20This\x20money\x20transaction\x20uses\x20a\x20token\x20symbol\x20shared\x20by\x20multiple\x20'+'on-chain\x20issuers.\x20The\x20confirmation\x20message\x20lists\x20ALL\x20candidates\x20with\x20full\x20'+'details\x20and\x20marks\x20the\x20token\x20pinned\x20by\x20this\x20operation.\x20Present\x20the\x20list\x20to\x20'+'the\x20user,\x20verify\x20the\x20pinned\x20issuer\x20is\x20the\x20intended\x20one,\x20and\x20proceed\x20only\x20'+'after\x20explicit\x20consent\x20(env.confirmed=true).\x20If\x20the\x20pinned\x20token\x20is\x20wrong,\x20'+'do\x20NOT\x20proceed\x20—\x20the\x20user\x20must\x20re-issue\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20'+'string\x20in\x20type_parameter;\x20never\x20guess\x20an\x20issuer\x20from\x20the\x20bare\x20symbol.';return'SKILLS\x20HINT:\x20This\x20money\x20transaction\x20requires\x20user\x20confirmation.\x20'+'If\x20the\x20wowok-safety\x20skill\x20is\x20installed,\x20it\x20provides\x20R1-R10\x20confirmation\x20'+'dialogue\x20scripts.\x20Otherwise,\x20present\x20the\x20confirmation\x20message\x20to\x20the\x20user\x20'+'and\x20proceed\x20only\x20after\x20explicit\x20consent\x20(env.confirmed=true).';}export async function formatChainValue(a,b,c){let d;try{d=BigInt(a)['toString']();}catch{d=String(a);}const e=await resolveTokenByType(b,c);if(e&&typeof e['decimals']==='number'){let f=d;try{f=formatUnits(BigInt(d),e['decimals']);}catch{}const g=e['symbol']||'',h=g?f+'\x20'+g+'\x20(decimals:\x20'+e['decimals']+';\x201\x20'+g+'\x20=\x2010^'+e['decimals']+'\x20raw\x20units;\x20raw:\x20'+d+')':f+'\x20(decimals:\x20'+e['decimals']+';\x201\x20unit\x20=\x2010^'+e['decimals']+'\x20raw\x20units;\x20raw:\x20'+d+')';return{'raw':d,'display':f,'symbol':g||undefined,'decimals':e['decimals'],'token_type':b,'precision_known':!![],'text':h};}return{'raw':d,'display':d,'token_type':b,'precision_known':![],'text':d+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20token\x20precision\x20unavailable\x20for\x20'+b+';\x20'+'this\x20is\x20the\x20true\x20on-chain\x20RAW\x20value,\x20NOT\x20a\x20unit\x20value,\x20and\x20its\x20magnitude\x20cannot\x20be\x20'+'verified\x20(unit\x20=\x20raw\x20/\x2010^N\x20once\x20decimals\x20N\x20are\x20known).\x20'+precisionUnknownRawSuffix()+'\x20'+precisionUnknownGuidance(b,c)};}export function registryDisplayHint(a,b){if(!a)return undefined;const c=findInRegistryByType(a,b);if(!c)return undefined;return{'decimals':c['decimals'],'symbol':c['symbol']};}const RESOLUTION_CACHE=new Map(),OBJECT_TYPE_CACHE=new Map();function cacheNet(a){return a??'default';}function isCacheableObjectRef(a){return/^0x[0-9a-fA-F]{20,}$/['test'](a);}export function clearFundResolutionCaches(){RESOLUTION_CACHE['clear'](),OBJECT_TYPE_CACHE['clear']();}export function knownTokenSuggestions(a){const b=getRegistryForNetwork(a)['map'](c=>c['symbol']+'\x20('+c['type']+',\x20'+c['decimals']+'\x20decimals)');return b['length']>0x0?'Known\x20tokens\x20on\x20this\x20network:\x20'+b['join'](';\x20')+'.':'No\x20officially-known\x20tokens\x20on\x20this\x20network.';}function precisionUnknownGuidance(a,b){const c=b?'network\x20'+b:'the\x20currently\x20selected\x20network';return'To\x20recover:\x20(1)\x20provide\x20the\x20token\x27s\x20FULL\x20type\x20in\x20package::module::Name\x20form\x20'+'(e.g.\x200xFULLPACKAGEID::usdt::USDT\x20—\x20a\x20bare\x20symbol\x20such\x20as\x20\x22USDT\x22\x20cannot\x20be\x20resolved)\x20'+'in\x20type_parameter,\x20so\x20the\x20on-chain\x20coin\x20metadata\x20can\x20be\x20looked\x20up;\x20'+('(2)\x20verify\x20the\x20WOW\x20NETWORK\x20selection\x20is\x20correct\x20—\x20the\x20token\x20may\x20not\x20exist\x20on\x20'+c+';\x20')+'(3)\x20retry,\x20as\x20the\x20on-chain\x20metadata\x20lookup\x20may\x20have\x20failed\x20transiently.\x20'+knownTokenSuggestions(b);}function precisionUnknownRawSuffix(){return'Magnitude\x20cannot\x20be\x20verified\x20—\x20verify\x20the\x20token\x20type\x20and\x20WOW\x20network,\x20then\x20re-run.';}export function formatAmountText(a,b,c){let d;try{d=BigInt(a)['toString']();}catch{d=String(a);}if(b===undefined)return d+'\x20smallest\x20units\x20(token\x20precision\x20unknown)';let e=d;try{e=formatUnits(BigInt(d),b);}catch{}return c?e+'\x20'+c+'\x20(decimals:\x20'+b+';\x20raw:\x20'+d+')':e+'\x20(decimals:\x20'+b+';\x20raw:\x20'+d+')';}export async function convertTokenValue(a,b,c){const d=await resolveTokenByType(a,c),f=d?.['decimals'],g=d?.['symbol']||undefined,h={'token_type':a,'symbol':g,'decimals':f};if(b['raw']!==undefined){let j;try{j=BigInt(b['raw'])['toString']();}catch{return{...h,'precision_known':f!==undefined,'direction':'raw_to_unit','input':String(b['raw']),'output':'','error':'Invalid\x20raw\x20value:\x20\x22'+String(b['raw'])+'\x22\x20—\x20expected\x20a\x20non-negative\x20integer\x20(u64\x20smallest\x20units).','text':'Cannot\x20convert:\x20invalid\x20raw\x20value\x20\x22'+String(b['raw'])+'\x22.'};}if(f===undefined)return{...h,'precision_known':![],'direction':'raw_to_unit','input':j,'output':j,'text':j+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20token\x20precision\x20unavailable\x20for\x20'+a+';\x20'+'this\x20is\x20the\x20true\x20on-chain\x20RAW\x20value,\x20NOT\x20a\x20unit\x20value,\x20and\x20its\x20magnitude\x20cannot\x20'+'be\x20verified\x20(unit\x20=\x20raw\x20/\x2010^N\x20once\x20decimals\x20N\x20are\x20known).\x20'+precisionUnknownRawSuffix()};let k=j;try{k=formatUnits(BigInt(j),f);}catch{}return{...h,'precision_known':!![],'direction':'raw_to_unit','input':j,'output':k,'text':g?j+'\x20raw\x20=\x20'+k+'\x20'+g+'\x20(decimals:\x20'+f+';\x201\x20'+g+'\x20=\x2010^'+f+'\x20raw\x20units)':j+'\x20raw\x20=\x20'+k+'\x20(decimals:\x20'+f+';\x201\x20unit\x20=\x2010^'+f+'\x20raw\x20units)'};}const i=String(b['unit']??'')['trim']();if(f===undefined)return{...h,'precision_known':![],'direction':'unit_to_raw','input':i,'output':'','error':'MISSING\x20TOKEN\x20INFO:\x20cannot\x20convert\x20\x22'+i+'\x22\x20to\x20raw\x20units\x20for\x20token\x20type\x20'+a+'\x20—\x20'+'token\x20precision\x20(decimals)\x20is\x20unavailable.\x20Guessing\x20decimals\x20would\x20forge\x20a\x20wrong\x20on-chain\x20'+'value\x20and\x20risk\x20asset\x20loss,\x20so\x20the\x20conversion\x20is\x20REFUSED.\x20'+precisionUnknownGuidance(a,c),'text':'Cannot\x20convert\x20\x22'+i+'\x22\x20to\x20raw\x20units:\x20token\x20precision\x20unknown\x20for\x20'+a+'.'};try{const l=parseToUnits(i,f);return{...h,'precision_known':!![],'direction':'unit_to_raw','input':i,'output':l['toString'](),'text':g?i+'\x20'+g+'\x20=\x20'+l['toString']()+'\x20raw\x20smallest\x20units\x20(decimals:\x20'+f+';\x201\x20'+g+'\x20=\x2010^'+f+'\x20raw\x20units)':i+'\x20=\x20'+l['toString']()+'\x20raw\x20smallest\x20units\x20(decimals:\x20'+f+';\x201\x20unit\x20=\x2010^'+f+'\x20raw\x20units)'};}catch(m){const n=m instanceof Error?m['message']:String(m);return{...h,'precision_known':!![],'direction':'unit_to_raw','input':i,'output':'','error':n,'text':'Cannot\x20convert\x20\x22'+i+'\x22\x20to\x20raw\x20units:\x20'+n};}}export const TOKEN_GENERIC_OBJECT_TYPES=['Treasury','Allocation','Arbitration','Arb','Payment','Reward','Service'];export const extractGenericTokenType=extractGenericTypeArg;export function classifyFundWaterLevel(a,b){if(typeof a!=='number'||!Number['isFinite'](a))return undefined;if(a<=0x0)return'depleted';if(!(typeof b==='number'&&Number['isFinite'](b)&&b>0x0))return undefined;return a<b?'low_water':'healthy';}export function classifyFundWaterLevelUnits(a,b){if(typeof a!=='bigint')return undefined;if(a<=0x0n)return'depleted';if(typeof b!=='bigint'||b<=0x0n)return undefined;return a<b?'low_water':'healthy';}export function fundWaterReminder(a,b){switch(a){case'depleted':return'COMPENSATION\x20FUND\x20DEPLETED\x20(balance\x20'+b['balance']+'):\x20every\x20arbitration\x20compensation\x20claim\x20now\x20aborts\x20(E_COMPENSATION_NOT_MATCH,\x20abort\x2027)\x20and\x20every\x20SKU\x20whose\x203x\x20buy-time\x20coverage\x20the\x20empty\x20fund\x20cannot\x20back\x20is\x20unbuyable\x20(F-46).\x20MERCHANT\x20DECISION\x20—\x20top\x20up\x20via\x20service\x20compensation_fund_add,\x20or\x20accept\x20the\x20affected\x20SKUs\x20being\x20unbuyable/delisted.\x20No\x20gate\x20was\x20applied\x20and\x20nothing\x20was\x20blocked\x20(5R-07③:\x20the\x20reminder\x20is\x20advisory;\x20the\x20call\x20is\x20the\x20merchant\x27s).';case'low_water':return'COMPENSATION\x20FUND\x20LOW\x20WATER\x20(balance\x20'+b['balance']+'\x20<\x20threshold\x20'+b['threshold']+'):\x20a\x20single\x20large\x20award\x20could\x20drain\x20the\x20fund\x20below\x20a\x20flagship\x20SKU\x27s\x20buy-time\x20coverage\x20and\x20silently\x20make\x20it\x20unbuyable\x20(F-46).\x20Recommended:\x20top\x20up\x20via\x20service\x20compensation_fund_add.\x20No\x20gate\x20was\x20applied\x20and\x20nothing\x20was\x20blocked\x20(5R-07③:\x20the\x20reminder\x20is\x20advisory;\x20the\x20threshold\x20is\x20the\x20merchant\x27s).';default:return null;}}export async function resolveObjectTokenType(a,b){if(!a||typeof a!=='string')return undefined;const c=isCacheableObjectRef(a)&&b!==undefined,d=cacheNet(b)+'::'+a;if(c){const e=OBJECT_TYPE_CACHE['get'](d);if(e)return e;}try{const {query_object_token_type:f}=await import('@wowok/wowok'),[g]=await f({'objects':[a],'network':b});if(!g?.['object'])return undefined;const h={'tokenType':g['coin_type'],'objectType':g['object_type'],'typeRaw':g['type_raw']};if(c)OBJECT_TYPE_CACHE['set'](d,h);return h;}catch{return undefined;}}export async function resolveOperationObjectTokenType(a,b,c){if(!a)return undefined;if(a['object']&&typeof a['object']==='object'&&typeof a['object']['type_parameter']==='string')return a['object']['type_parameter'];if(b==='payment'&&typeof a['type_parameter']==='string')return a['type_parameter'];if(typeof a['object']==='string'&&a['object']['length']>0x0){const d=await resolveObjectTokenType(a['object'],c);return d?.['tokenType'];}return undefined;}const RECEIVE_TOKEN_FIELDS={'treasury':['receive'],'allocation':['received_coins'],'reward':['receive'],'service':['compensation_fund_receive'],'arbitration':['receive']},COIN_PARAM_FIELDS={'treasury':['deposit.coin'],'allocation':['coin'],'reward':['coin_add'],'arbitration':['dispute.fee'],'service':['compensation_fund_add','order_new.buy.total_pay']};export async function validateOperationTokenMatch(a,b,c,d){const e={'errors':[],'warnings':[],'objectTokenType':c};if(!a||!c)return e;const f=typeof a['object']==='string'?a['object']:'the\x20target\x20object',g=(h,i)=>'TOKEN\x20TYPE\x20MISMATCH\x20('+i+'):\x20'+f+'\x20only\x20accepts\x20'+c+'\x20'+('(its\x20generic\x20token\x20type\x20is\x20fixed\x20and\x20immutable),\x20but\x20'+h+'\x20was\x20provided.\x20')+('Use\x20'+c+'\x20for\x20this\x20operation,\x20or\x20target\x20a\x20different\x20object.');for(const h of RECEIVE_TOKEN_FIELDS[b]??[]){const i=a[h];i&&typeof i==='object'&&typeof i['token_type']==='string'&&i['token_type']!==c&&e['errors']['push'](g(i['token_type'],'field\x20\x27'+h+'.token_type\x27'));}for(const j of COIN_PARAM_FIELDS[b]??[]){const k=getNestedValue(a,j);if(k&&typeof k==='object'&&typeof k['coin']==='string'){const l=k['coin'],m=await resolveObjectTokenType(l,d);if(m?.['tokenType'])m['tokenType']!==c&&e['errors']['push'](g(m['tokenType'],'coin\x20\x27'+l+'\x27\x20at\x20\x27'+j+'\x27'));else m===undefined&&e['warnings']['push']('Could\x20not\x20resolve\x20coin\x20object\x20\x27'+l+'\x27\x20('+j+')\x20to\x20verify\x20its\x20token\x20type\x20'+('matches\x20'+c+'.\x20The\x20on-chain\x20type\x20check\x20will\x20reject\x20a\x20mismatch\x20at\x20execution.'));}}return e;}const OBJECT_MONEY_FIELDS={'Treasury':['balance','inflow','outflow'],'Allocation':['balance'],'Arbitration':['fee','balance'],'Reward':['balance'],'Service':['compensation_fund'],'Payment':['amount'],'Arb':['fee']};export async function annotateObjectMonetaryFields(a,b){if(!a||typeof a!=='object'||typeof a['type']!=='string')return;let c=extractGenericTokenType(a['type_raw']);const d={},e=async(h,j,k)=>{if(j===null||j===undefined)return;if(typeof j!=='string'&&typeof j!=='number'&&typeof j!=='bigint')return;d[h]=k?await formatChainValue(j,k,b):{'raw':String(j),'display':String(j),'token_type':'','precision_known':![],'text':String(j)+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20token\x20type\x20could\x20not\x20be\x20determined\x20'+'for\x20this\x20field;\x20this\x20is\x20the\x20true\x20raw\x20value,\x20not\x20a\x20unit\x20value.\x20'+precisionUnknownRawSuffix()};};if(!c&&(a['type']==='Order'||a['type']==='Discount')&&typeof a['service']==='string')try{const h=await resolveObjectTokenType(a['service'],b);c=h?.['tokenType'];}catch{}const f=0x0,g=async(k,l,m)=>{await e(m+'threshold',k,c);if(!Array['isArray'](l))return;for(let n=0x0;n<l['length'];n++){const o=l[n];await e(m+'allocators['+n+'].fix',o?.['fix'],c);o?.['max']!==null&&o?.['max']!==undefined&&await e(m+'allocators['+n+'].max',o['max'],c);if(Array['isArray'](o?.['sharing']))for(let p=0x0;p<o['sharing']['length'];p++){o['sharing'][p]?.['mode']===f&&await e(m+'allocators['+n+'].sharing['+p+'].sharing',o['sharing'][p]['sharing'],c);}}};for(const j of OBJECT_MONEY_FIELDS[a['type']]??[]){await e(j,a[j],c);}switch(a['type']){case'Service':if(Array['isArray'](a['sales']))for(let k=0x0;k<a['sales']['length'];k++){await e('sales['+k+'].price',a['sales'][k]?.['price'],c);}await g(a['order_allocators']?.['threshold'],a['order_allocators']?.['allocators'],'order_allocators.');break;case'Allocation':await g(a['threshold'],a['allocators'],'');break;case'Order':await e('amount',a['amount'],c);if(Array['isArray'](a['items']))for(let l=0x0;l<a['items']['length'];l++){await e('items['+l+'].price',a['items'][l]?.['price'],c);}break;case'Payment':if(Array['isArray'](a['record']))for(let m=0x0;m<a['record']['length'];m++){await e('record['+m+'].amount',a['record'][m]?.['amount'],c);}break;case'Reward':if(Array['isArray'](a['guards']))for(let n=0x0;n<a['guards']['length'];n++){const o=a['guards'][n]?.['amount'];o&&typeof o==='object'&&o['type']===0x1&&await e('guards['+n+'].amount.value',o['value'],c);}break;case'Arb':await e('indemnity.amount',a['indemnity']?.['amount'],c);break;case'Discount':await e('benchmark',a['benchmark'],c);a['discount_type']===0x1&&await e('off',a['off'],c);break;}Object['keys'](d)['length']>0x0&&(a['_money_display']=d);}const TABLE_ITEM_MONEY_FIELDS={'TableItem_TreasuryHistory':['amount'],'TableItem_RewardRecord':['total']};export async function resolveParentObjectTokenType(a,b){const c=await resolveObjectTokenType(a,b);if(!c)return undefined;if(c['objectType']&&TOKEN_GENERIC_OBJECT_TYPES['includes'](c['objectType']))return c['tokenType'];return undefined;}export async function annotateTableItemMonetaryFields(a,b,c){if(!a||typeof a!=='object'||typeof a['type']!=='string')return;const d={},e=async(f,g)=>{if(g===null||g===undefined)return;if(typeof g!=='string'&&typeof g!=='number'&&typeof g!=='bigint')return;d[f]=b?await formatChainValue(g,b,c):{'raw':String(g),'display':String(g),'token_type':'','precision_known':![],'text':String(g)+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20parent\x20object\x20token\x20type\x20could\x20not\x20'+'be\x20resolved;\x20this\x20is\x20the\x20true\x20raw\x20value,\x20not\x20a\x20unit\x20value.\x20'+precisionUnknownRawSuffix()};};for(const f of TABLE_ITEM_MONEY_FIELDS[a['type']]??[]){await e(f,a[f]);}if(a['type']==='TableItem_RewardRecord'&&Array['isArray'](a['record']))for(let g=0x0;g<a['record']['length'];g++){await e('record['+g+'].amount',a['record'][g]?.['amount']);}Object['keys'](d)['length']>0x0&&(a['_money_display']=d);}const MONEY_EVENTS={'TreasuryEvent':{'tokenSource':'object','fields':['amount']},'RewardClaimEvent':{'tokenSource':'object','fields':['amount','total','balance_left']},'RewardFundEvent':{'tokenSource':'object','fields':['amount','balance']},'RewardWithdrawEvent':{'tokenSource':'object','fields':['amount','balance_left']},'AllocationEvent':{'tokenSource':'object','fields':['amount']},'NewPaymentEvent':{'tokenSource':'object','fields':['amount'],'arrayFields':[['record','amount']]},'NewOrderEvent':{'tokenSource':'service','fields':['amount']},'ArbEvent':{'tokenSource':'object','fields':[],'optionFields':['indemnity_amount']}};export async function annotateEventMonetaryFields(a,b){if(!a||typeof a!=='object'||typeof a['type']!=='string')return;const c=a['type']['includes']('::')?a['type']['split']('::')['pop']():a['type'],d=c?MONEY_EVENTS[c]:undefined;if(!d)return;const e=a['parsedJson_raw']??{},g=m=>a[m]??e[m];let h;const j=g(d['tokenSource']);if(typeof j==='string'&&j)try{h=(await resolveObjectTokenType(j,b))?.['tokenType'];}catch{}const k={},l=async(m,n)=>{if(n===null||n===undefined)return;if(typeof n!=='string'&&typeof n!=='number'&&typeof n!=='bigint')return;k[m]=h?await formatChainValue(n,h,b):{'raw':String(n),'display':String(n),'token_type':'','precision_known':![],'text':String(n)+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20owning\x20object\x20token\x20type\x20could\x20not\x20'+'be\x20resolved;\x20this\x20is\x20the\x20true\x20raw\x20value,\x20not\x20a\x20unit\x20value.\x20'+precisionUnknownRawSuffix()};};for(const m of d['fields']){await l(m,g(m));}for(const n of d['optionFields']??[]){const o=g(n);o!==null&&o!==undefined&&await l(n,o);}for(const [p,q]of d['arrayFields']??[]){const r=g(p);if(Array['isArray'](r))for(let s=0x0;s<r['length'];s++){await l(p+'['+s+'].'+q,r[s]?.[q]);}}Object['keys'](k)['length']>0x0&&(a['_money_display']=k);}export async function annotateEventsMonetaryFields(a,b){if(!Array['isArray'](a))return;for(const c of a){try{await annotateEventMonetaryFields(c,b);}catch{}}}export async function annotateBalanceChanges(a,b){if(!Array['isArray'](a))return;for(const c of a){try{const d=c?.['coin_type'],e=c?.['amount'];if(typeof d!=='string'||!d)continue;if(typeof e!=='string'&&typeof e!=='number'&&typeof e!=='bigint')continue;c['_money_display']={'amount':await formatChainValue(e,d,b)};}catch{}}}export async function prepareFundOperation(a,b,c){const d=await resolveOperationObjectTokenType(a,b,c),e=await validateOperationTokenMatch(a,b,d,c),f=await processFundOperation(a,b,c,{'objectTokenType':d});return{...f,'warnings':[...e['warnings'],...f['warnings']],'matchErrors':e['errors'],'blockingErrors':[...e['errors'],...f['errors']],'objectTokenType':d};}
1
+ import{GasTokenType,WOW_DECIMALS,MAINNET_BRIDGE_CONFIG,formatUnits,parseToUnits,extractGenericTypeArg}from'@wowok/wowok';const GAS_TOKENS=[{'type':GasTokenType,'symbol':'WOW','decimals':WOW_DECIMALS,'name':'Wowok\x20Token','description':'Default\x20platform\x20gas\x20token\x20for\x20all\x20WoWok\x20operations.\x201\x20WOW\x20=\x2010^'+WOW_DECIMALS+'\x20MIST.\x20Available\x20on\x20testnet\x20and\x20mainnet.'}],TESTNET_TOKENS=[];function buildMainnetTokensFromSDK(){const a=MAINNET_BRIDGE_CONFIG?.['tokens'];if(!Array['isArray'](a))return[];const b=new Set();return a['filter'](c=>{if(b['has'](c['wowTypeTag']))return![];return b['add'](c['wowTypeTag']),!![];})['map'](c=>{const d=c['wowTypeTag']['split']('::')['pop']()??c['symbol'];return{'type':c['wowTypeTag'],'symbol':d,'decimals':c['wowDecimals'],'name':c['symbol']+'\x20(Bridge)','description':c['description']??'Bridge\x20token\x20on\x20WOW\x20mainnet.\x20'+c['wowDecimals']+'\x20decimals.'};});}export const OFFICIAL_TOKEN_REGISTRY={'gas':GAS_TOKENS,'testnet':TESTNET_TOKENS,'mainnet':buildMainnetTokensFromSDK()};export function getRegistryForNetwork(a){return[...OFFICIAL_TOKEN_REGISTRY['gas'],...a==='testnet'?OFFICIAL_TOKEN_REGISTRY['testnet']:[],...a==='mainnet'?OFFICIAL_TOKEN_REGISTRY['mainnet']:[]];}export function findInRegistryByType(a,b){const c=OFFICIAL_TOKEN_REGISTRY['gas']['find'](e=>e['type']===a);if(c)return c;const d=getRegistryForNetwork(b);return d['find'](e=>e['type']===a);}export function findInRegistryBySymbol(a,b){const c=a['toLowerCase'](),d=OFFICIAL_TOKEN_REGISTRY['gas']['filter'](g=>g['symbol']['toLowerCase']()===c),e=getRegistryForNetwork(b),f=e['filter'](g=>g['symbol']['toLowerCase']()===c&&!d['some'](h=>h['type']===g['type']));return[...d,...f];}export async function resolveTokenByType(a,b){const c=findInRegistryByType(a,b);if(c)return{'type':c['type'],'symbol':c['symbol'],'decimals':c['decimals'],'name':c['name'],'source':'registry','verified':!![]};const d=b!==undefined,e=cacheNet(b)+'::'+a;if(d){const f=RESOLUTION_CACHE['get'](e);if(f)return f;}try{const {TokenInfo:g}=await import('@wowok/wowok'),h=g['Instance'](),i=await h['fetch'](a,undefined,b);if(i){const j={'type':i['type'],'symbol':i['symbol']??'','decimals':i['decimals'],'name':i['name']??'','source':'cache','verified':![]};if(d)RESOLUTION_CACHE['set'](e,j);return j;}}catch{}return undefined;}export async function resolveTokensBySymbol(a,b,c){const d=[],e=findInRegistryBySymbol(a,b);for(const f of e){d['push']({'type':f['type'],'symbol':f['symbol'],'decimals':f['decimals'],'name':f['name'],'source':'registry','verified':!![]});}try{const {query_local_token_list:g}=await import('@wowok/wowok'),h=await g({'symbol':a},b);for(const i of h){if(d['some'](j=>j['type']===i['type']))continue;d['push']({'type':i['type'],'symbol':i['symbol']??'','decimals':i['decimals']??0x0,'name':i['name']??'','source':'cache','verified':![]});}}catch{}return c&&d['sort']((j,k)=>{if(j['type']===c)return-0x1;if(k['type']===c)return 0x1;if(j['verified']&&!k['verified'])return-0x1;if(!j['verified']&&k['verified'])return 0x1;return 0x0;}),d;}const AMOUNT_WITH_SYMBOL=/^(\d+(?:\.\d+)?)\s*([A-Za-z][A-Za-z0-9]*)$/;export function isAmountWithSymbol(a){if(typeof a!=='string')return![];const b=a['match'](AMOUNT_WITH_SYMBOL);if(!b)return![];const c=b[0x2];return c['length']>=0x2&&c['length']<=0xa;}export async function parseAmount(a,b,c){const d=a,e=await resolveTokenByType(b,c),f=e!==undefined,g=e?.['decimals']??0x9,h=e?.['symbol']??'',i=e?.['source']??'onchain',j=e?.['verified']??![];if(typeof a==='string'){const m=a['match'](AMOUNT_WITH_SYMBOL);if(m){const n=m[0x1],o=m[0x2];if(!f){const q=await resolveTokensBySymbol(o,c);if(q['length']>0x0){const r=q['length']>0x1?'MULTIPLE\x20issuers':'an\x20issuer';throw new Error('TOKEN\x20CHOICE\x20REQUIRED:\x20\x22'+a+'\x22\x20uses\x20symbol\x20\x22'+o+'\x22\x20which\x20matches\x20'+r+'\x20'+('on\x20this\x20network'+(q['length']>0x1?'\x20('+q['length']+'\x20candidates\x20—\x20the\x20bare\x20symbol\x20is\x20ambiguous)':'')+'.\x20')+'The\x20operation\x20is\x20REFUSED\x20until\x20you\x20present\x20these\x20candidates\x20to\x20the\x20USER\x20and\x20let\x20the\x20user\x20choose\x20'+'(the\x20user\x20may\x20answer\x20by\x20the\x20candidate\x20NUMBER,\x20e.g.\x20\x222\x22,\x20or\x20by\x20pasting\x20the\x20full\x20type).\x20'+'Then\x20re-issue\x20the\x20operation\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20string\x20in\x20type_parameter\x20'+'(package::module::Name)\x20—\x20a\x20bare\x20symbol\x20cannot\x20identify\x20the\x20issuer,\x20and\x20you\x20must\x20NEVER\x20guess\x20one.\x0a'+('\x20\x20Candidates\x20for\x20symbol\x20\x22'+o+'\x22:\x0a')+formatTokenCandidates(q)+'\x0a'+'\x20\x20After\x20choosing,\x20also\x20verify\x20the\x20WOW\x20network\x20selection\x20is\x20correct.');}throw new Error('MISSING\x20TOKEN\x20INFO:\x20cannot\x20convert\x20\x22'+a+'\x22\x20for\x20token\x20type\x20'+b+'\x20—\x20'+'the\x20token\x27s\x20precision\x20(decimals)\x20could\x20not\x20be\x20resolved\x20from\x20the\x20official\x20'+('registry,\x20local\x20cache,\x20or\x20on-chain\x20metadata,\x20and\x20no\x20token\x20with\x20symbol\x20\x22'+o+'\x22\x20')+'is\x20known\x20on\x20this\x20network.\x20Converting\x20a\x20unit\x20value\x20without\x20decimals\x20would\x20forge\x20a\x20'+'wrong\x20on-chain\x20amount\x20and\x20risk\x20asset\x20loss,\x20so\x20the\x20operation\x20is\x20REFUSED.\x20'+precisionUnknownGuidance(b,c));}if(h&&o['toLowerCase']()!==h['toLowerCase']()){const s=await resolveTokensBySymbol(o,c);if(s['length']>0x0){const t=s['length']>0x1?'multiple\x20issuers':'an\x20issuer';throw new Error('TOKEN\x20CHOICE\x20REQUIRED:\x20the\x20amount\x20\x22'+a+'\x22\x20uses\x20symbol\x20\x22'+o+'\x22,\x20but\x20the\x20operation\x27s\x20'+('token\x20is\x20currently\x20\x22'+h+'\x22\x20(type:\x20'+b+').\x20\x22'+o+'\x22\x20matches\x20'+t+'\x20on\x20this\x20')+('network'+(s['length']>0x1?'\x20('+s['length']+'\x20candidates\x20—\x20the\x20bare\x20symbol\x20is\x20ambiguous)':'')+'.\x20')+'Present\x20these\x20candidates\x20to\x20the\x20USER\x20and\x20let\x20the\x20user\x20choose\x20(the\x20user\x20may\x20answer\x20by\x20the\x20candidate\x20'+'NUMBER,\x20e.g.\x20\x222\x22,\x20or\x20by\x20pasting\x20the\x20full\x20type),\x20then\x20re-issue\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20in\x20'+'type_parameter\x20(package::module::Name)\x20—\x20never\x20guess\x20an\x20issuer.\x20The\x20operation\x20was\x20NOT\x20executed.\x0a'+('\x20\x20Candidates\x20for\x20symbol\x20\x22'+o+'\x22:\x0a')+formatTokenCandidates(s)+'\x0a'+('\x20\x20If\x20\x22'+h+'\x22\x20('+b+')\x20was\x20intended\x20instead,\x20write\x20the\x20amount\x20with\x20that\x20symbol\x20(e.g.\x20\x22'+n+h+'\x22).'));}throw new Error('Amount\x20symbol\x20\x22'+o+'\x22\x20does\x20not\x20match\x20the\x20resolved\x20token\x20symbol\x20\x22'+h+'\x22\x20'+('(token\x20type:\x20'+b+'),\x20and\x20no\x20token\x20with\x20symbol\x20\x22'+o+'\x22\x20is\x20known\x20on\x20this\x20network.\x20')+('Either\x20write\x20the\x20amount\x20with\x20the\x20correct\x20symbol\x20(e.g.\x20\x22'+n+h+'\x22),\x20or\x20—\x20if\x20a\x20')+'DIFFERENT\x20token\x20was\x20intended\x20—\x20provide\x20that\x20token\x27s\x20FULL\x20type\x20in\x20package::module::Name\x20form\x20in\x20'+'type_parameter\x20(a\x20bare\x20symbol\x20cannot\x20be\x20resolved).\x20'+knownTokenSuggestions(c));}const p=parseToUnits(n,g);return{'smallestUnit':p,'displayAmount':n+'\x20'+o,'originalInput':d,'tokenType':b,'tokenSymbol':h||o,'decimals':g,'converted':!![],'source':i,'verified':j,'precision_known':!![]};}}if(typeof a==='number'&&!Number['isSafeInteger'](a))throw new Error('Amount\x20'+a+'\x20is\x20outside\x20the\x20safe\x20integer\x20range\x20(±2^53\x20=\x20±9007199254740991):\x20'+'JS\x20numbers\x20lose\x20integer\x20precision\x20beyond\x20this\x20point.\x20Pass\x20the\x20raw\x20u64\x20as\x20a\x20NUMERIC\x20'+'STRING\x20(e.g.\x20\x229000000000000000000\x22)\x20or\x20a\x20display\x20string\x20with\x20the\x20token\x20symbol\x20'+'(e.g.\x20\x222.5WOW\x22).');if(typeof a==='string'&&!/^\d+$/['test'](a['trim']()))throw new Error('Invalid\x20raw\x20amount:\x20\x22'+a+'\x22.\x20Smallest-unit\x20amounts\x20must\x20be\x20non-negative\x20integer\x20'+'strings\x20(e.g.\x20\x222500000000\x22).\x20Decimal\x20unit\x20values\x20must\x20carry\x20the\x20token\x20symbol\x20'+'(e.g.\x20\x222.5WOW\x22)\x20so\x20the\x20Fund\x20Processing\x20Layer\x20can\x20convert\x20them\x20with\x20the\x20token\x27s\x20decimals.');let k;try{k=BigInt(a);}catch{throw new Error('Invalid\x20amount:\x20\x22'+a+'\x22.\x20Expected\x20a\x20number,\x20a\x20numeric\x20string\x20(smallest\x20unit),\x20'+'or\x20a\x20display-format\x20string\x20like\x20\x222.5WOW\x22\x20(matching\x20the\x20token\x27s\x20symbol).');}const l=f?formatUnits(k,g):k['toString']()+'\x20raw\x20smallest\x20units\x20(token\x20precision\x20unknown)';return{'smallestUnit':k,'displayAmount':f&&h?l+'\x20'+h:l,'originalInput':d,'tokenType':b,'tokenSymbol':h,'decimals':g,'converted':![],'source':i,'verified':j,'precision_known':f};}function formatTokenCandidates(a,b){return a['map']((d,e)=>{const f=d['verified']?'\x20[VERIFIED\x20—\x20official\x20registry]':'\x20[UNVERIFIED\x20—\x20on-chain\x20metadata]',g=d['name']?'\x20\x22'+d['name']+'\x22':'',h=b&&d['type']===b?'\x20\x20<--\x20USED\x20BY\x20THIS\x20OPERATION\x20(the\x20pinned\x20token\x20—\x20verify\x20before\x20approving)':'';return'\x20\x20\x20\x20\x20\x20'+(e+0x1)+'.\x20'+(d['symbol']??'')+g+'\x20—\x20full\x20type:\x20'+d['type']+'\x20('+(d['decimals']??'?')+'\x20decimals'+f+(d['source']?',\x20source:\x20'+d['source']:'')+')'+h;})['join']('\x0a');}export function generateFundConfirmation(a,b=[]){const c=b['length']>0x0,d=a[0x0]?.['tokenType'],e=['MONEY\x20TRANSACTION\x20CONFIRMATION\x20REQUIRED',''];for(const f of a){const g=f['verified']?'VERIFIED\x20—\x20official\x20registry':'UNVERIFIED\x20—\x20cache/on-chain\x20metadata',h=f['tokenSymbol']||'(no\x20symbol)';e['push']('\x20\x20•\x20'+f['context']+':\x20'+f['displayAmount']),e['push']('\x20\x20\x20\x20\x20\x20token:\x20'+h+'\x20—\x20full\x20type:\x20'+f['tokenType']),e['push']('\x20\x20\x20\x20\x20\x20decimals:\x20'+f['decimals']+'\x20(1\x20'+h+'\x20=\x2010^'+f['decimals']+'\x20raw\x20units);\x20'+('raw\x20amount:\x20'+f['smallestUnit']+';\x20'+g+';\x20source:\x20'+f['source'])),f['converted']&&e['push']('\x20\x20\x20\x20\x20\x20(input\x20was\x20a\x20display\x20amount\x20—\x20converted\x20to\x20smallest\x20units\x20with\x20the\x20token\x27s\x20decimals)');}if(c){e['push']('','TOKEN\x20CANDIDATES\x20—\x20multiple\x20on-chain\x20issuers\x20share\x20the\x20same\x20symbol.','The\x20token\x20this\x20operation\x20is\x20actually\x20pinned\x20to\x20is\x20marked','\x22<--\x20USED\x20BY\x20THIS\x20OPERATION\x22.\x20Verify\x20it\x20is\x20the\x20intended\x20issuer','BEFORE\x20approving.\x20If\x20it\x20is\x20wrong,\x20do\x20NOT\x20approve\x20—\x20re-issue\x20the','operation\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20string','(package::module::Name)\x20in\x20type_parameter;\x20a\x20bare\x20symbol\x20can\x20never','identify\x20the\x20issuer.');for(const i of b){e['push']('\x20\x20Symbol\x20\x22'+i['symbol']+'\x22\x20matches\x20these\x20tokens:'),e['push'](formatTokenCandidates(i['candidates'],d));}}return e['push']('','This\x20operation\x20involves\x20money.\x20Please\x20confirm\x20before\x20proceeding.'),{'requiresConfirmation':!![],'reason':c?'Money\x20transaction\x20—\x20user\x20must\x20verify\x20the\x20pinned\x20token\x20among\x20same-symbol\x20candidates\x20before\x20approving':'Money\x20transaction\x20requires\x20user\x20confirmation','fields':a,'ambiguities':b,'message':e['join']('\x0a')};}function extractTokenType(a,b,c){if(a?.['object']&&typeof a['object']==='object'&&a['object']['type_parameter'])return a['object']['type_parameter'];if(b==='payment'&&a?.['type_parameter'])return a['type_parameter'];if(c)return c;return GasTokenType;}function isFixedAmount(a){return a?.['type']==='Fixed';}function isFixedDiscount(a){const b=a?.['discount_type'];return b===0x1||b==='FIXED';}function isRatesDiscount(a){const b=a?.['discount_type'];return b===0x0||b==='RATES';}function isAmountModeSharing(a){return a?.['mode']==='Amount';}function isPriceDeltaOp(a){return a?.['op']==='price_add'||a?.['op']==='price_reduce';}const MONETARY_FIELDS={'service':[{'path':'sales.sales.price','context':'Service\x20sale\x20price'},{'path':'sales.value','context':'Service\x20sale\x20price\x20delta\x20(per-item\x20op)','filter':isPriceDeltaOp},{'path':'compensation_fund_add.balance','context':'Service\x20compensation\x20fund\x20deposit'},{'path':'order_new.buy.total_pay.balance','context':'Order\x20payment\x20amount'},{'path':'discount.discount_value','context':'Discount\x20fixed\x20deduction\x20(FIXED\x20type,\x20base\x20units)','filter':isFixedDiscount},{'path':'order_allocators.threshold','context':'Service\x20order\x20allocation\x20threshold'},{'path':'order_allocators.allocators.sharing.sharing','context':'Service\x20order\x20allocation\x20sharing\x20amount\x20(Amount\x20mode)','filter':isAmountModeSharing},{'path':'order_allocators.allocators.max','context':'Service\x20order\x20allocation\x20cap'}],'arbitration':[{'path':'dispute.fee.balance','context':'Arbitration\x20dispute\x20filing\x20coin\x20(attached)\x20—\x20the\x20case\x20escrows\x20the\x20VENUE\x27s\x20configured\x20fee;\x20any\x20excess\x20refunds\x20to\x20the\x20filer\x20at\x20filing'},{'path':'fee','context':'Arbitration\x20fee'},{'path':'arbitration.indemnity','context':'Arbitration\x20verdict\x20indemnity'}],'reward':[{'path':'coin_add.balance','context':'Reward\x20coin\x20add'},{'path':'guard_add.amount.value','context':'Reward\x20guard\x20fixed\x20amount','filter':isFixedAmount}],'treasury':[{'path':'deposit.coin.balance','context':'Treasury\x20deposit\x20amount'},{'path':'withdraw.amount.fixed','context':'Treasury\x20withdrawal\x20amount'}],'payment':[{'path':'revenue.amount.balance','context':'Payment\x20amount'}],'allocation':[{'path':'coin.balance','context':'Allocation\x20funding\x20amount'},{'path':'allocators.threshold','context':'Allocation\x20threshold'},{'path':'allocators.allocators.sharing.sharing','context':'Allocation\x20sharing\x20amount\x20(Amount\x20mode)','filter':isAmountModeSharing},{'path':'allocators.allocators.max','context':'Allocation\x20cap'}]};function getNestedValue(a,b){const c=b['split']('.');let d=a;for(const e of c){if(d==null)return undefined;d=d[e];}return d;}function resolveMonetaryLeaves(a,b){const c=b['split']('.'),d=[],e=(f,g,h)=>{if(f==null)return;const j=c[g];if(g===c['length']-0x1){f[j]!=null&&d['push']({'parent':f,'key':j,'displayPath':h+j});return;}const k=f[j];if(Array['isArray'](k))for(let l=0x0;l<k['length'];l++){e(k[l],g+0x1,''+h+j+'['+l+'].');}else e(k,g+0x1,''+h+j+'.');};return e(a,0x0,''),d;}export async function processFundOperation(a,b,c,d){const e={'convertedData':a,'warnings':[],'errors':[],'confirmation':null},f=MONETARY_FIELDS[b];if(!f)return e;const g=extractTokenType(a,b,d?.['objectTokenType']),h=[],i=[],j=new Map();for(const k of f){const l=resolveMonetaryLeaves(a,k['path']);for(const m of l){if(k['filter']&&!k['filter'](m['parent']))continue;await processSingleField(m['parent'],m['key'],m['displayPath'],k['context'],g,c,e,h,i,j);}}for(const o of resolveMonetaryLeaves(a,'discount.discount_value')){if(isRatesDiscount(o['parent'])){const p=o['parent']['discount_value'],q=typeof p==='number'?p:Number(p),r=Number['isFinite'](q)?(q/0x64)['toString']():p,s=o['parent']['count'],t=typeof s==='number'&&s>0x1?'\x20count:\x20'+s+'\x20mints\x20'+s+'\x20SEPARATE\x20single-use\x20Discount\x20objects.':'';e['warnings']['push']('DISCOUNT\x20RATE:\x20discount.discount_value\x20'+p+'\x20is\x20a\x20per-10000\x20rate\x20(off),\x20NOT\x20a\x20token\x20amount\x20—\x20'+(p+'/10000\x20of\x20the\x20order\x20total\x20is\x20deducted\x20('+r+'%\x20off;\x2010000\x20=\x20100%\x20off,\x20and\x20a\x20value\x20above\x2010000\x20is\x20rejected\x20for\x20RATES).'+t));}}if(h['length']>0x0){e['confirmation']=generateFundConfirmation(h,i);const u=h['length'],w=h['some'](y=>!y['verified']),x=i['length']>0x0;x&&e['warnings']['push']('TOKEN\x20CANDIDATES:\x20'+i['length']+'\x20token\x20symbol(s)\x20have\x20multiple\x20on-chain\x20issuers.\x20'+'The\x20confirmation\x20message\x20lists\x20every\x20candidate\x20with\x20full\x20details\x20and\x20marks\x20the\x20token\x20'+'pinned\x20by\x20this\x20operation.\x20Present\x20the\x20list\x20to\x20the\x20USER\x20and\x20verify\x20the\x20pinned\x20issuer\x20is\x20'+'the\x20intended\x20one\x20before\x20approving;\x20if\x20it\x20is\x20wrong,\x20do\x20NOT\x20proceed\x20—\x20re-issue\x20with\x20the\x20'+'chosen\x20token\x27s\x20FULL\x20type\x20string\x20(package::module::Name)\x20in\x20type_parameter.'),w&&e['warnings']['push']('UNVERIFIED\x20TOKEN:\x20some\x20monetary\x20fields\x20use\x20tokens\x20not\x20in\x20the\x20official\x20registry.\x20'+'Precision\x20was\x20resolved\x20from\x20cache/on-chain.\x20Verify\x20the\x20token\x20type\x20before\x20proceeding.'),e['warnings']['push']('MONEY\x20CONFIRMATION:\x20'+u+'\x20monetary\x20field(s)\x20require\x20user\x20confirmation.\x20'+('Token\x20type:\x20'+g+'.\x20Use\x20env.confirmed=true\x20after\x20user\x20consent.'));}return e;}async function processSingleField(a,b,c,d,e,f,g,h,i,j){const k=a[b];if(k==null)return;try{const l=await parseAmount(k,e,f);if(!l['precision_known']){g['errors']['push']('FUND\x20INPUT\x20BLOCKED\x20at\x20'+c+':\x20MISSING\x20TOKEN\x20INFO\x20for\x20'+e+'\x20—\x20'+('precision\x20(decimals)\x20could\x20not\x20be\x20resolved.\x20The\x20value\x20'+JSON['stringify'](k)+'\x20was\x20')+'NOT\x20converted,\x20confirmed,\x20or\x20submitted;\x20no\x20on-chain\x20action\x20was\x20taken.\x20'+precisionUnknownGuidance(e,f));return;}l['converted']&&(a[b]=l['smallestUnit']['toString']());h['push']({'path':c,'displayAmount':l['displayAmount'],'tokenType':l['tokenType'],'tokenSymbol':l['tokenSymbol'],'decimals':l['decimals'],'smallestUnit':l['smallestUnit']['toString'](),'verified':l['verified'],'source':l['source'],'converted':l['converted'],'context':d});if(l['tokenSymbol']){const m=l['tokenSymbol']['toLowerCase']();let n=j['get'](m);if(!n){const o=await resolveTokensBySymbol(l['tokenSymbol'],f,e);o['length']>0x1&&(n=o,j['set'](m,n),i['push']({'symbol':l['tokenSymbol'],'candidates':n['map'](p=>({'type':p['type'],'symbol':p['symbol'],'name':p['name'],'decimals':p['decimals'],'source':p['source'],'verified':p['verified']}))}));}}}catch(p){g['errors']['push']('FUND\x20INPUT\x20BLOCKED\x20at\x20'+c+':\x20'+p['message']);}}export function generateSkillsHint(a){if(!a||!a['requiresConfirmation'])return null;const b=a['ambiguities']['length']>0x0;if(b)return'SKILLS\x20HINT:\x20This\x20money\x20transaction\x20uses\x20a\x20token\x20symbol\x20shared\x20by\x20multiple\x20'+'on-chain\x20issuers.\x20The\x20confirmation\x20message\x20lists\x20ALL\x20candidates\x20with\x20full\x20'+'details\x20and\x20marks\x20the\x20token\x20pinned\x20by\x20this\x20operation.\x20Present\x20the\x20list\x20to\x20'+'the\x20user,\x20verify\x20the\x20pinned\x20issuer\x20is\x20the\x20intended\x20one,\x20and\x20proceed\x20only\x20'+'after\x20explicit\x20consent\x20(env.confirmed=true).\x20If\x20the\x20pinned\x20token\x20is\x20wrong,\x20'+'do\x20NOT\x20proceed\x20—\x20the\x20user\x20must\x20re-issue\x20with\x20the\x20chosen\x20token\x27s\x20FULL\x20type\x20'+'string\x20in\x20type_parameter;\x20never\x20guess\x20an\x20issuer\x20from\x20the\x20bare\x20symbol.';return'SKILLS\x20HINT:\x20This\x20money\x20transaction\x20requires\x20user\x20confirmation.\x20'+'If\x20the\x20wowok-safety\x20skill\x20is\x20installed,\x20it\x20provides\x20R1-R10\x20confirmation\x20'+'dialogue\x20scripts.\x20Otherwise,\x20present\x20the\x20confirmation\x20message\x20to\x20the\x20user\x20'+'and\x20proceed\x20only\x20after\x20explicit\x20consent\x20(env.confirmed=true).';}export async function formatChainValue(a,b,c){let d;try{d=BigInt(a)['toString']();}catch{d=String(a);}const e=await resolveTokenByType(b,c);if(e&&typeof e['decimals']==='number'){let f=d;try{f=formatUnits(BigInt(d),e['decimals']);}catch{}const g=e['symbol']||'',h=g?f+'\x20'+g+'\x20(decimals:\x20'+e['decimals']+';\x201\x20'+g+'\x20=\x2010^'+e['decimals']+'\x20raw\x20units;\x20raw:\x20'+d+')':f+'\x20(decimals:\x20'+e['decimals']+';\x201\x20unit\x20=\x2010^'+e['decimals']+'\x20raw\x20units;\x20raw:\x20'+d+')';return{'raw':d,'display':f,'symbol':g||undefined,'decimals':e['decimals'],'token_type':b,'precision_known':!![],'text':h};}return{'raw':d,'display':d,'token_type':b,'precision_known':![],'text':d+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20token\x20precision\x20unavailable\x20for\x20'+b+';\x20'+'this\x20is\x20the\x20true\x20on-chain\x20RAW\x20value,\x20NOT\x20a\x20unit\x20value,\x20and\x20its\x20magnitude\x20cannot\x20be\x20'+'verified\x20(unit\x20=\x20raw\x20/\x2010^N\x20once\x20decimals\x20N\x20are\x20known).\x20'+precisionUnknownRawSuffix()+'\x20'+precisionUnknownGuidance(b,c)};}export function registryDisplayHint(a,b){if(!a)return undefined;const c=findInRegistryByType(a,b);if(!c)return undefined;return{'decimals':c['decimals'],'symbol':c['symbol']};}const RESOLUTION_CACHE=new Map(),OBJECT_TYPE_CACHE=new Map();function cacheNet(a){return a??'default';}function isCacheableObjectRef(a){return/^0x[0-9a-fA-F]{20,}$/['test'](a);}export function clearFundResolutionCaches(){RESOLUTION_CACHE['clear'](),OBJECT_TYPE_CACHE['clear']();}export function buildClaimLedgerEcho(a,b){if(typeof b!=='string'||b==='')return null;const c=a?.['data']??[],d=c['find'](e=>e?.['id']?.['txDigest']===b);if(!d)return null;return'CLAIM\x20LEDGER\x20ECHO\x20(F-MRD-62):\x20guard\x20'+d['guard']+'\x20paid\x20'+d['amount']+'\x20(raw\x20base\x20units)\x20'+('to\x20'+d['recipient']+'\x20—\x20pool\x20total\x20paid\x20'+d['total']+',\x20balance\x20left\x20'+d['balance_left']+'.\x20')+'Apply\x20the\x20coin\x27s\x20decimals\x20before\x20displaying.';}export function knownTokenSuggestions(a){const b=getRegistryForNetwork(a)['map'](c=>c['symbol']+'\x20('+c['type']+',\x20'+c['decimals']+'\x20decimals)');return b['length']>0x0?'Known\x20tokens\x20on\x20this\x20network:\x20'+b['join'](';\x20')+'.':'No\x20officially-known\x20tokens\x20on\x20this\x20network.';}function precisionUnknownGuidance(a,b){const c=b?'network\x20'+b:'the\x20currently\x20selected\x20network';return'To\x20recover:\x20(1)\x20provide\x20the\x20token\x27s\x20FULL\x20type\x20in\x20package::module::Name\x20form\x20'+'(e.g.\x200xFULLPACKAGEID::usdt::USDT\x20—\x20a\x20bare\x20symbol\x20such\x20as\x20\x22USDT\x22\x20cannot\x20be\x20resolved)\x20'+'in\x20type_parameter,\x20so\x20the\x20on-chain\x20coin\x20metadata\x20can\x20be\x20looked\x20up;\x20'+('(2)\x20verify\x20the\x20WOW\x20NETWORK\x20selection\x20is\x20correct\x20—\x20the\x20token\x20may\x20not\x20exist\x20on\x20'+c+';\x20')+'(3)\x20retry,\x20as\x20the\x20on-chain\x20metadata\x20lookup\x20may\x20have\x20failed\x20transiently.\x20'+knownTokenSuggestions(b);}function precisionUnknownRawSuffix(){return'Magnitude\x20cannot\x20be\x20verified\x20—\x20verify\x20the\x20token\x20type\x20and\x20WOW\x20network,\x20then\x20re-run.';}export function formatAmountText(a,b,c){let d;try{d=BigInt(a)['toString']();}catch{d=String(a);}if(b===undefined)return d+'\x20smallest\x20units\x20(token\x20precision\x20unknown)';let e=d;try{e=formatUnits(BigInt(d),b);}catch{}return c?e+'\x20'+c+'\x20(decimals:\x20'+b+';\x20raw:\x20'+d+')':e+'\x20(decimals:\x20'+b+';\x20raw:\x20'+d+')';}export async function convertTokenValue(a,b,c){const d=await resolveTokenByType(a,c),f=d?.['decimals'],g=d?.['symbol']||undefined,h={'token_type':a,'symbol':g,'decimals':f};if(b['raw']!==undefined){let j;try{j=BigInt(b['raw'])['toString']();}catch{return{...h,'precision_known':f!==undefined,'direction':'raw_to_unit','input':String(b['raw']),'output':'','error':'Invalid\x20raw\x20value:\x20\x22'+String(b['raw'])+'\x22\x20—\x20expected\x20a\x20non-negative\x20integer\x20(u64\x20smallest\x20units).','text':'Cannot\x20convert:\x20invalid\x20raw\x20value\x20\x22'+String(b['raw'])+'\x22.'};}if(f===undefined)return{...h,'precision_known':![],'direction':'raw_to_unit','input':j,'output':j,'text':j+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20token\x20precision\x20unavailable\x20for\x20'+a+';\x20'+'this\x20is\x20the\x20true\x20on-chain\x20RAW\x20value,\x20NOT\x20a\x20unit\x20value,\x20and\x20its\x20magnitude\x20cannot\x20'+'be\x20verified\x20(unit\x20=\x20raw\x20/\x2010^N\x20once\x20decimals\x20N\x20are\x20known).\x20'+precisionUnknownRawSuffix()};let k=j;try{k=formatUnits(BigInt(j),f);}catch{}return{...h,'precision_known':!![],'direction':'raw_to_unit','input':j,'output':k,'text':g?j+'\x20raw\x20=\x20'+k+'\x20'+g+'\x20(decimals:\x20'+f+';\x201\x20'+g+'\x20=\x2010^'+f+'\x20raw\x20units)':j+'\x20raw\x20=\x20'+k+'\x20(decimals:\x20'+f+';\x201\x20unit\x20=\x2010^'+f+'\x20raw\x20units)'};}const i=String(b['unit']??'')['trim']();if(f===undefined)return{...h,'precision_known':![],'direction':'unit_to_raw','input':i,'output':'','error':'MISSING\x20TOKEN\x20INFO:\x20cannot\x20convert\x20\x22'+i+'\x22\x20to\x20raw\x20units\x20for\x20token\x20type\x20'+a+'\x20—\x20'+'token\x20precision\x20(decimals)\x20is\x20unavailable.\x20Guessing\x20decimals\x20would\x20forge\x20a\x20wrong\x20on-chain\x20'+'value\x20and\x20risk\x20asset\x20loss,\x20so\x20the\x20conversion\x20is\x20REFUSED.\x20'+precisionUnknownGuidance(a,c),'text':'Cannot\x20convert\x20\x22'+i+'\x22\x20to\x20raw\x20units:\x20token\x20precision\x20unknown\x20for\x20'+a+'.'};try{const l=parseToUnits(i,f);return{...h,'precision_known':!![],'direction':'unit_to_raw','input':i,'output':l['toString'](),'text':g?i+'\x20'+g+'\x20=\x20'+l['toString']()+'\x20raw\x20smallest\x20units\x20(decimals:\x20'+f+';\x201\x20'+g+'\x20=\x2010^'+f+'\x20raw\x20units)':i+'\x20=\x20'+l['toString']()+'\x20raw\x20smallest\x20units\x20(decimals:\x20'+f+';\x201\x20unit\x20=\x2010^'+f+'\x20raw\x20units)'};}catch(m){const n=m instanceof Error?m['message']:String(m);return{...h,'precision_known':!![],'direction':'unit_to_raw','input':i,'output':'','error':n,'text':'Cannot\x20convert\x20\x22'+i+'\x22\x20to\x20raw\x20units:\x20'+n};}}export const TOKEN_GENERIC_OBJECT_TYPES=['Treasury','Allocation','Arbitration','Arb','Payment','Reward','Service'];export const extractGenericTokenType=extractGenericTypeArg;export function classifyFundWaterLevel(a,b){if(typeof a!=='number'||!Number['isFinite'](a))return undefined;if(a<=0x0)return'depleted';if(!(typeof b==='number'&&Number['isFinite'](b)&&b>0x0))return undefined;return a<b?'low_water':'healthy';}export function classifyFundWaterLevelUnits(a,b){if(typeof a!=='bigint')return undefined;if(a<=0x0n)return'depleted';if(typeof b!=='bigint'||b<=0x0n)return undefined;return a<b?'low_water':'healthy';}export function fundWaterReminder(a,b){switch(a){case'depleted':return'COMPENSATION\x20FUND\x20DEPLETED\x20(balance\x20'+b['balance']+'):\x20every\x20arbitration\x20compensation\x20claim\x20now\x20aborts\x20(E_COMPENSATION_NOT_MATCH,\x20abort\x2027)\x20and\x20every\x20SKU\x20whose\x203x\x20buy-time\x20coverage\x20the\x20empty\x20fund\x20cannot\x20back\x20is\x20unbuyable\x20(F-46).\x20MERCHANT\x20DECISION\x20—\x20top\x20up\x20via\x20service\x20compensation_fund_add,\x20or\x20accept\x20the\x20affected\x20SKUs\x20being\x20unbuyable/delisted.\x20No\x20gate\x20was\x20applied\x20and\x20nothing\x20was\x20blocked\x20(5R-07③:\x20the\x20reminder\x20is\x20advisory;\x20the\x20call\x20is\x20the\x20merchant\x27s).';case'low_water':return'COMPENSATION\x20FUND\x20LOW\x20WATER\x20(balance\x20'+b['balance']+'\x20<\x20threshold\x20'+b['threshold']+'):\x20a\x20single\x20large\x20award\x20could\x20drain\x20the\x20fund\x20below\x20a\x20flagship\x20SKU\x27s\x20buy-time\x20coverage\x20and\x20silently\x20make\x20it\x20unbuyable\x20(F-46).\x20Recommended:\x20top\x20up\x20via\x20service\x20compensation_fund_add.\x20No\x20gate\x20was\x20applied\x20and\x20nothing\x20was\x20blocked\x20(5R-07③:\x20the\x20reminder\x20is\x20advisory;\x20the\x20threshold\x20is\x20the\x20merchant\x27s).';default:return null;}}export async function resolveObjectTokenType(a,b){if(!a||typeof a!=='string')return undefined;const c=isCacheableObjectRef(a)&&b!==undefined,d=cacheNet(b)+'::'+a;if(c){const e=OBJECT_TYPE_CACHE['get'](d);if(e)return e;}try{const {query_object_token_type:f}=await import('@wowok/wowok'),[g]=await f({'objects':[a],'network':b});if(!g?.['object'])return undefined;const h={'tokenType':g['coin_type'],'objectType':g['object_type'],'typeRaw':g['type_raw']};if(c)OBJECT_TYPE_CACHE['set'](d,h);return h;}catch{return undefined;}}export async function resolveOperationObjectTokenType(a,b,c){if(!a)return undefined;if(a['object']&&typeof a['object']==='object'&&typeof a['object']['type_parameter']==='string')return a['object']['type_parameter'];if(b==='payment'&&typeof a['type_parameter']==='string')return a['type_parameter'];if(typeof a['object']==='string'&&a['object']['length']>0x0){const d=await resolveObjectTokenType(a['object'],c);return d?.['tokenType'];}return undefined;}const RECEIVE_TOKEN_FIELDS={'treasury':['receive'],'allocation':['received_coins'],'reward':['receive'],'service':['compensation_fund_receive'],'arbitration':['receive']},COIN_PARAM_FIELDS={'treasury':['deposit.coin'],'allocation':['coin'],'reward':['coin_add'],'arbitration':['dispute.fee'],'service':['compensation_fund_add','order_new.buy.total_pay']};export async function validateOperationTokenMatch(a,b,c,d){const e={'errors':[],'warnings':[],'objectTokenType':c};if(!a||!c)return e;const f=typeof a['object']==='string'?a['object']:'the\x20target\x20object',g=(h,i)=>'TOKEN\x20TYPE\x20MISMATCH\x20('+i+'):\x20'+f+'\x20only\x20accepts\x20'+c+'\x20'+('(its\x20generic\x20token\x20type\x20is\x20fixed\x20and\x20immutable),\x20but\x20'+h+'\x20was\x20provided.\x20')+('Use\x20'+c+'\x20for\x20this\x20operation,\x20or\x20target\x20a\x20different\x20object.');for(const h of RECEIVE_TOKEN_FIELDS[b]??[]){const i=a[h];i&&typeof i==='object'&&typeof i['token_type']==='string'&&i['token_type']!==c&&e['errors']['push'](g(i['token_type'],'field\x20\x27'+h+'.token_type\x27'));}for(const j of COIN_PARAM_FIELDS[b]??[]){const k=getNestedValue(a,j);if(k&&typeof k==='object'&&typeof k['coin']==='string'){const l=k['coin'],m=await resolveObjectTokenType(l,d);if(m?.['tokenType'])m['tokenType']!==c&&e['errors']['push'](g(m['tokenType'],'coin\x20\x27'+l+'\x27\x20at\x20\x27'+j+'\x27'));else m===undefined&&e['warnings']['push']('Could\x20not\x20resolve\x20coin\x20object\x20\x27'+l+'\x27\x20('+j+')\x20to\x20verify\x20its\x20token\x20type\x20'+('matches\x20'+c+'.\x20The\x20on-chain\x20type\x20check\x20will\x20reject\x20a\x20mismatch\x20at\x20execution.'));}}return e;}const OBJECT_MONEY_FIELDS={'Treasury':['balance','inflow','outflow'],'Allocation':['balance'],'Arbitration':['fee','balance'],'Reward':['balance'],'Service':['compensation_fund'],'Payment':['amount'],'Arb':['fee']};export async function annotateObjectMonetaryFields(a,b){if(!a||typeof a!=='object'||typeof a['type']!=='string')return;let c=extractGenericTokenType(a['type_raw']);const d={},e=async(h,j,k)=>{if(j===null||j===undefined)return;if(typeof j!=='string'&&typeof j!=='number'&&typeof j!=='bigint')return;d[h]=k?await formatChainValue(j,k,b):{'raw':String(j),'display':String(j),'token_type':'','precision_known':![],'text':String(j)+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20token\x20type\x20could\x20not\x20be\x20determined\x20'+'for\x20this\x20field;\x20this\x20is\x20the\x20true\x20raw\x20value,\x20not\x20a\x20unit\x20value.\x20'+precisionUnknownRawSuffix()};};if(!c&&(a['type']==='Order'||a['type']==='Discount')&&typeof a['service']==='string')try{const h=await resolveObjectTokenType(a['service'],b);c=h?.['tokenType'];}catch{}const f=0x0,g=async(k,l,m)=>{await e(m+'threshold',k,c);if(!Array['isArray'](l))return;for(let n=0x0;n<l['length'];n++){const o=l[n];await e(m+'allocators['+n+'].fix',o?.['fix'],c);o?.['max']!==null&&o?.['max']!==undefined&&await e(m+'allocators['+n+'].max',o['max'],c);if(Array['isArray'](o?.['sharing']))for(let p=0x0;p<o['sharing']['length'];p++){o['sharing'][p]?.['mode']===f&&await e(m+'allocators['+n+'].sharing['+p+'].sharing',o['sharing'][p]['sharing'],c);}}};for(const j of OBJECT_MONEY_FIELDS[a['type']]??[]){await e(j,a[j],c);}switch(a['type']){case'Service':if(Array['isArray'](a['sales']))for(let k=0x0;k<a['sales']['length'];k++){await e('sales['+k+'].price',a['sales'][k]?.['price'],c);}await g(a['order_allocators']?.['threshold'],a['order_allocators']?.['allocators'],'order_allocators.');break;case'Allocation':await g(a['threshold'],a['allocators'],'');break;case'Order':await e('amount',a['amount'],c);if(Array['isArray'](a['items']))for(let l=0x0;l<a['items']['length'];l++){await e('items['+l+'].price',a['items'][l]?.['price'],c);}break;case'Payment':if(Array['isArray'](a['record']))for(let m=0x0;m<a['record']['length'];m++){await e('record['+m+'].amount',a['record'][m]?.['amount'],c);}break;case'Reward':if(Array['isArray'](a['guards']))for(let n=0x0;n<a['guards']['length'];n++){const o=a['guards'][n]?.['amount'];o&&typeof o==='object'&&o['type']===0x1&&await e('guards['+n+'].amount.value',o['value'],c);}break;case'Arb':await e('indemnity.amount',a['indemnity']?.['amount'],c);break;case'Discount':await e('benchmark',a['benchmark'],c);a['discount_type']===0x1&&await e('off',a['off'],c);break;}Object['keys'](d)['length']>0x0&&(a['_money_display']=d);}const TABLE_ITEM_MONEY_FIELDS={'TableItem_TreasuryHistory':['amount'],'TableItem_RewardRecord':['total']};export async function resolveParentObjectTokenType(a,b){const c=await resolveObjectTokenType(a,b);if(!c)return undefined;if(c['objectType']&&TOKEN_GENERIC_OBJECT_TYPES['includes'](c['objectType']))return c['tokenType'];return undefined;}export async function annotateTableItemMonetaryFields(a,b,c){if(!a||typeof a!=='object'||typeof a['type']!=='string')return;const d={},e=async(f,g)=>{if(g===null||g===undefined)return;if(typeof g!=='string'&&typeof g!=='number'&&typeof g!=='bigint')return;d[f]=b?await formatChainValue(g,b,c):{'raw':String(g),'display':String(g),'token_type':'','precision_known':![],'text':String(g)+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20parent\x20object\x20token\x20type\x20could\x20not\x20'+'be\x20resolved;\x20this\x20is\x20the\x20true\x20raw\x20value,\x20not\x20a\x20unit\x20value.\x20'+precisionUnknownRawSuffix()};};for(const f of TABLE_ITEM_MONEY_FIELDS[a['type']]??[]){await e(f,a[f]);}if(a['type']==='TableItem_RewardRecord'&&Array['isArray'](a['record']))for(let g=0x0;g<a['record']['length'];g++){await e('record['+g+'].amount',a['record'][g]?.['amount']);}Object['keys'](d)['length']>0x0&&(a['_money_display']=d);}const MONEY_EVENTS={'TreasuryEvent':{'tokenSource':'object','fields':['amount']},'RewardClaimEvent':{'tokenSource':'object','fields':['amount','total','balance_left']},'RewardFundEvent':{'tokenSource':'object','fields':['amount','balance']},'RewardWithdrawEvent':{'tokenSource':'object','fields':['amount','balance_left']},'AllocationEvent':{'tokenSource':'object','fields':['amount']},'NewPaymentEvent':{'tokenSource':'object','fields':['amount'],'arrayFields':[['record','amount']]},'NewOrderEvent':{'tokenSource':'service','fields':['amount']},'ArbEvent':{'tokenSource':'object','fields':[],'optionFields':['indemnity_amount']}};export async function annotateEventMonetaryFields(a,b){if(!a||typeof a!=='object'||typeof a['type']!=='string')return;const c=a['type']['includes']('::')?a['type']['split']('::')['pop']():a['type'],d=c?MONEY_EVENTS[c]:undefined;if(!d)return;const e=a['parsedJson_raw']??{},g=m=>a[m]??e[m];let h;const j=g(d['tokenSource']);if(typeof j==='string'&&j)try{h=(await resolveObjectTokenType(j,b))?.['tokenType'];}catch{}const k={},l=async(m,n)=>{if(n===null||n===undefined)return;if(typeof n!=='string'&&typeof n!=='number'&&typeof n!=='bigint')return;k[m]=h?await formatChainValue(n,h,b):{'raw':String(n),'display':String(n),'token_type':'','precision_known':![],'text':String(n)+'\x20raw\x20smallest\x20units\x20—\x20RISK:\x20owning\x20object\x20token\x20type\x20could\x20not\x20'+'be\x20resolved;\x20this\x20is\x20the\x20true\x20raw\x20value,\x20not\x20a\x20unit\x20value.\x20'+precisionUnknownRawSuffix()};};for(const m of d['fields']){await l(m,g(m));}for(const n of d['optionFields']??[]){const o=g(n);o!==null&&o!==undefined&&await l(n,o);}for(const [p,q]of d['arrayFields']??[]){const r=g(p);if(Array['isArray'](r))for(let s=0x0;s<r['length'];s++){await l(p+'['+s+'].'+q,r[s]?.[q]);}}Object['keys'](k)['length']>0x0&&(a['_money_display']=k);}export async function annotateEventsMonetaryFields(a,b){if(!Array['isArray'](a))return;for(const c of a){try{await annotateEventMonetaryFields(c,b);}catch{}}}export async function annotateBalanceChanges(a,b){if(!Array['isArray'](a))return;for(const c of a){try{const d=c?.['coin_type'],e=c?.['amount'];if(typeof d!=='string'||!d)continue;if(typeof e!=='string'&&typeof e!=='number'&&typeof e!=='bigint')continue;c['_money_display']={'amount':await formatChainValue(e,d,b)};}catch{}}}export async function prepareFundOperation(a,b,c){const d=await resolveOperationObjectTokenType(a,b,c),e=await validateOperationTokenMatch(a,b,d,c),f=await processFundOperation(a,b,c,{'objectTokenType':d});return{...f,'warnings':[...e['warnings'],...f['warnings']],'matchErrors':e['errors'],'blockingErrors':[...e['errors'],...f['errors']],'objectTokenType':d};}