@wowok/agent-mcp 2.7.2 → 2.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/runtime.js +1 -1
- package/dist/customer/account-events.d.ts +32 -0
- package/dist/customer/account-events.js +1 -0
- package/dist/customer/customer-advice.d.ts +1 -0
- package/dist/customer/customer-advice.js +1 -1
- package/dist/customer/info-puzzle.js +1 -1
- package/dist/customer/order-strategy.d.ts +1 -1
- package/dist/customer/reminder-system.d.ts +2 -0
- package/dist/customer/reminder-system.js +1 -1
- package/dist/customer/risk-assessment.d.ts +1 -0
- package/dist/customer/risk-assessment.js +1 -1
- package/dist/customer/types.d.ts +2 -0
- package/dist/evaluation/builtins/arbitration-score.d.ts +41 -0
- package/dist/evaluation/builtins/arbitration-score.js +1 -0
- package/dist/evaluation/builtins/index.d.ts +1 -0
- package/dist/evaluation/builtins/index.js +1 -1
- package/dist/evaluation/category-match-rules.d.ts +30 -0
- package/dist/evaluation/category-match-rules.js +1 -0
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/extract.js +1 -1
- package/dist/evaluation/index.d.ts +1 -0
- package/dist/evaluation/index.js +1 -1
- package/dist/evaluation/location-match.d.ts +42 -0
- package/dist/evaluation/location-match.js +1 -0
- package/dist/evaluation/path-reasoning.d.ts +35 -0
- package/dist/evaluation/path-reasoning.js +1 -0
- package/dist/evaluation/region.d.ts +6 -0
- package/dist/evaluation/region.js +1 -1
- package/dist/evaluation/types.d.ts +17 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/experience/user-profile.d.ts +1 -1
- package/dist/extensions/index.d.ts +6 -0
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-layers.d.ts +75 -0
- package/dist/extensions/industry-layers.js +1 -0
- package/dist/extensions/industry-pack.d.ts +105 -0
- package/dist/extensions/industry-pack.js +1 -0
- package/dist/extensions/metric-registry.js +1 -1
- package/dist/extensions/mode-evaluator.d.ts +1 -1
- package/dist/extensions/registry.d.ts +1 -0
- package/dist/extensions/registry.js +1 -1
- package/dist/graph/base.d.ts +8 -0
- package/dist/graph/base.js +1 -0
- package/dist/harness/index.d.ts +1 -0
- package/dist/harness/index.js +1 -1
- package/dist/harness/plan.d.ts +2 -0
- package/dist/harness/plan.js +1 -1
- package/dist/harness/recover.d.ts +1 -1
- package/dist/harness/types.d.ts +2 -3
- package/dist/index.js +1 -1
- package/dist/knowledge/allocation-confirm.js +1 -1
- package/dist/knowledge/anti-cheat.d.ts +37 -0
- package/dist/knowledge/anti-cheat.js +1 -0
- package/dist/knowledge/arb-confirm.d.ts +28 -0
- package/dist/knowledge/arb-confirm.js +1 -0
- package/dist/knowledge/arb-translation.d.ts +48 -0
- package/dist/knowledge/arb-translation.js +1 -0
- package/dist/knowledge/arbitration-context.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/bridge-confirm.d.ts +26 -0
- package/dist/knowledge/bridge-confirm.js +1 -0
- package/dist/knowledge/bridge-translation.d.ts +37 -0
- package/dist/knowledge/bridge-translation.js +1 -0
- package/dist/knowledge/contact-confirm.d.ts +27 -0
- package/dist/knowledge/contact-confirm.js +1 -0
- package/dist/knowledge/contact-translation.d.ts +39 -0
- package/dist/knowledge/contact-translation.js +1 -0
- package/dist/knowledge/demand-confirm.js +1 -1
- package/dist/knowledge/demand-context.d.ts +17 -0
- package/dist/knowledge/demand-context.js +1 -0
- package/dist/knowledge/demand-ledger.d.ts +26 -0
- package/dist/knowledge/demand-ledger.js +1 -0
- package/dist/knowledge/demand-puzzle.d.ts +29 -0
- package/dist/knowledge/demand-puzzle.js +1 -0
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/demand-templates.d.ts +12 -0
- package/dist/knowledge/demand-templates.js +1 -0
- package/dist/knowledge/demand-translation.js +1 -1
- package/dist/knowledge/deployment-scanner.js +1 -1
- package/dist/knowledge/evidence-review.d.ts +12 -0
- package/dist/knowledge/evidence-review.js +1 -0
- package/dist/knowledge/examples-scanner-cli.js +1 -1
- package/dist/knowledge/examples-scanner.js +1 -1
- package/dist/knowledge/flywheel-loop.d.ts +0 -1
- package/dist/knowledge/flywheel-loop.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-migration.d.ts +1 -1
- package/dist/knowledge/index.d.ts +71 -3
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/machine-render.js +1 -1
- package/dist/knowledge/market-metrics.d.ts +12 -0
- package/dist/knowledge/market-metrics.js +1 -0
- package/dist/knowledge/market-operations.d.ts +46 -0
- package/dist/knowledge/market-operations.js +1 -0
- package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
- package/dist/knowledge/mcp-schema-audit.d.ts +22 -22
- package/dist/knowledge/mcp-schema-audit.js +1 -1
- package/dist/knowledge/onchain-constants.d.ts +2 -2
- package/dist/knowledge/onchain-constants.js +1 -1
- package/dist/knowledge/payment-confirm.d.ts +26 -0
- package/dist/knowledge/payment-confirm.js +1 -0
- package/dist/knowledge/payment-risk.js +1 -1
- package/dist/knowledge/payment-translation.d.ts +37 -0
- package/dist/knowledge/payment-translation.js +1 -0
- package/dist/knowledge/permission-context.d.ts +11 -0
- package/dist/knowledge/permission-context.js +1 -1
- package/dist/knowledge/permission-ledger.d.ts +11 -0
- package/dist/knowledge/permission-ledger.js +1 -1
- package/dist/knowledge/personal-confirm.d.ts +29 -0
- package/dist/knowledge/personal-confirm.js +1 -0
- package/dist/knowledge/personal-risk.js +1 -1
- package/dist/knowledge/personal-translation.d.ts +37 -0
- package/dist/knowledge/personal-translation.js +1 -0
- package/dist/knowledge/process-model.d.ts +1 -11
- package/dist/knowledge/process-model.js +1 -1
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/progress-templates.js +1 -1
- package/dist/knowledge/progress-translation.js +1 -1
- package/dist/knowledge/proof-context.d.ts +17 -0
- package/dist/knowledge/proof-context.js +1 -0
- package/dist/knowledge/proof-ledger.d.ts +34 -0
- package/dist/knowledge/proof-ledger.js +1 -0
- package/dist/knowledge/proof-puzzle.d.ts +35 -0
- package/dist/knowledge/proof-puzzle.js +1 -0
- package/dist/knowledge/proof-templates.d.ts +22 -0
- package/dist/knowledge/proof-templates.js +1 -0
- package/dist/knowledge/registrar-confirm.d.ts +26 -0
- package/dist/knowledge/registrar-confirm.js +1 -0
- package/dist/knowledge/registrar-risk.js +1 -1
- package/dist/knowledge/registrar-translation.d.ts +37 -0
- package/dist/knowledge/registrar-translation.js +1 -0
- package/dist/knowledge/repository-context.d.ts +12 -0
- package/dist/knowledge/repository-context.js +1 -0
- package/dist/knowledge/repository-ledger.d.ts +25 -0
- package/dist/knowledge/repository-ledger.js +1 -0
- package/dist/knowledge/repository-puzzle.d.ts +30 -0
- package/dist/knowledge/repository-puzzle.js +1 -0
- package/dist/knowledge/repository-templates.d.ts +14 -0
- package/dist/knowledge/repository-templates.js +1 -0
- package/dist/knowledge/resource-confirm.d.ts +25 -0
- package/dist/knowledge/resource-confirm.js +1 -0
- package/dist/knowledge/resource-translation.d.ts +37 -0
- package/dist/knowledge/resource-translation.js +1 -0
- package/dist/knowledge/reward-context.d.ts +2 -2
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-translation.js +1 -1
- package/dist/knowledge/safety-rules.d.ts +1 -0
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/service-risk.d.ts +1 -1
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/treasury-context.d.ts +1 -1
- package/dist/knowledge/treasury-context.js +1 -1
- package/dist/knowledge/treasury-ledger.js +1 -1
- package/dist/knowledge/treasury-risk.js +1 -1
- package/dist/knowledge/universal-template.d.ts +22 -0
- package/dist/knowledge/universal-template.js +1 -0
- package/dist/knowledge/util-confirm.d.ts +24 -0
- package/dist/knowledge/util-confirm.js +1 -0
- package/dist/knowledge/util-risk.js +1 -1
- package/dist/knowledge/util-translation.d.ts +39 -0
- package/dist/knowledge/util-translation.js +1 -0
- package/dist/knowledge/workflow-guidance.d.ts +180 -0
- package/dist/knowledge/workflow-guidance.js +1 -0
- package/dist/participation/employee-kpi.d.ts +25 -0
- package/dist/participation/employee-kpi.js +1 -0
- package/dist/participation/employee-store.d.ts +16 -0
- package/dist/participation/employee-store.js +1 -0
- package/dist/participation/index.d.ts +2 -0
- package/dist/participation/index.js +1 -0
- package/dist/persona/defaults.js +1 -1
- package/dist/persona/index.d.ts +9 -2
- package/dist/persona/index.js +1 -1
- package/dist/persona/local-region.d.ts +20 -0
- package/dist/persona/local-region.js +1 -0
- package/dist/persona/model.js +1 -1
- package/dist/persona/overrides.d.ts +10 -0
- package/dist/persona/overrides.js +1 -0
- package/dist/persona/pack-personae.d.ts +11 -0
- package/dist/persona/pack-personae.js +1 -0
- package/dist/persona/strategy-intent.d.ts +20 -0
- package/dist/persona/strategy-intent.js +1 -0
- package/dist/persona/types.d.ts +3 -1
- package/dist/project/business-puzzle.d.ts +1 -1
- package/dist/project/business-puzzle.js +1 -1
- package/dist/project/deployment-doc.js +1 -1
- package/dist/project/edit-planner.js +1 -1
- package/dist/project/evaluation.d.ts +37 -1
- package/dist/project/evaluation.js +1 -1
- package/dist/project/graph-builder.d.ts +2 -2
- package/dist/project/graph-builder.js +1 -1
- package/dist/project/graph.d.ts +3 -6
- package/dist/project/handlers.d.ts +33 -2
- package/dist/project/handlers.js +1 -1
- package/dist/project/index.d.ts +1 -0
- package/dist/project/index.js +1 -1
- package/dist/project/merchant-guide.d.ts +19 -0
- package/dist/project/merchant-guide.js +1 -1
- package/dist/project/mode-actions.js +1 -1
- package/dist/project/rollback-policy.js +1 -1
- package/dist/project/semantic-assembler.d.ts +2 -2
- package/dist/project/semantic-assembler.js +1 -1
- package/dist/project/semantic-graph.d.ts +3 -5
- package/dist/project/workflow-design-assessment.d.ts +24 -0
- package/dist/project/workflow-design-assessment.js +1 -0
- package/dist/safety/confirm-gate.d.ts +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/allocation.d.ts +186 -1385
- package/dist/schema/call/arbitration.d.ts +272 -1871
- package/dist/schema/call/base.d.ts +1831 -9076
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +911 -3171
- package/dist/schema/call/contact.d.ts +135 -931
- package/dist/schema/call/demand.d.ts +164 -1194
- package/dist/schema/call/guard.d.ts +298 -1140
- package/dist/schema/call/guard.js +1 -1
- package/dist/schema/call/machine.d.ts +459 -5403
- package/dist/schema/call/machine.js +1 -1
- package/dist/schema/call/order.d.ts +137 -844
- package/dist/schema/call/payment.d.ts +74 -561
- package/dist/schema/call/permission.d.ts +335 -2791
- package/dist/schema/call/personal.d.ts +227 -1814
- package/dist/schema/call/progress.d.ts +140 -843
- package/dist/schema/call/proof.d.ts +42 -258
- package/dist/schema/call/repository.d.ts +324 -2222
- package/dist/schema/call/reward.d.ts +153 -1183
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +376 -3431
- package/dist/schema/call/treasury.d.ts +252 -2158
- package/dist/schema/common/index.d.ts +222 -697
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +18 -161
- package/dist/schema/employee/index.d.ts +99 -0
- package/dist/schema/employee/index.js +1 -0
- package/dist/schema/evaluation/index.d.ts +1035 -3918
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +132 -0
- package/dist/schema/industry-pack/index.js +1 -0
- package/dist/schema/intent-radar/index.d.ts +92 -245
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/local/index.d.ts +2045 -18080
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/local/wip.d.ts +61 -651
- package/dist/schema/local/wip.js +1 -1
- package/dist/schema/messenger/index.d.ts +949 -5557
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +3168 -26468
- package/dist/schema/operations.js +1 -1
- package/dist/schema/permission/index.d.ts +121 -0
- package/dist/schema/permission/index.js +1 -0
- package/dist/schema/persona/index.d.ts +469 -1820
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/project/index.d.ts +1023 -8450
- package/dist/schema/project/index.js +1 -1
- package/dist/schema/query/index.d.ts +12121 -75556
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +35 -98
- package/dist/schema/schema-query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/task-status.d.ts +26 -132
- package/dist/schema/trust/index.d.ts +194 -1290
- package/dist/schema/utils/guard-parser.js +1 -1
- package/dist/schema/utils/node-parser.js +1 -1
- package/dist/schema/utils/skills-recommendation.d.ts +1 -0
- package/dist/schema/utils/skills-recommendation.js +1 -1
- package/dist/schema/workflow/index.d.ts +161 -0
- package/dist/schema/workflow/index.js +1 -0
- package/dist/schema/workspace/index.d.ts +69 -0
- package/dist/schema/workspace/index.js +1 -0
- package/dist/{schema-query → schema-query-impl}/index.js +1 -1
- package/dist/schemas/account_operation.output.json +3147 -1655
- package/dist/schemas/account_operation.schema.json +225 -218
- package/dist/schemas/bridge_operation.output.json +1168 -653
- package/dist/schemas/bridge_operation.schema.json +736 -504
- package/dist/schemas/config_operation.output.json +185 -179
- package/dist/schemas/config_operation.schema.json +21 -26
- package/dist/schemas/employee_operation.output.json +207 -0
- package/dist/schemas/employee_operation.schema.json +176 -0
- package/dist/schemas/evaluation_operation.output.json +2268 -601
- package/dist/schemas/evaluation_operation.schema.json +2919 -787
- package/dist/schemas/guard2file.output.json +58 -64
- package/dist/schemas/guard2file.schema.json +79 -81
- package/dist/schemas/index.json +41 -11
- package/dist/schemas/industry_pack_operation.output.json +594 -0
- package/dist/schemas/industry_pack_operation.schema.json +55 -0
- package/dist/schemas/intent_radar.output.json +275 -203
- package/dist/schemas/intent_radar.schema.json +124 -126
- package/dist/schemas/local_info_operation.output.json +1174 -660
- package/dist/schemas/local_info_operation.schema.json +119 -125
- package/dist/schemas/local_mark_operation.output.json +1239 -692
- package/dist/schemas/local_mark_operation.schema.json +91 -96
- package/dist/schemas/machineNode2file.output.json +63 -69
- package/dist/schemas/machineNode2file.schema.json +79 -81
- package/dist/schemas/messenger_operation.output.json +2722 -1531
- package/dist/schemas/messenger_operation.schema.json +1482 -1264
- package/dist/schemas/onchain_events.output.json +2590 -978
- package/dist/schemas/onchain_events.schema.json +117 -99
- package/dist/schemas/onchain_operations.output.json +3957 -2312
- package/dist/schemas/onchain_operations.schema.json +20799 -9285
- package/dist/schemas/onchain_operations_allocation.schema.json +171 -107
- package/dist/schemas/onchain_operations_arbitration.schema.json +233 -146
- package/dist/schemas/onchain_operations_contact.schema.json +129 -90
- package/dist/schemas/onchain_operations_demand.schema.json +170 -112
- package/dist/schemas/onchain_operations_gen_passport.schema.json +61 -646
- package/dist/schemas/onchain_operations_gen_proof.schema.json +40 -172
- package/dist/schemas/onchain_operations_guard.schema.json +3765 -294
- package/dist/schemas/onchain_operations_machine.schema.json +536 -163
- package/dist/schemas/onchain_operations_order.schema.json +126 -96
- package/dist/schemas/onchain_operations_payment.schema.json +82 -67
- package/dist/schemas/onchain_operations_permission.schema.json +331 -93
- package/dist/schemas/onchain_operations_personal.schema.json +636 -96
- package/dist/schemas/onchain_operations_progress.schema.json +125 -92
- package/dist/schemas/onchain_operations_proof.schema.json +76 -69
- package/dist/schemas/onchain_operations_repository.schema.json +636 -249
- package/dist/schemas/onchain_operations_reward.schema.json +218 -108
- package/dist/schemas/onchain_operations_service.schema.json +678 -220
- package/dist/schemas/onchain_operations_treasury.schema.json +401 -135
- package/dist/schemas/onchain_table_data.output.json +6833 -2432
- package/dist/schemas/onchain_table_data.schema.json +684 -417
- package/dist/schemas/permission_operation.output.json +173 -0
- package/dist/schemas/permission_operation.schema.json +39 -0
- package/dist/schemas/persona_operation.output.json +1568 -268
- package/dist/schemas/persona_operation.schema.json +346 -205
- package/dist/schemas/project_operation.output.json +6922 -5132
- package/dist/schemas/project_operation.schema.json +1050 -1020
- package/dist/schemas/query_task_status.output.json +195 -99
- package/dist/schemas/query_task_status.schema.json +12 -18
- package/dist/schemas/query_toolkit.output.json +18862 -14561
- package/dist/schemas/query_toolkit.schema.json +614 -522
- package/dist/schemas/schema_query.output.json +127 -129
- package/dist/schemas/schema_query.schema.json +64 -69
- package/dist/schemas/trust_score.output.json +678 -587
- package/dist/schemas/trust_score.schema.json +289 -277
- package/dist/schemas/wip_file.output.json +116 -124
- package/dist/schemas/wip_file.schema.json +142 -143
- package/dist/schemas/workflow_operation.output.json +164 -0
- package/dist/schemas/workflow_operation.schema.json +116 -0
- package/dist/schemas/workspace_operation.output.json +277 -0
- package/dist/schemas/workspace_operation.schema.json +45 -0
- package/dist/schemas/wowok_buildin_info.output.json +1682 -844
- package/dist/schemas/wowok_buildin_info.schema.json +576 -526
- package/dist/tools/handlers/bridge.d.ts +8 -1
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/employee.d.ts +2 -0
- package/dist/tools/handlers/employee.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/file-export.js +1 -1
- package/dist/tools/handlers/industry-pack.d.ts +2 -0
- package/dist/tools/handlers/industry-pack.js +1 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/permission.d.ts +2 -0
- package/dist/tools/handlers/permission.js +1 -0
- package/dist/tools/handlers/persona.js +1 -1
- package/dist/tools/handlers/project.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/trust.js +1 -1
- package/dist/tools/handlers/wip.js +1 -1
- package/dist/tools/handlers/workflow.d.ts +2 -0
- package/dist/tools/handlers/workflow.js +1 -0
- package/dist/tools/handlers/workspace.d.ts +4 -0
- package/dist/tools/handlers/workspace.js +1 -0
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/rules-hook.d.ts +1 -1
- package/dist/tools/rules-hook.js +1 -1
- package/dist/tools/shared.d.ts +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/types.d.ts +2 -1
- package/package.json +4 -5
- package/dist/knowledge/arbitration-trust.d.ts +0 -24
- package/dist/knowledge/arbitration-trust.js +0 -1
- package/dist/schema/call/bridge-handler.d.ts +0 -8
- package/dist/schema/call/bridge-handler.js +0 -1
- package/dist/schema/sync-layer4.d.ts +0 -21
- package/dist/schema/sync-layer4.js +0 -1
- /package/dist/{schema-query → schema-query-impl}/index.d.ts +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const REGISTRAR_TRANSLATION_VERSION = "1.0.0";
|
|
2
|
+
export interface SemanticToRegistrarSchemaRule {
|
|
3
|
+
id: string;
|
|
4
|
+
pattern_name: string;
|
|
5
|
+
semantic_intent: string;
|
|
6
|
+
match_keywords: string[];
|
|
7
|
+
required_fields: string[];
|
|
8
|
+
optional_fields: string[];
|
|
9
|
+
example: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export declare const SEMANTIC_TO_REGISTRAR_SCHEMA_RULES: SemanticToRegistrarSchemaRule[];
|
|
12
|
+
export interface RegistrarFieldTranslation {
|
|
13
|
+
field_name: string;
|
|
14
|
+
value_type: string;
|
|
15
|
+
semantic: string;
|
|
16
|
+
format_example: string;
|
|
17
|
+
validation_rules: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare const REGISTRAR_FIELD_TRANSLATIONS: RegistrarFieldTranslation[];
|
|
20
|
+
export interface RegistrarConstraintRule {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
related_field: string;
|
|
25
|
+
}
|
|
26
|
+
export declare const REGISTRAR_CONSTRAINT_RULES: RegistrarConstraintRule[];
|
|
27
|
+
export interface RegistrarExplainInput {
|
|
28
|
+
typed_value_first_byte?: number;
|
|
29
|
+
record_length?: number;
|
|
30
|
+
info?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface RegistrarExplanation {
|
|
33
|
+
summary: string;
|
|
34
|
+
vote_flags: string;
|
|
35
|
+
warnings: string[];
|
|
36
|
+
}
|
|
37
|
+
export declare function explainRegistrar(input: RegistrarExplainInput): RegistrarExplanation;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MAX_ADDRESS_COUNT,MAX_RECORD_LENGTH}from'@wowok/wowok';export const REGISTRAR_TRANSLATION_VERSION='1.0.0';export const SEMANTIC_TO_REGISTRAR_SCHEMA_RULES=[{'id':'P-REGISTRAR-01','pattern_name':'Register\x20entity','semantic_intent':'Register\x20a\x20user\x20Entity\x20record\x20+\x20Resource\x20mark\x20(idempotent).','match_keywords':['register\x20entity','register\x20user','affiliate'],'required_fields':[],'optional_fields':['referrer'],'example':{'referrer':'0x...'}},{'id':'P-REGISTRAR-02','pattern_name':'Vote\x20(like/dislike/favor)','semantic_intent':'Cast\x20a\x20like/dislike/favor\x20vote\x20via\x20the\x20Vote.info\x20bitmask.','match_keywords':['like','dislike','favor','vote'],'required_fields':['who'],'optional_fields':['info'],'example':{'who':'0x...','info':0x2}}];export const REGISTRAR_FIELD_TRANSLATIONS=[{'field_name':'table','value_type':'ParentTable<address,\x20Votes\x20|\x20AddressInfo>','semantic':'Registrar:\x20who\x20→\x20Votes;\x20Entity:\x20who\x20→\x20AddressInfo.','format_example':'{0x...:\x20Votes}','validation_rules':['bounded\x20by\x20MAX_ADDRESS_COUNT\x20('+MAX_ADDRESS_COUNT+')']},{'field_name':'typed_value','value_type':'vector<u8>','semantic':'Record\x20value;\x20first\x20byte\x20encodes\x20ValueType.','format_example':'0x01...','validation_rules':['ERecordTypeEmpty\x20(3)\x20when\x20empty','≤\x20MAX_RECORD_LENGTH\x20('+MAX_RECORD_LENGTH+')']},{'field_name':'info','value_type':'u8','semantic':'Vote\x20bitmask:\x20LIKE=0x02,\x20DISLIKE=0x04,\x20FAVOR=0x08;\x20bits\x204-7\x20reserved.','format_example':'0x02\x20(like)','validation_rules':['mask\x20to\x20bits\x200-3\x20today']},{'field_name':'referrer','value_type':'Option<address>','semantic':'Self-attested\x20referrer\x20(unverified).','format_example':'0x...referrer...','validation_rules':['treat\x20as\x20hint,\x20not\x20trust\x20signal']}];export const REGISTRAR_CONSTRAINT_RULES=[{'id':'REGISTRAR_C_01','name':'record\x20type','description':'typed_value\x20non-empty;\x20first\x20byte\x20is\x20ValueType.','related_field':'typed_value'},{'id':'REGISTRAR_C_02','name':'record\x20length','description':'typed_value\x20≤\x20MAX_RECORD_LENGTH\x20('+MAX_RECORD_LENGTH+').','related_field':'typed_value'},{'id':'REGISTRAR_C_03','name':'address\x20cap','description':'Entity/Registrar\x20tables\x20bounded\x20by\x20MAX_ADDRESS_COUNT\x20('+MAX_ADDRESS_COUNT+').','related_field':'table'},{'id':'REGISTRAR_C_04','name':'vote\x20bitmask','description':'bits\x204-7\x20reserved;\x20mask\x20to\x200-3.','related_field':'info'}];export function explainRegistrar(a){const b=[],c=[];if(a['info']!==undefined){if((a['info']&0x2)===0x2)c['push']('like');if((a['info']&0x4)===0x4)c['push']('dislike');if((a['info']&0x8)===0x8)c['push']('favor');if((a['info']&0xf0)!==0x0)b['push']('reserved\x20bits\x204-7\x20set\x20(forward-incompatible)');}return a['record_length']!==undefined&&a['record_length']>MAX_RECORD_LENGTH&&b['push']('record\x20length\x20'+a['record_length']+'\x20>\x20'+MAX_RECORD_LENGTH),{'summary':'Registrar\x20record.\x20Vote\x20flags:\x20'+(c['join'](',')||'none')+'.','vote_flags':c['join'](',')||'none','warnings':b};}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type RepositoryIdFromMode } from "./repository-ledger.js";
|
|
2
|
+
export declare const REPOSITORY_CONTEXT_VERSION = "1.0.0";
|
|
3
|
+
export interface RepositoryContextBundle {
|
|
4
|
+
idFromMode?: RepositoryIdFromMode;
|
|
5
|
+
summary: string;
|
|
6
|
+
}
|
|
7
|
+
export interface BuildRepositoryContextInput {
|
|
8
|
+
id_from?: number;
|
|
9
|
+
name?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function buildRepositoryContext(input: BuildRepositoryContextInput): RepositoryContextBundle;
|
|
12
|
+
export declare function getRepositoryContextSummary(ctx: RepositoryContextBundle): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getRepositoryIdFrom}from'./repository-ledger.js';export const REPOSITORY_CONTEXT_VERSION='1.0.0';export function buildRepositoryContext(a){const b=a['id_from']!==undefined?getRepositoryIdFrom(a['id_from']):undefined,c=[];return a['name']&&c['push']('policy\x20\x22'+a['name']+'\x22'),b?c['push']('id_from='+b['mode']+'\x20('+b['semantic']+')'):c['push']('id_from\x20not\x20classified'),{'idFromMode':b?.['mode'],'summary':c['join']('\x20·\x20')};}export function getRepositoryContextSummary(a){return a['summary'];}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const REPOSITORY_LEDGER_VERSION = "1.0.0";
|
|
2
|
+
export type RepositoryIdFromMode = "none" | "clock" | "signer";
|
|
3
|
+
export interface RepositoryIdFromEntry {
|
|
4
|
+
value: number;
|
|
5
|
+
mode: RepositoryIdFromMode;
|
|
6
|
+
semantic: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const REPOSITORY_ID_FROM: RepositoryIdFromEntry[];
|
|
9
|
+
export interface RepositoryFieldEntry {
|
|
10
|
+
field: string;
|
|
11
|
+
value_type: string;
|
|
12
|
+
semantic: string;
|
|
13
|
+
required: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const REPOSITORY_POLICY_FIELDS: RepositoryFieldEntry[];
|
|
16
|
+
export interface RepositoryErrorEntry {
|
|
17
|
+
code: string;
|
|
18
|
+
value: number;
|
|
19
|
+
description: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const REPOSITORY_ERROR_CODES: RepositoryErrorEntry[];
|
|
22
|
+
export declare function getRepositoryIdFrom(value: number): RepositoryIdFromEntry | undefined;
|
|
23
|
+
export declare function getRepositoryErrorByCode(code: string): RepositoryErrorEntry | undefined;
|
|
24
|
+
export declare function getRepositoryErrorByValue(value: number): RepositoryErrorEntry | undefined;
|
|
25
|
+
export declare function getRepositoryErrorsCount(): number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const REPOSITORY_LEDGER_VERSION='1.0.0';export const REPOSITORY_ID_FROM=[{'value':0x0,'mode':'none','semantic':'No\x20auto-id\x20—\x20caller\x20supplies\x20the\x20id\x20(write_guard\x20required,\x20E_POLICY_WRITE_GUARD_REQUIRED).'},{'value':0x1,'mode':'clock','semantic':'Id\x20is\x20auto-generated\x20from\x20clock\x20(timestamp-derived).'},{'value':0x2,'mode':'signer','semantic':'Id\x20is\x20auto-generated\x20from\x20the\x20tx\x20signer\x20address.'}];export const REPOSITORY_POLICY_FIELDS=[{'field':'name','value_type':'string','semantic':'Policy\x20name\x20(unique\x20key\x20within\x20the\x20repository).','required':!![]},{'field':'description','value_type':'string','semantic':'Policy\x20description\x20(≤\x20MAX_POLICY_DESCRIPTION_LEN\x20500\x20bytes).','required':!![]},{'field':'write_guard','value_type':'vector<PolicyGuard>','semantic':'Guards\x20that\x20must\x20pass\x20to\x20write\x20a\x20record\x20(≤\x20MAX_POLICY_GUARD_COUNT\x2010).','required':![]},{'field':'quote_guard','value_type':'Option<address>','semantic':'Guard\x20that\x20must\x20pass\x20to\x20read/quote\x20a\x20record.','required':![]},{'field':'id_from','value_type':'u8','semantic':'Id\x20derivation\x20mode\x20(0=none,\x201=clock,\x202=signer).','required':!![]},{'field':'value_type','value_type':'u8','semantic':'Data\x20value\x20type\x20(VALUE_TYPE).','required':!![]}];export const REPOSITORY_ERROR_CODES=[{'code':'E_POLICY_DESCRIPTION_EXCEEDED','value':0x1,'description':'Policy\x20description\x20>\x20MAX_POLICY_DESCRIPTION_LEN\x20(500).'},{'code':'E_POLICY_GUARD_COUNT_EXCEEDED','value':0x2,'description':'write_guard\x20count\x20>\x20MAX_POLICY_GUARD_COUNT\x20(10).'},{'code':'E_POLICY_COUNT_EXCEEDED','value':0x3,'description':'policy\x20count\x20>\x20MAX_POLICY_COUNT\x20(50).'},{'code':'E_DATA_EXCEEDED','value':0x4,'description':'data\x20size\x20>\x20MAX_DATA_SIZE\x20(40960\x20bytes).'},{'code':'E_ID_COUNT_EXCEEDED','value':0x5,'description':'id\x20count\x20>\x20MAX_ID_COUNT_ONCE\x20(100).'},{'code':'E_QUANTITIES_NOT_EQUAL','value':0x6,'description':'ids\x20and\x20data\x20vector\x20lengths\x20mismatch.'},{'code':'E_POLICY_NOT_FOUND','value':0x7,'description':'Referenced\x20policy\x20name\x20not\x20found.'},{'code':'E_POLICY_ID_FROM_NONE','value':0x8,'description':'Policy\x20id_from\x20is\x20None\x20but\x20caller\x20supplied\x20an\x20id.'},{'code':'E_NEED_PASSPORT','value':0x9,'description':'Operation\x20requires\x20a\x20passport\x20(usage\x20guard).'},{'code':'E_DATA_TYPE_NOT_MATCH','value':0xa,'description':'Data\x20value\x20type\x20does\x20not\x20match\x20policy\x20value_type.'},{'code':'E_GUARD_SPECIFIED_ID_FROM_SUBMISSION','value':0xb,'description':'Guard-specified\x20id_from_submission\x20conflict.'},{'code':'E_NOT_IMPACT_GUARD_IN_PASSPORT','value':0xc,'description':'Guard\x20not\x20marked\x20impactful\x20in\x20passport.'},{'code':'E_GUARD_SPECIFIED_NOT_IN_POLICY','value':0xd,'description':'Guard\x20not\x20in\x20policy\x20write_guard.'},{'code':'E_ID_VECTOR_NOT_ENOUGH','value':0xe,'description':'Not\x20enough\x20ids\x20supplied.'},{'code':'E_DATA_VECTOR_NOT_ENOUGH','value':0xf,'description':'Not\x20enough\x20data\x20supplied.'},{'code':'E_INVALID_ID_IN_GUARD_TABLE','value':0x10,'description':'Invalid\x20id\x20identifier\x20in\x20guard\x20table.'},{'code':'E_INVALID_DATA_IN_GUARD_TABLE','value':0x11,'description':'Invalid\x20data\x20identifier\x20in\x20guard\x20table.'},{'code':'E_INVALID_ID_FROM','value':0x12,'description':'id_from\x20is\x20not\x200/1/2.'},{'code':'E_MAX_REWARD_COUNT_EXCEEDED','value':0x13,'description':'reward\x20count\x20>\x20MAX_REWARD_COUNT\x20(20).'},{'code':'E_GUARD_NOT_SPECIFIED_ID_FROM_SUBMISSION','value':0x14,'description':'Guard\x20id_from_submission\x20missing\x20when\x20required.'},{'code':'E_NEED_DEPENDENT_GUARD','value':0x15,'description':'Dependent\x20guard\x20not\x20satisfied.'},{'code':'E_POLICY_WRITE_GUARD_REQUIRED','value':0x16,'description':'write_guard\x20empty\x20when\x20id_from\x20is\x20None.'},{'code':'E_POLICY_ID_FROM_SUBMISSION_FORBIDDEN','value':0x17,'description':'id_from_submission\x20forbidden\x20when\x20id_from\x20is\x20Clock/Signer.'}];export function getRepositoryIdFrom(a){return REPOSITORY_ID_FROM['find'](b=>b['value']===a);}export function getRepositoryErrorByCode(a){return REPOSITORY_ERROR_CODES['find'](b=>b['code']===a);}export function getRepositoryErrorByValue(a){return REPOSITORY_ERROR_CODES['find'](b=>b['value']===a);}export function getRepositoryErrorsCount(){return REPOSITORY_ERROR_CODES['length'];}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type RepositoryIdFromMode } from "./repository-ledger.js";
|
|
2
|
+
export declare const REPOSITORY_PUZZLE_VERSION = "1.0.0";
|
|
3
|
+
export interface RepositoryIntentPuzzle {
|
|
4
|
+
idFromMode?: RepositoryIdFromMode;
|
|
5
|
+
}
|
|
6
|
+
export interface RepositoryFieldState {
|
|
7
|
+
field: string;
|
|
8
|
+
present: boolean;
|
|
9
|
+
required: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface RepositoryPuzzle {
|
|
12
|
+
intent: RepositoryIntentPuzzle;
|
|
13
|
+
fields: RepositoryFieldState[];
|
|
14
|
+
}
|
|
15
|
+
export interface RepositoryPuzzleCompleteness {
|
|
16
|
+
complete: boolean;
|
|
17
|
+
missing_required: string[];
|
|
18
|
+
reason: string;
|
|
19
|
+
}
|
|
20
|
+
export interface InitRepositoryPuzzleInput {
|
|
21
|
+
intent: string;
|
|
22
|
+
id_from?: number;
|
|
23
|
+
name?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
value_type?: number;
|
|
26
|
+
write_guard_count?: number;
|
|
27
|
+
quote_guard?: string | null;
|
|
28
|
+
}
|
|
29
|
+
export declare function initRepositoryPuzzleFromIntent(input: InitRepositoryPuzzleInput): RepositoryPuzzle;
|
|
30
|
+
export declare function checkRepositoryPuzzleCompleteness(puzzle: RepositoryPuzzle): RepositoryPuzzleCompleteness;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{REPOSITORY_ID_FROM,REPOSITORY_POLICY_FIELDS}from'./repository-ledger.js';export const REPOSITORY_PUZZLE_VERSION='1.0.0';export function initRepositoryPuzzleFromIntent(a){const b=a['id_from']!==undefined?REPOSITORY_ID_FROM['find'](e=>e['value']===a['id_from']):undefined,c={'name':!!a['name'],'description':!!a['description'],'id_from':a['id_from']!==undefined,'value_type':a['value_type']!==undefined,'write_guard':(a['write_guard_count']??0x0)>0x0,'quote_guard':a['quote_guard']!=null&&a['quote_guard']!==''},d=REPOSITORY_POLICY_FIELDS['map'](e=>({'field':e['field'],'present':!!c[e['field']],'required':e['required']}));return{'intent':{'idFromMode':b?.['mode']},'fields':d};}export function checkRepositoryPuzzleCompleteness(a){const b=a['fields']['filter'](d=>d['required']&&!d['present'])['map'](d=>d['field']),c=b['length']===0x0;return{'complete':c,'missing_required':b,'reason':c?'All\x20required\x20policy\x20fields\x20present.':'Missing\x20required:\x20'+b['join'](',\x20')+'.'};}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const REPOSITORY_TEMPLATES_VERSION = "1.0.0";
|
|
2
|
+
export interface RepositoryTemplate {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
id_from: number;
|
|
7
|
+
value_type: number;
|
|
8
|
+
write_guard_required: boolean;
|
|
9
|
+
quote_guard_required: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const REPOSITORY_TEMPLATES: RepositoryTemplate[];
|
|
12
|
+
export declare function getRepositoryTemplateById(id: string): RepositoryTemplate | undefined;
|
|
13
|
+
export declare function listRepositoryTemplates(): RepositoryTemplate[];
|
|
14
|
+
export declare function suggestRepositoryTemplateForMode(mode: string): RepositoryTemplate | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{REPOSITORY_ID_FROM}from'./repository-ledger.js';export const REPOSITORY_TEMPLATES_VERSION='1.0.0';export const REPOSITORY_TEMPLATES=[{'id':'repo_timestamp_log','name':'Append-only\x20timestamp\x20log','description':'Id\x20auto-derived\x20from\x20clock;\x20write\x20protected\x20by\x20a\x20signer\x20guard.','id_from':0x1,'value_type':0x0,'write_guard_required':!![],'quote_guard_required':![]},{'id':'repo_signer_owned','name':'Signer-owned\x20record','description':'Id\x20auto-derived\x20from\x20signer\x20address;\x20write\x20protected\x20by\x20ownership.','id_from':0x2,'value_type':0x0,'write_guard_required':!![],'quote_guard_required':![]},{'id':'repo_caller_supplied','name':'Caller-supplied\x20id','description':'Caller\x20supplies\x20the\x20id;\x20write_guard\x20is\x20mandatory\x20(id_from=None).','id_from':0x0,'value_type':0x0,'write_guard_required':!![],'quote_guard_required':![]}];export function getRepositoryTemplateById(a){return REPOSITORY_TEMPLATES['find'](b=>b['id']===a);}export function listRepositoryTemplates(){return REPOSITORY_TEMPLATES;}export function suggestRepositoryTemplateForMode(a){const b=REPOSITORY_ID_FROM['find'](c=>c['mode']===a);return b?REPOSITORY_TEMPLATES['find'](c=>c['id_from']===b['value']):undefined;}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const RESOURCE_CONFIRM_VERSION = "1.0.0";
|
|
2
|
+
export type ConfirmSeverity = "block" | "warn" | "info";
|
|
3
|
+
export interface ResourceConfirmItem {
|
|
4
|
+
id: string;
|
|
5
|
+
severity: ConfirmSeverity;
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
passed: boolean;
|
|
9
|
+
evidence?: string;
|
|
10
|
+
fix_hint?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ResourceOpCheckInput {
|
|
13
|
+
tags_count?: number;
|
|
14
|
+
tag_set_return_ignored?: boolean;
|
|
15
|
+
is_destroy?: boolean;
|
|
16
|
+
expects_resource_permission?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function preCheckResourceOp(input: ResourceOpCheckInput): ResourceConfirmItem[];
|
|
19
|
+
export declare function canProceedResourceOp(input: ResourceOpCheckInput): {
|
|
20
|
+
canProceed: boolean;
|
|
21
|
+
blockers: ResourceConfirmItem[];
|
|
22
|
+
warnings: ResourceConfirmItem[];
|
|
23
|
+
info: ResourceConfirmItem[];
|
|
24
|
+
};
|
|
25
|
+
export declare function formatResourceOpSummary(input: ResourceOpCheckInput): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MAX_TAGS_COUNT}from'@wowok/wowok';export const RESOURCE_CONFIRM_VERSION='1.0.0';function checkTagsCount(a){if(a['tags_count']===undefined)return{'id':'C-RESOURCE-01','severity':'info','title':'tags_count\x20below\x20MAX_TAGS_COUNT\x20('+MAX_TAGS_COUNT+')','description':'add_object_tags\x20aborts\x20with\x20E_TAGS_COUNT_EXCEEDED\x20(1)\x20at\x20the\x20boundary.','passed':!![],'evidence':'not\x20provided'};const b=a['tags_count']<MAX_TAGS_COUNT;return{'id':'C-RESOURCE-01','severity':b?'info':'block','title':'tags_count\x20below\x20MAX_TAGS_COUNT\x20('+MAX_TAGS_COUNT+')','description':'A\x20single\x20object\x27s\x20AddressTag.tags\x20may\x20hold\x20up\x20to\x20MAX_TAGS_COUNT='+MAX_TAGS_COUNT+'\x20entries.\x20add_object_tags\x20aborts\x20with\x20E_TAGS_COUNT_EXCEEDED\x20(1).','passed':b,'evidence':'tags_count='+a['tags_count']+',\x20limit='+MAX_TAGS_COUNT,'fix_hint':'Remove\x20stale\x20tags\x20or\x20shard\x20across\x20multiple\x20Resource\x20objects.'};}function checkTagSetReturn(a){const b=!!a['tag_set_return_ignored'];return{'id':'C-RESOURCE-02','severity':b?'warn':'info','title':'tag_set\x20return\x20value\x20is\x20surfaced\x20(duplicate\x20detection)','description':'tag_set\x20returns\x20bool:\x20true=new\x20tag\x20added,\x20false=duplicate\x20skipped.\x20Ignoring\x20it\x20masks\x20idempotency\x20intent.','passed':!b,'evidence':b?'tag_set_return_ignored=true':'return\x20value\x20consumed','fix_hint':'Expose\x20tag_set\x27s\x20bool\x20to\x20the\x20caller;\x20surface\x20\x27tag\x20already\x20existed\x27\x20when\x20false.'};}function checkDestroy(a){if(!a['is_destroy'])return{'id':'C-RESOURCE-03','severity':'info','title':'destroy\x20is\x20irreversible\x20—\x20confirm\x20no\x20live\x20references','description':'Resource.destroy\x20deletes\x20the\x20object\x20and\x20its\x20ParentTable\x20in\x20place\x20(no\x20archive/rollback).','passed':!![],'evidence':'not\x20destroying'};return{'id':'C-RESOURCE-03','severity':'warn','title':'destroy\x20is\x20irreversible\x20—\x20no\x20recovery\x20mechanism','description':'Once\x20destroyed,\x20the\x20Resource\x20id\x20is\x20permanently\x20invalid\x20and\x20all\x20tags\x20are\x20lost.\x20Confirm\x20no\x20Personal/Entity\x20reference\x20it.','passed':![],'evidence':'is_destroy=true','fix_hint':'Verify\x20no\x20owner\x20references\x20remain\x20before\x20calling\x20destroy.'};}function checkPermission(a){const b=!!a['expects_resource_permission'];return{'id':'C-RESOURCE-04','severity':b?'warn':'info','title':'Resource\x20has\x20no\x20own\x20Permission\x20—\x20caller\x20must\x20gate\x20access','description':'All\x20Resource\x20functions\x20are\x20public(package)/public\x20with\x20no\x20on-chain\x20permission\x20check;\x20the\x20calling\x20module\x20(Personal/Entity)\x20enforces\x20its\x20own\x20gate.','passed':!b,'evidence':b?'expects_resource_permission=true\x20(none\x20exists)':'caller-side\x20gating\x20assumed','fix_hint':'Enforce\x20permission\x20in\x20the\x20calling\x20module\x20before\x20invoking\x20Resource\x20functions.'};}export function preCheckResourceOp(a){return[checkTagsCount(a),checkTagSetReturn(a),checkDestroy(a),checkPermission(a)];}export function canProceedResourceOp(a){const b=preCheckResourceOp(a);return{'canProceed':b['every'](c=>c['severity']!=='block'||c['passed']),'blockers':b['filter'](c=>c['severity']==='block'&&!c['passed']),'warnings':b['filter'](c=>c['severity']==='warn'&&!c['passed']),'info':b['filter'](c=>c['severity']==='info')};}export function formatResourceOpSummary(a){const {canProceed:b,blockers:c,warnings:d}=canProceedResourceOp(a),e=[b?'✓\x20Resource\x20operation\x20pre-check\x20PASSED':'✗\x20Resource\x20operation\x20pre-check\x20FAILED',''];return c['length']>0x0&&(e['push']('BLOCKERS:'),c['forEach'](f=>e['push']('\x20\x20['+f['id']+']\x20'+f['title']+'\x20—\x20'+(f['evidence']??''))),e['push']('')),d['length']>0x0&&(e['push']('WARNINGS:'),d['forEach'](f=>e['push']('\x20\x20['+f['id']+']\x20'+f['title']+'\x20—\x20'+(f['evidence']??'')))),e['join']('\x0a');}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const RESOURCE_TRANSLATION_VERSION = "1.0.0";
|
|
2
|
+
export interface SemanticToResourceSchemaRule {
|
|
3
|
+
id: string;
|
|
4
|
+
pattern_name: string;
|
|
5
|
+
semantic_intent: string;
|
|
6
|
+
match_keywords: string[];
|
|
7
|
+
required_fields: string[];
|
|
8
|
+
optional_fields: string[];
|
|
9
|
+
example: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export declare const SEMANTIC_TO_RESOURCE_SCHEMA_RULES: SemanticToResourceSchemaRule[];
|
|
12
|
+
export interface ResourceFieldTranslation {
|
|
13
|
+
field_name: string;
|
|
14
|
+
value_type: string;
|
|
15
|
+
semantic: string;
|
|
16
|
+
format_example: string;
|
|
17
|
+
validation_rules: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare const RESOURCE_FIELD_TRANSLATIONS: ResourceFieldTranslation[];
|
|
20
|
+
export interface ResourceConstraintRule {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
related_field: string;
|
|
25
|
+
}
|
|
26
|
+
export declare const RESOURCE_CONSTRAINT_RULES: ResourceConstraintRule[];
|
|
27
|
+
export interface ResourceExplainInput {
|
|
28
|
+
object?: string;
|
|
29
|
+
tags_count?: number;
|
|
30
|
+
is_destroy?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface ResourceExplanation {
|
|
33
|
+
summary: string;
|
|
34
|
+
tag_status: string;
|
|
35
|
+
warnings: string[];
|
|
36
|
+
}
|
|
37
|
+
export declare function explainResource(input: ResourceExplainInput): ResourceExplanation;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MAX_TAGS_COUNT}from'@wowok/wowok';export const RESOURCE_TRANSLATION_VERSION='1.0.0';export const SEMANTIC_TO_RESOURCE_SCHEMA_RULES=[{'id':'P-RESOURCE-01','pattern_name':'Add\x20object\x20tags','semantic_intent':'Attach\x20tags\x20(and\x20optional\x20nickname)\x20to\x20an\x20object\x20address.','match_keywords':['add\x20tags','tag\x20object','label'],'required_fields':['object'],'optional_fields':['nick','tags'],'example':{'object':'0x...','nick':'my_shop','tags':['verified','gold']}},{'id':'P-RESOURCE-02','pattern_name':'Remove\x20object\x20tags','semantic_intent':'Remove\x20tags\x20(and\x20optionally\x20reset\x20nickname)\x20from\x20an\x20object\x20address.','match_keywords':['remove\x20tags','untag','clear\x20label'],'required_fields':['object'],'optional_fields':['nick','tags'],'example':{'object':'0x...','tags':['gold']}}];export const RESOURCE_FIELD_TRANSLATIONS=[{'field_name':'table','value_type':'ParentTable<address,\x20AddressTag>','semantic':'Tag\x20registry\x20keyed\x20by\x20object\x20address.','format_example':'{0x...:\x20AddressTag}','validation_rules':['no\x20on-chain\x20permission\x20check\x20—\x20caller\x20gated']},{'field_name':'name','value_type':'string','semantic':'AddressTag\x20nickname\x20(optional,\x20common::NAME\x20validation).','format_example':'my_shop','validation_rules':['common::NAME\x20validation']},{'field_name':'tags','value_type':'vector<string>','semantic':'Tag\x20list\x20(≤\x20MAX_TAGS_COUNT\x20'+MAX_TAGS_COUNT+').\x20Each\x20tag\x20uses\x20common::NAME.','format_example':'[\x22verified\x22,\x20\x22gold\x22]','validation_rules':['E_TAGS_COUNT_EXCEEDED\x20(1)\x20at\x20cap','common::NAME\x20per\x20tag']}];export const RESOURCE_CONSTRAINT_RULES=[{'id':'RESOURCE_C_01','name':'tag\x20count\x20cap','description':'tags\x20length\x20<\x20MAX_TAGS_COUNT\x20('+MAX_TAGS_COUNT+').','related_field':'tags'},{'id':'RESOURCE_C_02','name':'tag\x20name\x20validation','description':'each\x20tag\x20uses\x20common::NAME.','related_field':'tags'},{'id':'RESOURCE_C_03','name':'tag_set\x20return','description':'tag_set\x20returns\x20bool\x20(true=added,\x20false=duplicate).','related_field':'tags'},{'id':'RESOURCE_C_04','name':'no\x20own\x20permission','description':'Resource\x20has\x20no\x20Permission;\x20caller\x20enforces\x20gating.','related_field':'table'}];export function explainResource(a){const b=[],c=a['tags_count']!==undefined?a['tags_count']+'/'+MAX_TAGS_COUNT+'\x20tags':'tag\x20count\x20unknown';return a['tags_count']!==undefined&&a['tags_count']>=MAX_TAGS_COUNT&&b['push']('tags\x20at\x20cap\x20('+MAX_TAGS_COUNT+');\x20add_object_tags\x20will\x20abort\x20E_TAGS_COUNT_EXCEEDED'),a['is_destroy']&&b['push']('destroy\x20is\x20irreversible\x20—\x20confirm\x20no\x20live\x20references'),{'summary':'Resource\x20('+(a['object']??'object')+').\x20'+c+'.','tag_status':c,'warnings':b};}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type RewardScene, type RewardBuiltinPermissionEntry, type
|
|
1
|
+
import { type RewardScene, type RewardBuiltinPermissionEntry, type RewardGuardConstructorSpec, type RewardPhase, type RewardRecipientType, type RewardAmountType } from "./reward-ledger.js";
|
|
2
2
|
import { type RewardPuzzle, type RewardPuzzleCompleteness } from "./reward-puzzle.js";
|
|
3
3
|
import { type RewardRiskAssessment, type RewardRiskRule, type RewardStakeholder } from "./reward-risk.js";
|
|
4
4
|
import { type RewardSemanticToSchemaRule } from "./reward-translation.js";
|
|
@@ -104,7 +104,7 @@ export declare function getRewardKnowledgeSnapshot(): {
|
|
|
104
104
|
}[];
|
|
105
105
|
guard_constructors_count: number;
|
|
106
106
|
guard_constructors: {
|
|
107
|
-
constructor: RewardGuardConstructor;
|
|
107
|
+
constructor: import("./reward-ledger.js").RewardGuardConstructor;
|
|
108
108
|
recipient_type: RewardRecipientType;
|
|
109
109
|
amount_type: RewardAmountType;
|
|
110
110
|
}[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>\x20(asserted\x20by\x20reward::new\x20/\x20new_with_passport)','governed_operations':['reward::new','reward::new_with_passport'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description\x20(asserted\x20by\x20reward::description_set\x20/\x20_with_passport)','governed_operations':['reward::description_set','reward::description_set_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['reward::guard_add','reward::guard_add_with_passport','reward::guard_remove_expired','reward::guard_remove_expired_with_passport'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['reward::coin_add','reward::coin_add_with_passport'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check\x20(joins\x20Balance<T>)','governed_operations':['reward::receive','reward::receive_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['reward::guard_expiration_time_add','reward::guard_expiration_time_add_with_passport'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['reward::owner_receive','reward::owner_receive_with_passport','reward::owner_receive_object','reward::owner_receive_object_with_passport'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['reward::um_set','reward::um_set_with_passport','reward::um_none','reward::um_none_with_passport'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20in\x20new_imp\x20via\x20object::new(ctx).\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20description_set\x20(151).'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20never\x20via\x20direct\x20withdraw.','related_errors':['E_INSUFFICIENT_BALANCE']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20requires\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20um_set\x20creates\x20Registrar\x20affiliation;\x20um_none\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20via\x20permission_set\x20(asserts\x20old.owner\x20==\x20sender).\x20Creates\x20Registrar\x20affiliation_change.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'guard_u8_u8','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'guard_u8_u64','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'guard_entity_u8','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'guard_entity_u64','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'guard_signer_u8','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'guard_signer_u64','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard_expiration_time_add:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard_expiration_time_add'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard_expiration_time_add:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard_expiration_time_add'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'reward_guard\x20(constructor)'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u64\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_entity_u64\x20for\x20referrer\x20(recipient\x20=\x20referrer\x20address,\x20fixed\x20amount)','guard_signer_u64\x20for\x20referee\x20(caller\x20is\x20recipient,\x20fixed\x20amount)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u8\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove_expired)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_signer_u64\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','guard_expiration_time_add\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['guard_signer_u8\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_entity_u64\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address,\x20fixed\x20amount)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','guard_expiration_time_add\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'guard_u8_u8','GuardIdentifier|Fixed':'guard_u8_u64','Entity|GuardU64Identifier':'guard_entity_u8','Entity|Fixed':'guard_entity_u64','Signer|GuardU64Identifier':'guard_signer_u8','Signer|Fixed':'guard_signer_u64'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission_set:\x20asserts\x20old.owner\x20==\x20sender;\x20creates\x20Registrar\x20affiliation_change'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20Registrar\x20affiliation)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20passport::result_for_guard(passport,\x20guard_id)\x20verifies\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20passport::submission_get\x20extracts\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20Payment.unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>\x20and\x20joins\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner_receive\x20(156):\x20Payment.unwrap_with_check\x20forwards\x20CoinWrapper<K>\x20to\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'um_set\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20Registrar\x20affiliation'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
|
|
1
|
+
import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>\x20(asserted\x20by\x20reward::new\x20/\x20new_with_passport)','governed_operations':['reward::new','reward::new_with_passport'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description\x20(asserted\x20by\x20reward::description_set\x20/\x20_with_passport)','governed_operations':['reward::description_set','reward::description_set_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['reward::guard_add','reward::guard_add_with_passport','reward::guard_remove_expired','reward::guard_remove_expired_with_passport'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['reward::coin_add','reward::coin_add_with_passport'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check\x20(joins\x20Balance<T>)','governed_operations':['reward::receive','reward::receive_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['reward::guard_expiration_time_add','reward::guard_expiration_time_add_with_passport'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['reward::owner_receive','reward::owner_receive_with_passport','reward::owner_receive_object','reward::owner_receive_object_with_passport'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['reward::um_set','reward::um_set_with_passport','reward::um_none','reward::um_none_with_passport'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20in\x20new_imp\x20via\x20object::new(ctx).\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20description_set\x20(151).'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20never\x20via\x20direct\x20withdraw.','related_errors':['E_INSUFFICIENT_BALANCE']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20requires\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20um_set\x20creates\x20object-linker\x20core\x20binding;\x20um_none\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20via\x20permission_set\x20(asserts\x20old.owner\x20==\x20sender).\x20Creates\x20object_linker::affiliation_change_core.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'guard_u8_u8','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'guard_u8_u64','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'guard_entity_u8','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'guard_entity_u64','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'guard_signer_u8','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'guard_signer_u64','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard_expiration_time_add:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard_expiration_time_add'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard_expiration_time_add:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard_expiration_time_add'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'reward_guard\x20(constructor)'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u64\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_entity_u64\x20for\x20referrer\x20(recipient\x20=\x20referrer\x20address,\x20fixed\x20amount)','guard_signer_u64\x20for\x20referee\x20(caller\x20is\x20recipient,\x20fixed\x20amount)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u8\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove_expired)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_signer_u64\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','guard_expiration_time_add\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['guard_signer_u8\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_entity_u64\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address,\x20fixed\x20amount)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','guard_expiration_time_add\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'guard_u8_u8','GuardIdentifier|Fixed':'guard_u8_u64','Entity|GuardU64Identifier':'guard_entity_u8','Entity|Fixed':'guard_entity_u64','Signer|GuardU64Identifier':'guard_signer_u8','Signer|Fixed':'guard_signer_u64'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission_set:\x20asserts\x20old.owner\x20==\x20sender;\x20creates\x20object_linker::affiliation_change_core'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20object-linker\x20core\x20binding)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20passport::result_for_guard(passport,\x20guard_id)\x20verifies\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20passport::submission_get\x20extracts\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20Payment.unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>\x20and\x20joins\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner_receive\x20(156):\x20Payment.unwrap_with_check\x20forwards\x20CoinWrapper<K>\x20to\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'um_set\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20object-linker\x20core\x20binding'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isRewardBuiltinPermission,getBuiltinPermissionByIndex,resolveGuardConstructor}from'./reward-ledger.js';export const REWARD_SEMANTIC_TO_SCHEMA_RULES=[{'id':'P-RW-01','pattern_name':'Create\x20new\x20Reward','semantic_intent':'Initialize\x20a\x20new\x20Reward<T>\x20object\x20with\x20description,\x20Permission,\x20and\x20coin\x20type\x20T','match_keywords':['create\x20reward','new\x20reward'],'schema_fields':['object\x20(typed,\x20with\x20permission\x20+\x20type_parameter)','description'],'example_json':{'object':{'permission':'0xPERMISSION_ADDRESS','type_parameter':'0x2::wow::WOW'},'description':'First-order\x20cashback\x20reward'},'reverse_explanation':'object\x20with\x20type_parameter\x20triggers\x20reward::new\x20(150).\x20SDK\x20creates\x20Permission\x20if\x20not\x20provided,\x20'+'then\x20constructs\x20Reward<T>\x20via\x20new_imp.\x20After\x20create,\x20share_object\x20is\x20called\x20automatically.'},{'id':'P-RW-02','pattern_name':'Add\x20RewardGuard\x20(eligible\x20recipient\x20+\x20amount\x20rule)','semantic_intent':'Register\x20a\x20Guard\x20that\x20defines\x20who\x20can\x20claim\x20and\x20how\x20much\x20they\x20receive','match_keywords':['guard_add','add\x20guard','eligibility'],'schema_fields':['object','guard_add[]'],'example_json':{'object':'0xREWARD_ADDRESS','guard_add':[{'guard':'0xGUARD_ADDRESS','recipient':{'Signer':'signer'},'amount':{'type':'Fixed','value':0x3b9aca00},'expiration_time':0x1941f297c00,'store_from_id':null}]},'reverse_explanation':'guard_add\x20with\x20one\x20entry\x20triggers\x20reward::guard_add\x20(152).\x20SDK\x20reward_guard()\x20picks\x20one\x20of\x206\x20Move\x20constructors\x20'+'based\x20on\x20recipient\x20variant\x20(GuardIdentifier/Entity/Signer)\x20×\x20amount.type\x20(GuardU64Identifier/Fixed).\x20'+'Move:\x20if\x20guard\x20already\x20in\x20self.guards,\x20UPDATE\x20in\x20place;\x20else\x20push_back\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'id':'P-RW-03','pattern_name':'Claim\x20reward\x20(passport-driven)','semantic_intent':'Claim\x20rewards\x20as\x20an\x20eligible\x20recipient,\x20verified\x20via\x20Guard\x20+\x20Passport','match_keywords':['claim','receive\x20reward'],'schema_fields':['object','claim\x20(guard\x20address)'],'example_json':{'object':'0xREWARD_ADDRESS','claim':'0xGUARD_ADDRESS'},'reverse_explanation':'claim\x20field\x20set\x20to\x20a\x20guard\x20address\x20triggers\x20reward::claim\x20(NO\x20permission\x20check).\x20'+'Move:\x20iterates\x20self.guards\x20looking\x20for\x20matching\x20guard.id_address;\x20passport::result_for_guard\x20verifies\x20submission;\x20'+'recipient/amount\x20resolved\x20from\x20Passport\x20submissions\x20OR\x20fixed\x20values;\x20'+'balance::split\x20transfers\x20coin\x20to\x20recipient;\x20record\x20appended\x20to\x20RecipientRecord.amount\x20vector.'},{'id':'P-RW-04','pattern_name':'Deposit\x20funds\x20(coin_add)','semantic_intent':'Deposit\x20Coin<T>\x20into\x20the\x20Reward\x20balance\x20to\x20fund\x20claims','match_keywords':['coin_add','deposit','deposit\x20funds'],'schema_fields':['object','coin_add'],'example_json':{'object':'0xREWARD_ADDRESS','coin_add':{'amount':'10000000000','coin_type':'0x2::wow::WOW'}},'reverse_explanation':'coin_add\x20triggers\x20reward::coin_add\x20(153).\x20Move:\x20coin::into_balance(coin)\x20→\x20balance::join(self.balance).\x20'+'Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20exactly\x20(phantom\x20T).\x20No\x20upper\x20limit\x20on\x20balance.'},{'id':'P-RW-05','pattern_name':'Receive\x20CoinWrapper\x20via\x20Payment','semantic_intent':'Receive\x20a\x20CoinWrapper<T>\x20envelope\x20via\x20Payment.unwrap_with_check','match_keywords':['receive','payment','unwrap'],'schema_fields':['object','receive\x20(payment\x20+\x20received)'],'example_json':{'object':'0xREWARD_ADDRESS','receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'receive\x20with\x20Receiving<CoinWrapper<T>>\x20+\x20Payment<T>\x20triggers\x20reward::receive\x20(154).\x20'+'Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>,\x20then\x20balance::join.\x20'+'token_type\x20must\x20match\x20Reward<T>.'},{'id':'P-RW-06','pattern_name':'Owner\x20receive\x20(terminal\x20disbursement)','semantic_intent':'Owner\x20unwraps\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20sent\x20to\x20the\x20Reward','match_keywords':['owner_receive','unwrap\x20to\x20owner'],'schema_fields':['object','owner_receive'],'example_json':{'object':'0xREWARD_ADDRESS','owner_receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'owner_receive\x20triggers\x20reward::owner_receive\x20(156).\x20Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<K>,\x20'+'then\x20permission::owner_receive_inner\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator).\x20'+'Does\x20NOT\x20drain\x20self.balance\x20—\x20only\x20unwraps\x20Receiving<K>\x20envelopes.'},{'id':'P-RW-07','pattern_name':'Set\x20UM\x20(Contact\x20binding)','semantic_intent':'Bind\x20or\x20unbind\x20a\x20Contact\x20(UM)\x20object\x20for\x20off-chain\x20coordination','match_keywords':['um_set','um_none','contact','UM'],'schema_fields':['object','um\x20(string\x20|\x20null)'],'example_json':{'object':'0xREWARD_ADDRESS','um':'0xCONTACT_ADDRESS'},'reverse_explanation':'um=<address>\x20triggers\x20reward::um_set\x20(157)\x20—\x20creates\x20Registrar\x20affiliation.\x20'+'um=null\x20triggers\x20reward::um_none\x20(157)\x20—\x20disaffiliates\x20and\x20clears\x20self.um.'},{'id':'P-RW-08','pattern_name':'Set\x20permission\x20(owner-only)','semantic_intent':'Replace\x20the\x20Permission\x20object\x20(owner-only\x20operation)','match_keywords':['permission_set','change\x20permission'],'schema_fields':['(SDK\x20does\x20not\x20expose\x20this\x20in\x20CallReward_Data\x20—\x20direct\x20Move\x20call\x20required)'],'example_json':{'_note':'Not\x20exposed\x20in\x20CallReward_Data;\x20direct\x20Move\x20call:','target':'reward::permission_set<T>','arguments':['reward','old_permission','new_permission','registrar','clock']},'reverse_explanation':'Calls\x20reward::permission_set.\x20Move\x20asserts\x20old.owner\x20==\x20sender\x20(tx_context::sender).\x20'+'Updates\x20self.permission\x20=\x20new.id_address;\x20creates\x20Registrar\x20affiliation_change.'}];export const REWARD_SCHEMA_TO_SEMANTIC_RULES=[{'element_type':'field','type_name':'object','semantic_explanation':'Reward\x20object\x20address.\x20For\x20create:\x20typed\x20object\x20with\x20permission\x20+\x20type_parameter.\x20For\x20operate:\x20existing\x20Reward\x20address.'},{'element_type':'field','type_name':'claim','semantic_explanation':'Guard\x20address\x20to\x20claim\x20against.\x20NO\x20permission\x20check\x20—\x20eligibility\x20determined\x20by\x20Guard\x20+\x20Passport\x20alone.'},{'element_type':'field','type_name':'description','semantic_explanation':'Reward\x20description\x20(must\x20satisfy\x20common::DESCRIPTION).\x20Updated\x20via\x20description_set\x20(151).'},{'element_type':'field','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance.\x20coin_type\x20must\x20match\x20Reward<T>\x20(153\x20permission).'},{'element_type':'field','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check.\x20token_type\x20must\x20match\x20Reward<T>\x20(154\x20permission).'},{'element_type':'field','type_name':'guard_add','semantic_explanation':'Array\x20of\x20RewardGuard\x20configs.\x20Each\x20entry\x20has\x20guard,\x20recipient\x20(GuardIdentifier/Entity/Signer),\x20amount\x20(Fixed/GuardU64Identifier),\x20expiration_time,\x20store_from_id.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_remove_expired','semantic_explanation':'Boolean.\x20If\x20true,\x20removes\x20all\x20guards\x20with\x20expiration_time\x20<\x20now.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_expiration_time','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time.\x20number\x20=\x20set\x20lock;\x20null\x20=\x20cancel.\x20(155\x20permission)'},{'element_type':'field','type_name':'owner_receive','semantic_explanation':'Receive\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20and\x20forward\x20to\x20Permission\x20owner.\x20(156\x20permission)'},{'element_type':'field','type_name':'um','semantic_explanation':'Bind/unbind\x20Contact\x20(UM).\x20string\x20=\x20um_set;\x20null\x20=\x20um_none.\x20(157\x20permission)'},{'element_type':'op','type_name':'new','semantic_explanation':'Create\x20Reward<T>\x20(150\x20permission).\x20Indirect\x20via\x20SDK\x20newReward()\x20→\x20reward::new\x20or\x20new_with_passport.'},{'element_type':'op','type_name':'create','semantic_explanation':'Share\x20Reward\x20object\x20and\x20return\x20its\x20address.\x20Called\x20automatically\x20after\x20new.'},{'element_type':'op','type_name':'claim','semantic_explanation':'Claim\x20rewards\x20(NO\x20permission).\x20Passport-driven:\x20Guard\x20verification\x20+\x20recipient/amount\x20resolution\x20from\x20submissions.'},{'element_type':'op','type_name':'guard_add','semantic_explanation':'Add\x20or\x20update\x20a\x20RewardGuard\x20(152).\x20Existing\x20guard\x20(same\x20address)\x20is\x20updated\x20in\x20place;\x20new\x20guard\x20pushes\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'element_type':'op','type_name':'guard_remove_expired','semantic_explanation':'Remove\x20all\x20guards\x20with\x20expiration_time\x20<\x20now\x20(152).\x20Also\x20disaffiliates\x20from\x20Registrar.'},{'element_type':'op','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance\x20(153).\x20balance::join(self.balance,\x20coin::into_balance(coin)).'},{'element_type':'op','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment\x20(154).\x20unwrap_with_check\x20→\x20balance::join.'},{'element_type':'op','type_name':'guard_expiration_time_add','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time\x20(155).\x20New\x20time\x20must\x20be\x20>\x20now\x20(E_GUARD_LOCKED_TIME_INVALID).'},{'element_type':'op','type_name':'owner_receive','semantic_explanation':'Owner\x20unwrap\x20Receiving<K>/CoinWrapper<K>\x20(156).\x20Forwards\x20to\x20Permission\x20owner\x20via\x20owner_receive_inner.'},{'element_type':'op','type_name':'um_set','semantic_explanation':'Bind\x20Contact\x20as\x20UM\x20(157).\x20Creates\x20Registrar\x20affiliation.'},{'element_type':'op','type_name':'um_none','semantic_explanation':'Unbind\x20UM\x20(157).\x20Disaffiliates\x20from\x20Registrar\x20and\x20sets\x20self.um\x20=\x20none.'},{'element_type':'op','type_name':'description_set','semantic_explanation':'Update\x20description\x20(151).\x20Must\x20satisfy\x20common::DESCRIPTION.'},{'element_type':'op','type_name':'permission_set','semantic_explanation':'Replace\x20Permission\x20(owner-only).\x20Asserts\x20old.owner\x20==\x20sender;\x20creates\x20Registrar\x20affiliation_change.'},{'element_type':'phase','type_name':'creation','semantic_explanation':'new\x20(150)\x20→\x20create\x20→\x20share.\x20Permission\x20object\x20may\x20be\x20created\x20in\x20same\x20tx\x20if\x20not\x20provided.'},{'element_type':'phase','type_name':'guard_addition','semantic_explanation':'guard_add\x20(152)\x20+\x20guard_remove_expired\x20(152).\x20Guards\x20are\x20added/updated/removed\x20based\x20on\x20expiration.'},{'element_type':'phase','type_name':'claim','semantic_explanation':'claim()\x20—\x20passport-driven,\x20no\x20permission.\x20Iterates\x20guards,\x20verifies\x20Passport,\x20splits\x20balance\x20to\x20recipient.'},{'element_type':'phase','type_name':'funds_replenish','semantic_explanation':'coin_add\x20(153)\x20OR\x20receive\x20(154).\x20Both\x20join\x20into\x20self.balance.'},{'element_type':'phase','type_name':'owner_receive','semantic_explanation':'owner_receive\x20/\x20owner_receive_object\x20(156).\x20Unwrap\x20Receiving\x20envelopes\x20→\x20Permission\x20owner.'},{'element_type':'constructor','type_name':'guard_u8_u8','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Both\x20resolved\x20from\x20Passport\x20at\x20claim\x20time.\x20Asserts\x20is_identifier_address\x20+\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_u8_u64','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20Fixed\x20amount.\x20Recipient\x20from\x20Passport;\x20amount\x20fixed.\x20Asserts\x20is_identifier_address.'},{'element_type':'constructor','type_name':'guard_entity_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Recipient\x20fixed;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_entity_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20Fixed\x20amount.\x20Both\x20fixed.\x20Simplest\x20configuration.'},{'element_type':'constructor','type_name':'guard_signer_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_signer_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20Fixed\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20fixed.\x20Common\x20for\x20first-order/flash\x20sale.'}];export const REWARD_CONSTRAINT_RULES=[{'id':'MC-RW-01','category':'structural','rule':'guard\x20count\x20<\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow\x20(only\x20on\x20NEW\x20guard,\x20not\x20update)','applies_to':['guard_add']},{'id':'MC-RW-02','category':'structural','rule':'per-recipient\x20record\x20count\x20<\x20MAX_RECORD_COUNT_REWARD\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20claim','applies_to':['claim']},{'id':'MC-RW-03','category':'structural','rule':'guard_add\x20batch\x20size\x20≤\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20SDK\x20rejects\x20larger\x20batches\x20in\x20operate()','applies_to':['guard_add\x20(batch)']},{'id':'MC-RW-04','category':'semantic','rule':'guard_add:\x20Recipient\x20×\x20Amount\x20must\x20match\x20one\x20of\x206\x20valid\x20constructors\x20(guard_u8_u8\x20/\x20u8_u64\x20/\x20entity_u8\x20/\x20entity_u64\x20/\x20signer_u8\x20/\x20signer_u64)','applies_to':['guard_add']},{'id':'MC-RW-05','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20requires\x20is_identifier_address(guard,\x20id)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-06','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardU64Identifier\x20amount\x20requires\x20get_submission_value_type(guard,\x20id)\x20==\x20TYPE_U64\x20—\x20E_AMOUNT_NOT_U64','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-07','category':'semantic','rule':'RewardGuard\x20constructor:\x20store_from_id\x20(if\x20Some)\x20requires\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-08','category':'permission','rule':'claim\x20is\x20PERMISSION-FREE\x20—\x20anyone\x20with\x20valid\x20Passport\x20+\x20Guard\x20can\x20claim\x20(no\x20150-157\x20assertion)','applies_to':['claim']},{'id':'MC-RW-09','category':'permission','rule':'150-157\x20builtin\x20indexes\x20are\x20MANAGEMENT-ONLY\x20(new/description/guard/coin_add/receive/guard_exp/owner_receive/um)','applies_to':['all\x20management\x20ops']},{'id':'MC-RW-10','category':'permission','rule':'owner_receive\x20(156)\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator)\x20—\x20grant\x20156\x20only\x20to\x20dedicated\x20addresses','applies_to':['owner_receive']},{'id':'MC-RW-11','category':'lifecycle','rule':'guard_add:\x20clock\x20>\x20guard_not_added_expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_LOCKED_TIME','applies_to':['guard_add']},{'id':'MC-RW-12','category':'lifecycle','rule':'guard_add\x20/\x20claim:\x20clock\x20≤\x20guard.expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_EXPIRED','applies_to':['guard_add','claim']},{'id':'MC-RW-13','category':'lifecycle','rule':'guard_expiration_time_add:\x20new\x20Some(t)\x20requires\x20t\x20>\x20now\x20—\x20E_GUARD_LOCKED_TIME_INVALID','applies_to':['guard_expiration_time_add']},{'id':'MC-RW-14','category':'lifecycle','rule':'claim:\x20balance\x20≥\x20amount\x20—\x20E_INSUFFICIENT_BALANCE\x20(balance::split\x20aborts)','applies_to':['claim']},{'id':'MC-RW-15','category':'cross_object','rule':'claim:\x20supplied\x20guard\x20must\x20be\x20in\x20self.guards\x20—\x20E_GUARD_NOT_FOUND\x20(iterates\x20by\x20id_address\x20match)','applies_to':['claim']},{'id':'MC-RW-16','category':'cross_object','rule':'coin_add:\x20Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20phantom\x20T\x20(SDK\x20W_ERROR\x20in\x20operate\x20if\x20mismatch)','applies_to':['coin_add']}];export const REWARD_TRANSLATION_VERSION='1.0.0';export function matchSemanticPattern(a){const b=a['toLowerCase']();return REWARD_SEMANTIC_TO_SCHEMA_RULES['filter'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainRewardCallData(a){const b=[];!a['object']?b['push']('Operation:\x20CREATE\x20Reward\x20(new\x20+\x20create\x20+\x20share)'):b['push']('Operation:\x20OPERATE\x20Reward\x20at\x20'+a['object']);a['claim']&&b['push']('-\x20claim:\x20guard='+a['claim']+'\x20(passport-driven,\x20NO\x20permission\x20check)');a['description']!=null&&b['push']('-\x20description_set:\x20\x22'+a['description']+'\x22\x20(151\x20permission)');a['coin_add']&&b['push']('-\x20coin_add:\x20'+a['coin_add']['amount']+'\x20of\x20'+a['coin_add']['coin_type']+'\x20(153\x20permission)');a['receive']&&b['push']('-\x20receive:\x20token_type='+a['receive']['token_type']+'\x20(154\x20permission,\x20requires\x20Payment)');if(a['guard_add']){b['push']('-\x20guard_add:\x20'+a['guard_add']['length']+'\x20guard(s)\x20(152\x20permission)');for(let c=0x0;c<a['guard_add']['length'];c++){const d=a['guard_add'][c],e=Object['keys'](d['recipient'])[0x0]??'(unknown)',f=inferConstructorName(e,d['amount']['type']);b['push']('\x20\x20['+c+']\x20constructor='+f+',\x20guard='+d['guard']),b['push']('\x20\x20\x20\x20\x20\x20recipient='+e+',\x20amount='+d['amount']['type']+'('+d['amount']['value']+')'),d['expiration_time']!=null&&b['push']('\x20\x20\x20\x20\x20\x20expiration_time='+d['expiration_time']),d['store_from_id']!=null&&b['push']('\x20\x20\x20\x20\x20\x20store_from_id='+d['store_from_id']);}}a['guard_remove_expired']&&b['push']('-\x20guard_remove_expired:\x20true\x20(152\x20permission)');if(a['guard_expiration_time']!==undefined){const h=a['guard_expiration_time'];h===null?b['push']('-\x20guard_expiration_time_add:\x20null\x20(cancel\x20lock,\x20155\x20permission)'):b['push']('-\x20guard_expiration_time_add:\x20'+h+'\x20(155\x20permission,\x20must\x20be\x20>\x20now)');}return a['owner_receive']!=null&&b['push']('-\x20⚠️\x20owner_receive\x20(156\x20permission):\x20unwrap\x20to\x20Permission\x20owner'),a['um']!==undefined&&(a['um']?b['push']('-\x20um_set:\x20'+a['um']+'\x20(157\x20permission,\x20creates\x20Registrar\x20affiliation)'):b['push']('-\x20um_none:\x20(157\x20permission,\x20disaffiliates\x20and\x20clears\x20um)')),b['join']('\x0a');}function inferConstructorName(a,b){const c={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'},d=c[a];if(!d)return'(invalid)';const e=String(b)['toUpperCase'](),f=e==='FIXED'?'Fixed':'GuardU64Identifier';return resolveGuardConstructor(d,f)??'(invalid)';}export function explainField(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='field'&&b['type_name']===a);}export function explainOp(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='op'&&b['type_name']===a);}export function explainConstructor(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='constructor'&&b['type_name']===a);}export function getConstraintsByCategory(a){return REWARD_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function explainPermissionIndex(a){if(isRewardBuiltinPermission(a)){const b=getBuiltinPermissionByIndex(a);return b['name']+'\x20('+a+')\x20—\x20'+b['description'];}return'Custom\x20permission\x20index\x20('+a+')\x20—\x20not\x20a\x20Reward\x20builtin\x20(150-157)';}
|
|
1
|
+
import{isRewardBuiltinPermission,getBuiltinPermissionByIndex,resolveGuardConstructor}from'./reward-ledger.js';export const REWARD_SEMANTIC_TO_SCHEMA_RULES=[{'id':'P-RW-01','pattern_name':'Create\x20new\x20Reward','semantic_intent':'Initialize\x20a\x20new\x20Reward<T>\x20object\x20with\x20description,\x20Permission,\x20and\x20coin\x20type\x20T','match_keywords':['create\x20reward','new\x20reward'],'schema_fields':['object\x20(typed,\x20with\x20permission\x20+\x20type_parameter)','description'],'example_json':{'object':{'permission':'0xPERMISSION_ADDRESS','type_parameter':'0x2::wow::WOW'},'description':'First-order\x20cashback\x20reward'},'reverse_explanation':'object\x20with\x20type_parameter\x20triggers\x20reward::new\x20(150).\x20SDK\x20creates\x20Permission\x20if\x20not\x20provided,\x20'+'then\x20constructs\x20Reward<T>\x20via\x20new_imp.\x20After\x20create,\x20share_object\x20is\x20called\x20automatically.'},{'id':'P-RW-02','pattern_name':'Add\x20RewardGuard\x20(eligible\x20recipient\x20+\x20amount\x20rule)','semantic_intent':'Register\x20a\x20Guard\x20that\x20defines\x20who\x20can\x20claim\x20and\x20how\x20much\x20they\x20receive','match_keywords':['guard_add','add\x20guard','eligibility'],'schema_fields':['object','guard_add[]'],'example_json':{'object':'0xREWARD_ADDRESS','guard_add':[{'guard':'0xGUARD_ADDRESS','recipient':{'Signer':'signer'},'amount':{'type':'Fixed','value':0x3b9aca00},'expiration_time':0x1941f297c00,'store_from_id':null}]},'reverse_explanation':'guard_add\x20with\x20one\x20entry\x20triggers\x20reward::guard_add\x20(152).\x20SDK\x20reward_guard()\x20picks\x20one\x20of\x206\x20Move\x20constructors\x20'+'based\x20on\x20recipient\x20variant\x20(GuardIdentifier/Entity/Signer)\x20×\x20amount.type\x20(GuardU64Identifier/Fixed).\x20'+'Move:\x20if\x20guard\x20already\x20in\x20self.guards,\x20UPDATE\x20in\x20place;\x20else\x20push_back\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'id':'P-RW-03','pattern_name':'Claim\x20reward\x20(passport-driven)','semantic_intent':'Claim\x20rewards\x20as\x20an\x20eligible\x20recipient,\x20verified\x20via\x20Guard\x20+\x20Passport','match_keywords':['claim','receive\x20reward'],'schema_fields':['object','claim\x20(guard\x20address)'],'example_json':{'object':'0xREWARD_ADDRESS','claim':'0xGUARD_ADDRESS'},'reverse_explanation':'claim\x20field\x20set\x20to\x20a\x20guard\x20address\x20triggers\x20reward::claim\x20(NO\x20permission\x20check).\x20'+'Move:\x20iterates\x20self.guards\x20looking\x20for\x20matching\x20guard.id_address;\x20passport::result_for_guard\x20verifies\x20submission;\x20'+'recipient/amount\x20resolved\x20from\x20Passport\x20submissions\x20OR\x20fixed\x20values;\x20'+'balance::split\x20transfers\x20coin\x20to\x20recipient;\x20record\x20appended\x20to\x20RecipientRecord.amount\x20vector.'},{'id':'P-RW-04','pattern_name':'Deposit\x20funds\x20(coin_add)','semantic_intent':'Deposit\x20Coin<T>\x20into\x20the\x20Reward\x20balance\x20to\x20fund\x20claims','match_keywords':['coin_add','deposit','deposit\x20funds'],'schema_fields':['object','coin_add'],'example_json':{'object':'0xREWARD_ADDRESS','coin_add':{'amount':'10000000000','coin_type':'0x2::wow::WOW'}},'reverse_explanation':'coin_add\x20triggers\x20reward::coin_add\x20(153).\x20Move:\x20coin::into_balance(coin)\x20→\x20balance::join(self.balance).\x20'+'Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20exactly\x20(phantom\x20T).\x20No\x20upper\x20limit\x20on\x20balance.'},{'id':'P-RW-05','pattern_name':'Receive\x20CoinWrapper\x20via\x20Payment','semantic_intent':'Receive\x20a\x20CoinWrapper<T>\x20envelope\x20via\x20Payment.unwrap_with_check','match_keywords':['receive','payment','unwrap'],'schema_fields':['object','receive\x20(payment\x20+\x20received)'],'example_json':{'object':'0xREWARD_ADDRESS','receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'receive\x20with\x20Receiving<CoinWrapper<T>>\x20+\x20Payment<T>\x20triggers\x20reward::receive\x20(154).\x20'+'Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>,\x20then\x20balance::join.\x20'+'token_type\x20must\x20match\x20Reward<T>.'},{'id':'P-RW-06','pattern_name':'Owner\x20receive\x20(terminal\x20disbursement)','semantic_intent':'Owner\x20unwraps\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20sent\x20to\x20the\x20Reward','match_keywords':['owner_receive','unwrap\x20to\x20owner'],'schema_fields':['object','owner_receive'],'example_json':{'object':'0xREWARD_ADDRESS','owner_receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'owner_receive\x20triggers\x20reward::owner_receive\x20(156).\x20Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<K>,\x20'+'then\x20permission::owner_receive_inner\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator).\x20'+'Does\x20NOT\x20drain\x20self.balance\x20—\x20only\x20unwraps\x20Receiving<K>\x20envelopes.'},{'id':'P-RW-07','pattern_name':'Set\x20UM\x20(Contact\x20binding)','semantic_intent':'Bind\x20or\x20unbind\x20a\x20Contact\x20(UM)\x20object\x20for\x20off-chain\x20coordination','match_keywords':['um_set','um_none','contact','UM'],'schema_fields':['object','um\x20(string\x20|\x20null)'],'example_json':{'object':'0xREWARD_ADDRESS','um':'0xCONTACT_ADDRESS'},'reverse_explanation':'um=<address>\x20triggers\x20reward::um_set\x20(157)\x20—\x20creates\x20object-linker\x20core\x20binding.\x20'+'um=null\x20triggers\x20reward::um_none\x20(157)\x20—\x20disaffiliates\x20and\x20clears\x20self.um.'},{'id':'P-RW-08','pattern_name':'Set\x20permission\x20(owner-only)','semantic_intent':'Replace\x20the\x20Permission\x20object\x20(owner-only\x20operation)','match_keywords':['permission_set','change\x20permission'],'schema_fields':['(SDK\x20does\x20not\x20expose\x20this\x20in\x20CallReward_Data\x20—\x20direct\x20Move\x20call\x20required)'],'example_json':{'_note':'Not\x20exposed\x20in\x20CallReward_Data;\x20direct\x20Move\x20call:','target':'reward::permission_set<T>','arguments':['reward','old_permission','new_permission','registrar','clock']},'reverse_explanation':'Calls\x20reward::permission_set.\x20Move\x20asserts\x20old.owner\x20==\x20sender\x20(tx_context::sender).\x20'+'Updates\x20self.permission\x20=\x20new.id_address;\x20creates\x20object_linker::affiliation_change_core.'}];export const REWARD_SCHEMA_TO_SEMANTIC_RULES=[{'element_type':'field','type_name':'object','semantic_explanation':'Reward\x20object\x20address.\x20For\x20create:\x20typed\x20object\x20with\x20permission\x20+\x20type_parameter.\x20For\x20operate:\x20existing\x20Reward\x20address.'},{'element_type':'field','type_name':'claim','semantic_explanation':'Guard\x20address\x20to\x20claim\x20against.\x20NO\x20permission\x20check\x20—\x20eligibility\x20determined\x20by\x20Guard\x20+\x20Passport\x20alone.'},{'element_type':'field','type_name':'description','semantic_explanation':'Reward\x20description\x20(must\x20satisfy\x20common::DESCRIPTION).\x20Updated\x20via\x20description_set\x20(151).'},{'element_type':'field','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance.\x20coin_type\x20must\x20match\x20Reward<T>\x20(153\x20permission).'},{'element_type':'field','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check.\x20token_type\x20must\x20match\x20Reward<T>\x20(154\x20permission).'},{'element_type':'field','type_name':'guard_add','semantic_explanation':'Array\x20of\x20RewardGuard\x20configs.\x20Each\x20entry\x20has\x20guard,\x20recipient\x20(GuardIdentifier/Entity/Signer),\x20amount\x20(Fixed/GuardU64Identifier),\x20expiration_time,\x20store_from_id.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_remove_expired','semantic_explanation':'Boolean.\x20If\x20true,\x20removes\x20all\x20guards\x20with\x20expiration_time\x20<\x20now.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_expiration_time','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time.\x20number\x20=\x20set\x20lock;\x20null\x20=\x20cancel.\x20(155\x20permission)'},{'element_type':'field','type_name':'owner_receive','semantic_explanation':'Receive\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20and\x20forward\x20to\x20Permission\x20owner.\x20(156\x20permission)'},{'element_type':'field','type_name':'um','semantic_explanation':'Bind/unbind\x20Contact\x20(UM).\x20string\x20=\x20um_set;\x20null\x20=\x20um_none.\x20(157\x20permission)'},{'element_type':'op','type_name':'new','semantic_explanation':'Create\x20Reward<T>\x20(150\x20permission).\x20Indirect\x20via\x20SDK\x20newReward()\x20→\x20reward::new\x20or\x20new_with_passport.'},{'element_type':'op','type_name':'create','semantic_explanation':'Share\x20Reward\x20object\x20and\x20return\x20its\x20address.\x20Called\x20automatically\x20after\x20new.'},{'element_type':'op','type_name':'claim','semantic_explanation':'Claim\x20rewards\x20(NO\x20permission).\x20Passport-driven:\x20Guard\x20verification\x20+\x20recipient/amount\x20resolution\x20from\x20submissions.'},{'element_type':'op','type_name':'guard_add','semantic_explanation':'Add\x20or\x20update\x20a\x20RewardGuard\x20(152).\x20Existing\x20guard\x20(same\x20address)\x20is\x20updated\x20in\x20place;\x20new\x20guard\x20pushes\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'element_type':'op','type_name':'guard_remove_expired','semantic_explanation':'Remove\x20all\x20guards\x20with\x20expiration_time\x20<\x20now\x20(152).\x20Also\x20disaffiliates\x20from\x20object_linker\x20(core).'},{'element_type':'op','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance\x20(153).\x20balance::join(self.balance,\x20coin::into_balance(coin)).'},{'element_type':'op','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment\x20(154).\x20unwrap_with_check\x20→\x20balance::join.'},{'element_type':'op','type_name':'guard_expiration_time_add','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time\x20(155).\x20New\x20time\x20must\x20be\x20>\x20now\x20(E_GUARD_LOCKED_TIME_INVALID).'},{'element_type':'op','type_name':'owner_receive','semantic_explanation':'Owner\x20unwrap\x20Receiving<K>/CoinWrapper<K>\x20(156).\x20Forwards\x20to\x20Permission\x20owner\x20via\x20owner_receive_inner.'},{'element_type':'op','type_name':'um_set','semantic_explanation':'Bind\x20Contact\x20as\x20UM\x20(157).\x20Creates\x20object-linker\x20core\x20binding.'},{'element_type':'op','type_name':'um_none','semantic_explanation':'Unbind\x20UM\x20(157).\x20Disaffiliates\x20from\x20object_linker\x20(core)\x20and\x20sets\x20self.um\x20=\x20none.'},{'element_type':'op','type_name':'description_set','semantic_explanation':'Update\x20description\x20(151).\x20Must\x20satisfy\x20common::DESCRIPTION.'},{'element_type':'op','type_name':'permission_set','semantic_explanation':'Replace\x20Permission\x20(owner-only).\x20Asserts\x20old.owner\x20==\x20sender;\x20creates\x20object_linker::affiliation_change_core.'},{'element_type':'phase','type_name':'creation','semantic_explanation':'new\x20(150)\x20→\x20create\x20→\x20share.\x20Permission\x20object\x20may\x20be\x20created\x20in\x20same\x20tx\x20if\x20not\x20provided.'},{'element_type':'phase','type_name':'guard_addition','semantic_explanation':'guard_add\x20(152)\x20+\x20guard_remove_expired\x20(152).\x20Guards\x20are\x20added/updated/removed\x20based\x20on\x20expiration.'},{'element_type':'phase','type_name':'claim','semantic_explanation':'claim()\x20—\x20passport-driven,\x20no\x20permission.\x20Iterates\x20guards,\x20verifies\x20Passport,\x20splits\x20balance\x20to\x20recipient.'},{'element_type':'phase','type_name':'funds_replenish','semantic_explanation':'coin_add\x20(153)\x20OR\x20receive\x20(154).\x20Both\x20join\x20into\x20self.balance.'},{'element_type':'phase','type_name':'owner_receive','semantic_explanation':'owner_receive\x20/\x20owner_receive_object\x20(156).\x20Unwrap\x20Receiving\x20envelopes\x20→\x20Permission\x20owner.'},{'element_type':'constructor','type_name':'guard_u8_u8','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Both\x20resolved\x20from\x20Passport\x20at\x20claim\x20time.\x20Asserts\x20is_identifier_address\x20+\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_u8_u64','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20Fixed\x20amount.\x20Recipient\x20from\x20Passport;\x20amount\x20fixed.\x20Asserts\x20is_identifier_address.'},{'element_type':'constructor','type_name':'guard_entity_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Recipient\x20fixed;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_entity_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20Fixed\x20amount.\x20Both\x20fixed.\x20Simplest\x20configuration.'},{'element_type':'constructor','type_name':'guard_signer_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_signer_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20Fixed\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20fixed.\x20Common\x20for\x20first-order/flash\x20sale.'}];export const REWARD_CONSTRAINT_RULES=[{'id':'MC-RW-01','category':'structural','rule':'guard\x20count\x20<\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow\x20(only\x20on\x20NEW\x20guard,\x20not\x20update)','applies_to':['guard_add']},{'id':'MC-RW-02','category':'structural','rule':'per-recipient\x20record\x20count\x20<\x20MAX_RECORD_COUNT_REWARD\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20claim','applies_to':['claim']},{'id':'MC-RW-03','category':'structural','rule':'guard_add\x20batch\x20size\x20≤\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20SDK\x20rejects\x20larger\x20batches\x20in\x20operate()','applies_to':['guard_add\x20(batch)']},{'id':'MC-RW-04','category':'semantic','rule':'guard_add:\x20Recipient\x20×\x20Amount\x20must\x20match\x20one\x20of\x206\x20valid\x20constructors\x20(guard_u8_u8\x20/\x20u8_u64\x20/\x20entity_u8\x20/\x20entity_u64\x20/\x20signer_u8\x20/\x20signer_u64)','applies_to':['guard_add']},{'id':'MC-RW-05','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20requires\x20is_identifier_address(guard,\x20id)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-06','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardU64Identifier\x20amount\x20requires\x20get_submission_value_type(guard,\x20id)\x20==\x20TYPE_U64\x20—\x20E_AMOUNT_NOT_U64','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-07','category':'semantic','rule':'RewardGuard\x20constructor:\x20store_from_id\x20(if\x20Some)\x20requires\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-08','category':'permission','rule':'claim\x20is\x20PERMISSION-FREE\x20—\x20anyone\x20with\x20valid\x20Passport\x20+\x20Guard\x20can\x20claim\x20(no\x20150-157\x20assertion)','applies_to':['claim']},{'id':'MC-RW-09','category':'permission','rule':'150-157\x20builtin\x20indexes\x20are\x20MANAGEMENT-ONLY\x20(new/description/guard/coin_add/receive/guard_exp/owner_receive/um)','applies_to':['all\x20management\x20ops']},{'id':'MC-RW-10','category':'permission','rule':'owner_receive\x20(156)\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator)\x20—\x20grant\x20156\x20only\x20to\x20dedicated\x20addresses','applies_to':['owner_receive']},{'id':'MC-RW-11','category':'lifecycle','rule':'guard_add:\x20clock\x20>\x20guard_not_added_expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_LOCKED_TIME','applies_to':['guard_add']},{'id':'MC-RW-12','category':'lifecycle','rule':'guard_add\x20/\x20claim:\x20clock\x20≤\x20guard.expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_EXPIRED','applies_to':['guard_add','claim']},{'id':'MC-RW-13','category':'lifecycle','rule':'guard_expiration_time_add:\x20new\x20Some(t)\x20requires\x20t\x20>\x20now\x20—\x20E_GUARD_LOCKED_TIME_INVALID','applies_to':['guard_expiration_time_add']},{'id':'MC-RW-14','category':'lifecycle','rule':'claim:\x20balance\x20≥\x20amount\x20—\x20E_INSUFFICIENT_BALANCE\x20(balance::split\x20aborts)','applies_to':['claim']},{'id':'MC-RW-15','category':'cross_object','rule':'claim:\x20supplied\x20guard\x20must\x20be\x20in\x20self.guards\x20—\x20E_GUARD_NOT_FOUND\x20(iterates\x20by\x20id_address\x20match)','applies_to':['claim']},{'id':'MC-RW-16','category':'cross_object','rule':'coin_add:\x20Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20phantom\x20T\x20(SDK\x20W_ERROR\x20in\x20operate\x20if\x20mismatch)','applies_to':['coin_add']}];export const REWARD_TRANSLATION_VERSION='1.0.0';export function matchSemanticPattern(a){const b=a['toLowerCase']();return REWARD_SEMANTIC_TO_SCHEMA_RULES['filter'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainRewardCallData(a){const b=[];!a['object']?b['push']('Operation:\x20CREATE\x20Reward\x20(new\x20+\x20create\x20+\x20share)'):b['push']('Operation:\x20OPERATE\x20Reward\x20at\x20'+a['object']);a['claim']&&b['push']('-\x20claim:\x20guard='+a['claim']+'\x20(passport-driven,\x20NO\x20permission\x20check)');a['description']!=null&&b['push']('-\x20description_set:\x20\x22'+a['description']+'\x22\x20(151\x20permission)');a['coin_add']&&b['push']('-\x20coin_add:\x20'+a['coin_add']['amount']+'\x20of\x20'+a['coin_add']['coin_type']+'\x20(153\x20permission)');a['receive']&&b['push']('-\x20receive:\x20token_type='+a['receive']['token_type']+'\x20(154\x20permission,\x20requires\x20Payment)');if(a['guard_add']){b['push']('-\x20guard_add:\x20'+a['guard_add']['length']+'\x20guard(s)\x20(152\x20permission)');for(let c=0x0;c<a['guard_add']['length'];c++){const d=a['guard_add'][c],e=Object['keys'](d['recipient'])[0x0]??'(unknown)',f=inferConstructorName(e,d['amount']['type']);b['push']('\x20\x20['+c+']\x20constructor='+f+',\x20guard='+d['guard']),b['push']('\x20\x20\x20\x20\x20\x20recipient='+e+',\x20amount='+d['amount']['type']+'('+d['amount']['value']+')'),d['expiration_time']!=null&&b['push']('\x20\x20\x20\x20\x20\x20expiration_time='+d['expiration_time']),d['store_from_id']!=null&&b['push']('\x20\x20\x20\x20\x20\x20store_from_id='+d['store_from_id']);}}a['guard_remove_expired']&&b['push']('-\x20guard_remove_expired:\x20true\x20(152\x20permission)');if(a['guard_expiration_time']!==undefined){const h=a['guard_expiration_time'];h===null?b['push']('-\x20guard_expiration_time_add:\x20null\x20(cancel\x20lock,\x20155\x20permission)'):b['push']('-\x20guard_expiration_time_add:\x20'+h+'\x20(155\x20permission,\x20must\x20be\x20>\x20now)');}return a['owner_receive']!=null&&b['push']('-\x20⚠️\x20owner_receive\x20(156\x20permission):\x20unwrap\x20to\x20Permission\x20owner'),a['um']!==undefined&&(a['um']?b['push']('-\x20um_set:\x20'+a['um']+'\x20(157\x20permission,\x20creates\x20object-linker\x20core\x20binding)'):b['push']('-\x20um_none:\x20(157\x20permission,\x20disaffiliates\x20and\x20clears\x20um)')),b['join']('\x0a');}function inferConstructorName(a,b){const c={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'},d=c[a];if(!d)return'(invalid)';const e=String(b)['toUpperCase'](),f=e==='FIXED'?'Fixed':'GuardU64Identifier';return resolveGuardConstructor(d,f)??'(invalid)';}export function explainField(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='field'&&b['type_name']===a);}export function explainOp(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='op'&&b['type_name']===a);}export function explainConstructor(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='constructor'&&b['type_name']===a);}export function getConstraintsByCategory(a){return REWARD_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function explainPermissionIndex(a){if(isRewardBuiltinPermission(a)){const b=getBuiltinPermissionByIndex(a);return b['name']+'\x20('+a+')\x20—\x20'+b['description'];}return'Custom\x20permission\x20index\x20('+a+')\x20—\x20not\x20a\x20Reward\x20builtin\x20(150-157)';}
|
|
@@ -33,6 +33,7 @@ export declare function getAmountThreshold(): bigint;
|
|
|
33
33
|
export declare function formatAmount(value: string | bigint, precision?: bigint): string;
|
|
34
34
|
export declare function collectDefaultWarnings(env: any, data: any): string[];
|
|
35
35
|
export declare const CONFIRMATION_RULES: ConfirmationRule[];
|
|
36
|
+
export declare function resolveOverrideId(rule_id: string, operation_type: string): string | undefined;
|
|
36
37
|
export declare function extractAmount(data: any): string | null;
|
|
37
38
|
export type ReuseRecommendation = "always_reuse" | "strongly_recommended" | "recommended" | "optional";
|
|
38
39
|
export interface ObjectReuseRule {
|