hive-stream 3.0.0 → 3.0.1

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 (101) hide show
  1. package/AGENTS.md +35 -0
  2. package/DOCUMENTATION.md +380 -0
  3. package/README.md +113 -22
  4. package/dist/actions.d.ts +3 -3
  5. package/dist/actions.js +7 -7
  6. package/dist/actions.js.map +1 -1
  7. package/dist/adapters/base.adapter.d.ts +19 -1
  8. package/dist/adapters/base.adapter.js +16 -0
  9. package/dist/adapters/base.adapter.js.map +1 -1
  10. package/dist/adapters/mongodb.adapter.d.ts +5 -11
  11. package/dist/adapters/mongodb.adapter.js +10 -10
  12. package/dist/adapters/mongodb.adapter.js.map +1 -1
  13. package/dist/adapters/postgresql.adapter.d.ts +17 -0
  14. package/dist/adapters/postgresql.adapter.js +99 -8
  15. package/dist/adapters/postgresql.adapter.js.map +1 -1
  16. package/dist/adapters/sqlite.adapter.d.ts +17 -0
  17. package/dist/adapters/sqlite.adapter.js +99 -8
  18. package/dist/adapters/sqlite.adapter.js.map +1 -1
  19. package/dist/api.js +86 -0
  20. package/dist/api.js.map +1 -1
  21. package/dist/config.d.ts +3 -0
  22. package/dist/config.js +6 -3
  23. package/dist/config.js.map +1 -1
  24. package/dist/contracts/coinflip.contract.d.ts +8 -26
  25. package/dist/contracts/coinflip.contract.js +123 -144
  26. package/dist/contracts/coinflip.contract.js.map +1 -1
  27. package/dist/contracts/contract.d.ts +3 -0
  28. package/dist/contracts/contract.js +26 -0
  29. package/dist/contracts/contract.js.map +1 -0
  30. package/dist/contracts/dice.contract.d.ts +9 -36
  31. package/dist/contracts/dice.contract.js +135 -200
  32. package/dist/contracts/dice.contract.js.map +1 -1
  33. package/dist/contracts/exchange.contract.d.ts +11 -0
  34. package/dist/contracts/exchange.contract.js +492 -0
  35. package/dist/contracts/exchange.contract.js.map +1 -0
  36. package/dist/contracts/lotto.contract.d.ts +15 -19
  37. package/dist/contracts/lotto.contract.js +154 -162
  38. package/dist/contracts/lotto.contract.js.map +1 -1
  39. package/dist/contracts/nft.contract.d.ts +4 -0
  40. package/dist/contracts/nft.contract.js +65 -0
  41. package/dist/contracts/nft.contract.js.map +1 -1
  42. package/dist/contracts/poll.contract.d.ts +4 -0
  43. package/dist/contracts/poll.contract.js +105 -0
  44. package/dist/contracts/poll.contract.js.map +1 -0
  45. package/dist/contracts/rps.contract.d.ts +9 -0
  46. package/dist/contracts/rps.contract.js +217 -0
  47. package/dist/contracts/rps.contract.js.map +1 -0
  48. package/dist/contracts/tipjar.contract.d.ts +4 -0
  49. package/dist/contracts/tipjar.contract.js +60 -0
  50. package/dist/contracts/tipjar.contract.js.map +1 -0
  51. package/dist/contracts/token.contract.d.ts +3 -17
  52. package/dist/contracts/token.contract.js +128 -80
  53. package/dist/contracts/token.contract.js.map +1 -1
  54. package/dist/exchanges/coingecko.d.ts +7 -1
  55. package/dist/exchanges/coingecko.js +38 -21
  56. package/dist/exchanges/coingecko.js.map +1 -1
  57. package/dist/exchanges/exchange.d.ts +15 -8
  58. package/dist/exchanges/exchange.js +65 -11
  59. package/dist/exchanges/exchange.js.map +1 -1
  60. package/dist/hive-rates.d.ts +29 -4
  61. package/dist/hive-rates.js +179 -92
  62. package/dist/hive-rates.js.map +1 -1
  63. package/dist/index.d.ts +10 -3
  64. package/dist/index.js +18 -4
  65. package/dist/index.js.map +1 -1
  66. package/dist/streamer.d.ts +101 -8
  67. package/dist/streamer.js +410 -140
  68. package/dist/streamer.js.map +1 -1
  69. package/dist/test.js +11 -12
  70. package/dist/test.js.map +1 -1
  71. package/dist/types/hive-stream.d.ts +85 -14
  72. package/dist/types/rates.d.ts +47 -0
  73. package/dist/types/rates.js +29 -0
  74. package/dist/types/rates.js.map +1 -0
  75. package/dist/utils.d.ts +318 -11
  76. package/dist/utils.js +804 -115
  77. package/dist/utils.js.map +1 -1
  78. package/examples/contracts/README.md +8 -0
  79. package/examples/contracts/exchange.ts +38 -0
  80. package/examples/contracts/poll.ts +21 -0
  81. package/examples/contracts/rps.ts +19 -0
  82. package/examples/contracts/tipjar.ts +19 -0
  83. package/package.json +20 -19
  84. package/tests/actions.spec.ts +7 -7
  85. package/tests/adapters/actions-persistence.spec.ts +4 -4
  86. package/tests/adapters/sqlite.adapter.spec.ts +2 -2
  87. package/tests/contracts/coinflip.contract.spec.ts +26 -154
  88. package/tests/contracts/dice.contract.spec.ts +24 -140
  89. package/tests/contracts/exchange.contract.spec.ts +84 -0
  90. package/tests/contracts/lotto.contract.spec.ts +30 -295
  91. package/tests/contracts/token.contract.spec.ts +72 -316
  92. package/tests/exchanges/coingecko.exchange.spec.ts +169 -0
  93. package/tests/exchanges/exchange.base.spec.ts +246 -0
  94. package/tests/helpers/mock-fetch.ts +165 -0
  95. package/tests/hive-chain-features.spec.ts +238 -0
  96. package/tests/hive-rates.spec.ts +443 -0
  97. package/tests/integration/hive-rates.integration.spec.ts +35 -0
  98. package/tests/streamer-actions.spec.ts +29 -18
  99. package/tests/streamer.spec.ts +142 -49
  100. package/tests/types/rates.spec.ts +216 -0
  101. package/tests/utils.spec.ts +27 -6
@@ -3,32 +3,46 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TokenContract = void 0;
6
+ exports.createTokenContract = createTokenContract;
7
7
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
- const CONTRACT_NAME = 'hivetoken';
9
- class TokenContract {
10
- _instance;
11
- adapter;
12
- blockNumber;
13
- blockId;
14
- previousBlockId;
15
- transactionId;
16
- create() {
17
- this.adapter = this._instance.getAdapter();
18
- this.initializeTokenTables();
19
- }
20
- destroy() {
21
- // Cleanup logic if needed
22
- }
23
- updateBlockInfo(blockNumber, blockId, previousBlockId, transactionId) {
24
- this.blockNumber = blockNumber;
25
- this.blockId = blockId;
26
- this.previousBlockId = previousBlockId;
27
- this.transactionId = transactionId;
28
- }
29
- async initializeTokenTables() {
8
+ const zod_1 = require("zod");
9
+ const contract_1 = require("./contract");
10
+ const DEFAULT_NAME = 'hivetoken';
11
+ function createTokenContract(options = {}) {
12
+ const name = options.name || DEFAULT_NAME;
13
+ const state = {
14
+ streamer: null,
15
+ adapter: null
16
+ };
17
+ const createTokenSchema = zod_1.z.object({
18
+ symbol: zod_1.z.string().regex(/^[A-Z0-9]{1,10}$/),
19
+ name: zod_1.z.string().min(1).max(50),
20
+ url: zod_1.z.string().max(256).optional(),
21
+ precision: zod_1.z.number().int().min(0).max(8).optional(),
22
+ maxSupply: zod_1.z.string()
23
+ });
24
+ const issueTokensSchema = zod_1.z.object({
25
+ symbol: zod_1.z.string().min(1),
26
+ to: zod_1.z.string().min(1),
27
+ amount: zod_1.z.string().min(1),
28
+ memo: zod_1.z.string().optional()
29
+ });
30
+ const transferTokensSchema = zod_1.z.object({
31
+ symbol: zod_1.z.string().min(1),
32
+ to: zod_1.z.string().min(1),
33
+ amount: zod_1.z.string().min(1),
34
+ memo: zod_1.z.string().optional()
35
+ });
36
+ const getBalanceSchema = zod_1.z.object({
37
+ account: zod_1.z.string().min(1),
38
+ symbol: zod_1.z.string().min(1)
39
+ });
40
+ const getTokenInfoSchema = zod_1.z.object({
41
+ symbol: zod_1.z.string().min(1)
42
+ });
43
+ const initializeTokenTables = async () => {
30
44
  try {
31
- await this.adapter.query(`
45
+ await state.adapter.query(`
32
46
  CREATE TABLE IF NOT EXISTS tokens (
33
47
  symbol TEXT PRIMARY KEY,
34
48
  name TEXT NOT NULL,
@@ -40,7 +54,7 @@ class TokenContract {
40
54
  created_at DATETIME NOT NULL
41
55
  )
42
56
  `);
43
- await this.adapter.query(`
57
+ await state.adapter.query(`
44
58
  CREATE TABLE IF NOT EXISTS token_balances (
45
59
  account TEXT NOT NULL,
46
60
  symbol TEXT NOT NULL,
@@ -49,7 +63,7 @@ class TokenContract {
49
63
  FOREIGN KEY (symbol) REFERENCES tokens(symbol)
50
64
  )
51
65
  `);
52
- await this.adapter.query(`
66
+ await state.adapter.query(`
53
67
  CREATE TABLE IF NOT EXISTS token_transfers (
54
68
  id INTEGER PRIMARY KEY AUTOINCREMENT,
55
69
  from_account TEXT NOT NULL,
@@ -67,14 +81,14 @@ class TokenContract {
67
81
  catch (error) {
68
82
  console.error('[TokenContract] Error initializing tables:', error);
69
83
  }
70
- }
71
- async createToken(payload, { sender }) {
84
+ };
85
+ const createToken = async (payload, ctx) => {
72
86
  try {
73
- const { symbol, name, url = '', precision = 3, maxSupply } = payload;
87
+ const { symbol, name: tokenName, url = '', precision = 3, maxSupply } = payload;
74
88
  if (!symbol.match(/^[A-Z0-9]{1,10}$/)) {
75
89
  throw new Error('Symbol must be 1-10 uppercase alphanumeric characters');
76
90
  }
77
- if (!name || name.length > 50) {
91
+ if (!tokenName || tokenName.length > 50) {
78
92
  throw new Error('Name is required and must be 50 characters or less');
79
93
  }
80
94
  if (precision < 0 || precision > 8) {
@@ -87,40 +101,40 @@ class TokenContract {
87
101
  if (url && url.length > 256) {
88
102
  throw new Error('URL must be 256 characters or less');
89
103
  }
90
- const existingToken = await this.adapter.query('SELECT symbol FROM tokens WHERE symbol = ?', [symbol]);
104
+ const existingToken = await state.adapter.query('SELECT symbol FROM tokens WHERE symbol = ?', [symbol]);
91
105
  if (existingToken && existingToken.length > 0) {
92
106
  throw new Error(`Token with symbol ${symbol} already exists`);
93
107
  }
94
- await this.adapter.query(`
108
+ await state.adapter.query(`
95
109
  INSERT INTO tokens (symbol, name, url, precision, max_supply, current_supply, creator, created_at)
96
110
  VALUES (?, ?, ?, ?, ?, '0', ?, ?)
97
- `, [symbol, name, url, precision, maxSupply, sender, new Date()]);
98
- await this.adapter.addEvent(new Date(), CONTRACT_NAME, 'createToken', payload, {
111
+ `, [symbol, tokenName, url, precision, maxSupply, ctx.sender, new Date()]);
112
+ await state.adapter.addEvent(new Date(), name, 'createToken', payload, {
99
113
  action: 'token_created',
100
114
  data: {
101
115
  symbol,
102
- name,
103
- creator: sender,
116
+ name: tokenName,
117
+ creator: ctx.sender,
104
118
  maxSupply,
105
119
  precision
106
120
  }
107
121
  });
108
- console.log(`[TokenContract] Token ${symbol} created by ${sender}`);
122
+ console.log(`[TokenContract] Token ${symbol} created by ${ctx.sender}`);
109
123
  }
110
124
  catch (error) {
111
125
  console.error('[TokenContract] Error creating token:', error);
112
126
  throw error;
113
127
  }
114
- }
115
- async issueTokens(payload, { sender }) {
128
+ };
129
+ const issueTokens = async (payload, ctx) => {
116
130
  try {
117
131
  const { symbol, to, amount, memo = '' } = payload;
118
- const token = await this.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
132
+ const token = await state.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
119
133
  if (!token || token.length === 0) {
120
134
  throw new Error(`Token ${symbol} does not exist`);
121
135
  }
122
136
  const tokenData = token[0];
123
- if (tokenData.creator !== sender) {
137
+ if (tokenData.creator !== ctx.sender) {
124
138
  throw new Error('Only the token creator can issue new tokens');
125
139
  }
126
140
  const amountBN = new bignumber_js_1.default(amount);
@@ -133,27 +147,28 @@ class TokenContract {
133
147
  if (newSupplyBN.gt(maxSupplyBN)) {
134
148
  throw new Error('Cannot issue tokens: would exceed maximum supply');
135
149
  }
136
- await this.adapter.query('UPDATE tokens SET current_supply = ? WHERE symbol = ?', [newSupplyBN.toFixed(tokenData.precision), symbol]);
137
- const existingBalance = await this.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [to, symbol]);
150
+ await state.adapter.query(`
151
+ UPDATE tokens SET current_supply = ? WHERE symbol = ?
152
+ `, [newSupplyBN.toString(), symbol]);
153
+ const existingBalance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [to, symbol]);
138
154
  if (existingBalance && existingBalance.length > 0) {
139
- const currentBalanceBN = new bignumber_js_1.default(existingBalance[0].balance);
140
- const newBalanceBN = currentBalanceBN.plus(amountBN);
141
- await this.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newBalanceBN.toFixed(tokenData.precision), to, symbol]);
155
+ const balanceBN = new bignumber_js_1.default(existingBalance[0].balance);
156
+ const newBalanceBN = balanceBN.plus(amountBN);
157
+ await state.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newBalanceBN.toString(), to, symbol]);
142
158
  }
143
159
  else {
144
- await this.adapter.query('INSERT INTO token_balances (account, symbol, balance) VALUES (?, ?, ?)', [to, symbol, amountBN.toFixed(tokenData.precision)]);
160
+ await state.adapter.query('INSERT INTO token_balances (account, symbol, balance) VALUES (?, ?, ?)', [to, symbol, amountBN.toString()]);
145
161
  }
146
- await this.adapter.query(`
162
+ await state.adapter.query(`
147
163
  INSERT INTO token_transfers (from_account, to_account, amount, symbol, memo, block_number, transaction_id, timestamp)
148
164
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
149
- `, ['null', to, amount, symbol, memo, this.blockNumber, this.transactionId, new Date()]);
150
- await this.adapter.addEvent(new Date(), CONTRACT_NAME, 'issueTokens', payload, {
165
+ `, ['null', to, amount, symbol, memo, ctx.block.number, ctx.transaction.id, new Date()]);
166
+ await state.adapter.addEvent(new Date(), name, 'issueTokens', payload, {
151
167
  action: 'tokens_issued',
152
168
  data: {
153
- symbol,
154
169
  to,
155
170
  amount,
156
- newSupply: newSupplyBN.toFixed(tokenData.precision)
171
+ symbol
157
172
  }
158
173
  });
159
174
  console.log(`[TokenContract] Issued ${amount} ${symbol} to ${to}`);
@@ -162,70 +177,72 @@ class TokenContract {
162
177
  console.error('[TokenContract] Error issuing tokens:', error);
163
178
  throw error;
164
179
  }
165
- }
166
- async transferTokens(payload, { sender }) {
180
+ };
181
+ const transferTokens = async (payload, ctx) => {
167
182
  try {
168
183
  const { symbol, to, amount, memo = '' } = payload;
169
- const token = await this.adapter.query('SELECT precision FROM tokens WHERE symbol = ?', [symbol]);
184
+ if (ctx.sender === to) {
185
+ throw new Error('Cannot transfer tokens to yourself');
186
+ }
187
+ const token = await state.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
170
188
  if (!token || token.length === 0) {
171
189
  throw new Error(`Token ${symbol} does not exist`);
172
190
  }
173
- const precision = token[0].precision;
174
191
  const amountBN = new bignumber_js_1.default(amount);
175
192
  if (amountBN.isNaN() || amountBN.lte(0)) {
176
193
  throw new Error('Amount must be a positive number');
177
194
  }
178
- const senderBalance = await this.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [sender, symbol]);
195
+ const senderBalance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [ctx.sender, symbol]);
179
196
  if (!senderBalance || senderBalance.length === 0) {
180
- throw new Error('Insufficient balance');
197
+ throw new Error(`Account ${ctx.sender} does not have any ${symbol} tokens`);
181
198
  }
182
199
  const senderBalanceBN = new bignumber_js_1.default(senderBalance[0].balance);
183
200
  if (senderBalanceBN.lt(amountBN)) {
184
201
  throw new Error('Insufficient balance');
185
202
  }
186
203
  const newSenderBalanceBN = senderBalanceBN.minus(amountBN);
187
- await this.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newSenderBalanceBN.toFixed(precision), sender, symbol]);
188
- const receiverBalance = await this.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [to, symbol]);
204
+ await state.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newSenderBalanceBN.toString(), ctx.sender, symbol]);
205
+ const receiverBalance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [to, symbol]);
189
206
  if (receiverBalance && receiverBalance.length > 0) {
190
207
  const receiverBalanceBN = new bignumber_js_1.default(receiverBalance[0].balance);
191
208
  const newReceiverBalanceBN = receiverBalanceBN.plus(amountBN);
192
- await this.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newReceiverBalanceBN.toFixed(precision), to, symbol]);
209
+ await state.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newReceiverBalanceBN.toString(), to, symbol]);
193
210
  }
194
211
  else {
195
- await this.adapter.query('INSERT INTO token_balances (account, symbol, balance) VALUES (?, ?, ?)', [to, symbol, amountBN.toFixed(precision)]);
212
+ await state.adapter.query('INSERT INTO token_balances (account, symbol, balance) VALUES (?, ?, ?)', [to, symbol, amountBN.toString()]);
196
213
  }
197
- await this.adapter.query(`
214
+ await state.adapter.query(`
198
215
  INSERT INTO token_transfers (from_account, to_account, amount, symbol, memo, block_number, transaction_id, timestamp)
199
216
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
200
- `, [sender, to, amount, symbol, memo, this.blockNumber, this.transactionId, new Date()]);
201
- await this.adapter.addEvent(new Date(), CONTRACT_NAME, 'transferTokens', payload, {
217
+ `, [ctx.sender, to, amount, symbol, memo, ctx.block.number, ctx.transaction.id, new Date()]);
218
+ await state.adapter.addEvent(new Date(), name, 'transferTokens', payload, {
202
219
  action: 'tokens_transferred',
203
220
  data: {
204
- from: sender,
221
+ from: ctx.sender,
205
222
  to,
206
223
  amount,
207
224
  symbol
208
225
  }
209
226
  });
210
- console.log(`[TokenContract] Transferred ${amount} ${symbol} from ${sender} to ${to}`);
227
+ console.log(`[TokenContract] Transferred ${amount} ${symbol} from ${ctx.sender} to ${to}`);
211
228
  }
212
229
  catch (error) {
213
230
  console.error('[TokenContract] Error transferring tokens:', error);
214
231
  throw error;
215
232
  }
216
- }
217
- async getBalance(payload, { sender }) {
233
+ };
234
+ const getBalance = async (payload, ctx) => {
218
235
  try {
219
236
  const { account, symbol } = payload;
220
- const balance = await this.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [account, symbol]);
237
+ const balance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [account, symbol]);
221
238
  const balanceAmount = balance && balance.length > 0 ? balance[0].balance : '0';
222
- await this.adapter.addEvent(new Date(), CONTRACT_NAME, 'getBalance', payload, {
239
+ await state.adapter.addEvent(new Date(), name, 'getBalance', payload, {
223
240
  action: 'balance_query',
224
241
  data: {
225
242
  account,
226
243
  symbol,
227
244
  balance: balanceAmount,
228
- queried_by: sender
245
+ queried_by: ctx.sender
229
246
  }
230
247
  });
231
248
  console.log(`[TokenContract] Balance query: ${account} has ${balanceAmount} ${symbol}`);
@@ -234,30 +251,61 @@ class TokenContract {
234
251
  console.error('[TokenContract] Error getting balance:', error);
235
252
  throw error;
236
253
  }
237
- }
238
- async getTokenInfo(payload, { sender }) {
254
+ };
255
+ const getTokenInfo = async (payload, ctx) => {
239
256
  try {
240
257
  const { symbol } = payload;
241
- const token = await this.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
258
+ const token = await state.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
242
259
  if (!token || token.length === 0) {
243
260
  throw new Error(`Token ${symbol} does not exist`);
244
261
  }
245
262
  const tokenData = token[0];
246
- await this.adapter.addEvent(new Date(), CONTRACT_NAME, 'getTokenInfo', payload, {
263
+ await state.adapter.addEvent(new Date(), name, 'getTokenInfo', payload, {
247
264
  action: 'token_info_query',
248
265
  data: {
249
266
  symbol,
250
- queried_by: sender,
267
+ queried_by: ctx.sender,
251
268
  token_info: tokenData
252
269
  }
253
270
  });
254
- console.log(`[TokenContract] Token info query for ${symbol} by ${sender}`);
271
+ console.log(`[TokenContract] Token info query for ${symbol} by ${ctx.sender}`);
255
272
  }
256
273
  catch (error) {
257
274
  console.error('[TokenContract] Error getting token info:', error);
258
275
  throw error;
259
276
  }
260
- }
277
+ };
278
+ return (0, contract_1.defineContract)({
279
+ name,
280
+ hooks: {
281
+ create: async ({ streamer, adapter }) => {
282
+ state.streamer = streamer;
283
+ state.adapter = adapter;
284
+ await initializeTokenTables();
285
+ }
286
+ },
287
+ actions: {
288
+ createToken: (0, contract_1.action)(createToken, {
289
+ schema: createTokenSchema,
290
+ trigger: 'custom_json'
291
+ }),
292
+ issueTokens: (0, contract_1.action)(issueTokens, {
293
+ schema: issueTokensSchema,
294
+ trigger: 'custom_json'
295
+ }),
296
+ transferTokens: (0, contract_1.action)(transferTokens, {
297
+ schema: transferTokensSchema,
298
+ trigger: 'custom_json'
299
+ }),
300
+ getBalance: (0, contract_1.action)(getBalance, {
301
+ schema: getBalanceSchema,
302
+ trigger: 'custom_json'
303
+ }),
304
+ getTokenInfo: (0, contract_1.action)(getTokenInfo, {
305
+ schema: getTokenInfoSchema,
306
+ trigger: 'custom_json'
307
+ })
308
+ }
309
+ });
261
310
  }
262
- exports.TokenContract = TokenContract;
263
311
  //# sourceMappingURL=token.contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.contract.js","sourceRoot":"","sources":["../../src/contracts/token.contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.contract.js","sourceRoot":"","sources":["../../src/contracts/token.contract.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  import { Exchange } from './exchange';
2
+ import { RateConfig } from '../types/rates';
2
3
  export declare class CoinGeckoExchange extends Exchange {
3
- exchangeId: string;
4
+ readonly exchangeId = "coingecko";
5
+ private static readonly API_BASE;
6
+ private static readonly ENDPOINT;
7
+ constructor(config?: RateConfig);
4
8
  fetchRates(): Promise<boolean>;
9
+ private parseRatesResponse;
10
+ private validateRates;
5
11
  }
@@ -2,37 +2,54 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CoinGeckoExchange = void 0;
4
4
  const exchange_1 = require("./exchange");
5
+ const rates_1 = require("../types/rates");
5
6
  class CoinGeckoExchange extends exchange_1.Exchange {
6
7
  exchangeId = 'coingecko';
8
+ static API_BASE = 'https://api.coingecko.com/api/v3';
9
+ static ENDPOINT = '/simple/price?ids=hive,hive_dollar&vs_currencies=usd';
10
+ constructor(config) {
11
+ super(config);
12
+ }
7
13
  async fetchRates() {
8
14
  try {
9
- // CoinGecko's free API endpoint for HIVE and HBD prices
10
- const endpoint = 'https://api.coingecko.com/api/v3/simple/price?ids=hive,hive_dollar&vs_currencies=usd';
11
- const request = await fetch(endpoint);
12
- if (!request.ok) {
13
- console.warn(`CoinGecko API request failed with status: ${request.status}`);
14
- return false;
15
- }
16
- const response = await request.json();
17
- // Extract USD rates for HIVE and HBD
18
- const usdHiveRate = response?.hive?.usd;
19
- const usdHbdRate = response?.hive_dollar?.usd;
20
- if (typeof usdHiveRate !== 'number' || typeof usdHbdRate !== 'number') {
21
- console.warn('Invalid response format from CoinGecko API');
22
- return false;
23
- }
24
- if (isNaN(usdHiveRate) || isNaN(usdHbdRate)) {
25
- console.warn('Received NaN values from CoinGecko API');
26
- return false;
27
- }
15
+ const url = `${CoinGeckoExchange.API_BASE}${CoinGeckoExchange.ENDPOINT}`;
16
+ const response = await this.fetchWithTimeout(url);
17
+ const data = await response.json();
18
+ const { usdHiveRate, usdHbdRate } = this.parseRatesResponse(data);
19
+ this.validateRates(usdHiveRate, usdHbdRate);
28
20
  this.rateUsdHive = usdHiveRate;
29
21
  this.rateUsdHbd = usdHbdRate;
30
22
  console.log(`CoinGecko rates updated: HIVE=$${usdHiveRate.toFixed(6)}, HBD=$${usdHbdRate.toFixed(6)}`);
31
23
  return true;
32
24
  }
33
25
  catch (error) {
34
- console.error('Error fetching rates from CoinGecko:', error);
35
- return false;
26
+ if (error instanceof rates_1.ValidationError || error instanceof rates_1.NetworkError) {
27
+ throw error;
28
+ }
29
+ throw new rates_1.NetworkError(`Unexpected error fetching rates: ${error instanceof Error ? error.message : String(error)}`, this.exchangeId);
30
+ }
31
+ }
32
+ parseRatesResponse(data) {
33
+ if (!data || typeof data !== 'object') {
34
+ throw new rates_1.ValidationError('Invalid response format: expected object', this.exchangeId);
35
+ }
36
+ const usdHiveRate = data.hive?.usd;
37
+ const usdHbdRate = data.hive_dollar?.usd;
38
+ if (typeof usdHiveRate !== 'number' || typeof usdHbdRate !== 'number') {
39
+ throw new rates_1.ValidationError('Invalid response format: missing or invalid rate data', this.exchangeId);
40
+ }
41
+ return { usdHiveRate, usdHbdRate };
42
+ }
43
+ validateRates(hiveRate, hbdRate) {
44
+ if (isNaN(hiveRate) || isNaN(hbdRate)) {
45
+ throw new rates_1.ValidationError('Received NaN values from API', this.exchangeId);
46
+ }
47
+ if (hiveRate <= 0 || hbdRate <= 0) {
48
+ throw new rates_1.ValidationError('Received non-positive rate values', this.exchangeId);
49
+ }
50
+ // Sanity check: HIVE and HBD should be reasonable values (between $0.01 and $1000)
51
+ if (hiveRate < 0.01 || hiveRate > 1000 || hbdRate < 0.01 || hbdRate > 1000) {
52
+ throw new rates_1.ValidationError(`Rates outside expected range: HIVE=${hiveRate}, HBD=${hbdRate}`, this.exchangeId);
36
53
  }
37
54
  }
38
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"coingecko.js","sourceRoot":"","sources":["../../src/exchanges/coingecko.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAEtC,MAAa,iBAAkB,SAAQ,mBAAQ;IACpC,UAAU,GAAG,WAAW,CAAC;IAEzB,KAAK,CAAC,UAAU;QACnB,IAAI;YACA,wDAAwD;YACxD,MAAM,QAAQ,GAAG,sFAAsF,CAAC;YACxG,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEtC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,6CAA6C,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5E,OAAO,KAAK,CAAC;aAChB;YAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAEtC,qCAAqC;YACrC,MAAM,WAAW,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC;YACxC,MAAM,UAAU,GAAG,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC;YAE9C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;gBACnE,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC3D,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;gBACzC,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACvD,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAE7B,OAAO,CAAC,GAAG,CAAC,kCAAkC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvG,OAAO,IAAI,CAAC;SAEf;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;CACJ;AAzCD,8CAyCC"}
1
+ {"version":3,"file":"coingecko.js","sourceRoot":"","sources":["../../src/exchanges/coingecko.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,16 @@
1
- export declare class Exchange {
2
- exchangeId: any;
3
- private oneHour;
4
- rateUsdHive: any;
5
- rateUsdHbd: any;
6
- private lastFetch;
7
- updateRates(): Promise<any>;
8
- fetchRates(): Promise<any>;
1
+ import { ExchangeInterface, RateConfig } from '../types/rates';
2
+ export declare abstract class Exchange implements ExchangeInterface {
3
+ abstract readonly exchangeId: string;
4
+ rateUsdHive?: number;
5
+ rateUsdHbd?: number;
6
+ private lastFetch?;
7
+ private readonly config;
8
+ constructor(config?: RateConfig);
9
+ updateRates(): Promise<boolean>;
10
+ abstract fetchRates(): Promise<boolean>;
11
+ private fetchRatesWithRetry;
12
+ protected fetchWithTimeout(url: string): Promise<Response>;
13
+ private delay;
14
+ getLastFetchTime(): number | undefined;
15
+ isCacheValid(): boolean;
9
16
  }
@@ -1,26 +1,80 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Exchange = void 0;
4
+ const rates_1 = require("../types/rates");
4
5
  class Exchange {
5
- exchangeId;
6
- oneHour = 1000 * 60 * 60;
7
6
  rateUsdHive;
8
7
  rateUsdHbd;
9
8
  lastFetch;
9
+ config;
10
+ constructor(config = {}) {
11
+ this.config = {
12
+ cacheDuration: config.cacheDuration ?? 60 * 60 * 1000, // 1 hour
13
+ maxRetries: config.maxRetries ?? 3,
14
+ retryDelay: config.retryDelay ?? 1000, // 1 second
15
+ timeout: config.timeout ?? 10000, // 10 seconds
16
+ };
17
+ }
10
18
  async updateRates() {
11
- const HOUR_AGO = Date.now() - this.oneHour;
12
- // Only fetch once per hour
13
- if (this.lastFetch && this.lastFetch > HOUR_AGO) {
14
- return false;
19
+ const cacheExpiry = Date.now() - this.config.cacheDuration;
20
+ // Return cached data if still valid
21
+ if (this.lastFetch && this.lastFetch > cacheExpiry) {
22
+ return false; // No update needed
15
23
  }
16
- const rates = await this.fetchRates();
17
- if (rates) {
24
+ const success = await this.fetchRatesWithRetry();
25
+ if (success) {
18
26
  this.lastFetch = Date.now();
19
27
  }
20
- return rates;
28
+ return success;
29
+ }
30
+ async fetchRatesWithRetry() {
31
+ let lastError = null;
32
+ for (let attempt = 1; attempt <= this.config.maxRetries; attempt++) {
33
+ try {
34
+ const success = await this.fetchRates();
35
+ if (success) {
36
+ return true;
37
+ }
38
+ }
39
+ catch (error) {
40
+ lastError = error instanceof Error ? error : new Error(String(error));
41
+ if (attempt < this.config.maxRetries) {
42
+ await this.delay(this.config.retryDelay * attempt);
43
+ }
44
+ }
45
+ }
46
+ throw new rates_1.NetworkError(`Failed to fetch rates after ${this.config.maxRetries} attempts: ${lastError?.message}`, this.exchangeId);
47
+ }
48
+ async fetchWithTimeout(url) {
49
+ const controller = new AbortController();
50
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
51
+ try {
52
+ const response = await fetch(url, {
53
+ signal: controller.signal,
54
+ headers: {
55
+ 'User-Agent': 'hive-stream/3.0.0',
56
+ 'Accept': 'application/json',
57
+ },
58
+ });
59
+ if (!response.ok) {
60
+ throw new rates_1.NetworkError(`HTTP ${response.status}: ${response.statusText}`, this.exchangeId);
61
+ }
62
+ return response;
63
+ }
64
+ finally {
65
+ clearTimeout(timeoutId);
66
+ }
67
+ }
68
+ delay(ms) {
69
+ return new Promise(resolve => setTimeout(resolve, ms));
21
70
  }
22
- async fetchRates() {
23
- return null;
71
+ getLastFetchTime() {
72
+ return this.lastFetch;
73
+ }
74
+ isCacheValid() {
75
+ if (!this.lastFetch)
76
+ return false;
77
+ return this.lastFetch > (Date.now() - this.config.cacheDuration);
24
78
  }
25
79
  }
26
80
  exports.Exchange = Exchange;