@sonarwatch/portfolio-plugins 0.8.111 → 0.8.113

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 (63) hide show
  1. package/CHANGELOG.md +10 -2
  2. package/package.json +3 -2
  3. package/src/index.js +4 -0
  4. package/src/index.js.map +1 -1
  5. package/src/plugins/jupiter/constants.d.ts +3 -0
  6. package/src/plugins/jupiter/constants.js +4 -1
  7. package/src/plugins/jupiter/constants.js.map +1 -1
  8. package/src/plugins/jupiter/custodiesJob.d.ts +3 -0
  9. package/src/plugins/jupiter/custodiesJob.js +34 -0
  10. package/src/plugins/jupiter/custodiesJob.js.map +1 -0
  11. package/src/plugins/jupiter/filters.d.ts +2 -0
  12. package/src/plugins/jupiter/filters.js +14 -0
  13. package/src/plugins/jupiter/filters.js.map +1 -0
  14. package/src/plugins/jupiter/index.js +4 -2
  15. package/src/plugins/jupiter/index.js.map +1 -1
  16. package/src/plugins/jupiter/perpetualFetcher.d.ts +3 -0
  17. package/src/plugins/jupiter/perpetualFetcher.js +153 -0
  18. package/src/plugins/jupiter/perpetualFetcher.js.map +1 -0
  19. package/src/plugins/jupiter/structs.d.ts +24 -0
  20. package/src/plugins/jupiter/structs.js +25 -1
  21. package/src/plugins/jupiter/structs.js.map +1 -1
  22. package/src/plugins/jupiter/types.d.ts +62 -0
  23. package/src/plugins/jupiter/types.js +9 -0
  24. package/src/plugins/jupiter/types.js.map +1 -0
  25. package/src/plugins/port/constants.d.ts +6 -0
  26. package/src/plugins/port/constants.js +16 -0
  27. package/src/plugins/port/constants.js.map +1 -0
  28. package/src/plugins/port/filters.d.ts +2 -0
  29. package/src/plugins/port/filters.js +15 -0
  30. package/src/plugins/port/filters.js.map +1 -0
  31. package/src/plugins/port/helpers.d.ts +8 -0
  32. package/src/plugins/port/helpers.js +27 -0
  33. package/src/plugins/port/helpers.js.map +1 -0
  34. package/src/plugins/port/index.d.ts +6 -0
  35. package/src/plugins/port/index.js +14 -0
  36. package/src/plugins/port/index.js.map +1 -0
  37. package/src/plugins/port/obligationsFetcher.d.ts +3 -0
  38. package/src/plugins/port/obligationsFetcher.js +156 -0
  39. package/src/plugins/port/obligationsFetcher.js.map +1 -0
  40. package/src/plugins/port/pTokensJob.d.ts +3 -0
  41. package/src/plugins/port/pTokensJob.js +73 -0
  42. package/src/plugins/port/pTokensJob.js.map +1 -0
  43. package/src/plugins/port/reservesJob.d.ts +3 -0
  44. package/src/plugins/port/reservesJob.js +60 -0
  45. package/src/plugins/port/reservesJob.js.map +1 -0
  46. package/src/plugins/port/structs.d.ts +82 -0
  47. package/src/plugins/port/structs.js +75 -0
  48. package/src/plugins/port/structs.js.map +1 -0
  49. package/src/plugins/port/types.d.ts +71 -0
  50. package/src/plugins/port/types.js +3 -0
  51. package/src/plugins/port/types.js.map +1 -0
  52. package/src/plugins/solend/structs.d.ts +2 -2
  53. package/src/plugins/solend/structs.js +2 -2
  54. package/src/plugins/solend/structs.js.map +1 -1
  55. package/src/utils/solana/pyth/helpers.d.ts +13 -0
  56. package/src/utils/solana/pyth/helpers.js +239 -0
  57. package/src/utils/solana/pyth/helpers.js.map +1 -0
  58. package/src/utils/solana/pyth/readBig.d.ts +4 -0
  59. package/src/utils/solana/pyth/readBig.js +61 -0
  60. package/src/utils/solana/pyth/readBig.js.map +1 -0
  61. package/src/utils/solana/pyth/structs.d.ts +97 -0
  62. package/src/utils/solana/pyth/structs.js +35 -0
  63. package/src/utils/solana/pyth/structs.js.map +1 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.reserveAccountStruct = exports.lastUpdateStruct = exports.liquidityStruct = exports.collateralStruct = exports.reserveConfigStruct = exports.feesStruct = void 0;
3
+ exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.reserveStruct = exports.lastUpdateStruct = exports.liquidityStruct = exports.collateralStruct = exports.reserveConfigStruct = exports.feesStruct = void 0;
4
4
  const beet_1 = require("@metaplex-foundation/beet");
5
5
  const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
6
  const solana_1 = require("../../utils/solana");
@@ -42,7 +42,7 @@ exports.lastUpdateStruct = new beet_1.BeetStruct([
42
42
  ['slot', solana_1.u64],
43
43
  ['stale', beet_1.u8],
44
44
  ], (args) => args);
45
- exports.reserveAccountStruct = new beet_1.BeetStruct([
45
+ exports.reserveStruct = new beet_1.BeetStruct([
46
46
  ['version', beet_1.u8],
47
47
  ['lastUpdate', exports.lastUpdateStruct],
48
48
  ['lendingMarket', beet_solana_1.publicKey],
@@ -1 +1 @@
1
- {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/structs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/structs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import { PublicKey, AccountInfo } from '@solana/web3.js';
3
+ import { Base, MappingData, PermissionData, PriceData } from './structs';
4
+ export declare const Magic = 2712847316;
5
+ export declare const Version2 = 2;
6
+ export declare const Version = 2;
7
+ /** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
8
+ export declare const MAX_SLOT_DIFFERENCE = 25;
9
+ export declare function parseBaseData(data: Buffer): Base | undefined;
10
+ export declare const parseMappingData: (data: Buffer) => MappingData;
11
+ export declare const parsePriceData: (data: Buffer, currentSlot?: number) => PriceData;
12
+ export declare const parsePermissionData: (data: Buffer) => PermissionData;
13
+ export declare function getPythPricesDatasMap(pubkeys: PublicKey[], accounts: (AccountInfo<Buffer> | null)[]): Map<string, PriceData>;
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPythPricesDatasMap = exports.parsePermissionData = exports.parsePriceData = exports.parseMappingData = exports.parseBaseData = exports.MAX_SLOT_DIFFERENCE = exports.Version = exports.Version2 = exports.Magic = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const structs_1 = require("./structs");
6
+ const readBig_1 = require("./readBig");
7
+ exports.Magic = 0xa1b2c3d4;
8
+ exports.Version2 = 2;
9
+ exports.Version = exports.Version2;
10
+ /** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
11
+ exports.MAX_SLOT_DIFFERENCE = 25;
12
+ const empty32Buffer = Buffer.alloc(32);
13
+ const PKorNull = (data) => data.equals(empty32Buffer) ? null : new web3_js_1.PublicKey(data);
14
+ function parseBaseData(data) {
15
+ // data is too short to have the magic number.
16
+ if (data.byteLength < 4) {
17
+ return undefined;
18
+ }
19
+ const magic = data.readUInt32LE(0);
20
+ if (magic === exports.Magic) {
21
+ // program version
22
+ const version = data.readUInt32LE(4);
23
+ // account type
24
+ const type = data.readUInt32LE(8);
25
+ // account used size
26
+ const size = data.readUInt32LE(12);
27
+ return { magic, version, type, size };
28
+ }
29
+ return undefined;
30
+ }
31
+ exports.parseBaseData = parseBaseData;
32
+ const parseMappingData = (data) => {
33
+ // pyth magic number
34
+ const magic = data.readUInt32LE(0);
35
+ // program version
36
+ const version = data.readUInt32LE(4);
37
+ // account type
38
+ const type = data.readUInt32LE(8);
39
+ // account used size
40
+ const size = data.readUInt32LE(12);
41
+ // number of product accounts
42
+ const numProducts = data.readUInt32LE(16);
43
+ // unused
44
+ // const unused = accountInfo.data.readUInt32LE(20)
45
+ // next mapping account (if any)
46
+ const nextMappingAccount = PKorNull(data.slice(24, 56));
47
+ // read each symbol account
48
+ let offset = 56;
49
+ const productAccountKeys = [];
50
+ for (let i = 0; i < numProducts; i++) {
51
+ const productAccountBytes = data.slice(offset, offset + 32);
52
+ const productAccountKey = new web3_js_1.PublicKey(productAccountBytes);
53
+ offset += 32;
54
+ productAccountKeys.push(productAccountKey);
55
+ }
56
+ return {
57
+ magic,
58
+ version,
59
+ type,
60
+ size,
61
+ nextMappingAccount,
62
+ productAccountKeys,
63
+ };
64
+ };
65
+ exports.parseMappingData = parseMappingData;
66
+ const parsePriceInfo = (data, exponent) => {
67
+ // aggregate price
68
+ const priceComponent = (0, readBig_1.readBigInt64LE)(data, 0);
69
+ const price = Number(priceComponent) * Math.pow(10, exponent);
70
+ // aggregate confidence
71
+ const confidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 8);
72
+ const confidence = Number(confidenceComponent) * Math.pow(10, exponent);
73
+ // aggregate status
74
+ const status = data.readUInt32LE(16);
75
+ // aggregate corporate action
76
+ const corporateAction = data.readUInt32LE(20);
77
+ // aggregate publish slot. It is converted to number to be consistent with Solana's library interface (Slot there is number)
78
+ const publishSlot = Number((0, readBig_1.readBigUInt64LE)(data, 24));
79
+ return {
80
+ priceComponent,
81
+ price,
82
+ confidenceComponent,
83
+ confidence,
84
+ status,
85
+ corporateAction,
86
+ publishSlot,
87
+ };
88
+ };
89
+ const parseEma = (data, exponent) => {
90
+ // current value of ema
91
+ const valueComponent = (0, readBig_1.readBigInt64LE)(data, 0);
92
+ const value = Number(valueComponent) * Math.pow(10, exponent);
93
+ // numerator state for next update
94
+ const numerator = (0, readBig_1.readBigInt64LE)(data, 8);
95
+ // denominator state for next update
96
+ const denominator = (0, readBig_1.readBigInt64LE)(data, 16);
97
+ return { valueComponent, value, numerator, denominator };
98
+ };
99
+ // Provide currentSlot when available to allow status to consider the case when price goes stale. It is optional because
100
+ // it requires an extra request to get it when it is not available which is not always efficient.
101
+ const parsePriceData = (data, currentSlot) => {
102
+ // pyth magic number
103
+ const magic = data.readUInt32LE(0);
104
+ // program version
105
+ const version = data.readUInt32LE(4);
106
+ // account type
107
+ const type = data.readUInt32LE(8);
108
+ // price account size
109
+ const size = data.readUInt32LE(12);
110
+ // price or calculation type
111
+ const priceType = data.readUInt32LE(16);
112
+ // price exponent
113
+ const exponent = data.readInt32LE(20);
114
+ // number of component prices
115
+ const numComponentPrices = data.readUInt32LE(24);
116
+ // number of quoters that make up aggregate
117
+ const numQuoters = data.readUInt32LE(28);
118
+ // slot of last valid (not unknown) aggregate price
119
+ const lastSlot = (0, readBig_1.readBigUInt64LE)(data, 32);
120
+ // valid on-chain slot of aggregate price
121
+ const validSlot = (0, readBig_1.readBigUInt64LE)(data, 40);
122
+ // exponential moving average price
123
+ const emaPrice = parseEma(data.slice(48, 72), exponent);
124
+ // exponential moving average confidence interval
125
+ const emaConfidence = parseEma(data.slice(72, 96), exponent);
126
+ // timestamp of the current price
127
+ const timestamp = (0, readBig_1.readBigInt64LE)(data, 96);
128
+ // minimum number of publishers for status to be TRADING
129
+ const minPublishers = data.readUInt8(104);
130
+ // space for future derived values
131
+ const drv2 = data.readInt8(105);
132
+ // space for future derived values
133
+ const drv3 = data.readInt16LE(106);
134
+ // space for future derived values
135
+ const drv4 = data.readInt32LE(108);
136
+ // product id / reference account
137
+ const productAccountKey = new web3_js_1.PublicKey(data.slice(112, 144));
138
+ // next price account in list
139
+ const nextPriceAccountKey = PKorNull(data.slice(144, 176));
140
+ // valid slot of previous update
141
+ const previousSlot = (0, readBig_1.readBigUInt64LE)(data, 176);
142
+ // aggregate price of previous update
143
+ const previousPriceComponent = (0, readBig_1.readBigInt64LE)(data, 184);
144
+ const previousPrice = Number(previousPriceComponent) * Math.pow(10, exponent);
145
+ // confidence interval of previous update
146
+ const previousConfidenceComponent = (0, readBig_1.readBigUInt64LE)(data, 192);
147
+ const previousConfidence = Number(previousConfidenceComponent) * Math.pow(10, exponent);
148
+ // space for future derived values
149
+ const previousTimestamp = (0, readBig_1.readBigInt64LE)(data, 200);
150
+ const aggregate = parsePriceInfo(data.slice(208, 240), exponent);
151
+ let { status } = aggregate;
152
+ if (currentSlot && status === structs_1.PriceStatus.Trading) {
153
+ if (currentSlot - aggregate.publishSlot > exports.MAX_SLOT_DIFFERENCE) {
154
+ status = structs_1.PriceStatus.Unknown;
155
+ }
156
+ }
157
+ let price;
158
+ let confidence;
159
+ if (status === structs_1.PriceStatus.Trading) {
160
+ price = aggregate.price;
161
+ confidence = aggregate.confidence;
162
+ }
163
+ // price components - up to 32
164
+ const priceComponents = [];
165
+ let offset = 240;
166
+ while (priceComponents.length < numComponentPrices) {
167
+ const publisher = new web3_js_1.PublicKey(data.slice(offset, offset + 32));
168
+ offset += 32;
169
+ const componentAggregate = parsePriceInfo(data.slice(offset, offset + 32), exponent);
170
+ offset += 32;
171
+ const latest = parsePriceInfo(data.slice(offset, offset + 32), exponent);
172
+ offset += 32;
173
+ priceComponents.push({ publisher, aggregate: componentAggregate, latest });
174
+ }
175
+ return {
176
+ magic,
177
+ version,
178
+ type,
179
+ size,
180
+ priceType,
181
+ exponent,
182
+ numComponentPrices,
183
+ numQuoters,
184
+ lastSlot,
185
+ validSlot,
186
+ emaPrice,
187
+ emaConfidence,
188
+ timestamp,
189
+ minPublishers,
190
+ drv2,
191
+ drv3,
192
+ drv4,
193
+ productAccountKey,
194
+ nextPriceAccountKey,
195
+ previousSlot,
196
+ previousPriceComponent,
197
+ previousPrice,
198
+ previousConfidenceComponent,
199
+ previousConfidence,
200
+ previousTimestamp,
201
+ aggregate,
202
+ priceComponents,
203
+ price,
204
+ confidence,
205
+ status,
206
+ };
207
+ };
208
+ exports.parsePriceData = parsePriceData;
209
+ const parsePermissionData = (data) => {
210
+ // pyth magic number
211
+ const magic = data.readUInt32LE(0);
212
+ // program version
213
+ const version = data.readUInt32LE(4);
214
+ // account type
215
+ const type = data.readUInt32LE(8);
216
+ // price account size
217
+ const size = data.readUInt32LE(12);
218
+ const masterAuthority = new web3_js_1.PublicKey(data.slice(16, 48));
219
+ const dataCurationAuthority = new web3_js_1.PublicKey(data.slice(48, 80));
220
+ const securityAuthority = new web3_js_1.PublicKey(data.slice(80, 112));
221
+ return {
222
+ magic,
223
+ version,
224
+ type,
225
+ size,
226
+ masterAuthority,
227
+ dataCurationAuthority,
228
+ securityAuthority,
229
+ };
230
+ };
231
+ exports.parsePermissionData = parsePermissionData;
232
+ function getPythPricesDatasMap(pubkeys, accounts) {
233
+ const pricesDatas = accounts.map((account) => account ? (0, exports.parsePriceData)(account.data) : undefined);
234
+ const priceMap = new Map();
235
+ pricesDatas.forEach((prices, index) => prices ? priceMap.set(pubkeys[index].toString(), prices) : undefined);
236
+ return priceMap;
237
+ }
238
+ exports.getPythPricesDatasMap = getPythPricesDatasMap;
239
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="node" />
2
+ import { Buffer } from 'buffer';
3
+ export declare function readBigInt64LE(buffer: Buffer, offset?: number): bigint;
4
+ export declare function readBigUInt64LE(buffer: Buffer, offset?: number): bigint;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readBigUInt64LE = exports.readBigInt64LE = void 0;
4
+ // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L758
5
+ const ERR_BUFFER_OUT_OF_BOUNDS = () => new Error('Attempt to access memory outside buffer bounds');
6
+ // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L968
7
+ const ERR_INVALID_ARG_TYPE = (name, expected, actual) => new Error(`The "${name}" argument must be of type ${expected}. Received ${actual}`);
8
+ // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L1262
9
+ const ERR_OUT_OF_RANGE = (str, range, received) => new Error(`The value of "${str} is out of range. It must be ${range}. Received ${received}`);
10
+ // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/validators.js#L127-L130
11
+ function validateNumber(value, name) {
12
+ if (typeof value !== 'number')
13
+ throw ERR_INVALID_ARG_TYPE(name, 'number', value);
14
+ }
15
+ // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L68-L80
16
+ function boundsError(value, length) {
17
+ if (Math.floor(value) !== value) {
18
+ validateNumber(value, 'offset');
19
+ throw ERR_OUT_OF_RANGE('offset', 'an integer', value);
20
+ }
21
+ if (length < 0)
22
+ throw ERR_BUFFER_OUT_OF_BOUNDS();
23
+ throw ERR_OUT_OF_RANGE('offset', `>= 0 and <= ${length}`, value);
24
+ }
25
+ // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L129-L145
26
+ function readBigInt64LE(buffer, offset = 0) {
27
+ validateNumber(offset, 'offset');
28
+ const first = buffer[offset];
29
+ const last = buffer[offset + 7];
30
+ if (first === undefined || last === undefined)
31
+ boundsError(offset, buffer.length - 8);
32
+ const val = buffer[offset + 4] +
33
+ buffer[offset + 5] * Math.pow(2, 8) +
34
+ buffer[offset + 6] * Math.pow(2, 16) +
35
+ (last << 24); // Overflow
36
+ return ((BigInt(val) << BigInt(32)) +
37
+ BigInt(first +
38
+ buffer[++offset] * Math.pow(2, 8) +
39
+ buffer[++offset] * Math.pow(2, 16) +
40
+ buffer[++offset] * Math.pow(2, 24)));
41
+ }
42
+ exports.readBigInt64LE = readBigInt64LE;
43
+ // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L89-L107
44
+ function readBigUInt64LE(buffer, offset = 0) {
45
+ validateNumber(offset, 'offset');
46
+ const first = buffer[offset];
47
+ const last = buffer[offset + 7];
48
+ if (first === undefined || last === undefined)
49
+ boundsError(offset, buffer.length - 8);
50
+ const lo = first +
51
+ buffer[++offset] * Math.pow(2, 8) +
52
+ buffer[++offset] * Math.pow(2, 16) +
53
+ buffer[++offset] * Math.pow(2, 24);
54
+ const hi = buffer[++offset] +
55
+ buffer[++offset] * Math.pow(2, 8) +
56
+ buffer[++offset] * Math.pow(2, 16) +
57
+ last * Math.pow(2, 24);
58
+ return BigInt(lo) + (BigInt(hi) << BigInt(32));
59
+ }
60
+ exports.readBigUInt64LE = readBigUInt64LE;
61
+ //# sourceMappingURL=readBig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readBig.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/readBig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ export declare enum PriceStatus {
3
+ Unknown = 0,
4
+ Trading = 1,
5
+ Halted = 2,
6
+ Auction = 3,
7
+ Ignored = 4
8
+ }
9
+ export declare enum CorpAction {
10
+ NoCorpAct = 0
11
+ }
12
+ export declare enum PriceType {
13
+ Unknown = 0,
14
+ Price = 1
15
+ }
16
+ export declare enum DeriveType {
17
+ Unknown = 0,
18
+ Volatility = 1
19
+ }
20
+ export declare enum AccountType {
21
+ Unknown = 0,
22
+ Mapping = 1,
23
+ Product = 2,
24
+ Price = 3,
25
+ Test = 4,
26
+ Permission = 5
27
+ }
28
+ export type Base = {
29
+ magic: number;
30
+ version: number;
31
+ type: AccountType;
32
+ size: number;
33
+ };
34
+ export type MappingData = Base & {
35
+ nextMappingAccount: PublicKey | null;
36
+ productAccountKeys: PublicKey[];
37
+ };
38
+ export type Product = {
39
+ [index: string]: string;
40
+ };
41
+ export type ProductData = Base & {
42
+ priceAccountKey: PublicKey | null;
43
+ product: Product;
44
+ };
45
+ export type Price = {
46
+ priceComponent: bigint;
47
+ price: number;
48
+ confidenceComponent: bigint;
49
+ confidence: number;
50
+ status: PriceStatus;
51
+ corporateAction: CorpAction;
52
+ publishSlot: number;
53
+ };
54
+ export type PriceComponent = {
55
+ publisher: PublicKey;
56
+ aggregate: Price;
57
+ latest: Price;
58
+ };
59
+ export type Ema = {
60
+ valueComponent: bigint;
61
+ value: number;
62
+ numerator: bigint;
63
+ denominator: bigint;
64
+ };
65
+ export type PriceData = Base & {
66
+ priceType: PriceType;
67
+ exponent: number;
68
+ numComponentPrices: number;
69
+ numQuoters: number;
70
+ lastSlot: bigint;
71
+ validSlot: bigint;
72
+ emaPrice: Ema;
73
+ emaConfidence: Ema;
74
+ timestamp: bigint;
75
+ minPublishers: number;
76
+ drv2: number;
77
+ drv3: number;
78
+ drv4: number;
79
+ productAccountKey: PublicKey;
80
+ nextPriceAccountKey: PublicKey | null;
81
+ previousSlot: bigint;
82
+ previousPriceComponent: bigint;
83
+ previousPrice: number;
84
+ previousConfidenceComponent: bigint;
85
+ previousConfidence: number;
86
+ previousTimestamp: bigint;
87
+ priceComponents: PriceComponent[];
88
+ aggregate: Price;
89
+ price: number | undefined;
90
+ confidence: number | undefined;
91
+ status: PriceStatus;
92
+ };
93
+ export type PermissionData = Base & {
94
+ masterAuthority: PublicKey;
95
+ dataCurationAuthority: PublicKey;
96
+ securityAuthority: PublicKey;
97
+ };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccountType = exports.DeriveType = exports.PriceType = exports.CorpAction = exports.PriceStatus = void 0;
4
+ var PriceStatus;
5
+ (function (PriceStatus) {
6
+ PriceStatus[PriceStatus["Unknown"] = 0] = "Unknown";
7
+ PriceStatus[PriceStatus["Trading"] = 1] = "Trading";
8
+ PriceStatus[PriceStatus["Halted"] = 2] = "Halted";
9
+ PriceStatus[PriceStatus["Auction"] = 3] = "Auction";
10
+ PriceStatus[PriceStatus["Ignored"] = 4] = "Ignored";
11
+ })(PriceStatus || (exports.PriceStatus = PriceStatus = {}));
12
+ var CorpAction;
13
+ (function (CorpAction) {
14
+ CorpAction[CorpAction["NoCorpAct"] = 0] = "NoCorpAct";
15
+ })(CorpAction || (exports.CorpAction = CorpAction = {}));
16
+ var PriceType;
17
+ (function (PriceType) {
18
+ PriceType[PriceType["Unknown"] = 0] = "Unknown";
19
+ PriceType[PriceType["Price"] = 1] = "Price";
20
+ })(PriceType || (exports.PriceType = PriceType = {}));
21
+ var DeriveType;
22
+ (function (DeriveType) {
23
+ DeriveType[DeriveType["Unknown"] = 0] = "Unknown";
24
+ DeriveType[DeriveType["Volatility"] = 1] = "Volatility";
25
+ })(DeriveType || (exports.DeriveType = DeriveType = {}));
26
+ var AccountType;
27
+ (function (AccountType) {
28
+ AccountType[AccountType["Unknown"] = 0] = "Unknown";
29
+ AccountType[AccountType["Mapping"] = 1] = "Mapping";
30
+ AccountType[AccountType["Product"] = 2] = "Product";
31
+ AccountType[AccountType["Price"] = 3] = "Price";
32
+ AccountType[AccountType["Test"] = 4] = "Test";
33
+ AccountType[AccountType["Permission"] = 5] = "Permission";
34
+ })(AccountType || (exports.AccountType = AccountType = {}));
35
+ //# sourceMappingURL=structs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/utils/solana/pyth/structs.ts"],"names":[],"mappings":";;;AAEA,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,mDAAO,CAAA;IACP,iDAAM,CAAA;IACN,mDAAO,CAAA;IACP,mDAAO,CAAA;AACT,CAAC,EANW,WAAW,2BAAX,WAAW,QAMtB;AAED,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,qDAAS,CAAA;AACX,CAAC,EAFW,UAAU,0BAAV,UAAU,QAErB;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,+CAAO,CAAA;IACP,2CAAK,CAAA;AACP,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,iDAAO,CAAA;IACP,uDAAU,CAAA;AACZ,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,mDAAO,CAAA;IACP,mDAAO,CAAA;IACP,+CAAK,CAAA;IACL,6CAAI,CAAA;IACJ,yDAAU,CAAA;AACZ,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB"}