@wowok/agent-mcp 2.7.1 → 2.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/index.js +1 -1
- package/dist/config/runtime.js +1 -238
- package/dist/customer/customer-advice.js +1 -130
- package/dist/customer/index.js +1 -11
- package/dist/customer/industry-risks.js +1 -438
- package/dist/customer/info-puzzle.js +1 -681
- package/dist/customer/order-monitor.js +1 -328
- package/dist/customer/order-strategy.js +1 -373
- package/dist/customer/post-purchase.js +1 -351
- package/dist/customer/preorder-compare.js +1 -34
- package/dist/customer/reminder-system.js +1 -316
- package/dist/customer/risk-assessment.js +1 -397
- package/dist/customer/types.js +1 -13
- package/dist/customer/user-preferences.js +1 -460
- package/dist/evaluation/arbitration-game.d.ts +9 -2
- package/dist/evaluation/arbitration-game.js +1 -48
- package/dist/evaluation/builtins/demand-match.js +1 -153
- package/dist/evaluation/builtins/index.js +1 -10
- package/dist/evaluation/builtins/service-risk.js +1 -55
- package/dist/evaluation/capability.js +1 -13
- package/dist/evaluation/composer.js +1 -40
- package/dist/evaluation/engine.js +1 -175
- package/dist/evaluation/extract.js +1 -115
- package/dist/evaluation/game-strategy.d.ts +27 -0
- package/dist/evaluation/game-strategy.js +1 -0
- package/dist/evaluation/gap.js +1 -100
- package/dist/evaluation/index.d.ts +1 -0
- package/dist/evaluation/index.js +1 -11
- package/dist/evaluation/node-game.d.ts +31 -3
- package/dist/evaluation/node-game.js +1 -57
- package/dist/evaluation/region.js +1 -36
- package/dist/evaluation/types.d.ts +1 -0
- package/dist/evaluation/types.js +1 -1
- package/dist/evaluation/user-injection.js +1 -27
- package/dist/experience/experience-reuse.js +1 -103
- package/dist/experience/index.js +1 -5
- package/dist/experience/intent-distill.js +1 -83
- package/dist/experience/realtime-feedback.js +1 -94
- package/dist/experience/types.js +1 -1
- package/dist/experience/user-profile.js +1 -171
- package/dist/extensions/business-modules.js +1 -287
- package/dist/extensions/capability-manifest.js +1 -781
- package/dist/extensions/constraint-registry.js +1 -198
- package/dist/extensions/index.js +1 -6
- package/dist/extensions/metric-registry.js +1 -257
- package/dist/extensions/mode-evaluator.js +1 -170
- package/dist/extensions/modes.js +1 -499
- package/dist/extensions/registry.js +1 -717
- package/dist/extensions/types.js +1 -1
- package/dist/harness/auto-escalation.js +1 -68
- package/dist/harness/checkpoint.js +1 -129
- package/dist/harness/index.js +1 -78
- package/dist/harness/plan.js +1 -315
- package/dist/harness/recover.js +1 -139
- package/dist/harness/types.js +1 -1
- package/dist/harness/verify.js +1 -237
- package/dist/index.js +1 -273
- package/dist/intent/enrich.js +1 -67
- package/dist/intent/index.js +1 -60
- package/dist/intent/matcher.js +1 -81
- package/dist/intent/store.js +1 -55
- package/dist/intent/types.js +1 -10
- package/dist/knowledge/acquisition-flywheel.js +1 -192
- package/dist/knowledge/allocation-confirm.js +1 -534
- package/dist/knowledge/allocation-context.js +1 -249
- package/dist/knowledge/allocation-ledger.js +1 -463
- package/dist/knowledge/allocation-puzzle.js +1 -298
- package/dist/knowledge/allocation-risk.js +1 -568
- package/dist/knowledge/allocation-templates.js +1 -970
- package/dist/knowledge/allocation-translation.js +1 -585
- package/dist/knowledge/arb-risk.js +1 -210
- package/dist/knowledge/arbitration-confirm.js +1 -559
- package/dist/knowledge/arbitration-context.js +1 -505
- package/dist/knowledge/arbitration-ledger.js +1 -521
- package/dist/knowledge/arbitration-puzzle.js +1 -304
- package/dist/knowledge/arbitration-risk.js +1 -423
- package/dist/knowledge/arbitration-templates.js +1 -276
- package/dist/knowledge/arbitration-translation.js +1 -487
- package/dist/knowledge/arbitration-trust.js +1 -117
- package/dist/knowledge/audit-rules.js +1 -141
- package/dist/knowledge/bridge-risk.js +1 -263
- package/dist/knowledge/contact-risk.js +1 -200
- package/dist/knowledge/contact-templates.js +1 -60
- package/dist/knowledge/demand-confirm.js +1 -206
- package/dist/knowledge/demand-matching.js +1 -132
- package/dist/knowledge/demand-risk.js +1 -240
- package/dist/knowledge/demand-translation.js +1 -354
- package/dist/knowledge/deployment-scanner.js +1 -823
- package/dist/knowledge/dynamic-pricing.js +1 -87
- package/dist/knowledge/examples-scanner-cli.js +1 -26
- package/dist/knowledge/examples-scanner.js +1 -843
- package/dist/knowledge/flywheel-loop.js +1 -404
- package/dist/knowledge/fund-layer.js +1 -973
- package/dist/knowledge/glossary.js +1 -211
- package/dist/knowledge/guard-confirm.js +1 -406
- package/dist/knowledge/guard-context.js +1 -287
- package/dist/knowledge/guard-design-patterns.js +1 -360
- package/dist/knowledge/guard-ledger.js +1 -260
- package/dist/knowledge/guard-lint.js +1 -670
- package/dist/knowledge/guard-migration.js +1 -228
- package/dist/knowledge/guard-puzzle.js +1 -805
- package/dist/knowledge/guard-render.js +1 -700
- package/dist/knowledge/guard-risk.js +1 -1879
- package/dist/knowledge/guard-submission-prompt.js +1 -171
- package/dist/knowledge/guard-templates.js +1 -1105
- package/dist/knowledge/guard-translation.js +1 -1119
- package/dist/knowledge/index.js +1 -436
- package/dist/knowledge/industry-evolution.js +1 -323
- package/dist/knowledge/industry-generalizer.js +1 -381
- package/dist/knowledge/industry-registry.js +1 -174
- package/dist/knowledge/intent-metrics.d.ts +4 -3
- package/dist/knowledge/intent-metrics.js +1 -566
- package/dist/knowledge/machine-confirm.js +1 -559
- package/dist/knowledge/machine-context.js +1 -833
- package/dist/knowledge/machine-ledger.js +1 -338
- package/dist/knowledge/machine-puzzle.js +1 -494
- package/dist/knowledge/machine-render.js +1 -565
- package/dist/knowledge/machine-risk.js +1 -669
- package/dist/knowledge/machine-templates.js +1 -1597
- package/dist/knowledge/machine-topology.js +1 -234
- package/dist/knowledge/machine-translation.js +1 -513
- package/dist/knowledge/mcp-schema-audit-cli.js +1 -45
- package/dist/knowledge/mcp-schema-audit.js +1 -777
- package/dist/knowledge/onchain-constants.js +1 -35
- package/dist/knowledge/order-confirm.js +1 -573
- package/dist/knowledge/order-context.js +1 -390
- package/dist/knowledge/order-ledger.js +1 -341
- package/dist/knowledge/order-puzzle.js +1 -255
- package/dist/knowledge/order-risk.js +1 -653
- package/dist/knowledge/order-templates.js +1 -368
- package/dist/knowledge/order-translation.js +1 -550
- package/dist/knowledge/overrides-loader.js +1 -65
- package/dist/knowledge/passport-confirm.js +1 -531
- package/dist/knowledge/passport-context.js +1 -306
- package/dist/knowledge/passport-ledger.js +1 -282
- package/dist/knowledge/passport-puzzle.js +1 -333
- package/dist/knowledge/passport-risk.js +1 -450
- package/dist/knowledge/passport-templates.js +1 -568
- package/dist/knowledge/passport-translation.js +1 -516
- package/dist/knowledge/payment-risk.js +1 -249
- package/dist/knowledge/permission-confirm.js +1 -426
- package/dist/knowledge/permission-context.js +1 -224
- package/dist/knowledge/permission-ledger.js +1 -403
- package/dist/knowledge/permission-puzzle.js +1 -173
- package/dist/knowledge/permission-risk.js +1 -411
- package/dist/knowledge/permission-templates.js +1 -234
- package/dist/knowledge/permission-translation.js +1 -350
- package/dist/knowledge/personal-risk.js +1 -212
- package/dist/knowledge/process-model.js +1 -160
- package/dist/knowledge/progress-confirm.js +1 -456
- package/dist/knowledge/progress-context.js +1 -452
- package/dist/knowledge/progress-ledger.js +1 -330
- package/dist/knowledge/progress-puzzle.js +1 -219
- package/dist/knowledge/progress-risk.js +1 -461
- package/dist/knowledge/progress-templates.js +1 -228
- package/dist/knowledge/progress-translation.js +1 -405
- package/dist/knowledge/proof-confirm.js +1 -187
- package/dist/knowledge/proof-risk.js +1 -207
- package/dist/knowledge/proof-translation.js +1 -283
- package/dist/knowledge/registrar-risk.js +1 -217
- package/dist/knowledge/repository-confirm.js +1 -286
- package/dist/knowledge/repository-risk.js +1 -373
- package/dist/knowledge/repository-translation.js +1 -445
- package/dist/knowledge/reputation-rules.js +1 -99
- package/dist/knowledge/resource-risk.js +1 -157
- package/dist/knowledge/reward-confirm.js +1 -526
- package/dist/knowledge/reward-context.js +1 -504
- package/dist/knowledge/reward-ledger.js +1 -502
- package/dist/knowledge/reward-puzzle.js +1 -300
- package/dist/knowledge/reward-risk.js +1 -627
- package/dist/knowledge/reward-templates.js +1 -197
- package/dist/knowledge/reward-translation.js +1 -501
- package/dist/knowledge/safety-rules.js +1 -404
- package/dist/knowledge/scenario-modes.js +1 -321
- package/dist/knowledge/service-confirm.js +1 -807
- package/dist/knowledge/service-context.js +1 -403
- package/dist/knowledge/service-ledger.js +1 -609
- package/dist/knowledge/service-puzzle.js +1 -236
- package/dist/knowledge/service-risk.js +1 -651
- package/dist/knowledge/service-templates.js +1 -456
- package/dist/knowledge/service-translation.js +1 -622
- package/dist/knowledge/template-registry.js +1 -353
- package/dist/knowledge/tool-constraints.js +1 -195
- package/dist/knowledge/tools-reference.js +1 -178
- package/dist/knowledge/treasury-confirm.js +1 -512
- package/dist/knowledge/treasury-context.js +1 -363
- package/dist/knowledge/treasury-ledger.js +1 -300
- package/dist/knowledge/treasury-puzzle.js +1 -216
- package/dist/knowledge/treasury-risk.js +1 -440
- package/dist/knowledge/treasury-templates.js +1 -358
- package/dist/knowledge/treasury-translation.js +1 -498
- package/dist/knowledge/trust-metrics.js +1 -198
- package/dist/knowledge/util-risk.js +1 -135
- package/dist/loop-engineering/aggregate.js +1 -132
- package/dist/loop-engineering/context-collect.js +1 -83
- package/dist/loop-engineering/diagnose.js +1 -273
- package/dist/loop-engineering/improve.js +1 -405
- package/dist/loop-engineering/index.js +1 -4
- package/dist/loop-engineering/pipeline.js +1 -56
- package/dist/mode-market/index.js +1 -3
- package/dist/mode-market/registry.js +1 -124
- package/dist/mode-market/review.js +1 -214
- package/dist/mode-market/submission.js +1 -85
- package/dist/participation/collaborator-interest.d.ts +23 -0
- package/dist/participation/collaborator-interest.js +1 -0
- package/dist/participation/customer-interest.d.ts +25 -0
- package/dist/participation/customer-interest.js +1 -0
- package/dist/participation/merchant-interest.js +1 -100
- package/dist/participation/radar-core.d.ts +13 -3
- package/dist/participation/radar-core.js +1 -269
- package/dist/participation/supplier-interest.d.ts +25 -0
- package/dist/participation/supplier-interest.js +1 -0
- package/dist/persona/analyzer.js +1 -66
- package/dist/persona/bridge.js +1 -86
- package/dist/persona/defaults.js +1 -195
- package/dist/persona/experience-bridge.js +1 -23
- package/dist/persona/index.js +1 -71
- package/dist/persona/model.js +1 -111
- package/dist/persona/store.js +1 -62
- package/dist/persona/types.d.ts +3 -1
- package/dist/persona/types.js +1 -5
- package/dist/project/business-puzzle.js +1 -383
- package/dist/project/context-assembly.js +1 -254
- package/dist/project/deployment-bridge.js +1 -120
- package/dist/project/deployment-doc.js +1 -1126
- package/dist/project/edit-planner.js +1 -1342
- package/dist/project/evaluation.js +1 -2011
- package/dist/project/game-theory.js +1 -177
- package/dist/project/graph-builder.js +1 -656
- package/dist/project/graph.js +1 -340
- package/dist/project/handlers.js +1 -1784
- package/dist/project/index.d.ts +1 -0
- package/dist/project/index.js +1 -301
- package/dist/project/intent-analyzer.js +1 -149
- package/dist/project/machine-nodes.js +1 -36
- package/dist/project/merchant-guide.js +1 -264
- package/dist/project/migration.js +1 -125
- package/dist/project/mode-actions.js +1 -309
- package/dist/project/namespace.js +1 -206
- package/dist/project/participation-radar.js +1 -428
- package/dist/project/pipeline-actions.js +1 -109
- package/dist/project/project-store.js +1 -422
- package/dist/project/query.js +1 -153
- package/dist/project/reverse-mapping.d.ts +34 -0
- package/dist/project/reverse-mapping.js +1 -0
- package/dist/project/risk-aggregator.js +1 -295
- package/dist/project/rollback-policy.js +1 -290
- package/dist/project/semantic-assembler.js +1 -345
- package/dist/project/semantic-graph.js +1 -292
- package/dist/project/stage-gate.js +1 -369
- package/dist/project/substep-trace.js +1 -332
- package/dist/project/task-tracker.js +1 -78
- package/dist/role/derivation.d.ts +18 -0
- package/dist/role/derivation.js +1 -0
- package/dist/role/index.d.ts +5 -0
- package/dist/role/index.js +1 -0
- package/dist/role/model.d.ts +8 -0
- package/dist/role/model.js +1 -0
- package/dist/role/resolution.d.ts +11 -0
- package/dist/role/resolution.js +1 -0
- package/dist/role/types.d.ts +11 -0
- package/dist/role/types.js +1 -0
- package/dist/rules.js +1 -52
- package/dist/safety/confirm-gate.js +1 -88
- package/dist/safety/index.js +1 -3
- package/dist/safety/preview.js +1 -52
- package/dist/schema/call/allocation.js +1 -34
- package/dist/schema/call/arbitration.js +1 -113
- package/dist/schema/call/base.d.ts +15 -15
- package/dist/schema/call/base.js +1 -370
- package/dist/schema/call/bridge-handler.js +1 -265
- package/dist/schema/call/bridge.d.ts +7 -7
- package/dist/schema/call/bridge.js +1 -458
- package/dist/schema/call/contact.js +1 -37
- package/dist/schema/call/demand.js +1 -47
- package/dist/schema/call/guard.js +1 -161
- package/dist/schema/call/handler.js +1 -322
- package/dist/schema/call/index.js +1 -20
- package/dist/schema/call/machine.js +1 -193
- package/dist/schema/call/order.js +1 -35
- package/dist/schema/call/payment.js +1 -37
- package/dist/schema/call/permission-handler.js +1 -54
- package/dist/schema/call/permission.js +1 -105
- package/dist/schema/call/personal.js +1 -78
- package/dist/schema/call/progress.js +1 -47
- package/dist/schema/call/proof.js +1 -33
- package/dist/schema/call/repository.js +1 -77
- package/dist/schema/call/reward.js +1 -30
- package/dist/schema/call/semantic.js +1 -1679
- package/dist/schema/call/service.js +1 -184
- package/dist/schema/call/treasury.js +1 -71
- package/dist/schema/common/index.js +1 -407
- package/dist/schema/config/index.js +1 -68
- package/dist/schema/evaluation/index.d.ts +213 -16
- package/dist/schema/evaluation/index.js +1 -356
- package/dist/schema/index.js +1 -17
- package/dist/schema/intent-radar/index.d.ts +13 -13
- package/dist/schema/intent-radar/index.js +1 -89
- package/dist/schema/local/index.d.ts +21 -21
- package/dist/schema/local/index.js +1 -927
- package/dist/schema/local/wip.js +1 -187
- package/dist/schema/messenger/index.d.ts +7 -7
- package/dist/schema/messenger/index.js +1 -475
- package/dist/schema/operations.d.ts +7 -7
- package/dist/schema/operations.js +1 -520
- package/dist/schema/persona/index.d.ts +54 -54
- package/dist/schema/persona/index.js +1 -148
- package/dist/schema/project/index.d.ts +94 -48
- package/dist/schema/project/index.js +1 -2057
- package/dist/schema/query/index.d.ts +423 -7
- package/dist/schema/query/index.js +1 -1646
- package/dist/schema/schema-query/index.js +1 -104
- package/dist/schema/schema-version.js +1 -76
- package/dist/schema/sync-layer4.js +1 -286
- package/dist/schema/task-status.js +1 -36
- package/dist/schema/trust/index.js +1 -314
- package/dist/schema/utils/guard-parser.js +1 -419
- package/dist/schema/utils/guard-query-utils.js +1 -46
- package/dist/schema/utils/node-parser.js +1 -369
- package/dist/schema/utils/object-type-utils.js +1 -35
- package/dist/schema/utils/permission-index-utils.js +1 -7
- package/dist/schema/utils/permission-machine-check.js +1 -121
- package/dist/schema/utils/skills-recommendation.js +1 -77
- package/dist/schema-query/index.js +1 -810
- package/dist/schemas/account_operation.output.json +5 -2
- package/dist/schemas/bridge_operation.output.json +5 -2
- package/dist/schemas/evaluation_operation.output.json +112 -7
- package/dist/schemas/evaluation_operation.schema.json +93 -6
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/intent_radar.output.json +4 -1
- package/dist/schemas/intent_radar.schema.json +4 -1
- package/dist/schemas/local_info_operation.output.json +5 -2
- package/dist/schemas/local_mark_operation.output.json +5 -2
- package/dist/schemas/messenger_operation.output.json +5 -2
- package/dist/schemas/onchain_events.output.json +5 -2
- package/dist/schemas/onchain_operations.output.json +5 -2
- package/dist/schemas/onchain_operations.schema.json +4 -4
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
- package/dist/schemas/onchain_operations_machine.schema.json +2 -2
- package/dist/schemas/onchain_operations_service.schema.json +1 -1
- package/dist/schemas/onchain_table_data.output.json +6 -3
- package/dist/schemas/persona_operation.output.json +4 -1
- package/dist/schemas/persona_operation.schema.json +4 -1
- package/dist/schemas/project_operation.output.json +28 -8
- package/dist/schemas/query_toolkit.output.json +8 -5
- package/dist/schemas/wowok_buildin_info.output.json +132 -0
- package/dist/schemas/wowok_buildin_info.schema.json +14 -0
- package/dist/telemetry/index.js +1 -112
- package/dist/telemetry/redact.js +1 -23
- package/dist/telemetry/storage.js +1 -80
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -74
- package/dist/tools/handlers/evaluation.js +1 -123
- package/dist/tools/handlers/file-export.js +1 -90
- package/dist/tools/handlers/intent-radar.js +1 -76
- package/dist/tools/handlers/local.js +1 -53
- package/dist/tools/handlers/messenger.js +1 -188
- package/dist/tools/handlers/onchain.js +1 -1180
- package/dist/tools/handlers/persona.js +1 -89
- package/dist/tools/handlers/project.js +1 -211
- package/dist/tools/handlers/query.js +1 -434
- package/dist/tools/handlers/schema-query.js +1 -176
- package/dist/tools/handlers/task-status.js +1 -26
- package/dist/tools/handlers/trust.js +1 -380
- package/dist/tools/handlers/wip.js +1 -90
- package/dist/tools/index.js +1 -1382
- package/dist/tools/retry.js +1 -85
- package/dist/tools/rules-hook.js +1 -23
- package/dist/tools/shared.js +1 -130
- package/dist/tools/types.js +1 -1
- package/dist/tools/upgrade-check.d.ts +19 -0
- package/dist/tools/upgrade-check.js +1 -0
- package/dist/tools/wip-deploy-assist.js +1 -306
- package/dist/tools/wrap.js +1 -500
- package/package.json +4 -2
|
@@ -1,358 +1 @@
|
|
|
1
|
-
export const TREASURY_TEMPLATES = [
|
|
2
|
-
{
|
|
3
|
-
id: "T-T-01",
|
|
4
|
-
name: "Basic Treasury (owner-only deposit/withdraw)",
|
|
5
|
-
description: "Single-owner Treasury with no external Guard. Owner has all permissions. Suitable for solo operators or simple team funds.",
|
|
6
|
-
applicable_scenes: ["treasury_fund_collection", "treasury_um_delegation"],
|
|
7
|
-
industry_tags: ["universal", "solo"],
|
|
8
|
-
params: [
|
|
9
|
-
{ name: "treasury_name", type: "string", description: "Name for the new Treasury object", required: true },
|
|
10
|
-
{ name: "owner_address", type: "address", description: "Owner address (becomes admin)", required: true },
|
|
11
|
-
{ name: "coin_type", type: "coin_type", description: "Coin type T (e.g. 0x2::wow::WOW)", required: true },
|
|
12
|
-
{ name: "description", type: "string", description: "Treasury description", required: true },
|
|
13
|
-
{ name: "permission_name", type: "string", description: "Name for the new Permission object", required: true },
|
|
14
|
-
],
|
|
15
|
-
body: (p) => ({
|
|
16
|
-
object: {
|
|
17
|
-
name: p.treasury_name,
|
|
18
|
-
type_parameter: p.coin_type,
|
|
19
|
-
permission: {
|
|
20
|
-
name: p.permission_name,
|
|
21
|
-
description: `Permission for ${p.treasury_name}`,
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
description: p.description,
|
|
25
|
-
_permission_config: {
|
|
26
|
-
TREASURY_NEW: [p.owner_address],
|
|
27
|
-
TREASURY_DESCRIPTION: [p.owner_address],
|
|
28
|
-
TREASURY_DEPOSIT: [p.owner_address],
|
|
29
|
-
TREASURY_RECEIVE: [p.owner_address],
|
|
30
|
-
TREASURY_WITHDRAW: [p.owner_address],
|
|
31
|
-
TREASURY_OWNER_RECEIVE: [p.owner_address],
|
|
32
|
-
TREASURY_UM: [p.owner_address],
|
|
33
|
-
},
|
|
34
|
-
}),
|
|
35
|
-
notes: [
|
|
36
|
-
"All permissions granted to owner only; suitable for solo treasury",
|
|
37
|
-
"No external Guard configured; all deposits/withdraws via Permission",
|
|
38
|
-
"To enable external operations later, use T-T-03 pattern",
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
id: "T-T-02",
|
|
43
|
-
name: "Multi-role Treasury (separated depositor/withdrawer)",
|
|
44
|
-
description: "Treasury with separated depositor and withdrawer roles. Enforces separation of duties. Suitable for project budget management.",
|
|
45
|
-
applicable_scenes: ["treasury_fund_collection", "treasury_permission_sharing"],
|
|
46
|
-
industry_tags: ["universal", "team", "project"],
|
|
47
|
-
params: [
|
|
48
|
-
{ name: "treasury_name", type: "string", description: "Name for the new Treasury object", required: true },
|
|
49
|
-
{ name: "owner_address", type: "address", description: "Owner address (full control)", required: true },
|
|
50
|
-
{ name: "depositor_addresses", type: "string[]", description: "Addresses allowed to deposit (TREASURY_DEPOSIT=252)", required: true },
|
|
51
|
-
{ name: "withdrawer_addresses", type: "string[]", description: "Addresses allowed to withdraw (TREASURY_WITHDRAW=254)", required: true },
|
|
52
|
-
{ name: "receiver_address", type: "address", description: "Address allowed to receive CoinWrapper (TREASURY_RECEIVE=253)", required: true },
|
|
53
|
-
{ name: "coin_type", type: "coin_type", description: "Coin type T", required: true },
|
|
54
|
-
{ name: "description", type: "string", description: "Treasury description", required: true },
|
|
55
|
-
{ name: "permission_name", type: "string", description: "Name for the new Permission object", required: true },
|
|
56
|
-
],
|
|
57
|
-
body: (p) => ({
|
|
58
|
-
object: {
|
|
59
|
-
name: p.treasury_name,
|
|
60
|
-
type_parameter: p.coin_type,
|
|
61
|
-
permission: {
|
|
62
|
-
name: p.permission_name,
|
|
63
|
-
description: `Permission for ${p.treasury_name} (multi-role)`,
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
description: p.description,
|
|
67
|
-
_permission_config: {
|
|
68
|
-
TREASURY_NEW: [p.owner_address],
|
|
69
|
-
TREASURY_DESCRIPTION: [p.owner_address],
|
|
70
|
-
TREASURY_DEPOSIT: p.depositor_addresses,
|
|
71
|
-
TREASURY_RECEIVE: [p.receiver_address],
|
|
72
|
-
TREASURY_WITHDRAW: p.withdrawer_addresses,
|
|
73
|
-
TREASURY_OWNER_RECEIVE: [p.owner_address],
|
|
74
|
-
TREASURY_UM: [p.owner_address],
|
|
75
|
-
},
|
|
76
|
-
}),
|
|
77
|
-
notes: [
|
|
78
|
-
"Separation of duties: deposit and withdraw roles assigned to different addresses",
|
|
79
|
-
"Use distinct addresses for depositor_addresses and withdrawer_addresses",
|
|
80
|
-
"Owner retains full control (um_set, owner_receive, description_set)",
|
|
81
|
-
],
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
id: "T-T-03",
|
|
85
|
-
name: "External operations Treasury (with Guard protection)",
|
|
86
|
-
description: "Treasury with external_deposit_guard and/or external_withdraw_guard configured. Allows external users to deposit/withdraw via Guard + Passport without Permission.",
|
|
87
|
-
applicable_scenes: ["treasury_external_ops", "treasury_guard_protection"],
|
|
88
|
-
industry_tags: ["finance", "crowdfunding", "refund", "compensation"],
|
|
89
|
-
params: [
|
|
90
|
-
{ name: "treasury_name", type: "string", description: "Name for the new Treasury object", required: true },
|
|
91
|
-
{ name: "owner_address", type: "address", description: "Owner address", required: true },
|
|
92
|
-
{ name: "coin_type", type: "coin_type", description: "Coin type T", required: true },
|
|
93
|
-
{ name: "description", type: "string", description: "Treasury description", required: true },
|
|
94
|
-
{ name: "permission_name", type: "string", description: "Name for the new Permission object", required: true },
|
|
95
|
-
{ name: "external_deposit_guards", type: "string[]", description: "Guard addresses/names for external deposit (identifier=Optional)", required: false },
|
|
96
|
-
{ name: "external_withdraw_guards", type: "string[]", description: "Guard addresses/names for external withdraw (identifier=Required)", required: false },
|
|
97
|
-
{ name: "withdraw_identifier_index", type: "number", description: "Guard table identifier index for withdraw amount (u8, required for withdraw guards)", required: false, default: 0 },
|
|
98
|
-
{ name: "store_from_id_index", type: "number", description: "Optional store_from_id index for audit trail", required: false },
|
|
99
|
-
],
|
|
100
|
-
body: (p) => {
|
|
101
|
-
const result = {
|
|
102
|
-
object: {
|
|
103
|
-
name: p.treasury_name,
|
|
104
|
-
type_parameter: p.coin_type,
|
|
105
|
-
permission: {
|
|
106
|
-
name: p.permission_name,
|
|
107
|
-
description: `Permission for ${p.treasury_name} (external ops)`,
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
description: p.description,
|
|
111
|
-
_permission_config: {
|
|
112
|
-
TREASURY_NEW: [p.owner_address],
|
|
113
|
-
TREASURY_EXTERNAL_DEPOSIT_GUARD: [p.owner_address],
|
|
114
|
-
TREASURY_EXTERNAL_WITHDRAW_GUARD: [p.owner_address],
|
|
115
|
-
TREASURY_OWNER_RECEIVE: [p.owner_address],
|
|
116
|
-
TREASURY_UM: [p.owner_address],
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
if (p.external_deposit_guards && Array.isArray(p.external_deposit_guards) && p.external_deposit_guards.length > 0) {
|
|
120
|
-
result.external_deposit_guard = {
|
|
121
|
-
op: "add",
|
|
122
|
-
guards: p.external_deposit_guards.map(g => ({
|
|
123
|
-
guard: g,
|
|
124
|
-
identifier: null,
|
|
125
|
-
store_from_id: p.store_from_id_index !== undefined ? p.store_from_id_index : null,
|
|
126
|
-
})),
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
if (p.external_withdraw_guards && Array.isArray(p.external_withdraw_guards) && p.external_withdraw_guards.length > 0) {
|
|
130
|
-
if (p.withdraw_identifier_index === undefined) {
|
|
131
|
-
throw new Error("withdraw_identifier_index is REQUIRED when external_withdraw_guards is specified (u8, not Option)");
|
|
132
|
-
}
|
|
133
|
-
result.external_withdraw_guard = {
|
|
134
|
-
op: "add",
|
|
135
|
-
guards: p.external_withdraw_guards.map(g => ({
|
|
136
|
-
guard: g,
|
|
137
|
-
identifier: p.withdraw_identifier_index,
|
|
138
|
-
store_from_id: p.store_from_id_index !== undefined ? p.store_from_id_index : null,
|
|
139
|
-
})),
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
return result;
|
|
143
|
-
},
|
|
144
|
-
notes: [
|
|
145
|
-
"Asymmetric identifier: deposit=Option<u8> (null OK), withdraw=u8 (REQUIRED)",
|
|
146
|
-
"Pair with Guard objects that have appropriate table fields (number-type for identifier, address-compatible for store_from_id)",
|
|
147
|
-
"External operations bypass Permission; ensure Guard rules are correctly configured",
|
|
148
|
-
"Use T-T-04 style for Service-shared Permission if needed",
|
|
149
|
-
],
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
id: "T-T-04",
|
|
153
|
-
name: "Service-shared Treasury (shared Permission with Service)",
|
|
154
|
-
description: "Treasury that shares its Permission object with a Service. Single admin team manages both Service and Treasury operations.",
|
|
155
|
-
applicable_scenes: ["treasury_permission_sharing"],
|
|
156
|
-
industry_tags: ["service", "retail", "ecommerce"],
|
|
157
|
-
params: [
|
|
158
|
-
{ name: "treasury_name", type: "string", description: "Name for the new Treasury object", required: true },
|
|
159
|
-
{ name: "owner_address", type: "address", description: "Owner address (Service and Treasury share owner)", required: true },
|
|
160
|
-
{ name: "coin_type", type: "coin_type", description: "Coin type T", required: true },
|
|
161
|
-
{ name: "description", type: "string", description: "Treasury description", required: true },
|
|
162
|
-
{ name: "existing_permission_address", type: "address", description: "Existing Permission object address (already applied to Service)", required: true },
|
|
163
|
-
{ name: "service_address", type: "address", description: "Service object address that shares this Permission", required: false },
|
|
164
|
-
],
|
|
165
|
-
body: (p) => ({
|
|
166
|
-
object: {
|
|
167
|
-
name: p.treasury_name,
|
|
168
|
-
type_parameter: p.coin_type,
|
|
169
|
-
permission: p.existing_permission_address,
|
|
170
|
-
},
|
|
171
|
-
description: p.description,
|
|
172
|
-
_permission_config: {
|
|
173
|
-
_note: "Permission shared with Service; do NOT reconfigure indexes 300-320 (Service range)",
|
|
174
|
-
TREASURY_DEPOSIT: [p.owner_address],
|
|
175
|
-
TREASURY_RECEIVE: [p.owner_address],
|
|
176
|
-
TREASURY_WITHDRAW: [p.owner_address],
|
|
177
|
-
TREASURY_OWNER_RECEIVE: [p.owner_address],
|
|
178
|
-
},
|
|
179
|
-
_integration: {
|
|
180
|
-
service: p.service_address ?? "(specify service_address)",
|
|
181
|
-
flow: "Service collects payments → Allocator splits → Treasury.receive (253) → balance",
|
|
182
|
-
},
|
|
183
|
-
}),
|
|
184
|
-
notes: [
|
|
185
|
-
"Shares Permission with an existing Service; admin changes affect both objects",
|
|
186
|
-
"Verify Permission indexes 250-258 (Treasury) and 300-320 (Service) are assigned to intended entities",
|
|
187
|
-
"Use this when a single business unit operates both a Service storefront and a Treasury fund pool",
|
|
188
|
-
],
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
id: "T-T-05",
|
|
192
|
-
name: "Allocation fund-pool Treasury (referenced by Allocator)",
|
|
193
|
-
description: "Treasury configured as Allocation's sharing.who=Entity target. Receives automated fund splits from Service revenue. Requires TREASURY_RECEIVE (253) for intake.",
|
|
194
|
-
applicable_scenes: ["treasury_fund_collection", "treasury_permission_sharing"],
|
|
195
|
-
industry_tags: ["service", "ecommerce", "marketplace"],
|
|
196
|
-
params: [
|
|
197
|
-
{ name: "treasury_name", type: "string", description: "Name for the new Treasury object", required: true },
|
|
198
|
-
{ name: "owner_address", type: "address", description: "Owner address (Service owner)", required: true },
|
|
199
|
-
{ name: "receiver_address", type: "address", description: "Address allowed to call receive (253) for CoinWrapper intake", required: true },
|
|
200
|
-
{ name: "coin_type", type: "coin_type", description: "Coin type T (must match Service coin type)", required: true },
|
|
201
|
-
{ name: "description", type: "string", description: "Treasury description", required: true },
|
|
202
|
-
{ name: "permission_name", type: "string", description: "Name for the new Permission object", required: true },
|
|
203
|
-
{ name: "allocator_address", type: "address", description: "Allocator object address (references this Treasury as Entity target)", required: false },
|
|
204
|
-
],
|
|
205
|
-
body: (p) => ({
|
|
206
|
-
object: {
|
|
207
|
-
name: p.treasury_name,
|
|
208
|
-
type_parameter: p.coin_type,
|
|
209
|
-
permission: {
|
|
210
|
-
name: p.permission_name,
|
|
211
|
-
description: `Permission for ${p.treasury_name} (Allocation target)`,
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
description: p.description,
|
|
215
|
-
_permission_config: {
|
|
216
|
-
TREASURY_RECEIVE: [p.receiver_address],
|
|
217
|
-
TREASURY_OWNER_RECEIVE: [p.owner_address],
|
|
218
|
-
TREASURY_WITHDRAW: [p.owner_address],
|
|
219
|
-
},
|
|
220
|
-
_integration: {
|
|
221
|
-
allocator: p.allocator_address ?? "(specify allocator_address)",
|
|
222
|
-
flow: "Service.payment → Allocator.alloc → CoinWrapper to Treasury → Treasury.receive (253) → balance",
|
|
223
|
-
_note: "Without TREASURY_RECEIVE (253) granted, CoinWrapper will accumulate without entering balance",
|
|
224
|
-
},
|
|
225
|
-
}),
|
|
226
|
-
notes: [
|
|
227
|
-
"CRITICAL: TREASURY_RECEIVE (253) must be granted to a trusted operator for regular intake",
|
|
228
|
-
"Configure a scheduled job to call receive periodically (e.g., daily) to convert CoinWrapper to balance",
|
|
229
|
-
"Allocator's sharing.who=Entity must point to this Treasury's address",
|
|
230
|
-
"Pair with guard template tpl_allocator_treasury_personal if needed",
|
|
231
|
-
],
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
id: "T-T-06",
|
|
235
|
-
name: "Receivable Treasury (deposit + owner_receive only)",
|
|
236
|
-
description: "Minimal Treasury that only accepts deposits and forwards received assets to Permission owner via owner_receive. No withdraw role. Suitable for fee sinks or donation pools.",
|
|
237
|
-
applicable_scenes: ["treasury_fund_collection", "treasury_owner_receive"],
|
|
238
|
-
industry_tags: ["universal", "fee_sink", "donation"],
|
|
239
|
-
params: [
|
|
240
|
-
{ name: "treasury_name", type: "string", description: "Name for the new Treasury object", required: true },
|
|
241
|
-
{ name: "owner_address", type: "address", description: "Owner address (receives forwarded assets)", required: true },
|
|
242
|
-
{ name: "depositor_addresses", type: "string[]", description: "Addresses allowed to deposit (TREASURY_DEPOSIT=252)", required: true },
|
|
243
|
-
{ name: "coin_type", type: "coin_type", description: "Coin type T", required: true },
|
|
244
|
-
{ name: "description", type: "string", description: "Treasury description", required: true },
|
|
245
|
-
{ name: "permission_name", type: "string", description: "Name for the new Permission object", required: true },
|
|
246
|
-
],
|
|
247
|
-
body: (p) => ({
|
|
248
|
-
object: {
|
|
249
|
-
name: p.treasury_name,
|
|
250
|
-
type_parameter: p.coin_type,
|
|
251
|
-
permission: {
|
|
252
|
-
name: p.permission_name,
|
|
253
|
-
description: `Permission for ${p.treasury_name} (receivable-only)`,
|
|
254
|
-
},
|
|
255
|
-
},
|
|
256
|
-
description: p.description,
|
|
257
|
-
_permission_config: {
|
|
258
|
-
TREASURY_DEPOSIT: p.depositor_addresses,
|
|
259
|
-
TREASURY_RECEIVE: [p.owner_address],
|
|
260
|
-
TREASURY_OWNER_RECEIVE: [p.owner_address],
|
|
261
|
-
},
|
|
262
|
-
_workflow: {
|
|
263
|
-
step_1: "Depositors call treasury.deposit (252) to add funds",
|
|
264
|
-
step_2: "Owner calls treasury.receive (253) to convert any CoinWrapper to balance",
|
|
265
|
-
step_3: "Owner calls treasury.owner_receive (257) to forward balance to owner address",
|
|
266
|
-
_note: "No withdraw path; owner_receive is the only fund exit",
|
|
267
|
-
},
|
|
268
|
-
}),
|
|
269
|
-
notes: [
|
|
270
|
-
"No TREASURY_WITHDRAW (254) granted; funds exit only via owner_receive (257)",
|
|
271
|
-
"owner_receive does NOT write to history; rely on Payment records for audit",
|
|
272
|
-
"Suitable for fee sinks, donation pools, or auto-forwarding revenue",
|
|
273
|
-
],
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
id: "T-T-07",
|
|
277
|
-
name: "Exception Compensation Treasury (scene-bound Payment withdraw)",
|
|
278
|
-
description: "Treasury for exception branch compensation: withdraws create scene-bound Payments with for_object + for_guard + index binding. Enables auto-compensation for delays, defects, or service exceptions.",
|
|
279
|
-
applicable_scenes: ["treasury_fund_collection", "treasury_um_delegation"],
|
|
280
|
-
industry_tags: ["retail", "travel", "rental", "freelance", "ecommerce"],
|
|
281
|
-
params: [
|
|
282
|
-
{ name: "treasury_name", type: "string", description: "Name for the new Treasury object", required: true },
|
|
283
|
-
{ name: "owner_address", type: "address", description: "Owner address (service provider, becomes admin)", required: true },
|
|
284
|
-
{ name: "coin_type", type: "coin_type", description: "Coin type T (e.g. 0x2::wow::WOW)", required: true },
|
|
285
|
-
{ name: "description", type: "string", description: "Treasury description (e.g., 'Compensation fund for delivery delays')", required: true },
|
|
286
|
-
{ name: "permission_name", type: "string", description: "Name for the new Permission object", required: true },
|
|
287
|
-
{ name: "withdrawer_address", type: "address", description: "Address authorized to withdraw compensations (can be same as owner)", required: true },
|
|
288
|
-
{ name: "external_withdraw_guard", type: "address", description: "Guard address for external_withdraw (verifies exception conditions + Payment binding)", required: true },
|
|
289
|
-
],
|
|
290
|
-
body: (p) => ({
|
|
291
|
-
object: {
|
|
292
|
-
name: p.treasury_name,
|
|
293
|
-
type_parameter: p.coin_type,
|
|
294
|
-
permission: {
|
|
295
|
-
name: p.permission_name,
|
|
296
|
-
description: `Permission for ${p.treasury_name}`,
|
|
297
|
-
indexes: [
|
|
298
|
-
{ index: 253, name: "TREASURY_DEPOSIT", mark: p.owner_address, description: "Owner deposits funds" },
|
|
299
|
-
{ index: 254, name: "TREASURY_WITHDRAW", mark: p.withdrawer_address, description: "Withdraw for exception compensation (creates scene-bound Payment)" },
|
|
300
|
-
{ index: 256, name: "TREASURY_EXTERNAL_WITHDRAW", mark: p.withdrawer_address, description: "External withdraw with guard (verifies exception + Payment binding)" },
|
|
301
|
-
{ index: 257, name: "TREASURY_OWNER_RECEIVE", mark: p.owner_address, description: "Owner receives remaining funds" },
|
|
302
|
-
],
|
|
303
|
-
},
|
|
304
|
-
},
|
|
305
|
-
description: p.description,
|
|
306
|
-
}),
|
|
307
|
-
notes: [
|
|
308
|
-
"VERIFIED: treasury.move#L249-264 (withdraw creates Payment via payment::new_singleton + from_object_set)",
|
|
309
|
-
"VERIFIED: treasury.move#L415-418 (withdraw<T> sends to recipient with PaymentInfo)",
|
|
310
|
-
"Payment created has PaymentInfo(for_object=order, for_guard=exception_guard, index=current_progress)",
|
|
311
|
-
"ANTI-REUSE: for_object + for_guard + index binds Payment to specific context (payment.move#L66-71)",
|
|
312
|
-
"VERIFIER-EVIDENCE: customer submits Payment via Passport, Guard verifies binding fields match",
|
|
313
|
-
"Use with tpl_payment_exception_compensation (guard-templates.ts) for the exception branch guard",
|
|
314
|
-
"Suitable for: delivery delay compensation, defect refund, service-level agreement penalties",
|
|
315
|
-
],
|
|
316
|
-
},
|
|
317
|
-
];
|
|
318
|
-
export const TREASURY_TEMPLATES_VERSION = "1.0.0";
|
|
319
|
-
export function getAllTreasuryTemplates() {
|
|
320
|
-
return [...TREASURY_TEMPLATES];
|
|
321
|
-
}
|
|
322
|
-
export function getTemplateById(id) {
|
|
323
|
-
return TREASURY_TEMPLATES.find(t => t.id === id);
|
|
324
|
-
}
|
|
325
|
-
export function getTemplatesByScene(sceneId) {
|
|
326
|
-
return TREASURY_TEMPLATES.filter(t => t.applicable_scenes.includes(sceneId));
|
|
327
|
-
}
|
|
328
|
-
export function getTemplatesByIndustry(industry) {
|
|
329
|
-
return TREASURY_TEMPLATES.filter(t => t.industry_tags.includes(industry) || t.industry_tags.includes("universal"));
|
|
330
|
-
}
|
|
331
|
-
export function suggestTemplateForScene(sceneId) {
|
|
332
|
-
const matches = getTemplatesByScene(sceneId);
|
|
333
|
-
return matches.length > 0 ? matches[0] : undefined;
|
|
334
|
-
}
|
|
335
|
-
export function listTemplates() {
|
|
336
|
-
return TREASURY_TEMPLATES.map(t => ({
|
|
337
|
-
id: t.id,
|
|
338
|
-
name: t.name,
|
|
339
|
-
description: t.description,
|
|
340
|
-
scenes: t.applicable_scenes,
|
|
341
|
-
}));
|
|
342
|
-
}
|
|
343
|
-
export function fillTemplate(templateId, params) {
|
|
344
|
-
const tpl = getTemplateById(templateId);
|
|
345
|
-
if (!tpl)
|
|
346
|
-
return { ok: false, error: `Template ${templateId} not found` };
|
|
347
|
-
for (const p of tpl.params) {
|
|
348
|
-
if (p.required && !(p.name in params)) {
|
|
349
|
-
return { ok: false, error: `Missing required param: ${p.name}` };
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
try {
|
|
353
|
-
return { ok: true, body: tpl.body(params) };
|
|
354
|
-
}
|
|
355
|
-
catch (e) {
|
|
356
|
-
return { ok: false, error: `Template body execution failed: ${e.message}` };
|
|
357
|
-
}
|
|
358
|
-
}
|
|
1
|
+
export const TREASURY_TEMPLATES=[{'id':'T-T-01','name':'Basic\x20Treasury\x20(owner-only\x20deposit/withdraw)','description':'Single-owner\x20Treasury\x20with\x20no\x20external\x20Guard.\x20Owner\x20has\x20all\x20permissions.\x20Suitable\x20for\x20solo\x20operators\x20or\x20simple\x20team\x20funds.','applicable_scenes':['treasury_fund_collection','treasury_um_delegation'],'industry_tags':['universal','solo'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(becomes\x20admin)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_DESCRIPTION':[a['owner_address']],'TREASURY_DEPOSIT':[a['owner_address']],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}}),'notes':['All\x20permissions\x20granted\x20to\x20owner\x20only;\x20suitable\x20for\x20solo\x20treasury','No\x20external\x20Guard\x20configured;\x20all\x20deposits/withdraws\x20via\x20Permission','To\x20enable\x20external\x20operations\x20later,\x20use\x20T-T-03\x20pattern']},{'id':'T-T-02','name':'Multi-role\x20Treasury\x20(separated\x20depositor/withdrawer)','description':'Treasury\x20with\x20separated\x20depositor\x20and\x20withdrawer\x20roles.\x20Enforces\x20separation\x20of\x20duties.\x20Suitable\x20for\x20project\x20budget\x20management.','applicable_scenes':['treasury_fund_collection','treasury_permission_sharing'],'industry_tags':['universal','team','project'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(full\x20control)','required':!![]},{'name':'depositor_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20deposit\x20(TREASURY_DEPOSIT=252)','required':!![]},{'name':'withdrawer_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20withdraw\x20(TREASURY_WITHDRAW=254)','required':!![]},{'name':'receiver_address','type':'address','description':'Address\x20allowed\x20to\x20receive\x20CoinWrapper\x20(TREASURY_RECEIVE=253)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(multi-role)'}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_DESCRIPTION':[a['owner_address']],'TREASURY_DEPOSIT':a['depositor_addresses'],'TREASURY_RECEIVE':[a['receiver_address']],'TREASURY_WITHDRAW':a['withdrawer_addresses'],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}}),'notes':['Separation\x20of\x20duties:\x20deposit\x20and\x20withdraw\x20roles\x20assigned\x20to\x20different\x20addresses','Use\x20distinct\x20addresses\x20for\x20depositor_addresses\x20and\x20withdrawer_addresses','Owner\x20retains\x20full\x20control\x20(um_set,\x20owner_receive,\x20description_set)']},{'id':'T-T-03','name':'External\x20operations\x20Treasury\x20(with\x20Guard\x20protection)','description':'Treasury\x20with\x20external_deposit_guard\x20and/or\x20external_withdraw_guard\x20configured.\x20Allows\x20external\x20users\x20to\x20deposit/withdraw\x20via\x20Guard\x20+\x20Passport\x20without\x20Permission.','applicable_scenes':['treasury_external_ops','treasury_guard_protection'],'industry_tags':['finance','crowdfunding','refund','compensation'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'external_deposit_guards','type':'string[]','description':'Guard\x20addresses/names\x20for\x20external\x20deposit\x20(identifier=Optional)','required':![]},{'name':'external_withdraw_guards','type':'string[]','description':'Guard\x20addresses/names\x20for\x20external\x20withdraw\x20(identifier=Required)','required':![]},{'name':'withdraw_identifier_index','type':'number','description':'Guard\x20table\x20identifier\x20index\x20for\x20withdraw\x20amount\x20(u8,\x20required\x20for\x20withdraw\x20guards)','required':![],'default':0x0},{'name':'store_from_id_index','type':'number','description':'Optional\x20store_from_id\x20index\x20for\x20audit\x20trail','required':![]}],'body':a=>{const b={'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(external\x20ops)'}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_EXTERNAL_DEPOSIT_GUARD':[a['owner_address']],'TREASURY_EXTERNAL_WITHDRAW_GUARD':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}};a['external_deposit_guards']&&Array['isArray'](a['external_deposit_guards'])&&a['external_deposit_guards']['length']>0x0&&(b['external_deposit_guard']={'op':'add','guards':a['external_deposit_guards']['map'](c=>({'guard':c,'identifier':null,'store_from_id':a['store_from_id_index']!==undefined?a['store_from_id_index']:null}))});if(a['external_withdraw_guards']&&Array['isArray'](a['external_withdraw_guards'])&&a['external_withdraw_guards']['length']>0x0){if(a['withdraw_identifier_index']===undefined)throw new Error('withdraw_identifier_index\x20is\x20REQUIRED\x20when\x20external_withdraw_guards\x20is\x20specified\x20(u8,\x20not\x20Option)');b['external_withdraw_guard']={'op':'add','guards':a['external_withdraw_guards']['map'](c=>({'guard':c,'identifier':a['withdraw_identifier_index'],'store_from_id':a['store_from_id_index']!==undefined?a['store_from_id_index']:null}))};}return b;},'notes':['Asymmetric\x20identifier:\x20deposit=Option<u8>\x20(null\x20OK),\x20withdraw=u8\x20(REQUIRED)','Pair\x20with\x20Guard\x20objects\x20that\x20have\x20appropriate\x20table\x20fields\x20(number-type\x20for\x20identifier,\x20address-compatible\x20for\x20store_from_id)','External\x20operations\x20bypass\x20Permission;\x20ensure\x20Guard\x20rules\x20are\x20correctly\x20configured','Use\x20T-T-04\x20style\x20for\x20Service-shared\x20Permission\x20if\x20needed']},{'id':'T-T-04','name':'Service-shared\x20Treasury\x20(shared\x20Permission\x20with\x20Service)','description':'Treasury\x20that\x20shares\x20its\x20Permission\x20object\x20with\x20a\x20Service.\x20Single\x20admin\x20team\x20manages\x20both\x20Service\x20and\x20Treasury\x20operations.','applicable_scenes':['treasury_permission_sharing'],'industry_tags':['service','retail','ecommerce'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(Service\x20and\x20Treasury\x20share\x20owner)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'existing_permission_address','type':'address','description':'Existing\x20Permission\x20object\x20address\x20(already\x20applied\x20to\x20Service)','required':!![]},{'name':'service_address','type':'address','description':'Service\x20object\x20address\x20that\x20shares\x20this\x20Permission','required':![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':a['existing_permission_address']},'description':a['description'],'_permission_config':{'_note':'Permission\x20shared\x20with\x20Service;\x20do\x20NOT\x20reconfigure\x20indexes\x20300-320\x20(Service\x20range)','TREASURY_DEPOSIT':[a['owner_address']],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']]},'_integration':{'service':a['service_address']??'(specify\x20service_address)','flow':'Service\x20collects\x20payments\x20→\x20Allocator\x20splits\x20→\x20Treasury.receive\x20(253)\x20→\x20balance'}}),'notes':['Shares\x20Permission\x20with\x20an\x20existing\x20Service;\x20admin\x20changes\x20affect\x20both\x20objects','Verify\x20Permission\x20indexes\x20250-258\x20(Treasury)\x20and\x20300-320\x20(Service)\x20are\x20assigned\x20to\x20intended\x20entities','Use\x20this\x20when\x20a\x20single\x20business\x20unit\x20operates\x20both\x20a\x20Service\x20storefront\x20and\x20a\x20Treasury\x20fund\x20pool']},{'id':'T-T-05','name':'Allocation\x20fund-pool\x20Treasury\x20(referenced\x20by\x20Allocator)','description':'Treasury\x20configured\x20as\x20Allocation\x27s\x20sharing.who=Entity\x20target.\x20Receives\x20automated\x20fund\x20splits\x20from\x20Service\x20revenue.\x20Requires\x20TREASURY_RECEIVE\x20(253)\x20for\x20intake.','applicable_scenes':['treasury_fund_collection','treasury_permission_sharing'],'industry_tags':['service','ecommerce','marketplace'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(Service\x20owner)','required':!![]},{'name':'receiver_address','type':'address','description':'Address\x20allowed\x20to\x20call\x20receive\x20(253)\x20for\x20CoinWrapper\x20intake','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(must\x20match\x20Service\x20coin\x20type)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'allocator_address','type':'address','description':'Allocator\x20object\x20address\x20(references\x20this\x20Treasury\x20as\x20Entity\x20target)','required':![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(Allocation\x20target)'}},'description':a['description'],'_permission_config':{'TREASURY_RECEIVE':[a['receiver_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']]},'_integration':{'allocator':a['allocator_address']??'(specify\x20allocator_address)','flow':'Service.payment\x20→\x20Allocator.alloc\x20→\x20CoinWrapper\x20to\x20Treasury\x20→\x20Treasury.receive\x20(253)\x20→\x20balance','_note':'Without\x20TREASURY_RECEIVE\x20(253)\x20granted,\x20CoinWrapper\x20will\x20accumulate\x20without\x20entering\x20balance'}}),'notes':['CRITICAL:\x20TREASURY_RECEIVE\x20(253)\x20must\x20be\x20granted\x20to\x20a\x20trusted\x20operator\x20for\x20regular\x20intake','Configure\x20a\x20scheduled\x20job\x20to\x20call\x20receive\x20periodically\x20(e.g.,\x20daily)\x20to\x20convert\x20CoinWrapper\x20to\x20balance','Allocator\x27s\x20sharing.who=Entity\x20must\x20point\x20to\x20this\x20Treasury\x27s\x20address','Pair\x20with\x20guard\x20template\x20tpl_allocator_treasury_personal\x20if\x20needed']},{'id':'T-T-06','name':'Receivable\x20Treasury\x20(deposit\x20+\x20owner_receive\x20only)','description':'Minimal\x20Treasury\x20that\x20only\x20accepts\x20deposits\x20and\x20forwards\x20received\x20assets\x20to\x20Permission\x20owner\x20via\x20owner_receive.\x20No\x20withdraw\x20role.\x20Suitable\x20for\x20fee\x20sinks\x20or\x20donation\x20pools.','applicable_scenes':['treasury_fund_collection','treasury_owner_receive'],'industry_tags':['universal','fee_sink','donation'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(receives\x20forwarded\x20assets)','required':!![]},{'name':'depositor_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20deposit\x20(TREASURY_DEPOSIT=252)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(receivable-only)'}},'description':a['description'],'_permission_config':{'TREASURY_DEPOSIT':a['depositor_addresses'],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']]},'_workflow':{'step_1':'Depositors\x20call\x20treasury.deposit\x20(252)\x20to\x20add\x20funds','step_2':'Owner\x20calls\x20treasury.receive\x20(253)\x20to\x20convert\x20any\x20CoinWrapper\x20to\x20balance','step_3':'Owner\x20calls\x20treasury.owner_receive\x20(257)\x20to\x20forward\x20balance\x20to\x20owner\x20address','_note':'No\x20withdraw\x20path;\x20owner_receive\x20is\x20the\x20only\x20fund\x20exit'}}),'notes':['No\x20TREASURY_WITHDRAW\x20(254)\x20granted;\x20funds\x20exit\x20only\x20via\x20owner_receive\x20(257)','owner_receive\x20does\x20NOT\x20write\x20to\x20history;\x20rely\x20on\x20Payment\x20records\x20for\x20audit','Suitable\x20for\x20fee\x20sinks,\x20donation\x20pools,\x20or\x20auto-forwarding\x20revenue']},{'id':'T-T-07','name':'Exception\x20Compensation\x20Treasury\x20(scene-bound\x20Payment\x20withdraw)','description':'Treasury\x20for\x20exception\x20branch\x20compensation:\x20withdraws\x20create\x20scene-bound\x20Payments\x20with\x20for_object\x20+\x20for_guard\x20+\x20index\x20binding.\x20Enables\x20auto-compensation\x20for\x20delays,\x20defects,\x20or\x20service\x20exceptions.','applicable_scenes':['treasury_fund_collection','treasury_um_delegation'],'industry_tags':['retail','travel','rental','freelance','ecommerce'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(service\x20provider,\x20becomes\x20admin)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description\x20(e.g.,\x20\x27Compensation\x20fund\x20for\x20delivery\x20delays\x27)','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'withdrawer_address','type':'address','description':'Address\x20authorized\x20to\x20withdraw\x20compensations\x20(can\x20be\x20same\x20as\x20owner)','required':!![]},{'name':'external_withdraw_guard','type':'address','description':'Guard\x20address\x20for\x20external_withdraw\x20(verifies\x20exception\x20conditions\x20+\x20Payment\x20binding)','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name'],'indexes':[{'index':0xfd,'name':'TREASURY_DEPOSIT','mark':a['owner_address'],'description':'Owner\x20deposits\x20funds'},{'index':0xfe,'name':'TREASURY_WITHDRAW','mark':a['withdrawer_address'],'description':'Withdraw\x20for\x20exception\x20compensation\x20(creates\x20scene-bound\x20Payment)'},{'index':0x100,'name':'TREASURY_EXTERNAL_WITHDRAW','mark':a['withdrawer_address'],'description':'External\x20withdraw\x20with\x20guard\x20(verifies\x20exception\x20+\x20Payment\x20binding)'},{'index':0x101,'name':'TREASURY_OWNER_RECEIVE','mark':a['owner_address'],'description':'Owner\x20receives\x20remaining\x20funds'}]}},'description':a['description']}),'notes':['VERIFIED:\x20treasury.move#L249-264\x20(withdraw\x20creates\x20Payment\x20via\x20payment::new_singleton\x20+\x20from_object_set)','VERIFIED:\x20treasury.move#L415-418\x20(withdraw<T>\x20sends\x20to\x20recipient\x20with\x20PaymentInfo)','Payment\x20created\x20has\x20PaymentInfo(for_object=order,\x20for_guard=exception_guard,\x20index=current_progress)','ANTI-REUSE:\x20for_object\x20+\x20for_guard\x20+\x20index\x20binds\x20Payment\x20to\x20specific\x20context\x20(payment.move#L66-71)','VERIFIER-EVIDENCE:\x20customer\x20submits\x20Payment\x20via\x20Passport,\x20Guard\x20verifies\x20binding\x20fields\x20match','Use\x20with\x20tpl_payment_exception_compensation\x20(guard-templates.ts)\x20for\x20the\x20exception\x20branch\x20guard','Suitable\x20for:\x20delivery\x20delay\x20compensation,\x20defect\x20refund,\x20service-level\x20agreement\x20penalties']}];export const TREASURY_TEMPLATES_VERSION='1.0.0';export function getAllTreasuryTemplates(){return[...TREASURY_TEMPLATES];}export function getTemplateById(a){return TREASURY_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return TREASURY_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return TREASURY_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return TREASURY_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}try{return{'ok':!![],'body':c['body'](b)};}catch(f){return{'ok':![],'error':'Template\x20body\x20execution\x20failed:\x20'+f['message']};}}
|