@sfmc-bds/db-server 0.1.0 → 0.2.0-beta.0

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.
Files changed (112) hide show
  1. package/README.md +1 -1
  2. package/dist/db-tables.js +16 -17
  3. package/dist/db-tables.js.map +7 -1
  4. package/dist/domain/bridge.js +54 -77
  5. package/dist/domain/bridge.js.map +7 -1
  6. package/dist/domain/economy.d.ts +83 -2
  7. package/dist/domain/economy.d.ts.map +1 -1
  8. package/dist/domain/economy.js +292 -281
  9. package/dist/domain/economy.js.map +7 -1
  10. package/dist/domain/schema.js +480 -426
  11. package/dist/domain/schema.js.map +7 -1
  12. package/dist/domain/transaction.js +32 -80
  13. package/dist/domain/transaction.js.map +7 -1
  14. package/dist/env.d.ts.map +1 -1
  15. package/dist/env.js +85 -84
  16. package/dist/env.js.map +7 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +218 -240
  20. package/dist/index.js.map +7 -1
  21. package/dist/lib/http.js +30 -39
  22. package/dist/lib/http.js.map +7 -1
  23. package/dist/lib/idempotency-store.js +34 -47
  24. package/dist/lib/idempotency-store.js.map +7 -1
  25. package/dist/lib/idempotency.js +8 -13
  26. package/dist/lib/idempotency.js.map +7 -1
  27. package/dist/lib/identifiers.js +18 -14
  28. package/dist/lib/identifiers.js.map +7 -1
  29. package/dist/lib/log.d.ts +3 -6
  30. package/dist/lib/log.d.ts.map +1 -1
  31. package/dist/lib/log.js +13 -14
  32. package/dist/lib/log.js.map +7 -1
  33. package/dist/lib/module-state.d.ts.map +1 -1
  34. package/dist/lib/module-state.js +32 -21
  35. package/dist/lib/module-state.js.map +7 -1
  36. package/dist/lib/order-by.d.ts +17 -0
  37. package/dist/lib/order-by.d.ts.map +1 -0
  38. package/dist/lib/order-by.js +24 -0
  39. package/dist/lib/order-by.js.map +7 -0
  40. package/dist/lib/runtime.js +16 -31
  41. package/dist/lib/runtime.js.map +7 -1
  42. package/dist/lib/sql-helpers.js +9 -27
  43. package/dist/lib/sql-helpers.js.map +7 -1
  44. package/dist/lib/sqlite.js +40 -52
  45. package/dist/lib/sqlite.js.map +7 -1
  46. package/dist/manifest-loader.d.ts.map +1 -1
  47. package/dist/manifest-loader.js +154 -195
  48. package/dist/manifest-loader.js.map +7 -1
  49. package/dist/manifest.d.ts +3 -7
  50. package/dist/manifest.d.ts.map +1 -1
  51. package/dist/manifest.js +76 -115
  52. package/dist/manifest.js.map +7 -1
  53. package/dist/module-auth.d.ts +17 -6
  54. package/dist/module-auth.d.ts.map +1 -1
  55. package/dist/module-auth.js +93 -107
  56. package/dist/module-auth.js.map +7 -1
  57. package/dist/module-runtime-sync.d.ts +37 -0
  58. package/dist/module-runtime-sync.d.ts.map +1 -0
  59. package/dist/module-runtime-sync.js +54 -0
  60. package/dist/module-runtime-sync.js.map +7 -0
  61. package/dist/permission-gate.d.ts.map +1 -1
  62. package/dist/permission-gate.js +55 -86
  63. package/dist/permission-gate.js.map +7 -1
  64. package/dist/routes/_shared.d.ts +7 -2
  65. package/dist/routes/_shared.d.ts.map +1 -1
  66. package/dist/routes/_shared.js +16 -25
  67. package/dist/routes/_shared.js.map +7 -1
  68. package/dist/routes/config.d.ts +11 -1
  69. package/dist/routes/config.d.ts.map +1 -1
  70. package/dist/routes/config.js +167 -213
  71. package/dist/routes/config.js.map +7 -1
  72. package/dist/routes/db-routes.d.ts +6 -10
  73. package/dist/routes/db-routes.d.ts.map +1 -1
  74. package/dist/routes/db-routes.js +198 -172
  75. package/dist/routes/db-routes.js.map +7 -1
  76. package/dist/routes/health.js +15 -20
  77. package/dist/routes/health.js.map +7 -1
  78. package/dist/routes/messages.d.ts.map +1 -1
  79. package/dist/routes/messages.js +56 -63
  80. package/dist/routes/messages.js.map +7 -1
  81. package/dist/routes/module-config-routes.d.ts.map +1 -1
  82. package/dist/routes/module-config-routes.js +92 -111
  83. package/dist/routes/module-config-routes.js.map +7 -1
  84. package/dist/routes/modules.d.ts.map +1 -1
  85. package/dist/routes/modules.js +82 -88
  86. package/dist/routes/modules.js.map +7 -1
  87. package/dist/routes/service-routes.d.ts.map +1 -1
  88. package/dist/routes/service-routes.js +54 -61
  89. package/dist/routes/service-routes.js.map +7 -1
  90. package/dist/runtime.test.js +248 -49
  91. package/dist/runtime.test.js.map +7 -1
  92. package/dist/schema-registry.d.ts.map +1 -1
  93. package/dist/schema-registry.js +119 -160
  94. package/dist/schema-registry.js.map +7 -1
  95. package/dist/server.js +69 -72
  96. package/dist/server.js.map +7 -1
  97. package/dist/service-registry.d.ts.map +1 -1
  98. package/dist/service-registry.js +60 -67
  99. package/dist/service-registry.js.map +7 -1
  100. package/dist/services/builtin-handlers.d.ts +4 -0
  101. package/dist/services/builtin-handlers.d.ts.map +1 -1
  102. package/dist/services/builtin-handlers.js +34 -20
  103. package/dist/services/builtin-handlers.js.map +7 -1
  104. package/dist/services/economy-handlers.js +143 -132
  105. package/dist/services/economy-handlers.js.map +7 -1
  106. package/dist/tx-runner.d.ts +35 -11
  107. package/dist/tx-runner.d.ts.map +1 -1
  108. package/dist/tx-runner.js +293 -250
  109. package/dist/tx-runner.js.map +7 -1
  110. package/dist/where.js +71 -94
  111. package/dist/where.js.map +7 -1
  112. package/package.json +4 -4
@@ -1 +1,7 @@
1
- {"version":3,"file":"economy.js","sourceRoot":"","sources":["../../src/domain/economy.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/domain/economy.ts"],
4
+ "sourcesContent": ["/**\n * domain/economy.ts \u2014 \u7ECF\u6D4E\u7CFB\u7EDF\u4E1A\u52A1\u6838\u5FC3\n *\n * \u63D0\u4F9B\u8D26\u6237 upsert\u3001\u901A\u7528\u8F6C\u8D26\u3001\u65E5\u5E38\u4EFB\u52A1\u5956\u52B1\u4E0E\u6708\u5EA6\u7EDF\u8BA1\u3002\n * land / chat / gui \u7B49\u901A\u8FC7 service(economy.account.*) \u8C03\u7528\u672C\u6587\u4EF6\u3002\n *\n * \u4E8B\u52A1\u7EA6\u5B9A(\u65B9\u6848 A):\n * - applyEconomySteps / submitDailyTaskSteps \u2014 \u65E0 BEGIN/COMMIT,\u53EF\u5D4C\u8FDB\u5916\u5C42 db.tx\n * - applyEconomyTransaction / submitDailyTaskTx \u2014 \u72EC\u7ACB\u8C03\u7528\u65F6\u81EA\u5DF1\u5F00\u4E8B\u52A1;\n * alreadyInTx=true \u65F6\u53EA\u8DD1 steps\n *\n * \u884C\u7C7B\u578B\u5728\u6B64\u672C\u5730\u5B9A\u4E49\uFF08\u5E73\u53F0\u4E0D\u4F9D\u8D56\u4E1A\u52A1\u6A21\u5757\u5305\uFF1B\u6743\u5A01\u526F\u672C\u5728 sfmc-modules/packages/economy\uFF09\u3002\n */\n\nimport type { DatabaseSync } from \"node:sqlite\";\nimport type { SQLStatement } from \"sql-template-strings\";\nimport { isValidIdempotencyKey } from \"../lib/idempotency.js\";\nimport { sql } from \"../lib/sql-helpers.js\";\nimport type { TxResult } from \"./transaction.js\";\nexport type { TxResult };\n\n/**\n * \u7ECF\u6D4E\u57DF\u884C\u6A21\u578B\uFF08\u539F SDK contracts/economy\uFF1B\u5951\u7EA6\u5185\u805A\u5230\u8868\u6240\u6709\u8005 db-server\uFF09\u3002\n * \u4E1A\u52A1\u6A21\u5757\u5E94\u901A\u8FC7 service(economy.*) \u6D88\u8D39\u89C6\u56FE\uFF0C\u4E0D\u4F9D\u8D56\u8FD9\u4E9B\u5185\u90E8\u884C\u7C7B\u578B\u3002\n */\nexport interface EconomyAccountRow {\n player_id: string;\n player_name_snapshot: string;\n balance: number;\n version: number;\n created_at: number;\n updated_at: number;\n}\n\n/** \u5E42\u7B49\u952E\u8868\u884C */\nexport interface EconomyIdempotencyRow {\n actor_id: string;\n idempotency_key: string;\n transaction_id: string;\n response_json: string;\n created_at: number;\n}\n\n/** \u6D41\u6C34\u8868\u884C */\nexport interface EconomyTransactionRow {\n id: string;\n transaction_type: string;\n actor_id: string;\n source_player_id?: string;\n target_player_id?: string;\n amount: number;\n balance_before?: number;\n balance_after?: number;\n reference_type: string;\n reference_id: string;\n reason: string;\n created_at: number;\n idempotency_key: string;\n\n /** JS-side alias fields used by domain/economy.ts */\n actorId?: string;\n type?: string;\n referenceType?: string;\n referenceId?: string;\n sourcePlayerName?: string;\n targetPlayerName?: string;\n}\n\nconst TABLE_ACCOUNTS = \"sfmc_economy_accounts\";\nconst TABLE_TRANSACTIONS = \"sfmc_economy_transactions\";\nconst TABLE_IDEMPOTENCY = \"sfmc_economy_idempotency\";\nconst TABLE_DAILY = \"sfmc_economy_daily_tasks\";\nconst TABLE_STATS = \"sfmc_economy_stats\";\n\n/** query \u517C\u5BB9\u683C\u5F0F\uFF1Astring / SQLStatement / { sql, values } */\nexport type AnyQuery = (\n sql: string | SQLStatement | { sql: string; values?: unknown[] },\n values?: unknown[]\n) => unknown[] | { changes: number | bigint };\n\nfunction newTransactionId(now: number): string {\n return `E${now.toString(36)}${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * \u7ECF\u6D4E\u8D26\u6237 DB \u884C\uFF08snake_case\uFF0C\u5BF9\u5E94 sfmc_economy_accounts\uFF09\u3002\n * \u4E1A\u52A1\u57DF\u7C7B\u578B\u7531\u672C\u6A21\u5757\u7EF4\u62A4\uFF0C\u4E0D\u518D\u4F9D\u8D56 sdk/contracts\u3002\n */\nexport interface EconomyAccountRow {\n player_id: string;\n player_name_snapshot: string;\n balance: number;\n version: number;\n created_at: number;\n updated_at: number;\n}\n\n/**\n * \u7ECF\u6D4E\u4EA4\u6613\u6D41\u6C34 DB \u884C\uFF08snake_case\uFF0C\u5BF9\u5E94 sfmc_economy_transactions\uFF09\u3002\n * \u542B\u5386\u53F2 JS \u4FA7\u522B\u540D\u5B57\u6BB5\uFF0C\u4F9B\u8C03\u7528\u65B9\u517C\u5BB9\u8BFB\u53D6\u3002\n */\nexport interface EconomyTransactionRow {\n id: string;\n transaction_type: string;\n actor_id: string;\n source_player_id?: string;\n target_player_id?: string;\n amount: number;\n balance_before?: number;\n balance_after?: number;\n reference_type: string;\n reference_id: string;\n reason: string;\n created_at: number;\n idempotency_key: string;\n\n /** JS-side alias fields used by domain/economy.ts */\n actorId?: string;\n type?: string;\n referenceType?: string;\n referenceId?: string;\n sourcePlayerName?: string;\n targetPlayerName?: string;\n}\n\nexport interface EconomyAccountView {\n playerId: string;\n playerName: string;\n balance: number;\n version: number;\n}\n\nexport function economyResult(row: EconomyAccountRow | undefined): EconomyAccountView | undefined {\n if (!row) return undefined;\n return {\n playerId: row.player_id,\n playerName: row.player_name_snapshot,\n balance: row.balance,\n version: row.version,\n };\n}\n\n/** \u786E\u4FDD\u8D26\u6237\u5B58\u5728\u5E76\u8FD4\u56DE\u6700\u65B0\u884C */\nexport function ensureEconomyAccount(\n query: AnyQuery,\n playerId: string,\n playerName: string\n): EconomyAccountRow | undefined {\n const now = Date.now();\n query(\n sql(\n `INSERT INTO ${TABLE_ACCOUNTS} (player_id, player_name_snapshot, balance, version, created_at, updated_at)\n VALUES (?, ?, 0, 1, ?, ?)\n ON CONFLICT(player_id) DO UPDATE SET\n player_name_snapshot = excluded.player_name_snapshot,\n updated_at = excluded.updated_at`,\n [String(playerId), String(playerName), now, now]\n )\n );\n const rows = query(sql(`SELECT * FROM ${TABLE_ACCOUNTS} WHERE player_id = ?`, [String(playerId)]));\n if (Array.isArray(rows)) {\n return (rows as EconomyAccountRow[])[0];\n }\n return undefined;\n}\n\n/** \u8BFB\u53D6(\u5FC5\u8981\u65F6\u521B\u5EFA)\u8D26\u6237\u4E1A\u52A1\u89C6\u56FE */\nexport function getEconomyAccount(query: AnyQuery, playerId: string, playerName = \"\"): EconomyAccountView | null {\n const row = ensureEconomyAccount(query, playerId, playerName);\n return economyResult(row) ?? null;\n}\n\nexport interface ApplyEconomyInput {\n actor_id?: string;\n amount: number;\n transaction_type?: string;\n source_player_id?: string;\n target_player_id?: string;\n reference_type?: string;\n reference_id?: string;\n reason?: string;\n idempotency_key?: string;\n\n actorId?: string;\n type?: string;\n sourcePlayerId?: string;\n targetPlayerId?: string;\n sourcePlayerName?: string;\n targetPlayerName?: string;\n referenceType?: string;\n referenceId?: string;\n reasonAlias?: string;\n idempotencyKey?: string;\n}\n\nexport type ApplyEconomyResult =\n | {\n ok: true;\n transactionId: string;\n replayed?: boolean;\n source:\n | (EconomyAccountView & {\n balanceBefore: number;\n balanceAfter: number;\n })\n | null;\n target:\n | (EconomyAccountView & {\n balanceBefore: number;\n balanceAfter: number;\n })\n | null;\n }\n | {\n ok: false;\n error: string;\n status: number;\n balance?: number;\n };\n\n/**\n * \u7ECF\u6D4E\u53D8\u66F4\u6838\u5FC3(\u65E0 BEGIN/COMMIT)\u3002\n * \u7EAF debit(\u4EC5 source)\u6216\u7EAF credit(\u4EC5 target)\u5747\u53EF\u6210\u529F\u3002\n */\nexport function applyEconomySteps(query: AnyQuery, data: ApplyEconomyInput): ApplyEconomyResult {\n const amount = Number(data.amount);\n const actorId = String(data.actor_id ?? data.actorId ?? \"\").trim();\n if (!actorId || !Number.isSafeInteger(amount) || amount <= 0) {\n return { ok: false, error: \"invalid_amount\", status: 400 };\n }\n\n const sourceId = data.source_player_id\n ? String(data.source_player_id)\n : data.sourcePlayerId\n ? String(data.sourcePlayerId)\n : null;\n const targetId = data.target_player_id\n ? String(data.target_player_id)\n : data.targetPlayerId\n ? String(data.targetPlayerId)\n : null;\n\n const idempotencyKey = String(data.idempotency_key ?? data.idempotencyKey ?? \"\").trim();\n if (idempotencyKey && !isValidIdempotencyKey(idempotencyKey)) {\n return { ok: false, error: \"invalid_idempotency_key\", status: 400 };\n }\n if (!sourceId && !targetId) {\n return { ok: false, error: \"missing_account\", status: 400 };\n }\n if (sourceId && sourceId !== actorId) {\n return { ok: false, error: \"forbidden_source\", status: 403 };\n }\n if (sourceId && targetId && sourceId === targetId) {\n return { ok: false, error: \"same_account\", status: 400 };\n }\n\n // \u5E42\u7B49\u56DE\u653E\n if (idempotencyKey) {\n const rows = query(\n sql(\n `SELECT response_json FROM ${TABLE_IDEMPOTENCY}\n WHERE actor_id = ? AND idempotency_key = ?`,\n [actorId, idempotencyKey]\n )\n );\n const previous = Array.isArray(rows) ? (rows as Array<{ response_json: string }>)[0] : undefined;\n if (previous) {\n return { ...JSON.parse(previous.response_json), replayed: true } as ApplyEconomyResult;\n }\n }\n\n const source = sourceId ? ensureEconomyAccount(query, sourceId, String(data.sourcePlayerName ?? \"\")) : null;\n const target = targetId ? ensureEconomyAccount(query, targetId, String(data.targetPlayerName ?? \"\")) : null;\n if (sourceId && !source) {\n return { ok: false, error: \"source_not_found\", status: 404 };\n }\n if (targetId && !target) {\n return { ok: false, error: \"target_not_found\", status: 404 };\n }\n\n if (source && source.balance < amount) {\n return { ok: false, error: \"insufficient_funds\", balance: source.balance, status: 409 };\n }\n\n const now = Date.now();\n if (source) {\n query(\n sql(\n `UPDATE ${TABLE_ACCOUNTS}\n SET balance = balance - ?, version = version + 1, updated_at = ?\n WHERE player_id = ? AND balance >= ?`,\n [amount, now, source.player_id, amount]\n )\n );\n }\n if (target) {\n query(\n sql(\n `UPDATE ${TABLE_ACCOUNTS}\n SET balance = balance + ?, version = version + 1, updated_at = ?\n WHERE player_id = ?`,\n [amount, now, target.player_id]\n )\n );\n }\n\n const transactionType = String(data.transaction_type ?? data.type ?? \"adjustment\");\n const referenceType = String(data.reference_type ?? data.referenceType ?? \"\");\n const referenceId = String(data.reference_id ?? data.referenceId ?? \"\");\n const reason = String(data.reason ?? data.reasonAlias ?? \"\");\n const id = newTransactionId(now);\n\n if (source) {\n query(\n sql(\n `INSERT INTO ${TABLE_TRANSACTIONS}\n (id, transaction_type, actor_id, source_player_id, target_player_id,\n amount, balance_before, balance_after,\n reference_type, reference_id, reason, created_at)\n VALUES (?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?)`,\n [\n id + \"-dr\",\n transactionType + \".dr\",\n actorId,\n sourceId,\n amount,\n source.balance,\n source.balance - amount,\n referenceType,\n referenceId,\n reason,\n now,\n ]\n )\n );\n }\n if (target) {\n query(\n sql(\n `INSERT INTO ${TABLE_TRANSACTIONS}\n (id, transaction_type, actor_id, source_player_id, target_player_id,\n amount, balance_before, balance_after,\n reference_type, reference_id, reason, created_at)\n VALUES (?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n id + \"-cr\",\n transactionType + \".cr\",\n actorId,\n targetId,\n amount,\n target.balance,\n target.balance + amount,\n referenceType,\n referenceId,\n reason,\n now,\n ]\n )\n );\n }\n\n const sourceView = source ? economyResult(ensureEconomyAccount(query, source.player_id, \"\")) : undefined;\n const targetView = target ? economyResult(ensureEconomyAccount(query, target.player_id, \"\")) : undefined;\n\n const response: ApplyEconomyResult = {\n ok: true,\n transactionId: id,\n source: sourceView\n ? { ...sourceView, balanceBefore: source!.balance, balanceAfter: source!.balance - amount }\n : null,\n target: targetView\n ? { ...targetView, balanceBefore: target!.balance, balanceAfter: target!.balance + amount }\n : null,\n };\n\n if (idempotencyKey) {\n query(\n sql(\n `INSERT INTO ${TABLE_IDEMPOTENCY}\n (actor_id, idempotency_key, transaction_id, response_json, created_at)\n VALUES (?, ?, ?, ?, ?)`,\n [actorId, idempotencyKey, id, JSON.stringify(response), now]\n )\n );\n }\n\n return response;\n}\n\n/**\n * \u72EC\u7ACB\u7ECF\u6D4E\u4E8B\u52A1\u5305\u88C5\u3002alreadyInTx=true \u65F6\u590D\u7528\u5916\u5C42\u4E8B\u52A1(\u4E0D\u518D BEGIN)\u3002\n */\nexport function applyEconomyTransaction(\n query: AnyQuery,\n db: DatabaseSync,\n data: ApplyEconomyInput,\n opts?: { alreadyInTx?: boolean }\n): ApplyEconomyResult {\n if (opts?.alreadyInTx) {\n return applyEconomySteps(query, data);\n }\n db.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = applyEconomySteps(query, data);\n if (!result.ok) {\n db.exec(\"ROLLBACK\");\n return result;\n }\n db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n /* ignore */\n }\n return {\n ok: false,\n error: (error as Error).message || \"economy_transaction_failed\",\n status: 500,\n };\n }\n}\n\n/** \u5217\u51FA\u65E5\u5E38\u4EFB\u52A1(\u9ED8\u8BA4\u4EC5 active \u4E14\u672A\u8FC7\u671F) */\nexport function listDailyTasks(\n query: AnyQuery,\n filter?: { status?: string; includeExpired?: boolean }\n): Array<Record<string, unknown>> {\n const status = filter?.status ?? \"active\";\n const now = Date.now();\n if (filter?.includeExpired) {\n const rows = query(sql(`SELECT * FROM ${TABLE_DAILY} WHERE status = ?`, [status]));\n return Array.isArray(rows) ? (rows as Array<Record<string, unknown>>) : [];\n }\n const rows = query(sql(`SELECT * FROM ${TABLE_DAILY} WHERE status = ? AND expires_at > ?`, [status, now]));\n return Array.isArray(rows) ? (rows as Array<Record<string, unknown>>) : [];\n}\n\nexport interface SubmitDailyTaskInput {\n actorId: string;\n taskId: string;\n quantity: number;\n}\n\n/** \u65E5\u5E38\u4EFB\u52A1\u63D0\u4EA4\u6838\u5FC3(\u65E0 BEGIN) */\nexport function submitDailyTaskSteps(\n query: AnyQuery,\n data: SubmitDailyTaskInput\n): TxResult<{\n transactionId: string;\n reward: number;\n balance: number;\n balanceVersion: number;\n}> {\n const actorId = data.actorId;\n const taskId = data.taskId;\n const quantity = data.quantity;\n\n const rows = query(\n sql(\n `SELECT * FROM ${TABLE_DAILY}\n WHERE id = ? AND status = 'active' AND expires_at > ?`,\n [taskId, Date.now()]\n )\n ) as Array<Record<string, unknown>>;\n const task = rows[0];\n if (!task) {\n return { ok: false, error: \"task_not_found_or_expired\", status: 404 };\n }\n const targetQty = Number(task.target_qty ?? 0);\n const filledQty = Number(task.filled_qty ?? 0);\n const remaining = targetQty - filledQty;\n if (remaining < quantity) {\n return { ok: false, error: \"task_quota_exceeded\", status: 409, extra: { remaining } };\n }\n const reward = Number(task.unit_reward) * quantity;\n\n query(sql(`UPDATE ${TABLE_DAILY} SET filled_qty = filled_qty + ? WHERE id = ?`, [quantity, taskId]));\n\n const result = applyEconomySteps(query, {\n actor_id: actorId,\n transaction_type: \"daily_task.reward\",\n target_player_id: actorId,\n amount: reward,\n reference_type: \"daily_task\",\n reference_id: taskId,\n reason: `\u63D0\u4EA4\u4EFB\u52A1 ${task.item_type}*${quantity}`,\n });\n if (!result.ok) {\n return { ok: false, error: result.error, status: result.status };\n }\n const tgtFinal = economyResult(ensureEconomyAccount(query, actorId, \"\"));\n return {\n ok: true,\n data: {\n transactionId: result.transactionId,\n reward,\n balance: tgtFinal?.balance ?? 0,\n balanceVersion: tgtFinal?.version ?? 0,\n },\n };\n}\n\n/** \u65E5\u5E38\u4EFB\u52A1\u63D0\u4EA4\u5305\u88C5(\u53EF\u72EC\u7ACB\u4E8B\u52A1\u6216\u5D4C\u5165\u5916\u5C42 tx) */\nexport function submitDailyTaskTx(\n query: AnyQuery,\n db: DatabaseSync,\n data: SubmitDailyTaskInput,\n opts?: { alreadyInTx?: boolean }\n): TxResult<{\n transactionId: string;\n reward: number;\n balance: number;\n balanceVersion: number;\n}> {\n if (opts?.alreadyInTx) {\n return submitDailyTaskSteps(query, data);\n }\n db.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = submitDailyTaskSteps(query, data);\n if (!result.ok) {\n db.exec(\"ROLLBACK\");\n return result;\n }\n db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n /* ignore */\n }\n return {\n ok: false,\n error: (error as Error).message || \"task_submit_failed\",\n status: 500,\n };\n }\n}\n\n/** \u6708\u5EA6/\u5168\u5C40\u7ECF\u6D4E\u767D\u76AE\u4E66(\u4F18\u5148\u8BFB sfmc_economy_stats,\u5426\u5219\u73B0\u573A\u805A\u5408) */\nexport function monthlyEconomyStats(query: AnyQuery): {\n id: string;\n total_issued: number;\n total_destroyed: number;\n total_supply: number;\n active_accounts: number;\n} {\n const now = new Date();\n const id = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, \"0\")}`;\n\n const cached = query(sql(`SELECT * FROM ${TABLE_STATS} WHERE id = ? OR id = ?`, [\"global\", id]));\n if (Array.isArray(cached) && cached.length > 0) {\n const row = cached[0] as Record<string, unknown>;\n return {\n id: String(row.id ?? id),\n total_issued: Number(row.total_issued ?? 0),\n total_destroyed: Number(row.total_destroyed ?? 0),\n total_supply: Number(row.total_supply ?? 0),\n active_accounts: Number(row.active_accounts ?? 0),\n };\n }\n\n const supplyRows = query(\n sql(`SELECT COALESCE(SUM(balance),0) AS total_supply, COUNT(*) AS active_accounts FROM ${TABLE_ACCOUNTS}`)\n );\n const supply = Array.isArray(supplyRows) ? (supplyRows[0] as Record<string, unknown>) : {};\n const issuedRows = query(\n sql(`SELECT COALESCE(SUM(amount),0) AS total FROM ${TABLE_TRANSACTIONS} WHERE target_player_id IS NOT NULL`)\n );\n const destroyedRows = query(\n sql(`SELECT COALESCE(SUM(amount),0) AS total FROM ${TABLE_TRANSACTIONS} WHERE source_player_id IS NOT NULL`)\n );\n const issued = Array.isArray(issuedRows) ? Number((issuedRows[0] as Record<string, unknown>).total ?? 0) : 0;\n const destroyed = Array.isArray(destroyedRows) ? Number((destroyedRows[0] as Record<string, unknown>).total ?? 0) : 0;\n\n return {\n id,\n total_issued: issued,\n total_destroyed: destroyed,\n total_supply: Number(supply.total_supply ?? 0),\n active_accounts: Number(supply.active_accounts ?? 0),\n };\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": ["rows"]
7
+ }