@revealui/services 0.1.0 → 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 (49) hide show
  1. package/dist/api/handlers/subscription-handlers.d.ts +5 -1
  2. package/dist/api/handlers/subscription-handlers.d.ts.map +1 -1
  3. package/dist/api/handlers/subscription-handlers.js +5 -1
  4. package/dist/api/handlers/subscription-handlers.js.map +1 -1
  5. package/dist/api/webhooks/index.d.ts +10 -0
  6. package/dist/api/webhooks/index.d.ts.map +1 -1
  7. package/dist/api/webhooks/index.js +10 -0
  8. package/dist/api/webhooks/index.js.map +1 -1
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/revealcoin/__tests__/client.test.d.ts +2 -0
  14. package/dist/revealcoin/__tests__/client.test.d.ts.map +1 -0
  15. package/dist/revealcoin/__tests__/client.test.js +207 -0
  16. package/dist/revealcoin/__tests__/client.test.js.map +1 -0
  17. package/dist/revealcoin/__tests__/config.test.d.ts +2 -0
  18. package/dist/revealcoin/__tests__/config.test.d.ts.map +1 -0
  19. package/dist/revealcoin/__tests__/config.test.js +91 -0
  20. package/dist/revealcoin/__tests__/config.test.js.map +1 -0
  21. package/dist/revealcoin/__tests__/oracle.test.d.ts +2 -0
  22. package/dist/revealcoin/__tests__/oracle.test.d.ts.map +1 -0
  23. package/dist/revealcoin/__tests__/oracle.test.js +238 -0
  24. package/dist/revealcoin/__tests__/oracle.test.js.map +1 -0
  25. package/dist/revealcoin/__tests__/safeguards.test.d.ts +2 -0
  26. package/dist/revealcoin/__tests__/safeguards.test.d.ts.map +1 -0
  27. package/dist/revealcoin/__tests__/safeguards.test.js +571 -0
  28. package/dist/revealcoin/__tests__/safeguards.test.js.map +1 -0
  29. package/dist/revealcoin/client.d.ts +51 -0
  30. package/dist/revealcoin/client.d.ts.map +1 -0
  31. package/dist/revealcoin/client.js +211 -0
  32. package/dist/revealcoin/client.js.map +1 -0
  33. package/dist/revealcoin/config.d.ts +32 -0
  34. package/dist/revealcoin/config.d.ts.map +1 -0
  35. package/dist/revealcoin/config.js +54 -0
  36. package/dist/revealcoin/config.js.map +1 -0
  37. package/dist/revealcoin/index.d.ts +5 -0
  38. package/dist/revealcoin/index.d.ts.map +1 -0
  39. package/dist/revealcoin/index.js +5 -0
  40. package/dist/revealcoin/index.js.map +1 -0
  41. package/dist/revealcoin/oracle.d.ts +81 -0
  42. package/dist/revealcoin/oracle.d.ts.map +1 -0
  43. package/dist/revealcoin/oracle.js +211 -0
  44. package/dist/revealcoin/oracle.js.map +1 -0
  45. package/dist/revealcoin/safeguards.d.ts +92 -0
  46. package/dist/revealcoin/safeguards.d.ts.map +1 -0
  47. package/dist/revealcoin/safeguards.js +240 -0
  48. package/dist/revealcoin/safeguards.js.map +1 -0
  49. package/package.json +9 -3
@@ -0,0 +1,238 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ // Mock dependencies before imports
3
+ vi.mock('@revealui/contracts', () => ({
4
+ RVUI_MINT_ADDRESSES: {
5
+ devnet: '4Ysb1gkz21FD2B9P8P5Pm8bHh4CAMKYU1L528e1MigPo',
6
+ 'mainnet-beta': '',
7
+ },
8
+ }));
9
+ vi.mock('@revealui/core/observability/logger', () => ({
10
+ createLogger: () => ({
11
+ debug: vi.fn(),
12
+ info: vi.fn(),
13
+ warn: vi.fn(),
14
+ error: vi.fn(),
15
+ }),
16
+ }));
17
+ const mockGetRevealCoinConfig = vi.fn(() => ({
18
+ network: 'devnet',
19
+ }));
20
+ vi.mock('../config.js', () => ({
21
+ getRevealCoinConfig: () => mockGetRevealCoinConfig(),
22
+ }));
23
+ const mockRecordPriceSnapshot = vi.fn();
24
+ const mockGetTwapPrice = vi.fn();
25
+ vi.mock('../safeguards.js', () => ({
26
+ recordPriceSnapshot: (...args) => mockRecordPriceSnapshot(...args),
27
+ getTwapPrice: () => mockGetTwapPrice(),
28
+ }));
29
+ import { configurePriceOracle, fetchRvuiPrice, getPriceOracleConfig, isPriceOracleRunning, recordPriceFromJupiter, rvuiToUsd, startPriceOracle, stopPriceOracle, usdToRvui, } from '../oracle.js';
30
+ describe('PriceOracle config', () => {
31
+ afterEach(() => {
32
+ configurePriceOracle({ apiKey: '' });
33
+ });
34
+ it('returns default config', () => {
35
+ const config = getPriceOracleConfig();
36
+ expect(config.apiUrl).toBe('https://api.jup.ag/price/v3');
37
+ expect(config.pollIntervalMs).toBe(60_000);
38
+ expect(config.requestTimeoutMs).toBe(10_000);
39
+ expect(config.maxConsecutiveFailures).toBe(10);
40
+ });
41
+ it('overrides config', () => {
42
+ configurePriceOracle({ pollIntervalMs: 5_000, maxConsecutiveFailures: 3 });
43
+ const config = getPriceOracleConfig();
44
+ expect(config.pollIntervalMs).toBe(5_000);
45
+ expect(config.maxConsecutiveFailures).toBe(3);
46
+ });
47
+ it('reads API key from env', () => {
48
+ process.env.JUPITER_API_KEY = 'test-key-123';
49
+ const config = getPriceOracleConfig();
50
+ expect(config.apiKey).toBe('test-key-123');
51
+ delete process.env.JUPITER_API_KEY;
52
+ });
53
+ });
54
+ describe('fetchRvuiPrice', () => {
55
+ const originalFetch = globalThis.fetch;
56
+ beforeEach(() => {
57
+ delete process.env.JUPITER_API_KEY;
58
+ });
59
+ afterEach(() => {
60
+ globalThis.fetch = originalFetch;
61
+ configurePriceOracle({ apiKey: '' });
62
+ });
63
+ it('returns null when API key is not configured', async () => {
64
+ const result = await fetchRvuiPrice();
65
+ expect(result).toBeNull();
66
+ });
67
+ it('returns price data on success', async () => {
68
+ configurePriceOracle({ apiKey: 'test-key' });
69
+ const mintAddress = '4Ysb1gkz21FD2B9P8P5Pm8bHh4CAMKYU1L528e1MigPo';
70
+ globalThis.fetch = vi.fn().mockResolvedValue({
71
+ ok: true,
72
+ status: 200,
73
+ json: () => Promise.resolve({
74
+ [mintAddress]: {
75
+ createdAt: '2026-01-01T00:00:00Z',
76
+ liquidity: 50_000,
77
+ usdPrice: 0.0042,
78
+ blockId: 123456,
79
+ decimals: 6,
80
+ priceChange24h: -2.5,
81
+ },
82
+ }),
83
+ });
84
+ const result = await fetchRvuiPrice();
85
+ expect(result).toEqual({
86
+ priceUsd: 0.0042,
87
+ liquidity: 50_000,
88
+ blockId: 123456,
89
+ priceChange24h: -2.5,
90
+ });
91
+ expect(globalThis.fetch).toHaveBeenCalledWith(expect.stringContaining(mintAddress), expect.objectContaining({
92
+ headers: { 'x-api-key': 'test-key' },
93
+ }));
94
+ });
95
+ it('returns null on 429 rate limit', async () => {
96
+ configurePriceOracle({ apiKey: 'test-key' });
97
+ globalThis.fetch = vi.fn().mockResolvedValue({ ok: false, status: 429 });
98
+ const result = await fetchRvuiPrice();
99
+ expect(result).toBeNull();
100
+ });
101
+ it('returns null on 401 unauthorized', async () => {
102
+ configurePriceOracle({ apiKey: 'test-key' });
103
+ globalThis.fetch = vi.fn().mockResolvedValue({ ok: false, status: 401 });
104
+ const result = await fetchRvuiPrice();
105
+ expect(result).toBeNull();
106
+ });
107
+ it('returns null on other HTTP errors', async () => {
108
+ configurePriceOracle({ apiKey: 'test-key' });
109
+ globalThis.fetch = vi.fn().mockResolvedValue({ ok: false, status: 500 });
110
+ const result = await fetchRvuiPrice();
111
+ expect(result).toBeNull();
112
+ });
113
+ it('returns null when token has no price data', async () => {
114
+ configurePriceOracle({ apiKey: 'test-key' });
115
+ globalThis.fetch = vi.fn().mockResolvedValue({
116
+ ok: true,
117
+ status: 200,
118
+ json: () => Promise.resolve({}),
119
+ });
120
+ const result = await fetchRvuiPrice();
121
+ expect(result).toBeNull();
122
+ });
123
+ it('returns null on network error', async () => {
124
+ configurePriceOracle({ apiKey: 'test-key' });
125
+ globalThis.fetch = vi.fn().mockRejectedValue(new Error('Network error'));
126
+ const result = await fetchRvuiPrice();
127
+ expect(result).toBeNull();
128
+ });
129
+ it('returns null when mint address is empty', async () => {
130
+ configurePriceOracle({ apiKey: 'test-key' });
131
+ mockGetRevealCoinConfig.mockReturnValueOnce({ network: 'mainnet-beta' });
132
+ const result = await fetchRvuiPrice();
133
+ expect(result).toBeNull();
134
+ });
135
+ });
136
+ describe('recordPriceFromJupiter', () => {
137
+ const originalFetch = globalThis.fetch;
138
+ afterEach(() => {
139
+ globalThis.fetch = originalFetch;
140
+ configurePriceOracle({ apiKey: '' });
141
+ mockRecordPriceSnapshot.mockClear();
142
+ });
143
+ it('records snapshot and returns price on success', async () => {
144
+ configurePriceOracle({ apiKey: 'test-key' });
145
+ const mintAddress = '4Ysb1gkz21FD2B9P8P5Pm8bHh4CAMKYU1L528e1MigPo';
146
+ globalThis.fetch = vi.fn().mockResolvedValue({
147
+ ok: true,
148
+ status: 200,
149
+ json: () => Promise.resolve({
150
+ [mintAddress]: {
151
+ createdAt: '2026-01-01T00:00:00Z',
152
+ liquidity: 50_000,
153
+ usdPrice: 0.0042,
154
+ blockId: 123456,
155
+ decimals: 6,
156
+ priceChange24h: null,
157
+ },
158
+ }),
159
+ });
160
+ const result = await recordPriceFromJupiter();
161
+ expect(result).toBe(0.0042);
162
+ expect(mockRecordPriceSnapshot).toHaveBeenCalledWith(0.0042, 'jupiter-v3');
163
+ });
164
+ it('returns null when fetch fails', async () => {
165
+ const result = await recordPriceFromJupiter();
166
+ expect(result).toBeNull();
167
+ expect(mockRecordPriceSnapshot).not.toHaveBeenCalled();
168
+ });
169
+ });
170
+ describe('rvuiToUsd', () => {
171
+ afterEach(() => {
172
+ mockGetTwapPrice.mockClear();
173
+ });
174
+ it('converts RVUI to USD using TWAP', async () => {
175
+ mockGetTwapPrice.mockResolvedValue(0.005);
176
+ const result = await rvuiToUsd(1000);
177
+ expect(result).toBe(5);
178
+ });
179
+ it('returns null when TWAP is unavailable', async () => {
180
+ mockGetTwapPrice.mockResolvedValue(null);
181
+ const result = await rvuiToUsd(1000);
182
+ expect(result).toBeNull();
183
+ });
184
+ });
185
+ describe('usdToRvui', () => {
186
+ afterEach(() => {
187
+ mockGetTwapPrice.mockClear();
188
+ });
189
+ it('converts USD to RVUI using TWAP', async () => {
190
+ mockGetTwapPrice.mockResolvedValue(0.005);
191
+ const result = await usdToRvui(5);
192
+ expect(result).toBe(1000);
193
+ });
194
+ it('returns null when TWAP is unavailable', async () => {
195
+ mockGetTwapPrice.mockResolvedValue(null);
196
+ const result = await usdToRvui(5);
197
+ expect(result).toBeNull();
198
+ });
199
+ it('returns null when TWAP is zero', async () => {
200
+ mockGetTwapPrice.mockResolvedValue(0);
201
+ const result = await usdToRvui(5);
202
+ expect(result).toBeNull();
203
+ });
204
+ });
205
+ describe('polling lifecycle', () => {
206
+ afterEach(() => {
207
+ stopPriceOracle();
208
+ configurePriceOracle({ apiKey: '' });
209
+ });
210
+ it('reports not running initially', () => {
211
+ expect(isPriceOracleRunning()).toBe(false);
212
+ });
213
+ it('does not start without API key', () => {
214
+ startPriceOracle();
215
+ expect(isPriceOracleRunning()).toBe(false);
216
+ });
217
+ it('starts and stops with API key', () => {
218
+ configurePriceOracle({ apiKey: 'test-key', pollIntervalMs: 60_000 });
219
+ startPriceOracle();
220
+ expect(isPriceOracleRunning()).toBe(true);
221
+ stopPriceOracle();
222
+ expect(isPriceOracleRunning()).toBe(false);
223
+ });
224
+ it('prevents duplicate starts', () => {
225
+ configurePriceOracle({ apiKey: 'test-key', pollIntervalMs: 60_000 });
226
+ startPriceOracle();
227
+ startPriceOracle(); // should warn, not create second timer
228
+ expect(isPriceOracleRunning()).toBe(true);
229
+ stopPriceOracle();
230
+ expect(isPriceOracleRunning()).toBe(false);
231
+ });
232
+ it('stop is idempotent', () => {
233
+ stopPriceOracle();
234
+ stopPriceOracle();
235
+ expect(isPriceOracleRunning()).toBe(false);
236
+ });
237
+ });
238
+ //# sourceMappingURL=oracle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.test.js","sourceRoot":"","sources":["../../../src/revealcoin/__tests__/oracle.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=safeguards.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeguards.test.d.ts","sourceRoot":"","sources":["../../../src/revealcoin/__tests__/safeguards.test.ts"],"names":[],"mappings":""}