@wowok/agent-mcp 3.1.2 → 3.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/config-audit.spec.d.ts +1 -0
- package/dist/config/config-audit.spec.js +1 -0
- package/dist/config/exposure.d.ts +108 -0
- package/dist/config/exposure.js +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +1 -1
- package/dist/config/judgment.d.ts +1228 -0
- package/dist/config/judgment.js +1 -0
- package/dist/config/judgment.spec.d.ts +1 -0
- package/dist/config/judgment.spec.js +1 -0
- package/dist/config/rule-engine.d.ts +299 -0
- package/dist/config/rule-engine.js +1 -0
- package/dist/config/rule-engine.spec.d.ts +1 -0
- package/dist/config/rule-engine.spec.js +1 -0
- package/dist/config/runtime.js +1 -1
- package/dist/config/severity.d.ts +7 -0
- package/dist/config/severity.js +1 -0
- package/dist/customer/index.d.ts +3 -9
- package/dist/customer/index.js +1 -1
- package/dist/customer/industry-risks.d.ts +3 -17
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/order-monitor.d.ts +3 -1
- package/dist/customer/order-monitor.js +1 -1
- package/dist/customer/types.d.ts +1 -165
- package/dist/customer/types.js +1 -1
- package/dist/customer/user-preferences.d.ts +0 -49
- package/dist/customer/user-preferences.js +1 -1
- package/dist/evaluation/acceptance.d.ts +1 -0
- package/dist/evaluation/acceptance.js +1 -1
- package/dist/evaluation/arbitration-game.js +1 -1
- package/dist/evaluation/architecture.spec.d.ts +1 -0
- package/dist/evaluation/architecture.spec.js +1 -0
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.d.ts +16 -0
- package/dist/evaluation/builtins/graph-service.js +1 -0
- package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
- package/dist/evaluation/builtins/graph-service.spec.js +1 -0
- package/dist/evaluation/builtins/index.d.ts +1 -1
- package/dist/evaluation/builtins/index.js +1 -1
- package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
- package/dist/evaluation/builtins/purity.spec.js +1 -0
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/facets/catalog.d.ts +19 -0
- package/dist/evaluation/facets/catalog.js +1 -0
- package/dist/evaluation/game-strategy.d.ts +2 -2
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/guard-scan.d.ts +10 -0
- package/dist/evaluation/guard-scan.js +1 -0
- package/dist/evaluation/match-operation.d.ts +2 -2
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/standards.d.ts +9 -0
- package/dist/evaluation/standards.js +1 -0
- package/dist/evaluation/standards.spec.d.ts +1 -0
- package/dist/evaluation/standards.spec.js +1 -0
- package/dist/evaluation/types.d.ts +11 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/custom-registry-file.js +1 -1
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-audit.spec.d.ts +1 -0
- package/dist/extensions/industry-audit.spec.js +1 -0
- package/dist/extensions/industry-layers.d.ts +14 -5
- package/dist/extensions/industry-layers.js +1 -1
- package/dist/extensions/industry-pack.d.ts +2 -0
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/mode-evaluator.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/analyze.d.ts +16 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/analyze.spec.js +1 -1
- package/dist/graph/onchain/dataplane.d.ts +1 -1
- package/dist/graph/onchain/dataplane.js +1 -1
- package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
- package/dist/graph/onchain/edge-batch.spec.js +1 -0
- package/dist/graph/onchain/edge-schema.d.ts +11 -2
- package/dist/graph/onchain/edge-schema.js +1 -1
- package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
- package/dist/graph/onchain/entity-profile.spec.js +1 -0
- package/dist/graph/onchain/event-history.spec.d.ts +1 -0
- package/dist/graph/onchain/event-history.spec.js +1 -0
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exploration.d.ts +28 -0
- package/dist/graph/onchain/exploration.js +1 -0
- package/dist/graph/onchain/exploration.spec.d.ts +1 -0
- package/dist/graph/onchain/exploration.spec.js +1 -0
- package/dist/graph/onchain/exposure.d.ts +18 -0
- package/dist/graph/onchain/exposure.js +1 -0
- package/dist/graph/onchain/exposure.spec.d.ts +1 -0
- package/dist/graph/onchain/exposure.spec.js +1 -0
- package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
- package/dist/graph/onchain/extract-deep.spec.js +1 -0
- package/dist/graph/onchain/extract.d.ts +11 -3
- package/dist/graph/onchain/extract.js +1 -1
- package/dist/graph/onchain/facet-projection.d.ts +99 -0
- package/dist/graph/onchain/facet-projection.js +1 -0
- package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
- package/dist/graph/onchain/facet-projection.spec.js +1 -0
- package/dist/graph/onchain/facts.d.ts +103 -0
- package/dist/graph/onchain/facts.js +1 -0
- package/dist/graph/onchain/facts.spec.d.ts +1 -0
- package/dist/graph/onchain/facts.spec.js +1 -0
- package/dist/graph/onchain/field-manifest.d.ts +29 -0
- package/dist/graph/onchain/field-manifest.js +1 -0
- package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
- package/dist/graph/onchain/field-manifest.spec.js +1 -0
- package/dist/graph/onchain/fixtures.d.ts +80 -0
- package/dist/graph/onchain/fixtures.js +1 -0
- package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
- package/dist/graph/onchain/fixtures.spec.js +1 -0
- package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
- package/dist/graph/onchain/graph-policy.spec.js +1 -0
- package/dist/graph/onchain/index.d.ts +14 -2
- package/dist/graph/onchain/index.js +1 -1
- package/dist/graph/onchain/interest.js +1 -1
- package/dist/graph/onchain/interest.spec.js +1 -1
- package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
- package/dist/graph/onchain/label-lint.spec.js +1 -0
- package/dist/graph/onchain/names.d.ts +23 -0
- package/dist/graph/onchain/names.js +1 -0
- package/dist/graph/onchain/names.spec.d.ts +1 -0
- package/dist/graph/onchain/names.spec.js +1 -0
- package/dist/graph/onchain/onchain.spec.js +1 -1
- package/dist/graph/onchain/policy.d.ts +8 -0
- package/dist/graph/onchain/policy.js +1 -0
- package/dist/graph/onchain/proposal-graph.d.ts +11 -0
- package/dist/graph/onchain/proposal-graph.js +1 -0
- package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
- package/dist/graph/onchain/proposal-graph.spec.js +1 -0
- package/dist/graph/onchain/sdk-batch.d.ts +5 -1
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/graph/onchain/strategy.d.ts +16 -0
- package/dist/graph/onchain/strategy.js +1 -1
- package/dist/graph/onchain/strategy.spec.js +1 -1
- package/dist/graph/onchain/synthesis.d.ts +20 -0
- package/dist/graph/onchain/synthesis.js +1 -0
- package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
- package/dist/graph/onchain/synthesis.spec.js +1 -0
- package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
- package/dist/graph/onchain/table-ledger.spec.js +1 -0
- package/dist/graph/onchain/types.d.ts +57 -7
- package/dist/graph/onchain/viewport.d.ts +1 -0
- package/dist/graph/onchain/viewport.js +1 -1
- package/dist/harness/index.d.ts +1 -5
- package/dist/harness/index.js +1 -1
- package/dist/harness/verify.d.ts +6 -1
- package/dist/harness/verify.js +1 -1
- package/dist/index.js +1 -1
- package/dist/keeper/keeper.spec.js +1 -1
- package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
- package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.d.ts +1 -1
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +4 -3
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocation-templates.js +1 -1
- package/dist/knowledge/arb-risk.d.ts +6 -6
- package/dist/knowledge/arb-risk.js +1 -1
- package/dist/knowledge/arbitration-ledger.d.ts +4 -4
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
- package/dist/knowledge/arbitration-puzzle.js +1 -1
- package/dist/knowledge/arbitration-risk.d.ts +4 -3
- package/dist/knowledge/arbitration-risk.js +1 -1
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
- package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
- package/dist/knowledge/baselines/judgment-baselines.json +289 -0
- package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
- package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
- package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
- package/dist/knowledge/baselines/risk-cases.js +1 -0
- package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
- package/dist/knowledge/baselines/rules/allocation.json +492 -0
- package/dist/knowledge/baselines/rules/arb.json +155 -0
- package/dist/knowledge/baselines/rules/arbitration.json +366 -0
- package/dist/knowledge/baselines/rules/bridge.json +197 -0
- package/dist/knowledge/baselines/rules/contact.json +152 -0
- package/dist/knowledge/baselines/rules/demand.json +158 -0
- package/dist/knowledge/baselines/rules/graph.json +453 -0
- package/dist/knowledge/baselines/rules/guard.json +981 -0
- package/dist/knowledge/baselines/rules/machine.json +706 -0
- package/dist/knowledge/baselines/rules/order.json +549 -0
- package/dist/knowledge/baselines/rules/payment.json +205 -0
- package/dist/knowledge/baselines/rules/permission.json +330 -0
- package/dist/knowledge/baselines/rules/personal.json +139 -0
- package/dist/knowledge/baselines/rules/progress.json +346 -0
- package/dist/knowledge/baselines/rules/proof.json +158 -0
- package/dist/knowledge/baselines/rules/registrar.json +159 -0
- package/dist/knowledge/baselines/rules/repository.json +244 -0
- package/dist/knowledge/baselines/rules/resource.json +117 -0
- package/dist/knowledge/baselines/rules/reward.json +471 -0
- package/dist/knowledge/baselines/rules/service.json +595 -0
- package/dist/knowledge/baselines/rules/treasury.json +440 -0
- package/dist/knowledge/baselines/rules/util.json +101 -0
- package/dist/knowledge/bridge-risk.d.ts +6 -6
- package/dist/knowledge/bridge-risk.js +1 -1
- package/dist/knowledge/builtin-templates.d.ts +26 -0
- package/dist/knowledge/builtin-templates.js +1 -0
- package/dist/knowledge/contact-risk.d.ts +6 -6
- package/dist/knowledge/contact-risk.js +1 -1
- package/dist/knowledge/contract-invariants.d.ts +1 -0
- package/dist/knowledge/contract-invariants.js +1 -1
- package/dist/knowledge/demand-risk.d.ts +6 -6
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/facts-sync.spec.d.ts +1 -0
- package/dist/knowledge/facts-sync.spec.js +1 -0
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-eval.d.ts +15 -0
- package/dist/knowledge/guard-eval.js +1 -0
- package/dist/knowledge/guard-eval.spec.d.ts +1 -0
- package/dist/knowledge/guard-eval.spec.js +1 -0
- package/dist/knowledge/guard-field-cognition.d.ts +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-ledger.js +1 -1
- package/dist/knowledge/guard-lint.d.ts +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-risk.d.ts +7 -19
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +51 -45
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-rule-node.d.ts +7 -0
- package/dist/knowledge/industry-rule-node.js +1 -0
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-ledger.js +1 -1
- package/dist/knowledge/machine-risk.d.ts +4 -7
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-templates.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/operation-dictionary.js +1 -1
- package/dist/knowledge/order-ledger.js +1 -1
- package/dist/knowledge/order-puzzle.d.ts +3 -3
- package/dist/knowledge/order-puzzle.js +1 -1
- package/dist/knowledge/order-risk.d.ts +7 -12
- package/dist/knowledge/order-risk.js +1 -1
- package/dist/knowledge/order-templates.js +1 -1
- package/dist/knowledge/passport-ledger.js +1 -1
- package/dist/knowledge/passport-templates.js +1 -1
- package/dist/knowledge/payment-risk.d.ts +8 -7
- package/dist/knowledge/payment-risk.js +1 -1
- package/dist/knowledge/payment-tracker.js +1 -1
- package/dist/knowledge/permission-ledger.js +1 -1
- package/dist/knowledge/permission-puzzle.d.ts +12 -12
- package/dist/knowledge/permission-puzzle.js +1 -1
- package/dist/knowledge/permission-risk.d.ts +4 -10
- package/dist/knowledge/permission-risk.js +1 -1
- package/dist/knowledge/permission-templates.js +1 -1
- package/dist/knowledge/personal-risk.d.ts +6 -6
- package/dist/knowledge/personal-risk.js +1 -1
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/progress-puzzle.d.ts +2 -2
- package/dist/knowledge/progress-puzzle.js +1 -1
- package/dist/knowledge/progress-risk.d.ts +4 -3
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/progress-templates.js +1 -1
- package/dist/knowledge/proof-risk.d.ts +6 -6
- package/dist/knowledge/proof-risk.js +1 -1
- package/dist/knowledge/puzzle-projections.d.ts +11 -0
- package/dist/knowledge/puzzle-projections.js +1 -0
- package/dist/knowledge/recipient-constraint.d.ts +20 -1
- package/dist/knowledge/recipient-constraint.js +1 -1
- package/dist/knowledge/registrar-risk.d.ts +6 -6
- package/dist/knowledge/registrar-risk.js +1 -1
- package/dist/knowledge/repository-risk.d.ts +7 -7
- package/dist/knowledge/repository-risk.js +1 -1
- package/dist/knowledge/resource-risk.d.ts +6 -6
- package/dist/knowledge/resource-risk.js +1 -1
- package/dist/knowledge/reward-ledger.d.ts +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-puzzle.d.ts +2 -2
- package/dist/knowledge/reward-puzzle.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +5 -6
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
- package/dist/knowledge/rule-node-analyzers.js +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
- package/dist/knowledge/rule-outcome.d.ts +5 -0
- package/dist/knowledge/rule-outcome.js +1 -0
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +2 -2
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/service-allocator-audit-node.js +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/service-puzzle.d.ts +2 -2
- package/dist/knowledge/service-puzzle.js +1 -1
- package/dist/knowledge/service-risk-node.js +1 -1
- package/dist/knowledge/service-risk.d.ts +4 -4
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/service-templates.js +1 -1
- package/dist/knowledge/strategy-manuals.d.ts +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-loader.d.ts +84 -0
- package/dist/knowledge/template-loader.js +1 -0
- package/dist/knowledge/template-loader.spec.d.ts +1 -0
- package/dist/knowledge/template-loader.spec.js +1 -0
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +17 -0
- package/dist/knowledge/template-scanner.js +1 -0
- package/dist/knowledge/template-scanner.spec.d.ts +1 -0
- package/dist/knowledge/template-scanner.spec.js +1 -0
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/treasury-ledger.d.ts +1 -1
- package/dist/knowledge/treasury-ledger.js +1 -1
- package/dist/knowledge/treasury-puzzle.d.ts +3 -3
- package/dist/knowledge/treasury-puzzle.js +1 -1
- package/dist/knowledge/treasury-risk.d.ts +6 -4
- package/dist/knowledge/treasury-risk.js +1 -1
- package/dist/knowledge/treasury-templates.js +1 -1
- package/dist/knowledge/util-risk.d.ts +6 -6
- package/dist/knowledge/util-risk.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +4 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/arbitrator-interest.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/persona/analyzer.js +1 -1
- package/dist/persona/bridge.js +1 -1
- package/dist/persona/facet-profile.d.ts +33 -0
- package/dist/persona/facet-profile.js +1 -0
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.d.ts +2 -1
- package/dist/persona/model.js +1 -1
- package/dist/persona/persona-audit.spec.d.ts +1 -0
- package/dist/persona/persona-audit.spec.js +1 -0
- package/dist/persona/topology-focus.d.ts +2 -2
- package/dist/persona/topology-focus.js +1 -1
- package/dist/persona/types.d.ts +14 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/facet-money.d.ts +33 -0
- package/dist/playbooks/service-build/facet-money.js +1 -0
- package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
- package/dist/playbooks/service-build/facet-money.spec.js +1 -0
- package/dist/playbooks/service-build/machine-panorama.d.ts +20 -0
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
- package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
- package/dist/playbooks/service-build/migration-planner.js +1 -0
- package/dist/playbooks/service-build/object-panorama.d.ts +65 -24
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/pipeline-actions.d.ts +3 -3
- package/dist/playbooks/service-build/pipeline-actions.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
- package/dist/playbooks/service-build/reverse-mapping.js +1 -1
- package/dist/playbooks/service-build/risk-aggregator.d.ts +4 -2
- package/dist/playbooks/service-build/risk-aggregator.js +1 -1
- package/dist/playbooks/service-build/semantic-graph.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +56 -9
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
- package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
- package/dist/playbooks/service-build/topology-query.d.ts +13 -2
- package/dist/playbooks/service-build/topology-query.js +1 -1
- package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
- package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
- package/dist/relationship/registry.js +1 -1
- package/dist/review/arb.d.ts +0 -2
- package/dist/review/arb.js +1 -1
- package/dist/review/machine.js +1 -1
- package/dist/review/order.d.ts +0 -1
- package/dist/review/order.js +1 -1
- package/dist/review/service.js +1 -1
- package/dist/review/types.d.ts +7 -0
- package/dist/role/profiles.js +1 -1
- package/dist/rules.d.ts +1 -2
- package/dist/rules.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +207 -0
- package/dist/schema/benchmark-migration/index.js +1 -0
- package/dist/schema/call/allocation.d.ts +1 -1
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.d.ts +1 -1
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +3374 -670
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/contact.d.ts +1 -1
- package/dist/schema/call/demand.d.ts +1 -1
- package/dist/schema/call/guard.d.ts +3 -3
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +5 -5
- package/dist/schema/call/order.d.ts +3 -3
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/permission-handler.d.ts +1 -1
- package/dist/schema/call/permission-handler.js +1 -1
- package/dist/schema/call/permission.d.ts +16 -16
- package/dist/schema/call/permission.js +1 -1
- package/dist/schema/call/personal.d.ts +8 -8
- package/dist/schema/call/personal.js +1 -1
- package/dist/schema/call/progress.d.ts +3 -3
- package/dist/schema/call/receipt.d.ts +28 -0
- package/dist/schema/call/receipt.js +1 -0
- package/dist/schema/call/repository.d.ts +11 -11
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.d.ts +1 -1
- package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
- package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
- package/dist/schema/call/semantic.d.ts +5 -2
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +7 -7
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +1 -1
- package/dist/schema/call/treasury.js +1 -1
- package/dist/schema/common/index.d.ts +6 -6
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +50 -1
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +307 -213
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +6 -6
- package/dist/schema/goal/planning.d.ts +17 -17
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +1 -1
- package/dist/schema/interaction/index.d.ts +1 -1
- package/dist/schema/keeper/index.d.ts +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +26 -26
- package/dist/schema/operations.d.ts +59 -43
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +4732 -24
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +830 -10
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +44 -44
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.d.ts +1 -1
- package/dist/schema/workspace/index.d.ts +2 -2
- package/dist/schema-query-impl/index.d.ts +9 -0
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +1 -1
- package/dist/schemas/benchmark_migration_operation.output.json +793 -0
- package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
- package/dist/schemas/bridge_operation.output.json +1 -1
- package/dist/schemas/bridge_operation.schema.json +5 -5
- package/dist/schemas/config_operation.output.json +252 -0
- package/dist/schemas/config_operation.schema.json +21 -1
- package/dist/schemas/evaluation_operation.output.json +702 -162
- package/dist/schemas/evaluation_operation.schema.json +0 -429
- package/dist/schemas/goal_operation.schema.json +8 -8
- package/dist/schemas/guard2file.schema.json +1 -1
- package/dist/schemas/index.json +7 -7
- package/dist/schemas/keeper_operation.output.json +1 -1
- package/dist/schemas/local_history_operation.output.json +1 -1
- package/dist/schemas/local_info_operation.output.json +1 -1
- package/dist/schemas/local_mark_operation.output.json +1 -1
- package/dist/schemas/machineNode2file.schema.json +1 -1
- package/dist/schemas/messenger_operation.output.json +1 -1
- package/dist/schemas/messenger_operation.schema.json +24 -12
- package/dist/schemas/monitor_events.output.json +1 -1
- package/dist/schemas/monitor_subscription.output.json +1 -1
- package/dist/schemas/onchain_events.output.json +2 -2
- package/dist/schemas/onchain_operations.output.json +6359 -3724
- package/dist/schemas/onchain_operations.schema.json +191 -141
- package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
- package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
- package/dist/schemas/onchain_operations_contact.schema.json +7 -5
- package/dist/schemas/onchain_operations_demand.schema.json +7 -5
- package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
- package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_guard.schema.json +5 -3
- package/dist/schemas/onchain_operations_machine.schema.json +22 -18
- package/dist/schemas/onchain_operations_order.schema.json +11 -7
- package/dist/schemas/onchain_operations_payment.schema.json +3 -3
- package/dist/schemas/onchain_operations_permission.schema.json +19 -11
- package/dist/schemas/onchain_operations_personal.schema.json +16 -10
- package/dist/schemas/onchain_operations_progress.schema.json +11 -7
- package/dist/schemas/onchain_operations_proof.schema.json +5 -3
- package/dist/schemas/onchain_operations_repository.schema.json +12 -8
- package/dist/schemas/onchain_operations_reward.schema.json +11 -9
- package/dist/schemas/onchain_operations_service.schema.json +28 -22
- package/dist/schemas/onchain_operations_treasury.schema.json +13 -11
- package/dist/schemas/onchain_table_data.output.json +88 -88
- package/dist/schemas/persona_operation.output.json +15875 -1
- package/dist/schemas/persona_operation.schema.json +3056 -478
- package/dist/schemas/query_toolkit.output.json +1325 -212
- package/dist/schemas/query_toolkit.schema.json +60 -2
- package/dist/schemas/workflow_operation.schema.json +4 -2
- package/dist/strategy/metrics.js +1 -1
- package/dist/strategy/scorecard.js +1 -1
- package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
- package/dist/tools/handlers/benchmark-migration.js +1 -0
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
- package/dist/tools/handlers/dispatch-expectations.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.d.ts +3 -0
- package/dist/tools/move-fn-index.gen.js +1 -0
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/config.js +1 -1
- package/dist/tools/registry/evaluation.d.ts +2 -0
- package/dist/tools/registry/evaluation.js +1 -0
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/sanitize-output.d.ts +3 -0
- package/dist/tools/sanitize-output.js +1 -0
- package/dist/tools/sanitize-output.spec.d.ts +1 -0
- package/dist/tools/sanitize-output.spec.js +1 -0
- package/dist/tools/shared.d.ts +0 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +9 -3
- package/dist/customer/customer-advice.d.ts +0 -32
- package/dist/customer/customer-advice.js +0 -1
- package/dist/customer/info-puzzle.d.ts +0 -146
- package/dist/customer/info-puzzle.js +0 -1
- package/dist/customer/order-strategy.d.ts +0 -17
- package/dist/customer/order-strategy.js +0 -1
- package/dist/customer/preorder-compare.d.ts +0 -24
- package/dist/customer/preorder-compare.js +0 -1
- package/dist/customer/reminder-system.d.ts +0 -42
- package/dist/customer/reminder-system.js +0 -1
- package/dist/customer/risk-assessment.d.ts +0 -13
- package/dist/customer/risk-assessment.js +0 -1
- package/dist/evaluation/builtins/service-risk.d.ts +0 -7
- package/dist/evaluation/builtins/service-risk.js +0 -1
- package/dist/knowledge/trust-metrics.d.ts +0 -66
- package/dist/knowledge/trust-metrics.js +0 -1
- package/dist/schema/trust/index.d.ts +0 -334
- package/dist/schema/trust/index.js +0 -1
- package/dist/schemas/trust_score.output.json +0 -847
- package/dist/schemas/trust_score.schema.json +0 -364
- package/dist/tools/handlers/trust.d.ts +0 -16
- package/dist/tools/handlers/trust.js +0 -1
- package/dist/tools/registry/trust.d.ts +0 -2
- package/dist/tools/registry/trust.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>\x20(asserted\x20by\x20reward::new\x20/\x20new_with_passport)','governed_operations':['reward::new','reward::new_with_passport'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description\x20(asserted\x20by\x20reward::description_set\x20/\x20_with_passport)','governed_operations':['reward::description_set','reward::description_set_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['reward::guard_add','reward::guard_add_with_passport','reward::guard_remove_expired','reward::guard_remove_expired_with_passport'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['reward::coin_add','reward::coin_add_with_passport'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check\x20(joins\x20Balance<T>)','governed_operations':['reward::receive','reward::receive_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['reward::guard_expiration_time_add','reward::guard_expiration_time_add_with_passport'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['reward::owner_receive','reward::owner_receive_with_passport','reward::owner_receive_object','reward::owner_receive_object_with_passport'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['reward::um_set','reward::um_set_with_passport','reward::um_none','reward::um_none_with_passport'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20in\x20new_imp\x20via\x20object::new(ctx).\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20description_set\x20(151).'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20never\x20via\x20direct\x20withdraw.','related_errors':['E_INSUFFICIENT_BALANCE']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20requires\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20um_set\x20creates\x20object-linker\x20core\x20binding;\x20um_none\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20via\x20permission_set\x20(asserts\x20old.owner\x20==\x20sender).\x20Creates\x20object_linker::affiliation_change_core.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'guard_u8_u8','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'guard_u8_u64','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'guard_entity_u8','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'guard_entity_u64','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'guard_signer_u8','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'guard_signer_u64','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard_expiration_time_add:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard_expiration_time_add'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard_expiration_time_add:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard_expiration_time_add'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'reward_guard\x20(constructor)'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u64\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_entity_u64\x20for\x20referrer\x20(recipient\x20=\x20referrer\x20address,\x20fixed\x20amount)','guard_signer_u64\x20for\x20referee\x20(caller\x20is\x20recipient,\x20fixed\x20amount)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u8\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove_expired)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_signer_u64\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','guard_expiration_time_add\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['guard_signer_u8\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_entity_u64\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address,\x20fixed\x20amount)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','guard_expiration_time_add\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'guard_u8_u8','GuardIdentifier|Fixed':'guard_u8_u64','Entity|GuardU64Identifier':'guard_entity_u8','Entity|Fixed':'guard_entity_u64','Signer|GuardU64Identifier':'guard_signer_u8','Signer|Fixed':'guard_signer_u64'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission_set:\x20asserts\x20old.owner\x20==\x20sender;\x20creates\x20object_linker::affiliation_change_core'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20object-linker\x20core\x20binding)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20passport::result_for_guard(passport,\x20guard_id)\x20verifies\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20passport::submission_get\x20extracts\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20Payment.unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>\x20and\x20joins\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner_receive\x20(156):\x20Payment.unwrap_with_check\x20forwards\x20CoinWrapper<K>\x20to\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'um_set\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20object-linker\x20core\x20binding'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
|
|
1
|
+
import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>','governed_operations':['create\x20a\x20new\x20Reward\x20pool'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description','governed_operations':['update\x20the\x20Reward\x20description'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['add\x20a\x20claim\x20guard\x20to\x20the\x20Reward','remove\x20expired\x20claim\x20guards'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['deposit\x20Coin<T>\x20into\x20the\x20Reward\x20balance'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20into\x20the\x20balance\x20(unwrapped\x20with\x20balance\x20check)','governed_operations':['receive\x20a\x20CoinWrapper<T>\x20payment\x20into\x20the\x20balance'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['set\x20or\x20cancel\x20the\x20time-lock\x20on\x20adding\x20new\x20guards'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['owner\x20receipt\x20of\x20payments\x20at\x20terminal\x20state\x20(unwrapped\x20to\x20the\x20owner)','owner\x20receipt\x20of\x20whole\x20objects\x20at\x20terminal\x20state'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['bind\x20a\x20Contact\x20as\x20the\x20UM\x20coordinator','unbind\x20the\x20UM\x20Contact'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20at\x20creation.\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20permission\x20151.'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20never\x20via\x20direct\x20withdraw.','related_errors':['E_INSUFFICIENT_BALANCE']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20requires\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20Binding\x20creates\x20an\x20object-linker\x20core\x20binding;\x20unbinding\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20owner-only\x20(asserts\x20old.owner\x20==\x20sender);\x20the\x20change\x20is\x20registered\x20as\x20an\x20object-linker\x20affiliation\x20change.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'dynamic_recipient_dynamic_amount','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['recipient\x20identifier\x20must\x20resolve\x20to\x20an\x20address\x20in\x20the\x20Passport\x20table\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'dynamic_recipient_fixed_amount','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['recipient\x20identifier\x20must\x20resolve\x20to\x20an\x20address\x20in\x20the\x20Passport\x20table\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'entity_recipient_dynamic_amount','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'entity_recipient_fixed_amount','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'caller_recipient_dynamic_amount','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'caller_recipient_fixed_amount','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard-lock\x20time\x20update:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard-lock\x20time\x20update\x20(155)'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'claim-guard\x20construction'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'claim-guard\x20construction'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard-lock\x20time\x20update:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard-lock\x20time\x20update\x20(155)'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'claim-guard\x20construction'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Signer\x20recipient\x20+\x20Fixed\x20amount\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Entity\x20recipient\x20+\x20Fixed\x20amount\x20for\x20the\x20referrer\x20(recipient\x20=\x20referrer\x20address)','Signer\x20recipient\x20+\x20Fixed\x20amount\x20for\x20the\x20referee\x20(caller\x20is\x20recipient)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Signer\x20recipient\x20+\x20identifier\x20amount\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove_expired)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['Signer\x20recipient\x20+\x20Fixed\x20amount\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','the\x20guard-addition\x20time-lock\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['Signer\x20recipient\x20+\x20identifier\x20amount\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['Entity\x20recipient\x20+\x20Fixed\x20amount\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','the\x20guard-addition\x20time-lock\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'dynamic_recipient_dynamic_amount','GuardIdentifier|Fixed':'dynamic_recipient_fixed_amount','Entity|GuardU64Identifier':'entity_recipient_dynamic_amount','Entity|Fixed':'entity_recipient_fixed_amount','Signer|GuardU64Identifier':'caller_recipient_dynamic_amount','Signer|Fixed':'caller_recipient_fixed_amount'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission\x20update:\x20owner-only\x20(asserts\x20old.owner\x20==\x20sender);\x20registered\x20as\x20an\x20object-linker\x20affiliation\x20change'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20object-linker\x20core\x20binding)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20the\x20guard\x20verification\x20result\x20validates\x20the\x20Passport\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20the\x20claimant\x27s\x20Passport\x20submission\x20supplies\x20the\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20unwraps\x20Coin<T>\x20from\x20CoinWrapper<T>\x20(with\x20check)\x20and\x20joins\x20the\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner\x20receipt\x20(156):\x20unwraps\x20CoinWrapper<K>\x20and\x20forwards\x20it\x20to\x20the\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'UM\x20binding\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20object-linker\x20core\x20binding'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MAX_GUARD_COUNT_REWARD, MAX_RECORD_COUNT_REWARD } from "./onchain-constants.js";
|
|
2
2
|
import { resolveGuardConstructor, getGuardConstructorSpec, type RewardBuiltinPermissionEntry, type RewardGuardConstructor, type RewardRecipientType, type RewardAmountType } from "./reward-ledger.js";
|
|
3
3
|
export interface RewardIntentPuzzle {
|
|
4
|
-
action: "create" | "claim" | "guard_add" | "guard_remove_expired" | "
|
|
4
|
+
action: "create" | "claim" | "guard_add" | "guard_remove_expired" | "add guard expiration time" | "coin_add" | "receive" | "owner_receive" | "set um" | "clear um" | "set description" | "set permission" | "query";
|
|
5
5
|
target_reward?: string;
|
|
6
6
|
rule_sentence: string;
|
|
7
7
|
failure_conditions: string[];
|
|
@@ -81,7 +81,7 @@ export declare function initPuzzleFromIntent(intent: Partial<RewardIntentPuzzle>
|
|
|
81
81
|
export declare function checkPuzzleCompleteness(puzzle: RewardPuzzle): RewardPuzzleCompleteness;
|
|
82
82
|
export interface RewardConstraintViolation {
|
|
83
83
|
constraint_id: string;
|
|
84
|
-
severity: "
|
|
84
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
85
85
|
message: string;
|
|
86
86
|
current_value?: string | number;
|
|
87
87
|
limit?: string | number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';import{resolveGuardConstructor,getGuardConstructorSpec}from'./reward-ledger.js';export const REWARD_FIELD_MUTABILITY=[{'field':'id','mutability':'immutable','set_at_creation':!![]},{'field':'description','mutability':'admin_mutable','permission_index':0x97,'set_at_creation':!![]},{'field':'guards','mutability':'admin_mutable','permission_index':0x98,'set_at_creation':!![]},{'field':'balance','mutability':'runtime','set_at_creation':!![]},{'field':'guard_not_added_expiration_time','mutability':'admin_mutable','permission_index':0x9b,'set_at_creation':!![]},{'field':'record','mutability':'runtime','set_at_creation':!![]},{'field':'um','mutability':'admin_mutable','permission_index':0x9d,'set_at_creation':!![]},{'field':'permission','mutability':'admin_mutable','set_at_creation':!![]}];export function initPuzzleFromIntent(a){const b={};return(a['action']||a['rule_sentence'])&&(b['intent']={'action':a['action']??'create','target_reward':a['target_reward'],'rule_sentence':a['rule_sentence']??'','failure_conditions':a['failure_conditions']??[]}),b['constraints']={'F_R_01_guard_count_le_200':!![],'F_R_02_record_count_le_5200':!![],'F_R_03_balance_sufficient_for_claim':!![],'F_R_04_guard_not_locked':!![],'F_R_05_guard_not_expired':!![],'F_R_06_recipient_amount_valid_pairing':![],'F_R_07_coin_type_matches_reward_t':![],'F_R_08_passport_required_for_claim':![],'F_R_09_progress_node_matches_intent':!![]},b;}export function checkPuzzleCompleteness(a){const b=[],d=[];if(!a['intent'])b['push']('A'),d['push']({'dimension':'A','reason':'Intent\x20not\x20specified\x20(action\x20+\x20rule_sentence)'});else!a['intent']['rule_sentence']&&(b['push']('A'),d['push']({'dimension':'A','reason':'rule_sentence\x20is\x20empty'}));const e=a['intent']?.['action'],f=e==='query',g=e==='claim';if(!f){if(e==='create'){if(!a['config'])b['push']('B'),d['push']({'dimension':'B','reason':'Reward\x20config\x20not\x20specified\x20(coin_type\x20+\x20description\x20+\x20permission)'});else{if(!a['config']['coin_type'])b['push']('B'),d['push']({'dimension':'B','reason':'coin_type\x20missing\x20(Reward<T>\x20phantom\x20T)'});else!a['config']['permission']&&!a['config']['permission_is_new']&&(b['push']('B'),d['push']({'dimension':'B','reason':'permission\x20address\x20missing\x20(or\x20set\x20permission_is_new=true)'}));}}}if(e==='guard_add'){if(!a['guard'])b['push']('C'),d['push']({'dimension':'C','reason':'Guard\x20config\x20not\x20specified\x20(guard\x20+\x20recipient\x20+\x20amount)'});else{if(!a['guard']['guard'])b['push']('C'),d['push']({'dimension':'C','reason':'guard\x20address\x20missing'});else{const h=resolveGuardConstructor(a['guard']['recipient_type'],a['guard']['amount_type']);!h&&(b['push']('C'),d['push']({'dimension':'C','reason':'Invalid\x20Recipient\x20×\x20Amount\x20pairing:\x20'+a['guard']['recipient_type']+'\x20×\x20'+a['guard']['amount_type']}));}}}if(e==='coin_add'||e==='receive'||e==='claim'||e==='owner_receive'){if(!a['funds'])b['push']('D'),d['push']({'dimension':'D','reason':'Funds\x20data\x20not\x20specified'});else{if(e==='coin_add'&&!a['funds']['coin_add_amount'])b['push']('D'),d['push']({'dimension':'D','reason':'coin_add_amount\x20missing'});else{if(e==='receive'&&!a['funds']['receive_payment'])b['push']('D'),d['push']({'dimension':'D','reason':'receive_payment\x20missing\x20(payment\x20address\x20+\x20token_type)'});else e==='owner_receive'&&!a['funds']['owner_receive_envelope']&&(b['push']('D'),d['push']({'dimension':'D','reason':'owner_receive_envelope\x20missing\x20(Receiving<K>\x20address)'}));}}}if(!a['permission'])b['push']('E'),d['push']({'dimension':'E','reason':'Permission\x20config\x20not\x20specified'});else g&&!a['permission']['requires_passport']&&(b['push']('E'),d['push']({'dimension':'E','reason':'claim\x20requires\x20Passport\x20(requires_passport\x20must\x20be\x20true)'}));return!a['constraints']&&(b['push']('F'),d['push']({'dimension':'F','reason':'Constraints\x20not\x20checked'})),{'dimensions':['A','B','C','D','E','F'],'missing':b,'missing_details':d,'complete':b['length']===0x0,'next_step':b['length']===0x0?'Puzzle\x20complete\x20—\x20ready\x20for\x20confirmation\x20text\x20generation':'Next:\x20complete\x20dimension\x20'+b[0x0]+'\x20—\x20'+d[0x0]['reason']};}export function validateConstraints(a){const b=[];a['intent']?.['action']==='claim'&&a['funds']&&a['constraints']&&(!a['constraints']['F_R_03_balance_sufficient_for_claim']&&b['push']({'constraint_id':'F-R-03','severity':'HIGH','message':'Balance\x20insufficient\x20for\x20claim\x20—\x20E_INSUFFICIENT_BALANCE\x20will\x20abort','current_value':a['funds']['current_balance'],'limit':a['funds']['claim_amount_estimate']}));a['intent']?.['action']==='guard_add'&&a['constraints']&&!a['constraints']['F_R_04_guard_not_locked']&&b['push']({'constraint_id':'F-R-04','severity':'HIGH','message':'guard_not_added_expiration_time\x20is\x20in\x20the\x20future\x20—\x20E_GUARD_LOCKED_TIME\x20will\x20abort\x20guard_add'});(a['intent']?.['action']==='guard_add'||a['intent']?.['action']==='claim')&&a['constraints']&&!a['constraints']['F_R_05_guard_not_expired']&&b['push']({'constraint_id':'F-R-05','severity':'HIGH','message':'guard.expiration_time\x20<\x20now\x20—\x20E_GUARD_EXPIRED\x20will\x20abort'});if(a['guard']){const d=resolveGuardConstructor(a['guard']['recipient_type'],a['guard']['amount_type']);!d&&b['push']({'constraint_id':'F-R-06','severity':'HIGH','message':'Invalid\x20Recipient\x20×\x20Amount\x20pairing:\x20'+a['guard']['recipient_type']+'\x20×\x20'+a['guard']['amount_type']+'\x20—\x20no\x20matching\x20Move\x20constructor','current_value':a['guard']['recipient_type']+'\x20×\x20'+a['guard']['amount_type'],'limit':'one\x20of\x206\x20valid\x20pairings\x20(see\x20REWARD_GUARD_CONSTRUCTORS)'});}return a['intent']?.['action']==='coin_add'&&a['config']&&a['funds']&&a['constraints']&&(!a['constraints']['F_R_07_coin_type_matches_reward_t']&&b['push']({'constraint_id':'F-R-07','severity':'CRITICAL','message':'coin_add\x20coin\x20type\x20does\x20not\x20match\x20Reward<T>\x20('+a['config']['coin_type']+')','current_value':a['funds']['receive_payment']?.['token_type']??'(unknown)','limit':a['config']['coin_type']})),a['intent']?.['action']==='claim'&&a['permission']&&!a['permission']['requires_passport']&&b['push']({'constraint_id':'F-R-08','severity':'CRITICAL','message':'claim\x20requires\x20Passport\x20—\x20SDK\x20W_ERROR\x20if\x20missing'}),a['guard']&&a['intent']&&a['constraints']&&(!a['constraints']['F_R_09_progress_node_matches_intent']&&b['push']({'constraint_id':'F-R-09','severity':'HIGH','message':'Guard\x27s\x20expected\x20progress.current\x20value\x20does\x20not\x20match\x20business\x20intent\x20—\x20'+'praise\x20reward\x20(praise/wonder)\x20must\x20check\x20\x27wonder\x27\x20node,\x20not\x20\x27completed\x27.\x20'+'Guard\x20is\x20immutable\x20after\x20creation;\x20mismatch\x20requires\x20full\x20rebuild.'})),b;}export function generateConfirmationText(a){const b=[];b['push']('═══\x20Reward\x20Confirmation\x20═══'),b['push']('');if(a['intent']){b['push']('Action:\x20'+a['intent']['action']);if(a['intent']['target_reward'])b['push']('Target\x20Reward:\x20'+a['intent']['target_reward']);b['push']('Rule:\x20'+a['intent']['rule_sentence']);if(a['intent']['failure_conditions']['length']>0x0){b['push']('Failure\x20conditions:');for(const d of a['intent']['failure_conditions'])b['push']('\x20\x20-\x20'+d);}b['push']('');}a['config']&&(b['push']('─\x20Reward\x20Config\x20──────────────'),b['push']('Coin\x20type\x20T:\x20'+a['config']['coin_type']),b['push']('Description:\x20'+a['config']['description']),b['push']('Permission:\x20'+a['config']['permission']+'\x20(new:\x20'+(a['config']['permission_is_new']?'YES':'NO')+')'),b['push'](''));a['guard']&&(b['push']('─\x20Guard\x20Config\x20──────────────'),b['push']('Guard:\x20'+a['guard']['guard']),b['push']('Recipient:\x20'+a['guard']['recipient_type']+(a['guard']['recipient_param']!==undefined?'\x20('+a['guard']['recipient_param']+')':'')),b['push']('Amount:\x20'+a['guard']['amount_type']+'\x20('+a['guard']['amount_param']+')'),b['push']('Constructor:\x20'+a['guard']['constructor']),a['guard']['expiration_time']!=null&&b['push']('expiration_time:\x20'+a['guard']['expiration_time']),a['guard']['store_from_id']!=null&&b['push']('store_from_id:\x20'+a['guard']['store_from_id']),b['push'](''));if(a['funds']){b['push']('─\x20Funds\x20──────────────'),b['push']('Current\x20balance:\x20'+a['funds']['current_balance']);if(a['funds']['coin_add_amount'])b['push']('coin_add\x20amount:\x20'+a['funds']['coin_add_amount']);a['funds']['receive_payment']&&b['push']('receive\x20payment:\x20'+a['funds']['receive_payment']['payment']+'\x20(token:\x20'+a['funds']['receive_payment']['token_type']+')');if(a['funds']['claim_amount_estimate'])b['push']('Estimated\x20claim\x20amount:\x20'+a['funds']['claim_amount_estimate']);if(a['funds']['owner_receive_envelope'])b['push']('owner_receive\x20envelope:\x20'+a['funds']['owner_receive_envelope']);b['push']('');}if(a['permission']){b['push']('─\x20Permission\x20──────────────');if(a['permission']['builtin_indexes_used']['length']>0x0){b['push']('Builtin\x20indexes\x20used:');for(const e of a['permission']['builtin_indexes_used']){b['push']('\x20\x20['+e['index']+']\x20'+e['name']+':\x20'+e['description']);}}b['push']('Permission-free:\x20'+(a['permission']['is_permission_free']?'YES\x20(claim)':'NO')),b['push']('Requires\x20Passport:\x20'+(a['permission']['requires_passport']?'YES':'NO')),a['permission']['signer']&&b['push']('Signer:\x20'+a['permission']['signer']+'\x20(is_owner:\x20'+(a['permission']['signer_is_owner']?'YES':'NO')+')'),b['push']('');}const c=validateConstraints(a);if(c['length']>0x0){b['push']('─\x20Constraint\x20Violations\x20──────────────');for(const f of c)b['push']('\x20\x20['+f['severity']+']\x20'+f['constraint_id']+':\x20'+f['message']);b['push']('');}return b['join']('\x0a');}export function resolveBuiltinPermission(a){return void a,undefined;}export function requiresGuardConfig(a){return a['intent']?.['action']==='guard_add';}export function requiresPassport(a){return a['intent']?.['action']==='claim';}export function getRelevantDimensions(a){const b=['A','E','F'];if(a==='create')b['push']('B');if(a==='guard_add')b['push']('C');return(a==='coin_add'||a==='receive'||a==='claim'||a==='owner_receive')&&b['push']('D'),b;}export function getFieldMutability(a){return REWARD_FIELD_MUTABILITY['find'](b=>b['field']===a);}export function isAdminMutableField(a){return getFieldMutability(a)?.['mutability']==='admin_mutable';}export function getFieldPermissionIndex(a){return getFieldMutability(a)?.['permission_index'];}export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD,resolveGuardConstructor,getGuardConstructorSpec};
|
|
1
|
+
import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';import{resolveGuardConstructor,getGuardConstructorSpec}from'./reward-ledger.js';export const REWARD_FIELD_MUTABILITY=[{'field':'id','mutability':'immutable','set_at_creation':!![]},{'field':'description','mutability':'admin_mutable','permission_index':0x97,'set_at_creation':!![]},{'field':'guards','mutability':'admin_mutable','permission_index':0x98,'set_at_creation':!![]},{'field':'balance','mutability':'runtime','set_at_creation':!![]},{'field':'guard_not_added_expiration_time','mutability':'admin_mutable','permission_index':0x9b,'set_at_creation':!![]},{'field':'record','mutability':'runtime','set_at_creation':!![]},{'field':'um','mutability':'admin_mutable','permission_index':0x9d,'set_at_creation':!![]},{'field':'permission','mutability':'admin_mutable','set_at_creation':!![]}];export function initPuzzleFromIntent(a){const b={};return(a['action']||a['rule_sentence'])&&(b['intent']={'action':a['action']??'create','target_reward':a['target_reward'],'rule_sentence':a['rule_sentence']??'','failure_conditions':a['failure_conditions']??[]}),b['constraints']={'F_R_01_guard_count_le_200':!![],'F_R_02_record_count_le_5200':!![],'F_R_03_balance_sufficient_for_claim':!![],'F_R_04_guard_not_locked':!![],'F_R_05_guard_not_expired':!![],'F_R_06_recipient_amount_valid_pairing':![],'F_R_07_coin_type_matches_reward_t':![],'F_R_08_passport_required_for_claim':![],'F_R_09_progress_node_matches_intent':!![]},b;}export function checkPuzzleCompleteness(a){const b=[],d=[];if(!a['intent'])b['push']('A'),d['push']({'dimension':'A','reason':'Intent\x20not\x20specified\x20(action\x20+\x20rule_sentence)'});else!a['intent']['rule_sentence']&&(b['push']('A'),d['push']({'dimension':'A','reason':'rule_sentence\x20is\x20empty'}));const e=a['intent']?.['action'],f=e==='query',g=e==='claim';if(!f){if(e==='create'){if(!a['config'])b['push']('B'),d['push']({'dimension':'B','reason':'Reward\x20config\x20not\x20specified\x20(coin_type\x20+\x20description\x20+\x20permission)'});else{if(!a['config']['coin_type'])b['push']('B'),d['push']({'dimension':'B','reason':'coin_type\x20missing\x20(Reward<T>\x20phantom\x20T)'});else!a['config']['permission']&&!a['config']['permission_is_new']&&(b['push']('B'),d['push']({'dimension':'B','reason':'permission\x20address\x20missing\x20(or\x20set\x20permission_is_new=true)'}));}}}if(e==='guard_add'){if(!a['guard'])b['push']('C'),d['push']({'dimension':'C','reason':'Guard\x20config\x20not\x20specified\x20(guard\x20+\x20recipient\x20+\x20amount)'});else{if(!a['guard']['guard'])b['push']('C'),d['push']({'dimension':'C','reason':'guard\x20address\x20missing'});else{const h=resolveGuardConstructor(a['guard']['recipient_type'],a['guard']['amount_type']);!h&&(b['push']('C'),d['push']({'dimension':'C','reason':'Invalid\x20Recipient\x20×\x20Amount\x20pairing:\x20'+a['guard']['recipient_type']+'\x20×\x20'+a['guard']['amount_type']}));}}}if(e==='coin_add'||e==='receive'||e==='claim'||e==='owner_receive'){if(!a['funds'])b['push']('D'),d['push']({'dimension':'D','reason':'Funds\x20data\x20not\x20specified'});else{if(e==='coin_add'&&!a['funds']['coin_add_amount'])b['push']('D'),d['push']({'dimension':'D','reason':'coin_add_amount\x20missing'});else{if(e==='receive'&&!a['funds']['receive_payment'])b['push']('D'),d['push']({'dimension':'D','reason':'receive_payment\x20missing\x20(payment\x20address\x20+\x20token_type)'});else e==='owner_receive'&&!a['funds']['owner_receive_envelope']&&(b['push']('D'),d['push']({'dimension':'D','reason':'owner_receive_envelope\x20missing\x20(Receiving<K>\x20address)'}));}}}if(!a['permission'])b['push']('E'),d['push']({'dimension':'E','reason':'Permission\x20config\x20not\x20specified'});else g&&!a['permission']['requires_passport']&&(b['push']('E'),d['push']({'dimension':'E','reason':'claim\x20requires\x20Passport\x20(requires_passport\x20must\x20be\x20true)'}));return!a['constraints']&&(b['push']('F'),d['push']({'dimension':'F','reason':'Constraints\x20not\x20checked'})),{'dimensions':['A','B','C','D','E','F'],'missing':b,'missing_details':d,'complete':b['length']===0x0,'next_step':b['length']===0x0?'Puzzle\x20complete\x20—\x20ready\x20for\x20confirmation\x20text\x20generation':'Next:\x20complete\x20dimension\x20'+b[0x0]+'\x20—\x20'+d[0x0]['reason']};}export function validateConstraints(a){const b=[];a['intent']?.['action']==='claim'&&a['funds']&&a['constraints']&&(!a['constraints']['F_R_03_balance_sufficient_for_claim']&&b['push']({'constraint_id':'F-R-03','severity':'high','message':'Balance\x20insufficient\x20for\x20claim\x20—\x20E_INSUFFICIENT_BALANCE\x20will\x20abort','current_value':a['funds']['current_balance'],'limit':a['funds']['claim_amount_estimate']}));a['intent']?.['action']==='guard_add'&&a['constraints']&&!a['constraints']['F_R_04_guard_not_locked']&&b['push']({'constraint_id':'F-R-04','severity':'high','message':'guard_not_added_expiration_time\x20is\x20in\x20the\x20future\x20—\x20E_GUARD_LOCKED_TIME\x20will\x20abort\x20guard_add'});(a['intent']?.['action']==='guard_add'||a['intent']?.['action']==='claim')&&a['constraints']&&!a['constraints']['F_R_05_guard_not_expired']&&b['push']({'constraint_id':'F-R-05','severity':'high','message':'guard.expiration_time\x20<\x20now\x20—\x20E_GUARD_EXPIRED\x20will\x20abort'});if(a['guard']){const d=resolveGuardConstructor(a['guard']['recipient_type'],a['guard']['amount_type']);!d&&b['push']({'constraint_id':'F-R-06','severity':'high','message':'Invalid\x20Recipient\x20×\x20Amount\x20pairing:\x20'+a['guard']['recipient_type']+'\x20×\x20'+a['guard']['amount_type']+'\x20—\x20no\x20matching\x20Move\x20constructor','current_value':a['guard']['recipient_type']+'\x20×\x20'+a['guard']['amount_type'],'limit':'one\x20of\x206\x20valid\x20pairings\x20(see\x20REWARD_GUARD_CONSTRUCTORS)'});}return a['intent']?.['action']==='coin_add'&&a['config']&&a['funds']&&a['constraints']&&(!a['constraints']['F_R_07_coin_type_matches_reward_t']&&b['push']({'constraint_id':'F-R-07','severity':'critical','message':'coin_add\x20coin\x20type\x20does\x20not\x20match\x20Reward<T>\x20('+a['config']['coin_type']+')','current_value':a['funds']['receive_payment']?.['token_type']??'(unknown)','limit':a['config']['coin_type']})),a['intent']?.['action']==='claim'&&a['permission']&&!a['permission']['requires_passport']&&b['push']({'constraint_id':'F-R-08','severity':'critical','message':'claim\x20requires\x20Passport\x20—\x20SDK\x20W_ERROR\x20if\x20missing'}),a['guard']&&a['intent']&&a['constraints']&&(!a['constraints']['F_R_09_progress_node_matches_intent']&&b['push']({'constraint_id':'F-R-09','severity':'high','message':'Guard\x27s\x20expected\x20progress.current\x20value\x20does\x20not\x20match\x20business\x20intent\x20—\x20'+'praise\x20reward\x20(praise/wonder)\x20must\x20check\x20\x27wonder\x27\x20node,\x20not\x20\x27completed\x27.\x20'+'Guard\x20is\x20immutable\x20after\x20creation;\x20mismatch\x20requires\x20full\x20rebuild.'})),b;}export function generateConfirmationText(a){const b=[];b['push']('═══\x20Reward\x20Confirmation\x20═══'),b['push']('');if(a['intent']){b['push']('Action:\x20'+a['intent']['action']);if(a['intent']['target_reward'])b['push']('Target\x20Reward:\x20'+a['intent']['target_reward']);b['push']('Rule:\x20'+a['intent']['rule_sentence']);if(a['intent']['failure_conditions']['length']>0x0){b['push']('Failure\x20conditions:');for(const d of a['intent']['failure_conditions'])b['push']('\x20\x20-\x20'+d);}b['push']('');}a['config']&&(b['push']('─\x20Reward\x20Config\x20──────────────'),b['push']('Coin\x20type\x20T:\x20'+a['config']['coin_type']),b['push']('Description:\x20'+a['config']['description']),b['push']('Permission:\x20'+a['config']['permission']+'\x20(new:\x20'+(a['config']['permission_is_new']?'YES':'NO')+')'),b['push'](''));a['guard']&&(b['push']('─\x20Guard\x20Config\x20──────────────'),b['push']('Guard:\x20'+a['guard']['guard']),b['push']('Recipient:\x20'+a['guard']['recipient_type']+(a['guard']['recipient_param']!==undefined?'\x20('+a['guard']['recipient_param']+')':'')),b['push']('Amount:\x20'+a['guard']['amount_type']+'\x20('+a['guard']['amount_param']+')'),b['push']('Constructor:\x20'+a['guard']['constructor']),a['guard']['expiration_time']!=null&&b['push']('expiration_time:\x20'+a['guard']['expiration_time']),a['guard']['store_from_id']!=null&&b['push']('store_from_id:\x20'+a['guard']['store_from_id']),b['push'](''));if(a['funds']){b['push']('─\x20Funds\x20──────────────'),b['push']('Current\x20balance:\x20'+a['funds']['current_balance']);if(a['funds']['coin_add_amount'])b['push']('coin_add\x20amount:\x20'+a['funds']['coin_add_amount']);a['funds']['receive_payment']&&b['push']('receive\x20payment:\x20'+a['funds']['receive_payment']['payment']+'\x20(token:\x20'+a['funds']['receive_payment']['token_type']+')');if(a['funds']['claim_amount_estimate'])b['push']('Estimated\x20claim\x20amount:\x20'+a['funds']['claim_amount_estimate']);if(a['funds']['owner_receive_envelope'])b['push']('owner_receive\x20envelope:\x20'+a['funds']['owner_receive_envelope']);b['push']('');}if(a['permission']){b['push']('─\x20Permission\x20──────────────');if(a['permission']['builtin_indexes_used']['length']>0x0){b['push']('Builtin\x20indexes\x20used:');for(const e of a['permission']['builtin_indexes_used']){b['push']('\x20\x20['+e['index']+']\x20'+e['name']+':\x20'+e['description']);}}b['push']('Permission-free:\x20'+(a['permission']['is_permission_free']?'YES\x20(claim)':'NO')),b['push']('Requires\x20Passport:\x20'+(a['permission']['requires_passport']?'YES':'NO')),a['permission']['signer']&&b['push']('Signer:\x20'+a['permission']['signer']+'\x20(is_owner:\x20'+(a['permission']['signer_is_owner']?'YES':'NO')+')'),b['push']('');}const c=validateConstraints(a);if(c['length']>0x0){b['push']('─\x20Constraint\x20Violations\x20──────────────');for(const f of c)b['push']('\x20\x20['+f['severity']+']\x20'+f['constraint_id']+':\x20'+f['message']);b['push']('');}return b['join']('\x0a');}export function resolveBuiltinPermission(a){return void a,undefined;}export function requiresGuardConfig(a){return a['intent']?.['action']==='guard_add';}export function requiresPassport(a){return a['intent']?.['action']==='claim';}export function getRelevantDimensions(a){const b=['A','E','F'];if(a==='create')b['push']('B');if(a==='guard_add')b['push']('C');return(a==='coin_add'||a==='receive'||a==='claim'||a==='owner_receive')&&b['push']('D'),b;}export function getFieldMutability(a){return REWARD_FIELD_MUTABILITY['find'](b=>b['field']===a);}export function isAdminMutableField(a){return getFieldMutability(a)?.['mutability']==='admin_mutable';}export function getFieldPermissionIndex(a){return getFieldMutability(a)?.['permission_index'];}export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD,resolveGuardConstructor,getGuardConstructorSpec};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type Facts, type FindingExposure } from "../config/rule-engine.js";
|
|
1
2
|
import { type RewardScene, type RewardAmountType } from "./reward-ledger.js";
|
|
2
|
-
export type RewardRiskLevel = "
|
|
3
|
+
export type RewardRiskLevel = "critical" | "high" | "medium" | "low";
|
|
3
4
|
export type RewardRiskCategory = "structural" | "semantic" | "permission" | "lifecycle" | "cross_object" | "business_semantic" | "fund_recovery";
|
|
4
5
|
export interface RewardRisk {
|
|
5
6
|
id: string;
|
|
@@ -13,6 +14,7 @@ export interface RewardRisk {
|
|
|
13
14
|
evidence?: string;
|
|
14
15
|
related_move_error?: string;
|
|
15
16
|
auto_fixable: boolean;
|
|
17
|
+
exposure?: FindingExposure;
|
|
16
18
|
}
|
|
17
19
|
export type RewardStakeholder = "owner" | "claimer" | "service_provider" | "system";
|
|
18
20
|
export interface RewardRiskRule {
|
|
@@ -69,10 +71,9 @@ export interface RewardRiskCheckContext {
|
|
|
69
71
|
guard_expected_progress_state?: string;
|
|
70
72
|
machine_has_wonder_node?: boolean;
|
|
71
73
|
}
|
|
72
|
-
export declare
|
|
74
|
+
export declare function rewardRiskFacts(ctx: RewardRiskCheckContext): Facts;
|
|
75
|
+
export declare const REWARD_RISK_VERSION = "1.1.0";
|
|
73
76
|
export declare function getAllRewardRiskRules(): RewardRiskRule[];
|
|
74
|
-
export declare function getRewardRiskRulesCount(): number;
|
|
75
|
-
export declare function getRewardRiskRulesByCategory(category: RewardRiskCategory): RewardRiskRule[];
|
|
76
77
|
export interface RewardRiskAssessment {
|
|
77
78
|
summary: string;
|
|
78
79
|
scene?: RewardScene;
|
|
@@ -83,5 +84,3 @@ export interface RewardRiskAssessment {
|
|
|
83
84
|
needs_human_review: boolean;
|
|
84
85
|
}
|
|
85
86
|
export declare function assessRewardRisks(ctx: RewardRiskCheckContext): RewardRiskAssessment;
|
|
86
|
-
export declare const REWARD_STAKEHOLDERS: RewardStakeholder[];
|
|
87
|
-
export declare function getRewardRiskRulesByStakeholder(stakeholder: RewardStakeholder): RewardRiskRule[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';import{resolveGuardConstructor}from'./reward-ledger.js';const R_R_1_01={'id':'R-R-1-01','category':'structural','trigger':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20(200)','check':a=>{if(!a['guard_add']||a['guard_add']['length']===0x0)return null;const b=a['current_guard_count']??0x0,c=a['guard_add']['length'];if(b+c>MAX_GUARD_COUNT_REWARD)return{'id':'R-R-1-01','level':'HIGH','category':'structural','title':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD','description':'Reward\x20has\x20'+b+'\x20guards,\x20adding\x20'+c+'\x20would\x20total\x20'+(b+c)+',\x20'+('exceeds\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD+'.\x20Move\x20aborts\x20with\x20E_GUARD_COUNT_EXCEEDED\x20(3).'),'affected_stakeholders':['owner','service_provider'],'scenario':'Adding\x20too\x20many\x20guards\x20to\x20a\x20single\x20Reward\x20(e.g.\x20milestone\x20reward\x20with\x20>\x20200\x20recipients)','mitigation':'Split\x20into\x20multiple\x20Reward\x20objects,\x20or\x20use\x20GuardIdentifier\x20recipient\x20to\x20handle\x20multiple\x20recipients\x20with\x20a\x20single\x20guard.','evidence':'current='+b+',\x20add='+c,'related_move_error':'E_GUARD_COUNT_EXCEEDED\x20(3)','auto_fixable':![]};return null;}},R_R_1_02={'id':'R-R-1-02','category':'structural','trigger':'claim\x20would\x20push\x20recipient\x20record\x20count\x20to\x20MAX_RECORD_COUNT_REWARD\x20(5200)','check':a=>{if(!a['claim'])return null;const b=a['current_record_count_for_recipient']??0x0;if(b>=MAX_RECORD_COUNT_REWARD)return{'id':'R-R-1-02','level':'HIGH','category':'structural','title':'claim\x20blocked\x20—\x20recipient\x20record\x20count\x20at\x20limit','description':'Recipient\x20already\x20has\x20'+b+'\x20records,\x20at\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'.\x20'+'Next\x20claim\x20will\x20abort\x20with\x20E_RECORD_COUNT_EXCEEDED\x20(8).\x20The\x20recipient\x20can\x20no\x20longer\x20claim\x20from\x20this\x20Reward.','affected_stakeholders':['claimer'],'scenario':'High-frequency\x20claimer\x20hits\x20the\x205200-record\x20ceiling\x20(e.g.\x20cashback\x20on\x20every\x20micro-order)','mitigation':'Owner\x20can\x20create\x20a\x20new\x20Reward\x20for\x20the\x20same\x20recipient,\x20OR\x20redesign\x20the\x20Guard\x20to\x20batch\x20claims\x20(larger\x20amount\x20per\x20claim).','evidence':'recipient_records='+b,'related_move_error':'E_RECORD_COUNT_EXCEEDED\x20(8)','auto_fixable':![]};return null;}},R_R_1_03={'id':'R-R-1-03','category':'structural','trigger':'guard_add\x20batch\x20size\x20>\x20MAX_GUARD_COUNT_REWARD\x20(200)\x20—\x20schema-level\x20overflow','check':a=>{if(!a['guard_add'])return null;if(a['guard_add']['length']>MAX_GUARD_COUNT_REWARD)return{'id':'R-R-1-03','level':'CRITICAL','category':'structural','title':'guard_add\x20batch\x20exceeds\x20absolute\x20limit','description':'Single\x20guard_add\x20call\x20tries\x20to\x20add\x20'+a['guard_add']['length']+'\x20guards\x20in\x20one\x20transaction,\x20'+('exceeds\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD+'.\x20SDK\x20rejects\x20this\x20in\x20operate().'),'affected_stakeholders':['owner'],'scenario':'Bulk\x20guard\x20addition\x20without\x20splitting\x20transactions','mitigation':'Split\x20into\x20multiple\x20transactions,\x20each\x20≤\x20'+MAX_GUARD_COUNT_REWARD+'\x20new\x20guards.','evidence':'batch_size='+a['guard_add']['length'],'auto_fixable':!![]};return null;}},R_R_2_01={'id':'R-R-2-01','category':'semantic','trigger':'guard_add\x20with\x20GuardIdentifier\x20recipient\x20where\x20identifier\x20type\x20is\x20not\x20address','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b];if('GuardIdentifier'in c['recipient']){const d=c['recipient']['GuardIdentifier'];if(a['passport_identifier_is_address']&&a['passport_identifier_is_address'][d]===![])return{'id':'R-R-2-01','level':'HIGH','category':'semantic','title':'guard_add['+b+']:\x20recipient\x20GuardIdentifier\x20'+d+'\x20is\x20not\x20address-typed','description':'RewardGuard\x20constructor\x20calls\x20is_identifier_address(guard,\x20'+d+').\x20If\x20the\x20identifier\x20type\x20is\x20not\x20address,\x20'+'Move\x20aborts\x20with\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20recipient\x20identifier\x20is\x20u64/bool\x20instead\x20of\x20address','mitigation':'Use\x20a\x20Guard\x20with\x20an\x20address-typed\x20identifier\x20for\x20recipient,\x20OR\x20switch\x20to\x20Entity/Signer\x20recipient.','evidence':'guard_add['+b+'].recipient.GuardIdentifier='+d+',\x20is_address=false','related_move_error':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','auto_fixable':![]};}}return null;}},R_R_2_02={'id':'R-R-2-02','category':'semantic','trigger':'guard_add\x20with\x20GuardU64Identifier\x20amount\x20where\x20identifier\x20type\x20is\x20not\x20u64','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b],d=String(c['amount']['type'])['toUpperCase']();if(d==='GUARDU64IDENTIFIER'||d==='GUARD_U64_IDENTIFIER'){if(typeof c['amount']['value']!=='number')continue;const e=c['amount']['value'];if(a['passport_submission_value_types']&&a['passport_submission_value_types'][e]!=='u64')return{'id':'R-R-2-02','level':'HIGH','category':'semantic','title':'guard_add['+b+']:\x20amount\x20GuardU64Identifier\x20'+e+'\x20is\x20not\x20u64-typed','description':'RewardGuard\x20constructor\x20calls\x20get_submission_value_type(guard,\x20'+e+');\x20if\x20None\x20or\x20≠\x20TYPE_U64,\x20'+'Move\x20aborts\x20with\x20E_AMOUNT_NOT_U64\x20(5).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20amount\x20identifier\x20is\x20not\x20u64-typed','mitigation':'Use\x20a\x20Guard\x20with\x20a\x20u64-typed\x20identifier\x20for\x20amount,\x20OR\x20switch\x20to\x20Fixed\x20amount.','evidence':'guard_add['+b+'].amount.value='+e+',\x20value_type='+(a['passport_submission_value_types'][e]??'unknown'),'related_move_error':'E_AMOUNT_NOT_U64\x20(5)','auto_fixable':![]};}}return null;}},R_R_2_03={'id':'R-R-2-03','category':'semantic','trigger':'guard_add\x20with\x20store_from_id\x20set\x20but\x20identifier\x20is\x20not\x20number/address\x20compatible','check':a=>{if(!a['guard_add'])return null;for(let b=0x0;b<a['guard_add']['length'];b++){const c=a['guard_add'][b];if(c['store_from_id']==null)continue;if(a['guard_store_from_id_compatible']&&a['guard_store_from_id_compatible'][c['guard']]===![])return{'id':'R-R-2-03','level':'MEDIUM','category':'semantic','title':'guard_add['+b+']:\x20store_from_id\x20incompatible\x20with\x20guard','description':'RewardGuard\x20constructor\x20with\x20store_from_id=Some\x20calls\x20is_identifier_address_compatible(guard,\x20store_from_id).\x20'+'If\x20the\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address,\x20Move\x20aborts\x20with\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12).','affected_stakeholders':['owner'],'scenario':'Misconfigured\x20Guard\x20—\x20store_from_id\x20points\x20to\x20a\x20non-address/non-number\x20identifier','mitigation':'Use\x20a\x20compatible\x20identifier,\x20OR\x20drop\x20store_from_id\x20(set\x20to\x20null)\x20if\x20cross-reference\x20is\x20not\x20needed.','evidence':'guard='+c['guard']+',\x20store_from_id='+c['store_from_id'],'related_move_error':'E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)','auto_fixable':!![]};}return null;}},R_R_2_04={'id':'R-R-2-04','category':'semantic','trigger':'guard_add\x20with\x20invalid\x20Recipient\x20×\x20Amount\x20pairing\x20(no\x20matching\x20constructor)','check':a=>{if(!a['guard_add'])return null;const b={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'};for(let c=0x0;c<a['guard_add']['length'];c++){const d=a['guard_add'][c],e=Object['keys'](d['recipient'])[0x0],f=b[e],h=String(d['amount']['type'])['toUpperCase'](),j=h==='FIXED'?'Fixed':'GuardU64Identifier',k=resolveGuardConstructor(f,j);if(!k)return{'id':'R-R-2-04','level':'HIGH','category':'semantic','title':'guard_add['+c+']:\x20invalid\x20Recipient\x20×\x20Amount\x20pairing','description':'recipient='+f+',\x20amount='+j+'\x20—\x20no\x20matching\x20Move\x20constructor.\x20'+'SDK\x20reward_guard()\x20will\x20W_ERROR\x20with\x20\x22Invalid\x20recipient\x20or\x20amount\x20type\x20combination\x22.','affected_stakeholders':['owner'],'scenario':'Schema\x20validation\x20bypassed\x20or\x20stale\x20client','mitigation':'Use\x20one\x20of\x20the\x206\x20valid\x20pairings:\x20guard_u8_u8,\x20guard_u8_u64,\x20guard_entity_u8,\x20guard_entity_u64,\x20guard_signer_u8,\x20guard_signer_u64.','evidence':'recipient='+f+',\x20amount='+j,'auto_fixable':![]};}return null;}},R_R_3_01={'id':'R-R-3-01','category':'permission','trigger':'claim\x20attempted\x20without\x20permission\x20context\x20—\x20claim\x20is\x20passport-driven','check':a=>{if(!a['claim'])return null;return{'id':'R-R-3-01','level':'MEDIUM','category':'permission','title':'claim\x20is\x20permission-free\x20—\x20anyone\x20with\x20a\x20valid\x20Passport\x20can\x20claim','description':'reward::claim()\x20does\x20NOT\x20assert\x20any\x20permission\x20index.\x20Eligibility\x20is\x20determined\x20entirely\x20by\x20the\x20'+'Guard\x20verification\x20(passport::result_for_guard).\x20If\x20the\x20Guard\x20is\x20too\x20permissive,\x20funds\x20can\x20be\x20drained\x20by\x20anyone.','affected_stakeholders':['owner','service_provider'],'scenario':'Loose\x20Guard\x20allows\x20unauthorized\x20claims\x20(e.g.\x20time-only\x20Guard\x20without\x20service\x20binding)','mitigation':'1)\x20Use\x20Guards\x20that\x20bind\x20to\x20specific\x20Service/Order\x20context.\x202)\x20Set\x20expiration_time.\x203)\x20Monitor\x20balance\x20and\x20refill\x20only\x20what\x27s\x20needed.','evidence':'claim='+a['claim'],'auto_fixable':![]};}},R_R_3_02={'id':'R-R-3-02','category':'permission','trigger':'owner_receive\x20(156)\x20—\x20broad\x20blast\x20radius,\x20owner\x20can\x20drain\x20balance','check':a=>{if(a['owner_receive']==null)return null;return{'id':'R-R-3-02','level':'HIGH','category':'permission','title':'owner_receive\x20drains\x20balance\x20to\x20Permission\x20owner','description':'reward::owner_receive\x20(156\x20permission)\x20unwraps\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20and\x20forwards\x20to\x20Permission\x20owner.\x20'+'If\x20156\x20is\x20granted\x20too\x20broadly,\x20any\x20156-holder\x20can\x20sweep\x20receivables.\x20(Note:\x20owner_receive\x20does\x20NOT\x20directly\x20drain\x20balance\x20—\x20'+'only\x20Receiving<K>\x20envelopes\x20sent\x20to\x20the\x20Reward\x27s\x20id.)','affected_stakeholders':['owner','service_provider'],'scenario':'Compromised\x20156-holder\x20sweeps\x20receivables\x20before\x20owner','mitigation':'1)\x20Grant\x20156\x20only\x20to\x20the\x20Permission\x20owner\x20address.\x202)\x20Reconcile\x20Receiving<K>\x20inflows\x20vs\x20owner_receive\x20events.','evidence':'owner_receive\x20set','auto_fixable':![]};}},R_R_3_03={'id':'R-R-3-03','category':'permission','trigger':'guard_expiration_time_add\x20(155)\x20—\x20can\x20permanently\x20lock\x20guard\x20additions','check':a=>{if(a['guard_expiration_time']===undefined)return null;if(a['guard_expiration_time']!==null&&a['current_clock_ms']!==undefined){const b=a['guard_expiration_time']-a['current_clock_ms'],c=0x16d*0x18*0x3c*0x3c*0x3e8;if(b>c)return{'id':'R-R-3-03','level':'MEDIUM','category':'permission','title':'guard_expiration_time_add\x20locks\x20guard\x20additions\x20for\x20>\x201\x20year','description':'Setting\x20guard_not_added_expiration_time\x20to\x20'+a['guard_expiration_time']+'\x20'+'(>\x201\x20year\x20from\x20now)\x20effectively\x20freezes\x20the\x20guard\x20list.\x20While\x20this\x20is\x20sometimes\x20intentional\x20'+'(milestone\x20rewards),\x20it\x20cannot\x20be\x20undone\x20without\x20setting\x20a\x20new\x20time\x20(which\x20itself\x20requires\x20155\x20permission).','affected_stakeholders':['owner'],'scenario':'Operator\x20sets\x20excessively\x20long\x20lock\x20period\x20by\x20mistake','mitigation':'Confirm\x20intent.\x20If\x20wrong,\x20call\x20guard_expiration_time_add\x20again\x20with\x20a\x20shorter\x20time\x20(must\x20be\x20≥\x20current\x20clock\x20per\x20E_GUARD_LOCKED_TIME_NOT_INCREASING).','evidence':'lock_until='+a['guard_expiration_time']+',\x20clock='+a['current_clock_ms'],'auto_fixable':![]};}return null;}},R_R_4_01={'id':'R-R-4-01','category':'lifecycle','trigger':'claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now\x20(E_GUARD_EXPIRED)','check':a=>{if(!a['claim'])return null;return null;}},R_R_4_02={'id':'R-R-4-02','category':'lifecycle','trigger':'claim:\x20balance\x20<\x20amount\x20(E_INSUFFICIENT_BALANCE)','check':a=>{if(!a['claim'])return null;if(a['current_balance']!==undefined&&a['current_guard_count']!==undefined){const b=BigInt(a['current_balance']);if(b===0x0n)return{'id':'R-R-4-02','level':'HIGH','category':'lifecycle','title':'claim\x20on\x20Reward\x20with\x20zero\x20balance','description':'Reward\x20balance\x20is\x200.\x20Any\x20claim\x20will\x20abort\x20with\x20E_INSUFFICIENT_BALANCE\x20(6).\x20'+'Owner\x20must\x20coin_add\x20(153)\x20or\x20receive\x20(154)\x20to\x20replenish.','affected_stakeholders':['claimer','owner'],'scenario':'Marketing\x20campaign\x20budget\x20exhausted\x20but\x20guards\x20remain\x20active','mitigation':'1)\x20Owner:\x20coin_add\x20to\x20replenish.\x202)\x20Owner:\x20guard_remove_expired\x20+\x20guard_expiration_time_add\x20to\x20deactivate.\x203)\x20Claimer:\x20wait\x20for\x20replenishment.','evidence':'balance=0','related_move_error':'E_INSUFFICIENT_BALANCE\x20(6)','auto_fixable':![]};}return null;}},R_R_4_03={'id':'R-R-4-03','category':'lifecycle','trigger':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration\x20(E_GUARD_LOCKED_TIME)','check':a=>{if(!a['guard_add']||a['guard_add']['length']===0x0)return null;if(a['current_guard_not_added_expiration_time']==null)return null;if(a['current_clock_ms']===undefined)return null;if(a['current_clock_ms']<=a['current_guard_not_added_expiration_time'])return{'id':'R-R-4-03','level':'HIGH','category':'lifecycle','title':'guard_add\x20blocked\x20by\x20time-lock\x20(guard_not_added_expiration_time)','description':'guard_not_added_expiration_time\x20is\x20Some('+a['current_guard_not_added_expiration_time']+');\x20'+('clock\x20is\x20'+a['current_clock_ms']+'.\x20Move\x20asserts\x20clock\x20>\x20expiration_time\x20')+'(E_GUARD_LOCKED_TIME\x20=\x2010).','affected_stakeholders':['owner'],'scenario':'Trying\x20to\x20add\x20guards\x20during\x20a\x20flash\x20sale\x20lock\x20period','mitigation':'1)\x20Wait\x20until\x20clock\x20>\x20expiration_time.\x202)\x20Call\x20guard_expiration_time_add\x20(155)\x20to\x20extend\x20the\x20lock\x20(cannot\x20shorten\x20below\x20current\x20clock).','evidence':'lock_until='+a['current_guard_not_added_expiration_time']+',\x20clock='+a['current_clock_ms'],'related_move_error':'E_GUARD_LOCKED_TIME\x20(10)','auto_fixable':![]};return null;}},R_R_4_04={'id':'R-R-4-04','category':'lifecycle','trigger':'guard_expiration_time_add\x20regression\x20(new\x20time\x20<\x20current\x20clock)','check':a=>{if(a['guard_expiration_time']===undefined)return null;if(a['guard_expiration_time']===null)return null;if(a['current_clock_ms']===undefined)return null;if(a['guard_expiration_time']<=a['current_clock_ms'])return{'id':'R-R-4-04','level':'HIGH','category':'lifecycle','title':'guard_expiration_time_add:\x20new\x20time\x20must\x20be\x20in\x20the\x20future','description':'New\x20guard_not_added_expiration_time\x20=\x20'+a['guard_expiration_time']+'\x20≤\x20clock\x20'+a['current_clock_ms']+'.\x20'+'Move\x20aborts\x20with\x20E_GUARD_LOCKED_TIME_INVALID\x20(11).','affected_stakeholders':['owner'],'scenario':'Operator\x20sets\x20lock\x20time\x20in\x20the\x20past\x20by\x20mistake','mitigation':'Set\x20guard_expiration_time\x20to\x20a\x20value\x20>\x20'+a['current_clock_ms']+'\x20(current\x20clock).','evidence':'new_time='+a['guard_expiration_time']+',\x20clock='+a['current_clock_ms'],'related_move_error':'E_GUARD_LOCKED_TIME_INVALID\x20(11)','auto_fixable':!![]};return null;}},R_R_5_01={'id':'R-R-5-01','category':'cross_object','trigger':'claim:\x20guard\x20not\x20found\x20in\x20self.guards\x20(E_GUARD_NOT_FOUND)','check':a=>{if(!a['claim'])return null;if(!a['target_guard_addresses'])return null;if(!a['target_guard_addresses']['includes'](a['claim']))return{'id':'R-R-5-01','level':'HIGH','category':'cross_object','title':'claim:\x20supplied\x20guard\x20not\x20in\x20Reward.guards','description':'Guard\x20'+a['claim']+'\x20is\x20not\x20in\x20the\x20Reward\x27s\x20guard\x20list.\x20Move\x20iterates\x20self.guards\x20and\x20'+'aborts\x20with\x20E_GUARD_NOT_FOUND\x20(7)\x20if\x20no\x20match.','affected_stakeholders':['claimer'],'scenario':'Claimer\x20uses\x20the\x20wrong\x20Guard\x20object\x20(typo\x20or\x20wrong\x20Service)','mitigation':'1)\x20Verify\x20the\x20Guard\x20address\x20via\x20query\x20ObjectReward.\x202)\x20Ensure\x20the\x20Guard\x20was\x20added\x20via\x20guard_add\x20(152).','evidence':'claim_guard='+a['claim']+',\x20known_guards='+a['target_guard_addresses']['join'](','),'related_move_error':'E_GUARD_NOT_FOUND\x20(7)','auto_fixable':![]};return null;}},R_R_5_02={'id':'R-R-5-02','category':'cross_object','trigger':'coin_add:\x20coin\x20type\x20T\x20mismatch\x20with\x20Reward<T>','check':a=>{if(!a['coin_add']||!a['reward_type'])return null;if(a['coin_add']['coin_type']!==a['reward_type'])return{'id':'R-R-5-02','level':'CRITICAL','category':'cross_object','title':'coin_add:\x20coin\x20type\x20T\x20mismatch','description':'Reward\x20is\x20Reward<'+a['reward_type']+'>\x20but\x20coin_add\x20passes\x20Coin<'+a['coin_add']['coin_type']+'>.\x20'+'Move\x20type-system\x20mismatch;\x20SDK\x20W_ERROR\x20in\x20operate().','affected_stakeholders':['owner'],'scenario':'Operator\x20tries\x20to\x20deposit\x20wrong\x20coin\x20type\x20(e.g.\x20USDC\x20into\x20a\x20WOW\x20Reward)','mitigation':'Use\x20Coin<'+a['reward_type']+'>\x20for\x20coin_add.','evidence':'reward_type='+a['reward_type']+',\x20coin_type='+a['coin_add']['coin_type'],'auto_fixable':![]};return null;}},R_R_5_03={'id':'R-R-5-03','category':'cross_object','trigger':'receive:\x20Payment<T>\x20type\x20mismatch\x20with\x20Reward<T>','check':a=>{if(!a['receive']||!a['reward_type'])return null;if(a['receive']['token_type']!==a['reward_type'])return{'id':'R-R-5-03','level':'CRITICAL','category':'cross_object','title':'receive:\x20Payment\x20token_type\x20mismatch','description':'Reward\x20is\x20Reward<'+a['reward_type']+'>\x20but\x20receive\x27s\x20Payment<CoinWrapper<'+a['receive']['token_type']+'>>.\x20'+'SDK\x20W_ERROR\x20in\x20operate().','affected_stakeholders':['owner'],'scenario':'Operator\x20tries\x20to\x20receive\x20wrong-token\x20Payment','mitigation':'Use\x20Payment<'+a['reward_type']+'>\x20for\x20receive.','evidence':'reward_type='+a['reward_type']+',\x20payment_token='+a['receive']['token_type'],'auto_fixable':![]};return null;}},R_R_6_01={'id':'R-R-6-01','category':'business_semantic','trigger':'intent\x20mentions\x20praise/positive-review\x20but\x20Guard\x20checks\x20non-wonder\x20progress\x20node','check':a=>{if(!a['user_intent_phrases']||a['user_intent_phrases']['length']===0x0)return null;if(!a['guard_expected_progress_state'])return null;const b=a['user_intent_phrases']['join']('\x20')['toLowerCase'](),c=['praise','wonder','thumbs_up','positive\x20review','satisfaction\x20reward','praise\x20reward'],d=c['some'](f=>b['includes'](f['toLowerCase']()));if(!d)return null;if(a['machine_has_wonder_node']===![])return null;const e=a['guard_expected_progress_state'];if(e!=='wonder')return{'id':'R-R-6-01','level':'HIGH','category':'business_semantic','title':'Guard\x20checks\x20progress==\x22'+e+'\x22\x20but\x20intent\x20indicates\x20praise\x20reward\x20(wonder\x20node)','description':'User\x20intent\x20mentions\x20praise/positive-review/wonder,\x20which\x20maps\x20to\x20the\x20\x27wonder\x27\x20progress\x20node\x20'+'(customer\x20gives\x20positive\x20review\x20AFTER\x20service\x20completion).\x20But\x20the\x20Guard\x27s\x20table\x20bakes\x20'+('expected\x20state=\x22'+e+'\x22,\x20allowing\x20reward\x20claim\x20at\x20the\x20wrong\x20lifecycle\x20stage.\x20')+'This\x20violates\x20the\x20business\x20semantics:\x20\x22praise\x20reward\x22\x20should\x20only\x20be\x20claimable\x20AFTER\x20the\x20'+'customer\x20advances\x20to\x20the\x20\x27wonder\x27\x20node,\x20not\x20before.\x20'+'Guard\x20is\x20immutable\x20—\x20fixing\x20this\x20requires\x20creating\x20a\x20new\x20Guard\x20+\x20Reward\x20pair.','affected_stakeholders':['owner','service_provider','claimer'],'scenario':'Designer\x20builds\x20Guard\x20checking\x20\x27completed\x27\x20instead\x20of\x20\x27wonder\x27\x20for\x20a\x20praise\x20reward','mitigation':'Set\x20the\x20Guard\x20table\x27s\x20expected\x20progress\x20state\x20to\x20\x27wonder\x27\x20(the\x20positive-review\x20node).\x20'+'The\x20correct\x20pattern:\x20ordered\x20→\x20in_service\x20→\x20completed\x20→\x20wonder\x20(praise)\x20triggers\x20reward\x20claim.\x20'+'Reference:\x20reward-templates.ts\x20wonder_praise\x20template.','evidence':'intent=\x22'+b+'\x22,\x20expected_state=\x22'+e+'\x22,\x20expected_wonder=true','auto_fixable':![]};return null;}},R_R_6_02={'id':'R-R-6-02','category':'business_semantic','trigger':'Guard\x20checks\x20wonder\x20node\x20but\x20intent\x20does\x20not\x20mention\x20praise','check':a=>{if(!a['user_intent_phrases']||a['user_intent_phrases']['length']===0x0)return null;if(!a['guard_expected_progress_state'])return null;if(a['guard_expected_progress_state']!=='wonder')return null;const b=a['user_intent_phrases']['join']('\x20')['toLowerCase'](),c=['praise','wonder','thumbs_up','positive\x20review','satisfaction\x20reward','praise\x20reward'],d=c['some'](e=>b['includes'](e['toLowerCase']()));if(d)return null;return{'id':'R-R-6-02','level':'MEDIUM','category':'business_semantic','title':'Guard\x20checks\x20wonder\x20node\x20but\x20intent\x20does\x20not\x20mention\x20praise','description':'Guard\x27s\x20expected\x20progress\x20state\x20is\x20\x22wonder\x22\x20(positive-review\x20node),\x20but\x20the\x20user\x20intent\x20'+'does\x20not\x20mention\x20any\x20praise/positive-review\x20keyword.\x20This\x20may\x20be\x20a\x20copy-paste\x20from\x20a\x20wonder_praise\x20'+'template\x20without\x20adjusting\x20the\x20Guard\x20for\x20the\x20actual\x20business\x20semantics.\x20If\x20this\x20is\x20a\x20'+'general\x20feedback\x20reward\x20(wonder_feedback),\x20this\x20is\x20fine.\x20Otherwise,\x20verify\x20the\x20node\x20choice.','affected_stakeholders':['owner'],'scenario':'Designer\x20copies\x20wonder_praise\x20template\x20but\x20actually\x20wants\x20a\x20completion-based\x20reward','mitigation':'Verify:\x20if\x20intent\x20is\x20praise\x20reward,\x20add\x20\x27praise/positive\x20review\x27\x20to\x20description.\x20'+'If\x20intent\x20is\x20completion-based\x20reward,\x20change\x20Guard\x20to\x20check\x20\x27completed\x27\x20node.','evidence':'expected_state=\x22wonder\x22,\x20intent=\x22'+b+'\x22\x20(no\x20praise\x20keyword)','auto_fixable':![]};}},R_R_7_01={'id':'R-R-7-01','category':'fund_recovery','trigger':'coin_add/receive\x20(deposit)\x20or\x20guard_add\x20without\x20an\x20owner\x20fund-recovery\x20escape\x20guard','check':a=>{const b=!!(a['coin_add']||a['receive']),c=a['guard_add']??[];if(!b&&c['length']===0x0)return null;const d=c['some'](e=>{const f=!!e['recipient']&&typeof e['recipient']==='object'&&'Signer'in e['recipient'],h=String(e['amount']?.['type'])==='GuardU64Identifier';return f&&h;});if(d)return null;return{'id':'R-R-7-01','level':b?'MEDIUM':'LOW','category':'fund_recovery','title':'No\x20owner\x20fund-recovery\x20escape\x20guard\x20on\x20this\x20Reward','description':'claim()\x20is\x20the\x20ONLY\x20exit\x20from\x20the\x20Reward\x27s\x20balance\x20field\x20(reward.move),\x20and\x20none\x20of\x20the\x20guards\x20being\x20'+'configured\x20is\x20an\x20owner\x20escape\x20hatch\x20—\x20any\x20unclaimed\x20remainder\x20stays\x20locked\x20forever.\x20Note:\x20owner_receive\x20'+'(op\x20156)\x20does\x20NOT\x20help\x20here:\x20it\x20only\x20extracts\x20objects\x20the\x20Reward\x20RECEIVED\x20via\x20transfer\x20'+'(Receiving<CoinWrapper<K>>\x20or\x20NFT-like\x20objects)\x20to\x20the\x20Permission\x20owner\x20and\x20never\x20touches\x20balance;\x20'+'receive\x20(op\x20154)\x20is\x20what\x20joins\x20payments\x20into\x20balance.\x20This\x20is\x20a\x20configuration\x20gap,\x20not\x20a\x20contract\x20defect.','affected_stakeholders':['owner'],'scenario':'A\x20marketing\x20Reward\x20is\x20fully\x20consumed\x20by\x20guards,\x20the\x20campaign\x20ends\x20with\x20a\x20residual\x20balance,\x20and\x20the\x20'+'merchant\x20has\x20no\x20guard\x20that\x20lets\x20them\x20reclaim\x20it.','mitigation':'Add\x20an\x20escape\x20guard\x20alongside\x20the\x20other\x20guards:\x20'+'(1)\x20Guard:\x20logic_and(logic_equal(query(1002\x20permission.owner\x20[permission_address]),\x20Signer),\x20'+'logic_greater_equal(Clock,\x20<unlock_time>))\x20—\x20verifies\x20the\x20tx\x20sender\x20is\x20the\x20live\x20Permission\x20owner,\x20with\x20'+'the\x20Clock\x20comparison\x20acting\x20as\x20the\x20lock\x20period\x20(e.g.\x2030\x20days);\x20'+'(2)\x20RewardGuard\x20entry:\x20recipient=Signer,\x20amount=GuardU64Identifier(u8\x20submission\x20mark),\x20'+'expiration_time=unlock_time\x20+\x20claim\x20window\x20(or\x20None)\x20—\x20remember\x20the\x20contract\x20asserts\x20'+'clock\x20<=\x20expiration_time,\x20i.e.\x20expiration\x20is\x20the\x20last\x20claimable\x20moment,\x20not\x20the\x20unlock\x20moment;\x20'+'(3)\x20after\x20unlock\x20the\x20owner\x20claims\x20by\x20submitting\x20the\x20full\x20remaining\x20balance\x20to\x20recover\x20100%.','evidence':'deposit='+b+',\x20guard_add='+c['length']+',\x20'+'escape=false\x20(no\x20entry\x20with\x20Signer\x20recipient\x20+\x20GuardU64Identifier\x20amount)','auto_fixable':![]};}},ALL_RULES=[R_R_1_01,R_R_1_02,R_R_1_03,R_R_2_01,R_R_2_02,R_R_2_03,R_R_2_04,R_R_3_01,R_R_3_02,R_R_3_03,R_R_4_01,R_R_4_02,R_R_4_03,R_R_4_04,R_R_5_01,R_R_5_02,R_R_5_03,R_R_6_01,R_R_6_02,R_R_7_01];export const REWARD_RISK_VERSION='1.0.0';export function getAllRewardRiskRules(){return[...ALL_RULES];}export function getRewardRiskRulesCount(){return ALL_RULES['length'];}export function getRewardRiskRulesByCategory(a){return ALL_RULES['filter'](b=>b['category']===a);}export function assessRewardRisks(a){const b=[];for(const f of ALL_RULES){const g=f['check'](a);if(g)b['push'](g);}const c=b['length']===0x0?'LOW':b['some'](h=>h['level']==='CRITICAL')?'CRITICAL':b['some'](h=>h['level']==='HIGH')?'HIGH':b['some'](h=>h['level']==='MEDIUM')?'MEDIUM':'LOW',d={};for(const h of b){d[h['category']]=(d[h['category']]??0x0)+0x1;}const e={};for(const i of b){for(const j of i['affected_stakeholders']){if(!e[j])e[j]=[];e[j]['push'](i['id']+':\x20'+i['mitigation']);}}return{'summary':'Assessed\x20'+b['length']+'\x20risk(s)\x20across\x20'+Object['keys'](d)['length']+'\x20categories','risks':b,'overall_risk':c,'risks_by_category':d,'stakeholder_advice':e,'needs_human_review':b['some'](k=>k['level']==='CRITICAL'||k['level']==='HIGH')};}export const REWARD_STAKEHOLDERS=['owner','claimer','service_provider','system'];export function getRewardRiskRulesByStakeholder(a){return ALL_RULES['filter'](b=>{if(a==='owner')return['structural','permission','lifecycle','business_semantic']['includes'](b['category']);if(a==='claimer')return b['id']['startsWith']('R-R-4-0')||b['id']==='R-R-5-01'||b['id']==='R-R-1-02'||b['id']==='R-R-6-01';if(a==='service_provider')return b['id']==='R-R-4-02'||b['id']==='R-R-3-01'||b['id']==='R-R-3-02'||b['id']==='R-R-6-01';if(a==='system')return b['category']==='cross_object';return![];});}
|
|
1
|
+
import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook}from'../config/rule-engine.js';import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';import{resolveGuardConstructor}from'./reward-ledger.js';const AUTO_FIXABLE=new Set(['R-R-1-03','R-R-2-03','R-R-4-04']),RELATED_MOVE_ERROR={'R-R-1-01':'E_GUARD_COUNT_EXCEEDED\x20(3)','R-R-1-02':'E_RECORD_COUNT_EXCEEDED\x20(8)','R-R-2-01':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','R-R-2-02':'E_AMOUNT_NOT_U64\x20(5)','R-R-2-03':'E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)','R-R-4-02':'E_INSUFFICIENT_BALANCE\x20(6)','R-R-4-03':'E_GUARD_LOCKED_TIME\x20(10)','R-R-4-04':'E_GUARD_LOCKED_TIME_INVALID\x20(11)','R-R-5-01':'E_GUARD_NOT_FOUND\x20(7)'},PRAISE_KEYWORDS=['praise','wonder','thumbs_up','positive\x20review','satisfaction\x20reward','praise\x20reward'],ONE_YEAR_MS=0x16d*0x18*0x3c*0x3c*0x3e8;export function rewardRiskFacts(a){const b=a['guard_add']??[],c=a['current_guard_count']??0x0,d=b['length']>0x0?c+b['length']:undefined;let e,f,h,j,k,l,m,n,o,p,q;const r=[],s={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'};for(let C=0x0;C<b['length'];C++){const D=b[C];if(!D||typeof D!=='object')continue;const E=D['recipient'],F=!!E&&typeof E==='object'&&!Array['isArray'](E);F&&'GuardIdentifier'in E&&r['push'](D['guard']);e===undefined&&F&&'GuardIdentifier'in E&&a['passport_identifier_is_address']&&a['passport_identifier_is_address'][E['GuardIdentifier']]===![]&&(e=C,f=E['GuardIdentifier']);const G=D['amount'],H=String(G?.['type'])['toUpperCase']();h===undefined&&(H==='GUARDU64IDENTIFIER'||H==='GUARD_U64_IDENTIFIER')&&typeof G?.['value']==='number'&&a['passport_submission_value_types']&&a['passport_submission_value_types'][G['value']]!=='u64'&&(h=C,j=G['value'],k=a['passport_submission_value_types'][G['value']]??'unknown');l===undefined&&D['store_from_id']!=null&&a['guard_store_from_id_compatible']&&a['guard_store_from_id_compatible'][D['guard']]===![]&&(l=C,m=D['guard'],n=D['store_from_id']);if(o===undefined&&F&&D['amount']!=null&&typeof D['amount']==='object'){const I=Object['keys'](E)[0x0],J=s[I],K=H==='FIXED'?'Fixed':'GuardU64Identifier';!resolveGuardConstructor(J,K)&&(o=C,p=String(J),q=String(K));}}let t=![];if(a['current_balance']!==undefined&&a['current_guard_count']!==undefined)try{t=BigInt(a['current_balance'])===0x0n;}catch{t=![];}const u=a['current_guard_not_added_expiration_time'],v=a['current_clock_ms'],w=a['target_guard_addresses']!=null?a['target_guard_addresses']['join'](','):'',x=(a['user_intent_phrases']??[])['join']('\x20')['toLowerCase'](),y=PRAISE_KEYWORDS['some'](L=>x['includes'](L['toLowerCase']())),z=a['guard_expected_progress_state'],A=!!(a['coin_add']||a['receive']),B=b['some'](L=>{const M=L;if(!M||typeof M!=='object')return![];const N=M['recipient'],O=!!N&&typeof N==='object'&&'Signer'in N,P=String(M['amount']?.['type'])==='GuardU64Identifier';return O&&P;});return{'claim':a['claim'],'guard_add_count':b['length'],'guard_current':c,'guard_total':d,'guard_count_would_exceed':b['length']>0x0&&c+b['length']>MAX_GUARD_COUNT_REWARD,'guard_batch_over_limit':b['length']>MAX_GUARD_COUNT_REWARD,'max_guard_count':MAX_GUARD_COUNT_REWARD,'record_count':a['current_record_count_for_recipient']??0x0,'record_count_at_limit':(a['current_record_count_for_recipient']??0x0)>=MAX_RECORD_COUNT_REWARD,'max_record_count':MAX_RECORD_COUNT_REWARD,...e===undefined?{}:{'first_non_address_identifier_index':e,'first_non_address_identifier_id':f},...h===undefined?{}:{'first_non_u64_amount_index':h,'first_non_u64_amount_id':j,'first_non_u64_amount_value_type':k},...l===undefined?{}:{'first_incompatible_store_from_id_index':l,'first_incompatible_store_from_id_guard':m,'first_incompatible_store_from_id_value':n},...o===undefined?{}:{'first_invalid_pairing_index':o,'first_invalid_pairing_recipient':p,'first_invalid_pairing_amount':q},'guard_identifier_recipients_display':r['join'](',\x20'),'owner_receive_set':a['owner_receive']!=null,...a['guard_expiration_time']===undefined?{}:{'new_lock_time':a['guard_expiration_time']},...v===undefined?{}:{'current_clock':v},'guard_lock_exceeds_year':a['guard_expiration_time']!=null&&v!==undefined&&a['guard_expiration_time']-v>ONE_YEAR_MS,'balance_is_zero':t,...u==null?{}:{'lock_until':u},'guard_add_blocked_by_lock':b['length']>0x0&&u!=null&&v!==undefined&&v<=u,'lock_time_in_past':a['guard_expiration_time']!=null&&v!==undefined&&a['guard_expiration_time']<=v,'known_guards_display':w,'claim_guard_not_in_targets':!!a['claim']&&a['target_guard_addresses']!=null&&!a['target_guard_addresses']['includes'](a['claim']),'reward_type':a['reward_type'],'coin_type':a['coin_add']?.['coin_type'],'coin_type_mismatch':!!a['coin_add']&&!!a['reward_type']&&a['coin_add']['coin_type']!==a['reward_type'],'payment_token_type':a['receive']?.['token_type'],'payment_token_mismatch':!!a['receive']&&!!a['reward_type']&&a['receive']['token_type']!==a['reward_type'],...a['user_intent_phrases']?.['length']?{'intent_display':x}:{},'expected_progress_state':z,'praise_intent_wrong_node':(a['user_intent_phrases']?.['length']??0x0)>0x0&&!!z&&y&&a['machine_has_wonder_node']!==![]&&z!=='wonder','wonder_node_without_praise_intent':(a['user_intent_phrases']?.['length']??0x0)>0x0&&z==='wonder'&&!y,'has_deposit':A,'recovery_gap_present':(A||b['length']>0x0)&&!B,'always_true':!![]};}function rewardRuleBook(){const a=getJudgmentDoc()['rules']['domains']['reward'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27reward\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToRewardRisk(a){const b=RELATED_MOVE_ERROR[a['rule_id']];return{'id':a['rule_id'],'level':a['level'],'category':a['dimension']??'semantic','title':a['title'],'description':a['description'],'affected_stakeholders':a['stakeholders']??[],'scenario':a['scenario']??'','mitigation':a['mitigation']??'','evidence':a['evidence'],...b===undefined?{}:{'related_move_error':b},'auto_fixable':AUTO_FIXABLE['has'](a['rule_id']),...a['exposure']!=null?{'exposure':a['exposure']}:{}};}export const REWARD_RISK_VERSION='1.1.0';export function getAllRewardRiskRules(){const a=factoryRulePack('reward');if(!a)return[];return a['rules']['map'](b=>({'id':b['rule_id'],'category':b['dimension']??'semantic','trigger':b['trigger']??'','check':c=>{const d=rewardRuleBook()['find'](f=>f['rule_id']===b['rule_id']);if(!d)return null;const {findings:e}=evaluateRuleBook([d],rewardRiskFacts(c));return e['length']>0x0?findingToRewardRisk(e[0x0]):null;}}));}export function assessRewardRisks(a){const {findings:b}=evaluateRuleBook(rewardRuleBook(),rewardRiskFacts(a)),c=b['map'](findingToRewardRisk),d=c['length']===0x0?'low':c['some'](g=>g['level']==='critical')?'critical':c['some'](g=>g['level']==='high')?'high':c['some'](g=>g['level']==='medium')?'medium':'low',e={};for(const g of c){e[g['category']]=(e[g['category']]??0x0)+0x1;}const f={};for(const h of c){for(const i of h['affected_stakeholders']){if(!f[i])f[i]=[];f[i]['push'](h['id']+':\x20'+h['mitigation']);}}return{'summary':'Assessed\x20'+c['length']+'\x20risk(s)\x20across\x20'+Object['keys'](e)['length']+'\x20categories','risks':c,'overall_risk':d,'risks_by_category':e,'stakeholder_advice':f,'needs_human_review':c['some'](j=>j['level']==='critical'||j['level']==='high')};}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type NodeAnalyzer } from "../graph/onchain/index.js";
|
|
2
|
+
export declare const MACHINE_RULE_NODE_ANALYZER_ID = "MK1";
|
|
3
|
+
export declare const machineRuleNodeAnalyzer: NodeAnalyzer;
|
|
4
|
+
export declare const GUARD_RULE_NODE_ANALYZER_ID = "GD1";
|
|
5
|
+
export declare const guardRuleNodeAnalyzer: NodeAnalyzer;
|
|
6
|
+
export declare const PERMISSION_RULE_NODE_ANALYZER_ID = "PM1";
|
|
7
|
+
export declare const permissionRuleNodeAnalyzer: NodeAnalyzer;
|
|
8
|
+
export declare const ALLOCATION_RULE_NODE_ANALYZER_ID = "AL1";
|
|
9
|
+
export declare function allocationPackRisks(puzzle: unknown): unknown[];
|
|
10
|
+
export declare const allocationRuleNodeAnalyzer: NodeAnalyzer;
|
|
11
|
+
export declare const TREASURY_RULE_NODE_ANALYZER_ID = "TR1";
|
|
12
|
+
export declare const treasuryRuleNodeAnalyzer: NodeAnalyzer;
|
|
13
|
+
export declare const ARBITRATION_RULE_NODE_ANALYZER_ID = "AR1";
|
|
14
|
+
export declare const arbitrationRuleNodeAnalyzer: NodeAnalyzer;
|
|
15
|
+
export declare const ARB_L3_RULE_NODE_ANALYZER_ID = "AR3";
|
|
16
|
+
export declare const arbL3RuleNodeAnalyzer: NodeAnalyzer;
|
|
17
|
+
export declare const REWARD_RULE_NODE_ANALYZER_ID = "RW1";
|
|
18
|
+
export declare const rewardRuleNodeAnalyzer: NodeAnalyzer;
|
|
19
|
+
export declare const PROGRESS_RULE_NODE_ANALYZER_ID = "PR1";
|
|
20
|
+
export declare const progressRuleNodeAnalyzer: NodeAnalyzer;
|
|
21
|
+
export declare const ORDER_RULE_NODE_ANALYZER_ID = "OR1";
|
|
22
|
+
export declare const orderRuleNodeAnalyzer: NodeAnalyzer;
|
|
23
|
+
export declare const CONTACT_RULE_NODE_ANALYZER_ID = "CT1";
|
|
24
|
+
export declare const contactRuleNodeAnalyzer: NodeAnalyzer;
|
|
25
|
+
export declare const REPOSITORY_RULE_NODE_ANALYZER_ID = "RP1";
|
|
26
|
+
export declare const repositoryRuleNodeAnalyzer: NodeAnalyzer;
|
|
27
|
+
export declare const DEMAND_RULE_NODE_ANALYZER_ID = "DM1";
|
|
28
|
+
export declare const demandRuleNodeAnalyzer: NodeAnalyzer;
|
|
29
|
+
export declare const PAYMENT_RULE_NODE_ANALYZER_ID = "PY1";
|
|
30
|
+
export declare const paymentRuleNodeAnalyzer: NodeAnalyzer;
|
|
31
|
+
export declare const PROOF_RULE_NODE_ANALYZER_ID = "PF1";
|
|
32
|
+
export declare const proofRuleNodeAnalyzer: NodeAnalyzer;
|
|
33
|
+
export declare const RESOURCE_RULE_NODE_ANALYZER_ID = "RS1";
|
|
34
|
+
export declare const resourceRuleNodeAnalyzer: NodeAnalyzer;
|
|
35
|
+
export declare const PERSONAL_RULE_NODE_ANALYZER_ID = "PS1";
|
|
36
|
+
export declare const personalRuleNodeAnalyzer: NodeAnalyzer;
|
|
37
|
+
export declare const UTIL_RULE_NODE_ANALYZER_ID = "UT1";
|
|
38
|
+
export declare const utilRuleNodeAnalyzer: NodeAnalyzer;
|
|
39
|
+
export declare const REGISTRAR_RULE_NODE_ANALYZER_ID = "RG1";
|
|
40
|
+
export declare const registrarRuleNodeAnalyzer: NodeAnalyzer;
|
|
41
|
+
export declare const BRIDGE_RULE_NODE_ANALYZER_ID = "BR1";
|
|
42
|
+
export declare const bridgeRuleNodeAnalyzer: NodeAnalyzer;
|
|
43
|
+
export declare const RULE_NODE_ANALYZERS: NodeAnalyzer[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{adaptNodeAnalyzer}from'../graph/onchain/index.js';import{assessMachineRisks}from'./machine-risk.js';import{runGuardRulePack}from'./guard-risk.js';import{assessPermissionRisks}from'./permission-risk.js';import{assessAllocationRisks}from'./allocation-risk.js';import{assessTreasuryRisks}from'./treasury-risk.js';import{assessArbitrationRisks}from'./arbitration-risk.js';import{checkArbRisks}from'./arb-risk.js';import{assessRewardRisks}from'./reward-risk.js';import{assessProgressRisks}from'./progress-risk.js';import{assessOrderRisks}from'./order-risk.js';import{checkContactRisks}from'./contact-risk.js';import{checkRepositoryRisks}from'./repository-risk.js';import{checkDemandRisks}from'./demand-risk.js';import{checkPaymentRisks}from'./payment-risk.js';import{checkProofRisks}from'./proof-risk.js';import{checkResourceRisks}from'./resource-risk.js';import{checkPersonalRisks}from'./personal-risk.js';import{checkUtilRisks}from'./util-risk.js';import{checkRegistrarRisks}from'./registrar-risk.js';import{checkBridgeRisks}from'./bridge-risk.js';import{puzzlePayloadOf,recipientAuditRisks,riskToOutcome,safeRunPack}from'./rule-outcome.js';import{projectAllocationPuzzle,PUZZLE_PROJECTIONS}from'./puzzle-projections.js';import{serviceRiskNodeAnalyzer}from'./service-risk-node.js';import{serviceAllocatorAuditNodeAnalyzer}from'./service-allocator-audit-node.js';import{industryRuleNodeAnalyzer}from'./industry-rule-node.js';function packInspect(a,b,c){return(e,f)=>{const g=puzzlePayloadOf(e);if(g){const j=c?.['projectPuzzle']?c['projectPuzzle'](g):g;return safeRunPack(()=>a(j),j)['map'](k=>riskToOutcome(k,'derived',c?.['carryNative']??![]));}const h=e['raw'],i=h?.['data']??h;if(!i||!b)return[];return b(i,e,f)['map'](k=>riskToOutcome(k,'exact'));};}export const MACHINE_RULE_NODE_ANALYZER_ID='MK1';export const machineRuleNodeAnalyzer=adaptNodeAnalyzer({'id':MACHINE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Machine','inspect':packInspect(a=>safeRunPack(b=>assessMachineRisks(b,{}),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['machine']})});export const GUARD_RULE_NODE_ANALYZER_ID='GD1';export const guardRuleNodeAnalyzer=adaptNodeAnalyzer({'id':GUARD_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Guard','inspect':packInspect(a=>safeRunPack(b=>runGuardRulePack(b),a),undefined,{'carryNative':!![],'projectPuzzle':PUZZLE_PROJECTIONS['guard']})});export const PERMISSION_RULE_NODE_ANALYZER_ID='PM1';export const permissionRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PERMISSION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Permission','inspect':packInspect(a=>safeRunPack(b=>assessPermissionRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['permission']})});export const ALLOCATION_RULE_NODE_ANALYZER_ID='AL1';export function allocationPackRisks(a){const b=projectAllocationPuzzle(a);return[...safeRunPack(d=>assessAllocationRisks(d),b),...recipientAuditRisks(b)];}export const allocationRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ALLOCATION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Allocation','inspect':packInspect(allocationPackRisks)});export const TREASURY_RULE_NODE_ANALYZER_ID='TR1';export const treasuryRuleNodeAnalyzer=adaptNodeAnalyzer({'id':TREASURY_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Treasury','inspect':packInspect(a=>safeRunPack(b=>assessTreasuryRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['treasury']})});export const ARBITRATION_RULE_NODE_ANALYZER_ID='AR1';export const arbitrationRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ARBITRATION_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Arb','inspect':packInspect(a=>safeRunPack(b=>assessArbitrationRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['arbitration']})});export const ARB_L3_RULE_NODE_ANALYZER_ID='AR3';export const arbL3RuleNodeAnalyzer=adaptNodeAnalyzer({'id':ARB_L3_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Arb','inspect':packInspect(a=>safeRunPack(b=>checkArbRisks(b),a))});export const REWARD_RULE_NODE_ANALYZER_ID='RW1';export const rewardRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REWARD_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Reward','inspect':packInspect(a=>safeRunPack(b=>assessRewardRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['reward']})});export const PROGRESS_RULE_NODE_ANALYZER_ID='PR1';export const progressRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PROGRESS_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Progress','inspect':packInspect(a=>safeRunPack(b=>assessProgressRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['progress']})});export const ORDER_RULE_NODE_ANALYZER_ID='OR1';export const orderRuleNodeAnalyzer=adaptNodeAnalyzer({'id':ORDER_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Order','inspect':packInspect(a=>safeRunPack(b=>assessOrderRisks(b),a),undefined,{'projectPuzzle':PUZZLE_PROJECTIONS['order']})});export const CONTACT_RULE_NODE_ANALYZER_ID='CT1';export const contactRuleNodeAnalyzer=adaptNodeAnalyzer({'id':CONTACT_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Contact','inspect':packInspect(a=>safeRunPack(b=>checkContactRisks(b),a))});export const REPOSITORY_RULE_NODE_ANALYZER_ID='RP1';export const repositoryRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REPOSITORY_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Repository','inspect':packInspect(a=>safeRunPack(b=>checkRepositoryRisks(b),a))});export const DEMAND_RULE_NODE_ANALYZER_ID='DM1';export const demandRuleNodeAnalyzer=adaptNodeAnalyzer({'id':DEMAND_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Demand','inspect':packInspect(a=>safeRunPack(b=>checkDemandRisks(b),a))});export const PAYMENT_RULE_NODE_ANALYZER_ID='PY1';export const paymentRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PAYMENT_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Payment','inspect':packInspect(a=>safeRunPack(b=>checkPaymentRisks(b),a))});export const PROOF_RULE_NODE_ANALYZER_ID='PF1';export const proofRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PROOF_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Proof','inspect':packInspect(a=>safeRunPack(b=>checkProofRisks(b),a))});export const RESOURCE_RULE_NODE_ANALYZER_ID='RS1';export const resourceRuleNodeAnalyzer=adaptNodeAnalyzer({'id':RESOURCE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Resource','inspect':packInspect(a=>safeRunPack(b=>checkResourceRisks(b),a))});export const PERSONAL_RULE_NODE_ANALYZER_ID='PS1';export const personalRuleNodeAnalyzer=adaptNodeAnalyzer({'id':PERSONAL_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Personal','inspect':packInspect(a=>safeRunPack(b=>checkPersonalRisks(b),a))});export const UTIL_RULE_NODE_ANALYZER_ID='UT1';export const utilRuleNodeAnalyzer=adaptNodeAnalyzer({'id':UTIL_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Util','inspect':packInspect(a=>safeRunPack(b=>checkUtilRisks(b),a))});export const REGISTRAR_RULE_NODE_ANALYZER_ID='RG1';export const registrarRuleNodeAnalyzer=adaptNodeAnalyzer({'id':REGISTRAR_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'EntityRegistrar','inspect':packInspect(a=>safeRunPack(b=>checkRegistrarRisks(b),a))});export const BRIDGE_RULE_NODE_ANALYZER_ID='BR1';export const bridgeRuleNodeAnalyzer=adaptNodeAnalyzer({'id':BRIDGE_RULE_NODE_ANALYZER_ID,'kind':'risk','objectType':'Bridge','inspect':packInspect(a=>safeRunPack(b=>checkBridgeRisks(b),a))});export const RULE_NODE_ANALYZERS=[serviceRiskNodeAnalyzer,serviceAllocatorAuditNodeAnalyzer,industryRuleNodeAnalyzer,machineRuleNodeAnalyzer,guardRuleNodeAnalyzer,permissionRuleNodeAnalyzer,allocationRuleNodeAnalyzer,treasuryRuleNodeAnalyzer,arbitrationRuleNodeAnalyzer,arbL3RuleNodeAnalyzer,rewardRuleNodeAnalyzer,progressRuleNodeAnalyzer,orderRuleNodeAnalyzer,contactRuleNodeAnalyzer,repositoryRuleNodeAnalyzer,demandRuleNodeAnalyzer,paymentRuleNodeAnalyzer,proofRuleNodeAnalyzer,resourceRuleNodeAnalyzer,personalRuleNodeAnalyzer,utilRuleNodeAnalyzer,registrarRuleNodeAnalyzer,bridgeRuleNodeAnalyzer];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{readFileSync}from'node:fs';import{fileURLToPath}from'node:url';import{dirname,join}from'node:path';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'../graph/onchain/dataplane.js';import{expandTopology}from'../graph/onchain/expand.js';import{buildProposalGraph,buildViewport,runNodeAnalyzers}from'../graph/onchain/index.js';import{RISK_CASES}from'./baselines/risk-cases.js';import{RULE_NODE_ANALYZERS}from'./rule-node-analyzers.js';import{recipientAuditRisks}from'./rule-outcome.js';const REGISTRY_PACKS=new Set(['service','machine','guard','permission','allocation','treasury','arbitration','arb','reward','progress','order','contact','repository','demand','payment','proof','resource','personal','util','registrar','bridge']),CASES=RISK_CASES['filter'](a=>REGISTRY_PACKS['has'](a['pack'])),here=dirname(fileURLToPath(import.meta.url)),SNAPSHOT=JSON['parse'](readFileSync(join(here,'baselines','risk-baselines.json'),'utf-8'));function keysOf(a){return a['map'](b=>b['id']+':'+b['level']['toUpperCase']())['sort']();}async function migratedKeys(a,b){const d={[a['objectType']]:{'puzzle':b,'completeness':{},'missing_dimensions':[]}},e=await buildProposalGraph(d,{'network':ENTRYPOINT['Testnet']}),f=buildViewport(e,e['seed'],'neutral'),h=runNodeAnalyzers(f,RULE_NODE_ANALYZERS);return h['filter'](i=>i['ruleId']!=null)['map'](i=>i['ruleId']+':'+i['severity']['toUpperCase']())['sort']();}describe('rule-pack\x20node\x20analyzers\x20—\x20batch\x20A+B+C\x20parity\x20(T23/T24/T25)',()=>{it['each'](CASES['map'](a=>[a['pack'],a]))('TR-23.1/TR-24.1/TR-25.1\x20%s:\x20empty\x20round\x20reproduces\x20the\x20Task\x202\x20baseline',async(a,b)=>{const d=SNAPSHOT[a];expect(d)['toBeDefined'](),expect(await migratedKeys(b,b['empty']))['toEqual'](keysOf(d['empty']));}),it['each'](CASES['map'](a=>[a['pack'],a]))('TR-23.1/TR-24.1/TR-25.1\x20%s:\x20trigger\x20round\x20reproduces\x20the\x20Task\x202\x20baseline',async(a,b)=>{const d=SNAPSHOT[a];expect(d)['toBeDefined']();const e=await migratedKeys(b,b['trigger']);if(a==='allocation'){const f=e['filter'](h=>h['startsWith']('R-A-'));expect(f)['toEqual'](keysOf(d['trigger']));const g=e['filter'](h=>h['startsWith']('RC-FIND-'));expect(g['length'])['toBeGreaterThan'](0x0),expect(g)['toEqual'](recipientAuditRisks(b['trigger'])['map'](h=>{const i=h??{};return String(i['id'])+':'+String(i['level'])['toUpperCase']();})['sort']());return;}expect(e)['toEqual'](keysOf(d['trigger']));});}),describe('rule-pack\x20exposure\x20attribution\x20passthrough\x20(Phase\x202)',()=>{const a=CASES['find'](d=>d['pack']==='treasury')['run'];function b(c,d=a){const e=d(c),f=Array['isArray'](e)?e:e?.['risks']??e?.['detected_risks'];return f??[];}it('R-T-3-03:\x20delegated\x20withdraw-guard\x20management\x20carries\x20the\x20gated\x20viable\x20gain\x20path',()=>{const c=b({'current_permission_indexes_granted':[0x100]})['find'](d=>d['id']==='R-T-3-03');expect(c)['toBeDefined'](),expect(c['exposure'])['toBeDefined'](),expect(c['exposure']['lossParties'][0x0]['role'])['toBe']('merchant'),expect(c['exposure']['gainPaths'][0x0]['viability'])['toBe']('viable'),expect(c['exposure']['verdict'])['toBe']('confirmed');}),it('R-T-5-02:\x20missing\x20receive\x20permission\x20is\x20a\x20shortfall\x20defect\x20(no\x20gainer,\x20never\x20downgraded)',()=>{const c=b({'current_permission_indexes_granted':[0xfa],'shared_with_allocator':!![]})['find'](d=>d['id']==='R-T-5-02');expect(c)['toBeDefined'](),expect(c['exposure'])['toBeDefined'](),expect(c['exposure']['lossParties'][0x0]['role'])['toBe']('merchant'),expect(c['exposure']['gainPaths'])['toEqual']([]),expect(c['exposure']['verdict'])['toBe']('confirmed');}),it('notice-class\x20rules\x20stay\x20unattributed\x20(R-T-1-01\x20description\x20over\x20limit)',()=>{const c=b({'description':'x'['repeat'](0xfa1)})['find'](d=>d['id']==='R-T-1-01');expect(c)['toBeDefined'](),expect(c['exposure'])['toBeUndefined']();}),it('R-A-1-01:\x20empty\x20allocators\x20is\x20a\x20shortfall\x20defect\x20(buyer+merchant\x20loss,\x20no\x20gainer)',()=>{const c=CASES['find'](g=>g['pack']==='allocation')['run'],d=c({'allocators_config':{'allocators':[]}}),e=Array['isArray'](d)?d:d?.['risks']??d?.['detected_risks'],f=(e??[])['find'](g=>g['id']==='R-A-1-01');expect(f)['toBeDefined'](),expect(f['exposure'])['toBeDefined'](),expect(f['exposure']['lossParties']['map'](g=>g['role'])['sort']())['toEqual'](['buyer','merchant']),expect(f['exposure']['gainPaths'])['toEqual']([]),expect(f['exposure']['verdict'])['toBe']('confirmed');}),it('R-S-2-01:\x20unpinned\x20WIP\x20content\x20—\x20buyer\x20loses,\x20merchant\x20substitution\x20rides\x20the\x20viable\x20payment\x20flow',()=>{const c=CASES['find'](e=>e['pack']==='service')['run'],d=b({'sales':{'op':'add','sales':[{'name':'sku','wip':'https://example.com/a.wip','wip_hash':''}]}},c)['find'](e=>e['id']==='R-S-2-01');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties'][0x0]['role'])['toBe']('buyer'),expect(d['exposure']['gainPaths'][0x0]['role'])['toBe']('merchant'),expect(d['exposure']['gainPaths'][0x0]['viability'])['toBe']('viable'),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-S-5-05:\x20funded\x20without\x20arbitration\x20is\x20a\x20shortfall\x20defect\x20(buyer\x20loss,\x20no\x20gainer)',()=>{const c=CASES['find'](e=>e['pack']==='service')['run'],d=b({'current_compensation_fund_balance':'100','current_arbitrations_count':0x0},c)['find'](e=>e['id']==='R-S-5-05');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties'][0x0]['role'])['toBe']('buyer'),expect(d['exposure']['gainPaths'])['toEqual']([]),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-R-2-05:\x20unconstrained\x20GuardIdentifier\x20recipient\x20slot\x20—\x20conditional\x20pool-drain\x20path',()=>{const c=CASES['find'](e=>e['pack']==='reward')['run'],d=b({'guard_add':[{'guard':'0xg1','recipient':{'GuardIdentifier':0x7},'amount':{'type':'Fixed','value':'100'}}]},c)['find'](e=>e['id']==='R-R-2-05');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties'][0x0]['role'])['toBe']('merchant'),expect(d['exposure']['gainPaths'][0x0]['role'])['toBe']('neutral'),expect(d['exposure']['gainPaths'][0x0]['viability'])['toBe']('conditional'),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-R-7-01:\x20no\x20owner\x20escape\x20guard\x20is\x20a\x20shortfall\x20defect\x20(merchant\x20budget\x20locked,\x20no\x20gainer)',()=>{const c=CASES['find'](e=>e['pack']==='reward')['run'],d=b({'coin_add':{'amount':'100','coin_type':'0x2::sui::SUI'}},c)['find'](e=>e['id']==='R-R-7-01');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties'][0x0]['role'])['toBe']('merchant'),expect(d['exposure']['gainPaths'])['toEqual']([]),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-M1-02:\x20no\x20terminal\x20node\x20is\x20a\x20topology\x20freeze\x20(buyer+merchant\x20loss,\x20no\x20gainer)',()=>{const c=CASES['find'](e=>e['pack']==='machine')['run'],d=b({'pairs':[],'nodes':[]},c)['find'](e=>e['rule_id']==='R-M1-02');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties']['map'](e=>e['role'])['sort']())['toEqual'](['buyer','merchant']),expect(d['exposure']['gainPaths'])['toEqual']([]),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-X1-07:\x20overstuffed\x20usage_guard\x20is\x20a\x20dispute-access\x20shortfall\x20(buyer\x20loss,\x20no\x20gainer)',()=>{const c=CASES['find'](e=>e['pack']==='guard')['run'],d=b({'table':[],'root':{'type':'logic_and','nodes':[{'type':'logic_and','nodes':[{'type':'identifier','value':0x0},{'type':'identifier','value':0x0}]},{'type':'logic_and','nodes':[{'type':'identifier','value':0x0},{'type':'identifier','value':0x0}]},{'type':'identifier','value':0x0}]},'scene':{'id':'arbitration_usage_guard','host_object':'Arbitration','binding_field':'usage_guard'}},c)['find'](e=>e['id']==='R-X1-07');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties'][0x0]['role'])['toBe']('buyer'),expect(d['exposure']['gainPaths'])['toEqual']([]),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-O-3-03:\x20arb_claim_compensation\x20is\x20a\x20recourse-exhaustion\x20shortfall\x20(buyer\x20loss,\x20no\x20gainer)',()=>{const c=CASES['find'](e=>e['pack']==='order')['run'],d=b({'operation':'arb_claim_compensation'},c)['find'](e=>e['id']==='R-O-3-03');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties']['map'](e=>e['role']))['toEqual'](['buyer']),expect(d['exposure']['gainPaths'])['toEqual']([]),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-PAYMENT-01:\x20unchecked\x20unwrap\x20is\x20an\x20unblockable\x20mismatched-release\x20path\x20(neutral\x20viable\x20gainer)',()=>{const c=CASES['find'](e=>e['pack']==='payment')['run'],d=b({'uses_unsafe_unwrap':!![]},c)['find'](e=>e['id']==='R-PAYMENT-01');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties']['map'](e=>e['role'])['sort']())['toEqual'](['buyer','merchant']),expect(d['exposure']['gainPaths'][0x0]['role'])['toBe']('neutral'),expect(d['exposure']['gainPaths'][0x0]['viability'])['toBe']('viable'),expect(d['exposure']['verdict'])['toBe']('confirmed');}),it('R-AB-3-01:\x20dominant\x20vote\x20weight\x20is\x20a\x20capture-conditional\x20payout-steering\x20path',()=>{const c=CASES['find'](e=>e['pack']==='arbitration')['run'],d=b({'voting_guard':{'op':'add','guards':[{'guard':'0xg1','vote_weight':{'FixedValue':0x3c}},{'guard':'0xg2','vote_weight':{'FixedValue':0x28}}]}},c)['find'](e=>e['id']==='R-AB-3-01');expect(d)['toBeDefined'](),expect(d['exposure'])['toBeDefined'](),expect(d['exposure']['lossParties'][0x0]['role'])['toBe']('buyer'),expect(d['exposure']['gainPaths'][0x0]['role'])['toBe']('neutral'),expect(d['exposure']['gainPaths'][0x0]['viability'])['toBe']('conditional'),expect(d['exposure']['verdict'])['toBe']('confirmed');});}),describe('rule-pack\x20node\x20analyzers\x20—\x20on-chain\x20fixtures\x20(T23/T24/T25)',()=>{it('TR-23.2\x20SR1\x20state\x20rules\x20fire\x20on\x20a\x20fetched\x20on-chain\x20Service\x20through\x20the\x20unified\x20list',async()=>{const a='0x'+'14'+'cd'['repeat'](0x1f),b=new FakeDataPlane({'objects':new Map([[a['toLowerCase'](),{'object':a,'type':'Service','data':{'bPublished':!![],'bPaused':!![],'compensation_fund':'9','arbitrations':[]}}]]),'keyedFields':new Map(),'tables':new Map()}),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':a,'edges':{'tableEdges':['machine.node']}}),d=buildViewport(c,a['toLowerCase'](),'neutral'),e=runNodeAnalyzers(d,RULE_NODE_ANALYZERS),f=e['filter'](h=>h['id']['startsWith']('SR1:'));expect(f)['toHaveLength'](0x2),expect(f['every'](h=>h['detail']['includes']('R-S-4-05')||h['detail']['includes']('R-S-5-05')))['toBe'](!![]),expect(f['every'](h=>h['ruleId']===undefined))['toBe'](!![]),expect(f['every'](h=>h['source']===undefined))['toBe'](!![]),expect(e['filter'](h=>h['id']['startsWith']('MK1:')||h['id']['startsWith']('GD1:')||h['id']['startsWith']('PM1:')||h['id']['startsWith']('AL1:')||h['id']['startsWith']('TR1:')||h['id']['startsWith']('AR1:')||h['id']['startsWith']('AR3:')||h['id']['startsWith']('RW1:')||h['id']['startsWith']('PR1:')||h['id']['startsWith']('OR1:')||h['id']['startsWith']('CT1:')||h['id']['startsWith']('RP1:')||h['id']['startsWith']('DM1:')||h['id']['startsWith']('PY1:')||h['id']['startsWith']('PF1:')||h['id']['startsWith']('RS1:')||h['id']['startsWith']('PS1:')||h['id']['startsWith']('UT1:')||h['id']['startsWith']('RG1:')||h['id']['startsWith']('BR1:')))['toEqual']([]);}),it['each']([['Machine','15',{'pairs':[]}],['Guard','19',{'description':'chain\x20guard'}],['Permission','10',{'description':'chain\x20permission'}],['Allocation','18',{'description':'chain\x20allocation'}],['Treasury','1c',{'description':'chain\x20treasury'}],['Arb','11',{'description':'chain\x20arb'}],['Reward','12',{'description':'chain\x20reward'}],['Progress','13',{'description':'chain\x20progress'}],['Order','14',{'description':'chain\x20order'}],['Contact','1d',{'description':'chain\x20contact'}],['Repository','1e',{'description':'chain\x20repository'}],['Demand','1f',{'description':'chain\x20demand'}],['Payment','16',{'description':'chain\x20payment'}],['Resource','17',{'description':'chain\x20resource'}],['Proof','1a',{'description':'chain\x20proof'}],['EntityRegistrar','1b',{'description':'chain\x20registrar'}]])('TR-23.2\x20on-chain\x20%s:\x20packs\x20without\x20an\x20on-chain\x20projection\x20run\x20zero\x20rules\x20(honest\x20zero)',async(a,b,c)=>{const d='0x'+b+'ef'['repeat'](0x1f),e={'object':d,'type':a,'data':c},f=new FakeDataPlane({'objects':new Map([[d['toLowerCase'](),e]]),'keyedFields':new Map(),'tables':new Map()}),h=await expandTopology(f,{'network':ENTRYPOINT['Mainnet'],'seed':d,'edges':{'tableEdges':['machine.node']}});expect(h['nodes']['get'](d['toLowerCase']())?.['state'])['toBe']('fetched');const i=buildViewport(h,d['toLowerCase'](),'neutral');expect(runNodeAnalyzers(i,RULE_NODE_ANALYZERS))['toEqual']([]);});}),describe('rule-pack\x20node\x20analyzers\x20—\x20external\x20fact\x20nodes\x20(TR-25.1)',()=>{const a=CASES['find'](d=>d['pack']==='bridge'),b=CASES['find'](d=>d['pack']==='payment');it('TR-25.1\x20bridge\x20synthesizes\x20a\x20Bridge-typed\x20EXTERNAL\x20fact\x20node;\x20findings\x20stamp\x20source\x20external',async()=>{const c=await buildProposalGraph({'bridge':{'puzzle':a['trigger'],'completeness':{},'missing_dimensions':[]}},{'network':ENTRYPOINT['Testnet']}),d=c['nodes']['get']('proposal::bridge');expect(d?.['kind'])['toBe']('object'),expect(d?.['objectType'])['toBe']('Bridge'),expect(d?.['proposal']?.['provenance'])['toBe']('external');const e=buildViewport(c,'proposal::bridge','neutral'),f=runNodeAnalyzers(e,RULE_NODE_ANALYZERS)['filter'](h=>h['id']['startsWith']('BR1:'));expect(f['length'])['toBeGreaterThan'](0x0),expect(f['every'](h=>h['source']==='external'))['toBe'](!![]);}),it('TR-25.1\x20default\x20proposal\x20nodes\x20stay\x20intent\x20nodes\x20stamped\x20source\x20proposal',async()=>{const c=await buildProposalGraph({'payment':{'puzzle':b['trigger'],'completeness':{},'missing_dimensions':[]}},{'network':ENTRYPOINT['Testnet']}),d=c['nodes']['get']('proposal::payment');expect(d?.['objectType'])['toBe']('Payment'),expect(d?.['proposal']?.['provenance'])['toBeUndefined']();const e=buildViewport(c,'proposal::payment','neutral'),f=runNodeAnalyzers(e,RULE_NODE_ANALYZERS)['filter'](h=>h['id']['startsWith']('PY1:'));expect(f['length'])['toBeGreaterThan'](0x0),expect(f['every'](h=>h['source']==='proposal'))['toBe'](!![]);});});
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Confidence, NodeRuleOutcome, TopoNode } from "../graph/onchain/index.js";
|
|
2
|
+
export declare function riskToOutcome(risk: unknown, confidence: Confidence, carryNative?: boolean): NodeRuleOutcome;
|
|
3
|
+
export declare function safeRunPack(fn: (ctx: any) => unknown, ctx: unknown): unknown[];
|
|
4
|
+
export declare function puzzlePayloadOf(node: TopoNode): Record<string, unknown> | undefined;
|
|
5
|
+
export declare function recipientAuditRisks(puzzle: unknown): unknown[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{analyzeRecipientConstraints}from'./recipient-constraint.js';function severityOf(a){const b=String(a??'')['toUpperCase']();if(b==='CRITICAL')return'critical';if(b==='HIGH')return'high';if(b==='MEDIUM')return'medium';if(b==='LOW')return'low';return'info';}const STAKEHOLDER_ROLE={'owner':'merchant','provider':'merchant','admin':'merchant','customer':'buyer','user':'buyer','buyer':'buyer','arbitrator':'arbitrator','entity':'system','system':'system'};function stakeholderRoles(a){if(!Array['isArray'](a))return['neutral','merchant'];const b=[...new Set(a['map'](c=>STAKEHOLDER_ROLE[String(c?.['toLowerCase']?.()??c)])['filter'](Boolean))];return b['length']>0x0?b:['neutral','merchant'];}export function riskToOutcome(a,b,c=![]){const d=a??{},e=d['id']??d['risk_rule_id']??d['rule_id'],f=d['title']??d['message']??d['description']??d['trigger']??d['name'],g=d['mitigation']??d['fix_suggestion']??d['suggestion']??d['recommendation'],h=d['evidence']!=null?String(d['evidence']):'',i=[d['detail'],d['description'],d['explanation']]['map'](l=>typeof l==='string'?l:'')['find'](l=>l['length']>0x0)??'',j=[i,h?'Evidence:\x20'+h:'']['filter'](l=>l['length']>0x0)['join']('\x20—\x20'),k=e!=null?String(e):'?';return{'severity':severityOf(d['level']??d['severity']),'title':(typeof f==='string'&&f?f:'Risk\x20rule\x20'+k)+'\x20('+k+')','detail':j||'Risk\x20rule\x20'+k+'\x20triggered.','suggestion':typeof g==='string'?g:'','roles':stakeholderRoles(d['affected_stakeholders']),'confidence':b,'ruleId':k,...h?{'evidence':h}:{},...d['exposure']!=null?{'exposure':d['exposure']}:{},...c?{'nativeRisk':a}:{}};}export function safeRunPack(a,b){try{const c=a(b??{});if(Array['isArray'](c))return c;if(c&&typeof c==='object'){const d=c['risks'];if(Array['isArray'](d))return d;const e=c['detected_risks'];if(Array['isArray'](e))return e;}return[];}catch{return[];}}export function puzzlePayloadOf(a){if(!a['proposal'])return undefined;const b=a['raw'],c=b?.['data']??b;return c!=null&&typeof c==='object'?c:undefined;}export function recipientAuditRisks(a){try{const b=a??{},c=b['allocators_config'],d=c?.['allocators'];if(!Array['isArray'](d)||d['length']===0x0)return[];const e=analyzeRecipientConstraints({'trigger_source':b['trigger_source']??'service_order_allocators',...typeof b['host_service']==='string'?{'host_service':b['host_service']}:{},...typeof b['allocation']==='string'?{'allocation':b['allocation']}:{},'allocators':d['map'](f=>({'guard':f['guard'],'sharing':f['sharing']??[]})),'guards':b['guards']??{}});return e['findings']['map'](g=>({'id':g['code'],'level':g['resolution_required']&&g['severity']==='medium'?'high':g['severity'],'title':g['title'],'description':g['explanation'],'mitigation':g['mitigation'],'evidence':g['evidence_paths']['join'](',')}));}catch{return[];}}
|