@claw-network/node 0.2.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 (190) hide show
  1. package/README.md +49 -0
  2. package/dist/api/api-key-store.d.ts +74 -0
  3. package/dist/api/api-key-store.d.ts.map +1 -0
  4. package/dist/api/api-key-store.js +170 -0
  5. package/dist/api/api-key-store.js.map +1 -0
  6. package/dist/api/auth.d.ts +30 -0
  7. package/dist/api/auth.d.ts.map +1 -0
  8. package/dist/api/auth.js +115 -0
  9. package/dist/api/auth.js.map +1 -0
  10. package/dist/api/legacy.d.ts +26 -0
  11. package/dist/api/legacy.d.ts.map +1 -0
  12. package/dist/api/legacy.js +281 -0
  13. package/dist/api/legacy.js.map +1 -0
  14. package/dist/api/middleware.d.ts +35 -0
  15. package/dist/api/middleware.d.ts.map +1 -0
  16. package/dist/api/middleware.js +75 -0
  17. package/dist/api/middleware.js.map +1 -0
  18. package/dist/api/response.d.ts +85 -0
  19. package/dist/api/response.d.ts.map +1 -0
  20. package/dist/api/response.js +185 -0
  21. package/dist/api/response.js.map +1 -0
  22. package/dist/api/router.d.ts +45 -0
  23. package/dist/api/router.d.ts.map +1 -0
  24. package/dist/api/router.js +183 -0
  25. package/dist/api/router.js.map +1 -0
  26. package/dist/api/routes/admin.d.ts +11 -0
  27. package/dist/api/routes/admin.d.ts.map +1 -0
  28. package/dist/api/routes/admin.js +124 -0
  29. package/dist/api/routes/admin.js.map +1 -0
  30. package/dist/api/routes/contracts.d.ts +7 -0
  31. package/dist/api/routes/contracts.d.ts.map +1 -0
  32. package/dist/api/routes/contracts.js +665 -0
  33. package/dist/api/routes/contracts.js.map +1 -0
  34. package/dist/api/routes/dao.d.ts +7 -0
  35. package/dist/api/routes/dao.d.ts.map +1 -0
  36. package/dist/api/routes/dao.js +549 -0
  37. package/dist/api/routes/dao.js.map +1 -0
  38. package/dist/api/routes/dev.d.ts +9 -0
  39. package/dist/api/routes/dev.d.ts.map +1 -0
  40. package/dist/api/routes/dev.js +273 -0
  41. package/dist/api/routes/dev.js.map +1 -0
  42. package/dist/api/routes/escrows.d.ts +7 -0
  43. package/dist/api/routes/escrows.d.ts.map +1 -0
  44. package/dist/api/routes/escrows.js +454 -0
  45. package/dist/api/routes/escrows.js.map +1 -0
  46. package/dist/api/routes/identities.d.ts +7 -0
  47. package/dist/api/routes/identities.d.ts.map +1 -0
  48. package/dist/api/routes/identities.js +245 -0
  49. package/dist/api/routes/identities.js.map +1 -0
  50. package/dist/api/routes/markets-capabilities.d.ts +7 -0
  51. package/dist/api/routes/markets-capabilities.d.ts.map +1 -0
  52. package/dist/api/routes/markets-capabilities.js +477 -0
  53. package/dist/api/routes/markets-capabilities.js.map +1 -0
  54. package/dist/api/routes/markets-disputes.d.ts +7 -0
  55. package/dist/api/routes/markets-disputes.d.ts.map +1 -0
  56. package/dist/api/routes/markets-disputes.js +102 -0
  57. package/dist/api/routes/markets-disputes.js.map +1 -0
  58. package/dist/api/routes/markets-info.d.ts +7 -0
  59. package/dist/api/routes/markets-info.d.ts.map +1 -0
  60. package/dist/api/routes/markets-info.js +523 -0
  61. package/dist/api/routes/markets-info.js.map +1 -0
  62. package/dist/api/routes/markets-search.d.ts +7 -0
  63. package/dist/api/routes/markets-search.d.ts.map +1 -0
  64. package/dist/api/routes/markets-search.js +38 -0
  65. package/dist/api/routes/markets-search.js.map +1 -0
  66. package/dist/api/routes/markets-tasks.d.ts +7 -0
  67. package/dist/api/routes/markets-tasks.d.ts.map +1 -0
  68. package/dist/api/routes/markets-tasks.js +539 -0
  69. package/dist/api/routes/markets-tasks.js.map +1 -0
  70. package/dist/api/routes/node.d.ts +7 -0
  71. package/dist/api/routes/node.d.ts.map +1 -0
  72. package/dist/api/routes/node.js +53 -0
  73. package/dist/api/routes/node.js.map +1 -0
  74. package/dist/api/routes/nonce.d.ts +10 -0
  75. package/dist/api/routes/nonce.d.ts.map +1 -0
  76. package/dist/api/routes/nonce.js +65 -0
  77. package/dist/api/routes/nonce.js.map +1 -0
  78. package/dist/api/routes/reputations.d.ts +7 -0
  79. package/dist/api/routes/reputations.d.ts.map +1 -0
  80. package/dist/api/routes/reputations.js +243 -0
  81. package/dist/api/routes/reputations.js.map +1 -0
  82. package/dist/api/routes/transfers.d.ts +7 -0
  83. package/dist/api/routes/transfers.d.ts.map +1 -0
  84. package/dist/api/routes/transfers.js +88 -0
  85. package/dist/api/routes/transfers.js.map +1 -0
  86. package/dist/api/routes/wallets.d.ts +7 -0
  87. package/dist/api/routes/wallets.d.ts.map +1 -0
  88. package/dist/api/routes/wallets.js +132 -0
  89. package/dist/api/routes/wallets.js.map +1 -0
  90. package/dist/api/schemas/common.d.ts +45 -0
  91. package/dist/api/schemas/common.d.ts.map +1 -0
  92. package/dist/api/schemas/common.js +30 -0
  93. package/dist/api/schemas/common.js.map +1 -0
  94. package/dist/api/schemas/contracts.d.ts +284 -0
  95. package/dist/api/schemas/contracts.d.ts.map +1 -0
  96. package/dist/api/schemas/contracts.js +79 -0
  97. package/dist/api/schemas/contracts.js.map +1 -0
  98. package/dist/api/schemas/dao.d.ts +271 -0
  99. package/dist/api/schemas/dao.d.ts.map +1 -0
  100. package/dist/api/schemas/dao.js +78 -0
  101. package/dist/api/schemas/dao.js.map +1 -0
  102. package/dist/api/schemas/identity.d.ts +75 -0
  103. package/dist/api/schemas/identity.d.ts.map +1 -0
  104. package/dist/api/schemas/identity.js +32 -0
  105. package/dist/api/schemas/identity.js.map +1 -0
  106. package/dist/api/schemas/markets.d.ts +822 -0
  107. package/dist/api/schemas/markets.d.ts.map +1 -0
  108. package/dist/api/schemas/markets.js +246 -0
  109. package/dist/api/schemas/markets.js.map +1 -0
  110. package/dist/api/schemas/wallet.d.ts +163 -0
  111. package/dist/api/schemas/wallet.d.ts.map +1 -0
  112. package/dist/api/schemas/wallet.js +54 -0
  113. package/dist/api/schemas/wallet.js.map +1 -0
  114. package/dist/api/server.d.ts +45 -0
  115. package/dist/api/server.d.ts.map +1 -0
  116. package/dist/api/server.js +131 -0
  117. package/dist/api/server.js.map +1 -0
  118. package/dist/api/types.d.ts +69 -0
  119. package/dist/api/types.d.ts.map +1 -0
  120. package/dist/api/types.js +196 -0
  121. package/dist/api/types.js.map +1 -0
  122. package/dist/daemon.d.ts +11 -0
  123. package/dist/daemon.d.ts.map +1 -0
  124. package/dist/daemon.js +248 -0
  125. package/dist/daemon.js.map +1 -0
  126. package/dist/index.d.ts +137 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +795 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/indexer/index.d.ts +10 -0
  131. package/dist/indexer/index.d.ts.map +1 -0
  132. package/dist/indexer/index.js +7 -0
  133. package/dist/indexer/index.js.map +1 -0
  134. package/dist/indexer/indexer.d.ts +60 -0
  135. package/dist/indexer/indexer.d.ts.map +1 -0
  136. package/dist/indexer/indexer.js +408 -0
  137. package/dist/indexer/indexer.js.map +1 -0
  138. package/dist/indexer/query.d.ts +141 -0
  139. package/dist/indexer/query.d.ts.map +1 -0
  140. package/dist/indexer/query.js +244 -0
  141. package/dist/indexer/query.js.map +1 -0
  142. package/dist/indexer/store.d.ts +95 -0
  143. package/dist/indexer/store.d.ts.map +1 -0
  144. package/dist/indexer/store.js +250 -0
  145. package/dist/indexer/store.js.map +1 -0
  146. package/dist/logger.d.ts +13 -0
  147. package/dist/logger.d.ts.map +1 -0
  148. package/dist/logger.js +37 -0
  149. package/dist/logger.js.map +1 -0
  150. package/dist/p2p/sync.d.ts +105 -0
  151. package/dist/p2p/sync.d.ts.map +1 -0
  152. package/dist/p2p/sync.js +875 -0
  153. package/dist/p2p/sync.js.map +1 -0
  154. package/dist/policy/liquidity-policy.d.ts +17 -0
  155. package/dist/policy/liquidity-policy.d.ts.map +1 -0
  156. package/dist/policy/liquidity-policy.js +112 -0
  157. package/dist/policy/liquidity-policy.js.map +1 -0
  158. package/dist/services/chain-config.d.ts +226 -0
  159. package/dist/services/chain-config.d.ts.map +1 -0
  160. package/dist/services/chain-config.js +105 -0
  161. package/dist/services/chain-config.js.map +1 -0
  162. package/dist/services/contract-provider.d.ts +44 -0
  163. package/dist/services/contract-provider.d.ts.map +1 -0
  164. package/dist/services/contract-provider.js +167 -0
  165. package/dist/services/contract-provider.js.map +1 -0
  166. package/dist/services/contracts-service.d.ts +192 -0
  167. package/dist/services/contracts-service.d.ts.map +1 -0
  168. package/dist/services/contracts-service.js +336 -0
  169. package/dist/services/contracts-service.js.map +1 -0
  170. package/dist/services/dao-service.d.ts +245 -0
  171. package/dist/services/dao-service.d.ts.map +1 -0
  172. package/dist/services/dao-service.js +389 -0
  173. package/dist/services/dao-service.js.map +1 -0
  174. package/dist/services/identity-service.d.ts +150 -0
  175. package/dist/services/identity-service.d.ts.map +1 -0
  176. package/dist/services/identity-service.js +286 -0
  177. package/dist/services/identity-service.js.map +1 -0
  178. package/dist/services/index.d.ts +20 -0
  179. package/dist/services/index.d.ts.map +1 -0
  180. package/dist/services/index.js +15 -0
  181. package/dist/services/index.js.map +1 -0
  182. package/dist/services/reputation-service.d.ts +128 -0
  183. package/dist/services/reputation-service.d.ts.map +1 -0
  184. package/dist/services/reputation-service.js +204 -0
  185. package/dist/services/reputation-service.js.map +1 -0
  186. package/dist/services/wallet-service.d.ts +201 -0
  187. package/dist/services/wallet-service.d.ts.map +1 -0
  188. package/dist/services/wallet-service.js +402 -0
  189. package/dist/services/wallet-service.js.map +1 -0
  190. package/package.json +66 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * IndexerQuery — paginated, filterable read access to indexed chain data.
3
+ *
4
+ * All query methods return a `PaginatedResult<T>` so the REST API can
5
+ * forward pagination metadata directly to callers.
6
+ *
7
+ * Internally, every query is a prepared SQLite statement (parameterised to
8
+ * prevent SQL injection). The underlying `better-sqlite3` connection is
9
+ * synchronous — perfectly adequate for a single-node daemon.
10
+ */
11
+ import Database from 'better-sqlite3';
12
+ export interface PaginatedResult<T> {
13
+ items: T[];
14
+ total: number;
15
+ limit: number;
16
+ offset: number;
17
+ }
18
+ export interface PaginationOpts {
19
+ /** Maximum number of rows (default: 50, max: 200). */
20
+ limit?: number;
21
+ /** Number of rows to skip (default: 0). */
22
+ offset?: number;
23
+ }
24
+ export interface TransferRow {
25
+ id: number;
26
+ block: number;
27
+ txHash: string;
28
+ fromAddr: string;
29
+ toAddr: string;
30
+ amount: string;
31
+ timestamp: number;
32
+ }
33
+ export interface TransferFilter extends PaginationOpts {
34
+ /** Filter transfers involving this address (sender OR recipient). */
35
+ address?: string;
36
+ fromBlock?: number;
37
+ toBlock?: number;
38
+ }
39
+ export interface EscrowRow {
40
+ escrowId: string;
41
+ depositor: string;
42
+ beneficiary: string;
43
+ arbiter: string;
44
+ amount: string;
45
+ status: number;
46
+ createdAt: number;
47
+ updatedAt: number;
48
+ }
49
+ export interface EscrowFilter extends PaginationOpts {
50
+ /** Filter by depositor, beneficiary, or arbiter address. */
51
+ address?: string;
52
+ status?: number;
53
+ }
54
+ export interface ServiceContractRow {
55
+ contractId: string;
56
+ client: string;
57
+ provider: string;
58
+ status: number;
59
+ createdAt: number;
60
+ updatedAt: number;
61
+ }
62
+ export interface ServiceContractFilter extends PaginationOpts {
63
+ /** Filter by client or provider address. */
64
+ address?: string;
65
+ status?: number;
66
+ }
67
+ export interface ProposalRow {
68
+ proposalId: number;
69
+ proposer: string;
70
+ pType: number;
71
+ status: number;
72
+ createdAt: number;
73
+ }
74
+ export interface ProposalFilter extends PaginationOpts {
75
+ proposer?: string;
76
+ status?: number;
77
+ }
78
+ export interface VoteRow {
79
+ proposalId: number;
80
+ voter: string;
81
+ support: number;
82
+ weight: string;
83
+ timestamp: number;
84
+ }
85
+ export interface VoteFilter extends PaginationOpts {
86
+ proposalId?: number;
87
+ voter?: string;
88
+ }
89
+ export interface ReviewRow {
90
+ reviewHash: string;
91
+ reviewerDid: string;
92
+ subjectDid: string;
93
+ relatedTxHash: string;
94
+ timestamp: number;
95
+ }
96
+ export interface ReviewFilter extends PaginationOpts {
97
+ subjectDid?: string;
98
+ reviewerDid?: string;
99
+ }
100
+ export interface DidCacheRow {
101
+ controller: string;
102
+ activeKey: string;
103
+ isActive: boolean;
104
+ updatedAt: number;
105
+ }
106
+ export interface EventRow {
107
+ id: number;
108
+ block: number;
109
+ txHash: string;
110
+ logIndex: number;
111
+ contract: string;
112
+ eventName: string;
113
+ args: string;
114
+ timestamp: number;
115
+ }
116
+ export interface EventFilter extends PaginationOpts {
117
+ contract?: string;
118
+ eventName?: string;
119
+ fromBlock?: number;
120
+ toBlock?: number;
121
+ }
122
+ export declare class IndexerQuery {
123
+ private readonly db;
124
+ constructor(db: Database.Database);
125
+ getTransfers(filter?: TransferFilter): PaginatedResult<TransferRow>;
126
+ getEscrows(filter?: EscrowFilter): PaginatedResult<EscrowRow>;
127
+ getServiceContracts(filter?: ServiceContractFilter): PaginatedResult<ServiceContractRow>;
128
+ getProposals(filter?: ProposalFilter): PaginatedResult<ProposalRow>;
129
+ getVotes(filter?: VoteFilter): PaginatedResult<VoteRow>;
130
+ getReviews(filter?: ReviewFilter): PaginatedResult<ReviewRow>;
131
+ /**
132
+ * Look up a single DID record from the indexer cache.
133
+ *
134
+ * @param didHash The keccak256 hash of the full DID string.
135
+ * @returns Cached record, or `null` if not found.
136
+ */
137
+ getDid(didHash: string): DidCacheRow | null;
138
+ getEvents(filter?: EventFilter): PaginatedResult<EventRow>;
139
+ private count;
140
+ }
141
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/indexer/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * IndexerQuery — paginated, filterable read access to indexed chain data.
3
+ *
4
+ * All query methods return a `PaginatedResult<T>` so the REST API can
5
+ * forward pagination metadata directly to callers.
6
+ *
7
+ * Internally, every query is a prepared SQLite statement (parameterised to
8
+ * prevent SQL injection). The underlying `better-sqlite3` connection is
9
+ * synchronous — perfectly adequate for a single-node daemon.
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // IndexerQuery
13
+ // ---------------------------------------------------------------------------
14
+ export class IndexerQuery {
15
+ db;
16
+ constructor(db) {
17
+ this.db = db;
18
+ }
19
+ // ── Transfers ───────────────────────────────────────────────────────────
20
+ getTransfers(filter = {}) {
21
+ const { limit, offset } = normalisePagination(filter);
22
+ const where = [];
23
+ const params = [];
24
+ if (filter.address) {
25
+ where.push('(from_addr = ? OR to_addr = ?)');
26
+ params.push(filter.address, filter.address);
27
+ }
28
+ if (filter.fromBlock !== undefined) {
29
+ where.push('block >= ?');
30
+ params.push(filter.fromBlock);
31
+ }
32
+ if (filter.toBlock !== undefined) {
33
+ where.push('block <= ?');
34
+ params.push(filter.toBlock);
35
+ }
36
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
37
+ const total = this.count('wallet_transfers', clause, params);
38
+ const rows = this.db
39
+ .prepare(`SELECT id, block, tx_hash AS txHash, from_addr AS fromAddr,
40
+ to_addr AS toAddr, amount, timestamp
41
+ FROM wallet_transfers ${clause}
42
+ ORDER BY block DESC, id DESC
43
+ LIMIT ? OFFSET ?`)
44
+ .all(...params, limit, offset);
45
+ return { items: rows, total, limit, offset };
46
+ }
47
+ // ── Escrows ─────────────────────────────────────────────────────────────
48
+ getEscrows(filter = {}) {
49
+ const { limit, offset } = normalisePagination(filter);
50
+ const where = [];
51
+ const params = [];
52
+ if (filter.address) {
53
+ where.push('(depositor = ? OR beneficiary = ? OR arbiter = ?)');
54
+ params.push(filter.address, filter.address, filter.address);
55
+ }
56
+ if (filter.status !== undefined) {
57
+ where.push('status = ?');
58
+ params.push(filter.status);
59
+ }
60
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
61
+ const total = this.count('escrows', clause, params);
62
+ const rows = this.db
63
+ .prepare(`SELECT escrow_id AS escrowId, depositor, beneficiary, arbiter,
64
+ amount, status, created_at AS createdAt, updated_at AS updatedAt
65
+ FROM escrows ${clause}
66
+ ORDER BY created_at DESC
67
+ LIMIT ? OFFSET ?`)
68
+ .all(...params, limit, offset);
69
+ return { items: rows, total, limit, offset };
70
+ }
71
+ // ── Service contracts ───────────────────────────────────────────────────
72
+ getServiceContracts(filter = {}) {
73
+ const { limit, offset } = normalisePagination(filter);
74
+ const where = [];
75
+ const params = [];
76
+ if (filter.address) {
77
+ where.push('(client = ? OR provider = ?)');
78
+ params.push(filter.address, filter.address);
79
+ }
80
+ if (filter.status !== undefined) {
81
+ where.push('status = ?');
82
+ params.push(filter.status);
83
+ }
84
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
85
+ const total = this.count('service_contracts', clause, params);
86
+ const rows = this.db
87
+ .prepare(`SELECT contract_id AS contractId, client, provider, status,
88
+ created_at AS createdAt, updated_at AS updatedAt
89
+ FROM service_contracts ${clause}
90
+ ORDER BY created_at DESC
91
+ LIMIT ? OFFSET ?`)
92
+ .all(...params, limit, offset);
93
+ return { items: rows, total, limit, offset };
94
+ }
95
+ // ── Proposals ───────────────────────────────────────────────────────────
96
+ getProposals(filter = {}) {
97
+ const { limit, offset } = normalisePagination(filter);
98
+ const where = [];
99
+ const params = [];
100
+ if (filter.proposer) {
101
+ where.push('proposer = ?');
102
+ params.push(filter.proposer);
103
+ }
104
+ if (filter.status !== undefined) {
105
+ where.push('status = ?');
106
+ params.push(filter.status);
107
+ }
108
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
109
+ const total = this.count('proposals', clause, params);
110
+ const rows = this.db
111
+ .prepare(`SELECT proposal_id AS proposalId, proposer, p_type AS pType,
112
+ status, created_at AS createdAt
113
+ FROM proposals ${clause}
114
+ ORDER BY created_at DESC
115
+ LIMIT ? OFFSET ?`)
116
+ .all(...params, limit, offset);
117
+ return { items: rows, total, limit, offset };
118
+ }
119
+ // ── Votes ───────────────────────────────────────────────────────────────
120
+ getVotes(filter = {}) {
121
+ const { limit, offset } = normalisePagination(filter);
122
+ const where = [];
123
+ const params = [];
124
+ if (filter.proposalId !== undefined) {
125
+ where.push('proposal_id = ?');
126
+ params.push(filter.proposalId);
127
+ }
128
+ if (filter.voter) {
129
+ where.push('voter = ?');
130
+ params.push(filter.voter);
131
+ }
132
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
133
+ const total = this.count('votes', clause, params);
134
+ const rows = this.db
135
+ .prepare(`SELECT proposal_id AS proposalId, voter, support, weight, timestamp
136
+ FROM votes ${clause}
137
+ ORDER BY timestamp DESC
138
+ LIMIT ? OFFSET ?`)
139
+ .all(...params, limit, offset);
140
+ return { items: rows, total, limit, offset };
141
+ }
142
+ // ── Reviews ─────────────────────────────────────────────────────────────
143
+ getReviews(filter = {}) {
144
+ const { limit, offset } = normalisePagination(filter);
145
+ const where = [];
146
+ const params = [];
147
+ if (filter.subjectDid) {
148
+ where.push('subject_did = ?');
149
+ params.push(filter.subjectDid);
150
+ }
151
+ if (filter.reviewerDid) {
152
+ where.push('reviewer_did = ?');
153
+ params.push(filter.reviewerDid);
154
+ }
155
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
156
+ const total = this.count('reviews', clause, params);
157
+ const rows = this.db
158
+ .prepare(`SELECT review_hash AS reviewHash, reviewer_did AS reviewerDid,
159
+ subject_did AS subjectDid, related_tx_hash AS relatedTxHash,
160
+ timestamp
161
+ FROM reviews ${clause}
162
+ ORDER BY timestamp DESC
163
+ LIMIT ? OFFSET ?`)
164
+ .all(...params, limit, offset);
165
+ return { items: rows, total, limit, offset };
166
+ }
167
+ // ── DID cache ───────────────────────────────────────────────────────────
168
+ /**
169
+ * Look up a single DID record from the indexer cache.
170
+ *
171
+ * @param didHash The keccak256 hash of the full DID string.
172
+ * @returns Cached record, or `null` if not found.
173
+ */
174
+ getDid(didHash) {
175
+ const row = this.db
176
+ .prepare(`SELECT controller, active_key AS activeKey,
177
+ is_active AS isActive, updated_at AS updatedAt
178
+ FROM did_cache
179
+ WHERE did_hash = ?`)
180
+ .get(didHash);
181
+ if (!row)
182
+ return null;
183
+ return {
184
+ controller: row.controller,
185
+ activeKey: row.activeKey,
186
+ isActive: row.isActive === 1,
187
+ updatedAt: row.updatedAt,
188
+ };
189
+ }
190
+ // ── Generic events ──────────────────────────────────────────────────────
191
+ getEvents(filter = {}) {
192
+ const { limit, offset } = normalisePagination(filter);
193
+ const where = [];
194
+ const params = [];
195
+ if (filter.contract) {
196
+ where.push('contract = ?');
197
+ params.push(filter.contract);
198
+ }
199
+ if (filter.eventName) {
200
+ where.push('event_name = ?');
201
+ params.push(filter.eventName);
202
+ }
203
+ if (filter.fromBlock !== undefined) {
204
+ where.push('block >= ?');
205
+ params.push(filter.fromBlock);
206
+ }
207
+ if (filter.toBlock !== undefined) {
208
+ where.push('block <= ?');
209
+ params.push(filter.toBlock);
210
+ }
211
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
212
+ const total = this.count('events', clause, params);
213
+ const rows = this.db
214
+ .prepare(`SELECT id, block, tx_hash AS txHash, log_index AS logIndex,
215
+ contract, event_name AS eventName, args, timestamp
216
+ FROM events ${clause}
217
+ ORDER BY block DESC, id DESC
218
+ LIMIT ? OFFSET ?`)
219
+ .all(...params, limit, offset);
220
+ return { items: rows, total, limit, offset };
221
+ }
222
+ // ── Helpers ─────────────────────────────────────────────────────────────
223
+ count(table, whereClause, params) {
224
+ const row = this.db
225
+ .prepare(`SELECT COUNT(*) AS cnt FROM ${table} ${whereClause}`)
226
+ .get(...params);
227
+ return row.cnt;
228
+ }
229
+ }
230
+ // ---------------------------------------------------------------------------
231
+ // Utilities
232
+ // ---------------------------------------------------------------------------
233
+ const MAX_LIMIT = 200;
234
+ const DEFAULT_LIMIT = 50;
235
+ function normalisePagination(opts) {
236
+ let limit = opts.limit ?? DEFAULT_LIMIT;
237
+ if (limit < 1)
238
+ limit = 1;
239
+ if (limit > MAX_LIMIT)
240
+ limit = MAX_LIMIT;
241
+ const offset = Math.max(opts.offset ?? 0, 0);
242
+ return { limit, offset };
243
+ }
244
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/indexer/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * IndexerStore SQLite persistence for the Event Indexer.
3
+ *
4
+ * Manages all on-chain event data:
5
+ * - Generic `events` table (raw event log)
6
+ * - Module-specific materialized tables (transfers, contracts, proposals, votes, reviews, escrows)
7
+ * - Indexer metadata (last indexed block, etc.)
8
+ *
9
+ * Uses `better-sqlite3` for synchronous, single-connection access
10
+ * ideal for a single-node daemon where reads and writes are serialised.
11
+ */
12
+ import Database from 'better-sqlite3';
13
+ export interface RawEvent {
14
+ block: number;
15
+ txHash: string;
16
+ logIndex: number;
17
+ contract: string;
18
+ eventName: string;
19
+ args: string;
20
+ timestamp: number;
21
+ }
22
+ export interface WalletTransfer {
23
+ id?: number;
24
+ block: number;
25
+ txHash: string;
26
+ fromAddr: string;
27
+ toAddr: string;
28
+ amount: string;
29
+ timestamp: number;
30
+ }
31
+ export interface IndexedServiceContract {
32
+ contractId: string;
33
+ client: string;
34
+ provider: string;
35
+ status: number;
36
+ createdAt: number;
37
+ updatedAt: number;
38
+ }
39
+ export interface IndexedProposal {
40
+ proposalId: number;
41
+ proposer: string;
42
+ pType: number;
43
+ status: number;
44
+ createdAt: number;
45
+ }
46
+ export interface IndexedVote {
47
+ proposalId: number;
48
+ voter: string;
49
+ support: number;
50
+ weight: string;
51
+ timestamp: number;
52
+ }
53
+ export interface IndexedReview {
54
+ reviewHash: string;
55
+ reviewerDid: string;
56
+ subjectDid: string;
57
+ relatedTxHash: string;
58
+ timestamp: number;
59
+ }
60
+ export interface EscrowRecord {
61
+ escrowId: string;
62
+ depositor: string;
63
+ beneficiary: string;
64
+ arbiter: string;
65
+ amount: string;
66
+ status: number;
67
+ createdAt: number;
68
+ updatedAt: number;
69
+ }
70
+ export declare class IndexerStore {
71
+ private readonly _db;
72
+ constructor(dbPath: string);
73
+ /** Expose the underlying Database instance (for IndexerQuery). */
74
+ get database(): Database.Database;
75
+ getMeta(key: string): string | undefined;
76
+ setMeta(key: string, value: string): void;
77
+ get lastIndexedBlock(): number;
78
+ set lastIndexedBlock(block: number);
79
+ insertEvent(event: RawEvent): void;
80
+ insertTransfer(t: WalletTransfer): void;
81
+ upsertEscrow(e: EscrowRecord): void;
82
+ updateEscrowStatus(escrowId: string, status: number, updatedAt: number): void;
83
+ updateEscrowAmount(escrowId: string, amount: string, updatedAt: number): void;
84
+ upsertServiceContract(c: IndexedServiceContract): void;
85
+ updateServiceContractStatus(contractId: string, status: number, updatedAt: number): void;
86
+ upsertProposal(p: IndexedProposal): void;
87
+ updateProposalStatus(proposalId: number, status: number): void;
88
+ insertVote(v: IndexedVote): void;
89
+ insertReview(r: IndexedReview): void;
90
+ upsertDid(didHash: string, controller: string, activeKey: string, isActive: boolean, updatedAt: number): void;
91
+ /** Execute a batch of operations inside a single SQLite transaction. */
92
+ transaction<T>(fn: () => T): T;
93
+ close(): void;
94
+ }
95
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/indexer/store.ts"],"names":[],"mappings":"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"}