@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_PASSPORT,MAX_SUBMISSION_SIZE_PASSPORT}from'@wowok/wowok';export{MAX_GUARD_COUNT_PASSPORT};export{MAX_SUBMISSION_SIZE_PASSPORT};export const PASSPORT_ERROR_CODES={'E_GUARD_COUNT_EXCEEDED':0x1,'E_RELIES_GUARD_NOT_ADDED':0x2,'E_SUBMISSION_SIZE_EXCEEDED':0x3,'E_HAS_VERIFIED':0x4,'E_NOT_VERIFIED':0x5,'E_NOT_IMPACK_GUARD':0x6,'E_VERIFY_FAILED':0x7,'E_TX_NOT_MATCH':0x8,'E_IMPACK_GUARD_NOT_FOUND':0x9,'E_SUBMISSION_NOT_FOUND':0xa,'E_DIGEST_NOT_MATCH':0xb};export const PASSPORT_SCENARIOS=[{'id':'passport_service_buy','name':'Service\x20buy\x20with\x20Passport\x20(verify\x20buy_guard)','consumer_object':'Service','sdk_entry':'buy_with_passport','passport_purpose':'Verify\x20customer\x27s\x20eligibility\x20to\x20buy\x20(buy_guard)','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['tx_hash\x20binding\x20requires\x20Passport\x20creation\x20+\x20buy\x20in\x20the\x20same\x20transaction','Service.buy_guard\x20is\x20typically\x20configured\x20as\x20impack=true'],'dependencies':['Service','Guard']},{'id':'passport_arbitration_compensation','name':'Order\x20arbitration\x20compensation\x20(verify\x20arb\x20permission)','consumer_object':'Order','sdk_entry':'arb_claim_compensation_with_passport','passport_purpose':'Verify\x20customer\x27s\x20right\x20to\x20claim\x20arbitration\x20compensation','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','arbitrator'],'risk_notes':['Compensation\x20is\x20one-shot\x20—\x20Passport.tx_hash\x20prevents\x20replay','result_for_guard\x20hard-verifies\x20the\x20impack\x20Guard\x20(E_VERIFY_FAILED\x20if\x20mismatch)'],'dependencies':['Order','Arbitration','Guard']},{'id':'passport_progress_next','name':'Progress\x20advance\x20(verify\x20Forward.guard)','consumer_object':'Progress','sdk_entry':'next_with_passport','passport_purpose':'Verify\x20that\x20the\x20next\x20node\x27s\x20Forward.guard\x20passes\x20before\x20advancing','typical_impack':'impack','uses_relies':!![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Forward.guard\x20may\x20have\x20relies\x20on\x20previous\x20node\x20Guards\x20(AND/OR\x20logic)','Relies\x20Guards\x20MUST\x20be\x20added\x20in\x20topological\x20order\x20(E_RELIES_GUARD_NOT_ADDED)'],'dependencies':['Progress','Machine','Guard']},{'id':'passport_arbitration_dispute','name':'Arbitration\x20dispute\x20(verify\x20usage_guard)','consumer_object':'Arbitration','sdk_entry':'dispute_with_passport','passport_purpose':'Verify\x20usage_guard\x20before\x20opening\x20a\x20dispute\x20case','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','arbitrator'],'risk_notes':['Arbitration.usage_guard\x20determines\x20who\x20may\x20open\x20disputes','Dispute\x20must\x20be\x20filed\x20within\x20the\x20same\x20transaction\x20that\x20created\x20the\x20Passport'],'dependencies':['Arbitration','Guard']},{'id':'passport_arbitration_vote','name':'Arbitration\x20vote\x20(resolve\x20VoteValue::GuardIdentifier\x20weight)','consumer_object':'Arbitration','sdk_entry':'vote_with_voting_guard','passport_purpose':'Resolve\x20voting\x20weight\x20from\x20Passport\x20submission\x20(GuardIdentifier)','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['arbitrator'],'risk_notes':['Voting\x20weight\x20is\x20read\x20via\x20submission_get(guard,\x20identifier)','Identifier\x20type\x20must\x20match\x20the\x20voting_guard\x27s\x20expected\x20type'],'dependencies':['Arbitration','Guard']},{'id':'passport_reward_claim','name':'Reward\x20claim\x20(verify\x20Guard\x20+\x20resolve\x20recipient/amount)','consumer_object':'Reward','sdk_entry':'claim_with_passport','passport_purpose':'Verify\x20claim\x20eligibility\x20and\x20resolve\x20dynamic\x20recipient/amount\x20from\x20submission','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer'],'risk_notes':['Guard\x20may\x20use\x20GuardIdentifier\x20to\x20dynamically\x20resolve\x20recipient\x20address','Claim\x20is\x20one-shot\x20per\x20Passport\x20(tx_hash\x20binding\x20prevents\x20replay)'],'dependencies':['Reward','Guard']},{'id':'passport_permission_assert','name':'Permission\x20assert\x20(Guard\x20verification\x20replaces\x20owner\x20check)','consumer_object':'Permission','sdk_entry':'assert_with_passport','passport_purpose':'Use\x20Guard\x20verification\x20as\x20a\x20dynamic\x20substitute\x20for\x20static\x20owner/admin\x20check','typical_impack':'impack','uses_relies':!![],'lifecycle_stage':'use','participants':['customer','platform'],'risk_notes':['Allows\x20composing\x20multi-factor\x20authorization\x20via\x20relies\x20logic','Permission\x20assert\x20bypass\x20requires\x20the\x20Passport\x20to\x20be\x20verified\x20in\x20the\x20same\x20tx'],'dependencies':['Permission','Guard']},{'id':'passport_allocation_alloc','name':'Allocation\x20distribute\x20(verify\x20alloc\x20permission\x20via\x20Guard)','consumer_object':'Allocation','sdk_entry':'alloc_with_passport','passport_purpose':'Verify\x20the\x20caller\x27s\x20right\x20to\x20trigger\x20allocation\x20distribution','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Caller-specified\x20guard:\x20Passport\x20must\x20contain\x20the\x20specific\x20Guard\x20referenced\x20by\x20alloc_by_guard','result_for_guard\x20hard-verifies\x20(E_VERIFY_FAILED\x20if\x20the\x20impack\x20Guard\x20fails)'],'dependencies':['Allocation','Guard']},{'id':'passport_treasury_withdraw','name':'Treasury\x20withdraw\x20(verify\x20withdraw\x20permission)','consumer_object':'Treasury','sdk_entry':'withdraw_with_passport','passport_purpose':'Verify\x20the\x20caller\x27s\x20right\x20to\x20withdraw\x20funds\x20from\x20Treasury','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','platform'],'risk_notes':['Treasury\x20withdraw\x20is\x20high-value\x20—\x20strongly\x20recommend\x20multi-Guard\x20relies\x20(AND)','Guard\x20should\x20bind\x20Signer\x20to\x20prevent\x20unauthorized\x20withdraw'],'dependencies':['Treasury','Guard']},{'id':'passport_repository_query','name':'Repository\x20query\x20(verify\x20read\x20permission\x20+\x20extract\x20data)','consumer_object':'Repository','sdk_entry':'query_with_passport','passport_purpose':'Verify\x20read\x20permission\x20and\x20extract\x20submission\x20data\x20for\x20repository\x20write','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Repository\x20policies\x20may\x20extract\x20data\x20from\x20Passport\x20submission\x20(quote_guard\x20pattern)','Submitted\x20data\x20must\x20be\x20≤\x20256\x20bytes\x20per\x20submission\x20entry'],'dependencies':['Repository','Guard']},{'id':'passport_demand_submit','name':'Demand\x20submit\x20(verify\x20demand\x20permission)','consumer_object':'Demand','sdk_entry':'demand_with_passport','passport_purpose':'Verify\x20the\x20caller\x27s\x20right\x20to\x20submit\x20or\x20match\x20a\x20Demand','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Demand.guard\x20may\x20filter\x20which\x20submissions\x20are\x20eligible\x20for\x20matching','Demand\x20uses\x20MAX_GUARD_COUNT_DEMAND=20\x20(separate\x20constant,\x20do\x20not\x20confuse)'],'dependencies':['Demand','Guard']}];export const PASSPORT_LEDGER_VERSION='1.0.0';export function getAllScenarios(){return[...PASSPORT_SCENARIOS];}export function getScenariosCount(){return PASSPORT_SCENARIOS['length'];}export function findScenarioById(a){return PASSPORT_SCENARIOS['find'](b=>b['id']===a);}export function getScenariosByConsumer(a){return PASSPORT_SCENARIOS['filter'](b=>b['consumer_object']===a);}export function getScenariosUsingRelies(){return PASSPORT_SCENARIOS['filter'](a=>a['uses_relies']);}export function inferScenarioFromIntent(a){const b=a['toLowerCase']();if(b['includes']('buy')||b['includes']('purchase')||b['includes']('service'))return findScenarioById('passport_service_buy');if(b['includes']('compensation')||b['includes']('compensate')||b['includes']('arb_claim'))return findScenarioById('passport_arbitration_compensation');if(b['includes']('progress')||b['includes']('advance')||b['includes']('next'))return findScenarioById('passport_progress_next');if(b['includes']('dispute')||b['includes']('grievance'))return findScenarioById('passport_arbitration_dispute');if(b['includes']('vote')||b['includes']('ballot')||b['includes']('voting'))return findScenarioById('passport_arbitration_vote');if(b['includes']('reward')||b['includes']('claim')||b['includes']('redeem')||b['includes']('bonus'))return findScenarioById('passport_reward_claim');if(b['includes']('permission')||b['includes']('assert')||b['includes']('authorize'))return findScenarioById('passport_permission_assert');if(b['includes']('alloc')||b['includes']('distribute')||b['includes']('distribution'))return findScenarioById('passport_allocation_alloc');if(b['includes']('withdraw')||b['includes']('extract')||b['includes']('treasury'))return findScenarioById('passport_treasury_withdraw');if(b['includes']('repository')||b['includes']('query')||b['includes']('lookup'))return findScenarioById('passport_repository_query');if(b['includes']('demand')||b['includes']('requirement'))return findScenarioById('passport_demand_submit');return undefined;}export function impackRoleFromBoolean(a){return a?'impack':'non_impack';}export function impackRoleToBoolean(a){return a==='impack';}export function reliesLogicFromBoolean(a){return a?'AND':'OR';}export function reliesLogicToBoolean(a){return a==='AND';}export function getErrorName(a){for(const [b,d]of Object['entries'](PASSPORT_ERROR_CODES)){if(d===a)return b;}return undefined;}export function getErrorDescription(a){const b={0x1:'Guard\x20count\x20exceeds\x20MAX_GUARD_COUNT_PASSPORT\x20(20)',0x2:'Relied\x20Guard\x20not\x20yet\x20added\x20to\x20Passport\x20(topological\x20order\x20required)',0x3:'Submission\x20serialized\x20size\x20exceeds\x20MAX_SUBMISSION_SIZE_PASSPORT\x20(256\x20bytes)',0x4:'Passport\x20already\x20verified\x20—\x20verify\x20is\x20one-time,\x20configuration\x20is\x20now\x20immutable',0x5:'result()\x20called\x20before\x20verify()\x20—\x20Passport\x20has\x20not\x20been\x20verified\x20yet',0x6:'result_for_guard\x20called\x20on\x20a\x20non-impack\x20Guard\x20—\x20only\x20impack\x20Guards\x20can\x20be\x20hard-verified',0x7:'result_for_guard\x20/\x20result_for_permission\x20called\x20when\x20overall\x20result=false',0x8:'result()\x20called\x20from\x20a\x20different\x20transaction\x20—\x20tx_hash\x20does\x20not\x20match\x20current\x20tx',0x9:'verify()\x20found\x20no\x20impack\x20Guard\x20—\x20at\x20least\x201\x20impack=true\x20Guard\x20is\x20required',0xa:'submission_get\x20found\x20no\x20entry\x20for\x20the\x20(guard,\x20identifier)\x20pair',0xb:'guard_add\x20/\x20verify\x20/\x20guard_clear\x20called\x20from\x20a\x20different\x20transaction\x20—\x20tx_hash\x20mismatch'};return b[a];}
|
|
1
|
+
import{MAX_GUARD_COUNT_PASSPORT,MAX_SUBMISSION_SIZE_PASSPORT}from'@wowok/wowok';export{MAX_GUARD_COUNT_PASSPORT};export{MAX_SUBMISSION_SIZE_PASSPORT};export const PASSPORT_ERROR_CODES={'E_GUARD_COUNT_EXCEEDED':0x1,'E_RELIES_GUARD_NOT_ADDED':0x2,'E_SUBMISSION_SIZE_EXCEEDED':0x3,'E_HAS_VERIFIED':0x4,'E_NOT_VERIFIED':0x5,'E_NOT_IMPACK_GUARD':0x6,'E_VERIFY_FAILED':0x7,'E_TX_NOT_MATCH':0x8,'E_IMPACK_GUARD_NOT_FOUND':0x9,'E_SUBMISSION_NOT_FOUND':0xa,'E_DIGEST_NOT_MATCH':0xb};export const PASSPORT_SCENARIOS=[{'id':'passport_service_buy','name':'Service\x20buy\x20with\x20Passport\x20(verify\x20buy_guard)','consumer_object':'Service','sdk_entry':'passport-verified\x20buy','passport_purpose':'Verify\x20customer\x27s\x20eligibility\x20to\x20buy\x20(buy_guard)','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['tx_hash\x20binding\x20requires\x20Passport\x20creation\x20+\x20buy\x20in\x20the\x20same\x20transaction','Service.buy_guard\x20is\x20typically\x20configured\x20as\x20impack=true'],'dependencies':['Service','Guard']},{'id':'passport_arbitration_compensation','name':'Order\x20arbitration\x20compensation\x20(verify\x20arb\x20permission)','consumer_object':'Order','sdk_entry':'arb_claim_compensation_with_passport','passport_purpose':'Verify\x20customer\x27s\x20right\x20to\x20claim\x20arbitration\x20compensation','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','arbitrator'],'risk_notes':['Compensation\x20is\x20one-shot\x20—\x20Passport.tx_hash\x20prevents\x20replay','The\x20impack\x20Guard\x20is\x20hard-verified\x20(E_VERIFY_FAILED\x20if\x20mismatch)'],'dependencies':['Order','Arbitration','Guard']},{'id':'passport_progress_next','name':'Progress\x20advance\x20(verify\x20Forward.guard)','consumer_object':'Progress','sdk_entry':'passport-verified\x20node\x20advance','passport_purpose':'Verify\x20that\x20the\x20next\x20node\x27s\x20Forward.guard\x20passes\x20before\x20advancing','typical_impack':'impack','uses_relies':!![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Forward.guard\x20may\x20have\x20relies\x20on\x20previous\x20node\x20Guards\x20(AND/OR\x20logic)','Relies\x20Guards\x20MUST\x20be\x20added\x20in\x20topological\x20order\x20(E_RELIES_GUARD_NOT_ADDED)'],'dependencies':['Progress','Machine','Guard']},{'id':'passport_arbitration_dispute','name':'Arbitration\x20dispute\x20(verify\x20usage_guard)','consumer_object':'Arbitration','sdk_entry':'passport-verified\x20dispute','passport_purpose':'Verify\x20usage_guard\x20before\x20opening\x20a\x20dispute\x20case','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','arbitrator'],'risk_notes':['Arbitration.usage_guard\x20determines\x20who\x20may\x20open\x20disputes','Dispute\x20must\x20be\x20filed\x20within\x20the\x20same\x20transaction\x20that\x20created\x20the\x20Passport'],'dependencies':['Arbitration','Guard']},{'id':'passport_arbitration_vote','name':'Arbitration\x20vote\x20(resolve\x20VoteValue::GuardIdentifier\x20weight)','consumer_object':'Arbitration','sdk_entry':'passport-verified\x20vote','passport_purpose':'Resolve\x20voting\x20weight\x20from\x20Passport\x20submission\x20(GuardIdentifier)','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['arbitrator'],'risk_notes':['Voting\x20weight\x20is\x20read\x20from\x20the\x20Passport\x20submission\x20for\x20the\x20(guard,\x20identifier)\x20pair','Identifier\x20type\x20must\x20match\x20the\x20voting_guard\x27s\x20expected\x20type'],'dependencies':['Arbitration','Guard']},{'id':'passport_reward_claim','name':'Reward\x20claim\x20(verify\x20Guard\x20+\x20resolve\x20recipient/amount)','consumer_object':'Reward','sdk_entry':'claim_with_passport','passport_purpose':'Verify\x20claim\x20eligibility\x20and\x20resolve\x20dynamic\x20recipient/amount\x20from\x20submission','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer'],'risk_notes':['Guard\x20may\x20use\x20GuardIdentifier\x20to\x20dynamically\x20resolve\x20recipient\x20address','Claim\x20is\x20one-shot\x20per\x20Passport\x20(tx_hash\x20binding\x20prevents\x20replay)'],'dependencies':['Reward','Guard']},{'id':'passport_permission_assert','name':'Permission\x20assert\x20(Guard\x20verification\x20replaces\x20owner\x20check)','consumer_object':'Permission','sdk_entry':'passport-verified\x20assert','passport_purpose':'Use\x20Guard\x20verification\x20as\x20a\x20dynamic\x20substitute\x20for\x20static\x20owner/admin\x20check','typical_impack':'impack','uses_relies':!![],'lifecycle_stage':'use','participants':['customer','platform'],'risk_notes':['Allows\x20composing\x20multi-factor\x20authorization\x20via\x20relies\x20logic','Permission\x20assert\x20bypass\x20requires\x20the\x20Passport\x20to\x20be\x20verified\x20in\x20the\x20same\x20tx'],'dependencies':['Permission','Guard']},{'id':'passport_allocation_alloc','name':'Allocation\x20distribute\x20(verify\x20alloc\x20permission\x20via\x20Guard)','consumer_object':'Allocation','sdk_entry':'alloc_with_passport','passport_purpose':'Verify\x20the\x20caller\x27s\x20right\x20to\x20trigger\x20allocation\x20distribution','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Caller-specified\x20guard:\x20Passport\x20must\x20contain\x20the\x20specific\x20Guard\x20referenced\x20by\x20alloc_by_guard','Hard\x20verification\x20applies\x20(E_VERIFY_FAILED\x20if\x20the\x20impack\x20Guard\x20fails)'],'dependencies':['Allocation','Guard']},{'id':'passport_treasury_withdraw','name':'Treasury\x20withdraw\x20(verify\x20withdraw\x20permission)','consumer_object':'Treasury','sdk_entry':'passport-verified\x20withdraw','passport_purpose':'Verify\x20the\x20caller\x27s\x20right\x20to\x20withdraw\x20funds\x20from\x20Treasury','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','platform'],'risk_notes':['Treasury\x20withdraw\x20is\x20high-value\x20—\x20strongly\x20recommend\x20multi-Guard\x20relies\x20(AND)','Guard\x20should\x20bind\x20Signer\x20to\x20prevent\x20unauthorized\x20withdraw'],'dependencies':['Treasury','Guard']},{'id':'passport_repository_query','name':'Repository\x20query\x20(verify\x20read\x20permission\x20+\x20extract\x20data)','consumer_object':'Repository','sdk_entry':'query_with_passport','passport_purpose':'Verify\x20read\x20permission\x20and\x20extract\x20submission\x20data\x20for\x20repository\x20write','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Repository\x20policies\x20may\x20extract\x20data\x20from\x20Passport\x20submission\x20(quote_guard\x20pattern)','Submitted\x20data\x20must\x20be\x20≤\x20256\x20bytes\x20per\x20submission\x20entry'],'dependencies':['Repository','Guard']},{'id':'passport_demand_submit','name':'Demand\x20submit\x20(verify\x20demand\x20permission)','consumer_object':'Demand','sdk_entry':'demand_with_passport','passport_purpose':'Verify\x20the\x20caller\x27s\x20right\x20to\x20submit\x20or\x20match\x20a\x20Demand','typical_impack':'impack','uses_relies':![],'lifecycle_stage':'use','participants':['customer','merchant'],'risk_notes':['Demand.guard\x20may\x20filter\x20which\x20submissions\x20are\x20eligible\x20for\x20matching','Demand\x20uses\x20MAX_GUARD_COUNT_DEMAND=20\x20(separate\x20constant,\x20do\x20not\x20confuse)'],'dependencies':['Demand','Guard']}];export const PASSPORT_LEDGER_VERSION='1.0.0';export function getAllScenarios(){return[...PASSPORT_SCENARIOS];}export function getScenariosCount(){return PASSPORT_SCENARIOS['length'];}export function findScenarioById(a){return PASSPORT_SCENARIOS['find'](b=>b['id']===a);}export function getScenariosByConsumer(a){return PASSPORT_SCENARIOS['filter'](b=>b['consumer_object']===a);}export function getScenariosUsingRelies(){return PASSPORT_SCENARIOS['filter'](a=>a['uses_relies']);}export function inferScenarioFromIntent(a){const b=a['toLowerCase']();if(b['includes']('buy')||b['includes']('purchase')||b['includes']('service'))return findScenarioById('passport_service_buy');if(b['includes']('compensation')||b['includes']('compensate')||b['includes']('arb_claim'))return findScenarioById('passport_arbitration_compensation');if(b['includes']('progress')||b['includes']('advance')||b['includes']('next'))return findScenarioById('passport_progress_next');if(b['includes']('dispute')||b['includes']('grievance'))return findScenarioById('passport_arbitration_dispute');if(b['includes']('vote')||b['includes']('ballot')||b['includes']('voting'))return findScenarioById('passport_arbitration_vote');if(b['includes']('reward')||b['includes']('claim')||b['includes']('redeem')||b['includes']('bonus'))return findScenarioById('passport_reward_claim');if(b['includes']('permission')||b['includes']('assert')||b['includes']('authorize'))return findScenarioById('passport_permission_assert');if(b['includes']('alloc')||b['includes']('distribute')||b['includes']('distribution'))return findScenarioById('passport_allocation_alloc');if(b['includes']('withdraw')||b['includes']('extract')||b['includes']('treasury'))return findScenarioById('passport_treasury_withdraw');if(b['includes']('repository')||b['includes']('query')||b['includes']('lookup'))return findScenarioById('passport_repository_query');if(b['includes']('demand')||b['includes']('requirement'))return findScenarioById('passport_demand_submit');return undefined;}export function impackRoleFromBoolean(a){return a?'impack':'non_impack';}export function impackRoleToBoolean(a){return a==='impack';}export function reliesLogicFromBoolean(a){return a?'AND':'OR';}export function reliesLogicToBoolean(a){return a==='AND';}export function getErrorName(a){for(const [b,d]of Object['entries'](PASSPORT_ERROR_CODES)){if(d===a)return b;}return undefined;}export function getErrorDescription(a){const b={0x1:'Guard\x20count\x20exceeds\x20MAX_GUARD_COUNT_PASSPORT\x20(20)',0x2:'Relied\x20Guard\x20not\x20yet\x20added\x20to\x20Passport\x20(topological\x20order\x20required)',0x3:'Submission\x20serialized\x20size\x20exceeds\x20MAX_SUBMISSION_SIZE_PASSPORT\x20(256\x20bytes)',0x4:'Passport\x20already\x20verified\x20—\x20verify\x20is\x20one-time,\x20configuration\x20is\x20now\x20immutable',0x5:'result()\x20called\x20before\x20verify()\x20—\x20Passport\x20has\x20not\x20been\x20verified\x20yet',0x6:'Hard\x20verification\x20called\x20on\x20a\x20non-impack\x20Guard\x20—\x20only\x20impack\x20Guards\x20can\x20be\x20hard-verified',0x7:'Guard\x20/\x20Permission\x20hard-verification\x20called\x20when\x20the\x20overall\x20result=false',0x8:'result()\x20called\x20from\x20a\x20different\x20transaction\x20—\x20tx_hash\x20does\x20not\x20match\x20current\x20tx',0x9:'verify()\x20found\x20no\x20impack\x20Guard\x20—\x20at\x20least\x201\x20impack=true\x20Guard\x20is\x20required',0xa:'No\x20submission\x20entry\x20found\x20for\x20the\x20(guard,\x20identifier)\x20pair',0xb:'Guard\x20add\x20/\x20verify\x20/\x20Guard\x20clear\x20called\x20from\x20a\x20different\x20transaction\x20—\x20tx_hash\x20mismatch'};return b[a];}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_GUARD_COUNT_PASSPORT,MAX_SUBMISSION_SIZE_PASSPORT}from'./passport-ledger.js';export const PASSPORT_TEMPLATES=[{'id':'T-PASS-01','name':'KYC\x20verification\x20(single\x20impack\x20Guard)','description':'Simplest\x20Passport\x20—\x20single\x20impack\x20Guard\x20verifying\x20KYC\x20status.\x20Customer\x20submits\x20KYC\x20proof,\x20Guard\x20verifies,\x20Passport\x20result=true.','applicable_scenarios':['passport_service_buy','passport_kyc'],'industry_tags':['universal','kyc','compliance'],'params':[{'name':'kyc_guard_address','type':'address','description':'KYC\x20Guard\x20object\x20address\x20(verifies\x20customer\x27s\x20KYC\x20certificate)','required':!![]},{'name':'kyc_certificate','type':'string','description':'KYC\x20certificate\x20hash\x20or\x20URL\x20(submitted\x20as\x20identifier=0\x20value)','required':!![]}],'body':a=>{const b=String(a['kyc_guard_address']),c=String(a['kyc_certificate']);if(c['length']>MAX_SUBMISSION_SIZE_PASSPORT-0xa)throw new Error('T-PASS-01:\x20kyc_certificate\x20too\x20long\x20('+c['length']+'\x20bytes);\x20limit\x20is\x20~'+(MAX_SUBMISSION_SIZE_PASSPORT-0xa));const d={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':c,'value_type':'string'}]}]};return d;},'notes':['Single\x20impack\x20Guard\x20—\x20simplest\x20configuration','Customer\x20submits\x20KYC\x20certificate\x20as\x20string\x20at\x20identifier=0','If\x20KYC\x20Guard\x20fails,\x20overall\x20result=false\x20(impack\x20mechanism)','Typical\x20consumer:\x20Service.buy_with_passport']},{'id':'T-PASS-02','name':'Multi-Guard\x20combo\x20(impack\x20+\x20non-impack\x20audit)','description':'Two\x20Guards:\x20impack=true\x20for\x20business\x20verification\x20+\x20impack=false\x20for\x20audit\x20logging.\x20Audit\x20Guard\x20result\x20does\x20not\x20affect\x20final\x20result.','applicable_scenarios':['passport_service_buy','passport_audit'],'industry_tags':['universal','audit','compliance'],'params':[{'name':'kyc_guard_address','type':'address','description':'Primary\x20KYC\x20Guard\x20(impack=true)\x20—\x20determines\x20final\x20result','required':!![]},{'name':'audit_guard_address','type':'address','description':'Audit\x20logging\x20Guard\x20(impack=false)\x20—\x20records\x20result\x20only','required':!![]},{'name':'kyc_certificate','type':'string','description':'KYC\x20certificate\x20(identifier=0\x20for\x20kyc_guard)','required':!![]},{'name':'audit_metadata','type':'string','description':'Audit\x20metadata\x20(identifier=0\x20for\x20audit_guard,\x20optional)','required':![],'default':''}],'body':a=>{const b=String(a['kyc_guard_address']),c=String(a['audit_guard_address']);if(b===c)throw new Error('T-PASS-02:\x20kyc_guard_address\x20and\x20audit_guard_address\x20must\x20differ');const d={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['kyc_certificate']),'value_type':'string'}]}]},e=a['audit_metadata']?String(a['audit_metadata']):'';return e['length']>0x0&&d['submission']['push']({'guard':c,'submission':[{'identifier':0x0,'value':e,'value_type':'string'}]}),d;},'notes':['impack=true\x20Guard\x20determines\x20final\x20result;\x20impack=false\x20Guard\x20is\x20audit-only','Audit\x20Guard\x20may\x20pass\x20even\x20if\x20KYC\x20Guard\x20fails\x20—\x20only\x20impack\x20matters\x20for\x20result','Useful\x20for\x20compliance\x20logging\x20without\x20affecting\x20business\x20flow']},{'id':'T-PASS-03','name':'And-relies\x20Guard\x20(two-factor\x20authentication)','description':'Two\x20impack\x20Guards\x20with\x20AND\x20relies\x20logic:\x20password\x20Guard\x20(primary)\x20+\x20OTP\x20Guard\x20(secondary).\x20Both\x20must\x20pass\x20for\x20result=true.','applicable_scenarios':['passport_permission_assert','passport_treasury_withdraw'],'industry_tags':['security','2fa','high_value'],'params':[{'name':'password_guard_address','type':'address','description':'Password\x20Guard\x20(added\x20first,\x20no\x20relies)','required':!![]},{'name':'otp_guard_address','type':'address','description':'OTP\x20Guard\x20(added\x20second,\x20relies\x20on\x20password_guard\x20with\x20AND\x20logic)','required':!![]},{'name':'password_hash','type':'string','description':'Password\x20hash\x20(identifier=0\x20for\x20password_guard)','required':!![]},{'name':'otp_code','type':'string','description':'OTP\x20code\x20(identifier=0\x20for\x20otp_guard)','required':!![]}],'body':a=>{const b=String(a['password_guard_address']),c=String(a['otp_guard_address']);if(b===c)throw new Error('T-PASS-03:\x20password_guard\x20and\x20otp_guard\x20must\x20differ');const d={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['password_hash']),'value_type':'string'}]},{'guard':c,'submission':[{'identifier':0x0,'value':String(a['otp_code']),'value_type':'string'}]}]};return d;},'notes':['AND\x20relies\x20logic:\x20both\x20password\x20AND\x20OTP\x20must\x20pass\x20(short-circuits\x20on\x20first\x20false)','Order\x20is\x20critical:\x20password_guard\x20added\x20first,\x20otp_guard\x20added\x20second','otp_guard\x20must\x20be\x20configured\x20at\x20Guard\x20layer:\x20guard::relies(otp_guard)\x20returns\x20([password_guard],\x20true)','If\x20password\x20fails,\x20OTP\x20is\x20not\x20verified\x20(short-circuit)\x20—\x20saves\x20gas','Typical\x20consumer:\x20Permission.assert_with_passport,\x20Treasury.withdraw_with_passport']},{'id':'T-PASS-04','name':'Or-relies\x20Guard\x20(multi-path\x20authorization)','description':'Two\x20impack\x20Guards\x20with\x20OR\x20relies\x20logic:\x20VIP\x20Guard\x20(primary)\x20OR\x20standard\x20Guard\x20(fallback).\x20Any\x20one\x20passing\x20yields\x20result=true.','applicable_scenarios':['passport_reward_claim','passport_multi_path'],'industry_tags':['universal','authorization','multi_path'],'params':[{'name':'vip_guard_address','type':'address','description':'VIP\x20eligibility\x20Guard\x20(added\x20first,\x20no\x20relies)','required':!![]},{'name':'standard_guard_address','type':'address','description':'Standard\x20eligibility\x20Guard\x20(added\x20second,\x20relies\x20on\x20vip_guard\x20with\x20OR\x20logic)','required':!![]},{'name':'vip_token','type':'string','description':'VIP\x20token\x20proof\x20(identifier=0\x20for\x20vip_guard)','required':!![]},{'name':'standard_proof','type':'string','description':'Standard\x20eligibility\x20proof\x20(identifier=0\x20for\x20standard_guard)','required':!![]}],'body':a=>{const b=String(a['vip_guard_address']),c=String(a['standard_guard_address']);if(b===c)throw new Error('T-PASS-04:\x20vip_guard\x20and\x20standard_guard\x20must\x20differ');const d={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['vip_token']),'value_type':'string'}]},{'guard':c,'submission':[{'identifier':0x0,'value':String(a['standard_proof']),'value_type':'string'}]}]};return d;},'notes':['OR\x20relies\x20logic:\x20VIP\x20OR\x20standard\x20must\x20pass\x20(short-circuits\x20on\x20first\x20true)','If\x20VIP\x20Guard\x20passes,\x20standard\x20Guard\x20is\x20not\x20verified\x20(short-circuit)','Both\x20Guards\x20are\x20impack=true\x20—\x20either\x20one\x20passing\x20yields\x20result=true','Useful\x20for\x20tiered\x20authorization\x20(VIP\x20fast-path\x20+\x20standard\x20fallback)','Typical\x20consumer:\x20Reward.claim_with_passport']},{'id':'T-PASS-05','name':'Service\x20buy\x20(buy_guard\x20verification)','description':'Single\x20impack\x20Guard\x20verifying\x20customer\x27s\x20eligibility\x20to\x20buy\x20a\x20Service.\x20Customer\x20submits\x20buy\x20proof,\x20Guard\x20verifies,\x20Service.buy_with_passport\x20proceeds.','applicable_scenarios':['passport_service_buy'],'industry_tags':['retail','ecommerce','service'],'params':[{'name':'buy_guard_address','type':'address','description':'Service.buy_guard\x20address\x20(verifies\x20purchase\x20eligibility)','required':!![]},{'name':'customer_address','type':'string','description':'Customer\x20address\x20(submitted\x20at\x20identifier=0,\x20resolved\x20via\x20Guard\x20table)','required':!![]},{'name':'service_address','type':'address','description':'Service\x20object\x20address\x20(for\x20context,\x20not\x20submitted)','required':![]}],'body':a=>{const b=String(a['buy_guard_address']),c=String(a['customer_address']),d={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':c,'value_type':'address'}]}]};return d;},'notes':['Service.buy_guard\x20is\x20configured\x20by\x20the\x20merchant\x20at\x20Service\x20publish\x20time','Customer\x20creates\x20Passport\x20in\x20the\x20same\x20tx\x20that\x20calls\x20Service.buy_with_passport','tx_hash\x20binding\x20prevents\x20replay\x20—\x20Passport\x20cannot\x20be\x20reused\x20for\x20another\x20purchase','Service.buy_with_passport\x20internally\x20calls\x20result_for_guard(buy_guard)\x20—\x20hard-verifies\x20impack\x20Guard']},{'id':'T-PASS-06','name':'Reward\x20claim\x20(claim\x20+\x20dynamic\x20recipient\x20via\x20GuardIdentifier)','description':'Single\x20impack\x20Guard\x20verifying\x20claim\x20eligibility.\x20Recipient\x20address\x20is\x20dynamically\x20resolved\x20from\x20Passport\x20submission\x20(GuardIdentifier\x20pattern).','applicable_scenarios':['passport_reward_claim'],'industry_tags':['reward','marketing','loyalty'],'params':[{'name':'claim_guard_address','type':'address','description':'Reward\x20claim\x20Guard\x20address\x20(verifies\x20claim\x20eligibility\x20+\x20extracts\x20recipient)','required':!![]},{'name':'recipient_address','type':'string','description':'Recipient\x20address\x20(submitted\x20at\x20identifier=0,\x20resolved\x20by\x20Reward.claim)','required':!![]},{'name':'claim_amount_proof','type':'string','description':'Claim\x20amount\x20proof\x20(submitted\x20at\x20identifier=1,\x20optional)','required':![],'default':''}],'body':a=>{const b=String(a['claim_guard_address']),c=String(a['recipient_address']),d=[{'identifier':0x0,'value':c,'value_type':'address'}],e=a['claim_amount_proof']?String(a['claim_amount_proof']):'';e['length']>0x0&&d['push']({'identifier':0x1,'value':e,'value_type':'string'});const f={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':d}]};return f;},'notes':['Reward.claim\x20reads\x20recipient\x20from\x20Passport\x20submission_get(guard,\x20identifier=0)','Guard\x20table[0]\x20must\x20be\x20address-typed\x20(ERECIPIENT_IDENTIFIER_NOT_ADDRESS\x20if\x20not)','Claim\x20is\x20one-shot\x20per\x20Passport\x20—\x20tx_hash\x20binding\x20prevents\x20replay','Dynamic\x20recipient\x20pattern\x20enables\x20referral\x20rewards\x20(referrer\x20address\x20submitted\x20by\x20customer)']},{'id':'T-PASS-07','name':'Arbitration\x20vote\x20(VoteValue::GuardIdentifier\x20weight)','description':'Arbitrator\x20submits\x20voting\x20weight\x20via\x20Passport.\x20Voting\x20weight\x20is\x20read\x20by\x20Arbitration.vote_with_voting_guard\x20via\x20submission_get.','applicable_scenarios':['passport_arbitration_vote'],'industry_tags':['arbitration','governance','voting'],'params':[{'name':'voting_guard_address','type':'address','description':'Arbitration\x20voting\x20Guard\x20address\x20(verifies\x20arbitrator\x27s\x20voting\x20eligibility)','required':!![]},{'name':'voting_weight','type':'number','description':'Voting\x20weight\x20(u64,\x20submitted\x20at\x20identifier=0)','required':!![]},{'name':'arbitrator_address','type':'string','description':'Arbitrator\x20address\x20(submitted\x20at\x20identifier=1\x20for\x20identity\x20verification)','required':!![]}],'body':a=>{const b=String(a['voting_guard_address']),c=Number(a['voting_weight']);if(!Number['isInteger'](c)||c<0x0)throw new Error('T-PASS-07:\x20voting_weight\x20must\x20be\x20a\x20non-negative\x20integer,\x20got\x20'+c);if(c>0x10000000000000000)throw new Error('T-PASS-07:\x20voting_weight\x20exceeds\x20u64\x20max');const d={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(c),'value_type':'u64'},{'identifier':0x1,'value':String(a['arbitrator_address']),'value_type':'address'}]}]};return d;},'notes':['Arbitration.vote_with_voting_guard\x20reads\x20weight\x20via\x20submission_get(guard,\x20identifier=0)','Voting\x20weight\x20is\x20u64\x20—\x20must\x20fit\x20in\x208\x20bytes\x20BCS','Arbitrator\x20address\x20at\x20identifier=1\x20enables\x20identity\x20verification\x20by\x20the\x20voting_guard','Voting\x20Guard\x20must\x20be\x20configured\x20in\x20Arbitration.voting_guard\x20field','Passport.tx_hash\x20ensures\x20vote\x20cannot\x20be\x20replayed\x20across\x20disputes']},{'id':'T-PASS-08','name':'Treasury\x20withdraw\x20(high-value,\x20multi-Guard\x20AND)','description':'Three\x20impack\x20Guards\x20with\x20AND\x20relies\x20for\x20high-value\x20Treasury\x20withdrawal:\x20(1)\x20admin\x20Guard,\x20(2)\x20threshold\x20Guard,\x20(3)\x20time-lock\x20Guard.\x20All\x20must\x20pass.','applicable_scenarios':['passport_treasury_withdraw'],'industry_tags':['treasury','high_value','multi_sig'],'params':[{'name':'admin_guard_address','type':'address','description':'Admin\x20Guard\x20(added\x20first,\x20verifies\x20admin\x20role)','required':!![]},{'name':'threshold_guard_address','type':'address','description':'Threshold\x20Guard\x20(added\x20second,\x20relies\x20on\x20admin\x20with\x20AND;\x20verifies\x20withdrawal\x20amount\x20≤\x20threshold)','required':!![]},{'name':'timelock_guard_address','type':'address','description':'Time-lock\x20Guard\x20(added\x20third,\x20relies\x20on\x20threshold\x20with\x20AND;\x20verifies\x20time-lock\x20expired)','required':!![]},{'name':'admin_proof','type':'string','description':'Admin\x20proof\x20(identifier=0\x20for\x20admin_guard)','required':!![]},{'name':'withdrawal_amount','type':'number','description':'Withdrawal\x20amount\x20in\x20smallest\x20unit\x20(identifier=0\x20for\x20threshold_guard)','required':!![]},{'name':'timelock_timestamp','type':'number','description':'Time-lock\x20release\x20timestamp\x20(identifier=0\x20for\x20timelock_guard)','required':!![]}],'body':a=>{const b=String(a['admin_guard_address']),c=String(a['threshold_guard_address']),d=String(a['timelock_guard_address']);if(b===c||b===d||c===d)throw new Error('T-PASS-08:\x20all\x20three\x20Guard\x20addresses\x20must\x20differ');const e=Number(a['withdrawal_amount']);if(!Number['isInteger'](e)||e<0x0)throw new Error('T-PASS-08:\x20withdrawal_amount\x20must\x20be\x20a\x20non-negative\x20integer,\x20got\x20'+e);const f=Number(a['timelock_timestamp']);if(!Number['isInteger'](f)||f<0x0)throw new Error('T-PASS-08:\x20timelock_timestamp\x20must\x20be\x20a\x20non-negative\x20integer,\x20got\x20'+f);const g={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':!![]},{'object':d,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['admin_proof']),'value_type':'string'}]},{'guard':c,'submission':[{'identifier':0x0,'value':String(e),'value_type':'u64'}]},{'guard':d,'submission':[{'identifier':0x0,'value':String(f),'value_type':'u64'}]}]};return g;},'notes':['Three\x20impack\x20Guards\x20with\x20chained\x20AND\x20relies:\x20admin\x20AND\x20threshold\x20AND\x20timelock','Order\x20is\x20critical:\x20admin\x20(no\x20relies)\x20→\x20threshold\x20(relies\x20admin)\x20→\x20timelock\x20(relies\x20threshold)','Threshold\x20and\x20timelock\x20Guards\x20must\x20be\x20configured\x20at\x20Guard\x20layer\x20with\x20AND\x20relies\x20on\x20the\x20previous\x20Guard','Short-circuit:\x20if\x20admin\x20fails,\x20threshold\x20and\x20timelock\x20are\x20not\x20verified\x20(saves\x20gas)','Typical\x20consumer:\x20Treasury.withdraw_with_passport\x20(high-value\x20scenarios)','Guard\x20count\x20=\x203,\x20well\x20below\x20MAX_GUARD_COUNT_PASSPORT=20']}];export const PASSPORT_TEMPLATES_VERSION='1.0.0';export function getAllTemplates(){return[...PASSPORT_TEMPLATES];}export function getTemplateById(a){return PASSPORT_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScenario(a){return PASSPORT_TEMPLATES['filter'](b=>b['applicable_scenarios']['includes'](a));}export function getTemplatesByIndustry(a){return PASSPORT_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScenario(a){const b=getTemplatesByScenario(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return PASSPORT_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenarios':a['applicable_scenarios']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}try{return{'ok':!![],'body':c['body'](b)};}catch(f){return{'ok':![],'error':f instanceof Error?f['message']:String(f)};}}export{MAX_GUARD_COUNT_PASSPORT,MAX_SUBMISSION_SIZE_PASSPORT};
|
|
1
|
+
import{MAX_GUARD_COUNT_PASSPORT,MAX_SUBMISSION_SIZE_PASSPORT}from'./passport-ledger.js';export const PASSPORT_TEMPLATES=[{'id':'T-PASS-01','name':'KYC\x20verification\x20(single\x20impack\x20Guard)','description':'Simplest\x20Passport\x20—\x20single\x20impack\x20Guard\x20verifying\x20KYC\x20status.\x20Customer\x20submits\x20KYC\x20proof,\x20Guard\x20verifies,\x20Passport\x20result=true.','applicable_scenarios':['passport_service_buy','passport_kyc'],'industry_tags':['universal','kyc','compliance'],'params':[{'name':'kyc_guard_address','type':'address','description':'KYC\x20Guard\x20object\x20address\x20(verifies\x20customer\x27s\x20KYC\x20certificate)','required':!![]},{'name':'kyc_certificate','type':'string','description':'KYC\x20certificate\x20hash\x20or\x20URL\x20(submitted\x20as\x20identifier=0\x20value)','required':!![]}],'body':a=>{const b=String(a['kyc_guard_address']),c=String(a['kyc_certificate']);if(c['length']>MAX_SUBMISSION_SIZE_PASSPORT-0xa)throw new Error('T-PASS-01:\x20kyc_certificate\x20too\x20long\x20('+c['length']+'\x20bytes);\x20limit\x20is\x20~'+(MAX_SUBMISSION_SIZE_PASSPORT-0xa));const d={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':c,'value_type':'string'}]}]};return d;},'notes':['Single\x20impack\x20Guard\x20—\x20simplest\x20configuration','Customer\x20submits\x20KYC\x20certificate\x20as\x20string\x20at\x20identifier=0','If\x20KYC\x20Guard\x20fails,\x20overall\x20result=false\x20(impack\x20mechanism)','Typical\x20consumer:\x20buying\x20a\x20Service\x20with\x20a\x20Passport']},{'id':'T-PASS-02','name':'Multi-Guard\x20combo\x20(impack\x20+\x20non-impack\x20audit)','description':'Two\x20Guards:\x20impack=true\x20for\x20business\x20verification\x20+\x20impack=false\x20for\x20audit\x20logging.\x20Audit\x20Guard\x20result\x20does\x20not\x20affect\x20final\x20result.','applicable_scenarios':['passport_service_buy','passport_audit'],'industry_tags':['universal','audit','compliance'],'params':[{'name':'kyc_guard_address','type':'address','description':'Primary\x20KYC\x20Guard\x20(impack=true)\x20—\x20determines\x20final\x20result','required':!![]},{'name':'audit_guard_address','type':'address','description':'Audit\x20logging\x20Guard\x20(impack=false)\x20—\x20records\x20result\x20only','required':!![]},{'name':'kyc_certificate','type':'string','description':'KYC\x20certificate\x20(identifier=0\x20for\x20kyc_guard)','required':!![]},{'name':'audit_metadata','type':'string','description':'Audit\x20metadata\x20(identifier=0\x20for\x20audit_guard,\x20optional)','required':![],'default':''}],'body':a=>{const b=String(a['kyc_guard_address']),c=String(a['audit_guard_address']);if(b===c)throw new Error('T-PASS-02:\x20kyc_guard_address\x20and\x20audit_guard_address\x20must\x20differ');const d={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['kyc_certificate']),'value_type':'string'}]}]},e=a['audit_metadata']?String(a['audit_metadata']):'';return e['length']>0x0&&d['submission']['push']({'guard':c,'submission':[{'identifier':0x0,'value':e,'value_type':'string'}]}),d;},'notes':['impack=true\x20Guard\x20determines\x20final\x20result;\x20impack=false\x20Guard\x20is\x20audit-only','Audit\x20Guard\x20may\x20pass\x20even\x20if\x20KYC\x20Guard\x20fails\x20—\x20only\x20impack\x20matters\x20for\x20result','Useful\x20for\x20compliance\x20logging\x20without\x20affecting\x20business\x20flow']},{'id':'T-PASS-03','name':'And-relies\x20Guard\x20(two-factor\x20authentication)','description':'Two\x20impack\x20Guards\x20with\x20AND\x20relies\x20logic:\x20password\x20Guard\x20(primary)\x20+\x20OTP\x20Guard\x20(secondary).\x20Both\x20must\x20pass\x20for\x20result=true.','applicable_scenarios':['passport_permission_assert','passport_treasury_withdraw'],'industry_tags':['security','2fa','high_value'],'params':[{'name':'password_guard_address','type':'address','description':'Password\x20Guard\x20(added\x20first,\x20no\x20relies)','required':!![]},{'name':'otp_guard_address','type':'address','description':'OTP\x20Guard\x20(added\x20second,\x20relies\x20on\x20password_guard\x20with\x20AND\x20logic)','required':!![]},{'name':'password_hash','type':'string','description':'Password\x20hash\x20(identifier=0\x20for\x20password_guard)','required':!![]},{'name':'otp_code','type':'string','description':'OTP\x20code\x20(identifier=0\x20for\x20otp_guard)','required':!![]}],'body':a=>{const b=String(a['password_guard_address']),c=String(a['otp_guard_address']);if(b===c)throw new Error('T-PASS-03:\x20password_guard\x20and\x20otp_guard\x20must\x20differ');const d={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['password_hash']),'value_type':'string'}]},{'guard':c,'submission':[{'identifier':0x0,'value':String(a['otp_code']),'value_type':'string'}]}]};return d;},'notes':['AND\x20relies\x20logic:\x20both\x20password\x20AND\x20OTP\x20must\x20pass\x20(short-circuits\x20on\x20first\x20false)','Order\x20is\x20critical:\x20password_guard\x20added\x20first,\x20otp_guard\x20added\x20second','otp_guard\x20must\x20be\x20configured\x20at\x20Guard\x20layer:\x20its\x20rely\x20list\x20is\x20([password_guard])\x20with\x20rep=true','If\x20password\x20fails,\x20OTP\x20is\x20not\x20verified\x20(short-circuit)\x20—\x20saves\x20gas','Typical\x20consumer:\x20Passport-verified\x20Permission\x20assertions\x20and\x20Treasury\x20withdrawals']},{'id':'T-PASS-04','name':'Or-relies\x20Guard\x20(multi-path\x20authorization)','description':'Two\x20impack\x20Guards\x20with\x20OR\x20relies\x20logic:\x20VIP\x20Guard\x20(primary)\x20OR\x20standard\x20Guard\x20(fallback).\x20Any\x20one\x20passing\x20yields\x20result=true.','applicable_scenarios':['passport_reward_claim','passport_multi_path'],'industry_tags':['universal','authorization','multi_path'],'params':[{'name':'vip_guard_address','type':'address','description':'VIP\x20eligibility\x20Guard\x20(added\x20first,\x20no\x20relies)','required':!![]},{'name':'standard_guard_address','type':'address','description':'Standard\x20eligibility\x20Guard\x20(added\x20second,\x20relies\x20on\x20vip_guard\x20with\x20OR\x20logic)','required':!![]},{'name':'vip_token','type':'string','description':'VIP\x20token\x20proof\x20(identifier=0\x20for\x20vip_guard)','required':!![]},{'name':'standard_proof','type':'string','description':'Standard\x20eligibility\x20proof\x20(identifier=0\x20for\x20standard_guard)','required':!![]}],'body':a=>{const b=String(a['vip_guard_address']),c=String(a['standard_guard_address']);if(b===c)throw new Error('T-PASS-04:\x20vip_guard\x20and\x20standard_guard\x20must\x20differ');const d={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['vip_token']),'value_type':'string'}]},{'guard':c,'submission':[{'identifier':0x0,'value':String(a['standard_proof']),'value_type':'string'}]}]};return d;},'notes':['OR\x20relies\x20logic:\x20VIP\x20OR\x20standard\x20must\x20pass\x20(short-circuits\x20on\x20first\x20true)','If\x20VIP\x20Guard\x20passes,\x20standard\x20Guard\x20is\x20not\x20verified\x20(short-circuit)','Both\x20Guards\x20are\x20impack=true\x20—\x20either\x20one\x20passing\x20yields\x20result=true','Useful\x20for\x20tiered\x20authorization\x20(VIP\x20fast-path\x20+\x20standard\x20fallback)','Typical\x20consumer:\x20Reward.claim_with_passport']},{'id':'T-PASS-05','name':'Service\x20buy\x20(buy_guard\x20verification)','description':'Single\x20impack\x20Guard\x20verifying\x20customer\x27s\x20eligibility\x20to\x20buy\x20a\x20Service.\x20Customer\x20submits\x20buy\x20proof,\x20Guard\x20verifies,\x20the\x20Passport-backed\x20purchase\x20proceeds.','applicable_scenarios':['passport_service_buy'],'industry_tags':['retail','ecommerce','service'],'params':[{'name':'buy_guard_address','type':'address','description':'Service.buy_guard\x20address\x20(verifies\x20purchase\x20eligibility)','required':!![]},{'name':'customer_address','type':'string','description':'Customer\x20address\x20(submitted\x20at\x20identifier=0,\x20resolved\x20via\x20Guard\x20table)','required':!![]},{'name':'service_address','type':'address','description':'Service\x20object\x20address\x20(for\x20context,\x20not\x20submitted)','required':![]}],'body':a=>{const b=String(a['buy_guard_address']),c=String(a['customer_address']),d={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':c,'value_type':'address'}]}]};return d;},'notes':['Service.buy_guard\x20is\x20configured\x20by\x20the\x20merchant\x20at\x20Service\x20publish\x20time','Customer\x20creates\x20Passport\x20in\x20the\x20same\x20transaction\x20as\x20the\x20Passport-verified\x20purchase','tx_hash\x20binding\x20prevents\x20replay\x20—\x20Passport\x20cannot\x20be\x20reused\x20for\x20another\x20purchase','The\x20purchase\x20flow\x20internally\x20hard-verifies\x20the\x20impack\x20Guard\x27s\x20on-chain\x20result\x20before\x20proceeding']},{'id':'T-PASS-06','name':'Reward\x20claim\x20(claim\x20+\x20dynamic\x20recipient\x20via\x20GuardIdentifier)','description':'Single\x20impack\x20Guard\x20verifying\x20claim\x20eligibility.\x20Recipient\x20address\x20is\x20dynamically\x20resolved\x20from\x20Passport\x20submission\x20(GuardIdentifier\x20pattern).','applicable_scenarios':['passport_reward_claim'],'industry_tags':['reward','marketing','loyalty'],'params':[{'name':'claim_guard_address','type':'address','description':'Reward\x20claim\x20Guard\x20address\x20(verifies\x20claim\x20eligibility\x20+\x20extracts\x20recipient)','required':!![]},{'name':'recipient_address','type':'string','description':'Recipient\x20address\x20(submitted\x20at\x20identifier=0,\x20resolved\x20by\x20Reward.claim)','required':!![]},{'name':'claim_amount_proof','type':'string','description':'Claim\x20amount\x20proof\x20(submitted\x20at\x20identifier=1,\x20optional)','required':![],'default':''}],'body':a=>{const b=String(a['claim_guard_address']),c=String(a['recipient_address']),d=[{'identifier':0x0,'value':c,'value_type':'address'}],e=a['claim_amount_proof']?String(a['claim_amount_proof']):'';e['length']>0x0&&d['push']({'identifier':0x1,'value':e,'value_type':'string'});const f={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':d}]};return f;},'notes':['Reward\x20claim\x20reads\x20the\x20recipient\x20from\x20the\x20Passport\x27s\x20submitted\x20value\x20at\x20identifier=0','Guard\x20table[0]\x20must\x20be\x20address-typed\x20(ERECIPIENT_IDENTIFIER_NOT_ADDRESS\x20if\x20not)','Claim\x20is\x20one-shot\x20per\x20Passport\x20—\x20tx_hash\x20binding\x20prevents\x20replay','Dynamic\x20recipient\x20pattern\x20enables\x20referral\x20rewards\x20(referrer\x20address\x20submitted\x20by\x20customer)']},{'id':'T-PASS-07','name':'Arbitration\x20vote\x20(VoteValue::GuardIdentifier\x20weight)','description':'Arbitrator\x20submits\x20voting\x20weight\x20via\x20Passport.\x20The\x20Arbitration\x20vote\x20reads\x20the\x20weight\x20from\x20the\x20Passport\x20submission\x20via\x20the\x20voting\x20Guard.','applicable_scenarios':['passport_arbitration_vote'],'industry_tags':['arbitration','governance','voting'],'params':[{'name':'voting_guard_address','type':'address','description':'Arbitration\x20voting\x20Guard\x20address\x20(verifies\x20arbitrator\x27s\x20voting\x20eligibility)','required':!![]},{'name':'voting_weight','type':'number','description':'Voting\x20weight\x20(u64,\x20submitted\x20at\x20identifier=0)','required':!![]},{'name':'arbitrator_address','type':'string','description':'Arbitrator\x20address\x20(submitted\x20at\x20identifier=1\x20for\x20identity\x20verification)','required':!![]}],'body':a=>{const b=String(a['voting_guard_address']),c=Number(a['voting_weight']);if(!Number['isInteger'](c)||c<0x0)throw new Error('T-PASS-07:\x20voting_weight\x20must\x20be\x20a\x20non-negative\x20integer,\x20got\x20'+c);if(c>0x10000000000000000)throw new Error('T-PASS-07:\x20voting_weight\x20exceeds\x20u64\x20max');const d={'type':'submission','guard':[{'object':b,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(c),'value_type':'u64'},{'identifier':0x1,'value':String(a['arbitrator_address']),'value_type':'address'}]}]};return d;},'notes':['The\x20Arbitration\x20vote\x20reads\x20the\x20submitted\x20weight\x20from\x20the\x20voting\x20Guard\x27s\x20Passport\x20submission\x20(identifier=0)','Voting\x20weight\x20is\x20u64\x20—\x20must\x20fit\x20in\x208\x20bytes\x20BCS','Arbitrator\x20address\x20at\x20identifier=1\x20enables\x20identity\x20verification\x20by\x20the\x20voting_guard','Voting\x20Guard\x20must\x20be\x20configured\x20in\x20Arbitration.voting_guard\x20field','Passport.tx_hash\x20ensures\x20vote\x20cannot\x20be\x20replayed\x20across\x20disputes']},{'id':'T-PASS-08','name':'Treasury\x20withdraw\x20(high-value,\x20multi-Guard\x20AND)','description':'Three\x20impack\x20Guards\x20with\x20AND\x20relies\x20for\x20high-value\x20Treasury\x20withdrawal:\x20(1)\x20admin\x20Guard,\x20(2)\x20threshold\x20Guard,\x20(3)\x20time-lock\x20Guard.\x20All\x20must\x20pass.','applicable_scenarios':['passport_treasury_withdraw'],'industry_tags':['treasury','high_value','multi_sig'],'params':[{'name':'admin_guard_address','type':'address','description':'Admin\x20Guard\x20(added\x20first,\x20verifies\x20admin\x20role)','required':!![]},{'name':'threshold_guard_address','type':'address','description':'Threshold\x20Guard\x20(added\x20second,\x20relies\x20on\x20admin\x20with\x20AND;\x20verifies\x20withdrawal\x20amount\x20≤\x20threshold)','required':!![]},{'name':'timelock_guard_address','type':'address','description':'Time-lock\x20Guard\x20(added\x20third,\x20relies\x20on\x20threshold\x20with\x20AND;\x20verifies\x20time-lock\x20expired)','required':!![]},{'name':'admin_proof','type':'string','description':'Admin\x20proof\x20(identifier=0\x20for\x20admin_guard)','required':!![]},{'name':'withdrawal_amount','type':'number','description':'Withdrawal\x20amount\x20in\x20smallest\x20unit\x20(identifier=0\x20for\x20threshold_guard)','required':!![]},{'name':'timelock_timestamp','type':'number','description':'Time-lock\x20release\x20timestamp\x20(identifier=0\x20for\x20timelock_guard)','required':!![]}],'body':a=>{const b=String(a['admin_guard_address']),c=String(a['threshold_guard_address']),d=String(a['timelock_guard_address']);if(b===c||b===d||c===d)throw new Error('T-PASS-08:\x20all\x20three\x20Guard\x20addresses\x20must\x20differ');const e=Number(a['withdrawal_amount']);if(!Number['isInteger'](e)||e<0x0)throw new Error('T-PASS-08:\x20withdrawal_amount\x20must\x20be\x20a\x20non-negative\x20integer,\x20got\x20'+e);const f=Number(a['timelock_timestamp']);if(!Number['isInteger'](f)||f<0x0)throw new Error('T-PASS-08:\x20timelock_timestamp\x20must\x20be\x20a\x20non-negative\x20integer,\x20got\x20'+f);const g={'type':'submission','guard':[{'object':b,'impack':!![]},{'object':c,'impack':!![]},{'object':d,'impack':!![]}],'submission':[{'guard':b,'submission':[{'identifier':0x0,'value':String(a['admin_proof']),'value_type':'string'}]},{'guard':c,'submission':[{'identifier':0x0,'value':String(e),'value_type':'u64'}]},{'guard':d,'submission':[{'identifier':0x0,'value':String(f),'value_type':'u64'}]}]};return g;},'notes':['Three\x20impack\x20Guards\x20with\x20chained\x20AND\x20relies:\x20admin\x20AND\x20threshold\x20AND\x20timelock','Order\x20is\x20critical:\x20admin\x20(no\x20relies)\x20→\x20threshold\x20(relies\x20admin)\x20→\x20timelock\x20(relies\x20threshold)','Threshold\x20and\x20timelock\x20Guards\x20must\x20be\x20configured\x20at\x20Guard\x20layer\x20with\x20AND\x20relies\x20on\x20the\x20previous\x20Guard','Short-circuit:\x20if\x20admin\x20fails,\x20threshold\x20and\x20timelock\x20are\x20not\x20verified\x20(saves\x20gas)','Typical\x20consumer:\x20Passport-verified\x20Treasury\x20withdrawal\x20(high-value\x20scenarios)','Guard\x20count\x20=\x203,\x20well\x20below\x20MAX_GUARD_COUNT_PASSPORT=20']}];export const PASSPORT_TEMPLATES_VERSION='1.0.0';export function getAllTemplates(){return[...PASSPORT_TEMPLATES];}export function getTemplateById(a){return PASSPORT_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScenario(a){return PASSPORT_TEMPLATES['filter'](b=>b['applicable_scenarios']['includes'](a));}export function getTemplatesByIndustry(a){return PASSPORT_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScenario(a){const b=getTemplatesByScenario(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return PASSPORT_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenarios':a['applicable_scenarios']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}try{return{'ok':!![],'body':c['body'](b)};}catch(f){return{'ok':![],'error':f instanceof Error?f['message']:String(f)};}}export{MAX_GUARD_COUNT_PASSPORT,MAX_SUBMISSION_SIZE_PASSPORT};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { type Facts, type FindingExposure } from "../config/rule-engine.js";
|
|
2
|
+
export type PaymentRiskLevel = "critical" | "high" | "medium" | "low" | "info";
|
|
2
3
|
export type PaymentRiskCategory = "structural" | "semantic" | "lifecycle" | "permission" | "cross_object" | "knowledge";
|
|
3
4
|
export type PaymentStakeholder = "signer" | "recipient" | "consumer" | "system";
|
|
4
5
|
export interface PaymentRisk {
|
|
@@ -13,12 +14,13 @@ export interface PaymentRisk {
|
|
|
13
14
|
evidence?: string;
|
|
14
15
|
related_move_error?: string;
|
|
15
16
|
auto_fixable: boolean;
|
|
17
|
+
exposure?: FindingExposure;
|
|
16
18
|
}
|
|
17
19
|
export interface PaymentRiskCheckContext {
|
|
18
20
|
recipient_count?: number;
|
|
19
21
|
uses_unsafe_unwrap?: boolean;
|
|
20
22
|
expects_mutation?: boolean;
|
|
21
|
-
payment_info_variant?: "payment_info" | "
|
|
23
|
+
payment_info_variant?: "payment_info" | "payment_info_basic" | "payment_info_with_guard" | "payment_info_basic_guarded";
|
|
22
24
|
expects_user_recipient_registered?: boolean;
|
|
23
25
|
uses_signer_for_provenance?: boolean;
|
|
24
26
|
coin_field_lint_reviewed?: boolean;
|
|
@@ -28,10 +30,9 @@ export interface PaymentRiskCheckContext {
|
|
|
28
30
|
has_for_guard?: boolean;
|
|
29
31
|
has_index?: boolean;
|
|
30
32
|
}
|
|
31
|
-
export declare
|
|
32
|
-
rule: PaymentRisk;
|
|
33
|
-
check: (ctx: PaymentRiskCheckContext) => PaymentRisk | null;
|
|
34
|
-
}[];
|
|
33
|
+
export declare function paymentRiskFacts(ctx: PaymentRiskCheckContext): Facts;
|
|
35
34
|
export declare const PAYMENT_RISK_VERSION = "1.0.0";
|
|
35
|
+
export declare const PAYMENT_RISK_RULES: Array<PaymentRisk & {
|
|
36
|
+
trigger?: string;
|
|
37
|
+
}>;
|
|
36
38
|
export declare function checkPaymentRisks(ctx: PaymentRiskCheckContext): PaymentRisk[];
|
|
37
|
-
export declare function getPaymentRiskById(id: string): PaymentRisk | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_RECIPIENT_COUNT}from'@wowok/wowok';const R_P_01={'rule':{'id':'R-PAYMENT-01','level':'HIGH','category':'permission','title':'unwrap()\x20performs\x20no\x20Payment\x20match\x20check\x20—\x20may\x20unwrap\x20wrong\x20CoinWrapper','description':'unwrap(wrapper,\x20ctx)\x20(payment.move:50)\x20returns\x20(Coin,\x20payment_address)\x20without\x20'+'verifying\x20that\x20wrapper.payment\x20matches\x20any\x20expected\x20Payment.\x20Callers\x20who\x20use\x20unwrap\x20'+'instead\x20of\x20unwrap_with_check\x20can\x20unwrap\x20a\x20CoinWrapper\x20that\x20was\x20minted\x20for\x20a\x20different\x20'+'Payment,\x20leading\x20to\x20fund\x20loss\x20or\x20accounting\x20corruption.\x20unwrap_with_check(payment_check)\x20'+'exists\x20specifically\x20to\x20enforce\x20the\x20match\x20(payment.move:54).','affected_stakeholders':['signer','recipient'],'scenario':'Caller\x20uses\x20unwrap\x20on\x20a\x20wrapper\x20from\x20a\x20different\x20Payment;\x20funds\x20are\x20released\x20anyway','mitigation':'SDK\x20should\x20force\x20callers\x20to\x20use\x20unwrap_with_check\x20and\x20deprecate\x20direct\x20unwrap\x20calls.\x20'+'The\x20only\x20safe\x20use\x20of\x20unwrap\x20is\x20when\x20the\x20caller\x20has\x20already\x20verified\x20the\x20match\x20off-chain.','related_move_error':'EPAYMENT_NOT_MATCH\x20(3)\x20—\x20only\x20raised\x20by\x20unwrap_with_check','auto_fixable':![]},'check':a=>{if(!a['uses_unsafe_unwrap'])return null;return{...R_P_01['rule'],'evidence':'uses_unsafe_unwrap=true\x20(no\x20Payment\x20match\x20check)'};}},R_P_02={'rule':{'id':'R-PAYMENT-02','level':'MEDIUM','category':'structural','title':'MAX_RECIPIENT_COUNT='+MAX_RECIPIENT_COUNT+'\x20permissive\x20—\x20gas\x20and\x20confirmation\x20cost','description':'A\x20single\x20Payment\x20may\x20carry\x20up\x20to\x20MAX_RECIPIENT_COUNT='+MAX_RECIPIENT_COUNT+'\x20recipients\x20'+'(payment.move:14).\x20The\x20limit\x20aborts\x20with\x20ERECIPIENT_COUNT_EXCEEDED\x20(1)\x20only\x20at\x20the\x20boundary.\x20'+'200\x20recipients\x20in\x20one\x20transaction\x20inflates\x20gas,\x20slows\x20finalization,\x20and\x20complicates\x20'+'retry\x20on\x20partial\x20failure.','affected_stakeholders':['signer','recipient'],'scenario':'Caller\x20submits\x20a\x20Payment\x20with\x20200\x20recipients;\x20transaction\x20is\x20heavy\x20and\x20slow','mitigation':'Business\x20layer\x20should\x20self-limit\x20recipient\x20count\x20(e.g.\x20≤50).\x20For\x20mass\x20payouts,\x20split\x20'+'across\x20multiple\x20Payment\x20objects\x20in\x20separate\x20transactions.','related_move_error':'ERECIPIENT_COUNT_EXCEEDED\x20(1)','auto_fixable':![]},'check':a=>{if(a['recipient_count']===undefined)return null;if(a['recipient_count']<MAX_RECIPIENT_COUNT)return null;return{...R_P_02['rule'],'evidence':'recipient_count='+a['recipient_count']+',\x20limit='+MAX_RECIPIENT_COUNT};}},R_P_03={'rule':{'id':'R-PAYMENT-03','level':'LOW','category':'lifecycle','title':'Payment\x20is\x20immutable\x20after\x20create\x20—\x20errors\x20cannot\x20be\x20corrected','description':'create()\x20calls\x20transfer::freeze_object(payment)\x20(payment.move:160).\x20All\x20fields\x20'+'(amount,\x20time,\x20info,\x20from_object,\x20signer,\x20record)\x20are\x20permanently\x20fixed.\x20There\x20is\x20no\x20'+'update,\x20refund,\x20or\x20void\x20API\x20on\x20the\x20Payment\x20object\x20itself\x20—\x20correction\x20requires\x20a\x20new\x20'+'Payment\x20(and\x20off-chain\x20reconciliation).','affected_stakeholders':['signer','consumer'],'scenario':'Signer\x20mistypes\x20a\x20recipient\x20address;\x20the\x20Payment\x20cannot\x20be\x20edited\x20post-create','mitigation':'Verify\x20all\x20fields\x20before\x20calling\x20create.\x20For\x20refunds,\x20create\x20a\x20new\x20Payment\x20in\x20the\x20'+'opposite\x20direction.\x20Off-chain\x20systems\x20should\x20treat\x20Payment\x20as\x20an\x20immutable\x20receipt.','auto_fixable':![]},'check':a=>{if(!a['expects_mutation'])return null;return{...R_P_03['rule'],'evidence':'expects_mutation=true\x20(Payment\x20is\x20frozen\x20at\x20create)'};}},R_P_04={'rule':{'id':'R-PAYMENT-04','level':'MEDIUM','category':'structural','title':'CoinWrapper\x20suppresses\x20coin_field\x20lint\x20—\x20Balance<T>\x20stored\x20in\x20a\x20struct\x20field','description':'CoinWrapper<phantom\x20T>\x20stores\x20Balance<T>\x20directly\x20in\x20a\x20struct\x20field\x20and\x20uses\x20'+'#[allow(lint(coin_field))]\x20to\x20suppress\x20the\x20Wow\x20lint\x20(payment.move:43-48).\x20The\x20lint\x20'+'normally\x20warns\x20against\x20storing\x20Balance\x20in\x20arbitrary\x20structs\x20because\x20of\x20object\x20'+'lifecycle\x20concerns.\x20The\x20suppression\x20is\x20intentional\x20but\x20should\x20be\x20reviewed\x20whenever\x20'+'the\x20Wow\x20framework\x20updates\x20its\x20coin_field\x20rules.','affected_stakeholders':['system'],'scenario':'Wow\x20framework\x20tightens\x20coin_field\x20lint\x20semantics;\x20CoinWrapper\x20becomes\x20non-compliant','mitigation':'Review\x20the\x20coin_field\x20suppression\x20on\x20each\x20Wow\x20upgrade.\x20Confirm\x20that\x20Balance<T>\x20'+'ownership\x20transfer\x20in\x20unwrap/unwrap_with_check\x20is\x20correct.','auto_fixable':![]},'check':a=>{if(a['coin_field_lint_reviewed'])return null;return{...R_P_04['rule'],'evidence':'coin_field_lint_reviewed=false\x20(needs\x20review)'};}},R_P_05={'rule':{'id':'R-PAYMENT-05','level':'LOW','category':'semantic','title':'PaymentInfo\x20has\x204\x20constructor\x20variants\x20—\x20caller\x20may\x20pick\x20the\x20wrong\x20one','description':'PaymentInfo\x20can\x20be\x20built\x20via\x20payment_info\x20(for_object+remark+index),\x20payment_info2\x20'+'(remark+index,\x20no\x20for_object),\x20payment_info_with_guard\x20(for_object+for_guard+remark+index),\x20'+'or\x20payment_info2_with_guard\x20(for_guard+remark+index,\x20no\x20for_object).\x20Selecting\x20the\x20'+'wrong\x20variant\x20leaves\x20for_object/for_guard\x20as\x20None,\x20breaking\x20downstream\x20lookups.','affected_stakeholders':['signer','consumer'],'scenario':'Caller\x20uses\x20payment_info2\x20when\x20they\x20meant\x20payment_info_with_guard;\x20for_object\x20is\x20lost','mitigation':'Document\x20each\x20variant\x27s\x20use\x20case\x20clearly.\x20SDK\x20should\x20pick\x20the\x20variant\x20automatically\x20'+'based\x20on\x20which\x20optional\x20fields\x20the\x20caller\x20provides.','auto_fixable':!![]},'check':a=>null},R_P_06={'rule':{'id':'R-PAYMENT-06','level':'MEDIUM','category':'cross_object','title':'object-linker\x20tx\x20registration\x20filters\x20recipients\x20by\x20is_object_address\x20—\x20user\x20addresses\x20skipped','description':'create()\x20iterates\x20recipients\x20and\x20only\x20calls\x20object_linker::affiliation_tx\x20for\x20addresses\x20that\x20'+'pass\x20util::is_object_address\x20(payment.move:147-161).\x20User\x20addresses\x20(EOAs)\x20are\x20not\x20'+'registered\x20in\x20the\x20object-linker\x20tx\x20index.\x20Callers\x20who\x20expect\x20every\x20recipient\x20to\x20'+'appear\x20in\x20object-linker\x20tx\x20queries\x20will\x20miss\x20EOA\x20recipients.','affected_stakeholders':['signer','consumer'],'scenario':'Caller\x20queries\x20object-linker\x20tx\x20for\x20all\x20Payment\x20recipients;\x20EOA\x20recipients\x20are\x20missing','mitigation':'Document\x20that\x20affiliation_tx\x20is\x20registered\x20only\x20for\x20object-address\x20recipients.\x20Off-chain\x20'+'systems\x20should\x20track\x20EOA\x20recipients\x20via\x20the\x20NewPaymentEvent\x20record,\x20not\x20via\x20object-linker\x20tx.','auto_fixable':![]},'check':a=>{if(!a['expects_user_recipient_registered'])return null;return{...R_P_06['rule'],'evidence':'expects_user_recipient_registered=true\x20(EOAs\x20are\x20skipped)'};}},R_P_07={'rule':{'id':'R-PAYMENT-07','level':'LOW','category':'semantic','title':'Payment.signer\x20records\x20payer\x20—\x20useful\x20for\x20provenance\x20but\x20not\x20authorization','description':'Payment.signer\x20is\x20set\x20to\x20ctx.sender()\x20at\x20creation\x20(payment.move).\x20It\x20can\x20be\x20read\x20via\x20'+'payment_signer<T>(payment)\x20for\x20provenance\x20(e.g.\x20\x27who\x20paid\x20for\x20this\x20order\x27).\x20It\x20is\x20'+'purely\x20informational\x20—\x20it\x20does\x20NOT\x20authorize\x20any\x20later\x20operation.\x20Consumers\x20must\x20not\x20'+'treat\x20signer\x20as\x20a\x20permission\x20grant.','affected_stakeholders':['consumer'],'scenario':'Consumer\x20treats\x20Payment.signer\x20as\x20authorizing\x20a\x20refund;\x20signer\x20is\x20just\x20provenance','mitigation':'Use\x20Payment.signer\x20only\x20for\x20audit/provenance.\x20Authorization\x20must\x20come\x20from\x20the\x20'+'referencing\x20object\x27s\x20own\x20Permission,\x20not\x20from\x20Payment.signer.','auto_fixable':![]},'check':a=>{if(!a['uses_signer_for_provenance'])return null;return{...R_P_07['rule'],'evidence':'uses_signer_for_provenance=true\x20(informational\x20only)'};}},R_P_08={'rule':{'id':'R-PAYMENT-08','level':'MEDIUM','category':'semantic','title':'Payment\x20scene\x20binding\x20(for_object\x20+\x20for_guard\x20+\x20index)\x20—\x20anti-reuse\x20for\x20exception\x20branches','description':'PaymentInfo\x20supports\x20for_object\x20(binds\x20to\x20specific\x20Order),\x20for_guard\x20(binds\x20to\x20specific\x20Guard),\x20'+'and\x20index\x20(binds\x20to\x20specific\x20Progress\x20step)\x20—\x20payment.move#L66-71.\x20When\x20all\x20three\x20are\x20set\x20via\x20'+'payment_info_with_guard\x20(payment.move#L82-86),\x20the\x20Payment\x20is\x20scene-bound:\x20it\x20can\x20ONLY\x20be\x20used\x20'+'in\x20the\x20specific\x20order\x20+\x20guard\x20+\x20progress\x20context.\x20This\x20is\x20the\x20anti-reuse\x20design\x20for\x20exception\x20'+'branch\x20compensation\x20(e.g.,\x20delivery\x20delay\x20>30min\x20triggers\x20auto-compensation).\x20'+'Payment\x20is\x20immutable\x20(freeze_object,\x20payment.move#L160)\x20—\x20binding\x20cannot\x20be\x20altered.\x20'+'VERIFIER-EVIDENCE\x20DESIGN:\x20customer\x20submits\x20Payment,\x20Guard\x20verifies\x20binding\x20fields\x20match\x20current\x20context.','affected_stakeholders':['signer','recipient','consumer'],'scenario':'Treasury\x20creates\x20compensation\x20Payment\x20with\x20PaymentInfo(for_object=order,\x20for_guard=exception_guard,\x20index=current_progress)\x20for\x20delivery\x20delay','mitigation':'Use\x20payment_info_with_guard\x20for\x20all\x20exception\x20branch\x20Payments.\x20Ensure\x20for_object,\x20for_guard,\x20and\x20index\x20'+'all\x20match\x20the\x20intended\x20context.\x20Use\x20tpl_payment_exception_compensation\x20(guard-templates.ts)\x20as\x20design\x20template.','auto_fixable':![]},'check':a=>{if(!a['uses_scene_binding'])return null;const b=[];if(!a['has_for_object'])b['push']('for_object\x20not\x20set\x20(Order\x20binding\x20missing)');if(!a['has_for_guard'])b['push']('for_guard\x20not\x20set\x20(Guard\x20binding\x20missing)');if(!a['has_index'])b['push']('index\x20not\x20set\x20(Progress\x20step\x20binding\x20missing)');if(b['length']===0x0)return null;return{...R_P_08['rule'],'evidence':'incomplete\x20scene\x20binding:\x20'+b['join'](',\x20')};}},R_P_09={'rule':{'id':'R-PAYMENT-09','level':'LOW','category':'semantic','title':'PaymentInfo\x20variant\x20selection\x20—\x20use\x20payment_info_with_guard\x20for\x20exception\x20branches','description':'PaymentInfo\x20has\x204\x20constructor\x20variants\x20(payment.move#L66-86):\x20'+'payment_info\x20(for_object+remark+index,\x20no\x20for_guard),\x20'+'payment_info2\x20(remark+index,\x20no\x20for_object/for_guard),\x20'+'payment_info_with_guard\x20(for_object+for_guard+remark+index\x20—\x20FULL\x20binding),\x20'+'payment_info2_with_guard\x20(for_guard+remark+index,\x20no\x20for_object).\x20'+'For\x20exception\x20branch\x20compensation,\x20ALWAYS\x20use\x20payment_info_with_guard\x20to\x20get\x20full\x20scene\x20binding.\x20'+'Using\x20payment_info\x20(without\x20for_guard)\x20or\x20payment_info2\x20(without\x20for_object)\x20weakens\x20anti-reuse\x20protection.','affected_stakeholders':['signer','consumer'],'scenario':'Caller\x20uses\x20payment_info\x20instead\x20of\x20payment_info_with_guard\x20for\x20exception\x20compensation;\x20for_guard\x20is\x20lost','mitigation':'For\x20exception\x20branch\x20Payments:\x20always\x20use\x20payment_info_with_guard(for_object,\x20for_guard,\x20remark,\x20index).\x20'+'For\x20simple\x20Payments\x20without\x20scene\x20binding:\x20payment_info\x20or\x20payment_info2\x20is\x20fine.\x20'+'SDK\x20should\x20auto-select\x20the\x20variant\x20based\x20on\x20which\x20fields\x20are\x20provided.','auto_fixable':!![]},'check':a=>{if(!a['uses_scene_binding'])return null;if(a['payment_info_variant']==='payment_info_with_guard')return null;return{...R_P_09['rule'],'evidence':'uses_scene_binding=true\x20but\x20variant='+(a['payment_info_variant']??'unknown')+'\x20(should\x20be\x20payment_info_with_guard)'};}};export const PAYMENT_RISK_RULES=[R_P_01,R_P_02,R_P_03,R_P_04,R_P_05,R_P_06,R_P_07,R_P_08,R_P_09];export const PAYMENT_RISK_VERSION='1.0.0';export function checkPaymentRisks(a){const b=[];for(const c of PAYMENT_RISK_RULES){const d=c['check'](a);if(d)b['push'](d);}return!b['find'](e=>e['id']==='R-PAYMENT-05')&&b['push'](R_P_05['rule']),b;}export function getPaymentRiskById(a){return PAYMENT_RISK_RULES['find'](b=>b['rule']['id']===a)?.['rule'];}
|
|
1
|
+
import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook,interpolate}from'../config/rule-engine.js';import{MAX_RECIPIENT_COUNT}from'@wowok/wowok';const AUTO_FIXABLE=new Set(['R-PAYMENT-05','R-PAYMENT-09']);export function paymentRiskFacts(a){const b=[];if(!a['has_for_object'])b['push']('for_object\x20not\x20set\x20(Order\x20binding\x20missing)');if(!a['has_for_guard'])b['push']('for_guard\x20not\x20set\x20(Guard\x20binding\x20missing)');if(!a['has_index'])b['push']('index\x20not\x20set\x20(Progress\x20step\x20binding\x20missing)');return{'recipient_count':a['recipient_count'],'recipient_count_at_limit':a['recipient_count']!==undefined&&a['recipient_count']>=MAX_RECIPIENT_COUNT,'uses_unsafe_unwrap':a['uses_unsafe_unwrap'],'expects_mutation':a['expects_mutation'],'coin_field_lint_reviewed':a['coin_field_lint_reviewed'],'expects_user_recipient_registered':a['expects_user_recipient_registered'],'uses_signer_for_provenance':a['uses_signer_for_provenance'],'uses_scene_binding':a['uses_scene_binding'],'scene_binding_missing':b['join'](',\x20'),'scene_binding_missing_count':b['length'],'payment_info_variant_display':a['payment_info_variant']??'unknown','max_recipient_count':MAX_RECIPIENT_COUNT,'always_true':!![]};}function paymentRuleBook(){const a=getJudgmentDoc()['rules']['domains']['payment'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27payment\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToPaymentRisk(a){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'],'auto_fixable':AUTO_FIXABLE['has'](a['rule_id']),...a['exposure']!=null?{'exposure':a['exposure']}:{}};}export const PAYMENT_RISK_VERSION='1.0.0';export const PAYMENT_RISK_RULES=((()=>{const a=factoryRulePack('payment');if(!a)return[];const b=paymentRiskFacts({});return a['rules']['map'](d=>{const e=d['cases'][0x0];return{'id':d['rule_id'],'level':e['level'],'category':d['dimension']??'semantic','title':interpolate(e['title'],b),'description':interpolate(e['description'],b),'affected_stakeholders':e['stakeholders']??[],'scenario':e['scenario']===undefined?'':interpolate(e['scenario'],b),'mitigation':e['mitigation']===undefined?'':interpolate(e['mitigation'],b),'auto_fixable':AUTO_FIXABLE['has'](d['rule_id']),...d['trigger']===undefined?{}:{'trigger':d['trigger']}};});})());export function checkPaymentRisks(a){const {findings:b}=evaluateRuleBook(paymentRuleBook(),paymentRiskFacts(a));return b['map'](findingToPaymentRisk);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{query_events,query_received,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{driveabilityOf}from'./recipient-constraint.js';const OBJECT_BATCH=0x32,EVENT_PAGE=0x32;export function paymentRelations(b,c){const d=c['toLowerCase'](),e=[];if((b['record']??[])['some'](f=>String(f['recipient'])['toLowerCase']()===d))e['push']('incoming');if(String(b['sender']??'')['toLowerCase']()===d)e['push']('creator');if(String(b['info']?.['for_object']??'')['toLowerCase']()===d)e['push']('for_object');if(String(b['info']?.['for_guard']??'')['toLowerCase']()===d)e['push']('for_guard');if(String(b['from_object']??'')['toLowerCase']()===d)e['push']('from_pool');return e;}export async function scanRecentPaymentEvents(a){const b=a['max_events']??0x64,c=[];let d,e=![];while(c['length']<b&&!e){const f=await query_events({'type':'NewPaymentEvent','order':'descending','limit':Math['min'](EVENT_PAGE,b-c['length']),'cursor':d,'network':a['network'],'no_cache':a['no_cache']}),g=f?.['data']??[];if(g['length']===0x0)break;for(const h of g){c['push'](h);if(a['since_ms']!=null&&Number(h['time']??0x0)<a['since_ms']){e=!![];break;}if(c['length']>=b)break;}if(!f?.['hasNextPage']||!f['nextCursor'])break;d=f['nextCursor'];}return c;}function isUserAddress(b){return b['startsWith']('0x00');}async function fetchObjectsInChunks(a,b){const c=[];for(let d=0x0;d<a['length'];d+=OBJECT_BATCH){const e=await query_objects({'objects':a['slice'](d,d+OBJECT_BATCH),'network':b['network'],'no_cache':b['no_cache']});c['push'](...e['objects']??[]);}return c;}export async function resolveBeneficialOwners(b,c){const d=new Map(),e=[],f=new Set();for(const n of b){const q=String(n??'')['toLowerCase']();if(!q)continue;if(isUserAddress(q)){d['set'](q,q);continue;}if(objectTypeFromAddress(q)===undefined)continue;!f['has'](q)&&(f['add'](q),e['push'](q));}if(e['length']===0x0)return d;const g=await fetchObjectsInChunks(e,c),h=new Map(),i=new Map();for(const r of g){const s=r['object']['toLowerCase']();if(r['type']===ObjectType['Order']||r['type']===ObjectType['Permission']){const t=String(r['builder']??'')['toLowerCase']();if(t)d['set'](s,t);}else{if(r['type']===ObjectType['Progress']){const u=String(r['machine']??'')['toLowerCase']();if(u)h['set'](s,u);}else{const v=String(r['permission']??'')['toLowerCase']();if(v)i['set'](s,v);}}}const j=new Map(),k=[...new Set(h['values']())];if(k['length']>0x0){const w=await fetchObjectsInChunks(k,c);for(const x of w){const y=String(x['permission']??'')['toLowerCase']();if(y)j['set'](x['object']['toLowerCase'](),y);}}const l=new Set(i['values']());for(const z of j['values']())l['add'](z);if(l['size']>0x0){const A=await fetchObjectsInChunks([...l],c),B=new Map();for(const C of A){const D=String(C['builder']??'')['toLowerCase']();if(D)B['set'](C['object']['toLowerCase'](),D);}for(const [E,F]of i){const G=B['get'](F);if(G)d['set'](E,G);}for(const [H,I]of h){const J=j['get'](I);if(!J)continue;const K=B['get'](J);if(K)d['set'](H,K);}}return d;}export function extractionPlanForHolder(a,b){const c=a['toLowerCase']();if(isUserAddress(c))return{'holder':c,'holder_kind':'user','operation':'
|
|
1
|
+
import{query_events,query_received,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{driveabilityOf}from'./recipient-constraint.js';const OBJECT_BATCH=0x32,EVENT_PAGE=0x32;export function paymentRelations(b,c){const d=c['toLowerCase'](),e=[];if((b['record']??[])['some'](f=>String(f['recipient'])['toLowerCase']()===d))e['push']('incoming');if(String(b['sender']??'')['toLowerCase']()===d)e['push']('creator');if(String(b['info']?.['for_object']??'')['toLowerCase']()===d)e['push']('for_object');if(String(b['info']?.['for_guard']??'')['toLowerCase']()===d)e['push']('for_guard');if(String(b['from_object']??'')['toLowerCase']()===d)e['push']('from_pool');return e;}export async function scanRecentPaymentEvents(a){const b=a['max_events']??0x64,c=[];let d,e=![];while(c['length']<b&&!e){const f=await query_events({'type':'NewPaymentEvent','order':'descending','limit':Math['min'](EVENT_PAGE,b-c['length']),'cursor':d,'network':a['network'],'no_cache':a['no_cache']}),g=f?.['data']??[];if(g['length']===0x0)break;for(const h of g){c['push'](h);if(a['since_ms']!=null&&Number(h['time']??0x0)<a['since_ms']){e=!![];break;}if(c['length']>=b)break;}if(!f?.['hasNextPage']||!f['nextCursor'])break;d=f['nextCursor'];}return c;}function isUserAddress(b){return b['startsWith']('0x00');}async function fetchObjectsInChunks(a,b){const c=[];for(let d=0x0;d<a['length'];d+=OBJECT_BATCH){const e=await query_objects({'objects':a['slice'](d,d+OBJECT_BATCH),'network':b['network'],'no_cache':b['no_cache']});c['push'](...e['objects']??[]);}return c;}export async function resolveBeneficialOwners(b,c){const d=new Map(),e=[],f=new Set();for(const n of b){const q=String(n??'')['toLowerCase']();if(!q)continue;if(isUserAddress(q)){d['set'](q,q);continue;}if(objectTypeFromAddress(q)===undefined)continue;!f['has'](q)&&(f['add'](q),e['push'](q));}if(e['length']===0x0)return d;const g=await fetchObjectsInChunks(e,c),h=new Map(),i=new Map();for(const r of g){const s=r['object']['toLowerCase']();if(r['type']===ObjectType['Order']||r['type']===ObjectType['Permission']){const t=String(r['builder']??'')['toLowerCase']();if(t)d['set'](s,t);}else{if(r['type']===ObjectType['Progress']){const u=String(r['machine']??'')['toLowerCase']();if(u)h['set'](s,u);}else{const v=String(r['permission']??'')['toLowerCase']();if(v)i['set'](s,v);}}}const j=new Map(),k=[...new Set(h['values']())];if(k['length']>0x0){const w=await fetchObjectsInChunks(k,c);for(const x of w){const y=String(x['permission']??'')['toLowerCase']();if(y)j['set'](x['object']['toLowerCase'](),y);}}const l=new Set(i['values']());for(const z of j['values']())l['add'](z);if(l['size']>0x0){const A=await fetchObjectsInChunks([...l],c),B=new Map();for(const C of A){const D=String(C['builder']??'')['toLowerCase']();if(D)B['set'](C['object']['toLowerCase'](),D);}for(const [E,F]of i){const G=B['get'](F);if(G)d['set'](E,G);}for(const [H,I]of h){const J=j['get'](I);if(!J)continue;const K=B['get'](J);if(K)d['set'](H,K);}}return d;}export function extractionPlanForHolder(a,b){const c=a['toLowerCase']();if(isUserAddress(c))return{'holder':c,'holder_kind':'user','operation':'unwrap\x20the\x20delivered\x20payment\x20wrapper\x20to\x20your\x20own\x20account','anyone_can_submit':![],'settles_to':c,'steps':['Unwrap\x20the\x20delivered\x20payment\x20wrapper\x20with\x20the\x20holder\x20account\x27s\x20signature.','The\x20bare\x20Coin<T>\x20is\x20transferred\x20back\x20to\x20the\x20same\x20account,\x20ready\x20to\x20spend.']};const e=objectTypeFromAddress(c),f=e?driveabilityOf(e):undefined,g=f?.['receive_entries'][0x0]??'owner-side\x20coin\x20extraction\x20from\x20the\x20'+String(e??'object'),i=b??f?.['funds_settle_to']??'the\x20object\x27s\x20owner';if(f?.['anyone_drivable'])return{'holder':c,'holder_kind':'business_object','operation':g,'anyone_can_submit':!![],'settles_to':i,'steps':['Obtain\x20the\x20Receiving<CoinWrapper<T>>\x20argument\x20from\x20the\x20wrapper\x27s\x20current\x20version\x20and\x20digest\x20returned\x20by\x20query_received.','Build\x20a\x20PTB\x20for\x20the\x20'+g+':\x20arguments\x20(…,\x20wrapper,\x20payment);\x20no\x20permission\x20witness\x20is\x20required.','Anyone\x20may\x20submit;\x20the\x20bare\x20Coin\x20settles\x20to\x20'+i+'.']};return{'holder':c,'holder_kind':'business_object','operation':g,'anyone_can_submit':![],...f?.['permission_index']!=null?{'permission_index':f['permission_index']}:{},'settles_to':i,'steps':['Obtain\x20the\x20Receiving<CoinWrapper<T>>\x20argument\x20from\x20the\x20wrapper\x27s\x20current\x20version\x20and\x20digest\x20returned\x20by\x20query_received.','Build\x20a\x20PTB\x20for\x20the\x20'+g+':\x20arguments\x20(…,\x20permission,\x20wrapper,\x20payment),\x20as\x20a\x20member\x20holding\x20permission\x20index\x20'+(f?.['permission_index']??'?')+',\x20or\x20its\x20passport-gated\x20variant.','The\x20bare\x20Coin\x20settles\x20to\x20'+i+'.']};}export async function pendingWrappersAt(a,b){const c=a['toLowerCase'](),d=await query_received({'name_or_address':{'name_or_address':c},'type':'CoinWrapper','network':b['network'],'no_cache':b['no_cache']});if(!d||Array['isArray'](d)||!('received'in d))return[];return(d['received']??[])['map'](e=>({'wrapper_id':String(e['id'])['toLowerCase'](),'payment':String(e['payment'])['toLowerCase'](),'amount':String(e['balance']??'0'),'version':e['version'],'digest':e['digest'],'holder':c,'plan':extractionPlanForHolder(c,b['concreteOwner'])}));}export async function trackAccountPayments(a){const b=a['account']['toLowerCase'](),c=await scanRecentPaymentEvents({'network':a['network'],'no_cache':a['no_cache'],'max_events':a['max_events']??0x64}),d=new Set();for(const i of c)for(const j of i['record']??[])d['add'](String(j['recipient'])['toLowerCase']());const e=await resolveBeneficialOwners([...d],{'network':a['network'],'no_cache':a['no_cache']}),f=[];for(const k of c){const l=paymentRelations(k,b),m=(k['record']??[])['some'](n=>e['get'](String(n['recipient'])['toLowerCase']())===b);if(l['length']===0x0&&!m)continue;if(!m&&!a['include_related']&&(l['length']===0x0||!l['includes']('incoming')))continue;f['push']({'ev':k,'relations':l,'beneficial':m});}const g=new Set();for(const {ev:n}of f)for(const o of n['record']??[]){const p=String(o['recipient'])['toLowerCase']();if(p===b||e['get'](p)===b)g['add'](p);}const h=new Map();return await Promise['all']([...g]['map'](async q=>{try{h['set'](q,await pendingWrappersAt(q,{'network':a['network'],'no_cache':a['no_cache'],'concreteOwner':e['get'](q)}));}catch{h['set'](q,[]);}})),f['map'](({ev:q,relations:s,beneficial:t})=>{const u=q['object']['toLowerCase'](),v=[];for(const x of q['record']??[]){const y=String(x['recipient'])['toLowerCase']();if(y!==b&&e['get'](y)!==b)continue;for(const z of h['get'](y)??[]){if(z['payment']===u)v['push'](z);}}return{'payment':u,'tx_digest':String(q['id']?.['txDigest']??''),'time':Number(q['time']??0x0),'amount':String(q['amount']??'0'),'creator':String(q['sender']??'')['toLowerCase'](),'from_object':q['from_object']??null,'info':q['info'],'legs':(q['record']??[])['map'](A=>{const B=String(A['recipient'])['toLowerCase']();return{'recipient':B,'amount':String(A['amount']??'0'),'recipient_kind':isUserAddress(B)?'user':'business_object',...e['has'](B)?{'beneficial_owner':e['get'](B)}:{}};}),'relations':s,'beneficial':t,'pending':v};});}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PERMISSION_TYPES=[{'name':'Permission','scope':'organization','definedOn':'Permission\x20Object\x20(standalone\x20on-chain\x20object,\x20referenced\x20by\x20service/machine/etc.)','controls':'Who\x20can\x20modify\x20the\x20bound\x20object\x27s\x20settings,\x20publish\x20it,\x20manage\x20its\x20funds,\x20etc.','grantedBy':'The\x20object\x27s\x20creator\x20(owner)\x20or\x20anyone\x20the\x20creator\x20delegates\x20to','example':'A\x20shop\x20owner\x20creates\x20a\x20Permission\x20allowing\x20only\x20their\x20staff\x20to\x20modify\x20the\x20Service\x27s\x20price.'},{'name':'NamedOperator','scope':'order','definedOn':'Per-order\x20(specified\x20in\x20the\x20order\x20creation/modification\x20by\x20the\x20service)','controls':'Who\x20can\x20operate\x20on\x20a\x20specific\x20order:\x20advance\x20progress,\x20settle,\x20refund,\x20etc.','grantedBy':'The\x20service\x20(via\x20its\x20order_allocators\x20or\x20explicit\x20named\x20operators)','example':'A\x20delivery\x20service\x20assigns\x20Alice\x20as\x20the\x20NamedOperator\x20for\x20order\x20#123\x20—\x20only\x20Alice\x20can\x20mark\x20it\x20delivered.'},{'name':'OrderHolder','scope':'order_holder','definedOn':'Per-order\x20(the\x20\x27\x27\x20empty\x20string\x20address\x20=\x20the\x20order\x27s\x20current\x20holder)','controls':'Who\x20currently\x20holds\x20the\x20order\x20and\x20can\x20perform\x20holder-specific\x20actions\x20(accept,\x20reject,\x20pay)','grantedBy':'Implicitly\x20assigned\x20when\x20an\x20order\x20is\x20created\x20or\x20transferred','example':'Bob\x20places\x20an\x20order\x20—\x20he\x20becomes\x20the\x20OrderHolder.\x20He\x20can\x20accept\x20delivery\x20or\x20request\x20arbitration.'}];const PERMISSION_TYPE_INDEX=new Map(PERMISSION_TYPES['map'](a=>[a['name'],a]));export function getPermissionType(a){return PERMISSION_TYPE_INDEX['get'](a);}export const REPOSITORY_PERMISSIONS=[{'index':0x64,'name':'REPOSITORY_NEW','description':'Create\x20new\x20Repository\x20policy','governed_operation':'repository::new'},{'index':0x65,'name':'REPOSITORY_DESCRIPTION','description':'Modify\x20Repository\x20description','governed_operation':'repository::description_set'},{'index':0x66,'name':'REPOSITORY_POLICY','description':'Modify\x20Repository\x20policy','governed_operation':'repository::policy_set'},{'index':0x67,'name':'REPOSITORY_REWARD','description':'Set\x20Repository\x20reward','governed_operation':'repository::reward_set'},{'index':0x68,'name':'REPOSITORY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'repository::owner_receive'},{'index':0x69,'name':'REPOSITORY_UM','description':'Set\x20UM\x20(User\x20Manager)','governed_operation':'repository::um_set'}];export const REWARD_PERMISSIONS=[{'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward','governed_operation':'reward::new'},{'index':0x97,'name':'REWARD_DESCRIPTION','description':'Modify\x20Reward\x20description','governed_operation':'reward::description_set'},{'index':0x98,'name':'REWARD_GUARD','description':'Set\x20Reward\x20guard','governed_operation':'reward::guard_set'},{'index':0x99,'name':'REWARD_COIN_ADD','description':'Add\x20coins\x20to\x20Reward','governed_operation':'reward::coin_add'},{'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20reward','governed_operation':'reward::receive'},{'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Extend\x20guard\x20expiration','governed_operation':'reward::guard_expiration_time_add'},{'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'reward::owner_receive'},{'index':0x9d,'name':'REWARD_UM','description':'Set\x20UM','governed_operation':'reward::um_set'}];export const MACHINE_PERMISSIONS=[{'index':0xc8,'name':'MACHINE_NEW','description':'Create\x20new\x20Machine','governed_operation':'machine::new'},{'index':0xc9,'name':'MACHINE_DESCRIPTION','description':'Modify\x20Machine\x20description','governed_operation':'machine::description_set'},{'index':0xcb,'name':'MACHINE_CONSENSUS_REPOSITORIES','description':'Set\x20consensus\x20Repositories','governed_operation':'machine::consensus_repositories_set'},{'index':0xcc,'name':'MACHINE_PAUSE','description':'Pause/resume\x20Machine','governed_operation':'machine::pause'},{'index':0xcd,'name':'MACHINE_PUBLISH','description':'Publish\x20Machine\x20(irreversible)','governed_operation':'machine::publish'},{'index':0xce,'name':'MACHINE_NODE','description':'Modify\x20Machine\x20nodes','governed_operation':'machine::node_*'},{'index':0xcf,'name':'MACHINE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'machine::owner_receive'},{'index':0xd0,'name':'MACHINE_UM','description':'Set\x20UM','governed_operation':'machine::um_set'}];export const PROGRESS_PERMISSIONS=[{'index':0xdc,'name':'PROGRESS_NEW','description':'Create\x20new\x20Progress','governed_operation':'progress::new'},{'index':0xdd,'name':'PROGRESS_NAMED_OPERATOR','description':'Manage\x20named\x20operators','governed_operation':'progress::named_operator_*'},{'index':0xde,'name':'PROGRESS_TASK','description':'Submit\x20task','governed_operation':'progress::task'},{'index':0xdf,'name':'PROGRESS_CONTEXT_REPOSITORY','description':'Set\x20context\x20Repository','governed_operation':'progress::context_repository_set'},{'index':0xe0,'name':'PROGRESS_UNHOLD','description':'Unhold\x20Progress','governed_operation':'progress::unhold'},{'index':0xe1,'name':'PROGRESS_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'progress::owner_receive'}];export const TREASURY_PERMISSIONS=[{'index':0xfa,'name':'TREASURY_NEW','description':'Create\x20new\x20Treasury','governed_operation':'treasury::new'},{'index':0xfb,'name':'TREASURY_DESCRIPTION','description':'Modify\x20Treasury\x20description','governed_operation':'treasury::description_set'},{'index':0xfc,'name':'TREASURY_DEPOSIT','description':'Deposit\x20funds','governed_operation':'treasury::deposit'},{'index':0xfd,'name':'TREASURY_RECEIVE','description':'Receive\x20funds','governed_operation':'treasury::receive'},{'index':0xfe,'name':'TREASURY_WITHDRAW','description':'Withdraw\x20funds','governed_operation':'treasury::withdraw'},{'index':0xff,'name':'TREASURY_EXTERNAL_DEPOSIT_GUARD','description':'Manage\x20external\x20deposit\x20Guard\x20list','governed_operation':'treasury::external_deposit_guard_add/remove/clear'},{'index':0x100,'name':'TREASURY_EXTERNAL_WITHDRAW_GUARD','description':'Manage\x20external\x20withdraw\x20Guard\x20list','governed_operation':'treasury::external_withdraw_guard_add/remove/clear'},{'index':0x101,'name':'TREASURY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'treasury::owner_receive'},{'index':0x102,'name':'TREASURY_UM','description':'Set\x20UM','governed_operation':'treasury::um_set'}];export const SERVICE_PERMISSIONS=[{'index':0x12c,'name':'SERVICE_NEW','description':'Create\x20new\x20Service','governed_operation':'service::new'},{'index':0x12d,'name':'SERVICE_DESCRIPTION','description':'Modify\x20Service\x20description','governed_operation':'service::description_set'},{'index':0x12f,'name':'SERVICE_LOCATION','description':'Set\x20Service\x20location','governed_operation':'service::location_set'},{'index':0x130,'name':'SERVICE_REPOSITORY','description':'Set\x20Service\x20repository','governed_operation':'service::repository_set'},{'index':0x131,'name':'SERVICE_SALES','description':'Modify\x20sales','governed_operation':'service::sales_*'},{'index':0x132,'name':'SERVICE_MACHINE','description':'Bind/modify\x20Machine','governed_operation':'service::machine_set'},{'index':0x133,'name':'SERVICE_BUY_GUARD','description':'Set\x20buy\x20guard','governed_operation':'service::buy_guard_set'},{'index':0x134,'name':'SERVICE_ARBITRATION','description':'Set\x20Arbitration','governed_operation':'service::arbitration_set'},{'index':0x135,'name':'SERVICE_CUSTOMER_INFO_REQUIRED','description':'Set\x20customer\x20info\x20required','governed_operation':'service::customer_info_required_set'},{'index':0x136,'name':'SERVICE_PAUSE','description':'Pause/resume\x20Service','governed_operation':'service::pause'},{'index':0x137,'name':'SERVICE_PUBLISH','description':'Publish\x20Service','governed_operation':'service::publish'},{'index':0x138,'name':'SERVICE_DISCOUNT','description':'Set\x20discount','governed_operation':'service::discount_set'},{'index':0x139,'name':'SERVICE_ORDER_ALLOCATOR','description':'Set\x20order\x20allocator','governed_operation':'service::order_allocator_set'},{'index':0x13a,'name':'SERVICE_COMPENSATION_FUND_DEPOSIT','description':'Deposit\x20to\x20compensation\x20fund','governed_operation':'service::compensation_fund_deposit'},{'index':0x13b,'name':'SERVICE_COMPENSATION_FUND_WITHDRAW','description':'Withdraw\x20from\x20compensation\x20fund','governed_operation':'service::compensation_fund_withdraw'},{'index':0x13c,'name':'SERVICE_COMPENSATION_FUND_FREEZE','description':'Freeze\x20compensation\x20fund','governed_operation':'service::compensation_fund_freeze'},{'index':0x13d,'name':'SERVICE_COMPENSATION_FUND_UNFREEZE','description':'Unfreeze\x20compensation\x20fund','governed_operation':'service::compensation_fund_unfreeze'},{'index':0x13e,'name':'SERVICE_REWARD','description':'Set\x20reward','governed_operation':'service::reward_set'},{'index':0x13f,'name':'SERVICE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'service::owner_receive'},{'index':0x140,'name':'SERVICE_UM','description':'Set\x20UM','governed_operation':'service::um_set'}];export const ARBITRATION_PERMISSIONS=[{'index':0x15e,'name':'ARBITRATION_NEW','description':'Create\x20new\x20Arbitration','governed_operation':'arbitration::new'},{'index':0x15f,'name':'ARBITRATION_DESCRIPTION','description':'Modify\x20description','governed_operation':'arbitration::description_set'},{'index':0x161,'name':'ARBITRATION_LOCATION','description':'Set\x20location','governed_operation':'arbitration::location_set'},{'index':0x162,'name':'ARBITRATION_VOTING_GUARD','description':'Set\x20voting\x20guard','governed_operation':'arbitration::voting_guard_set'},{'index':0x163,'name':'ARBITRATION_USAGE_GUARD','description':'Set\x20usage\x20guard','governed_operation':'arbitration::usage_guard_set'},{'index':0x164,'name':'ARBITRATION_PAUSE','description':'Pause/resume','governed_operation':'arbitration::pause'},{'index':0x165,'name':'ARBITRATION_FEE','description':'Set\x20fee','governed_operation':'arbitration::fee_set'},{'index':0x166,'name':'ARBITRATION_VOTE','description':'Vote','governed_operation':'arbitration::vote'},{'index':0x167,'name':'ARBITRATION_ARBITRATION','description':'Arbitrate\x20dispute','governed_operation':'arbitration::arbitration'},{'index':0x168,'name':'ARBITRATION_FEEDBACK','description':'Provide\x20feedback','governed_operation':'arbitration::feedback'},{'index':0x169,'name':'ARBITRATION_CONFIRM','description':'Confirm\x20resolution','governed_operation':'arbitration::confirm'},{'index':0x16a,'name':'ARBITRATION_VOTING_DEADLINE_CHANGE','description':'Change\x20voting\x20deadline','governed_operation':'arbitration::voting_deadline_change'},{'index':0x16b,'name':'ARBITRATION_RESET','description':'Reset\x20arbitration','governed_operation':'arbitration::reset'},{'index':0x16c,'name':'ARBITRATION_ARB_WITHDRAW','description':'Arb\x20withdraw','governed_operation':'arbitration::arb_withdraw'},{'index':0x16d,'name':'ARBITRATION_FEES_ALLOC','description':'Allocate\x20fees','governed_operation':'arbitration::fees_alloc'},{'index':0x16e,'name':'ARBITRATION_FEES_TRANSFER','description':'Transfer\x20fees','governed_operation':'arbitration::fees_transfer'},{'index':0x16f,'name':'ARBITRATION_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'arbitration::owner_receive'},{'index':0x170,'name':'ARBITRATION_UM','description':'Set\x20UM','governed_operation':'arbitration::um_set'}];export const DEMAND_PERMISSIONS=[{'index':0x190,'name':'DEMAND_NEW','description':'Create\x20new\x20Demand','governed_operation':'demand::new'},{'index':0x191,'name':'DEMAND_DESCRIPTION','description':'Modify\x20description','governed_operation':'demand::description_set'},{'index':0x192,'name':'DEMAND_LOCATION','description':'Set\x20location','governed_operation':'demand::location_set'},{'index':0x194,'name':'DEMAND_GUARD','description':'Set\x20guard','governed_operation':'demand::guard_set'},{'index':0x195,'name':'DEMAND_REWARD','description':'Set\x20reward','governed_operation':'demand::reward_set'},{'index':0x196,'name':'DEMAND_FEEDBACK','description':'Provide\x20feedback','governed_operation':'demand::feedback'},{'index':0x197,'name':'DEMAND_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'demand::owner_receive'},{'index':0x198,'name':'DEMAND_UM','description':'Set\x20UM','governed_operation':'demand::um_set'}];export const CONTACT_PERMISSIONS=[{'index':0x1c2,'name':'CONTACT_NEW','description':'Create\x20new\x20Contact','governed_operation':'contact::new'},{'index':0x1c3,'name':'CONTACT_DESCRIPTION','description':'Modify\x20description','governed_operation':'contact::description_set'},{'index':0x1c4,'name':'CONTACT_LOCATION','description':'Set\x20location','governed_operation':'contact::location_set'},{'index':0x1c5,'name':'CONTACT_IM','description':'Set\x20IM','governed_operation':'contact::im_set'},{'index':0x1c6,'name':'CONTACT_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'contact::owner_receive'}];export const PERMISSION_SCENES=[{'id':'service_permission','name':'Service\x20publish\x20&\x20operation\x20permission','host_object':'Service','permission_index_range':'300-320','builtin_indexes':SERVICE_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['service::publish\x20(311)','service::pause\x20(310)','service::machine_set\x20(306)','service::buy_guard_set\x20(307)','service::order_allocator_set\x20(313)','service::reward_set\x20(318)','service::compensation_fund_*\x20(314-317)'],'mutable_after_publish':!![],'common_patterns':['Owner-only\x20publish:\x20only\x20owner/admin\x20has\x20SERVICE_PUBLISH\x20(311)','Separate\x20pause\x20role:\x20delegate\x20SERVICE_PAUSE\x20(310)\x20to\x20operator','Allocator\x20guard:\x20SERVICE_ORDER_ALLOCATOR\x20(313)\x20guarded\x20by\x20Guard'],'recommended_templates':['T-P-03','T-P-02']},{'id':'machine_permission','name':'Machine\x20workflow\x20permission','host_object':'Machine','permission_index_range':'200-208','builtin_indexes':MACHINE_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['machine::publish\x20(205)','machine::node_*\x20(206)','machine::pause\x20(204)','machine::consensus_repositories_set\x20(203)'],'mutable_after_publish':!![],'common_patterns':['Pre-publish\x20node\x20editing:\x20MACHINE_NODE\x20(206)\x20before\x20publish\x20only','Post-publish:\x20only\x20Forward.guard\x20can\x20be\x20modified;\x20node\x20structure\x20frozen','Consensus\x20repositories:\x20MACHINE_CONSENSUS_REPOSITORIES\x20(203)\x20for\x20multi-repo\x20consensus'],'recommended_templates':['T-P-04','T-P-01']},{'id':'treasury_permission','name':'Treasury\x20fund\x20management\x20permission','host_object':'Treasury','permission_index_range':'250-258','builtin_indexes':TREASURY_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['treasury::deposit\x20(252)','treasury::withdraw\x20(254)','treasury::external_deposit_guard_*\x20(255)','treasury::external_withdraw_guard_*\x20(256)','treasury::owner_receive\x20(257)','treasury::um_set\x20(258)'],'mutable_after_publish':!![],'common_patterns':['Guard-protected\x20external\x20ops:\x20TREASURY_EXTERNAL_*_GUARD\x20(255/256)\x20for\x20cross-treasury\x20safety;\x20external_deposit/external_withdraw\x20use\x20Guard\x20+\x20Passport,\x20no\x20Permission\x20index','Withdraw\x20restricted\x20to\x20owner+admin:\x20TREASURY_WITHDRAW\x20(254)\x20tightly\x20held','UM\x20delegation:\x20TREASURY_UM\x20(258)\x20for\x20contact\x20management'],'recommended_templates':['T-P-05','T-P-02']},{'id':'allocation_permission','name':'Allocation\x20strategy\x20permission\x20(custom)','host_object':'Allocation','permission_index_range':'>=1000\x20(custom)','builtin_indexes':[],'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['allocation::alloc\x20(custom\x20index)','allocation::receive\x20(custom\x20index)'],'mutable_after_publish':!![],'common_patterns':['Custom\x20index\x20>=\x201000\x20for\x20business-specific\x20allocation\x20rules','Guard-bound\x20alloc:\x20alloc\x20operation\x20requires\x20Guard\x20verification','Multi-entity:\x20multiple\x20allocators\x20share\x20same\x20permission_index'],'recommended_templates':['T-P-01','T-P-02']},{'id':'arbitration_permission','name':'Arbitration\x20case\x20management\x20permission','host_object':'Arbitration','permission_index_range':'350-368','builtin_indexes':ARBITRATION_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['arbitration::vote\x20(358)','arbitration::arbitration\x20(359)','arbitration::feedback\x20(360)','arbitration::confirm\x20(361)','arbitration::voting_deadline_change\x20(362)','arbitration::reset\x20(363)','arbitration::fees_alloc\x20(365)'],'mutable_after_publish':!![],'common_patterns':['Arb\x20committee:\x20ARBITRATION_VOTE\x20(358)\x20granted\x20to\x20multiple\x20arbiters','Open\x20voting\x20guard:\x20voting_guard\x20allows\x20public\x20to\x20vote\x20(weight=1)','Guard-based\x20usage:\x20usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed'],'recommended_templates':['T-P-06','T-P-02']},{'id':'repository_permission','name':'Repository\x20policy\x20management\x20permission','host_object':'Repository','permission_index_range':'100-105','builtin_indexes':REPOSITORY_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['repository::policy_set\x20(102)','repository::reward_set\x20(103)'],'mutable_after_publish':!![],'common_patterns':['Public\x20read:\x20anyone\x20can\x20read\x20Repository\x20data','Owner-write:\x20REPOSITORY_POLICY\x20(102)\x20restricted\x20to\x20owner/admin','Reward\x20binding:\x20REPOSITORY_REWARD\x20(103)\x20for\x20incentive\x20distribution'],'recommended_templates':['T-P-01']},{'id':'reward_permission','name':'Reward\x20distribution\x20permission','host_object':'Reward','permission_index_range':'150-157','builtin_indexes':REWARD_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['reward::guard_set\x20(152)','reward::coin_add\x20(153)','reward::receive\x20(154)','reward::guard_expiration_time_add\x20(155)'],'mutable_after_publish':!![],'common_patterns':['Guard-bound\x20claim:\x20REWARD_RECEIVE\x20(154)\x20protected\x20by\x20Guard','Coin\x20refill:\x20REWARD_COIN_ADD\x20(153)\x20for\x20owner-only\x20top-up','Expiration\x20extension:\x20REWARD_GUARD_EXPIRATION_TIME_ADD\x20(155)\x20for\x20deadline\x20mgmt'],'recommended_templates':['T-P-01']},{'id':'progress_permission','name':'Progress\x20workflow\x20advancement\x20permission','host_object':'Progress','permission_index_range':'220-225','builtin_indexes':PROGRESS_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['progress::task\x20(222)','progress::named_operator_*\x20(221)','progress::context_repository_set\x20(223)','progress::unhold\x20(224)'],'mutable_after_publish':![],'common_patterns':['Named\x20operator:\x20PROGRESS_NAMED_OPERATOR\x20(221)\x20for\x20assigned\x20operators','Task\x20submission:\x20PROGRESS_TASK\x20(222)\x20for\x20any\x20authorized\x20submitter','Machine-bound:\x20Progress\x20permission\x20effective\x20only\x20after\x20Machine\x20publish'],'recommended_templates':['T-P-01']},{'id':'demand_permission','name':'Demand\x20publication\x20permission','host_object':'Demand','permission_index_range':'400-408','builtin_indexes':DEMAND_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['demand::guard_set\x20(404)','demand::reward_set\x20(405)','demand::feedback\x20(406)'],'mutable_after_publish':!![],'common_patterns':['Public\x20demand:\x20anyone\x20can\x20view;\x20only\x20owner\x20can\x20publish','Feedback\x20channel:\x20DEMAND_FEEDBACK\x20(406)\x20for\x20community\x20input','Guard\x20filtering:\x20DEMAND_GUARD\x20(404)\x20for\x20service\x20eligibility'],'recommended_templates':['T-P-01']},{'id':'contact_permission','name':'Contact/Messenger\x20management\x20permission','host_object':'Contact','permission_index_range':'450-454','builtin_indexes':CONTACT_PERMISSIONS,'owner_operations':['um_set','builder\x20(transfer)'],'admin_operations':['description_set','remark_*','perm_*','entity_*','admin_*'],'permission_index_operations':['contact::im_set\x20(453)'],'mutable_after_publish':!![],'common_patterns':['Personal\x20contact:\x20usually\x20single-owner','IM\x20binding:\x20CONTACT_IM\x20(453)\x20for\x20chat\x20platform\x20binding'],'recommended_templates':['T-P-01']},{'id':'ownership_transfer','name':'Permission\x20ownership\x20transfer\x20(cross-scene)','host_object':'Standalone','permission_index_range':'N/A','builtin_indexes':[],'owner_operations':['builder\x20(transfer)'],'admin_operations':[],'permission_index_operations':[],'mutable_after_publish':!![],'common_patterns':['Owner-only:\x20assert_owner\x20required\x20for\x20transfer','Irreversible:\x20once\x20transferred,\x20original\x20owner\x20loses\x20all\x20control','New\x20owner\x20auto-admin:\x20new\x20owner\x20becomes\x20admin\x20automatically','Pre-transfer\x20backup:\x20export\x20Permission\x20JSON\x20before\x20transfer'],'recommended_templates':['T-P-08']}];export const PERMISSION_LEDGER_VERSION='1.0.0';export function getScenesByHostObject(a){return PERMISSION_SCENES['filter'](b=>b['host_object']===a);}export function findSceneById(a){return PERMISSION_SCENES['find'](b=>b['id']===a);}export function findSceneByPermissionIndex(a){for(const b of PERMISSION_SCENES){if(b['builtin_indexes']['some'](c=>c['index']===a))return b;}return undefined;}export function getBuiltinPermissionByIndex(a){for(const b of PERMISSION_SCENES){const c=b['builtin_indexes']['find'](d=>d['index']===a);if(c)return c;}return undefined;}export function isBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function inferSceneFromIntent(a){const b=a['toLowerCase']();if(b['includes']('transfer')||b['includes']('handover'))return findSceneById('ownership_transfer');const c=[['service','Service'],['machine','Machine'],['treasury','Treasury'],['arbitration','Arbitration'],['repository','Repository'],['reward','Reward'],['progress','Progress'],['demand','Demand'],['contact','Contact'],['messenger','Contact'],['allocation','Allocation']];for(const [d,e]of c){if(b['includes'](d)){const f=getScenesByHostObject(e);if(f['length']>0x0)return f[0x0];}}return undefined;}export function getAllBuiltinPermissions(){return PERMISSION_SCENES['flatMap'](a=>a['builtin_indexes']);}export function getPermissionScenesCount(){return PERMISSION_SCENES['length'];}
|
|
1
|
+
export const PERMISSION_TYPES=[{'name':'Permission','scope':'organization','definedOn':'Permission\x20Object\x20(standalone\x20on-chain\x20object,\x20referenced\x20by\x20service/machine/etc.)','controls':'Who\x20can\x20modify\x20the\x20bound\x20object\x27s\x20settings,\x20publish\x20it,\x20manage\x20its\x20funds,\x20etc.','grantedBy':'The\x20object\x27s\x20creator\x20(owner)\x20or\x20anyone\x20the\x20creator\x20delegates\x20to','example':'A\x20shop\x20owner\x20creates\x20a\x20Permission\x20allowing\x20only\x20their\x20staff\x20to\x20modify\x20the\x20Service\x27s\x20price.'},{'name':'NamedOperator','scope':'order','definedOn':'Per-order\x20(specified\x20in\x20the\x20order\x20creation/modification\x20by\x20the\x20service)','controls':'Who\x20can\x20operate\x20on\x20a\x20specific\x20order:\x20advance\x20progress,\x20settle,\x20refund,\x20etc.','grantedBy':'The\x20service\x20(via\x20its\x20order_allocators\x20or\x20explicit\x20named\x20operators)','example':'A\x20delivery\x20service\x20assigns\x20Alice\x20as\x20the\x20NamedOperator\x20for\x20order\x20#123\x20—\x20only\x20Alice\x20can\x20mark\x20it\x20delivered.'},{'name':'OrderHolder','scope':'order_holder','definedOn':'Per-order\x20(the\x20\x27\x27\x20empty\x20string\x20address\x20=\x20the\x20order\x27s\x20current\x20holder)','controls':'Who\x20currently\x20holds\x20the\x20order\x20and\x20can\x20perform\x20holder-specific\x20actions\x20(accept,\x20reject,\x20pay)','grantedBy':'Implicitly\x20assigned\x20when\x20an\x20order\x20is\x20created\x20or\x20transferred','example':'Bob\x20places\x20an\x20order\x20—\x20he\x20becomes\x20the\x20OrderHolder.\x20He\x20can\x20accept\x20delivery\x20or\x20request\x20arbitration.'}];const PERMISSION_TYPE_INDEX=new Map(PERMISSION_TYPES['map'](a=>[a['name'],a]));export function getPermissionType(a){return PERMISSION_TYPE_INDEX['get'](a);}export const REPOSITORY_PERMISSIONS=[{'index':0x64,'name':'REPOSITORY_NEW','description':'Create\x20new\x20Repository\x20policy','governed_operation':'create_repository'},{'index':0x65,'name':'REPOSITORY_DESCRIPTION','description':'Modify\x20Repository\x20description','governed_operation':'set_repository_description'},{'index':0x66,'name':'REPOSITORY_POLICY','description':'Modify\x20Repository\x20policy','governed_operation':'set_repository_policy'},{'index':0x67,'name':'REPOSITORY_REWARD','description':'Set\x20Repository\x20reward','governed_operation':'set_repository_reward'},{'index':0x68,'name':'REPOSITORY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_repository_by_owner'},{'index':0x69,'name':'REPOSITORY_UM','description':'Set\x20UM\x20(User\x20Manager)','governed_operation':'set_repository_user_manager'}];export const REWARD_PERMISSIONS=[{'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward','governed_operation':'create_reward'},{'index':0x97,'name':'REWARD_DESCRIPTION','description':'Modify\x20Reward\x20description','governed_operation':'set_reward_description'},{'index':0x98,'name':'REWARD_GUARD','description':'Set\x20Reward\x20guard','governed_operation':'set_reward_guard'},{'index':0x99,'name':'REWARD_COIN_ADD','description':'Add\x20coins\x20to\x20Reward','governed_operation':'add_reward_coin'},{'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20reward','governed_operation':'receive_reward'},{'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Extend\x20guard\x20expiration','governed_operation':'extend_reward_guard_expiration'},{'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_reward_by_owner'},{'index':0x9d,'name':'REWARD_UM','description':'Set\x20UM','governed_operation':'set_reward_user_manager'}];export const MACHINE_PERMISSIONS=[{'index':0xc8,'name':'MACHINE_NEW','description':'Create\x20new\x20Machine','governed_operation':'create_machine'},{'index':0xc9,'name':'MACHINE_DESCRIPTION','description':'Modify\x20Machine\x20description','governed_operation':'set_machine_description'},{'index':0xcb,'name':'MACHINE_CONSENSUS_REPOSITORIES','description':'Set\x20consensus\x20Repositories','governed_operation':'set_consensus_repositories'},{'index':0xcc,'name':'MACHINE_PAUSE','description':'Pause/resume\x20Machine','governed_operation':'pause_or_resume_machine'},{'index':0xcd,'name':'MACHINE_PUBLISH','description':'Publish\x20Machine\x20(irreversible)','governed_operation':'publish_machine'},{'index':0xce,'name':'MACHINE_NODE','description':'Modify\x20Machine\x20nodes','governed_operation':'manage_machine_nodes'},{'index':0xcf,'name':'MACHINE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_machine_by_owner'},{'index':0xd0,'name':'MACHINE_UM','description':'Set\x20UM','governed_operation':'set_machine_user_manager'}];export const PROGRESS_PERMISSIONS=[{'index':0xdc,'name':'PROGRESS_NEW','description':'Create\x20new\x20Progress','governed_operation':'create_progress'},{'index':0xdd,'name':'PROGRESS_NAMED_OPERATOR','description':'Manage\x20named\x20operators','governed_operation':'manage_named_operators'},{'index':0xde,'name':'PROGRESS_TASK','description':'Submit\x20task','governed_operation':'submit_task'},{'index':0xdf,'name':'PROGRESS_CONTEXT_REPOSITORY','description':'Set\x20context\x20Repository','governed_operation':'set_progress_context_repository'},{'index':0xe0,'name':'PROGRESS_UNHOLD','description':'Unhold\x20Progress','governed_operation':'unhold_progress'},{'index':0xe1,'name':'PROGRESS_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_progress_by_owner'}];export const TREASURY_PERMISSIONS=[{'index':0xfa,'name':'TREASURY_NEW','description':'Create\x20new\x20Treasury','governed_operation':'create_treasury'},{'index':0xfb,'name':'TREASURY_DESCRIPTION','description':'Modify\x20Treasury\x20description','governed_operation':'set_treasury_description'},{'index':0xfc,'name':'TREASURY_DEPOSIT','description':'Deposit\x20funds','governed_operation':'deposit_into_treasury'},{'index':0xfd,'name':'TREASURY_RECEIVE','description':'Receive\x20funds','governed_operation':'receive_treasury_funds'},{'index':0xfe,'name':'TREASURY_WITHDRAW','description':'Withdraw\x20funds','governed_operation':'withdraw_treasury_funds'},{'index':0xff,'name':'TREASURY_EXTERNAL_DEPOSIT_GUARD','description':'Manage\x20external\x20deposit\x20Guard\x20list','governed_operation':'manage_external_deposit_guards'},{'index':0x100,'name':'TREASURY_EXTERNAL_WITHDRAW_GUARD','description':'Manage\x20external\x20withdraw\x20Guard\x20list','governed_operation':'manage_external_withdraw_guards'},{'index':0x101,'name':'TREASURY_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_treasury_by_owner'},{'index':0x102,'name':'TREASURY_UM','description':'Set\x20UM','governed_operation':'set_treasury_user_manager'}];export const SERVICE_PERMISSIONS=[{'index':0x12c,'name':'SERVICE_NEW','description':'Create\x20new\x20Service','governed_operation':'create_service'},{'index':0x12d,'name':'SERVICE_DESCRIPTION','description':'Modify\x20Service\x20description','governed_operation':'set_service_description'},{'index':0x12f,'name':'SERVICE_LOCATION','description':'Set\x20Service\x20location','governed_operation':'set_service_location'},{'index':0x130,'name':'SERVICE_REPOSITORY','description':'Set\x20Service\x20repository','governed_operation':'set_service_repository'},{'index':0x131,'name':'SERVICE_SALES','description':'Modify\x20sales','governed_operation':'manage_sales'},{'index':0x132,'name':'SERVICE_MACHINE','description':'Bind/modify\x20Machine','governed_operation':'set_service_machine'},{'index':0x133,'name':'SERVICE_BUY_GUARD','description':'Set\x20buy\x20guard','governed_operation':'set_service_buy_guard'},{'index':0x134,'name':'SERVICE_ARBITRATION','description':'Set\x20Arbitration','governed_operation':'set_service_arbitration'},{'index':0x135,'name':'SERVICE_CUSTOMER_INFO_REQUIRED','description':'Set\x20customer\x20info\x20required','governed_operation':'set_customer_info_required'},{'index':0x136,'name':'SERVICE_PAUSE','description':'Pause/resume\x20Service','governed_operation':'pause_or_resume_service'},{'index':0x137,'name':'SERVICE_PUBLISH','description':'Publish\x20Service','governed_operation':'publish_service'},{'index':0x138,'name':'SERVICE_DISCOUNT','description':'Set\x20discount','governed_operation':'set_discount'},{'index':0x139,'name':'SERVICE_ORDER_ALLOCATOR','description':'Set\x20order\x20allocator','governed_operation':'set_order_allocator'},{'index':0x13a,'name':'SERVICE_COMPENSATION_FUND_DEPOSIT','description':'Deposit\x20to\x20compensation\x20fund','governed_operation':'deposit_compensation_fund'},{'index':0x13b,'name':'SERVICE_COMPENSATION_FUND_WITHDRAW','description':'Withdraw\x20from\x20compensation\x20fund','governed_operation':'withdraw_compensation_fund'},{'index':0x13c,'name':'SERVICE_COMPENSATION_FUND_FREEZE','description':'Freeze\x20compensation\x20fund','governed_operation':'freeze_compensation_fund'},{'index':0x13d,'name':'SERVICE_COMPENSATION_FUND_UNFREEZE','description':'Unfreeze\x20compensation\x20fund','governed_operation':'unfreeze_compensation_fund'},{'index':0x13e,'name':'SERVICE_REWARD','description':'Set\x20reward','governed_operation':'set_service_reward'},{'index':0x13f,'name':'SERVICE_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_service_by_owner'},{'index':0x140,'name':'SERVICE_UM','description':'Set\x20UM','governed_operation':'set_service_user_manager'}];export const ARBITRATION_PERMISSIONS=[{'index':0x15e,'name':'ARBITRATION_NEW','description':'Create\x20new\x20Arbitration','governed_operation':'create_arbitration'},{'index':0x15f,'name':'ARBITRATION_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_arbitration_description'},{'index':0x161,'name':'ARBITRATION_LOCATION','description':'Set\x20location','governed_operation':'set_arbitration_location'},{'index':0x162,'name':'ARBITRATION_VOTING_GUARD','description':'Set\x20voting\x20guard','governed_operation':'set_arbitration_voting_guard'},{'index':0x163,'name':'ARBITRATION_USAGE_GUARD','description':'Set\x20usage\x20guard','governed_operation':'set_arbitration_usage_guard'},{'index':0x164,'name':'ARBITRATION_PAUSE','description':'Pause/resume','governed_operation':'pause_or_resume_arbitration'},{'index':0x165,'name':'ARBITRATION_FEE','description':'Set\x20fee','governed_operation':'set_arbitration_fee'},{'index':0x166,'name':'ARBITRATION_VOTE','description':'Vote','governed_operation':'cast_arbitration_vote'},{'index':0x167,'name':'ARBITRATION_ARBITRATION','description':'Arbitrate\x20dispute','governed_operation':'issue_arbitration_ruling'},{'index':0x168,'name':'ARBITRATION_FEEDBACK','description':'Provide\x20feedback','governed_operation':'give_arbitration_feedback'},{'index':0x169,'name':'ARBITRATION_CONFIRM','description':'Confirm\x20resolution','governed_operation':'confirm_arbitration_result'},{'index':0x16a,'name':'ARBITRATION_VOTING_DEADLINE_CHANGE','description':'Change\x20voting\x20deadline','governed_operation':'change_arbitration_voting_deadline'},{'index':0x16b,'name':'ARBITRATION_RESET','description':'Reset\x20arbitration','governed_operation':'reset_arbitration'},{'index':0x16c,'name':'ARBITRATION_ARB_WITHDRAW','description':'Arb\x20withdraw','governed_operation':'withdraw_arbitration_funds'},{'index':0x16d,'name':'ARBITRATION_FEES_ALLOC','description':'Allocate\x20fees','governed_operation':'allocate_arbitration_fees'},{'index':0x16e,'name':'ARBITRATION_FEES_TRANSFER','description':'Transfer\x20fees','governed_operation':'transfer_arbitration_fees'},{'index':0x16f,'name':'ARBITRATION_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_arbitration_by_owner'},{'index':0x170,'name':'ARBITRATION_UM','description':'Set\x20UM','governed_operation':'set_arbitration_user_manager'}];export const DEMAND_PERMISSIONS=[{'index':0x190,'name':'DEMAND_NEW','description':'Create\x20new\x20Demand','governed_operation':'create_demand'},{'index':0x191,'name':'DEMAND_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_demand_description'},{'index':0x192,'name':'DEMAND_LOCATION','description':'Set\x20location','governed_operation':'set_demand_location'},{'index':0x194,'name':'DEMAND_GUARD','description':'Set\x20guard','governed_operation':'set_demand_guard'},{'index':0x195,'name':'DEMAND_REWARD','description':'Set\x20reward','governed_operation':'set_demand_reward'},{'index':0x196,'name':'DEMAND_FEEDBACK','description':'Provide\x20feedback','governed_operation':'give_demand_feedback'},{'index':0x197,'name':'DEMAND_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_demand_by_owner'},{'index':0x198,'name':'DEMAND_UM','description':'Set\x20UM','governed_operation':'set_demand_user_manager'}];export const CONTACT_PERMISSIONS=[{'index':0x1c2,'name':'CONTACT_NEW','description':'Create\x20new\x20Contact','governed_operation':'create_contact'},{'index':0x1c3,'name':'CONTACT_DESCRIPTION','description':'Modify\x20description','governed_operation':'set_contact_description'},{'index':0x1c4,'name':'CONTACT_LOCATION','description':'Set\x20location','governed_operation':'set_contact_location'},{'index':0x1c5,'name':'CONTACT_IM','description':'Set\x20IM','governed_operation':'set_contact_im'},{'index':0x1c6,'name':'CONTACT_OWNER_RECEIVE','description':'Owner\x20receive','governed_operation':'receive_contact_by_owner'}];export const PERMISSION_SCENES=[{'id':'service_permission','name':'Service\x20publish\x20&\x20operation\x20permission','host_object':'Service','permission_index_range':'300-320','builtin_indexes':SERVICE_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['publish_service\x20(311)','pause_or_resume_service\x20(310)','set_service_machine\x20(306)','set_service_buy_guard\x20(307)','set_order_allocator\x20(313)','set_service_reward\x20(318)','manage_compensation_fund\x20(314-317)'],'mutable_after_publish':!![],'common_patterns':['Owner-only\x20publish:\x20only\x20owner/admin\x20has\x20SERVICE_PUBLISH\x20(311)','Separate\x20pause\x20role:\x20delegate\x20SERVICE_PAUSE\x20(310)\x20to\x20operator','Allocator\x20guard:\x20SERVICE_ORDER_ALLOCATOR\x20(313)\x20guarded\x20by\x20Guard'],'recommended_templates':['T-P-03','T-P-02']},{'id':'machine_permission','name':'Machine\x20workflow\x20permission','host_object':'Machine','permission_index_range':'200-208','builtin_indexes':MACHINE_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['publish_machine\x20(205)','manage_machine_nodes\x20(206)','pause_or_resume_machine\x20(204)','set_consensus_repositories\x20(203)'],'mutable_after_publish':!![],'common_patterns':['Pre-publish\x20node\x20editing:\x20MACHINE_NODE\x20(206)\x20before\x20publish\x20only','Post-publish:\x20only\x20Forward.guard\x20can\x20be\x20modified;\x20node\x20structure\x20frozen','Consensus\x20repositories:\x20MACHINE_CONSENSUS_REPOSITORIES\x20(203)\x20for\x20multi-repo\x20consensus'],'recommended_templates':['T-P-04','T-P-01']},{'id':'treasury_permission','name':'Treasury\x20fund\x20management\x20permission','host_object':'Treasury','permission_index_range':'250-258','builtin_indexes':TREASURY_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['deposit_into_treasury\x20(252)','withdraw_treasury_funds\x20(254)','manage_external_deposit_guards\x20(255)','manage_external_withdraw_guards\x20(256)','receive_treasury_by_owner\x20(257)','set_treasury_user_manager\x20(258)'],'mutable_after_publish':!![],'common_patterns':['Guard-protected\x20external\x20ops:\x20TREASURY_EXTERNAL_*_GUARD\x20(255/256)\x20for\x20cross-treasury\x20safety;\x20external_deposit/external_withdraw\x20use\x20Guard\x20+\x20Passport,\x20no\x20Permission\x20index','Withdraw\x20restricted\x20to\x20owner+admin:\x20TREASURY_WITHDRAW\x20(254)\x20tightly\x20held','UM\x20delegation:\x20TREASURY_UM\x20(258)\x20for\x20contact\x20management'],'recommended_templates':['T-P-05','T-P-02']},{'id':'allocation_permission','name':'Allocation\x20strategy\x20permission\x20(custom)','host_object':'Allocation','permission_index_range':'>=1000\x20(custom)','builtin_indexes':[],'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['execute_allocation\x20(custom\x20index)','receive_allocation\x20(custom\x20index)'],'mutable_after_publish':!![],'common_patterns':['Custom\x20index\x20>=\x201000\x20for\x20business-specific\x20allocation\x20rules','Guard-bound\x20alloc:\x20alloc\x20operation\x20requires\x20Guard\x20verification','Multi-entity:\x20multiple\x20allocators\x20share\x20same\x20permission_index'],'recommended_templates':['T-P-01','T-P-02']},{'id':'arbitration_permission','name':'Arbitration\x20case\x20management\x20permission','host_object':'Arbitration','permission_index_range':'350-368','builtin_indexes':ARBITRATION_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['cast_arbitration_vote\x20(358)','issue_arbitration_ruling\x20(359)','give_arbitration_feedback\x20(360)','confirm_arbitration_result\x20(361)','change_arbitration_voting_deadline\x20(362)','reset_arbitration\x20(363)','allocate_arbitration_fees\x20(365)'],'mutable_after_publish':!![],'common_patterns':['Arb\x20committee:\x20ARBITRATION_VOTE\x20(358)\x20granted\x20to\x20multiple\x20arbiters','Open\x20voting\x20guard:\x20voting_guard\x20allows\x20public\x20to\x20vote\x20(weight=1)','Guard-based\x20usage:\x20usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed'],'recommended_templates':['T-P-06','T-P-02']},{'id':'repository_permission','name':'Repository\x20policy\x20management\x20permission','host_object':'Repository','permission_index_range':'100-105','builtin_indexes':REPOSITORY_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_repository_policy\x20(102)','set_repository_reward\x20(103)'],'mutable_after_publish':!![],'common_patterns':['Public\x20read:\x20anyone\x20can\x20read\x20Repository\x20data','Owner-write:\x20REPOSITORY_POLICY\x20(102)\x20restricted\x20to\x20owner/admin','Reward\x20binding:\x20REPOSITORY_REWARD\x20(103)\x20for\x20incentive\x20distribution'],'recommended_templates':['T-P-01']},{'id':'reward_permission','name':'Reward\x20distribution\x20permission','host_object':'Reward','permission_index_range':'150-157','builtin_indexes':REWARD_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_reward_guard\x20(152)','add_reward_coin\x20(153)','receive_reward\x20(154)','extend_reward_guard_expiration\x20(155)'],'mutable_after_publish':!![],'common_patterns':['Guard-bound\x20claim:\x20REWARD_RECEIVE\x20(154)\x20protected\x20by\x20Guard','Coin\x20refill:\x20REWARD_COIN_ADD\x20(153)\x20for\x20owner-only\x20top-up','Expiration\x20extension:\x20REWARD_GUARD_EXPIRATION_TIME_ADD\x20(155)\x20for\x20deadline\x20mgmt'],'recommended_templates':['T-P-01']},{'id':'progress_permission','name':'Progress\x20workflow\x20advancement\x20permission','host_object':'Progress','permission_index_range':'220-225','builtin_indexes':PROGRESS_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['submit_task\x20(222)','manage_named_operators\x20(221)','set_progress_context_repository\x20(223)','unhold_progress\x20(224)'],'mutable_after_publish':![],'common_patterns':['Named\x20operator:\x20PROGRESS_NAMED_OPERATOR\x20(221)\x20for\x20assigned\x20operators','Task\x20submission:\x20PROGRESS_TASK\x20(222)\x20for\x20any\x20authorized\x20submitter','Machine-bound:\x20Progress\x20permission\x20effective\x20only\x20after\x20Machine\x20publish'],'recommended_templates':['T-P-01']},{'id':'demand_permission','name':'Demand\x20publication\x20permission','host_object':'Demand','permission_index_range':'400-408','builtin_indexes':DEMAND_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_demand_guard\x20(404)','set_demand_reward\x20(405)','give_demand_feedback\x20(406)'],'mutable_after_publish':!![],'common_patterns':['Public\x20demand:\x20anyone\x20can\x20view;\x20only\x20owner\x20can\x20publish','Feedback\x20channel:\x20DEMAND_FEEDBACK\x20(406)\x20for\x20community\x20input','Guard\x20filtering:\x20DEMAND_GUARD\x20(404)\x20for\x20service\x20eligibility'],'recommended_templates':['T-P-01']},{'id':'contact_permission','name':'Contact/Messenger\x20management\x20permission','host_object':'Contact','permission_index_range':'450-454','builtin_indexes':CONTACT_PERMISSIONS,'owner_operations':['set_user_manager','builder\x20(transfer)'],'admin_operations':['set_description','manage_remarks','manage_permission_holders','manage_entities','manage_admins'],'permission_index_operations':['set_contact_im\x20(453)'],'mutable_after_publish':!![],'common_patterns':['Personal\x20contact:\x20usually\x20single-owner','IM\x20binding:\x20CONTACT_IM\x20(453)\x20for\x20chat\x20platform\x20binding'],'recommended_templates':['T-P-01']},{'id':'ownership_transfer','name':'Permission\x20ownership\x20transfer\x20(cross-scene)','host_object':'Standalone','permission_index_range':'N/A','builtin_indexes':[],'owner_operations':['builder\x20(transfer)'],'admin_operations':[],'permission_index_operations':[],'mutable_after_publish':!![],'common_patterns':['Owner-only:\x20transfer\x20requires\x20the\x20current\x20owner\x20as\x20the\x20signer','Irreversible:\x20once\x20transferred,\x20original\x20owner\x20loses\x20all\x20control','New\x20owner\x20auto-admin:\x20new\x20owner\x20becomes\x20admin\x20automatically','Pre-transfer\x20backup:\x20export\x20Permission\x20JSON\x20before\x20transfer'],'recommended_templates':['T-P-08']}];export const PERMISSION_LEDGER_VERSION='1.0.0';export function getScenesByHostObject(a){return PERMISSION_SCENES['filter'](b=>b['host_object']===a);}export function findSceneById(a){return PERMISSION_SCENES['find'](b=>b['id']===a);}export function findSceneByPermissionIndex(a){for(const b of PERMISSION_SCENES){if(b['builtin_indexes']['some'](c=>c['index']===a))return b;}return undefined;}export function getBuiltinPermissionByIndex(a){for(const b of PERMISSION_SCENES){const c=b['builtin_indexes']['find'](d=>d['index']===a);if(c)return c;}return undefined;}export function isBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function inferSceneFromIntent(a){const b=a['toLowerCase']();if(b['includes']('transfer')||b['includes']('handover'))return findSceneById('ownership_transfer');const c=[['service','Service'],['machine','Machine'],['treasury','Treasury'],['arbitration','Arbitration'],['repository','Repository'],['reward','Reward'],['progress','Progress'],['demand','Demand'],['contact','Contact'],['messenger','Contact'],['allocation','Allocation']];for(const [d,e]of c){if(b['includes'](d)){const f=getScenesByHostObject(e);if(f['length']>0x0)return f[0x0];}}return undefined;}export function getAllBuiltinPermissions(){return PERMISSION_SCENES['flatMap'](a=>a['builtin_indexes']);}export function getPermissionScenesCount(){return PERMISSION_SCENES['length'];}
|
|
@@ -28,40 +28,40 @@ export interface DataSourcePuzzle {
|
|
|
28
28
|
}[];
|
|
29
29
|
}
|
|
30
30
|
export type PermissionOperation = {
|
|
31
|
-
type: "
|
|
31
|
+
type: "add perm by index" | "remove perm by index" | "set perm by index";
|
|
32
32
|
index: number;
|
|
33
33
|
entities: string[];
|
|
34
34
|
} | {
|
|
35
|
-
type: "
|
|
35
|
+
type: "add perm by entity" | "remove perm by entity" | "set perm by entity";
|
|
36
36
|
entity: string;
|
|
37
37
|
indexes: number[];
|
|
38
38
|
} | {
|
|
39
|
-
type: "
|
|
39
|
+
type: "swap" | "replace" | "copy";
|
|
40
40
|
entity1: string;
|
|
41
41
|
entity2: string;
|
|
42
42
|
} | {
|
|
43
|
-
type: "
|
|
43
|
+
type: "del";
|
|
44
44
|
entity: string;
|
|
45
45
|
} | {
|
|
46
|
-
type: "
|
|
46
|
+
type: "add" | "remove" | "set";
|
|
47
47
|
addresses: string[];
|
|
48
48
|
} | {
|
|
49
|
-
type: "
|
|
49
|
+
type: "set remark";
|
|
50
50
|
index: number;
|
|
51
51
|
remark: string;
|
|
52
52
|
} | {
|
|
53
|
-
type: "
|
|
53
|
+
type: "remove remark";
|
|
54
54
|
index: number;
|
|
55
55
|
} | {
|
|
56
|
-
type: "
|
|
56
|
+
type: "clear remark";
|
|
57
57
|
} | {
|
|
58
|
-
type: "
|
|
58
|
+
type: "set description";
|
|
59
59
|
description: string;
|
|
60
60
|
} | {
|
|
61
61
|
type: "transfer";
|
|
62
62
|
new_owner: string;
|
|
63
63
|
} | {
|
|
64
|
-
type: "
|
|
64
|
+
type: "set um";
|
|
65
65
|
um: string | null;
|
|
66
66
|
} | {
|
|
67
67
|
type: "apply";
|
|
@@ -73,7 +73,7 @@ export interface OperationPuzzle {
|
|
|
73
73
|
export interface LogicPuzzle {
|
|
74
74
|
permission_check_flow: {
|
|
75
75
|
step: 1 | 2 | 3;
|
|
76
|
-
check: "
|
|
76
|
+
check: "owner-only check" | "admin-only check" | "permission_index_check";
|
|
77
77
|
applicable_operations: string[];
|
|
78
78
|
}[];
|
|
79
79
|
entity_permission_mapping: {
|
|
@@ -113,7 +113,7 @@ export declare function initPuzzleFromIntent(intent: Partial<IntentPuzzle>): Per
|
|
|
113
113
|
export declare function checkPuzzleCompleteness(puzzle: PermissionPuzzle): PuzzleCompleteness;
|
|
114
114
|
export interface ConstraintViolation {
|
|
115
115
|
constraint_id: string;
|
|
116
|
-
severity: "
|
|
116
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
117
117
|
message: string;
|
|
118
118
|
current_value?: string | number;
|
|
119
119
|
limit?: string | number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{USER_DEFINED_PERM_INDEX_START,MAX_ENTITY_COUNT,MAX_PERM_FOR_ENTITY,MAX_ADMIN_COUNT}from'@wowok/wowok';import{isBuiltinPermission}from'./permission-ledger.js';export function initPuzzleFromIntent(a){const b={};return(a['action']||a['rule_sentence'])&&(b['intent']={'action':a['action']??'create','target_object':a['target_object'],'rule_sentence':a['rule_sentence']??'','failure_conditions':a['failure_conditions']??[]}),b['constraints']={'F_P_01_custom_index_ge_1000':!![],'F_P_02_entity_count_le_1000':!![],'F_P_03_perm_count_per_entity_le_1000':!![],'F_P_04_admin_count_le_500':!![],'F_P_05_owner_address_valid':!![],'F_P_06_owner_only_for_assert_owner':!![],'F_P_07_admin_only_for_assert_admin':!![]},b;}export function checkPuzzleCompleteness(a){const b=[],c=[];if(!a['intent'])b['push']('A'),c['push']({'dimension':'A','reason':'Intent\x20not\x20specified\x20(action\x20+\x20rule_sentence)'});else!a['intent']['rule_sentence']&&(b['push']('A'),c['push']({'dimension':'A','reason':'rule_sentence\x20is\x20empty'}));if(!a['binding'])b['push']('B'),c['push']({'dimension':'B','reason':'Binding\x20not\x20specified\x20(owner\x20+\x20admins)'});else!a['binding']['owner']&&(b['push']('B'),c['push']({'dimension':'B','reason':'owner\x20address\x20missing'}));return!a['data_source']&&a['intent']?.['action']==='create'&&(b['push']('C'),c['push']({'dimension':'C','reason':'Data\x20source\x20not\x20specified\x20(entities\x20+\x20permissions)'})),!a['operations']&&(b['push']('D'),c['push']({'dimension':'D','reason':'Operations\x20not\x20enumerated'})),!a['logic']&&(b['push']('E'),c['push']({'dimension':'E','reason':'Logic\x20flow\x20not\x20defined'})),!a['constraints']&&(b['push']('F'),c['push']({'dimension':'F','reason':'Constraints\x20not\x20checked'})),{'dimensions':['A','B','C','D','E','F'],'missing':b,'missing_details':c,'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'+c[0x0]['reason']};}export function validateConstraints(a){const b=[];if(!a['data_source'])return b;for(const c of a['data_source']['entities']){for(const d of c['permission_indexes']){d<USER_DEFINED_PERM_INDEX_START&&!isBuiltinPermission(d)&&b['push']({'constraint_id':'F-P-01','severity':'
|
|
1
|
+
import{USER_DEFINED_PERM_INDEX_START,MAX_ENTITY_COUNT,MAX_PERM_FOR_ENTITY,MAX_ADMIN_COUNT}from'@wowok/wowok';import{isBuiltinPermission}from'./permission-ledger.js';export function initPuzzleFromIntent(a){const b={};return(a['action']||a['rule_sentence'])&&(b['intent']={'action':a['action']??'create','target_object':a['target_object'],'rule_sentence':a['rule_sentence']??'','failure_conditions':a['failure_conditions']??[]}),b['constraints']={'F_P_01_custom_index_ge_1000':!![],'F_P_02_entity_count_le_1000':!![],'F_P_03_perm_count_per_entity_le_1000':!![],'F_P_04_admin_count_le_500':!![],'F_P_05_owner_address_valid':!![],'F_P_06_owner_only_for_assert_owner':!![],'F_P_07_admin_only_for_assert_admin':!![]},b;}export function checkPuzzleCompleteness(a){const b=[],c=[];if(!a['intent'])b['push']('A'),c['push']({'dimension':'A','reason':'Intent\x20not\x20specified\x20(action\x20+\x20rule_sentence)'});else!a['intent']['rule_sentence']&&(b['push']('A'),c['push']({'dimension':'A','reason':'rule_sentence\x20is\x20empty'}));if(!a['binding'])b['push']('B'),c['push']({'dimension':'B','reason':'Binding\x20not\x20specified\x20(owner\x20+\x20admins)'});else!a['binding']['owner']&&(b['push']('B'),c['push']({'dimension':'B','reason':'owner\x20address\x20missing'}));return!a['data_source']&&a['intent']?.['action']==='create'&&(b['push']('C'),c['push']({'dimension':'C','reason':'Data\x20source\x20not\x20specified\x20(entities\x20+\x20permissions)'})),!a['operations']&&(b['push']('D'),c['push']({'dimension':'D','reason':'Operations\x20not\x20enumerated'})),!a['logic']&&(b['push']('E'),c['push']({'dimension':'E','reason':'Logic\x20flow\x20not\x20defined'})),!a['constraints']&&(b['push']('F'),c['push']({'dimension':'F','reason':'Constraints\x20not\x20checked'})),{'dimensions':['A','B','C','D','E','F'],'missing':b,'missing_details':c,'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'+c[0x0]['reason']};}export function validateConstraints(a){const b=[];if(!a['data_source'])return b;for(const c of a['data_source']['entities']){for(const d of c['permission_indexes']){d<USER_DEFINED_PERM_INDEX_START&&!isBuiltinPermission(d)&&b['push']({'constraint_id':'F-P-01','severity':'critical','message':'Permission\x20index\x20'+d+'\x20for\x20entity\x20'+c['address']+'\x20is\x20<\x20'+USER_DEFINED_PERM_INDEX_START+'\x20and\x20not\x20a\x20builtin\x20permission','current_value':d,'limit':USER_DEFINED_PERM_INDEX_START});}}a['data_source']['entities']['length']>MAX_ENTITY_COUNT&&b['push']({'constraint_id':'F-P-02','severity':'high','message':'Entity\x20count\x20'+a['data_source']['entities']['length']+'\x20exceeds\x20MAX_ENTITY_COUNT\x20'+MAX_ENTITY_COUNT,'current_value':a['data_source']['entities']['length'],'limit':MAX_ENTITY_COUNT});for(const e of a['data_source']['entities']){e['permission_indexes']['length']>MAX_PERM_FOR_ENTITY&&b['push']({'constraint_id':'F-P-03','severity':'high','message':'Entity\x20'+e['address']+'\x20has\x20'+e['permission_indexes']['length']+'\x20permissions,\x20exceeds\x20MAX_PERM_FOR_ENTITY\x20'+MAX_PERM_FOR_ENTITY,'current_value':e['permission_indexes']['length'],'limit':MAX_PERM_FOR_ENTITY});}return a['binding']&&a['binding']['admins']['length']>MAX_ADMIN_COUNT&&b['push']({'constraint_id':'F-P-04','severity':'high','message':'Admin\x20count\x20'+a['binding']['admins']['length']+'\x20exceeds\x20MAX_ADMIN_COUNT\x20'+MAX_ADMIN_COUNT,'current_value':a['binding']['admins']['length'],'limit':MAX_ADMIN_COUNT}),b;}export function generateConfirmationText(a){const b=[];b['push']('═══\x20Permission\x20Confirmation\x20═══'),b['push']('');if(a['intent']){b['push']('Action:\x20'+a['intent']['action']);if(a['intent']['target_object'])b['push']('Target:\x20'+a['intent']['target_object']);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['binding']&&(b['push']('─\x20Binding\x20──────────────'),b['push']('Owner:\x20'+a['binding']['owner']),b['push']('Admins\x20('+a['binding']['admins']['length']+'):\x20'+a['binding']['admins']['join'](',\x20')),a['binding']['um']!==undefined&&b['push']('UM:\x20'+(a['binding']['um']??'(none)')),a['binding']['applied_to']&&a['binding']['applied_to']['length']>0x0&&b['push']('Applied\x20to:\x20'+a['binding']['applied_to']['join'](',\x20')),b['push'](''));if(a['data_source']){b['push']('─\x20Data\x20Source\x20──────────────'),b['push']('Entities:\x20'+a['data_source']['entities']['length']);for(const f of a['data_source']['entities']){b['push']('\x20\x20'+f['address']+'\x20('+f['type']+'):\x20indexes\x20['+f['permission_indexes']['join'](',\x20')+']');}if(a['data_source']['custom_permissions_defined']['length']>0x0){b['push']('Custom\x20permissions:');for(const g of a['data_source']['custom_permissions_defined']){b['push']('\x20\x20['+g['index']+']\x20'+g['name']+':\x20'+g['description']);}}b['push']('');}if(a['operations']&&a['operations']['operations']['length']>0x0){b['push']('─\x20Operations\x20──────────────');for(const h of a['operations']['operations'])b['push']('\x20\x20-\x20'+JSON['stringify'](h));b['push']('');}const c=validateConstraints(a);if(c['length']>0x0){b['push']('─\x20Constraint\x20Violations\x20──────────────');for(const i of c)b['push']('\x20\x20['+i['severity']+']\x20'+i['constraint_id']+':\x20'+i['message']);b['push']('');}return b['join']('\x0a');}
|