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.
- package/AGENTS.md +35 -0
- package/DOCUMENTATION.md +380 -0
- package/README.md +113 -22
- package/dist/actions.d.ts +3 -3
- package/dist/actions.js +7 -7
- package/dist/actions.js.map +1 -1
- package/dist/adapters/base.adapter.d.ts +19 -1
- package/dist/adapters/base.adapter.js +16 -0
- package/dist/adapters/base.adapter.js.map +1 -1
- package/dist/adapters/mongodb.adapter.d.ts +5 -11
- package/dist/adapters/mongodb.adapter.js +10 -10
- package/dist/adapters/mongodb.adapter.js.map +1 -1
- package/dist/adapters/postgresql.adapter.d.ts +17 -0
- package/dist/adapters/postgresql.adapter.js +99 -8
- package/dist/adapters/postgresql.adapter.js.map +1 -1
- package/dist/adapters/sqlite.adapter.d.ts +17 -0
- package/dist/adapters/sqlite.adapter.js +99 -8
- package/dist/adapters/sqlite.adapter.js.map +1 -1
- package/dist/api.js +86 -0
- package/dist/api.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.js +6 -3
- package/dist/config.js.map +1 -1
- package/dist/contracts/coinflip.contract.d.ts +8 -26
- package/dist/contracts/coinflip.contract.js +123 -144
- package/dist/contracts/coinflip.contract.js.map +1 -1
- package/dist/contracts/contract.d.ts +3 -0
- package/dist/contracts/contract.js +26 -0
- package/dist/contracts/contract.js.map +1 -0
- package/dist/contracts/dice.contract.d.ts +9 -36
- package/dist/contracts/dice.contract.js +135 -200
- package/dist/contracts/dice.contract.js.map +1 -1
- package/dist/contracts/exchange.contract.d.ts +11 -0
- package/dist/contracts/exchange.contract.js +492 -0
- package/dist/contracts/exchange.contract.js.map +1 -0
- package/dist/contracts/lotto.contract.d.ts +15 -19
- package/dist/contracts/lotto.contract.js +154 -162
- package/dist/contracts/lotto.contract.js.map +1 -1
- package/dist/contracts/nft.contract.d.ts +4 -0
- package/dist/contracts/nft.contract.js +65 -0
- package/dist/contracts/nft.contract.js.map +1 -1
- package/dist/contracts/poll.contract.d.ts +4 -0
- package/dist/contracts/poll.contract.js +105 -0
- package/dist/contracts/poll.contract.js.map +1 -0
- package/dist/contracts/rps.contract.d.ts +9 -0
- package/dist/contracts/rps.contract.js +217 -0
- package/dist/contracts/rps.contract.js.map +1 -0
- package/dist/contracts/tipjar.contract.d.ts +4 -0
- package/dist/contracts/tipjar.contract.js +60 -0
- package/dist/contracts/tipjar.contract.js.map +1 -0
- package/dist/contracts/token.contract.d.ts +3 -17
- package/dist/contracts/token.contract.js +128 -80
- package/dist/contracts/token.contract.js.map +1 -1
- package/dist/exchanges/coingecko.d.ts +7 -1
- package/dist/exchanges/coingecko.js +38 -21
- package/dist/exchanges/coingecko.js.map +1 -1
- package/dist/exchanges/exchange.d.ts +15 -8
- package/dist/exchanges/exchange.js +65 -11
- package/dist/exchanges/exchange.js.map +1 -1
- package/dist/hive-rates.d.ts +29 -4
- package/dist/hive-rates.js +179 -92
- package/dist/hive-rates.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/streamer.d.ts +101 -8
- package/dist/streamer.js +410 -140
- package/dist/streamer.js.map +1 -1
- package/dist/test.js +11 -12
- package/dist/test.js.map +1 -1
- package/dist/types/hive-stream.d.ts +85 -14
- package/dist/types/rates.d.ts +47 -0
- package/dist/types/rates.js +29 -0
- package/dist/types/rates.js.map +1 -0
- package/dist/utils.d.ts +318 -11
- package/dist/utils.js +804 -115
- package/dist/utils.js.map +1 -1
- package/examples/contracts/README.md +8 -0
- package/examples/contracts/exchange.ts +38 -0
- package/examples/contracts/poll.ts +21 -0
- package/examples/contracts/rps.ts +19 -0
- package/examples/contracts/tipjar.ts +19 -0
- package/package.json +20 -19
- package/tests/actions.spec.ts +7 -7
- package/tests/adapters/actions-persistence.spec.ts +4 -4
- package/tests/adapters/sqlite.adapter.spec.ts +2 -2
- package/tests/contracts/coinflip.contract.spec.ts +26 -154
- package/tests/contracts/dice.contract.spec.ts +24 -140
- package/tests/contracts/exchange.contract.spec.ts +84 -0
- package/tests/contracts/lotto.contract.spec.ts +30 -295
- package/tests/contracts/token.contract.spec.ts +72 -316
- package/tests/exchanges/coingecko.exchange.spec.ts +169 -0
- package/tests/exchanges/exchange.base.spec.ts +246 -0
- package/tests/helpers/mock-fetch.ts +165 -0
- package/tests/hive-chain-features.spec.ts +238 -0
- package/tests/hive-rates.spec.ts +443 -0
- package/tests/integration/hive-rates.integration.spec.ts +35 -0
- package/tests/streamer-actions.spec.ts +29 -18
- package/tests/streamer.spec.ts +142 -49
- package/tests/types/rates.spec.ts +216 -0
- package/tests/utils.spec.ts +27 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../src/exchanges/exchange.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../src/exchanges/exchange.ts"],"names":[],"mappings":"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"}
|
package/dist/hive-rates.d.ts
CHANGED
|
@@ -1,9 +1,34 @@
|
|
|
1
|
+
import { Exchange } from './exchanges/exchange';
|
|
2
|
+
import { ExchangeRates, HiveRates as HiveRatesType, SupportedCrypto, SupportedFiat, RateConfig } from './types/rates';
|
|
1
3
|
export declare class HiveRates {
|
|
2
4
|
private fiatRates;
|
|
3
5
|
private hiveRates;
|
|
4
|
-
private
|
|
5
|
-
private
|
|
6
|
+
private lastFiatFetch?;
|
|
7
|
+
private readonly exchanges;
|
|
8
|
+
private readonly config;
|
|
9
|
+
private static readonly FIAT_API_ENDPOINTS;
|
|
10
|
+
constructor(config?: RateConfig, customExchanges?: Exchange[]);
|
|
6
11
|
fetchRates(): Promise<boolean>;
|
|
7
|
-
|
|
8
|
-
private
|
|
12
|
+
private fetchCryptoRates;
|
|
13
|
+
private calculateCrossRates;
|
|
14
|
+
private calculateAverageRates;
|
|
15
|
+
getRate(fiatSymbol: SupportedFiat, cryptoSymbol: SupportedCrypto): number | null;
|
|
16
|
+
getAllRates(): Readonly<HiveRatesType>;
|
|
17
|
+
getCryptoRates(): {
|
|
18
|
+
hive?: number;
|
|
19
|
+
hbd?: number;
|
|
20
|
+
};
|
|
21
|
+
getFiatRates(): Readonly<ExchangeRates>;
|
|
22
|
+
fiatToHiveRate(fiatSymbol: string, hiveSymbol: string): number | null;
|
|
23
|
+
private fetchFiatRates;
|
|
24
|
+
private parseFiatResponse;
|
|
25
|
+
private fetchWithTimeout;
|
|
26
|
+
getLastFetchTimes(): {
|
|
27
|
+
crypto?: number;
|
|
28
|
+
fiat?: number;
|
|
29
|
+
};
|
|
30
|
+
isCacheValid(): {
|
|
31
|
+
crypto: boolean;
|
|
32
|
+
fiat: boolean;
|
|
33
|
+
};
|
|
9
34
|
}
|
package/dist/hive-rates.js
CHANGED
|
@@ -2,121 +2,208 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HiveRates = void 0;
|
|
4
4
|
const coingecko_1 = require("./exchanges/coingecko");
|
|
5
|
+
const rates_1 = require("./types/rates");
|
|
5
6
|
class HiveRates {
|
|
6
7
|
fiatRates = {};
|
|
7
8
|
hiveRates = {};
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
lastFiatFetch;
|
|
10
|
+
exchanges;
|
|
11
|
+
config;
|
|
12
|
+
static FIAT_API_ENDPOINTS = [
|
|
13
|
+
'https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies',
|
|
14
|
+
'https://latest.currency-api.pages.dev/v1/currencies'
|
|
15
|
+
];
|
|
16
|
+
constructor(config = {}, customExchanges = []) {
|
|
17
|
+
this.config = {
|
|
18
|
+
cacheDuration: config.cacheDuration ?? 60 * 60 * 1000, // 1 hour
|
|
19
|
+
maxRetries: config.maxRetries ?? 3,
|
|
20
|
+
retryDelay: config.retryDelay ?? 1000,
|
|
21
|
+
timeout: config.timeout ?? 10000,
|
|
22
|
+
};
|
|
23
|
+
this.exchanges = customExchanges.length > 0
|
|
24
|
+
? customExchanges
|
|
25
|
+
: [new coingecko_1.CoinGeckoExchange(this.config)];
|
|
26
|
+
}
|
|
10
27
|
async fetchRates() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const usdHiveRate = exchange.rateUsdHive;
|
|
22
|
-
const usdHbdRate = exchange.rateUsdHbd;
|
|
23
|
-
if (usdHiveRate && usdHiveRate > 0) {
|
|
24
|
-
hiveAverage += usdHiveRate;
|
|
25
|
-
hiveCount++;
|
|
26
|
-
}
|
|
27
|
-
if (usdHbdRate && usdHbdRate > 0) {
|
|
28
|
-
hbdAverage += usdHbdRate;
|
|
29
|
-
hbdCount++;
|
|
30
|
-
}
|
|
28
|
+
try {
|
|
29
|
+
const [cryptoSuccess, fiatSuccess] = await Promise.allSettled([
|
|
30
|
+
this.fetchCryptoRates(),
|
|
31
|
+
this.fetchFiatRates()
|
|
32
|
+
]);
|
|
33
|
+
const cryptoUpdated = cryptoSuccess.status === 'fulfilled' && cryptoSuccess.value;
|
|
34
|
+
const fiatUpdated = fiatSuccess.status === 'fulfilled' && fiatSuccess.value;
|
|
35
|
+
if (!cryptoUpdated && !fiatUpdated) {
|
|
36
|
+
console.warn('No rates were updated');
|
|
37
|
+
return false;
|
|
31
38
|
}
|
|
39
|
+
if (cryptoUpdated) {
|
|
40
|
+
this.calculateCrossRates();
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
32
43
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
if (hiveCount > 0) {
|
|
38
|
-
hiveAverage = hiveAverage / hiveCount;
|
|
39
|
-
}
|
|
40
|
-
if (hbdCount > 0) {
|
|
41
|
-
hbdAverage = hbdAverage / hbdCount;
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('Error in fetchRates:', error);
|
|
46
|
+
throw error instanceof rates_1.RatesError ? error : new rates_1.RatesError(`Unexpected error: ${error instanceof Error ? error.message : String(error)}`, 'UNKNOWN_ERROR');
|
|
42
47
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
}
|
|
49
|
+
async fetchCryptoRates() {
|
|
50
|
+
const results = await Promise.allSettled(this.exchanges.map(exchange => exchange.updateRates()));
|
|
51
|
+
const successfulUpdates = results
|
|
52
|
+
.map((result, index) => ({
|
|
53
|
+
result,
|
|
54
|
+
exchange: this.exchanges[index]
|
|
55
|
+
}))
|
|
56
|
+
.filter(({ result }) => result.status === 'fulfilled' && result.value);
|
|
57
|
+
if (successfulUpdates.length === 0) {
|
|
58
|
+
const errors = results
|
|
59
|
+
.filter(result => result.status === 'rejected')
|
|
60
|
+
.map(result => result.reason);
|
|
61
|
+
console.warn('All crypto exchanges failed:', errors);
|
|
62
|
+
return false;
|
|
48
63
|
}
|
|
49
64
|
return true;
|
|
50
65
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
66
|
+
calculateCrossRates() {
|
|
67
|
+
const { hiveAverage, hbdAverage } = this.calculateAverageRates();
|
|
68
|
+
if (hiveAverage === 0 && hbdAverage === 0) {
|
|
69
|
+
console.warn('No valid crypto rates available for cross-rate calculation');
|
|
70
|
+
return;
|
|
54
71
|
}
|
|
55
|
-
|
|
56
|
-
|
|
72
|
+
// Calculate cross rates with fiat currencies
|
|
73
|
+
Object.entries(this.fiatRates).forEach(([symbol, rate]) => {
|
|
74
|
+
if (typeof rate === 'number' && !isNaN(rate) && rate > 0) {
|
|
75
|
+
this.hiveRates[`USD_${symbol}`] = rate;
|
|
76
|
+
if (hiveAverage > 0) {
|
|
77
|
+
this.hiveRates[`${symbol}_HIVE`] = hiveAverage * rate;
|
|
78
|
+
}
|
|
79
|
+
if (hbdAverage > 0) {
|
|
80
|
+
this.hiveRates[`${symbol}_HBD`] = hbdAverage * rate;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
calculateAverageRates() {
|
|
86
|
+
let hiveSum = 0;
|
|
87
|
+
let hbdSum = 0;
|
|
88
|
+
let hiveCount = 0;
|
|
89
|
+
let hbdCount = 0;
|
|
90
|
+
for (const exchange of this.exchanges) {
|
|
91
|
+
if (exchange.rateUsdHive && exchange.rateUsdHive > 0) {
|
|
92
|
+
hiveSum += exchange.rateUsdHive;
|
|
93
|
+
hiveCount++;
|
|
94
|
+
}
|
|
95
|
+
if (exchange.rateUsdHbd && exchange.rateUsdHbd > 0) {
|
|
96
|
+
hbdSum += exchange.rateUsdHbd;
|
|
97
|
+
hbdCount++;
|
|
98
|
+
}
|
|
57
99
|
}
|
|
58
|
-
return
|
|
100
|
+
return {
|
|
101
|
+
hiveAverage: hiveCount > 0 ? hiveSum / hiveCount : 0,
|
|
102
|
+
hbdAverage: hbdCount > 0 ? hbdSum / hbdCount : 0
|
|
103
|
+
};
|
|
59
104
|
}
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
105
|
+
getRate(fiatSymbol, cryptoSymbol) {
|
|
106
|
+
const pair = `${fiatSymbol}_${cryptoSymbol}`;
|
|
107
|
+
return this.hiveRates[pair] ?? null;
|
|
108
|
+
}
|
|
109
|
+
getAllRates() {
|
|
110
|
+
return { ...this.hiveRates };
|
|
111
|
+
}
|
|
112
|
+
getCryptoRates() {
|
|
113
|
+
const { hiveAverage, hbdAverage } = this.calculateAverageRates();
|
|
114
|
+
return {
|
|
115
|
+
...(hiveAverage > 0 && { hive: hiveAverage }),
|
|
116
|
+
...(hbdAverage > 0 && { hbd: hbdAverage })
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
getFiatRates() {
|
|
120
|
+
return { ...this.fiatRates };
|
|
121
|
+
}
|
|
122
|
+
// Legacy method for backward compatibility
|
|
123
|
+
fiatToHiveRate(fiatSymbol, hiveSymbol) {
|
|
124
|
+
return this.getRate(fiatSymbol, hiveSymbol);
|
|
125
|
+
}
|
|
126
|
+
async fetchFiatRates(baseCurrency = 'USD') {
|
|
127
|
+
const cacheExpiry = Date.now() - this.config.cacheDuration;
|
|
128
|
+
if (this.lastFiatFetch && this.lastFiatFetch > cacheExpiry) {
|
|
129
|
+
return false; // Cache still valid
|
|
64
130
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
let exchangeRates = null;
|
|
69
|
-
// Try primary endpoint first
|
|
131
|
+
const baseKey = baseCurrency.toLowerCase();
|
|
132
|
+
let lastError = null;
|
|
133
|
+
for (const baseUrl of HiveRates.FIAT_API_ENDPOINTS) {
|
|
70
134
|
try {
|
|
71
|
-
const
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
135
|
+
const url = `${baseUrl}/${baseKey}.json`;
|
|
136
|
+
const response = await this.fetchWithTimeout(url);
|
|
137
|
+
const data = await response.json();
|
|
138
|
+
const rates = this.parseFiatResponse(data, baseKey);
|
|
139
|
+
if (Object.keys(rates).length === 0) {
|
|
140
|
+
throw new rates_1.ValidationError('No valid currency rates found in response');
|
|
76
141
|
}
|
|
142
|
+
this.fiatRates = rates;
|
|
143
|
+
this.lastFiatFetch = Date.now();
|
|
144
|
+
console.log(`Successfully fetched ${Object.keys(rates).length} fiat rates from ${baseUrl}`);
|
|
145
|
+
return true;
|
|
77
146
|
}
|
|
78
|
-
catch (
|
|
79
|
-
|
|
147
|
+
catch (error) {
|
|
148
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
149
|
+
console.warn(`Fiat API endpoint ${baseUrl} failed:`, lastError.message);
|
|
80
150
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
console.error('No valid exchange rates found in API response');
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
// Convert the currency codes to uppercase to match the previous format
|
|
100
|
-
const upperCaseRates = {};
|
|
101
|
-
for (const [currency, rate] of Object.entries(exchangeRates)) {
|
|
102
|
-
if (typeof rate === 'number' && !isNaN(rate)) {
|
|
103
|
-
upperCaseRates[currency.toUpperCase()] = rate;
|
|
104
|
-
}
|
|
151
|
+
}
|
|
152
|
+
throw new rates_1.NetworkError(`All fiat API endpoints failed. Last error: ${lastError?.message}`, 'fiat-api');
|
|
153
|
+
}
|
|
154
|
+
parseFiatResponse(data, baseKey) {
|
|
155
|
+
if (!data || typeof data !== 'object') {
|
|
156
|
+
throw new rates_1.ValidationError('Invalid fiat API response format');
|
|
157
|
+
}
|
|
158
|
+
const exchangeRates = data[baseKey];
|
|
159
|
+
if (!exchangeRates || typeof exchangeRates !== 'object') {
|
|
160
|
+
throw new rates_1.ValidationError(`No exchange rates found for base currency: ${baseKey}`);
|
|
161
|
+
}
|
|
162
|
+
const validRates = {};
|
|
163
|
+
Object.entries(exchangeRates).forEach(([currency, rate]) => {
|
|
164
|
+
if (typeof rate === 'number' && !isNaN(rate) && rate > 0) {
|
|
165
|
+
validRates[currency.toUpperCase()] = rate;
|
|
105
166
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
167
|
+
});
|
|
168
|
+
return validRates;
|
|
169
|
+
}
|
|
170
|
+
async fetchWithTimeout(url) {
|
|
171
|
+
const controller = new AbortController();
|
|
172
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
173
|
+
try {
|
|
174
|
+
const response = await fetch(url, {
|
|
175
|
+
signal: controller.signal,
|
|
176
|
+
headers: {
|
|
177
|
+
'User-Agent': 'hive-stream/3.0.0',
|
|
178
|
+
'Accept': 'application/json',
|
|
179
|
+
'Cache-Control': 'no-cache',
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
if (!response.ok) {
|
|
183
|
+
throw new rates_1.NetworkError(`HTTP ${response.status}: ${response.statusText}`);
|
|
109
184
|
}
|
|
110
|
-
|
|
111
|
-
this.lastFetch = Date.now();
|
|
112
|
-
console.log(`Successfully fetched ${Object.keys(upperCaseRates).length} currency rates with base ${base}`);
|
|
113
|
-
return true;
|
|
185
|
+
return response;
|
|
114
186
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return false;
|
|
187
|
+
finally {
|
|
188
|
+
clearTimeout(timeoutId);
|
|
118
189
|
}
|
|
119
190
|
}
|
|
191
|
+
getLastFetchTimes() {
|
|
192
|
+
const cryptoTimes = this.exchanges
|
|
193
|
+
.map(exchange => exchange.getLastFetchTime())
|
|
194
|
+
.filter((time) => time !== undefined);
|
|
195
|
+
return {
|
|
196
|
+
...(cryptoTimes.length > 0 && { crypto: Math.max(...cryptoTimes) }),
|
|
197
|
+
...(this.lastFiatFetch && { fiat: this.lastFiatFetch })
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
isCacheValid() {
|
|
201
|
+
const cryptoValid = this.exchanges.some(exchange => exchange.isCacheValid());
|
|
202
|
+
const fiatValid = this.lastFiatFetch
|
|
203
|
+
? this.lastFiatFetch > (Date.now() - this.config.cacheDuration)
|
|
204
|
+
: false;
|
|
205
|
+
return { crypto: cryptoValid, fiat: fiatValid };
|
|
206
|
+
}
|
|
120
207
|
}
|
|
121
208
|
exports.HiveRates = HiveRates;
|
|
122
209
|
//# sourceMappingURL=hive-rates.js.map
|
package/dist/hive-rates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hive-rates.js","sourceRoot":"","sources":["../src/hive-rates.ts"],"names":[],"mappings":";;;AAAA,qDAA0D;AAE1D,MAAa,SAAS;IACV,SAAS,
|
|
1
|
+
{"version":3,"file":"hive-rates.js","sourceRoot":"","sources":["../src/hive-rates.ts"],"names":[],"mappings":";;;AAAA,qDAA0D;AAE1D,yCAUuB;AAMvB,MAAa,SAAS;IACV,SAAS,GAAkB,EAAE,CAAC;IAC9B,SAAS,GAAkB,EAAE,CAAC;IAC9B,aAAa,CAAU;IACd,SAAS,CAAa;IACtB,MAAM,CAAuB;IAEtC,MAAM,CAAU,kBAAkB,GAAG;QACzC,6EAA6E;QAC7E,qDAAqD;KAC/C,CAAC;IAEX,YAAY,SAAqB,EAAE,EAAE,kBAA8B,EAAE;QACjE,IAAI,CAAC,MAAM,GAAG;YACV,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;YAChE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;YAClC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;YACrC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;SACnC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,CAAC,IAAI,6BAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,IAAI,CAAC;YACD,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;gBAC1D,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,cAAc,EAAE;aACxB,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,KAAK,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC;YAClF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,KAAK,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC;YAE5E,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAChB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/B,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,KAAK,YAAY,kBAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,kBAAU,CACtD,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC7E,eAAe,CAClB,CAAC;QACN,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CACzD,CAAC;QAEF,MAAM,iBAAiB,GAAG,OAAO;aAC5B,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrB,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAClC,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3E,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,OAAO;iBACjB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;iBAC9C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,MAAgC,CAAC,MAAM,CAAC,CAAC;YAE7D,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,mBAAmB;QACvB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEjE,IAAI,WAAW,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC3E,OAAO;QACX,CAAC;QAED,6CAA6C;QAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;YACtD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,SAAS,CAAC,OAAO,MAAM,EAAkB,CAAC,GAAG,IAAI,CAAC;gBAEvD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,OAAuB,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;gBAC1E,CAAC;gBAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACjB,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,MAAsB,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC;gBACxE,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,qBAAqB;QACzB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC;gBAChC,SAAS,EAAE,CAAC;YAChB,CAAC;YAED,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC;gBAC9B,QAAQ,EAAE,CAAC;YACf,CAAC;QACL,CAAC;QAED,OAAO;YACH,WAAW,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACpD,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SACnD,CAAC;IACN,CAAC;IAEM,OAAO,CAAC,UAAyB,EAAE,YAA6B;QACnE,MAAM,IAAI,GAAiB,GAAG,UAAU,IAAI,YAAY,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAEM,WAAW;QACd,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAEM,cAAc;QACjB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjE,OAAO;YACH,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YAC7C,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;SAC7C,CAAC;IACN,CAAC;IAEM,YAAY;QACf,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,2CAA2C;IACpC,cAAc,CAAC,UAAkB,EAAE,UAAkB;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,UAA2B,EAAE,UAA6B,CAAC,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,YAAY,GAAG,KAAK;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAE3D,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,GAAG,WAAW,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC,CAAC,oBAAoB;QACtC,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,SAAS,GAAiB,IAAI,CAAC;QAEnC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACjD,IAAI,CAAC;gBACD,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,OAAO,OAAO,CAAC;gBACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,IAAI,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAEpD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACpD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAClC,MAAM,IAAI,uBAAe,CAAC,2CAA2C,CAAC,CAAC;gBAC3E,CAAC;gBAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEhC,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBAC5F,OAAO,IAAI,CAAC;YAEhB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YAC5E,CAAC;QACL,CAAC;QAED,MAAM,IAAI,oBAAY,CAClB,8CAA8C,SAAS,EAAE,OAAO,EAAE,EAClE,UAAU,CACb,CAAC;IACN,CAAC;IAEO,iBAAiB,CAAC,IAAqB,EAAE,OAAe;QAC5D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,uBAAe,CAAC,kCAAkC,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,uBAAe,CAAC,8CAA8C,OAAO,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,UAAU,GAAkB,EAAE,CAAC;QAErC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;YACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACvD,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;YAC9C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,GAAW;QACtC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5E,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC9B,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE;oBACL,YAAY,EAAE,mBAAmB;oBACjC,QAAQ,EAAE,kBAAkB;oBAC5B,eAAe,EAAE,UAAU;iBAC9B;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,oBAAY,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAEM,iBAAiB;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS;aAC7B,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;aAC5C,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAE1D,OAAO;YACH,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;SAC1D,CAAC;IACN,CAAC;IAEM,YAAY;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa;YAChC,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAC/D,CAAC,CAAC,KAAK,CAAC;QAEZ,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;;AA9PL,8BA+PC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,18 @@ export * from './config';
|
|
|
2
2
|
export * from './streamer';
|
|
3
3
|
export * from './utils';
|
|
4
4
|
export * from './actions';
|
|
5
|
+
export * from './contracts/contract';
|
|
5
6
|
export * from './adapters/base.adapter';
|
|
6
7
|
export * from './adapters/sqlite.adapter';
|
|
7
8
|
export * from './adapters/mongodb.adapter';
|
|
8
9
|
export * from './adapters/postgresql.adapter';
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
10
|
+
export { createDiceContract } from './contracts/dice.contract';
|
|
11
|
+
export { createLottoContract } from './contracts/lotto.contract';
|
|
12
|
+
export { createCoinflipContract } from './contracts/coinflip.contract';
|
|
13
|
+
export { createTokenContract } from './contracts/token.contract';
|
|
14
|
+
export { createNFTContract, NFTContract } from './contracts/nft.contract';
|
|
15
|
+
export { createRpsContract } from './contracts/rps.contract';
|
|
16
|
+
export { createPollContract } from './contracts/poll.contract';
|
|
17
|
+
export { createTipJarContract } from './contracts/tipjar.contract';
|
|
18
|
+
export { createExchangeContract } from './contracts/exchange.contract';
|
|
12
19
|
export * from './types/hive-stream';
|
package/dist/index.js
CHANGED
|
@@ -14,21 +14,35 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
17
|
+
exports.createExchangeContract = exports.createTipJarContract = exports.createPollContract = exports.createRpsContract = exports.NFTContract = exports.createNFTContract = exports.createTokenContract = exports.createCoinflipContract = exports.createLottoContract = exports.createDiceContract = void 0;
|
|
18
18
|
__exportStar(require("./config"), exports);
|
|
19
19
|
__exportStar(require("./streamer"), exports);
|
|
20
20
|
__exportStar(require("./utils"), exports);
|
|
21
21
|
__exportStar(require("./actions"), exports);
|
|
22
|
+
__exportStar(require("./contracts/contract"), exports);
|
|
22
23
|
__exportStar(require("./adapters/base.adapter"), exports);
|
|
23
24
|
__exportStar(require("./adapters/sqlite.adapter"), exports);
|
|
24
25
|
__exportStar(require("./adapters/mongodb.adapter"), exports);
|
|
25
26
|
__exportStar(require("./adapters/postgresql.adapter"), exports);
|
|
26
27
|
var dice_contract_1 = require("./contracts/dice.contract");
|
|
27
|
-
Object.defineProperty(exports, "
|
|
28
|
+
Object.defineProperty(exports, "createDiceContract", { enumerable: true, get: function () { return dice_contract_1.createDiceContract; } });
|
|
28
29
|
var lotto_contract_1 = require("./contracts/lotto.contract");
|
|
29
|
-
Object.defineProperty(exports, "
|
|
30
|
+
Object.defineProperty(exports, "createLottoContract", { enumerable: true, get: function () { return lotto_contract_1.createLottoContract; } });
|
|
30
31
|
var coinflip_contract_1 = require("./contracts/coinflip.contract");
|
|
31
|
-
Object.defineProperty(exports, "
|
|
32
|
+
Object.defineProperty(exports, "createCoinflipContract", { enumerable: true, get: function () { return coinflip_contract_1.createCoinflipContract; } });
|
|
33
|
+
var token_contract_1 = require("./contracts/token.contract");
|
|
34
|
+
Object.defineProperty(exports, "createTokenContract", { enumerable: true, get: function () { return token_contract_1.createTokenContract; } });
|
|
35
|
+
var nft_contract_1 = require("./contracts/nft.contract");
|
|
36
|
+
Object.defineProperty(exports, "createNFTContract", { enumerable: true, get: function () { return nft_contract_1.createNFTContract; } });
|
|
37
|
+
Object.defineProperty(exports, "NFTContract", { enumerable: true, get: function () { return nft_contract_1.NFTContract; } });
|
|
38
|
+
var rps_contract_1 = require("./contracts/rps.contract");
|
|
39
|
+
Object.defineProperty(exports, "createRpsContract", { enumerable: true, get: function () { return rps_contract_1.createRpsContract; } });
|
|
40
|
+
var poll_contract_1 = require("./contracts/poll.contract");
|
|
41
|
+
Object.defineProperty(exports, "createPollContract", { enumerable: true, get: function () { return poll_contract_1.createPollContract; } });
|
|
42
|
+
var tipjar_contract_1 = require("./contracts/tipjar.contract");
|
|
43
|
+
Object.defineProperty(exports, "createTipJarContract", { enumerable: true, get: function () { return tipjar_contract_1.createTipJarContract; } });
|
|
44
|
+
var exchange_contract_1 = require("./contracts/exchange.contract");
|
|
45
|
+
Object.defineProperty(exports, "createExchangeContract", { enumerable: true, get: function () { return exchange_contract_1.createExchangeContract; } });
|
|
32
46
|
// Types
|
|
33
47
|
__exportStar(require("./types/hive-stream"), exports);
|
|
34
48
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6CAA2B;AAC3B,0CAAwB;AACxB,4CAA0B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6CAA2B;AAC3B,0CAAwB;AACxB,4CAA0B;AAC1B,uDAAqC;AAErC,0DAAwC;AACxC,4DAA0C;AAC1C,6DAA2C;AAC3C,gEAA8C;AAE9C,2DAA+D;AAAtD,mHAAA,kBAAkB,OAAA;AAC3B,6DAAiE;AAAxD,qHAAA,mBAAmB,OAAA;AAC5B,mEAAuE;AAA9D,2HAAA,sBAAsB,OAAA;AAC/B,6DAAiE;AAAxD,qHAAA,mBAAmB,OAAA;AAC5B,yDAA0E;AAAjE,iHAAA,iBAAiB,OAAA;AAAE,2GAAA,WAAW,OAAA;AACvC,yDAA6D;AAApD,iHAAA,iBAAiB,OAAA;AAC1B,2DAA+D;AAAtD,mHAAA,kBAAkB,OAAA;AAC3B,+DAAmE;AAA1D,uHAAA,oBAAoB,OAAA;AAC7B,mEAAuE;AAA9D,2HAAA,sBAAsB,OAAA;AAE/B,QAAQ;AACR,sDAAoC"}
|
package/dist/streamer.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AdapterBase } from './adapters/base.adapter';
|
|
2
2
|
import { TimeAction } from './actions';
|
|
3
3
|
import { ConfigInterface } from './config';
|
|
4
|
-
import {
|
|
4
|
+
import { ContractDefinition, EscrowOperationType } from './types/hive-stream';
|
|
5
5
|
export declare class Streamer {
|
|
6
6
|
private customJsonSubscriptions;
|
|
7
7
|
private customJsonIdSubscriptions;
|
|
@@ -9,6 +9,7 @@ export declare class Streamer {
|
|
|
9
9
|
private commentSubscriptions;
|
|
10
10
|
private postSubscriptions;
|
|
11
11
|
private transferSubscriptions;
|
|
12
|
+
private escrowSubscriptions;
|
|
12
13
|
private attempts;
|
|
13
14
|
private config;
|
|
14
15
|
private client;
|
|
@@ -19,6 +20,9 @@ export declare class Streamer {
|
|
|
19
20
|
private blockNumberTimeout;
|
|
20
21
|
private latestBlockTimer;
|
|
21
22
|
private lastBlockNumber;
|
|
23
|
+
private headBlockNumber;
|
|
24
|
+
private isPollingBlock;
|
|
25
|
+
private isCatchingUp;
|
|
22
26
|
private blockId;
|
|
23
27
|
private previousBlockId;
|
|
24
28
|
private transactionId;
|
|
@@ -54,6 +58,7 @@ export declare class Streamer {
|
|
|
54
58
|
* Validate that the contract and method exist for the action
|
|
55
59
|
*/
|
|
56
60
|
private validateActionContract;
|
|
61
|
+
private isActionTriggerAllowed;
|
|
57
62
|
/**
|
|
58
63
|
* Remove an action by ID
|
|
59
64
|
*/
|
|
@@ -78,8 +83,8 @@ export declare class Streamer {
|
|
|
78
83
|
* Resets a specific action time value
|
|
79
84
|
*/
|
|
80
85
|
resetAction(id: string): Promise<boolean>;
|
|
81
|
-
registerContract(
|
|
82
|
-
unregisterContract(name: string): void
|
|
86
|
+
registerContract(contract: ContractDefinition): Promise<void>;
|
|
87
|
+
unregisterContract(name: string): Promise<void>;
|
|
83
88
|
/**
|
|
84
89
|
* setConfig
|
|
85
90
|
*
|
|
@@ -105,11 +110,12 @@ export declare class Streamer {
|
|
|
105
110
|
private getBlock;
|
|
106
111
|
private loadBlock;
|
|
107
112
|
processOperation(op: [string, any], blockNumber: number, blockId: string, prevBlockId: string, trxId: string, blockTime: Date): Promise<void>;
|
|
113
|
+
private normalizeContractPayload;
|
|
114
|
+
private isEscrowOperationType;
|
|
115
|
+
private buildEscrowDetails;
|
|
116
|
+
private buildContractContext;
|
|
117
|
+
private dispatchContractAction;
|
|
108
118
|
private processActions;
|
|
109
|
-
/**
|
|
110
|
-
* Execute a single action with proper isolation
|
|
111
|
-
*/
|
|
112
|
-
private executeAction;
|
|
113
119
|
/**
|
|
114
120
|
* Clean up completed or disabled actions to prevent memory leaks
|
|
115
121
|
*/
|
|
@@ -117,9 +123,84 @@ export declare class Streamer {
|
|
|
117
123
|
saveStateToDisk(): Promise<void>;
|
|
118
124
|
private saveStateThrottled;
|
|
119
125
|
saveToHiveApi(from: string, data: string): Promise<import("@hiveio/dhive").TransactionConfirmation>;
|
|
120
|
-
getAccountTransfers(account: string, from?: number, limit?: number): Promise<any>;
|
|
126
|
+
getAccountTransfers(account: string, from?: number, limit?: number): Promise<any[]>;
|
|
121
127
|
transferHiveTokens(from: string, to: string, amount: string, symbol: string, memo?: string): Promise<import("@hiveio/dhive").TransactionConfirmation>;
|
|
122
128
|
transferHiveTokensMultiple(from: string, accounts: string[], amount: string, symbol: string, memo?: string): Promise<boolean>;
|
|
129
|
+
broadcastOperations(operations: Array<[string, any]>, signingKeys?: string | string[]): Promise<import("@hiveio/dhive").TransactionConfirmation>;
|
|
130
|
+
broadcastMultiSigOperations(operations: Array<[string, any]>, signingKeys: string[]): any;
|
|
131
|
+
createAuthority(keyAuths?: Array<[string, number]>, accountAuths?: Array<[string, number]>, weightThreshold?: number): any;
|
|
132
|
+
updateAccountAuthorities(account: string, authorityUpdate: {
|
|
133
|
+
owner?: any;
|
|
134
|
+
active?: any;
|
|
135
|
+
posting?: any;
|
|
136
|
+
memo_key?: string;
|
|
137
|
+
json_metadata?: string;
|
|
138
|
+
posting_json_metadata?: string;
|
|
139
|
+
useAccountUpdate2?: boolean;
|
|
140
|
+
}, signingKeys?: string | string[]): Promise<any>;
|
|
141
|
+
escrowTransfer(options: {
|
|
142
|
+
from: string;
|
|
143
|
+
to: string;
|
|
144
|
+
agent: string;
|
|
145
|
+
escrow_id: number;
|
|
146
|
+
hive_amount?: string;
|
|
147
|
+
hbd_amount?: string;
|
|
148
|
+
fee: string;
|
|
149
|
+
ratification_deadline: string | Date;
|
|
150
|
+
escrow_expiration: string | Date;
|
|
151
|
+
json_meta?: string | Record<string, any>;
|
|
152
|
+
}, signingKeys?: string | string[]): any;
|
|
153
|
+
escrowApprove(options: {
|
|
154
|
+
from: string;
|
|
155
|
+
to: string;
|
|
156
|
+
agent: string;
|
|
157
|
+
who: string;
|
|
158
|
+
escrow_id: number;
|
|
159
|
+
approve: boolean;
|
|
160
|
+
}, signingKeys?: string | string[]): any;
|
|
161
|
+
escrowDispute(options: {
|
|
162
|
+
from: string;
|
|
163
|
+
to: string;
|
|
164
|
+
agent: string;
|
|
165
|
+
who: string;
|
|
166
|
+
escrow_id: number;
|
|
167
|
+
}, signingKeys?: string | string[]): any;
|
|
168
|
+
escrowRelease(options: {
|
|
169
|
+
from: string;
|
|
170
|
+
to: string;
|
|
171
|
+
agent: string;
|
|
172
|
+
who: string;
|
|
173
|
+
receiver: string;
|
|
174
|
+
escrow_id: number;
|
|
175
|
+
hive_amount?: string;
|
|
176
|
+
hbd_amount?: string;
|
|
177
|
+
}, signingKeys?: string | string[]): any;
|
|
178
|
+
recurrentTransfer(options: {
|
|
179
|
+
from: string;
|
|
180
|
+
to: string;
|
|
181
|
+
amount: string;
|
|
182
|
+
memo?: string;
|
|
183
|
+
recurrence: number;
|
|
184
|
+
executions: number;
|
|
185
|
+
}, signingKeys?: string | string[]): any;
|
|
186
|
+
createProposal(options: {
|
|
187
|
+
creator: string;
|
|
188
|
+
receiver: string;
|
|
189
|
+
start_date: string | Date;
|
|
190
|
+
end_date: string | Date;
|
|
191
|
+
daily_pay: string;
|
|
192
|
+
subject: string;
|
|
193
|
+
permlink: string;
|
|
194
|
+
}, signingKeys?: string | string[]): any;
|
|
195
|
+
updateProposalVotes(options: {
|
|
196
|
+
voter: string;
|
|
197
|
+
proposal_ids: number[];
|
|
198
|
+
approve: boolean;
|
|
199
|
+
}, signingKeys?: string | string[]): any;
|
|
200
|
+
removeProposals(options: {
|
|
201
|
+
proposal_owner: string;
|
|
202
|
+
proposal_ids: number[];
|
|
203
|
+
}, signingKeys?: string | string[]): any;
|
|
123
204
|
transferHiveEngineTokens(from: string, to: string, symbol: string, quantity: string, memo?: string): Promise<import("@hiveio/dhive").TransactionConfirmation>;
|
|
124
205
|
transferHiveEngineTokensMultiple(from: string, accounts: any[], symbol: string, memo?: string, amount?: string): Promise<void>;
|
|
125
206
|
issueHiveEngineTokens(from: string, to: string, symbol: string, quantity: string, memo?: string): Promise<import("@hiveio/dhive").TransactionConfirmation>;
|
|
@@ -127,6 +208,13 @@ export declare class Streamer {
|
|
|
127
208
|
upvote(votePercentage: string, username: string, permlink: string): Promise<import("@hiveio/dhive").TransactionConfirmation>;
|
|
128
209
|
downvote(votePercentage: string, username: string, permlink: string): Promise<import("@hiveio/dhive").TransactionConfirmation>;
|
|
129
210
|
getTransaction(blockNumber: number, transactionId: string): Promise<import("@hiveio/dhive").SignedTransaction>;
|
|
211
|
+
getStatus(): {
|
|
212
|
+
lastBlockNumber: number;
|
|
213
|
+
headBlockNumber: number;
|
|
214
|
+
blocksBehind: number;
|
|
215
|
+
latestBlockchainTime: Date;
|
|
216
|
+
isCatchingUp: boolean;
|
|
217
|
+
};
|
|
130
218
|
verifyTransfer(transaction: any, from: string, to: string, amount: string): Promise<boolean>;
|
|
131
219
|
onComment(callback: any): void;
|
|
132
220
|
onPost(callback: any): void;
|
|
@@ -134,7 +222,12 @@ export declare class Streamer {
|
|
|
134
222
|
onCustomJson(callback: any): void;
|
|
135
223
|
onCustomJsonId(callback: any, id: string): void;
|
|
136
224
|
onHiveEngine(callback: any): void;
|
|
225
|
+
onEscrowTransfer(callback: any): void;
|
|
226
|
+
onEscrowApprove(callback: any): void;
|
|
227
|
+
onEscrowDispute(callback: any): void;
|
|
228
|
+
onEscrowRelease(callback: any): void;
|
|
137
229
|
private cleanupSubscriptions;
|
|
138
230
|
removeTransferSubscription(account: string): void;
|
|
139
231
|
removeCustomJsonIdSubscription(id: string): void;
|
|
232
|
+
removeEscrowSubscriptions(type?: EscrowOperationType): void;
|
|
140
233
|
}
|