@wowok/agent-mcp 3.4.0 → 3.4.2
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/README.md +8 -0
- package/dist/chain-semantics/composition-truth.d.ts +102 -0
- package/dist/chain-semantics/composition-truth.js +1 -0
- package/dist/chain-semantics/eval-order.js +1 -1
- package/dist/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/index.d.ts +1 -0
- package/dist/chain-semantics/index.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/blueprint-view.d.ts +3 -3
- package/dist/composition/blueprint-view.js +1 -1
- package/dist/composition/compile.d.ts +24 -3
- package/dist/composition/compile.js +1 -1
- package/dist/composition/emit-phases.d.ts +206 -0
- package/dist/composition/emit-phases.js +1 -0
- package/dist/composition/generate.d.ts +40 -0
- package/dist/composition/generate.js +1 -0
- package/dist/composition/guard-fill.d.ts +44 -0
- package/dist/composition/guard-fill.js +1 -0
- package/dist/composition/inflight.d.ts +20 -2
- package/dist/composition/inflight.js +1 -1
- package/dist/composition/input-normalize.d.ts +15 -0
- package/dist/composition/input-normalize.js +1 -0
- package/dist/composition/materialize.d.ts +18 -13
- package/dist/composition/materialize.js +1 -1
- package/dist/composition/mode-gates.d.ts +35 -0
- package/dist/composition/mode-gates.js +1 -0
- package/dist/composition/param-disclosure.js +1 -1
- package/dist/composition/plan-retry-ledger.d.ts +21 -0
- package/dist/composition/plan-retry-ledger.js +1 -0
- package/dist/composition/plan.d.ts +7 -2
- package/dist/composition/plan.js +1 -1
- package/dist/composition/product-card.d.ts +94 -0
- package/dist/composition/product-card.js +1 -0
- package/dist/composition/supply-chain-emit.d.ts +46 -0
- package/dist/composition/supply-chain-emit.js +1 -0
- package/dist/config/config-audit.spec.js +1 -1
- package/dist/config/config-warnings.d.ts +2 -0
- package/dist/config/config-warnings.js +1 -0
- package/dist/config/exposure.d.ts +2 -2
- package/dist/config/judgment.d.ts +31 -5
- package/dist/config/judgment.js +1 -1
- package/dist/config/judgment.spec.js +1 -1
- package/dist/config/match-policy-file.d.ts +34 -0
- package/dist/config/match-policy-file.js +1 -0
- package/dist/config/match-policy-file.spec.d.ts +1 -0
- package/dist/config/match-policy-file.spec.js +1 -0
- package/dist/config/rule-engine.d.ts +5 -5
- package/dist/config/rule-engine.js +1 -1
- package/dist/config/runtime.d.ts +0 -1
- package/dist/config/runtime.js +1 -1
- package/dist/config/severity.d.ts +0 -2
- package/dist/config/severity.js +1 -1
- package/dist/config/store-policy.spec.js +1 -1
- package/dist/config/template-params.d.ts +42 -0
- package/dist/config/template-params.js +1 -0
- package/dist/config/template-params.spec.d.ts +1 -0
- package/dist/config/template-params.spec.js +1 -0
- package/dist/data/api/api.spec.js +1 -1
- package/dist/data/api/server.js +1 -1
- package/dist/data/projection/store.d.ts +2 -1
- package/dist/data/projection/store.js +1 -1
- package/dist/data/projection/types.d.ts +22 -0
- package/dist/data/sync/cdc.d.ts +1 -2
- package/dist/data/sync/cdc.js +1 -1
- package/dist/evaluation/acceptance.d.ts +8 -0
- package/dist/evaluation/acceptance.js +1 -1
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.spec.js +1 -1
- package/dist/evaluation/capability.d.ts +2 -0
- package/dist/evaluation/category-match-rules.d.ts +0 -1
- package/dist/evaluation/category-match-rules.js +1 -1
- package/dist/evaluation/composer.d.ts +25 -0
- package/dist/evaluation/composer.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/extract.d.ts +7 -0
- package/dist/evaluation/extract.js +1 -1
- package/dist/evaluation/game-strategy.d.ts +0 -3
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/match-operation.d.ts +9 -0
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/match-policy-resolver.d.ts +9 -0
- package/dist/evaluation/match-policy-resolver.js +1 -0
- package/dist/evaluation/match-policy.d.ts +3 -1
- package/dist/evaluation/match-policy.js +1 -1
- package/dist/evaluation/region.d.ts +0 -6
- package/dist/evaluation/region.js +1 -1
- package/dist/evaluation/standards.d.ts +2 -1
- package/dist/evaluation/standards.js +1 -1
- package/dist/evaluation/structured-lines.d.ts +8 -0
- package/dist/evaluation/structured-lines.js +1 -0
- package/dist/evaluation/types.d.ts +6 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/capability-manifest.d.ts +1 -0
- package/dist/extensions/capability-manifest.js +1 -1
- package/dist/extensions/capability.d.ts +91 -0
- package/dist/extensions/capability.js +1 -0
- package/dist/extensions/industry-audit.spec.js +1 -1
- package/dist/extensions/industry-pack.d.ts +13 -0
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/extensions/registry.d.ts +0 -2
- package/dist/extensions/registry.js +1 -1
- package/dist/goal/GoalEngine.js +1 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/graph/onchain/facts.js +1 -1
- package/dist/graph/onchain/order-status.d.ts +0 -1
- package/dist/graph/onchain/order-status.js +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/harness/verify.d.ts +0 -3
- package/dist/harness/verify.js +1 -1
- package/dist/intent/types.d.ts +0 -1
- package/dist/intent/types.js +1 -1
- package/dist/keeper/detectors.js +1 -1
- package/dist/keeper/types.d.ts +0 -1
- package/dist/keeper/types.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +1 -0
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.d.ts +6 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-puzzle.js +1 -1
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +4 -3
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/judgment-baselines.json +21 -2
- package/dist/knowledge/baselines/rules/oracle.json +120 -0
- package/dist/knowledge/baselines/rules/plan.json +384 -17
- package/dist/knowledge/baselines/rules/progress.json +20 -2
- package/dist/knowledge/builtin-templates.d.ts +28 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/component-schema.js +1 -1
- package/dist/knowledge/contact-templates.d.ts +0 -1
- package/dist/knowledge/contact-templates.js +1 -1
- package/dist/knowledge/dynamic-pricing.js +1 -1
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/fund-layer.d.ts +1 -0
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/game-scenarios.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.d.ts +52 -0
- package/dist/knowledge/guard-binding-table.js +1 -0
- package/dist/knowledge/guard-binding-verifier.d.ts +30 -0
- package/dist/knowledge/guard-binding-verifier.js +1 -0
- package/dist/knowledge/guard-bindings.js +1 -1
- package/dist/knowledge/guard-blueprint.d.ts +68 -0
- package/dist/knowledge/guard-blueprint.js +1 -0
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-host-context.d.ts +24 -0
- package/dist/knowledge/guard-host-context.js +1 -0
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-node-gates.d.ts +3 -0
- package/dist/knowledge/guard-node-gates.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-submission-prompt.d.ts +11 -0
- package/dist/knowledge/guard-submission-prompt.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-generalizer.d.ts +6 -1
- package/dist/knowledge/industry-generalizer.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.d.ts +38 -0
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-topology.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/object-dependency.d.ts +31 -0
- package/dist/knowledge/object-dependency.js +1 -0
- package/dist/knowledge/onchain-constants.d.ts +2 -0
- package/dist/knowledge/onchain-constants.js +1 -1
- package/dist/knowledge/param-schema.d.ts +23 -0
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/passport-ledger.js +1 -1
- package/dist/knowledge/path-oracle/coverage.d.ts +16 -0
- package/dist/knowledge/path-oracle/coverage.js +1 -0
- package/dist/knowledge/path-oracle/index.d.ts +5 -0
- package/dist/knowledge/path-oracle/index.js +1 -0
- package/dist/knowledge/path-oracle/products/food-delivery.d.ts +2 -0
- package/dist/knowledge/path-oracle/products/food-delivery.js +1 -0
- package/dist/knowledge/path-oracle/schema.d.ts +188 -0
- package/dist/knowledge/path-oracle/schema.js +1 -0
- package/dist/knowledge/pattern-resolutions.d.ts +2 -0
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/projection.spec.js +1 -1
- package/dist/knowledge/protocol-facts.js +1 -1
- package/dist/knowledge/requirement-families.d.ts +13 -0
- package/dist/knowledge/requirement-families.js +1 -0
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +1 -0
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/semantic-ir.d.ts +4 -0
- package/dist/knowledge/semantic-ir.js +1 -1
- package/dist/knowledge/service-ledger.d.ts +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/sku-name-gate.d.ts +17 -0
- package/dist/knowledge/sku-name-gate.js +1 -0
- package/dist/knowledge/supply-chain.d.ts +9 -0
- package/dist/knowledge/supply-chain.js +1 -1
- package/dist/knowledge/template-loader.d.ts +14 -6
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-nav.d.ts +3 -1
- package/dist/knowledge/template-nav.js +1 -1
- package/dist/knowledge/template-prose.d.ts +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +62 -0
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/template-test-profiles.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +5 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/customer-interest.d.ts +4 -0
- package/dist/participation/customer-interest.js +1 -1
- package/dist/participation/node-action-advisor.d.ts +4 -0
- package/dist/participation/node-action-advisor.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/participation/time-window.d.ts +11 -0
- package/dist/participation/time-window.js +1 -1
- package/dist/persona/address-format.d.ts +0 -1
- package/dist/persona/address-format.js +1 -1
- package/dist/persona/bridge.js +1 -1
- package/dist/persona/index.d.ts +0 -2
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.js +1 -1
- package/dist/persona/persona-audit.spec.js +1 -1
- package/dist/persona/types.d.ts +6 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/game-theory.d.ts +2 -2
- package/dist/playbooks/service-build/intent-analyzer.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +50 -23
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.d.ts +2 -0
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/mode-actions.js +1 -1
- package/dist/playbooks/service-build/object-panorama.d.ts +8 -0
- 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/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +6 -0
- package/dist/playbooks/service-build/reverse-mapping.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +1 -0
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/playbooks/service-build/service-quote.spec.js +1 -1
- package/dist/playbooks/service-build/workflow-design-assessment.d.ts +10 -1
- package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/review/repository.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +104 -0
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +15 -6
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/base.d.ts +256 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +32 -6
- package/dist/schema/call/demand.d.ts +15 -6
- package/dist/schema/call/demand.js +1 -1
- package/dist/schema/call/guard.d.ts +8 -8
- package/dist/schema/call/guard.js +1 -1
- package/dist/schema/call/handler.d.ts +3 -0
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +32 -8
- package/dist/schema/call/machine.js +1 -1
- package/dist/schema/call/order.d.ts +26 -8
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/payment.d.ts +20 -8
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/permission-handler.js +1 -1
- package/dist/schema/call/permission.d.ts +330 -114
- package/dist/schema/call/permission.js +1 -1
- package/dist/schema/call/personal.d.ts +10 -4
- package/dist/schema/call/personal.js +1 -1
- package/dist/schema/call/progress.d.ts +16 -4
- package/dist/schema/call/proof.js +1 -1
- package/dist/schema/call/reward.d.ts +10 -4
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.d.ts +1 -0
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +143 -45
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +15 -6
- package/dist/schema/call/treasury.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +61 -0
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/envelope-unify.d.ts +4 -0
- package/dist/schema/envelope-unify.js +1 -0
- package/dist/schema/evaluation/index.d.ts +216 -19
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +47 -0
- package/dist/schema/goal/planning.d.ts +115 -1
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +137 -6
- package/dist/schema/industry-pack/index.js +1 -1
- package/dist/schema/industry-pack/modes.d.ts +6 -6
- package/dist/schema/keeper/index.d.ts +26 -0
- package/dist/schema/local/index.d.ts +137 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/local/wip.d.ts +6 -0
- package/dist/schema/local/wip.js +1 -1
- package/dist/schema/messenger/index.d.ts +26 -0
- package/dist/schema/operations.d.ts +345 -84
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +2907 -640
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +145 -4
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +266 -73
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +1 -1
- package/dist/schema/schema-query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/utils/permission-machine-check.d.ts +2 -0
- package/dist/schema/utils/permission-machine-check.js +1 -1
- package/dist/schema/watch/index.d.ts +16 -0
- package/dist/schema/watch/index.js +1 -1
- package/dist/schema/workflow/index.d.ts +2 -2
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.d.ts +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +94 -0
- package/dist/schemas/benchmark_migration_operation.output.json +338 -9
- package/dist/schemas/benchmark_migration_operation.schema.json +27 -2
- package/dist/schemas/bridge_operation.output.json +94 -0
- package/dist/schemas/config_operation.output.json +352 -0
- package/dist/schemas/config_operation.schema.json +20 -2
- package/dist/schemas/evaluation_operation.output.json +570 -4
- package/dist/schemas/evaluation_operation.schema.json +194 -3
- package/dist/schemas/goal_operation.schema.json +183 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/industry_pack_operation.output.json +621 -0
- package/dist/schemas/industry_pack_operation.schema.json +20 -2
- package/dist/schemas/keeper_operation.output.json +94 -0
- package/dist/schemas/local_cache_operation.output.json +94 -0
- package/dist/schemas/local_history_operation.output.json +94 -0
- package/dist/schemas/local_info_operation.output.json +94 -0
- package/dist/schemas/local_mark_operation.output.json +94 -0
- package/dist/schemas/messenger_operation.output.json +94 -0
- package/dist/schemas/monitor_events.output.json +94 -0
- package/dist/schemas/monitor_subscription.output.json +94 -0
- package/dist/schemas/onchain_events.output.json +94 -0
- package/dist/schemas/onchain_operations.output.json +313 -1
- package/dist/schemas/onchain_operations.schema.json +1265 -671
- package/dist/schemas/onchain_operations_allocation.schema.json +30 -15
- package/dist/schemas/onchain_operations_arbitration.schema.json +9 -2
- package/dist/schemas/onchain_operations_contact.schema.json +8 -1
- package/dist/schemas/onchain_operations_demand.schema.json +29 -14
- package/dist/schemas/onchain_operations_gen_passport.schema.json +8 -1
- package/dist/schemas/onchain_operations_guard.schema.json +290 -105
- package/dist/schemas/onchain_operations_machine.schema.json +49 -34
- package/dist/schemas/onchain_operations_order.schema.json +63 -40
- package/dist/schemas/onchain_operations_payment.schema.json +26 -11
- package/dist/schemas/onchain_operations_permission.schema.json +362 -235
- package/dist/schemas/onchain_operations_personal.schema.json +27 -15
- package/dist/schemas/onchain_operations_progress.schema.json +45 -30
- package/dist/schemas/onchain_operations_proof.schema.json +9 -2
- package/dist/schemas/onchain_operations_repository.schema.json +8 -1
- package/dist/schemas/onchain_operations_reward.schema.json +32 -17
- package/dist/schemas/onchain_operations_service.schema.json +232 -125
- package/dist/schemas/onchain_operations_treasury.schema.json +32 -17
- package/dist/schemas/onchain_table_data.output.json +258 -6
- package/dist/schemas/onchain_table_data.schema.json +92 -52
- package/dist/schemas/persona_operation.output.json +7752 -0
- package/dist/schemas/persona_operation.schema.json +1232 -4
- package/dist/schemas/query_toolkit.output.json +756 -116
- package/dist/schemas/query_toolkit.schema.json +138 -7
- package/dist/schemas/schema_query.schema.json +1 -1
- package/dist/schemas/watch_operation.output.json +83 -0
- package/dist/schemas/wip_file.output.json +8 -0
- package/dist/schemas/workflow_operation.schema.json +2 -2
- package/dist/tools/handlers/benchmark-migration.d.ts +20 -3
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/evaluation.spec.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +30 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/persona.js +1 -1
- package/dist/tools/handlers/query.d.ts +8 -0
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/winner-derivation.d.ts +20 -0
- package/dist/tools/handlers/winner-derivation.js +1 -0
- package/dist/tools/handlers/wip-upload.js +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/config.js +1 -1
- package/dist/tools/registry/evaluation.js +1 -1
- package/dist/tools/registry/identity.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/transport-integrity.d.ts +7 -0
- package/dist/tools/transport-integrity.js +1 -0
- package/dist/tools/upgrade-check.js +1 -1
- package/dist/tools/wrap.d.ts +5 -0
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
- package/dist/extensions/business-modules.d.ts +0 -54
- package/dist/extensions/business-modules.js +0 -1
- package/dist/schemas/guard-templates.json +0 -379
|
@@ -73,12 +73,20 @@ export interface DemandPanoramaResult extends PanoBase {
|
|
|
73
73
|
window_saturated: boolean;
|
|
74
74
|
preview_truncated: boolean;
|
|
75
75
|
items: {
|
|
76
|
+
presenter: string;
|
|
76
77
|
service: string;
|
|
77
78
|
recommend: string | null;
|
|
78
79
|
acceptance_score: number | null;
|
|
79
80
|
feedback: string | null;
|
|
80
81
|
feedback_time: number | null;
|
|
81
82
|
update_time: number | null;
|
|
83
|
+
structured: {
|
|
84
|
+
key: string;
|
|
85
|
+
raw_key: string;
|
|
86
|
+
value: string;
|
|
87
|
+
}[];
|
|
88
|
+
quote: string | null;
|
|
89
|
+
score_covers_current_service: boolean | null;
|
|
82
90
|
}[];
|
|
83
91
|
};
|
|
84
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config,LocalMark,query_objects,query_object_last_updated,query_table,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a395a}from'../../tools/handlers/name-resolution.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a);function freshnessOf(a){const b=a?a['version']??a['data']?.['version']:undefined;return{'read_at_ms':Date['now'](),'version':b===undefined||b===null||String(b)===''?null:String(b),'note':'live\x20read\x20(cache\x20bypassed);\x20a\x20read\x20issued\x20in\x20the\x20same\x20second\x20as\x20a\x20committing\x20transaction\x20can\x20trail\x20the\x20committed\x20effect\x20by\x20one\x20checkpoint\x20—\x20if\x20any\x20field\x20contradicts\x20a\x20transaction\x20just\x20submitted,\x20re-query\x20once\x20(compare\x20version\x20across\x20reads)\x20before\x20concluding'};}const ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],scalarValueStr=a=>{if(a==null)return null;if(typeof a==='string')return a;if(typeof a==='number'||typeof a==='boolean')return String(a);if(typeof a==='bigint')return a['toString']();if(a instanceof Uint8Array)try{return new TextDecoder()['decode'](a);}catch{return Array['from'](a['slice'](0x0,0x20))['map'](c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('')+(a['length']>0x20?'...':'');}try{return JSON['stringify'](a,(b,c)=>typeof c==='bigint'?c['toString']():c);}catch{return null;}};export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b,c=!![]){const d=await a395a(a,'object_address');let f=b??undefined,g=null;if(!f)f=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[d],'network':f,...c?{'no_cache':!![]}:{}});g=h?.['objects']?.[0x0]??null;if(!g&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==f){const j=await query_objects({'objects':[d],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(g=k,f=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+d+'\x20on\x20'+f+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!g)throw new Error(d+'\x20not\x20found\x20on\x20'+f+(b?'':'\x20(session\x20default\x20network\x20—\x20not\x20an\x20explicit\x20request)')+'.\x20Verify\x20BOTH\x20the\x20object\x20ID\x20and\x20the\x20network:\x20an\x20object\x20that\x20exists\x20on\x20'+'one\x20network\x20answers\x20\x22not\x20found\x22\x20on\x20the\x20other.\x20Pass\x20context_network\x20'+'to\x20query\x20a\x20specific\x20network\x20before\x20concluding\x20the\x20object\x20does\x20not\x20exist.');return g['object']=g['object']??d,{'network':String(f),'obj':g};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){const d=0x32,f=0xc8,g=0x32,h=[];let i=0x0,j=!![];try{const l=[];let m=null;for(;;){const n=await query_table({'parent':a,'cursor':m,'limit':g,'no_cache':!![],'network':b}),o=Array['isArray'](n?.['items'])?n['items']:[];for(const p of o){if(typeof p?.['object']==='string')l['push'](p['object']);}i+=o['length'];if(n?.['hasNextPage']===!![]&&typeof n?.['nextCursor']==='string'&&i<f){m=n['nextCursor'];continue;}j=n?.['hasNextPage']!==!![];break;}if(l['length']>0x0){const q=await batchQueryObjectsByIds(l,b,!![]);for(const s of Array['isArray'](q)?q:[]){const t=s,u=t?.['data'];if(t?.['entity']===undefined&&t?.['name']===undefined)continue;h['push']({'entity':str(t?.['entity']),'name':str(t?.['name']),'value':scalarValueStr(u?.['value']??t?.['value']),'value_type':str(u?.['value_type'])});}}}catch(v){return c['push']('data:\x20table\x20enumeration\x20failed\x20('+(v instanceof Error?v['message']:String(v))+')\x20—\x20entries\x20below\x20are\x20NOT\x20the\x20full\x20set;\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':null,'items':h['slice'](0x0,d)};}if(i===0x0)return{'count':0x0,'items':[]};const k=h['slice'](0x0,d);return(!j||i>d)&&c['push']('data:\x20showing\x20'+k['length']+'\x20of\x20'+i+'\x20row(s)'+(j?'':'\x20(walk\x20capped\x20at\x20'+f+')')+'\x20—\x20full\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':i,'items':k};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network'],b['no_cache']!==![]),h=String(f['object']),j=[],k=await resolveHead(h,f,j),l=String(f['type']??'');if(l==='Progress'){const m=arr(f['session'])[0x0],n=m?{'next_node':str(m['next_node']),'weights':num(m['weights']),'threshold':num(m['threshold']),'forwards':arr(m['forwards'])['map'](r=>{const t=r;return{'forward':str(t['forward'])??'','who':str(t['who']),'accomplished':t['accomplished']===!![],'msg':str(t['msg']),'time':num(t['time'])};})}:null,q=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,h,e,j,'machine');return{'action':'object_panorama','object':h,'object_type':'Progress','network':e,'head':k,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](t=>String(t)),'operators':arr(f['namedOperator'])['map'](r=>{const t=r;return{'name':str(t['name'])??'','operators':arr(t['operators'])['map'](u=>String(u))};}),'session':n,'related':q,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Demand')return{'action':'object_panorama','object':h,'object_type':'Demand','network':e,'head':k,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':num(f['presenters_count'])},'rewards':arr(f['rewards'])['map'](t=>String(t)),'guards':arr(f['guards'])['map'](r=>({'guard':str(r['guard'])??''})),'presenters':await buildPresenters(h,e,j),'data_gaps':j};if(l==='Order'){let r=null;try{const G=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});r=G?.['timestamp_ms']?Number(G['timestamp_ms'])||null:null;}catch{}let t='none',u=null,w=null;const x=str(f['allocation']),y=str(f['progress']),z=str(f['service']),A=[x,y,z]['filter'](H=>!!H);let B=null;if(A['length']>0x0)try{const H=await query_objects({'objects':A,'network':e}),I=H?.['objects']??[];if(x){t='pending';const J=I['find'](L=>L?.['object']===x),K=Number(J?.['balance']??NaN);if(Number['isFinite'](K)&&K===0x0)t='allocated';}if(y){const L=I['find'](M=>M?.['object']===y);u=str(L?.['current']),w=num(L?.['current_time']);}if(z){const M=I['find'](N=>N?.['object']===z);B=coinOfTypeRaw(M?.['type_raw']??M?.['type']);}}catch{}const C=await buildRelatedList(h,h,e,j,'order'),D=str(f['amount']),E=await formatMoneyAnnotation(D,B,e),F=await Promise['all'](arr(f['items'])['map'](async N=>{const O=N,P=str(O['price']),Q=await formatMoneyAnnotation(P,B,e);return{'name':str(O['name']),'price':P,'price_display':Q['display'],'price_tip':Q['tip'],'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}));return{'action':'object_panorama','object':h,'object_type':'Order','network':e,'head':k,'coin_type':B,'fields':{'service':z,'machine':str(f['machine']),'progress':y,'allocation':x,'discount':str(f['discount']),'amount':D,'amount_display':E['display'],'amount_tip':E['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':r,'related':C,'allocation_state':t,'progress_next':u,'progress_since':w,'items':F,'disputes':arr(f['dispute'])['map'](N=>String(N)),'agents':arr(f['agent'])['map'](N=>String(N)),'data_gaps':j};}if(l==='Arb'){const N=f['indemnity'];let O=null;try{const X=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});O=X?.['timestamp_ms']?Number(X['timestamp_ms'])||null:null;}catch{}const P=str(f['order']);let Q=null;if(P)try{const Y=await query_objects({'objects':[P],'network':e}),Z=Y?.['objects']?.[0x0];Q=str(Z?.['service']);}catch{}const R=await buildRelatedList(h,h,e,j,'arb'),S=coinOfTypeRaw(f['type_raw']),T=str(f['fee']),U=await formatMoneyAnnotation(T,S,e),V=N?str(N['amount']):null,W=await formatMoneyAnnotation(V,S,e);return{'action':'object_panorama','object':h,'object_type':'Arb','network':e,'head':k,'coin_type':S,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':Q,'fee':T,'fee_display':U['display'],'fee_tip':U['tip'],'feedback':str(f['feedback']),'indemnity':N?{'amount':V,'amount_display':W['display'],'amount_tip':W['tip'],'time':num(N['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Arbitration'){const a0=coinOfTypeRaw(f['type_raw']??f['type']),a1=str(f['fee']),a2=await formatMoneyAnnotation(a1,a0,e),a3=str(f['balance']),a4=await formatMoneyAnnotation(a3,a0,e),a5=a8=>{if(a8&&typeof a8==='object'){const a9=a8;if(a9['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(a9['GuardIdentifier']);if(a9['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(a9['FixedValue']);}return typeof a8==='number'||typeof a8==='string'?String(a8):null;},a6=arr(f['voting_guard'])['map'](a8=>{const a9=a8;return{'guard':str(a9['guard'])??'','vote_weight':a5(a9['vote_weight'])};}),a7={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const a8=await fetchObjectLinkerTx(h,e,!![]),a9=a8?.['items']??[];a7['window_saturated']=ringWindowSaturated(a9['length']);const aa=a9['filter'](ad=>objectTypeFromAddress(typeof ad?.['who']==='string'?ad['who']:'')===ObjectType['Arb']);a7['count']=aa['length'];for(const ad of aa){if(typeof ad?.['time']==='number'){if(a7['stats']['first_created_ms']===null||ad['time']<a7['stats']['first_created_ms'])a7['stats']['first_created_ms']=ad['time'];if(a7['stats']['last_created_ms']===null||ad['time']>a7['stats']['last_created_ms'])a7['stats']['last_created_ms']=ad['time'];}}const ab=aa['slice'](-0x3)['reverse'](),ac=new Map();if(ab['length']>0x0)try{const ae=await batchQueryObjectsByIds(ab['map'](af=>String(af['who'])),e,!![]);for(const af of ae){if(af?.['object'])ac['set'](af['object'],af);}}catch{j['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const ag of ab){const ah=typeof ag?.['who']==='string'?ag['who']:'';if(!ah)continue;const ai=ac['get'](ah);a7['items']['push']({'arb':ah,'order':ai?str(ai['order']):null,'status':ai?ARB_STATUS_NAMES[num(ai['status'])??-0x1]??str(ai['status']):null,'time':typeof ag?.['time']==='number'?ag['time']:null});}a7['preview_truncated']=a7['count']>a7['items']['length'],a7['preview_truncated']&&(a7['drilldown']={'total_count':a7['count'],'analyzed_count':a7['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+h+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a7['count']+(a7['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{j['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':h,'object_type':'Arbitration','network':e,'head':k,'coin_type':a0,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a1,'fee_display':a2['display'],'fee_tip':a2['tip'],'balance':a3,'balance_display':a4['display'],'balance_tip':a4['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a6,'cases':a7,'data_gaps':j};}if(l==='Repository')return{'action':'object_panorama','object':h,'object_type':'Repository','network':e,'head':k,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](aj=>{const ak=aj;return{'name':str(ak['name'])??'','description':str(ak['description']),'id_from':str(ak['id_from']),'value_type':str(ak['value_type']),'write_guards':arr(ak['write_guard'])['length'],'quote_guard':str(ak['quote_guard']),'write_once':ak['write_once']===!![]};}),'rewards':arr(f['rewards'])['map'](aj=>String(aj)),'data_entries':await buildRepositoryData(h,e,j),'data_gaps':j};if(l==='Proof'){const aj=ar=>typeof ar==='string'&&ar?createHash('sha256')['update'](ar)['digest']('hex')['slice'](0x0,0x10):null,ak=str(f['server_pubkey']),al=str(f['server_signature']),am=num(f['time']),an=num(f['proof_type']),ao=str(f['proof']),ap={'action':'object_panorama','object':h,'object_type':'Proof','network':e,'head':k,'fields':{'description':str(f['description']),'anchored_root':ao,'item_count':num(f['item_count']),'proof_type':an,'proof_type_label':an===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE)\x20—\x20convention,\x20not\x20chain-validated':(an??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(the\x20contract\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about_address']??f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':am,'time_iso':am!==null?new Date(am)['toISOString']():null},'server_pubkey':{'present':!!ak,'length':ak?ak['length']:null,'fingerprint':aj(f['server_pubkey'])},'server_signature':{'present':!!al,'length':al?al['length']:null,'fingerprint':aj(f['server_signature'])},'data_gaps':[...j,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},aq=b['wts_file_path'];if(aq){const ar=await readWtsDocument(aq);ar===undefined?ap['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+aq+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ap['wts_anchor_check']=checkWtsProofAnchor(ar,{'proof':ao,'server_pubkey':ak,'time':am,'signer':ap['fields']['signer'],'address':h});}return ap;}if(l==='Allocation'){const as=str(f['balance']);let at=coinOfTypeRaw(f['type_raw']??f['type']);const au=arr(f['allocators']),av=f['allocators'],aw=str(av?.['threshold'])??str(f['threshold']);if(!at){const aC=str(f['payment_info']?.['for_object']);if(aC)try{const aD=await query_objects({'objects':[aC],'network':e}),aE=(aD?.['objects']??[])['find'](aG=>aG?.['object']===aC),aF=str(aE?.['service']);if(aF){const aG=await query_objects({'objects':[aF],'network':e}),aH=(aG?.['objects']??[])['find'](aI=>aI?.['object']===aF);at=coinOfTypeRaw(aH?.['type_raw']??aH?.['type']);}}catch{}}const ax=await formatMoneyAnnotation(as,at,e),ay=f['payment_info'],az={0x0:'0=Amount\x20(fixed\x20raw\x20units)',0x1:'1=Rate\x20(per-10000\x20of\x20the\x20pool\x20base)',0x2:'2=Surplus\x20(everything\x20left\x20after\x20fixed\x20rows)',0x3:'3=RateGross\x20(per-10000\x20of\x20the\x20GROSS\x20pool)'},aA=await buildRelatedList(h,h,e,j,'allocation');let aB=null;try{const aI=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});aB=aI?.['timestamp_ms']?Number(aI['timestamp_ms'])||null:null;}catch{}return{'action':'object_panorama','object':h,'object_type':'Allocation','network':e,'head':k,'coin_type':at,'fields':{'balance':as,'balance_display':ax['display'],'balance_tip':ax['tip'],'threshold':aw,'for_object':str(ay?.['for_object']),'for_guard':str(ay?.['for_guard']),'remark':str(ay?.['remark']),'index':str(ay?.['index'])},'allocators':au['map'](aJ=>{const aK=aJ;return{'guard':str(aK['guard']),'sharing':arr(aK['sharing'])['map'](aL=>{const aM=aL,aN=aM['who'];let aO='unknown',aP=null;if(aN&&typeof aN==='object'){if(typeof aN['GuardIdentifier']==='number'||typeof aN['GuardIdentifier']==='string')aO='guard_identifier',aP=num(aN['GuardIdentifier']);else{if(aN['Entity']&&typeof aN['Entity']==='object')aO='entity',aP=str(aN['Entity']['name_or_address']);else typeof aN['Signer']==='string'&&(aO='signer',aP=aN['Signer']);}}const aQ=num(aM['mode']);return{'who_kind':aO,'who_value':aP,'resolution_note':aO==='guard_identifier'?'slot\x20'+String(aP)+':\x20reads\x20the\x20rail\x20guard\x27s\x20SUBMITTED\x20value\x20for\x20this\x20slot\x20at\x20spend\x20time\x20(order-scoped\x20rails\x20submit\x20the\x20Order\x20address\x20—\x20for_object\x20above).\x20A\x20STATIC\x20row\x20in\x20this\x20slot\x20is\x20the\x20F21\x20bricked\x20shape;\x20cross-check\x20the\x20guard\x27s\x20declared\x20submission\x20slots.':aO==='entity'?'static\x20address:\x20pins\x20this\x20literal\x20recipient\x20regardless\x20of\x20the\x20guard\x27s\x20submitted\x20slots.':aO==='signer'?'signer:\x20resolves\x20to\x20whoever\x20executes\x20the\x20spend\x20transaction.':'unrecognized\x20recipient\x20variant\x20—\x20SDK\x20decode\x20gap;\x20report\x20with\x20the\x20raw\x20object.','sharing':str(aM['sharing']),'mode':aQ,'mode_label':az[aQ??-0x1]??(aQ??'?')+'\x20=\x20unrecognized\x20mode'};})};}),'updated_ms':aB,'related':aA,'data_gaps':j};}if(l==='Reward'){const aJ=coinOfTypeRaw(f['type_raw']??l),aK=str(f['balance']);let aL={'display':null,'tip':null};try{aL=await formatMoneyAnnotation(aK,aJ,e);}catch{}const aM=[];for(const aN of arr(f['guards'])){const aO=aN,aP=aO?.['amount'],aQ=aP!=null&&(aP['type']===0x1||aP['type']==='Fixed'),aR=aP!=null&&(aP['type']===0x2||aP['type']==='GuardU64Identifier'),aS=num(aO?.['expiration_time']);aM['push']({'guard':str(aO?.['guard'])??'','amount_type':aQ?'fixed':aR?'guard_submission':'unknown','amount':aQ?str(aP?.['value']):aR?'submission\x20identifier\x20'+(str(aP?.['value'])??'?'):null,'amount_display':aQ?(await formatMoneyAnnotation(str(aP?.['value']),aJ,e))['display']:null,'expiration_time':aS,'expiration_display':aS!=null?new Date(aS)['toISOString']():null,'expired':aS!=null?Date['now']()>aS:null});}return{'action':'object_panorama','object':h,'object_type':'Reward','network':e,'head':k,'freshness':freshnessOf(f),'coin_type':aJ,'fields':{'pool_balance':aK,'pool_balance_display':aL['display'],'claims':aM},'claim_records':{'count':null,'note':'Claim\x20history\x20is\x20recipient-keyed\x20on\x20this\x20Reward\x27s\x20table\x20—\x20read\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Reward\x20address).'},'data_gaps':j};}return j['push']('No\x20semantic\x20decoder\x20for\x20type\x20\x27'+(l||'unknown')+'\x27\x20—\x20fields\x20below\x20are\x20the\x20RAW\x20on-chain\x20payload,\x20not\x20interpreted.\x20'+'Semantic\x20decoders\x20exist\x20for:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Allocation\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Reward\x20/\x20Proof.'),{'action':'object_panorama','object':h,'network':e,'head':k,'freshness':freshnessOf(f),'object_type':'Unknown','raw_type':l||'unknown','coin_type':coinOfTypeRaw(l),'fields':js(f),'data_gaps':j};}
|
|
1
|
+
import{Config,LocalMark,query_objects,query_object_last_updated,query_table,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a422a}from'../../tools/handlers/name-resolution.js';import{parseStructuredLines,firstStructuredValue}from'../../evaluation/structured-lines.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,batchQueryTableItems,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a);function freshnessOf(a){const b=a?a['version']??a['data']?.['version']:undefined;return{'read_at_ms':Date['now'](),'version':b===undefined||b===null||String(b)===''?null:String(b),'note':'live\x20read\x20(cache\x20bypassed);\x20a\x20read\x20issued\x20in\x20the\x20same\x20second\x20as\x20a\x20committing\x20transaction\x20can\x20trail\x20the\x20committed\x20effect\x20by\x20one\x20checkpoint\x20—\x20if\x20any\x20field\x20contradicts\x20a\x20transaction\x20just\x20submitted,\x20re-query\x20once\x20(compare\x20version\x20across\x20reads)\x20before\x20concluding'};}const ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],scalarValueStr=a=>{if(a==null)return null;if(typeof a==='string')return a;if(typeof a==='number'||typeof a==='boolean')return String(a);if(typeof a==='bigint')return a['toString']();if(a instanceof Uint8Array)try{return new TextDecoder()['decode'](a);}catch{return Array['from'](a['slice'](0x0,0x20))['map'](c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('')+(a['length']>0x20?'...':'');}try{return JSON['stringify'](a,(b,c)=>typeof c==='bigint'?c['toString']():c);}catch{return null;}};export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b,c=!![]){const d=await a422a(a,'object_address');let f=b??undefined,g=null;if(!f)f=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[d],'network':f,...c?{'no_cache':!![]}:{}});g=h?.['objects']?.[0x0]??null;if(!g&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==f){const j=await query_objects({'objects':[d],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(g=k,f=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+d+'\x20on\x20'+f+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!g)throw new Error(d+'\x20not\x20found\x20on\x20'+f+(b?'':'\x20(session\x20default\x20network\x20—\x20not\x20an\x20explicit\x20request)')+'.\x20Verify\x20BOTH\x20the\x20object\x20ID\x20and\x20the\x20network:\x20an\x20object\x20that\x20exists\x20on\x20'+'one\x20network\x20answers\x20\x22not\x20found\x22\x20on\x20the\x20other.\x20Pass\x20context_network\x20'+'to\x20query\x20a\x20specific\x20network\x20before\x20concluding\x20the\x20object\x20does\x20not\x20exist.');return g['object']=g['object']??d,{'network':String(f),'obj':g};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];const g=0xc8;let h=![];try{const {items:i,truncated:j}=await batchQueryTableItems(a,{'network':b,'noCache':!![],'maxItems':g});f=j;const k=i['map'](m=>m['object'])['filter'](m=>m?.['type']==='TableItem_DemandPresenter');e=k['length'];const l=k['map'](m=>({'presenter':str(m?.['address'])??'','service':str(m?.['service'])??'','recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])}))['sort']((m,n)=>(n['update_time']??0x0)-(m['update_time']??0x0))['slice'](0x0,0x32);for(const m of l){const n=parseStructuredLines(m['recommend']??'');d['push']({'presenter':m['presenter'],'service':m['service'],'recommend':m['recommend'],'acceptance_score':m['acceptance_score'],'feedback':m['feedback'],'feedback_time':m['feedback_time'],'update_time':m['update_time'],'structured':n,'quote':firstStructuredValue(n,['quote','price']),'score_covers_current_service':m['acceptance_score']==null?null:m['feedback_time']!=null&&m['update_time']!=null?m['feedback_time']>=m['update_time']:null});}}catch{h=!![];}if(h&&d['length']===0x0){try{const o=await fetchObjectLinkerTx(a,b,!![]),p=Array['isArray'](o?.['items'])?o['items']:[];f=ringWindowSaturated(p['length']);const q=p['map'](v=>({'who':String(v?.['who']??''),'time':typeof v?.['time']==='number'?v['time']:null}))['filter'](v=>v['who']['startsWith']('0x'));e=q['length'];const t=q['slice'](-0x32)['reverse'](),u=await batchReadAddressKeyedFields(a,t['map'](v=>v['who']),b,!![]);for(const v of t){const w=u['get'](v['who']['toLowerCase']()),x=num(w?.['acceptance_score']),y=num(w?.['feedback_time']),z=num(w?.['update_time'])??v['time'],A=str(w?.['recommend']),B=parseStructuredLines(A);d['push']({'presenter':v['who'],'service':str(w?.['service'])??'','recommend':A,'acceptance_score':x,'feedback':str(w?.['feedback']),'feedback_time':y,'update_time':z,'structured':B,'quote':firstStructuredValue(B,['quote','price']),'score_covers_current_service':x==null?null:y!=null&&z!=null?y>=z:null});}}catch{return c['push']('presenters:\x20presenter-table\x20walk\x20and\x20tx-ring\x20fallback\x20both\x20failed\x20(non-blocking)'),{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}c['push']('presenters:\x20presenter-table\x20walk\x20failed;\x20served\x20tx-ring\x20fallback\x20rows');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){const d=0x32,f=0xc8,g=0x32,h=[];let i=0x0,j=!![];try{const l=[];let m=null;for(;;){const n=await query_table({'parent':a,'cursor':m,'limit':g,'no_cache':!![],'network':b}),o=Array['isArray'](n?.['items'])?n['items']:[];for(const p of o){if(typeof p?.['object']==='string')l['push'](p['object']);}i+=o['length'];if(n?.['hasNextPage']===!![]&&typeof n?.['nextCursor']==='string'&&i<f){m=n['nextCursor'];continue;}j=n?.['hasNextPage']!==!![];break;}if(l['length']>0x0){const q=await batchQueryObjectsByIds(l,b,!![]);for(const s of Array['isArray'](q)?q:[]){const t=s,u=t?.['data'];if(t?.['entity']===undefined&&t?.['name']===undefined)continue;h['push']({'entity':str(t?.['entity']),'name':str(t?.['name']),'value':scalarValueStr(u?.['value']??t?.['value']),'value_type':str(u?.['value_type'])});}}}catch(v){return c['push']('data:\x20table\x20enumeration\x20failed\x20('+(v instanceof Error?v['message']:String(v))+')\x20—\x20entries\x20below\x20are\x20NOT\x20the\x20full\x20set;\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':null,'items':h['slice'](0x0,d)};}if(i===0x0)return{'count':0x0,'items':[]};const k=h['slice'](0x0,d);return(!j||i>d)&&c['push']('data:\x20showing\x20'+k['length']+'\x20of\x20'+i+'\x20row(s)'+(j?'':'\x20(walk\x20capped\x20at\x20'+f+')')+'\x20—\x20full\x20audit\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Repository).'),{'count':i,'items':k};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter']??b['service_address'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted;\x20\x27service_address\x27\x20is\x20tolerated\x20as\x20an\x20alias).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network'],b['no_cache']!==![]),h=String(f['object']),j=[],k=await resolveHead(h,f,j),l=String(f['type']??'');if(l==='Progress'){const m=arr(f['session'])[0x0],n=m?{'next_node':str(m['next_node']),'weights':num(m['weights']),'threshold':num(m['threshold']),'forwards':arr(m['forwards'])['map'](r=>{const t=r;return{'forward':str(t['forward'])??'','who':str(t['who']),'accomplished':t['accomplished']===!![],'msg':str(t['msg']),'time':num(t['time'])};})}:null,q=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,h,e,j,'machine');return{'action':'object_panorama','object':h,'object_type':'Progress','network':e,'head':k,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](t=>String(t)),'operators':arr(f['namedOperator'])['map'](r=>{const t=r;return{'name':str(t['name'])??'','operators':arr(t['operators'])['map'](u=>String(u))};}),'session':n,'related':q,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Demand'){const r=num(f['presenters_count']),t=await buildPresenters(h,e,j);return r!=null&&r>0x0&&t['count']===0x0&&j['push']('presenters:\x20the\x20Demand\x20object\x20reports\x20'+r+'\x20presenter(s)\x20on-chain,\x20but\x20the\x20'+'presenter-table\x20walk\x20returned\x20NONE\x20—\x20this\x20is\x20a\x20READ\x20GAP,\x20not\x20an\x20absence.\x20Presenter\x20reputation\x20'+'(acceptance_score\x20/\x20feedback)\x20is\x20UNREADABLE\x20here;\x20verify\x20via\x20onchain_table\x20on\x20the\x20DemandPresenter\x20'+'entries\x20before\x20any\x20match/recall\x20decision'),{'action':'object_panorama','object':h,'object_type':'Demand','network':e,'head':k,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':r},'rewards':arr(f['rewards'])['map'](u=>String(u)),'guards':arr(f['guards'])['map'](u=>({'guard':str(u['guard'])??''})),'presenters':t,'data_gaps':j};}if(l==='Order'){let u=null;try{const I=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});u=I?.['timestamp_ms']?Number(I['timestamp_ms'])||null:null;}catch{}let w='none',x=null,y=null;const z=str(f['allocation']),A=str(f['progress']),B=str(f['service']),C=[z,A,B]['filter'](J=>!!J);let D=null;if(C['length']>0x0)try{const J=await query_objects({'objects':C,'network':e}),K=J?.['objects']??[];if(z){w='pending';const L=K['find'](N=>N?.['object']===z),M=Number(L?.['balance']??NaN);if(Number['isFinite'](M)&&M===0x0)w='allocated';}if(A){const N=K['find'](O=>O?.['object']===A);x=str(N?.['current']),y=num(N?.['current_time']);}if(B){const O=K['find'](P=>P?.['object']===B);D=coinOfTypeRaw(O?.['type_raw']??O?.['type']);}}catch{}const E=await buildRelatedList(h,h,e,j,'order'),F=str(f['amount']),G=await formatMoneyAnnotation(F,D,e),H=await Promise['all'](arr(f['items'])['map'](async P=>{const Q=P,R=str(Q['price']),S=await formatMoneyAnnotation(R,D,e);return{'name':str(Q['name']),'price':R,'price_display':S['display'],'price_tip':S['tip'],'quantity':str(Q['quantity']),'wip_hash':str(Q['wip_hash'])};}));return{'action':'object_panorama','object':h,'object_type':'Order','network':e,'head':k,'coin_type':D,'fields':{'service':B,'machine':str(f['machine']),'progress':A,'allocation':z,'discount':str(f['discount']),'amount':F,'amount_display':G['display'],'amount_tip':G['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':u,'related':E,'allocation_state':w,'progress_next':x,'progress_since':y,'items':H,'disputes':arr(f['dispute'])['map'](P=>String(P)),'agents':arr(f['agent'])['map'](P=>String(P)),'data_gaps':j};}if(l==='Arb'){const P=f['indemnity'];let Q=null;try{const Z=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});Q=Z?.['timestamp_ms']?Number(Z['timestamp_ms'])||null:null;}catch{}const R=str(f['order']);let S=null;if(R)try{const a0=await query_objects({'objects':[R],'network':e}),a1=a0?.['objects']?.[0x0];S=str(a1?.['service']);}catch{}const T=await buildRelatedList(h,h,e,j,'arb'),U=coinOfTypeRaw(f['type_raw']),V=str(f['fee']),W=await formatMoneyAnnotation(V,U,e),X=P?str(P['amount']):null,Y=await formatMoneyAnnotation(X,U,e);return{'action':'object_panorama','object':h,'object_type':'Arb','network':e,'head':k,'coin_type':U,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':S,'fee':V,'fee_display':W['display'],'fee_tip':W['tip'],'feedback':str(f['feedback']),'indemnity':P?{'amount':X,'amount_display':Y['display'],'amount_tip':Y['tip'],'time':num(P['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](a2=>{const a3=a2;return{'voter':str(a3['voter'])??'','agrees':arr(a3['agrees'])['map'](a4=>Number(a4)),'weight':num(a3['weight'])??0x0,'time':num(a3['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](a2=>{const a3=a2;return{'name':str(a3['name'])??'','votes':num(a3['votes'])??0x0};}),'related':T,'updated_ms':Q,'freshness':freshnessOf(f),'data_gaps':j};}if(l==='Arbitration'){const a2=coinOfTypeRaw(f['type_raw']??f['type']),a3=str(f['fee']),a4=await formatMoneyAnnotation(a3,a2,e),a5=str(f['balance']),a6=await formatMoneyAnnotation(a5,a2,e),a7=aa=>{if(aa&&typeof aa==='object'){const ab=aa;if(ab['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(ab['GuardIdentifier']);if(ab['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(ab['FixedValue']);}return typeof aa==='number'||typeof aa==='string'?String(aa):null;},a8=arr(f['voting_guard'])['map'](aa=>{const ab=aa;return{'guard':str(ab['guard'])??'','vote_weight':a7(ab['vote_weight'])};}),a9={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const aa=await fetchObjectLinkerTx(h,e,!![]),ab=aa?.['items']??[];a9['window_saturated']=ringWindowSaturated(ab['length']);const ac=ab['filter'](af=>objectTypeFromAddress(typeof af?.['who']==='string'?af['who']:'')===ObjectType['Arb']);a9['count']=ac['length'];for(const af of ac){if(typeof af?.['time']==='number'){if(a9['stats']['first_created_ms']===null||af['time']<a9['stats']['first_created_ms'])a9['stats']['first_created_ms']=af['time'];if(a9['stats']['last_created_ms']===null||af['time']>a9['stats']['last_created_ms'])a9['stats']['last_created_ms']=af['time'];}}const ad=ac['slice'](-0x3)['reverse'](),ae=new Map();if(ad['length']>0x0)try{const ag=await batchQueryObjectsByIds(ad['map'](ah=>String(ah['who'])),e,!![]);for(const ah of ag){if(ah?.['object'])ae['set'](ah['object'],ah);}}catch{j['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const ai of ad){const aj=typeof ai?.['who']==='string'?ai['who']:'';if(!aj)continue;const ak=ae['get'](aj);a9['items']['push']({'arb':aj,'order':ak?str(ak['order']):null,'status':ak?ARB_STATUS_NAMES[num(ak['status'])??-0x1]??str(ak['status']):null,'time':typeof ai?.['time']==='number'?ai['time']:null});}a9['preview_truncated']=a9['count']>a9['items']['length'],a9['preview_truncated']&&(a9['drilldown']={'total_count':a9['count'],'analyzed_count':a9['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+h+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a9['count']+(a9['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{j['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':h,'object_type':'Arbitration','network':e,'head':k,'coin_type':a2,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a3,'fee_display':a4['display'],'fee_tip':a4['tip'],'balance':a5,'balance_display':a6['display'],'balance_tip':a6['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a8,'cases':a9,'data_gaps':j};}if(l==='Repository')return{'action':'object_panorama','object':h,'object_type':'Repository','network':e,'head':k,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](al=>{const am=al;return{'name':str(am['name'])??'','description':str(am['description']),'id_from':str(am['id_from']),'value_type':str(am['value_type']),'write_guards':arr(am['write_guard'])['length'],'quote_guard':str(am['quote_guard']),'write_once':am['write_once']===!![]};}),'rewards':arr(f['rewards'])['map'](al=>String(al)),'data_entries':await buildRepositoryData(h,e,j),'data_gaps':j};if(l==='Proof'){const al=at=>typeof at==='string'&&at?createHash('sha256')['update'](at)['digest']('hex')['slice'](0x0,0x10):null,am=str(f['server_pubkey']),an=str(f['server_signature']),ao=num(f['time']),ap=num(f['proof_type']),aq=str(f['proof']),ar={'action':'object_panorama','object':h,'object_type':'Proof','network':e,'head':k,'fields':{'description':str(f['description']),'anchored_root':aq,'item_count':num(f['item_count']),'proof_type':ap,'proof_type_label':ap===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE)\x20—\x20convention,\x20not\x20chain-validated':(ap??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(the\x20contract\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about_address']??f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':ao,'time_iso':ao!==null?new Date(ao)['toISOString']():null},'server_pubkey':{'present':!!am,'length':am?am['length']:null,'fingerprint':al(f['server_pubkey'])},'server_signature':{'present':!!an,'length':an?an['length']:null,'fingerprint':al(f['server_signature'])},'data_gaps':[...j,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},as=b['wts_file_path'];if(as){const at=await readWtsDocument(as);at===undefined?ar['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+as+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ar['wts_anchor_check']=checkWtsProofAnchor(at,{'proof':aq,'server_pubkey':am,'time':ao,'signer':ar['fields']['signer'],'address':h});}return ar;}if(l==='Allocation'){const au=str(f['balance']);let av=coinOfTypeRaw(f['type_raw']??f['type']);const aw=arr(f['allocators']),ax=f['allocators'],ay=str(ax?.['threshold'])??str(f['threshold']);if(!av){const aE=str(f['payment_info']?.['for_object']);if(aE)try{const aF=await query_objects({'objects':[aE],'network':e}),aG=(aF?.['objects']??[])['find'](aI=>aI?.['object']===aE),aH=str(aG?.['service']);if(aH){const aI=await query_objects({'objects':[aH],'network':e}),aJ=(aI?.['objects']??[])['find'](aK=>aK?.['object']===aH);av=coinOfTypeRaw(aJ?.['type_raw']??aJ?.['type']);}}catch{}}const az=await formatMoneyAnnotation(au,av,e),aA=f['payment_info'],aB={0x0:'0=Amount\x20(fixed\x20raw\x20units)',0x1:'1=Rate\x20(per-10000\x20of\x20the\x20pool\x20base)',0x2:'2=Surplus\x20(everything\x20left\x20after\x20fixed\x20rows)',0x3:'3=RateGross\x20(per-10000\x20of\x20the\x20GROSS\x20pool)'},aC=await buildRelatedList(h,h,e,j,'allocation');let aD=null;try{const aK=await query_object_last_updated({'object':h,'network':e,'previous_transaction':str(f['previousTransaction'])});aD=aK?.['timestamp_ms']?Number(aK['timestamp_ms'])||null:null;}catch{}return{'action':'object_panorama','object':h,'object_type':'Allocation','network':e,'head':k,'coin_type':av,'fields':{'balance':au,'balance_display':az['display'],'balance_tip':az['tip'],'threshold':ay,'for_object':str(aA?.['for_object']),'for_guard':str(aA?.['for_guard']),'remark':str(aA?.['remark']),'index':str(aA?.['index'])},'allocators':aw['map'](aL=>{const aM=aL;return{'guard':str(aM['guard']),'sharing':arr(aM['sharing'])['map'](aN=>{const aO=aN,aP=aO['who'];let aQ='unknown',aR=null;if(aP&&typeof aP==='object'){if(typeof aP['GuardIdentifier']==='number'||typeof aP['GuardIdentifier']==='string')aQ='guard_identifier',aR=num(aP['GuardIdentifier']);else{if(aP['Entity']&&typeof aP['Entity']==='object')aQ='entity',aR=str(aP['Entity']['name_or_address']);else typeof aP['Signer']==='string'&&(aQ='signer',aR=aP['Signer']);}}const aS=num(aO['mode']);return{'who_kind':aQ,'who_value':aR,'resolution_note':aQ==='guard_identifier'?'slot\x20'+String(aR)+':\x20reads\x20the\x20rail\x20guard\x27s\x20SUBMITTED\x20value\x20for\x20this\x20slot\x20at\x20spend\x20time\x20(order-scoped\x20rails\x20submit\x20the\x20Order\x20address\x20—\x20for_object\x20above).\x20A\x20STATIC\x20row\x20in\x20this\x20slot\x20is\x20the\x20F21\x20bricked\x20shape;\x20cross-check\x20the\x20guard\x27s\x20declared\x20submission\x20slots.':aQ==='entity'?'static\x20address:\x20pins\x20this\x20literal\x20recipient\x20regardless\x20of\x20the\x20guard\x27s\x20submitted\x20slots.':aQ==='signer'?'signer:\x20resolves\x20to\x20whoever\x20executes\x20the\x20spend\x20transaction.':'unrecognized\x20recipient\x20variant\x20—\x20SDK\x20decode\x20gap;\x20report\x20with\x20the\x20raw\x20object.','sharing':str(aO['sharing']),'mode':aS,'mode_label':aB[aS??-0x1]??(aS??'?')+'\x20=\x20unrecognized\x20mode'};})};}),'updated_ms':aD,'related':aC,'data_gaps':j};}if(l==='Reward'){const aL=coinOfTypeRaw(f['type_raw']??l),aM=str(f['balance']);let aN={'display':null,'tip':null};try{aN=await formatMoneyAnnotation(aM,aL,e);}catch{}const aO=[];for(const aP of arr(f['guards'])){const aQ=aP,aR=aQ?.['amount'],aS=aR!=null&&(aR['type']===0x1||aR['type']==='Fixed'),aT=aR!=null&&(aR['type']===0x2||aR['type']==='GuardU64Identifier'),aU=num(aQ?.['expiration_time']);aO['push']({'guard':str(aQ?.['guard'])??'','amount_type':aS?'fixed':aT?'guard_submission':'unknown','amount':aS?str(aR?.['value']):aT?'submission\x20identifier\x20'+(str(aR?.['value'])??'?'):null,'amount_display':aS?(await formatMoneyAnnotation(str(aR?.['value']),aL,e))['display']:null,'expiration_time':aU,'expiration_display':aU!=null?new Date(aU)['toISOString']():null,'expired':aU!=null?Date['now']()>aU:null});}return{'action':'object_panorama','object':h,'object_type':'Reward','network':e,'head':k,'freshness':freshnessOf(f),'coin_type':aL,'fields':{'pool_balance':aM,'pool_balance_display':aN['display'],'claims':aO},'claim_records':{'count':null,'note':'Claim\x20history\x20is\x20recipient-keyed\x20on\x20this\x20Reward\x27s\x20table\x20—\x20read\x20via\x20onchain_table\x20(parent\x20=\x20this\x20Reward\x20address).'},'data_gaps':j};}return j['push']('No\x20semantic\x20decoder\x20for\x20type\x20\x27'+(l||'unknown')+'\x27\x20—\x20fields\x20below\x20are\x20the\x20RAW\x20on-chain\x20payload,\x20not\x20interpreted.\x20'+'Semantic\x20decoders\x20exist\x20for:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Allocation\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Reward\x20/\x20Proof.'),{'action':'object_panorama','object':h,'network':e,'head':k,'freshness':freshnessOf(f),'object_type':'Unknown','raw_type':l||'unknown','coin_type':coinOfTypeRaw(l),'fields':js(f),'data_gaps':j};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a397a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{buildNodeActionAdvice}from'../../participation/node-action-advisor.js';import{isTerminalArbStatus}from'../../knowledge/arbitration-ledger.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';import{deriveTimeWindow}from'../../participation/time-window.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a397a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function allocatorGuardAddresses(b){const c=Array['isArray'](b)?b:Array['isArray'](b?.['allocators'])?b['allocators']:[],d=[];for(const e of c){const f=e?.['guard'];if(typeof f==='string'&&f['startsWith']('0x'))d['push'](f);}return d;}async function fetchAllocatorGuardDefs(a,b,c){const d=new Map(),f=[...new Set(allocatorGuardAddresses(a))];if(f['length']===0x0)return d;try{const h=await batchQueryObjectsByIds(f,b);for(const i of h){const j=fld(i,'object'),k=fld(i,'root');if(j&&k!==undefined&&k!==null){const l=fld(i,'table'),m=Array['isArray'](l)?l['filter'](n=>n!=null&&typeof n==='object')['filter'](n=>typeof n['identifier']==='number')['map'](n=>({'identifier':n['identifier'],'value_type':n['value_type'],'value':n['value'],'name':typeof n['name']==='string'?n['name']:undefined,'b_submission':n['b_submission']===!![]})):undefined;d['set'](j,{'root':k,...m&&m['length']>0x0?{'table':m}:{}});}}}catch(n){c['push']('Allocator\x20guard\x20fetch\x20failed:\x20'+n['message']+'\x20—\x20Signer-recipient\x20payoff\x20stays\x20conservative\x20'+'(unresolved\x20guards\x20cannot\x20clear\x20an\x20RC-FIND-01\x20suspicion).');}return d;}function summarizeAllocation(a,b,c){const d=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(d['length']===0x0)return undefined;let e=0x0,f=0x0,g=0x0,h=0x0;const i=[],j=b['toLowerCase']();for(const k of d){const l=k?.['sharing']??[];for(const n of l){e++;const o=classifyRecipient(n['who']);if(!o)continue;if(o['kind']==='submission')f++;else{if(o['kind']==='signer')h++;else{if(o['kind']==='entity'&&o['address']['toLowerCase']()===j)g++;}}}const m=typeof k?.['guard']==='string'?c['get'](k['guard']):undefined;i['push'](derivePayoffFromSharing(l,'service_order_allocators',m));}return{'recipient_slots':e,'guard_gated_slots':f,'direct_to_me_slots':g,'to_payer_slots':h,'payoffs':i};}export async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(b){if(!b['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!b['radar_targets']||b['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const d=b['context_network']??await Config['Instance']()['network_get'](),f=b['radar_include_alerts']??!![],h=[],i=await resolveAddress(b['radar_account'],'radar_account'),j=await Promise['all'](b['radar_targets']['map'](async O=>({'progress':await resolveAddress(O['progress'],'progress'),'order':O['order']?await resolveAddress(O['order'],'order'):undefined}))),k=j['flatMap'](O=>O['order']?[O['progress'],O['order']]:[O['progress']]),l=await batchQueryObjectsByIds(k,d,!![]),m=new Map();for(const O of l){const P=fld(O,'object');if(P)m['set'](P,O);}const q=new Map(),s=new Map();for(const Q of j){const R=m['get'](Q['progress']);if(!R){h['push']('Progress\x20'+Q['progress']+'\x20not\x20found\x20on\x20'+d+'\x20—\x20target\x20skipped.');continue;}q['set'](Q['progress'],R);if(Q['order']){const S=m['get'](Q['order']);if(S)s['set'](Q['order'],S);else h['push']('Order\x20'+Q['order']+'\x20not\x20found\x20on\x20'+d+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+Q['progress']+'.');}}j['length']>0x0&&q['size']===0x0&&h['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+j['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+d+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const u=[...new Set([...q['values']()]['map'](T=>fld(T,'machine'))['filter'](T=>!!T))],w=[...new Set([...s['values']()]['map'](T=>fld(T,'service'))['filter'](T=>!!T))],x=[...new Set([...s['values']()]['flatMap'](T=>{const U=fld(T,'dispute');return Array['isArray'](U)?U:[];}))],y=[...new Set([...s['values']()]['map'](T=>fld(T,'allocation'))['filter'](T=>!!T&&T['startsWith']('0x')))],z=new Map(),A=new Map(),B=new Map(),C=new Map(),D=new Map();await Promise['all']([...u['map'](async T=>{try{const [U,V]=await Promise['all']([batchQueryObjectsByIds([T],d),fetchMachineNodes(T,d,!![])]);if(U[0x0])z['set'](T,U[0x0]);A['set'](T,toWorkflowSubgraph(V,T));}catch(W){h['push']('Machine\x20'+T+'\x20fetch\x20failed:\x20'+W['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(w['length']===0x0)return;try{const T=await batchQueryObjectsByIds(w,d);for(const U of T){const V=fld(U,'object');if(V)B['set'](V,U);}}catch(W){h['push']('Service\x20query\x20failed:\x20'+W['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(x['length']===0x0)return;try{const T=await batchQueryObjectsByIds(x,d);for(const U of T){const V=fld(U,'object');if(V)C['set'](V,U);}}catch(W){h['push']('Arb\x20query\x20failed:\x20'+W['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(y['length']===0x0)return;try{const T=await batchQueryObjectsByIds(y,d,!![]);for(const U of T){const V=fld(U,'object');if(V)D['set'](V,U);}}catch(W){h['push']('Allocation\x20pool\x20query\x20failed:\x20'+W['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const E=new Map(),F=[...new Set(u['map'](T=>fld(z['get'](T),'permission'))['filter'](T=>!!T))],G=new Map();await Promise['all'](F['map'](async T=>{try{const [U,V]=await Promise['all']([batchQueryObjectsByIds([T],d),fetchEntityPermissions(T,d)]),W=U[0x0];G['set'](T,{'address':T,'entity_count':fld(W,'entity_count'),'perm_remark':fld(W,'perm_remark'),'entityPermissions':V,'owner':fld(W,'builder')});}catch(X){h['push']('Permission\x20'+T+'\x20fetch\x20failed:\x20'+X['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const T of u){const U=fld(z['get'](T),'permission');if(U&&G['has'](U))E['set'](T,G['get'](U));}const H=new Map();await Promise['all']([...B['entries']()]['map'](async([V,W])=>{H['set'](V,await fetchAllocatorGuardDefs(fld(W,'order_allocators'),d,h));}));let I=0x0;const J=new Map();try{const V=await watch_conversations({'account':i,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),W=Array['isArray'](V)?V:V?.['conversations']??[];for(const X of W){const Y=X?.['peerAddress'],Z=typeof X?.['unreadCount']==='number'?X['unreadCount']:0x0;typeof Y==='string'&&Z>0x0&&(J['set'](Y['toLowerCase'](),Z),I+=Z);}}catch{h['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const K=[],L=Date['now'](),M=new Map();for(const a0 of j){const a1=q['get'](a0['progress']);if(!a1)continue;const a2=a0['order']?s['get'](a0['order']):undefined;!a0['order']&&h['push']('Target\x20progress\x20'+a0['progress']+'\x20carries\x20NO\x20order\x20address\x20—\x20order-holder\x20identity,\x20'+'buyer/customer\x20perspective\x20routing\x20and\x20order-scoped\x20amounts\x20are\x20UNVERIFIED\x20for\x20this\x20'+'target;\x20the\x20participation\x20stance\x20below\x20is\x20downgraded\x20accordingly.\x20Pass\x20the\x20order\x20'+'address\x20to\x20restore\x20full\x20analysis.');const a3=fld(a1,'machine'),a4=fld(a1,'current')??'',a5=fld(a1,'namedOperator')??[],a6={};for(const ao of a5){if(ao?.['name'])a6[ao['name']]=Array['isArray'](ao['operators'])?ao['operators']:[];}const a7=a2?fld(a2,'service'):undefined,a8=a7?B['get'](a7):undefined;let a9;const aa=a2?fld(a2,'builder'):undefined;if(a2&&aa===i){const ap=fld(a2,'dispute')??[];for(const aq of ap){const ar=C['get'](aq);if(!ar)continue;const as=fld(ar,'indemnity');if(as){a9={'arbitration':fld(ar,'arbitration')??aq,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+aq+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const ab=isConsequenceNode(a4,'completed'),ac=isConsequenceNode(a4,'refunded'),ad=[];if(a8&&aa===i){if(ac)h['push']('Rewards\x20suppressed\x20for\x20order\x20'+(a0['order']??a0['progress'])+':\x20the\x20order\x20sits\x20on\x20a\x20refund/exception\x20'+('terminal\x20node\x20('+(a4||'unknown')+'),\x20so\x20Service\x20rewards\x20are\x20not\x20advertised\x20as\x20claimable\x20against\x20it.'));else{const at=fld(a8,'rewards')??[];for(const au of at){ad['push']({'address':au,'description':'Service\x20reward\x20'+au+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}}let ae=0x0;if(J['size']>0x0){const av=new Set();if(aa)av['add'](aa['toLowerCase']());for(const aw of Object['values'](a6)){for(const ax of aw)av['add'](ax['toLowerCase']());}av['delete'](i['toLowerCase']());for(const ay of av){ae+=J['get'](ay)??0x0;}}const af={'account':i,'progress_address':a0['progress'],'order_address':a0['order'],'current_node':a4,'order_holder':aa,'workflow':a3?A['get'](a3):undefined,'permission':a3?E['get'](a3)??null:null,'named_accounts':a6,'claimable_rewards':ad['length']>0x0?ad:undefined,'pending_compensation':a9,'rating_pending':ab&&aa===i,'review_summary':b['radar_review_summary'],'unread_messages':ae>0x0?ae:undefined,'last_progress_at':fld(a1,'current_time')??undefined,'now':L},ag=analyzeOrderParticipation(af),ah=(fld(a8,'arbitrations')??[])['length']>0x0,ai=a2?fld(a2,'dispute')??[]:[],aj=ai['map'](az=>C['get'](az))['filter'](az=>az!=null),ak=aj['find'](az=>{const aA=fld(az,'status');return aA==null||!isTerminalArbStatus(aA);}),al=summarizeAllocation(fld(a8,'order_allocators'),i,a7?H['get'](a7)??new Map():new Map()),am=a2?fld(a2,'allocation'):undefined,an=a2&&am?D['get'](am['toLowerCase']()):undefined;try{const az=buildNodeActionAdvice({'radar':ag,'is_order_holder':aa===i,'order_amount':balanceStr(fld(a2,'amount')),'token_type':balanceToken(fld(a2,'amount')),'compensation_fund':balanceStr(fld(a8,'compensation_fund')),'arbitration_bound':ah,'has_dispute':ai['length']>0x0,'dispute_active':ak!=null,'arb_status':ak?fld(ak,'status'):undefined,'rewards_count':(fld(a8,'rewards')??[])['length'],'completed':ab,'refunded':ac,'allocation_pool':an&&am?{'address':am,'balance':fld(an,'balance'),'allocators':fld(an,'allocators'),'threshold':fld(an,'threshold'),'payment':fld(an,'payment'),'for_object':fld(an,'payment_info')!==undefined?fld(an,'payment_info')?.['for_object']:fld(an,'for_object')}:undefined,'allocation_summary':al,'last_progress_at':af['last_progress_at'],'now':L,'unread_messages':ae>0x0?ae:undefined});ag['interest_analysis']=az['interest_analysis'],ag['fund_advice']=az['fund_advice'],ag['advice']={'context':az['context'],'kernels_run':az['kernels_run'],'node_game':az['node_game'],'arb_game':az['arb_game'],'actions':az['actions']};for(const aA of az['advisory_gaps'])h['push'](aA);}catch(aB){h['push']('Action\x20advice\x20failed\x20for\x20'+a0['progress']+':\x20'+aB['message']+'.');}a2&&am&&!an&&h['push']('Allocation\x20pool\x20'+am+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+a0['progress']+'.');if(f&&a2){const aC={'order_id':a0['order'],'service_id':a7??'','current_node':a4||undefined,'created_at':Number(fld(a2,'time')??L)||L,'last_progress_at':fld(a1,'current_time')??undefined,'now':L,'order_amount':((()=>{try{return BigInt(fld(a2,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aD=fld(a8,'compensation_fund');return aD!=null?BigInt(aD):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a8,'type_raw'))),'has_arbitration':(fld(a8,'arbitrations')??[])['length']>0x0,'pending_user_action':ag['operable']['some'](aD=>aD['execution_path']==='order_holder'),'completed':ab,'refunded':ac};try{const aD=monitorOrder({'current':aC,'thresholds':b['radar_monitor_thresholds']});aD['length']>0x0&&(ag['attached_alerts']=aD);}catch(aE){h['push']('Order\x20monitor\x20failed\x20for\x20'+a0['order']+':\x20'+aE['message']+'.');}}{const aF=a3?A['get'](a3):undefined;if(aF&&a4){const aG=aF['transitions']['filter'](aK=>aK['prevNode']===a4&&aK['guard']),aH=[...new Set(aG['map'](aK=>aK['guard']))],aI=aH['filter'](aK=>!M['has'](aK['toLowerCase']()));if(aI['length']>0x0){try{const aK=await batchQueryObjectsByIds(aI,d);for(const aL of aK){const aM=fld(aL,'object'),aN=fld(aL,'root');if(!aM||aN==null)continue;const aO=fld(aL,'table'),aP=Array['isArray'](aO)?aO['filter'](aQ=>aQ!=null&&typeof aQ==='object')['filter'](aQ=>typeof aQ['identifier']==='number')['map'](aQ=>({'identifier':aQ['identifier'],'value':aQ['value'],'value_type':aQ['value_type'],'name':typeof aQ['name']==='string'?aQ['name']:undefined,'b_submission':aQ['b_submission']===!![]})):undefined;M['set'](aM['toLowerCase'](),{'root':aN,...aP&&aP['length']>0x0?{'table':aP}:{}});}}catch(aQ){h['push']('Time-window\x20guard\x20fetch\x20failed:\x20'+aQ['message']+'\x20—\x20time_window\x20unavailable\x20for\x20'+a0['progress']+'.');}for(const aR of aI){if(!M['has'](aR['toLowerCase']()))M['set'](aR['toLowerCase'](),null);}}const aJ=aG['map'](aS=>{const aT=M['get'](aS['guard']['toLowerCase']());return aT?{'guard':aS['guard'],'forward':aS['forward']??null,'def':aT}:null;})['filter'](aS=>aS!=null);if(aJ['length']>0x0)try{const aS=deriveTimeWindow({'guards':aJ,'current_node':a4,'last_progress_at':af['last_progress_at']});ag['time_window']=aS;}catch(aT){h['push']('Time-window\x20derivation\x20failed\x20for\x20'+a0['progress']+':\x20'+aT['message']+'.');}}}K['push'](ag);}const N=aggregateRadar(K,I);return{'action':'participation_radar','account':i,'now_ms':L,'orders_analyzed':N['orders_analyzed'],'actionable':N['actionable'],'waiting':N['waiting'],'all_pending_claims':N['all_pending_claims'],'unread_messages_total':N['unread_messages_total'],'data_gaps':h,'summary':N['summary']};}
|
|
1
|
+
import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a424a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{buildNodeActionAdvice}from'../../participation/node-action-advisor.js';import{isTerminalArbStatus}from'../../knowledge/arbitration-ledger.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';import{deriveTimeWindow,autoAcceptCountdown}from'../../participation/time-window.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a424a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function allocatorGuardAddresses(b){const c=Array['isArray'](b)?b:Array['isArray'](b?.['allocators'])?b['allocators']:[],d=[];for(const e of c){const f=e?.['guard'];if(typeof f==='string'&&f['startsWith']('0x'))d['push'](f);}return d;}async function fetchAllocatorGuardDefs(a,b,c){const d=new Map(),f=[...new Set(allocatorGuardAddresses(a))];if(f['length']===0x0)return d;try{const h=await batchQueryObjectsByIds(f,b);for(const i of h){const j=fld(i,'object'),k=fld(i,'root');if(j&&k!==undefined&&k!==null){const l=fld(i,'table'),m=Array['isArray'](l)?l['filter'](n=>n!=null&&typeof n==='object')['filter'](n=>typeof n['identifier']==='number')['map'](n=>({'identifier':n['identifier'],'value_type':n['value_type'],'value':n['value'],'name':typeof n['name']==='string'?n['name']:undefined,'b_submission':n['b_submission']===!![]})):undefined;d['set'](j,{'root':k,...m&&m['length']>0x0?{'table':m}:{}});}}}catch(n){c['push']('Allocator\x20guard\x20fetch\x20failed:\x20'+n['message']+'\x20—\x20Signer-recipient\x20payoff\x20stays\x20conservative\x20'+'(unresolved\x20guards\x20cannot\x20clear\x20an\x20RC-FIND-01\x20suspicion).');}return d;}function summarizeAllocation(a,b,c){const d=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(d['length']===0x0)return undefined;let e=0x0,f=0x0,g=0x0,h=0x0;const i=[],j=b['toLowerCase']();for(const k of d){const l=k?.['sharing']??[];for(const n of l){e++;const o=classifyRecipient(n['who']);if(!o)continue;if(o['kind']==='submission')f++;else{if(o['kind']==='signer')h++;else{if(o['kind']==='entity'&&o['address']['toLowerCase']()===j)g++;}}}const m=typeof k?.['guard']==='string'?c['get'](k['guard']):undefined;i['push'](derivePayoffFromSharing(l,'service_order_allocators',m));}return{'recipient_slots':e,'guard_gated_slots':f,'direct_to_me_slots':g,'to_payer_slots':h,'payoffs':i};}export async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(b){if(!b['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!b['radar_targets']||b['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const d=b['context_network']??await Config['Instance']()['network_get'](),f=b['radar_include_alerts']??!![],h=[],i=await resolveAddress(b['radar_account'],'radar_account'),j=await Promise['all'](b['radar_targets']['map'](async O=>({'progress':await resolveAddress(O['progress'],'progress'),'order':O['order']?await resolveAddress(O['order'],'order'):undefined}))),k=j['flatMap'](O=>O['order']?[O['progress'],O['order']]:[O['progress']]),l=await batchQueryObjectsByIds(k,d,!![]),m=new Map();for(const O of l){const P=fld(O,'object');if(P)m['set'](P,O);}const q=new Map(),s=new Map();for(const Q of j){const R=m['get'](Q['progress']);if(!R){h['push']('Progress\x20'+Q['progress']+'\x20not\x20found\x20on\x20'+d+'\x20—\x20target\x20skipped.');continue;}q['set'](Q['progress'],R);if(Q['order']){const S=m['get'](Q['order']);if(S)s['set'](Q['order'],S);else h['push']('Order\x20'+Q['order']+'\x20not\x20found\x20on\x20'+d+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+Q['progress']+'.');}}j['length']>0x0&&q['size']===0x0&&h['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+j['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+d+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const u=[...new Set([...q['values']()]['map'](T=>fld(T,'machine'))['filter'](T=>!!T))],w=[...new Set([...s['values']()]['map'](T=>fld(T,'service'))['filter'](T=>!!T))],x=[...new Set([...s['values']()]['flatMap'](T=>{const U=fld(T,'dispute');return Array['isArray'](U)?U:[];}))],y=[...new Set([...s['values']()]['map'](T=>fld(T,'allocation'))['filter'](T=>!!T&&T['startsWith']('0x')))],z=new Map(),A=new Map(),B=new Map(),C=new Map(),D=new Map();await Promise['all']([...u['map'](async T=>{try{const [U,V]=await Promise['all']([batchQueryObjectsByIds([T],d),fetchMachineNodes(T,d,!![])]);if(U[0x0])z['set'](T,U[0x0]);A['set'](T,toWorkflowSubgraph(V,T));}catch(W){h['push']('Machine\x20'+T+'\x20fetch\x20failed:\x20'+W['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(w['length']===0x0)return;try{const T=await batchQueryObjectsByIds(w,d);for(const U of T){const V=fld(U,'object');if(V)B['set'](V,U);}}catch(W){h['push']('Service\x20query\x20failed:\x20'+W['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(x['length']===0x0)return;try{const T=await batchQueryObjectsByIds(x,d);for(const U of T){const V=fld(U,'object');if(V)C['set'](V,U);}}catch(W){h['push']('Arb\x20query\x20failed:\x20'+W['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(y['length']===0x0)return;try{const T=await batchQueryObjectsByIds(y,d,!![]);for(const U of T){const V=fld(U,'object');if(V)D['set'](V,U);}}catch(W){h['push']('Allocation\x20pool\x20query\x20failed:\x20'+W['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const E=new Map(),F=[...new Set(u['map'](T=>fld(z['get'](T),'permission'))['filter'](T=>!!T))],G=new Map();await Promise['all'](F['map'](async T=>{try{const [U,V]=await Promise['all']([batchQueryObjectsByIds([T],d),fetchEntityPermissions(T,d)]),W=U[0x0];G['set'](T,{'address':T,'entity_count':fld(W,'entity_count'),'perm_remark':fld(W,'perm_remark'),'entityPermissions':V,'owner':fld(W,'builder')});}catch(X){h['push']('Permission\x20'+T+'\x20fetch\x20failed:\x20'+X['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const T of u){const U=fld(z['get'](T),'permission');if(U&&G['has'](U))E['set'](T,G['get'](U));}const H=new Map();await Promise['all']([...B['entries']()]['map'](async([V,W])=>{H['set'](V,await fetchAllocatorGuardDefs(fld(W,'order_allocators'),d,h));}));let I=0x0;const J=new Map();try{const V=await watch_conversations({'account':i,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),W=Array['isArray'](V)?V:V?.['conversations']??[];for(const X of W){const Y=X?.['peerAddress'],Z=typeof X?.['unreadCount']==='number'?X['unreadCount']:0x0;typeof Y==='string'&&Z>0x0&&(J['set'](Y['toLowerCase'](),Z),I+=Z);}}catch{h['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const K=[],L=Date['now'](),M=new Map();for(const a0 of j){const a1=q['get'](a0['progress']);if(!a1)continue;const a2=a0['order']?s['get'](a0['order']):undefined;!a0['order']&&h['push']('Target\x20progress\x20'+a0['progress']+'\x20carries\x20NO\x20order\x20address\x20—\x20order-holder\x20identity,\x20'+'buyer/customer\x20perspective\x20routing\x20and\x20order-scoped\x20amounts\x20are\x20UNVERIFIED\x20for\x20this\x20'+'target;\x20the\x20participation\x20stance\x20below\x20is\x20downgraded\x20accordingly.\x20Pass\x20the\x20order\x20'+'address\x20to\x20restore\x20full\x20analysis.');const a3=fld(a1,'machine'),a4=fld(a1,'current')??'',a5=fld(a1,'namedOperator')??[],a6={};for(const ao of a5){if(ao?.['name'])a6[ao['name']]=Array['isArray'](ao['operators'])?ao['operators']:[];}const a7=a2?fld(a2,'service'):undefined,a8=a7?B['get'](a7):undefined;let a9;const aa=a2?fld(a2,'builder'):undefined;if(a2&&aa===i){const ap=fld(a2,'dispute')??[];for(const aq of ap){const ar=C['get'](aq);if(!ar)continue;const as=fld(ar,'indemnity');if(as){a9={'arbitration':fld(ar,'arbitration')??aq,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+aq+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const ab=isConsequenceNode(a4,'completed'),ac=isConsequenceNode(a4,'refunded'),ad=[];if(a8&&aa===i){if(ac)h['push']('Rewards\x20suppressed\x20for\x20order\x20'+(a0['order']??a0['progress'])+':\x20the\x20order\x20sits\x20on\x20a\x20refund/exception\x20'+('terminal\x20node\x20('+(a4||'unknown')+'),\x20so\x20Service\x20rewards\x20are\x20not\x20advertised\x20as\x20claimable\x20against\x20it.'));else{const at=fld(a8,'rewards')??[];for(const au of at){ad['push']({'address':au,'description':'Service\x20reward\x20'+au+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}}let ae=0x0;if(J['size']>0x0){const av=new Set();if(aa)av['add'](aa['toLowerCase']());for(const aw of Object['values'](a6)){for(const ax of aw)av['add'](ax['toLowerCase']());}av['delete'](i['toLowerCase']());for(const ay of av){ae+=J['get'](ay)??0x0;}}const af={'account':i,'progress_address':a0['progress'],'order_address':a0['order'],'current_node':a4,'order_holder':aa,'workflow':a3?A['get'](a3):undefined,'permission':a3?E['get'](a3)??null:null,'named_accounts':a6,'claimable_rewards':ad['length']>0x0?ad:undefined,'pending_compensation':a9,'rating_pending':ab&&aa===i,'review_summary':b['radar_review_summary'],'unread_messages':ae>0x0?ae:undefined,'last_progress_at':fld(a1,'current_time')??undefined,'now':L},ag=analyzeOrderParticipation(af),ah=(fld(a8,'arbitrations')??[])['length']>0x0,ai=a2?fld(a2,'dispute')??[]:[],aj=ai['map'](az=>C['get'](az))['filter'](az=>az!=null),ak=aj['find'](az=>{const aA=fld(az,'status');return aA==null||!isTerminalArbStatus(aA);}),al=summarizeAllocation(fld(a8,'order_allocators'),i,a7?H['get'](a7)??new Map():new Map()),am=a2?fld(a2,'allocation'):undefined,an=a2&&am?D['get'](am['toLowerCase']()):undefined;try{const az=buildNodeActionAdvice({'radar':ag,'is_order_holder':aa===i,'order_amount':balanceStr(fld(a2,'amount')),'token_type':balanceToken(fld(a2,'amount')),'compensation_fund':balanceStr(fld(a8,'compensation_fund')),'arbitration_bound':ah,'has_dispute':ai['length']>0x0,'dispute_active':ak!=null,'arb_status':ak?fld(ak,'status'):undefined,'rewards_count':(fld(a8,'rewards')??[])['length'],'completed':ab,'refunded':ac,'allocation_pool':an&&am?{'address':am,'balance':fld(an,'balance'),'allocators':fld(an,'allocators'),'threshold':fld(an,'threshold'),'payment':fld(an,'payment'),'for_object':fld(an,'payment_info')!==undefined?fld(an,'payment_info')?.['for_object']:fld(an,'for_object')}:undefined,'allocation_summary':al,'last_progress_at':af['last_progress_at'],'now':L,'unread_messages':ae>0x0?ae:undefined,'auto_accept':ag['auto_accept_countdown']});ag['interest_analysis']=az['interest_analysis'],ag['fund_advice']=az['fund_advice'],ag['advice']={'context':az['context'],'kernels_run':az['kernels_run'],'node_game':az['node_game'],'arb_game':az['arb_game'],'actions':az['actions']};for(const aA of az['advisory_gaps'])h['push'](aA);}catch(aB){h['push']('Action\x20advice\x20failed\x20for\x20'+a0['progress']+':\x20'+aB['message']+'.');}a2&&am&&!an&&h['push']('Allocation\x20pool\x20'+am+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+a0['progress']+'.');if(f&&a2){const aC={'order_id':a0['order'],'service_id':a7??'','current_node':a4||undefined,'created_at':Number(fld(a2,'time')??L)||L,'last_progress_at':fld(a1,'current_time')??undefined,'now':L,'order_amount':((()=>{try{return BigInt(fld(a2,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aD=fld(a8,'compensation_fund');return aD!=null?BigInt(aD):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a8,'type_raw'))),'has_arbitration':(fld(a8,'arbitrations')??[])['length']>0x0,'pending_user_action':ag['operable']['some'](aD=>aD['execution_path']==='order_holder'),'completed':ab,'refunded':ac};try{const aD=monitorOrder({'current':aC,'thresholds':b['radar_monitor_thresholds']});aD['length']>0x0&&(ag['attached_alerts']=aD);}catch(aE){h['push']('Order\x20monitor\x20failed\x20for\x20'+a0['order']+':\x20'+aE['message']+'.');}}{const aF=a3?A['get'](a3):undefined;if(aF&&a4){const aG=aF['transitions']['filter'](aK=>aK['prevNode']===a4&&aK['guard']),aH=[...new Set(aG['map'](aK=>aK['guard']))],aI=aH['filter'](aK=>!M['has'](aK['toLowerCase']()));if(aI['length']>0x0){try{const aK=await batchQueryObjectsByIds(aI,d);for(const aL of aK){const aM=fld(aL,'object'),aN=fld(aL,'root');if(!aM||aN==null)continue;const aO=fld(aL,'table'),aP=Array['isArray'](aO)?aO['filter'](aQ=>aQ!=null&&typeof aQ==='object')['filter'](aQ=>typeof aQ['identifier']==='number')['map'](aQ=>({'identifier':aQ['identifier'],'value':aQ['value'],'value_type':aQ['value_type'],'name':typeof aQ['name']==='string'?aQ['name']:undefined,'b_submission':aQ['b_submission']===!![]})):undefined;M['set'](aM['toLowerCase'](),{'root':aN,...aP&&aP['length']>0x0?{'table':aP}:{}});}}catch(aQ){h['push']('Time-window\x20guard\x20fetch\x20failed:\x20'+aQ['message']+'\x20—\x20time_window\x20unavailable\x20for\x20'+a0['progress']+'.');}for(const aR of aI){if(!M['has'](aR['toLowerCase']()))M['set'](aR['toLowerCase'](),null);}}const aJ=aG['map'](aS=>{const aT=M['get'](aS['guard']['toLowerCase']());return aT?{'guard':aS['guard'],'forward':aS['forward']??null,'def':aT}:null;})['filter'](aS=>aS!=null);if(aJ['length']>0x0)try{const aS=deriveTimeWindow({'guards':aJ,'current_node':a4,'last_progress_at':af['last_progress_at']}),aT=autoAcceptCountdown(aS,aG['map'](aV=>({'forward':aV['forward']??null,'node':aV['node']})),a4,af['last_progress_at'],L),aU=ag;aU['time_window']=aS;if(aT)aU['auto_accept_countdown']=aT;}catch(aV){h['push']('Time-window\x20derivation\x20failed\x20for\x20'+a0['progress']+':\x20'+aV['message']+'.');}}}K['push'](ag);}const N=aggregateRadar(K,I);return{'action':'participation_radar','account':i,'now_ms':L,'orders_analyzed':N['orders_analyzed'],'actionable':N['actionable'],'waiting':N['waiting'],'all_pending_claims':N['all_pending_claims'],'unread_messages_total':N['unread_messages_total'],'data_gaps':h,'summary':N['summary']};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config}from'@wowok/wowok/w/local';import{resolveAddress as
|
|
1
|
+
import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a427a}from'../../tools/handlers/name-resolution.js';import{deriveRelationshipProfile}from'../../relationship/index.js';import{analyzeDemanderInterest}from'../../participation/demander-interest.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{SdkDataPlane,expandTopology,projectRelationshipFacts}from'../../graph/onchain/index.js';export async function resolveAddress(a,b){return a427a(a,b);}export async function handleRelationshipProfile(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const b=a['context_network']??await Config['Instance']()['network_get'](),c=await resolveAddress(a['radar_account'],'radar_account'),d=new SdkDataPlane(b),e=await expandTopology(d,{'network':b,'seed':c,'budget':{'maxDepth':0x4,'maxNodes':0x384,'maxRpcs':0xa0,'perKindCaps':{'eoa.permission':0x19,'permission.core_binding':0x3c,'permission.tx_binding':0x3c,'eoa.order':0x28,'service.order':0x28,'order.allocation':0x28,'demand.presenter':0x3c,'machine.node':0x78}},'edges':{'tableEdges':['permission.entity','demand.presenter','machine.node']}}),f=[...e['gaps']];for(const z of e['truncations']){f['push']('truncated\x20'+z['schema']+'\x20at\x20'+z['nodeId']+':\x20observed\x20at\x20least\x20'+z['observed']+'\x20edge(s)');}if(e['budgetExhausted']['rpcs'])f['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(see\x20budget\x20settings).');if(e['budgetExhausted']['nodes'])f['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial.');const g=projectRelationshipFacts(e,c),{machines:h,orders:i,demands:j,allocations:k,contacts:l,arbitrations:m}={'machines':g['machines']??[],'orders':g['orders']??[],'demands':g['demands']??[],'allocations':g['allocations']??[],'contacts':g['contacts']??[],'arbitrations':g['arbitrations']??[]},n=deriveRelationshipProfile(g),o=new Set();if(k['length']>0x0)o['add']('Allocation');if(j['length']>0x0)o['add']('Demand');if(h['some'](A=>(A['forwards']??[])['some'](B=>B['guard'])))o['add']('MachineForward');if(m['length']>0x0)o['add']('Arbitration');for(const A of o){const B=GUARD_BINDING_REGISTRY['filter'](D=>D['object']===A);if(B['length']===0x0)continue;const C=B['map'](D=>{const E=D['preset_kind']==='amount'&&D['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+D['slot']+E+'\x20['+D['preset_kind']+']\x20—\x20creator:\x20'+D['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+D['user'];})['join']('\x20|\x20');n['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+A+'(s)\x20in\x20this\x20topology:\x20'+C+'.');}k['length']>0x0&&n['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);m['some'](D=>D['object_kind']==='service')&&f['push']('Arbitration\x20service\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration\x20services\x20contribute\x20binding\x20presence\x20only\x20(Arb\x20CASE\x20votes\x20ARE\x20parsed\x20into\x20arbitration_delegation/dispute_resolution\x20edges).');const p=['Permission'];if(i['length']>0x0)p['push']('Order');if(h['length']>0x0)p['push']('Machine','Progress');if(k['length']>0x0)p['push']('Allocation','Payment');if(j['length']>0x0)p['push']('Demand');if(m['length']>0x0)p['push']('Arbitration','Arb');if(l['length']>0x0)p['push']('Contact');if(Object['keys'](g['service_owners']??{})['length']>0x0)p['push']('Service','Guard');const q=detectBridgesForObjects(p);if(q['length']>0x0){const D=q['slice'](0x0,0x8)['map'](E=>summarizeBridge(E))['join']('\x0a-\x20');n['notes']['push']('Scenario\x20topology\x20('+q['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20'+('\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+D));}const r=a['relation_kinds']?new Set(a['relation_kinds']):undefined,s=r?n['edges']['filter'](E=>r['has'](E['kind'])):n['edges'],u=s['reduce']((E,F)=>{return E[F['kind']]=(E[F['kind']]??0x0)+0x1,E;},{});let w=c+'\x20holds\x20'+s['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](n['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](u)['length']>0x0?':\x20'+Object['entries'](u)['map'](([E,F])=>E+'×'+F)['join'](',\x20')+'.':'.');s['length']===0x0&&f['length']>0x0&&(w+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const x=(E,F)=>E['toLowerCase']()===F['toLowerCase'](),y=j['filter'](E=>E['owner']&&x(E['owner'],c))['map'](E=>({'demand':E['address'],...analyzeDemanderInterest({'account':c,'demand':E['address'],'presenters':E['presenters']??[],'rewards':(E['rewards']??[])['map'](F=>({'address':F})),'guards':E['guards']??[],'open':!(E['presenters']??[])['some'](F=>F['acceptance_score']!==undefined)})}));return y['length']>0x0&&(w+='\x20Anchor\x20demands\x20'+y['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':c,'edges':s,'by_counterparty':n['by_counterparty'],'notes':n['notes'],'data_gaps':f,'summary':w,...y['length']>0x0?{'demander_interest':y}:{}};}
|
|
@@ -27,6 +27,8 @@ export interface BusinessReport {
|
|
|
27
27
|
export interface ReverseMappingEdge {
|
|
28
28
|
from: string;
|
|
29
29
|
to: string;
|
|
30
|
+
forward_count?: number;
|
|
31
|
+
unguarded_forward_count?: number;
|
|
30
32
|
}
|
|
31
33
|
export interface ReverseMappingOrder {
|
|
32
34
|
id?: string;
|
|
@@ -53,6 +55,10 @@ export interface ReverseMappingInput {
|
|
|
53
55
|
now_ms?: number;
|
|
54
56
|
pending_stale_hours?: number;
|
|
55
57
|
order_amount?: string;
|
|
58
|
+
arbitrations?: Array<{
|
|
59
|
+
found?: boolean;
|
|
60
|
+
paused?: boolean;
|
|
61
|
+
}>;
|
|
56
62
|
}
|
|
57
63
|
export declare const PENDING_STALE_HOURS_DEFAULT = 168;
|
|
58
64
|
export declare function generateBusinessReport(input: ReverseMappingInput): BusinessReport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function fld(a,b){return a?.[b]??a?.['data']?.[b];}function detectType(a){const b=fld(a,'type')??fld(a,'type_raw');if(typeof b!=='string'||b['length']===0x0)return'';const c=b['split']('::')['pop']()??b;return c;}function objectsOfType(a,b){return a['filter'](c=>detectType(c)===b);}function identity(a){const b=fld(a,'name');if(typeof b==='string'&&b['trim']())return b['trim']();const c=fld(a,'object')??fld(a,'id');if(typeof c==='string'&&c['trim']())return c['trim']();return'unknown';}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function extractService(a){const b=objectsOfType(a,'Service')[0x0];if(!b)return{'found':![],'name':'unavailable','description':'No\x20Service\x20object\x20found','published':![],'paused':![],'salesCount':0x0,'arbitrations':[],'hasBuyGuard':![],'hasUm':![],'rewardsCount':0x0};return{'found':!![],'name':identity(b),'description':fld(b,'description')??'Service\x20(no\x20description)','published':fld(b,'bPublished')??![],'paused':fld(b,'bPaused')??![],'salesCount':Array['isArray'](fld(b,'sales'))?fld(b,'sales')['length']:0x0,'arbitrations':(fld(b,'arbitrations')??[])['filter'](c=>!!c),'compensationFund':balanceStr(fld(b,'compensation_fund')),'hasBuyGuard':fld(b,'buy_guard')!=null,'hasUm':fld(b,'um')!=null,'rewardsCount':(fld(b,'rewards')??[])['length']};}const REFUND_TERMS=['refund','refunded','return','returned','cancel','cancelled','canceled','reverse','reversal','chargeback','reimburse','compensat','expir','expired','void','voided','reject','rejected','fail','failed','abort','aborted','walk','dispute'],TERMINAL_SUFFIXES=['complete','completed','done','finish','finished','delivered','accepted',...REFUND_TERMS],matchesAny=(a,b)=>{const c=a['toLowerCase']();return b['some'](d=>c['includes'](d));},MACHINE_START_NODE='';function extractMachine(a,b,c){const d=objectsOfType(a,'Machine')[0x0];if(!d)return{'found':![],'nodeCount':0x0,'published':![],'paused':![],'entryNodes':[],'terminalNodeNames':[],'terminalSource':'names','refundNodeNames':[],'refundReachable':[],'reachabilityKnown':![]};const f=(b??[])['map'](j=>j['name'])['filter'](j=>typeof j==='string'),g=f['filter'](j=>matchesAny(j,REFUND_TERMS)),h=(c??[])['filter'](j=>!!j&&typeof j['from']==='string'&&typeof j['to']==='string');if(h['length']>0x0){const j=new Map();for(const p of h){const q=j['get'](p['from'])??[];q['push'](p['to']),j['set'](p['from'],q);}const k=new Set(f);for(const r of h){if(r['from'])k['add'](r['from']);if(r['to'])k['add'](r['to']);}k['delete'](MACHINE_START_NODE);const l=[...k]['filter'](s=>(j['get'](s)?.['length']??0x0)===0x0)['sort'](),n=new Set();if(j['has'](MACHINE_START_NODE)){n['add'](MACHINE_START_NODE);const s=[MACHINE_START_NODE];while(s['length']>0x0){const t=s['shift']();for(const u of j['get'](t)??[]){!n['has'](u)&&(n['add'](u),s['push'](u));}}}const o=j['has'](MACHINE_START_NODE);return{'found':!![],'nodeCount':f['length']>0x0?f['length']:(fld(d,'node_count')??0x0)+0x1,'published':fld(d,'bPublished')??![],'paused':fld(d,'bPaused')??![],'entryNodes':[],'terminalNodeNames':l,'terminalSource':'topology','refundNodeNames':g,'refundReachable':o?g['filter'](v=>n['has'](v)):[],'reachabilityKnown':o};}const i=f['filter'](v=>matchesAny(v,TERMINAL_SUFFIXES));return{'found':!![],'nodeCount':f['length']>0x0?f['length']:(fld(d,'node_count')??0x0)+0x1,'published':fld(d,'bPublished')??![],'paused':fld(d,'bPaused')??![],'entryNodes':[],'terminalNodeNames':i,'terminalSource':'names','refundNodeNames':g,'refundReachable':[],'reachabilityKnown':![]};}function detectAllocationRefundSlot(a){const b=objectsOfType(a,'Service')[0x0],c=fld(b,'order_allocators'),d=Array['isArray'](c)?c:Array['isArray'](c?.['allocators'])?c['allocators']:[];for(const e of d){for(const f of e?.['sharing']??[]){const g=f?.['who'];if(g==null)continue;if(typeof g==='object'){if('GuardIdentifier'in g)return!![];if('Signer'in g)return!![];continue;}if(typeof g==='string'){const h=g['toLowerCase']();if(h['includes']('guard\x20identifier')||h==='signer')return!![];}}}return![];}export const PENDING_STALE_HOURS_DEFAULT=0xa8;function computeOrderHealth(a,b,c,d){if(!a||a['length']===0x0)return undefined;const e=d&&d['size']>0x0?d:undefined,f=l=>e!=null&&typeof l?.['current_node']==='string'&&e['has'](l['current_node']),g=a['filter'](l=>l&&l['claimed_by']==null&&!f(l)),h=e?a['filter'](l=>l&&f(l))['length']:undefined,i=typeof b==='number'&&Number['isFinite'](b)&&b>0x0;let j=0x0,k=null;for(const l of g){const m=Number(l?.['created_at_ms']??0x0);if(!i||!Number['isFinite'](m)||m<=0x0)continue;const n=b-m;if(n>c*0x36ee80)j++;if(k==null||n>k)k=n;}return{'observed':a['length'],'pending':g['length'],'settled':h,'agingKnown':i,'overdue':i?j:0x0,'oldestPendingAgeDays':i&&k!=null?Math['floor'](k/0x5265c00):null,'staleHours':c};}export function generateBusinessReport(a){const b=a['objects']??[],c=extractService(b),d=extractMachine(b,a['machine_nodes'],a['machine_edges']),e=detectAllocationRefundSlot(b),f=d['refundNodeNames']['length']>0x0,g=d['refundReachable']['length']>0x0,h=d['reachabilityKnown']?g||e:f||e,i=d['reachabilityKnown']&&f&&!g,j=a['pending_stale_hours']??PENDING_STALE_HOURS_DEFAULT,k=d['terminalSource']==='topology'&&d['terminalNodeNames']['length']>0x0?new Set(d['terminalNodeNames']):undefined,l=computeOrderHealth(a['orders'],a['now_ms'],j,k),m=l?.['agingKnown']?l['overdue']:0x0,n=l?.['pending']??0x0,o=c['arbitrations']['length']>0x0,p=c['compensationFund'],q=p==null||p==='0',r=!c['found']?'unavailable':c['published']?c['paused']?'published\x20but\x20PAUSED':'published\x20and\x20active':'not\x20yet\x20published',s=!c['found']?'No\x20Service\x20object\x20available\x20to\x20describe.':c['description']+'\x20('+r+(c['salesCount']>0x0?',\x20'+c['salesCount']+'\x20sale\x20option(s)':'')+').',t=!d['found']?'Workflow\x20(Machine)\x20unavailable\x20—\x20cannot\x20describe\x20the\x20process.':d['nodeCount']>0x0?d['nodeCount']+'-node\x20workflow\x20('+(d['published']?'published':'draft')+(d['paused']?',\x20paused':'')+').'+(d['terminalNodeNames']['length']>0x0?d['terminalSource']==='topology'?'\x20Stop\x20nodes\x20(derived\x20from\x20workflow\x20edges):\x20'+d['terminalNodeNames']['join'](',\x20')+'.':'\x20Stop/refund\x20nodes\x20detected\x20(name\x20convention\x20only\x20—\x20no\x20edge\x20table\x20to\x20verify):\x20'+d['terminalNodeNames']['join'](',\x20')+'.':d['terminalSource']==='topology'?'\x20No\x20stop\x20node\x20in\x20the\x20workflow\x20graph.':'\x20No\x20explicit\x20stop\x20node\x20detected\x20from\x20names.'):'Workflow\x20node\x20details\x20unavailable\x20(node_count\x20not\x20resolved).',u=!f?'':d['reachabilityKnown']?g?'\x20Workflow\x20edges\x20verify\x20the\x20reversal\x20rail\x20is\x20reachable:\x20node(s)\x20'+d['refundReachable']['join'](',\x20')+'.':'\x20WARNING:\x20the\x20named\x20refund\x20node(s)\x20'+d['refundNodeNames']['join'](',\x20')+'\x20are\x20UNREACHABLE\x20from\x20the\x20workflow\x20entry\x20—\x20that\x20rail\x20cannot\x20fire.':'\x20Reversal\x20rail:\x20workflow\x20node(s)\x20'+d['refundNodeNames']['join'](',\x20')+'.',v=h?['A\x20refund\x20path\x20is\x20present.',u,e?'\x20Escrow\x20can\x20be\x20routed\x20back\x20to\x20the\x20payer\x20or\x20to\x20the\x20order\x20by\x20an\x20allocation\x20slot.':'']['filter'](Boolean)['join'](''):'NO\x20refund\x20path\x20detected\x20—\x20funds\x20may\x20be\x20unrecoverable\x20once\x20the\x20workflow\x20advances\x20to\x20completion.'+(i?u:''),w=o?c['arbitrations']['length']+'\x20arbitration\x20service(s)\x20bound\x20—\x20disputes\x20have\x20a\x20resolution\x20path.':'NO\x20arbitration\x20bound\x20—\x20disputes\x20have\x20no\x20neutral\x20resolution\x20path.',x=[];if(!h)x['push']('No\x20refund\x20path\x20—\x20escrowed\x20funds\x20may\x20be\x20unrecoverable.');i&&h&&x['push']('The\x20named\x20refund\x20node(s)\x20'+d['refundNodeNames']['join'](',\x20')+'\x20are\x20unreachable\x20from\x20the\x20workflow\x20entry\x20—\x20'+'that\x20rail\x20is\x20dead;\x20only\x20the\x20allocation\x20slot\x20can\x20still\x20return\x20funds.');if(!o)x['push']('No\x20arbitration\x20bound\x20—\x20no\x20dispute\x20recourse.');if(q)x['push']('Compensation\x20fund\x20is\x20empty\x20—\x20arbitration\x20indemnity\x20would\x20be\x20unenforceable.');m>0x0&&x['push'](m+'\x20pending\x20order(s)\x20exceed\x20the\x20'+j+'h\x20settlement\x20window'+(l?.['oldestPendingAgeDays']!=null?'\x20(oldest:\x20'+l['oldestPendingAgeDays']+'d)':'')+'\x20—\x20funds\x20held\x20in\x20escrow\x20with\x20no\x20settlement\x20progress.');const y=[];if(c['published']&&!c['paused'])y['push']('Service\x20is\x20published\x20and\x20active.');h&&y['push'](d['reachabilityKnown']&&g&&e?'Refund\x20path\x20statically\x20reachable\x20—\x20workflow\x20edges\x20reach\x20the\x20rail\x20and\x20an\x20order-routed\x20allocation\x20slot\x20exists\x20(static\x20graph\x20check\x20only;\x20leg\x20executability\x20is\x20audited\x20by\x20the\x20allocator\x20guard\x20lint,\x20not\x20here).':d['reachabilityKnown']&&g?'Refund\x20path\x20statically\x20reachable\x20via\x20workflow\x20edges\x20(no\x20order-routed\x20allocation\x20slot\x20found).':'Refund\x20path\x20present.');if(o)y['push']('Arbitration\x20bound\x20(neutral\x20dispute\x20resolution).');if(!q)y['push']('Compensation\x20fund\x20funded\x20('+p+'\x20raw\x20units)\x20—\x20indemnity\x20enforceable.');if(c['hasBuyGuard'])y['push']('Buy\x20guard\x20present\x20(purchase\x20is\x20validated\x20by\x20on-chain\x20rules).');const z=[];if(!h)z['push']('Refund\x20path');if(!o)z['push']('Arbitration');if(q)z['push']('Compensation\x20fund');let A='low';if(!h&&!o)A='critical';else{if(!h||!o)A='high';else q&&(A='medium');}if(m>=0x3&&(A==='low'||A==='medium'))A='high';else{if(m>=0x1&&A==='low')A='medium';}const B=[];if(c['found']&&c['paused'])B['push']('Service\x20is\x20currently\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.\x20This\x20is\x20a\x20merchant-side\x20availability\x20state,\x20not\x20a\x20trust\x20signal:\x20do\x20not\x20purchase\x20while\x20paused.');else c['found']&&!c['published']&&B['push']('Service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible\x20until\x20the\x20merchant\x20publishes\x20it.\x20This\x20is\x20a\x20launch\x20state,\x20not\x20a\x20trust\x20signal.');c['found']&&!c['hasUm']&&B['push']('No\x20contact\x20channel\x20(um)\x20configured\x20—\x20Messenger\x20pre-order\x20negotiation\x20with\x20the\x20merchant\x20is\x20unavailable.');n>0x0&&m===0x0&&B['push'](n+'\x20order(s)\x20in\x20the\x20recent\x20window\x20are\x20pending\x20(not\x20yet\x20settled).');const C=[];C['push']('Escrowed\x20settlement:\x20funds\x20release\x20only\x20when\x20the\x20workflow\x20advances\x20—\x20the\x20merchant\x20is\x20incentivized\x20to\x20deliver.'),C['push']('On-chain\x20reputation\x20(Registrar\x20like/dislike\x20+\x20dispute\x20rate)\x20is\x20a\x20public\x20trust\x20signal\x20for\x20future\x20buyers.');if(c['rewardsCount']>0x0)C['push'](c['rewardsCount']+'\x20reward(s)\x20configured\x20—\x20repeat-buyer\x20incentives\x20lower\x20acquisition\x20cost.');const D=[];D['push']('Escrow\x20safety:\x20money\x20is\x20locked\x20on-chain\x20until\x20completion,\x20not\x20held\x20by\x20the\x20merchant.');if(h)D['push']('Refund\x20path\x20exists\x20—\x20a\x20verified\x20refund\x20returns\x20the\x20escrow.');if(o)D['push']('Arbitration\x20recourse\x20—\x20a\x20neutral\x20third\x20party\x20can\x20rule\x20on\x20disputes.');if(!q)D['push']('Compensation\x20fund\x20backs\x20arbitration\x20indemnity.');const E=[];E['push']('Merchant\x20wants\x20settlement\x20released\x20early;\x20user\x20wants\x20to\x20verify\x20the\x20deliverable\x20first\x20—\x20the\x20workflow\x27s\x20confirm\x20step\x20is\x20the\x20contention\x20point.'),E['push']('Merchant\x20controls\x20the\x20Machine/Guards;\x20user\x20is\x20limited\x20to\x20the\x20confirm/refund\x20forwards\x20the\x20merchant\x20designed.');if(!o)E['push']('No\x20arbitration:\x20a\x20deadlock\x20has\x20no\x20neutral\x20tie-breaker.');const F=[];F['push']('Escrow\x20alignment:\x20funds\x20stay\x20locked\x20until\x20both\x20sides\x20advance\x20the\x20workflow\x20—\x20neither\x20can\x20unilaterally\x20take\x20the\x20money.');if(h)F['push']('Allocation\x20alignment:\x20a\x20refund\x20slot\x20routes\x20the\x20escrow\x20back\x20to\x20the\x20buyer\x20on\x20the\x20refund\x20path.');if(o)F['push']('Arbitration\x20alignment:\x20an\x20independent\x20Permission\x20+\x20public\x20voters\x20provide\x20a\x20neutral\x20dispute\x20authority.');F['push']('Reputation\x20alignment:\x20Registrar\x20like/dislike\x20is\x20framework-enforced\x20and\x20unforgeable\x20—\x20both\x20sides\x20are\x20accountable\x20to\x20public\x20history.');const G=A['toUpperCase'](),H=a['order_amount']!=null?'\x20'+a['order_amount']+'\x20raw\x20units\x20are\x20escrowed.':'',I=c['found']&&c['paused']?'\x20NOTE:\x20the\x20service\x20is\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.':c['found']&&!c['published']?'\x20NOTE:\x20the\x20service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible.':'',J=!c['found']?'No\x20Service\x20object\x20found\x20—\x20reverse\x20mapping\x20produced\x20a\x20minimal\x20report.':'\x22'+c['name']+'\x22\x20is\x20'+r+'.'+H+'\x20'+('Risk\x20level:\x20'+G+'.\x20'+(h?'Refund\x20path\x20present.':'NO\x20refund\x20path.')+'\x20')+(''+(o?'Arbitration\x20bound.':'NO\x20arbitration.'))+(I+'\x20')+'This\x20report\x20is\x20generated\x20deterministically\x20from\x20on-chain\x20facts\x20—\x20the\x20buyer\x20decides.';return{'summary':J,'merchantProfile':{'serviceDescription':s,'workflowDescription':t,'refundPolicy':v,'arbitrationPolicy':w},'userRiskAssessment':{'riskLevel':A,'keyRisks':x,'protections':y,'missingProtections':z,'notices':B},'gameTheoryAnalysis':{'merchantIncentives':C,'userIncentives':D,'potentialConflicts':E,'wowAlignments':F},'orderHealth':l};}export function classifyObjectType(a){return detectType(a);}export function extractObjectFields(a){if(!a||typeof a!=='object')return{};const b=a['data']??a;if(!b||typeof b!=='object')return{};return{...b};}
|
|
1
|
+
function fld(a,b){return a?.[b]??a?.['data']?.[b];}function detectType(a){const b=fld(a,'type')??fld(a,'type_raw');if(typeof b!=='string'||b['length']===0x0)return'';const c=b['split']('::')['pop']()??b;return c;}function objectsOfType(a,b){return a['filter'](c=>detectType(c)===b);}function identity(a){const b=fld(a,'name');if(typeof b==='string'&&b['trim']())return b['trim']();const c=fld(a,'object')??fld(a,'id');if(typeof c==='string'&&c['trim']())return c['trim']();return'unknown';}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function extractService(a){const b=objectsOfType(a,'Service')[0x0];if(!b)return{'found':![],'name':'unavailable','description':'No\x20Service\x20object\x20found','published':![],'paused':![],'salesCount':0x0,'arbitrations':[],'hasBuyGuard':![],'hasUm':![],'rewardsCount':0x0};return{'found':!![],'name':identity(b),'description':fld(b,'description')??'Service\x20(no\x20description)','published':fld(b,'bPublished')??![],'paused':fld(b,'bPaused')??![],'salesCount':Array['isArray'](fld(b,'sales'))?fld(b,'sales')['length']:0x0,'arbitrations':(fld(b,'arbitrations')??[])['filter'](c=>!!c),'compensationFund':balanceStr(fld(b,'compensation_fund')),'hasBuyGuard':fld(b,'buy_guard')!=null,'hasUm':fld(b,'um')!=null,'rewardsCount':(fld(b,'rewards')??[])['length']};}const REFUND_TERMS=['refund','refunded','return','returned','cancel','cancelled','canceled','reverse','reversal','chargeback','reimburse','compensat','expir','expired','void','voided','reject','rejected','fail','failed','abort','aborted','walk','dispute'],TERMINAL_SUFFIXES=['complete','completed','done','finish','finished','delivered','accepted',...REFUND_TERMS],matchesAny=(a,b)=>{const c=a['toLowerCase']();return b['some'](d=>c['includes'](d));},MACHINE_START_NODE='';function extractMachine(a,b,c){const d=objectsOfType(a,'Machine')[0x0];if(!d)return{'found':![],'nodeCount':0x0,'published':![],'paused':![],'entryNodes':[],'terminalNodeNames':[],'terminalSource':'names','refundNodeNames':[],'refundReachable':[],'reachabilityKnown':![]};const f=(b??[])['map'](j=>j['name'])['filter'](j=>typeof j==='string'),g=f['filter'](j=>matchesAny(j,REFUND_TERMS)),h=(c??[])['filter'](j=>!!j&&typeof j['from']==='string'&&typeof j['to']==='string');if(h['length']>0x0){const j=new Map();for(const p of h){const q=j['get'](p['from'])??[];q['push'](p['to']),j['set'](p['from'],q);}const k=new Set(f);for(const r of h){if(r['from'])k['add'](r['from']);if(r['to'])k['add'](r['to']);}k['delete'](MACHINE_START_NODE);const l=[...k]['filter'](s=>(j['get'](s)?.['length']??0x0)===0x0)['sort'](),n=new Set();if(j['has'](MACHINE_START_NODE)){n['add'](MACHINE_START_NODE);const s=[MACHINE_START_NODE];while(s['length']>0x0){const t=s['shift']();for(const u of j['get'](t)??[]){!n['has'](u)&&(n['add'](u),s['push'](u));}}}const o=j['has'](MACHINE_START_NODE);return{'found':!![],'nodeCount':f['length']>0x0?f['length']:(fld(d,'node_count')??0x0)+0x1,'published':fld(d,'bPublished')??![],'paused':fld(d,'bPaused')??![],'entryNodes':[],'terminalNodeNames':l,'terminalSource':'topology','refundNodeNames':g,'refundReachable':o?g['filter'](v=>n['has'](v)):[],'reachabilityKnown':o};}const i=f['filter'](v=>matchesAny(v,TERMINAL_SUFFIXES));return{'found':!![],'nodeCount':f['length']>0x0?f['length']:(fld(d,'node_count')??0x0)+0x1,'published':fld(d,'bPublished')??![],'paused':fld(d,'bPaused')??![],'entryNodes':[],'terminalNodeNames':i,'terminalSource':'names','refundNodeNames':g,'refundReachable':[],'reachabilityKnown':![]};}function detectAllocationRefundSlot(a){const b=objectsOfType(a,'Service')[0x0],c=fld(b,'order_allocators'),d=Array['isArray'](c)?c:Array['isArray'](c?.['allocators'])?c['allocators']:[];for(const e of d){for(const f of e?.['sharing']??[]){const g=f?.['who'];if(g==null)continue;if(typeof g==='object'){if('GuardIdentifier'in g)return!![];if('Signer'in g)return!![];continue;}if(typeof g==='string'){const h=g['toLowerCase']();if(h['includes']('guard\x20identifier')||h==='signer')return!![];}}}return![];}export const PENDING_STALE_HOURS_DEFAULT=0xa8;function computeOrderHealth(a,b,c,d){if(!a||a['length']===0x0)return undefined;const e=d&&d['size']>0x0?d:undefined,f=l=>e!=null&&typeof l?.['current_node']==='string'&&e['has'](l['current_node']),g=a['filter'](l=>l&&l['claimed_by']==null&&!f(l)),h=e?a['filter'](l=>l&&f(l))['length']:undefined,i=typeof b==='number'&&Number['isFinite'](b)&&b>0x0;let j=0x0,k=null;for(const l of g){const m=Number(l?.['created_at_ms']??0x0);if(!i||!Number['isFinite'](m)||m<=0x0)continue;const n=b-m;if(n>c*0x36ee80)j++;if(k==null||n>k)k=n;}return{'observed':a['length'],'pending':g['length'],'settled':h,'agingKnown':i,'overdue':i?j:0x0,'oldestPendingAgeDays':i&&k!=null?Math['floor'](k/0x5265c00):null,'staleHours':c};}export function generateBusinessReport(a){const b=a['objects']??[],c=extractService(b),d=extractMachine(b,a['machine_nodes'],a['machine_edges']),f=detectAllocationRefundSlot(b),g=d['refundNodeNames']['length']>0x0,h=d['refundReachable']['length']>0x0,i=d['reachabilityKnown']?h||f:g||f,j=d['reachabilityKnown']&&g&&!h,k=a['pending_stale_hours']??PENDING_STALE_HOURS_DEFAULT,l=d['terminalSource']==='topology'&&d['terminalNodeNames']['length']>0x0?new Set(d['terminalNodeNames']):undefined,m=computeOrderHealth(a['orders'],a['now_ms'],k,l),n=m?.['agingKnown']?m['overdue']:0x0,o=m?.['pending']??0x0,p=[];if(l)for(const M of a['machine_edges']??[]){const N=M?.['forward_count'],O=M?.['unguarded_forward_count'];l['has'](M['to'])&&typeof N==='number'&&N>0x0&&typeof O==='number'&&O>0x0&&p['push']('Settlement\x20transition\x20'+M['from']+'\x20→\x20'+M['to']+'\x20advances\x20with\x20NO\x20guard\x20on\x20'+O+'/'+N+'\x20forward(s)\x20—\x20deliverable\x20verification\x20is\x20not\x20enforced\x20on\x20this\x20money\x20exit\x20(static\x20graph\x20check).');}(a['arbitrations']??[])['some'](P=>P?.['found']&&P?.['paused'])&&p['push']('A\x20bound\x20arbitration\x20venue\x20is\x20PAUSED\x20—\x20dispute\x20recourse\x20cannot\x20progress\x20on\x20it.');m?.['agingKnown']&&m['settled']!=null&&m['observed']>=0x3&&m['settled']===0x0&&p['push']('No\x20order\x20has\x20ever\x20reached\x20a\x20stop\x20node\x20('+m['observed']+'\x20observed,\x200\x20settled)\x20—\x20workflow\x20completion\x20is\x20unproven.');const q=c['arbitrations']['length']>0x0,r=c['compensationFund'],s=r==null||r==='0',t=!c['found']?'unavailable':c['published']?c['paused']?'published\x20but\x20PAUSED':'published\x20and\x20active':'not\x20yet\x20published',u=!c['found']?'No\x20Service\x20object\x20available\x20to\x20describe.':c['description']+'\x20('+t+(c['salesCount']>0x0?',\x20'+c['salesCount']+'\x20sale\x20option(s)':'')+').',v=!d['found']?'Workflow\x20(Machine)\x20unavailable\x20—\x20cannot\x20describe\x20the\x20process.':d['nodeCount']>0x0?d['nodeCount']+'-node\x20workflow\x20('+(d['published']?'published':'draft')+(d['paused']?',\x20paused':'')+').'+(d['terminalNodeNames']['length']>0x0?d['terminalSource']==='topology'?'\x20Stop\x20nodes\x20(derived\x20from\x20workflow\x20edges):\x20'+d['terminalNodeNames']['join'](',\x20')+'.':'\x20Stop/refund\x20nodes\x20detected\x20(name\x20convention\x20only\x20—\x20no\x20edge\x20table\x20to\x20verify):\x20'+d['terminalNodeNames']['join'](',\x20')+'.':d['terminalSource']==='topology'?'\x20No\x20stop\x20node\x20in\x20the\x20workflow\x20graph.':'\x20No\x20explicit\x20stop\x20node\x20detected\x20from\x20names.'):'Workflow\x20node\x20details\x20unavailable\x20(node_count\x20not\x20resolved).',w=!g?'':d['reachabilityKnown']?h?'\x20Workflow\x20edges\x20verify\x20the\x20reversal\x20rail\x20is\x20reachable:\x20node(s)\x20'+d['refundReachable']['join'](',\x20')+'.':'\x20WARNING:\x20the\x20named\x20refund\x20node(s)\x20'+d['refundNodeNames']['join'](',\x20')+'\x20are\x20UNREACHABLE\x20from\x20the\x20workflow\x20entry\x20—\x20that\x20rail\x20cannot\x20fire.':'\x20Reversal\x20rail:\x20workflow\x20node(s)\x20'+d['refundNodeNames']['join'](',\x20')+'.',x=i?['A\x20refund\x20path\x20is\x20present.',w,f?'\x20Escrow\x20can\x20be\x20routed\x20back\x20to\x20the\x20payer\x20or\x20to\x20the\x20order\x20by\x20an\x20allocation\x20slot.':'']['filter'](Boolean)['join'](''):'NO\x20refund\x20path\x20detected\x20—\x20funds\x20may\x20be\x20unrecoverable\x20once\x20the\x20workflow\x20advances\x20to\x20completion.'+(j?w:''),y=q?c['arbitrations']['length']+'\x20arbitration\x20service(s)\x20bound\x20—\x20disputes\x20have\x20a\x20resolution\x20path.':'NO\x20arbitration\x20bound\x20—\x20disputes\x20have\x20no\x20neutral\x20resolution\x20path.',z=[];if(!i)z['push']('No\x20refund\x20path\x20—\x20escrowed\x20funds\x20may\x20be\x20unrecoverable.');j&&i&&z['push']('The\x20named\x20refund\x20node(s)\x20'+d['refundNodeNames']['join'](',\x20')+'\x20are\x20unreachable\x20from\x20the\x20workflow\x20entry\x20—\x20'+'that\x20rail\x20is\x20dead;\x20only\x20the\x20allocation\x20slot\x20can\x20still\x20return\x20funds.');if(!q)z['push']('No\x20arbitration\x20bound\x20—\x20no\x20dispute\x20recourse.');if(s)z['push']('Compensation\x20fund\x20is\x20empty\x20—\x20arbitration\x20indemnity\x20would\x20be\x20unenforceable.');n>0x0&&z['push'](n+'\x20pending\x20order(s)\x20exceed\x20the\x20'+k+'h\x20settlement\x20window'+(m?.['oldestPendingAgeDays']!=null?'\x20(oldest:\x20'+m['oldestPendingAgeDays']+'d)':'')+'\x20—\x20funds\x20held\x20in\x20escrow\x20with\x20no\x20settlement\x20progress.');z['push'](...p);const A=[];if(c['published']&&!c['paused'])A['push']('Service\x20is\x20published\x20and\x20active.');i&&A['push'](d['reachabilityKnown']&&h&&f?'Refund\x20path\x20statically\x20reachable\x20—\x20workflow\x20edges\x20reach\x20the\x20rail\x20and\x20an\x20order-routed\x20allocation\x20slot\x20exists\x20(static\x20graph\x20check\x20only;\x20leg\x20executability\x20is\x20audited\x20by\x20the\x20allocator\x20guard\x20lint,\x20not\x20here).':d['reachabilityKnown']&&h?'Refund\x20path\x20statically\x20reachable\x20via\x20workflow\x20edges\x20(no\x20order-routed\x20allocation\x20slot\x20found).':'Refund\x20path\x20present.');if(q)A['push']('Arbitration\x20bound\x20(neutral\x20dispute\x20resolution).');if(!s)A['push']('Compensation\x20fund\x20funded\x20('+r+'\x20raw\x20units)\x20—\x20indemnity\x20enforceable.');if(c['hasBuyGuard'])A['push']('Buy\x20guard\x20present\x20(purchase\x20is\x20validated\x20by\x20on-chain\x20rules).');const B=[];if(!i)B['push']('Refund\x20path');if(!q)B['push']('Arbitration');if(s)B['push']('Compensation\x20fund');let C='low';if(!i&&!q)C='critical';else{if(!i||!q)C='high';else s&&(C='medium');}if(n>=0x3&&(C==='low'||C==='medium'))C='high';else{if(n>=0x1&&C==='low')C='medium';}if(p['length']>0x0&&(C==='low'||C==='medium'))C='medium';const D=[];if(c['found']&&c['paused'])D['push']('Service\x20is\x20currently\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.\x20This\x20is\x20a\x20merchant-side\x20availability\x20state,\x20not\x20a\x20trust\x20signal:\x20do\x20not\x20purchase\x20while\x20paused.');else c['found']&&!c['published']&&D['push']('Service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible\x20until\x20the\x20merchant\x20publishes\x20it.\x20This\x20is\x20a\x20launch\x20state,\x20not\x20a\x20trust\x20signal.');c['found']&&!c['hasUm']&&D['push']('No\x20contact\x20channel\x20(um)\x20configured\x20—\x20Messenger\x20pre-order\x20negotiation\x20with\x20the\x20merchant\x20is\x20unavailable.');o>0x0&&n===0x0&&D['push'](o+'\x20order(s)\x20in\x20the\x20recent\x20window\x20are\x20pending\x20(not\x20yet\x20settled).');const E=[];E['push']('Escrowed\x20settlement:\x20funds\x20release\x20only\x20when\x20the\x20workflow\x20advances\x20—\x20the\x20merchant\x20is\x20incentivized\x20to\x20deliver.'),E['push']('On-chain\x20reputation\x20(Registrar\x20like/dislike\x20+\x20dispute\x20rate)\x20is\x20a\x20public\x20trust\x20signal\x20for\x20future\x20buyers.');if(c['rewardsCount']>0x0)E['push'](c['rewardsCount']+'\x20reward(s)\x20configured\x20—\x20repeat-buyer\x20incentives\x20lower\x20acquisition\x20cost.');const F=[];F['push']('Escrow\x20safety:\x20money\x20is\x20locked\x20on-chain\x20until\x20completion,\x20not\x20held\x20by\x20the\x20merchant.');if(i)F['push']('Refund\x20path\x20exists\x20—\x20a\x20verified\x20refund\x20returns\x20the\x20escrow.');if(q)F['push']('Arbitration\x20recourse\x20—\x20a\x20neutral\x20third\x20party\x20can\x20rule\x20on\x20disputes.');if(!s)F['push']('Compensation\x20fund\x20backs\x20arbitration\x20indemnity.');const G=[];G['push']('Merchant\x20wants\x20settlement\x20released\x20early;\x20user\x20wants\x20to\x20verify\x20the\x20deliverable\x20first\x20—\x20the\x20workflow\x27s\x20confirm\x20step\x20is\x20the\x20contention\x20point.'),G['push']('Merchant\x20controls\x20the\x20Machine/Guards;\x20user\x20is\x20limited\x20to\x20the\x20confirm/refund\x20forwards\x20the\x20merchant\x20designed.');if(!q)G['push']('No\x20arbitration:\x20a\x20deadlock\x20has\x20no\x20neutral\x20tie-breaker.');const H=[];H['push']('Escrow\x20alignment:\x20funds\x20stay\x20locked\x20until\x20both\x20sides\x20advance\x20the\x20workflow\x20—\x20neither\x20can\x20unilaterally\x20take\x20the\x20money.');if(i)H['push']('Allocation\x20alignment:\x20a\x20refund\x20slot\x20routes\x20the\x20escrow\x20back\x20to\x20the\x20buyer\x20on\x20the\x20refund\x20path.');if(q)H['push']('Arbitration\x20alignment:\x20an\x20independent\x20Permission\x20+\x20public\x20voters\x20provide\x20a\x20neutral\x20dispute\x20authority.');H['push']('Reputation\x20alignment:\x20Registrar\x20like/dislike\x20is\x20framework-enforced\x20and\x20unforgeable\x20—\x20both\x20sides\x20are\x20accountable\x20to\x20public\x20history.');const I=C['toUpperCase'](),J=a['order_amount']!=null?'\x20'+a['order_amount']+'\x20raw\x20units\x20are\x20escrowed.':'',K=c['found']&&c['paused']?'\x20NOTE:\x20the\x20service\x20is\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.':c['found']&&!c['published']?'\x20NOTE:\x20the\x20service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible.':'',L=!c['found']?'No\x20Service\x20object\x20found\x20—\x20reverse\x20mapping\x20produced\x20a\x20minimal\x20report.':'\x22'+c['name']+'\x22\x20is\x20'+t+'.'+J+'\x20'+('Risk\x20level:\x20'+I+'.\x20'+(i?'Refund\x20path\x20present.':'NO\x20refund\x20path.')+'\x20')+(''+(q?'Arbitration\x20bound.':'NO\x20arbitration.'))+(K+'\x20')+'This\x20report\x20is\x20generated\x20deterministically\x20from\x20on-chain\x20facts\x20—\x20the\x20buyer\x20decides.';return{'summary':L,'merchantProfile':{'serviceDescription':u,'workflowDescription':v,'refundPolicy':x,'arbitrationPolicy':y},'userRiskAssessment':{'riskLevel':C,'keyRisks':z,'protections':A,'missingProtections':B,'notices':D},'gameTheoryAnalysis':{'merchantIncentives':E,'userIncentives':F,'potentialConflicts':G,'wowAlignments':H},'orderHealth':m};}export function classifyObjectType(a){return detectType(a);}export function extractObjectFields(a){if(!a||typeof a!=='object')return{};const b=a['data']??a;if(!b||typeof b!=='object')return{};return{...b};}
|