@antseed/cli 0.1.184 → 0.1.186

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 (53) hide show
  1. package/dist/cli/commands/buyer/start.d.ts.map +1 -1
  2. package/dist/cli/commands/buyer/start.js +7 -2
  3. package/dist/cli/commands/buyer/start.js.map +1 -1
  4. package/dist/gateway/console-api/handlers/wallet-deposits.test.d.ts +2 -0
  5. package/dist/gateway/console-api/handlers/wallet-deposits.test.d.ts.map +1 -0
  6. package/dist/gateway/console-api/handlers/wallet-deposits.test.js +94 -0
  7. package/dist/gateway/console-api/handlers/wallet-deposits.test.js.map +1 -0
  8. package/dist/gateway/console-api/handlers/wallet.d.ts +3 -0
  9. package/dist/gateway/console-api/handlers/wallet.d.ts.map +1 -1
  10. package/dist/gateway/console-api/handlers/wallet.js +86 -2
  11. package/dist/gateway/console-api/handlers/wallet.js.map +1 -1
  12. package/dist/gateway/console-api/types.d.ts +29 -0
  13. package/dist/gateway/console-api/types.d.ts.map +1 -1
  14. package/dist/gateway/console-api/types.js.map +1 -1
  15. package/dist/gateway/pinned-model.d.ts +7 -0
  16. package/dist/gateway/pinned-model.d.ts.map +1 -0
  17. package/dist/gateway/pinned-model.js +25 -0
  18. package/dist/gateway/pinned-model.js.map +1 -0
  19. package/dist/gateway/pinned-model.test.d.ts +2 -0
  20. package/dist/gateway/pinned-model.test.d.ts.map +1 -0
  21. package/dist/gateway/pinned-model.test.js +47 -0
  22. package/dist/gateway/pinned-model.test.js.map +1 -0
  23. package/dist/gateway/services/deposits.d.ts +57 -0
  24. package/dist/gateway/services/deposits.d.ts.map +1 -0
  25. package/dist/gateway/services/deposits.js +119 -0
  26. package/dist/gateway/services/deposits.js.map +1 -0
  27. package/dist/gateway/services/deposits.test.d.ts +2 -0
  28. package/dist/gateway/services/deposits.test.d.ts.map +1 -0
  29. package/dist/gateway/services/deposits.test.js +67 -0
  30. package/dist/gateway/services/deposits.test.js.map +1 -0
  31. package/dist/gateway/store-data.test.js +1 -1
  32. package/dist/gateway/store-data.test.js.map +1 -1
  33. package/dist/gateway/store-migrations.d.ts +0 -4
  34. package/dist/gateway/store-migrations.d.ts.map +1 -1
  35. package/dist/gateway/store-migrations.js +23 -0
  36. package/dist/gateway/store-migrations.js.map +1 -1
  37. package/dist/gateway/store.d.ts +36 -0
  38. package/dist/gateway/store.d.ts.map +1 -1
  39. package/dist/gateway/store.js +52 -4
  40. package/dist/gateway/store.js.map +1 -1
  41. package/dist/proxy/buyer-proxy.d.ts +4 -0
  42. package/dist/proxy/buyer-proxy.d.ts.map +1 -1
  43. package/dist/proxy/buyer-proxy.js +20 -0
  44. package/dist/proxy/buyer-proxy.js.map +1 -1
  45. package/dist/proxy/deposit-log.d.ts +20 -0
  46. package/dist/proxy/deposit-log.d.ts.map +1 -0
  47. package/dist/proxy/deposit-log.js +64 -0
  48. package/dist/proxy/deposit-log.js.map +1 -0
  49. package/dist/proxy/deposit-log.test.d.ts +2 -0
  50. package/dist/proxy/deposit-log.test.d.ts.map +1 -0
  51. package/dist/proxy/deposit-log.test.js +26 -0
  52. package/dist/proxy/deposit-log.test.js.map +1 -0
  53. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/gateway/console-api/types.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAA;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAA;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAA;AA4ZtD,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,MAAM,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/gateway/console-api/types.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAA;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAA;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAA;AAsbtD,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,MAAM,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare function splitPinnedModel(model: string | null | undefined): {
2
+ model: string | null;
3
+ peerId: string | null;
4
+ };
5
+ /** SQL that splits `<peerId>@<model>` rows of `table` the same way, for the migration of rows recorded before. */
6
+ export declare function splitPinnedModelSql(table: string): string;
7
+ //# sourceMappingURL=pinned-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-model.d.ts","sourceRoot":"","sources":["../../src/gateway/pinned-model.ts"],"names":[],"mappings":"AAOA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAIlH;AAED,kHAAkH;AAClH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUzD"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * A request can pin a seller with `<peerId>@<model>`. The request log, the
3
+ * spend ledger and usage reports keep the model and the seller apart, so a
4
+ * model reads as a model and groups as one however it was pinned.
5
+ */
6
+ const PINNED_MODEL_RE = /^(?:0x)?([0-9a-fA-F]{40})@(.+)$/;
7
+ export function splitPinnedModel(model) {
8
+ if (!model)
9
+ return { model: model ?? null, peerId: null };
10
+ const match = PINNED_MODEL_RE.exec(model);
11
+ return match ? { model: match[2], peerId: match[1].toLowerCase() } : { model, peerId: null };
12
+ }
13
+ /** SQL that splits `<peerId>@<model>` rows of `table` the same way, for the migration of rows recorded before. */
14
+ export function splitPinnedModelSql(table) {
15
+ const at = "instr(model, '@')";
16
+ const hex40 = (from) => `(lower(substr(model, ${from}, 40)) NOT GLOB '*[^0-9a-f]*')`;
17
+ const plain = `(${at} = 41 AND ${hex40(1)})`;
18
+ const prefixed = `(${at} = 43 AND lower(substr(model, 1, 2)) = '0x' AND ${hex40(3)})`;
19
+ return `
20
+ UPDATE ${table} SET
21
+ seller_peer_id = COALESCE(seller_peer_id, CASE WHEN ${at} = 43 THEN lower(substr(model, 3, 40)) ELSE lower(substr(model, 1, 40)) END),
22
+ model = substr(model, ${at} + 1)
23
+ WHERE model IS NOT NULL AND (${plain} OR ${prefixed});`;
24
+ }
25
+ //# sourceMappingURL=pinned-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-model.js","sourceRoot":"","sources":["../../src/gateway/pinned-model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,eAAe,GAAG,iCAAiC,CAAA;AAEzD,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACzD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AAChG,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,EAAE,GAAG,mBAAmB,CAAA;IAC9B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,wBAAwB,IAAI,gCAAgC,CAAA;IAC5F,MAAM,KAAK,GAAG,IAAI,EAAE,aAAa,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,EAAE,mDAAmD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;IACrF,OAAO;WACE,KAAK;0DAC0C,EAAE;4BAChC,EAAE;iCACG,KAAK,OAAO,QAAQ,IAAI,CAAA;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pinned-model.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-model.test.d.ts","sourceRoot":"","sources":["../../src/gateway/pinned-model.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import assert from 'node:assert/strict';
2
+ import { mkdtempSync, rmSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { test } from 'node:test';
6
+ import { splitPinnedModel, splitPinnedModelSql } from './pinned-model.js';
7
+ import { GatewayStore } from './store.js';
8
+ // Obvious fake peer id, never a real one.
9
+ const PEER = 'ab'.repeat(20);
10
+ test('a pinned model splits into the model and the seller; anything else stays as it is', () => {
11
+ assert.deepEqual(splitPinnedModel(`${PEER}@glm-5.3-flash`), { model: 'glm-5.3-flash', peerId: PEER });
12
+ assert.deepEqual(splitPinnedModel(`0x${PEER.toUpperCase()}@kimi-k3`), { model: 'kimi-k3', peerId: PEER });
13
+ assert.deepEqual(splitPinnedModel('glm-5.3-flash'), { model: 'glm-5.3-flash', peerId: null });
14
+ assert.deepEqual(splitPinnedModel('@preset/coder'), { model: '@preset/coder', peerId: null });
15
+ assert.deepEqual(splitPinnedModel('abc@model'), { model: 'abc@model', peerId: null });
16
+ assert.deepEqual(splitPinnedModel(null), { model: null, peerId: null });
17
+ });
18
+ test('requests record a pinned model as the model, with the pin as the seller until the buyer reports one', () => {
19
+ const dir = mkdtempSync(join(tmpdir(), 'antseed-pinned-'));
20
+ const store = new GatewayStore(dir);
21
+ try {
22
+ const owner = store.createOwner({ label: 'O', email: null });
23
+ const { key } = store.createKey({ label: 'k', workspaceId: store.defaultWorkspace().id, ownerMemberId: owner.id, limits: { daily: null, weekly: null, monthly: null, total: null }, expiresAt: null });
24
+ store.startRequest({ tag: 't1', keyId: key.id, buyerIdentity: 'default', method: 'POST', path: '/v1/chat/completions', model: `${PEER}@glm-5.3-flash`, startedAt: 1 });
25
+ const read = () => store.database.prepare('SELECT model, seller_peer_id AS sellerPeerId FROM gateway_requests WHERE tag = ?').get('t1');
26
+ let row = read();
27
+ assert.equal(row.model, 'glm-5.3-flash');
28
+ assert.equal(row.sellerPeerId, PEER);
29
+ store.recordRequestOutcome('t1', { sellerPeerId: 'cd'.repeat(20) });
30
+ row = read();
31
+ assert.equal(row.sellerPeerId, 'cd'.repeat(20), 'the seller the buyer reports wins');
32
+ // Rows recorded before: the migration's SQL splits them the same way, keeping a reported seller.
33
+ store.database.prepare('UPDATE gateway_requests SET model = ?, seller_peer_id = NULL WHERE tag = ?').run(`0x${PEER}@kimi-k3`, 't1');
34
+ store.database.exec(splitPinnedModelSql('gateway_requests'));
35
+ row = read();
36
+ assert.equal(row.model, 'kimi-k3');
37
+ assert.equal(row.sellerPeerId, PEER);
38
+ store.database.prepare('UPDATE gateway_requests SET model = ? WHERE tag = ?').run('not-a-peer@model', 't1');
39
+ store.database.exec(splitPinnedModelSql('gateway_requests'));
40
+ assert.equal(read().model, 'not-a-peer@model');
41
+ }
42
+ finally {
43
+ store.close();
44
+ rmSync(dir, { recursive: true, force: true });
45
+ }
46
+ });
47
+ //# sourceMappingURL=pinned-model.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-model.test.js","sourceRoot":"","sources":["../../src/gateway/pinned-model.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Deposit confirmations: a deposit credited to a workspace wallet, checked
3
+ * against its transaction receipt so the confirmation states only what the
4
+ * chain shows.
5
+ *
6
+ * Two kinds of deposit credit a wallet:
7
+ * - relay: USDC is sent to the workspace wallet (from a wallet, an exchange,
8
+ * or minted straight in by the USDC issuer for a card purchase) and a
9
+ * relayer sweeps it into AntseedDeposits, keeping a fixed fee
10
+ * (`SweepExecuted`). Where the USDC came from is the USDC `Transfer`s into
11
+ * the wallet shortly before the sweep, found with one bounded log query.
12
+ * - direct: a connected wallet deposits for the workspace wallet itself
13
+ * (`Deposited` without a sweep); the payer is the transaction's sender.
14
+ */
15
+ import { type Log, type TransactionReceipt } from 'ethers';
16
+ import type { DepositSource } from '../store.js';
17
+ /** Public RPCs cap log queries at about 1000 blocks; on Base that is the half hour before the sweep. */
18
+ export declare const SOURCE_LOOKBACK_BLOCKS = 999;
19
+ export interface DepositChain {
20
+ depositsContractAddress: string;
21
+ depositRelayAddress?: string | undefined;
22
+ usdcContractAddress: string;
23
+ }
24
+ /** The provider calls this needs; ethers providers (and the shared chain provider) satisfy it. */
25
+ export interface DepositChainProvider {
26
+ getTransactionReceipt(hash: string): Promise<TransactionReceipt | null>;
27
+ getTransaction(hash: string): Promise<{
28
+ from: string;
29
+ } | null>;
30
+ getBlock(block: number): Promise<{
31
+ timestamp: number;
32
+ } | null>;
33
+ getLogs(filter: {
34
+ address: string;
35
+ topics: Array<string | null>;
36
+ fromBlock: number;
37
+ toBlock: number;
38
+ }): Promise<Log[]>;
39
+ }
40
+ export interface VerifiedDeposit {
41
+ txHash: string;
42
+ wallet: string;
43
+ kind: 'relay' | 'direct';
44
+ creditedUsdc: number;
45
+ feeUsdc: number;
46
+ blockNumber: number;
47
+ /** Epoch ms. */
48
+ blockTime: number;
49
+ sources: DepositSource[];
50
+ }
51
+ /**
52
+ * The deposit `txHash` credited to `wallet`, or null when the transaction
53
+ * failed or credited another wallet (or nothing). Where the money came from
54
+ * is best effort: an RPC that refuses the log query leaves `sources` empty.
55
+ */
56
+ export declare function verifyDeposit(provider: DepositChainProvider, chain: DepositChain, txHash: string, wallet: string): Promise<VerifiedDeposit | null>;
57
+ //# sourceMappingURL=deposits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposits.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/deposits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAyB,KAAK,GAAG,EAAE,KAAK,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,wGAAwG;AACxG,eAAO,MAAM,sBAAsB,MAAM,CAAA;AAMzC,MAAM,WAAW,YAAY;IAC3B,uBAAuB,EAAE,MAAM,CAAA;IAC/B,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,kGAAkG;AAClG,MAAM,WAAW,oBAAoB;IACnC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;IACvE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC9D,OAAO,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;CACvH;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,aAAa,EAAE,CAAA;CACzB;AAYD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkCxJ"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Deposit confirmations: a deposit credited to a workspace wallet, checked
3
+ * against its transaction receipt so the confirmation states only what the
4
+ * chain shows.
5
+ *
6
+ * Two kinds of deposit credit a wallet:
7
+ * - relay: USDC is sent to the workspace wallet (from a wallet, an exchange,
8
+ * or minted straight in by the USDC issuer for a card purchase) and a
9
+ * relayer sweeps it into AntseedDeposits, keeping a fixed fee
10
+ * (`SweepExecuted`). Where the USDC came from is the USDC `Transfer`s into
11
+ * the wallet shortly before the sweep, found with one bounded log query.
12
+ * - direct: a connected wallet deposits for the workspace wallet itself
13
+ * (`Deposited` without a sweep); the payer is the transaction's sender.
14
+ */
15
+ import { Interface, getAddress } from 'ethers';
16
+ /** Public RPCs cap log queries at about 1000 blocks; on Base that is the half hour before the sweep. */
17
+ export const SOURCE_LOOKBACK_BLOCKS = 999;
18
+ const DEPOSITS_ABI = new Interface(['event Deposited(address indexed buyer, uint256 amount)']);
19
+ const RELAY_ABI = new Interface(['event SweepExecuted(address indexed buyer, address indexed relayer, uint256 deposited, uint256 fee, bytes32 authNonce)']);
20
+ const USDC_ABI = new Interface(['event Transfer(address indexed from, address indexed to, uint256 value)']);
21
+ const same = (a, b) => !!b && a.toLowerCase() === b.toLowerCase();
22
+ function parse(abi, log) {
23
+ try {
24
+ return abi.parseLog({ topics: [...log.topics], data: log.data });
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ /**
31
+ * The deposit `txHash` credited to `wallet`, or null when the transaction
32
+ * failed or credited another wallet (or nothing). Where the money came from
33
+ * is best effort: an RPC that refuses the log query leaves `sources` empty.
34
+ */
35
+ export async function verifyDeposit(provider, chain, txHash, wallet) {
36
+ const receipt = await provider.getTransactionReceipt(txHash);
37
+ if (!receipt || receipt.status !== 1)
38
+ return null;
39
+ let credited = null;
40
+ let fee = null;
41
+ let swept = null;
42
+ for (const log of receipt.logs) {
43
+ if (same(log.address, chain.depositsContractAddress)) {
44
+ const event = parse(DEPOSITS_ABI, log);
45
+ if (event?.name === 'Deposited' && same(event.args[0], wallet))
46
+ credited = (credited ?? 0n) + event.args[1];
47
+ }
48
+ else if (chain.depositRelayAddress && same(log.address, chain.depositRelayAddress)) {
49
+ const event = parse(RELAY_ABI, log);
50
+ if (event?.name === 'SweepExecuted' && same(event.args[0], wallet)) {
51
+ swept = event.args[2];
52
+ fee = event.args[3];
53
+ }
54
+ }
55
+ }
56
+ if (credited === null)
57
+ return null;
58
+ const block = await provider.getBlock(receipt.blockNumber);
59
+ const kind = swept !== null ? 'relay' : 'direct';
60
+ const sources = kind === 'relay'
61
+ ? await incomingTransfers(provider, chain, wallet, receipt.blockNumber, receipt.hash, credited + (fee ?? 0n)).catch(() => [])
62
+ : await directPayer(provider, chain, receipt).catch(() => []);
63
+ return {
64
+ txHash: receipt.hash.toLowerCase(),
65
+ wallet: getAddress(wallet),
66
+ kind,
67
+ creditedUsdc: Number(credited),
68
+ feeUsdc: Number(fee ?? 0n),
69
+ blockNumber: receipt.blockNumber,
70
+ blockTime: (block?.timestamp ?? 0) * 1000,
71
+ sources,
72
+ };
73
+ }
74
+ /**
75
+ * USDC that arrived in the wallet before the sweep, newest first, until it
76
+ * covers what the sweep moved (credited + fee). A transfer from the zero
77
+ * address is USDC the issuer minted into the wallet (a card purchase).
78
+ */
79
+ async function incomingTransfers(provider, chain, wallet, sweepBlock, sweepTx, swept) {
80
+ const transfer = USDC_ABI.getEvent('Transfer').topicHash;
81
+ const to = `0x${wallet.toLowerCase().replace(/^0x/, '').padStart(64, '0')}`;
82
+ const logs = await provider.getLogs({
83
+ address: chain.usdcContractAddress,
84
+ topics: [transfer, null, to],
85
+ fromBlock: Math.max(0, sweepBlock - SOURCE_LOOKBACK_BLOCKS),
86
+ toBlock: sweepBlock,
87
+ });
88
+ const sources = [];
89
+ let covered = 0n;
90
+ for (const log of [...logs].reverse()) {
91
+ if (same(log.transactionHash, sweepTx))
92
+ continue;
93
+ const event = parse(USDC_ABI, log);
94
+ if (!event)
95
+ continue;
96
+ const amount = event.args[2];
97
+ sources.push({ from: getAddress(event.args[0]), amountUsdc: Number(amount), txHash: log.transactionHash.toLowerCase() });
98
+ covered += amount;
99
+ if (covered >= swept)
100
+ break;
101
+ }
102
+ return sources.reverse();
103
+ }
104
+ /** A direct deposit: the transaction's sender paid, by the USDC it moved in the same transaction. */
105
+ async function directPayer(provider, chain, receipt) {
106
+ const tx = await provider.getTransaction(receipt.hash);
107
+ if (!tx)
108
+ return [];
109
+ let amount = 0n;
110
+ for (const log of receipt.logs) {
111
+ if (!same(log.address, chain.usdcContractAddress))
112
+ continue;
113
+ const event = parse(USDC_ABI, log);
114
+ if (event?.name === 'Transfer' && same(event.args[0], tx.from))
115
+ amount += event.args[2];
116
+ }
117
+ return [{ from: getAddress(tx.from), amountUsdc: Number(amount), txHash: receipt.hash.toLowerCase() }];
118
+ }
119
+ //# sourceMappingURL=deposits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposits.js","sourceRoot":"","sources":["../../../src/gateway/services/deposits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deposits.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposits.test.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/deposits.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ import assert from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { AbiCoder, Interface, zeroPadValue } from 'ethers';
4
+ import { SOURCE_LOOKBACK_BLOCKS, verifyDeposit } from './deposits.js';
5
+ // Obvious fakes: fixed test addresses and hashes, never real ones.
6
+ const DEPOSITS = `0x${'d0'.repeat(20)}`;
7
+ const RELAY = `0x${'e0'.repeat(20)}`;
8
+ const USDC = `0x${'f0'.repeat(20)}`;
9
+ const WALLET = `0x${'11'.repeat(20)}`;
10
+ const PAYER = `0x${'22'.repeat(20)}`;
11
+ const RELAYER = `0x${'33'.repeat(20)}`;
12
+ const SWEEP_TX = `0x${'a1'.repeat(32)}`;
13
+ const FUND_TX = `0x${'b2'.repeat(32)}`;
14
+ const CHAIN = { depositsContractAddress: DEPOSITS, depositRelayAddress: RELAY, usdcContractAddress: USDC };
15
+ const abi = new Interface([
16
+ 'event Deposited(address indexed buyer, uint256 amount)',
17
+ 'event SweepExecuted(address indexed buyer, address indexed relayer, uint256 deposited, uint256 fee, bytes32 authNonce)',
18
+ 'event Transfer(address indexed from, address indexed to, uint256 value)',
19
+ ]);
20
+ const coder = AbiCoder.defaultAbiCoder();
21
+ const topic = (address) => zeroPadValue(address, 32);
22
+ const log = (address, topics, data, txHash) => ({ address, topics, data, transactionHash: txHash });
23
+ const deposited = (buyer, amount, txHash) => log(DEPOSITS, [abi.getEvent('Deposited').topicHash, topic(buyer)], coder.encode(['uint256'], [amount]), txHash);
24
+ const swept = (buyer, net, fee, txHash) => log(RELAY, [abi.getEvent('SweepExecuted').topicHash, topic(buyer), topic(RELAYER)], coder.encode(['uint256', 'uint256', 'bytes32'], [net, fee, `0x${'00'.repeat(32)}`]), txHash);
25
+ const transfer = (from, to, value, txHash) => log(USDC, [abi.getEvent('Transfer').topicHash, topic(from), topic(to)], coder.encode(['uint256'], [value]), txHash);
26
+ function provider(receipt, incoming = []) {
27
+ const queries = [];
28
+ return {
29
+ queries,
30
+ getTransactionReceipt: async (hash) => (receipt ? { hash, status: receipt.status, blockNumber: 5_000, logs: receipt.logs } : null),
31
+ getTransaction: async () => ({ from: receipt?.from ?? PAYER }),
32
+ getBlock: async () => ({ timestamp: 1_700_000_000 }),
33
+ getLogs: async (filter) => { queries.push(filter); return incoming; },
34
+ };
35
+ }
36
+ test('a relayed deposit: credited, fee, and the USDC that funded it', async () => {
37
+ const chain = provider({ status: 1, logs: [transfer(WALLET, RELAY, 1050000n, SWEEP_TX), deposited(WALLET, 1000000n, SWEEP_TX), swept(WALLET, 1000000n, 50000n, SWEEP_TX)] }, [transfer('0x0000000000000000000000000000000000000000', WALLET, 1050000n, FUND_TX)]);
38
+ const result = await verifyDeposit(chain, CHAIN, SWEEP_TX, WALLET);
39
+ assert.equal(result?.kind, 'relay');
40
+ assert.equal(result?.creditedUsdc, 1_000_000);
41
+ assert.equal(result?.feeUsdc, 50_000);
42
+ assert.equal(result?.blockTime, 1_700_000_000_000);
43
+ assert.deepEqual(result?.sources, [{ from: '0x0000000000000000000000000000000000000000', amountUsdc: 1_050_000, txHash: FUND_TX }]);
44
+ assert.deepEqual(chain.queries[0], { address: USDC, topics: [abi.getEvent('Transfer').topicHash, null, topic(WALLET)], fromBlock: 5_000 - SOURCE_LOOKBACK_BLOCKS, toBlock: 5_000 });
45
+ });
46
+ test('a direct deposit: the sender paid, no fee', async () => {
47
+ const result = await verifyDeposit(provider({ status: 1, logs: [transfer(PAYER, DEPOSITS, 2000000n, SWEEP_TX), deposited(WALLET, 2000000n, SWEEP_TX)] }), CHAIN, SWEEP_TX, WALLET);
48
+ assert.equal(result?.kind, 'direct');
49
+ assert.equal(result?.feeUsdc, 0);
50
+ assert.deepEqual(result?.sources, [{ from: PAYER, amountUsdc: 2_000_000, txHash: SWEEP_TX }]);
51
+ });
52
+ test('not a deposit to this wallet: another wallet, a failed transaction, a forged event, or no receipt', async () => {
53
+ const other = `0x${'99'.repeat(20)}`;
54
+ assert.equal(await verifyDeposit(provider({ status: 1, logs: [deposited(other, 1n, SWEEP_TX)] }), CHAIN, SWEEP_TX, WALLET), null);
55
+ assert.equal(await verifyDeposit(provider({ status: 0, logs: [deposited(WALLET, 1n, SWEEP_TX)] }), CHAIN, SWEEP_TX, WALLET), null);
56
+ const forged = { ...deposited(WALLET, 1n, SWEEP_TX), address: `0x${'66'.repeat(20)}` };
57
+ assert.equal(await verifyDeposit(provider({ status: 1, logs: [forged] }), CHAIN, SWEEP_TX, WALLET), null);
58
+ assert.equal(await verifyDeposit(provider(null), CHAIN, SWEEP_TX, WALLET), null);
59
+ });
60
+ test('a log query the RPC refuses leaves the sources empty, not the confirmation', async () => {
61
+ const chain = provider({ status: 1, logs: [deposited(WALLET, 1000000n, SWEEP_TX), swept(WALLET, 1000000n, 50000n, SWEEP_TX)] });
62
+ chain.getLogs = async () => { throw new Error('block range too large'); };
63
+ const result = await verifyDeposit(chain, CHAIN, SWEEP_TX, WALLET);
64
+ assert.equal(result?.creditedUsdc, 1_000_000);
65
+ assert.deepEqual(result?.sources, []);
66
+ });
67
+ //# sourceMappingURL=deposits.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposits.test.js","sourceRoot":"","sources":["../../../src/gateway/services/deposits.test.ts"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ test('eighteen processes opening a v2 database at once migrate it exactly once',
61
61
  const store = new GatewayStore(dir);
62
62
  try {
63
63
  assert.equal(store.database.pragma('user_version', { simple: true }), MIGRATIONS.length);
64
- assert.equal(MIGRATIONS.length, 5, 'the console schema, chat history and free-seller requests are three migrations on top of the two that shipped');
64
+ assert.equal(MIGRATIONS.length, 7, 'the console schema, chat history, free-seller requests, deposits and pinned-model splitting are five migrations on top of the two that shipped');
65
65
  assert.equal(store.spendByPeriod({ keyId: 'key_team' }).total, 250_000, 'rollups were backfilled once');
66
66
  assert.deepEqual(store.listWorkspaces().map((ws) => ws.buyerIdentity), ['default', 'team-a']);
67
67
  assert.equal(store.database.prepare('SELECT COUNT(*) AS n FROM auth_schema_version').get().n, 1);
@@ -1 +1 @@
1
- {"version":3,"file":"store-data.test.js","sourceRoot":"","sources":["../../src/gateway/store-data.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store-data.test.js","sourceRoot":"","sources":["../../src/gateway/store-data.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE7E,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AAE3E,SAAS,OAAO;IACd,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAA;IAChE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;AAC9E,CAAC;AAED,wGAAwG;AACxG,SAAS,gBAAgB,CAAC,GAAW;IACnC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IAC3D,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAA;IACvB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAA;IACvB,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAC7B,EAAE,CAAC,OAAO,CAAC;wEAC2D,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACpH,EAAE,CAAC,OAAO,CAAC,qKAAqK,CAAC,CAAC,GAAG,EAAE,CAAA;IACvL,EAAE,CAAC,OAAO,CAAC;4EAC+D,CAAC,CAAC,GAAG,EAAE,CAAA;IACjF,EAAE,CAAC,KAAK,EAAE,CAAA;AACZ,CAAC;AAED,SAAS,KAAK,CAAC,KAAmB,EAAE,GAAW,EAAE,KAAa,EAAE,SAAiB,EAAE,QAAqD,EAAE;IACxI,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;AAC5K,CAAC;AAED,IAAI,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;IAC1F,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACrB,MAAM,MAAM,GAAG;;;;;;;KAOd,CAAA;QACD,MAAM,GAAG,GAAG;YACV,GAAG,OAAO,CAAC,GAAG;YACd,SAAS,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI;YACtD,QAAQ,EAAE,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI;YACvD,QAAQ,EAAE,GAAG;YACb,2EAA2E;YAC3E,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;SACrC,CAAA;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAA0C,CAAC,OAAO,EAAE,EAAE;YAC7G,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;YAC1H,IAAI,MAAM,GAAG,EAAE,CAAA;YACf,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;YAC1E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QACxD,CAAC,CAAC,CAAC,CAAA;QACH,KAAK,MAAM,MAAM,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAEzF,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;YACxF,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,gJAAgJ,CAAC,CAAA;YACpL,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,8BAA8B,CAAC,CAAA;YACvG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;YAC7F,MAAM,CAAC,KAAK,CAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrH,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gFAAgF,EAAE,GAAG,EAAE;IAC1F,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACrB,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,4FAA4F,CAAC,CAAC,GAAG,EAAE,CAAA;YACtI,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAClF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAChF,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yDAAyD,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,EAAE,GAAG,EAAE;IAC3G,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC;YACH,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACnE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC,CAAA;YAChE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC,CAAA;YAC9E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC,CAAA;QACpF,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iFAAiF,EAAE,GAAG,EAAE;IAC3F,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;QACrE,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;QACrE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/H,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;QACxJ,mDAAmD;QACnD,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7F,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;QAEnI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACnE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAClE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACpE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC5G,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QACtF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QACnD,qCAAqC;QACrC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IAC7H,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,4FAA4F,EAAE,GAAG,EAAE;IACtG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9F,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9F,0DAA0D;QAC1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;YAAE,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QACzL,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzC,KAAK,CAAC,oBAAoB,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;QACpE,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAA;QAE1F,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,IAAI,MAAM,GAA8C,IAAI,CAAA;QAC5D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YACrD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAK;YAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YACxC,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,EAAE,CAAA;QACvE,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC5F,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,KAAK,EAAE,4BAA4B,CAAC,CAAA;QAE9F,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3E,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;QAC7C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;QACrD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;QACxC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAA;QAC7D,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;QACzF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEzD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAE,CAAA;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;QAC9C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,4BAA4B,CAAC,CAAA;QAEtF,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QAC7H,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAE,CAAA;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChD,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;IACnG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;QAChD,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjC,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7F,IAAI,MAAM,KAAK,IAAI;gBAAE,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3F,CAAC,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAA;QACrG,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACtE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAExG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACtE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAChJ,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5G,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAClD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;QAExD,gFAAgF;QAChF,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5F,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA;QAC9C,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACzI,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC,CAAA;QAClJ,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA;QAC3E,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACtC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ;YAC3C,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS;YAC7C,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,SAAS;SAClE,CAAC,CAAA;QACF,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAA;QAC7F,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAA;QAC1F,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,qCAAqC,CAAC,CAAA;IACjH,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8EAA8E,EAAE,GAAG,EAAE;IACxF,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnF,MAAM,KAAK,GAAG,eAAe,GAAG,CAAC,CAAA;QACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,KAAK,EAAE,EAAE,CAAC,CAAA;YAC7E,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC5L,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,CAAC,CAAC,CAAA;QACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAA;QACnF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;QACnC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACxI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAA;QACxG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,MAAO,CAAC,MAAM,EAAE,eAAe,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAA;IACtI,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IAClF,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;QAC3D,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAA;QACvB,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC7B,EAAE,CAAC,OAAO,CAAC;yEAC0D,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,CAAA;QAClH,EAAE,CAAC,KAAK,EAAE,CAAA;QACV,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;YACxF,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAE,CAAA;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;YACrC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;YAC3C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;YAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;QAC5C,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qFAAqF,EAAE,GAAG,EAAE;IAC/F,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9I,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,MAAc,EAAE,EAAU,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QACnM,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QACpB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,oBAAoB;QAC7D,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,wBAAwB;QACjE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,aAAa;QAC5D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,kCAAkC,CAAC,CAAA;QAC7E,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3I,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QACxE,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAClG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7D,CAAC;QACD,8BAA8B;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,2FAA2F,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAsB,CAAA;QACnK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC1C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IAC3H,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,uFAAuF,EAAE,GAAG,EAAE;IACjG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAClC,IAAI,GAAG,GAAG,SAAS,CAAA;IACnB,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACrH,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACtB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QACzD,GAAG,IAAI,MAAM,CAAA;QACb,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACtB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,UAAU,EAAE,SAAS,EAAE,2BAA2B,CAAC,CAAA;QACtF,GAAG,IAAI,MAAM,CAAA;QACb,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACtB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QAEzD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxF,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC/B,GAAG,IAAI,KAAK,CAAA;QACZ,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QAElE,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACzE,oGAAoG;QACpG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,kFAAkF,CAAC,CAAC,GAAG,EAAE,CAAA;QAChH,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACzE,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAA;QACvD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAA;QACzE,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAA4B,eAAe,CAAE,CAAA;QAC1E,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAA;IACzG,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -1,6 +1,2 @@
1
- /**
2
- * Schema migrations, applied in order and tracked in `user_version`.
3
- * Append-only: never edit a migration that has shipped.
4
- */
5
1
  export declare const MIGRATIONS: readonly string[];
6
2
  //# sourceMappingURL=store-migrations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store-migrations.d.ts","sourceRoot":"","sources":["../../src/gateway/store-migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAuSvC,CAAA"}
1
+ {"version":3,"file":"store-migrations.d.ts","sourceRoot":"","sources":["../../src/gateway/store-migrations.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EA6TvC,CAAA"}
@@ -2,6 +2,7 @@
2
2
  * Schema migrations, applied in order and tracked in `user_version`.
3
3
  * Append-only: never edit a migration that has shipped.
4
4
  */
5
+ import { splitPinnedModelSql } from './pinned-model.js';
5
6
  export const MIGRATIONS = [
6
7
  `
7
8
  CREATE TABLE api_keys (
@@ -297,5 +298,27 @@ export const MIGRATIONS = [
297
298
  `
298
299
  ALTER TABLE gateway_requests ADD COLUMN served_free INTEGER NOT NULL DEFAULT 0;
299
300
  `,
301
+ // Deposits credited to a workspace wallet, as verified on-chain, and who approved each one (deposit confirmations).
302
+ `
303
+ CREATE TABLE deposits (
304
+ tx_hash TEXT PRIMARY KEY,
305
+ workspace_id TEXT NOT NULL,
306
+ wallet TEXT NOT NULL,
307
+ kind TEXT NOT NULL CHECK (kind IN ('relay', 'direct')),
308
+ credited_usdc INTEGER NOT NULL,
309
+ fee_usdc INTEGER NOT NULL DEFAULT 0,
310
+ block_number INTEGER NOT NULL,
311
+ block_time INTEGER NOT NULL,
312
+ sources TEXT NOT NULL DEFAULT '[]',
313
+ approved_by_id TEXT,
314
+ approved_by_label TEXT,
315
+ approved_at INTEGER,
316
+ approval_note TEXT,
317
+ recorded_at INTEGER NOT NULL
318
+ );
319
+ CREATE INDEX deposits_workspace ON deposits(workspace_id, block_time);
320
+ `,
321
+ // Pinned requests (`<peerId>@<model>`) recorded the pin in the model: keep the model, and the pin as the seller when none was reported.
322
+ [splitPinnedModelSql('gateway_requests'), splitPinnedModelSql('request_rollups'), splitPinnedModelSql('ledger_entries')].join('\n'),
300
323
  ];
301
324
  //# sourceMappingURL=store-migrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store-migrations.js","sourceRoot":"","sources":["../../src/gateway/store-migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CC;IACD;;GAEC;IACD,wEAAwE;IACxE,0EAA0E;IAC1E,oEAAoE;IACpE,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,oEAAoE;IACpE,0EAA0E;IAC1E,yEAAyE;IACzE,+CAA+C;IAC/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqNC;IACD,yFAAyF;IACzF;;;;;;;;;;;;;;GAcC;IACD,gHAAgH;IAChH;;GAEC;CACF,CAAA"}
1
+ {"version":3,"file":"store-migrations.js","sourceRoot":"","sources":["../../src/gateway/store-migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CC;IACD;;GAEC;IACD,wEAAwE;IACxE,0EAA0E;IAC1E,oEAAoE;IACpE,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,oEAAoE;IACpE,0EAA0E;IAC1E,yEAAyE;IACzE,+CAA+C;IAC/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqNC;IACD,yFAAyF;IACzF;;;;;;;;;;;;;;GAcC;IACD,gHAAgH;IAChH;;GAEC;IACD,oHAAoH;IACpH;;;;;;;;;;;;;;;;;;GAkBC;IACD,wIAAwI;IACxI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACpI,CAAA"}
@@ -686,6 +686,16 @@ export declare class GatewayStore {
686
686
  messages: unknown[];
687
687
  }): void;
688
688
  deleteChatThread(id: string): boolean;
689
+ listDeposits(workspaceId: string): DepositRecord[];
690
+ getDeposit(txHash: string): DepositRecord | null;
691
+ /** Records a verified deposit once; an existing row (and its approval) is kept as it is. */
692
+ insertDeposit(input: Omit<DepositRecord, 'approval' | 'recordedAt'>): DepositRecord;
693
+ /** Sets (or with null clears) who approved a deposit. */
694
+ setDepositApproval(txHash: string, approval: {
695
+ byId: string | null;
696
+ byLabel: string;
697
+ note: string | null;
698
+ } | null): DepositRecord | null;
689
699
  /**
690
700
  * Settings are read on every request, so values are cached for a few
691
701
  * seconds. A write through this store clears its cache at once; a write by
@@ -696,4 +706,30 @@ export declare class GatewayStore {
696
706
  }
697
707
  /** Groupings whose groups are UTC time buckets (listed oldest first). */
698
708
  export declare function isTimeGrouping(groupBy: UsageGroupBy): boolean;
709
+ /** Where the USDC of a deposit came from: a wallet (or an exchange), or minted straight in by the USDC issuer (card purchases). */
710
+ export interface DepositSource {
711
+ from: string;
712
+ amountUsdc: number;
713
+ txHash: string;
714
+ }
715
+ /** A deposit credited to a workspace wallet, verified against its transaction receipt. */
716
+ export interface DepositRecord {
717
+ txHash: string;
718
+ workspaceId: string;
719
+ wallet: string;
720
+ /** relay: USDC sent to the wallet and swept in by a relayer (fee taken); direct: deposited by a connected wallet. */
721
+ kind: 'relay' | 'direct';
722
+ creditedUsdc: number;
723
+ feeUsdc: number;
724
+ blockNumber: number;
725
+ blockTime: number;
726
+ sources: DepositSource[];
727
+ approval: {
728
+ byId: string | null;
729
+ byLabel: string;
730
+ at: number;
731
+ note: string | null;
732
+ } | null;
733
+ recordedAt: number;
734
+ }
699
735
  //# sourceMappingURL=store.d.ts.map