@chainstream-io/sdk 0.2.10 → 0.2.12
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/dist/{chainstream-DLKhKJTp.d.cts → chainstream-BY9CsB3h.d.cts} +113 -5
- package/dist/{chainstream-DLKhKJTp.d.ts → chainstream-BY9CsB3h.d.ts} +113 -5
- package/dist/chainstream.cjs +173 -120
- package/dist/chainstream.cjs.map +1 -1
- package/dist/chainstream.d.cts +1 -1
- package/dist/chainstream.d.ts +1 -1
- package/dist/chainstream.mjs +173 -120
- package/dist/chainstream.mjs.map +1 -1
- package/dist/index.cjs +173 -120
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +173 -120
- package/dist/index.mjs.map +1 -1
- package/dist/stream/index.cjs +171 -118
- package/dist/stream/index.cjs.map +1 -1
- package/dist/stream/index.d.cts +2 -1
- package/dist/stream/index.d.ts +2 -1
- package/dist/stream/index.mjs +171 -118
- package/dist/stream/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/chainstream.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as ChainStreamClient, y as ChainStreamClientOptions, z as ChainStreamRequestContext,
|
|
1
|
+
export { C as ChainStreamClient, y as ChainStreamClientOptions, z as ChainStreamRequestContext, ha as PostOptions, T as TokenProvider } from './chainstream-BY9CsB3h.cjs';
|
|
2
2
|
import 'axios';
|
package/dist/chainstream.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as ChainStreamClient, y as ChainStreamClientOptions, z as ChainStreamRequestContext,
|
|
1
|
+
export { C as ChainStreamClient, y as ChainStreamClientOptions, z as ChainStreamRequestContext, ha as PostOptions, T as TokenProvider } from './chainstream-BY9CsB3h.js';
|
|
2
2
|
import 'axios';
|
package/dist/chainstream.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import axiosRetry, { exponentialDelay } from "axios-retry";
|
|
|
15
15
|
var axiosInstance;
|
|
16
16
|
var currentOptions = void 0;
|
|
17
17
|
var configure = (options) => {
|
|
18
|
-
const baseURL = options.basePath || "https://api
|
|
18
|
+
const baseURL = options.basePath || "https://api.chainstream.io";
|
|
19
19
|
currentOptions = {
|
|
20
20
|
...options,
|
|
21
21
|
basePath: baseURL
|
|
@@ -239,12 +239,35 @@ var CEL_FIELD_MAPPINGS = {
|
|
|
239
239
|
balanceTagRatRatio: "btrr",
|
|
240
240
|
timestamp: "ts"
|
|
241
241
|
},
|
|
242
|
-
// New token subscription fields
|
|
242
|
+
// New token subscription fields (dex-new-token, supports CEL filter)
|
|
243
243
|
subscribeNewToken: {
|
|
244
244
|
tokenAddress: "a",
|
|
245
245
|
name: "n",
|
|
246
246
|
symbol: "s",
|
|
247
|
-
|
|
247
|
+
decimals: "dec",
|
|
248
|
+
imageUrl: "iu",
|
|
249
|
+
description: "de",
|
|
250
|
+
createdAtMs: "cts",
|
|
251
|
+
coingeckoCoinId: "cgi",
|
|
252
|
+
"socialMedia.twitter": "sm.tw",
|
|
253
|
+
"socialMedia.telegram": "sm.tg",
|
|
254
|
+
"socialMedia.website": "sm.w",
|
|
255
|
+
"socialMedia.tiktok": "sm.tt",
|
|
256
|
+
"socialMedia.discord": "sm.dc",
|
|
257
|
+
"socialMedia.facebook": "sm.fb",
|
|
258
|
+
"socialMedia.github": "sm.gh",
|
|
259
|
+
"socialMedia.instagram": "sm.ig",
|
|
260
|
+
"socialMedia.linkedin": "sm.li",
|
|
261
|
+
"socialMedia.medium": "sm.md",
|
|
262
|
+
"socialMedia.reddit": "sm.rd",
|
|
263
|
+
"socialMedia.youtube": "sm.yt",
|
|
264
|
+
"socialMedia.bitbucket": "sm.bb",
|
|
265
|
+
"launchFrom.programAddress": "lf.pa",
|
|
266
|
+
"launchFrom.protocolFamily": "lf.pf",
|
|
267
|
+
"launchFrom.protocolName": "lf.pn",
|
|
268
|
+
"migratedTo.programAddress": "mt.pa",
|
|
269
|
+
"migratedTo.protocolFamily": "mt.pf",
|
|
270
|
+
"migratedTo.protocolName": "mt.pn"
|
|
248
271
|
},
|
|
249
272
|
// Token supply subscription fields
|
|
250
273
|
subscribeTokenSupply: {
|
|
@@ -267,15 +290,65 @@ var CEL_FIELD_MAPPINGS = {
|
|
|
267
290
|
value: "v",
|
|
268
291
|
timestamp: "ts"
|
|
269
292
|
},
|
|
270
|
-
// New token metadata subscription fields
|
|
293
|
+
// New token metadata subscription fields (dex-new-tokens-metadata)
|
|
271
294
|
subscribeNewTokensMetadata: {
|
|
272
295
|
tokenAddress: "a",
|
|
273
296
|
name: "n",
|
|
297
|
+
decimals: "dec",
|
|
274
298
|
symbol: "s",
|
|
275
299
|
imageUrl: "iu",
|
|
276
300
|
description: "de",
|
|
277
|
-
|
|
278
|
-
|
|
301
|
+
createdAtMs: "cts",
|
|
302
|
+
coingeckoCoinId: "cgi",
|
|
303
|
+
"socialMedia.twitter": "sm.tw",
|
|
304
|
+
"socialMedia.telegram": "sm.tg",
|
|
305
|
+
"socialMedia.website": "sm.w",
|
|
306
|
+
"socialMedia.tiktok": "sm.tt",
|
|
307
|
+
"socialMedia.discord": "sm.dc",
|
|
308
|
+
"socialMedia.facebook": "sm.fb",
|
|
309
|
+
"socialMedia.github": "sm.gh",
|
|
310
|
+
"socialMedia.instagram": "sm.ig",
|
|
311
|
+
"socialMedia.linkedin": "sm.li",
|
|
312
|
+
"socialMedia.medium": "sm.md",
|
|
313
|
+
"socialMedia.reddit": "sm.rd",
|
|
314
|
+
"socialMedia.youtube": "sm.yt",
|
|
315
|
+
"socialMedia.bitbucket": "sm.bb",
|
|
316
|
+
"launchFrom.programAddress": "lf.pa",
|
|
317
|
+
"launchFrom.protocolFamily": "lf.pf",
|
|
318
|
+
"launchFrom.protocolName": "lf.pn",
|
|
319
|
+
"migratedTo.programAddress": "mt.pa",
|
|
320
|
+
"migratedTo.protocolFamily": "mt.pf",
|
|
321
|
+
"migratedTo.protocolName": "mt.pn"
|
|
322
|
+
},
|
|
323
|
+
// New tokens list subscription fields (dex-new-tokens)
|
|
324
|
+
subscribeNewTokens: {
|
|
325
|
+
tokenAddress: "a",
|
|
326
|
+
name: "n",
|
|
327
|
+
decimals: "dec",
|
|
328
|
+
symbol: "s",
|
|
329
|
+
imageUrl: "iu",
|
|
330
|
+
description: "de",
|
|
331
|
+
createdAtMs: "cts",
|
|
332
|
+
coingeckoCoinId: "cgi",
|
|
333
|
+
"socialMedia.twitter": "sm.tw",
|
|
334
|
+
"socialMedia.telegram": "sm.tg",
|
|
335
|
+
"socialMedia.website": "sm.w",
|
|
336
|
+
"socialMedia.tiktok": "sm.tt",
|
|
337
|
+
"socialMedia.discord": "sm.dc",
|
|
338
|
+
"socialMedia.facebook": "sm.fb",
|
|
339
|
+
"socialMedia.github": "sm.gh",
|
|
340
|
+
"socialMedia.instagram": "sm.ig",
|
|
341
|
+
"socialMedia.linkedin": "sm.li",
|
|
342
|
+
"socialMedia.medium": "sm.md",
|
|
343
|
+
"socialMedia.reddit": "sm.rd",
|
|
344
|
+
"socialMedia.youtube": "sm.yt",
|
|
345
|
+
"socialMedia.bitbucket": "sm.bb",
|
|
346
|
+
"launchFrom.programAddress": "lf.pa",
|
|
347
|
+
"launchFrom.protocolFamily": "lf.pf",
|
|
348
|
+
"launchFrom.protocolName": "lf.pn",
|
|
349
|
+
"migratedTo.programAddress": "mt.pa",
|
|
350
|
+
"migratedTo.protocolFamily": "mt.pf",
|
|
351
|
+
"migratedTo.protocolName": "mt.pn"
|
|
279
352
|
},
|
|
280
353
|
// Token trades subscription fields
|
|
281
354
|
subscribeTokenTrades: {
|
|
@@ -351,12 +424,14 @@ function replaceFilterFields(filter, methodName) {
|
|
|
351
424
|
}
|
|
352
425
|
const fieldMappings = getFieldMappings(methodName);
|
|
353
426
|
let result = filter;
|
|
354
|
-
|
|
427
|
+
const sortedEntries = Object.entries(fieldMappings).sort(([a], [b]) => b.length - a.length);
|
|
428
|
+
for (const [longField, shortField] of sortedEntries) {
|
|
429
|
+
const escapedField = longField.replace(/\./g, "\\.");
|
|
355
430
|
const patterns = [
|
|
356
|
-
// Pattern 1: fieldName (
|
|
357
|
-
new RegExp(`\\
|
|
358
|
-
// Pattern 2:
|
|
359
|
-
new RegExp(`\\
|
|
431
|
+
// Pattern 1: meta.fieldName (with meta. prefix) — check first to avoid double meta.
|
|
432
|
+
new RegExp(`\\bmeta\\.${escapedField}\\b`, "g"),
|
|
433
|
+
// Pattern 2: fieldName (without meta. prefix)
|
|
434
|
+
new RegExp(`\\b${escapedField}\\b`, "g")
|
|
360
435
|
];
|
|
361
436
|
patterns.forEach((pattern) => {
|
|
362
437
|
result = result.replace(pattern, `meta.${shortField}`);
|
|
@@ -659,6 +734,57 @@ var StreamApi = class {
|
|
|
659
734
|
[`liquidityChangeRatio${suffix}`]: this.formatScientificNotation(data[`lpc${suffix}`])
|
|
660
735
|
};
|
|
661
736
|
}
|
|
737
|
+
/**
|
|
738
|
+
* Parse social media data from short field names
|
|
739
|
+
*/
|
|
740
|
+
parseSocialMedia(sm) {
|
|
741
|
+
if (!sm) return void 0;
|
|
742
|
+
return {
|
|
743
|
+
twitter: sm.tw,
|
|
744
|
+
telegram: sm.tg,
|
|
745
|
+
website: sm.w,
|
|
746
|
+
tiktok: sm.tt,
|
|
747
|
+
discord: sm.dc,
|
|
748
|
+
facebook: sm.fb,
|
|
749
|
+
github: sm.gh,
|
|
750
|
+
instagram: sm.ig,
|
|
751
|
+
linkedin: sm.li,
|
|
752
|
+
medium: sm.md,
|
|
753
|
+
reddit: sm.rd,
|
|
754
|
+
youtube: sm.yt,
|
|
755
|
+
bitbucket: sm.bb
|
|
756
|
+
};
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Parse DEX protocol data from short field names
|
|
760
|
+
*/
|
|
761
|
+
parseDexProtocol(lf) {
|
|
762
|
+
if (!lf) return void 0;
|
|
763
|
+
const result = {};
|
|
764
|
+
if (lf.pa) result.programAddress = lf.pa;
|
|
765
|
+
if (lf.pf) result.protocolFamily = lf.pf;
|
|
766
|
+
if (lf.pn) result.protocolName = lf.pn;
|
|
767
|
+
return result;
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* Parse a TokenMetadataTimeEvent from raw WebSocket data
|
|
771
|
+
*/
|
|
772
|
+
parseTokenMetadata(data) {
|
|
773
|
+
const result = {
|
|
774
|
+
tokenAddress: data.a
|
|
775
|
+
};
|
|
776
|
+
if (data.n != null) result.name = data.n;
|
|
777
|
+
if (data.dec != null) result.decimals = data.dec;
|
|
778
|
+
if (data.s != null) result.symbol = data.s;
|
|
779
|
+
if (data.iu != null) result.imageUrl = data.iu;
|
|
780
|
+
if (data.de != null) result.description = data.de;
|
|
781
|
+
if (data.sm) result.socialMedia = this.parseSocialMedia(data.sm);
|
|
782
|
+
if (data.cts != null) result.createdAtMs = data.cts;
|
|
783
|
+
if (data.cgi != null) result.coingeckoCoinId = data.cgi;
|
|
784
|
+
if (data.lf) result.launchFrom = this.parseDexProtocol(data.lf);
|
|
785
|
+
if (data.mt) result.migratedTo = this.parseDexProtocol(data.mt);
|
|
786
|
+
return result;
|
|
787
|
+
}
|
|
662
788
|
/**
|
|
663
789
|
* Subscribe to token trade statistics
|
|
664
790
|
* Channel: dex-token-stats:{chain}_{tokenAddress}
|
|
@@ -759,6 +885,10 @@ var StreamApi = class {
|
|
|
759
885
|
"subscribeTokenHolders"
|
|
760
886
|
);
|
|
761
887
|
}
|
|
888
|
+
/**
|
|
889
|
+
* Subscribe to new token events (single token per event, supports CEL filter)
|
|
890
|
+
* Channel: dex-new-token:{chain}
|
|
891
|
+
*/
|
|
762
892
|
subscribeNewToken({
|
|
763
893
|
chain,
|
|
764
894
|
callback,
|
|
@@ -774,28 +904,24 @@ var StreamApi = class {
|
|
|
774
904
|
symbol: data.s,
|
|
775
905
|
createdAtMs: data.cts
|
|
776
906
|
};
|
|
777
|
-
if (data.dec)
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
if (data.
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
result.launchFrom.programAddress = lf.pa;
|
|
785
|
-
}
|
|
786
|
-
if (lf.pf) {
|
|
787
|
-
result.launchFrom.protocolFamily = lf.pf;
|
|
788
|
-
}
|
|
789
|
-
if (lf.pn) {
|
|
790
|
-
result.launchFrom.protocolName = lf.pn;
|
|
791
|
-
}
|
|
792
|
-
}
|
|
907
|
+
if (data.dec != null) result.decimals = data.dec;
|
|
908
|
+
if (data.iu != null) result.imageUrl = data.iu;
|
|
909
|
+
if (data.de != null) result.description = data.de;
|
|
910
|
+
if (data.sm) result.socialMedia = this.parseSocialMedia(data.sm);
|
|
911
|
+
if (data.cgi != null) result.coingeckoCoinId = data.cgi;
|
|
912
|
+
if (data.lf) result.launchFrom = this.parseDexProtocol(data.lf);
|
|
913
|
+
if (data.mt) result.migratedTo = this.parseDexProtocol(data.mt);
|
|
793
914
|
callback(result);
|
|
794
915
|
},
|
|
795
916
|
filter,
|
|
796
917
|
"subscribeNewToken"
|
|
797
918
|
);
|
|
798
919
|
}
|
|
920
|
+
/**
|
|
921
|
+
* Subscribe to new tokens metadata (batch, aggregated every 1 second)
|
|
922
|
+
* Channel: dex-new-tokens-metadata:{chain}
|
|
923
|
+
* No CEL filter support
|
|
924
|
+
*/
|
|
799
925
|
subscribeNewTokensMetadata({
|
|
800
926
|
chain,
|
|
801
927
|
callback
|
|
@@ -803,35 +929,22 @@ var StreamApi = class {
|
|
|
803
929
|
const channel = `dex-new-tokens-metadata:${chain}`;
|
|
804
930
|
return this.subscribe(
|
|
805
931
|
channel,
|
|
806
|
-
(data) => callback(
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
facebook: sm.fb,
|
|
823
|
-
github: sm.gh,
|
|
824
|
-
instagram: sm.ig,
|
|
825
|
-
linkedin: sm.li,
|
|
826
|
-
medium: sm.md,
|
|
827
|
-
reddit: sm.rd,
|
|
828
|
-
youtube: sm.yt,
|
|
829
|
-
bitbucket: sm.bb
|
|
830
|
-
};
|
|
831
|
-
})(),
|
|
832
|
-
createdAtMs: it.cts
|
|
833
|
-
}))
|
|
834
|
-
)
|
|
932
|
+
(data) => callback(data.map((it) => this.parseTokenMetadata(it)))
|
|
933
|
+
);
|
|
934
|
+
}
|
|
935
|
+
/**
|
|
936
|
+
* Subscribe to new tokens list (batch from token-created-to-realtime-pipeline)
|
|
937
|
+
* Channel: dex-new-tokens:{chain}
|
|
938
|
+
* No CEL filter support
|
|
939
|
+
*/
|
|
940
|
+
subscribeNewTokens({
|
|
941
|
+
chain,
|
|
942
|
+
callback
|
|
943
|
+
}) {
|
|
944
|
+
const channel = `dex-new-tokens:${chain}`;
|
|
945
|
+
return this.subscribe(
|
|
946
|
+
channel,
|
|
947
|
+
(data) => callback(data.map((it) => this.parseTokenMetadata(it)))
|
|
835
948
|
);
|
|
836
949
|
}
|
|
837
950
|
subscribeTokenSupply({
|
|
@@ -980,73 +1093,13 @@ var StreamApi = class {
|
|
|
980
1093
|
result.metadata.createdAtMs = t.cts;
|
|
981
1094
|
}
|
|
982
1095
|
if (t.lf) {
|
|
983
|
-
|
|
984
|
-
result.metadata.launchFrom = {};
|
|
985
|
-
if (lf.pa) {
|
|
986
|
-
result.metadata.launchFrom.programAddress = lf.pa;
|
|
987
|
-
}
|
|
988
|
-
if (lf.pf) {
|
|
989
|
-
result.metadata.launchFrom.protocolFamily = lf.pf;
|
|
990
|
-
}
|
|
991
|
-
if (lf.pn) {
|
|
992
|
-
result.metadata.launchFrom.protocolName = lf.pn;
|
|
993
|
-
}
|
|
1096
|
+
result.metadata.launchFrom = this.parseDexProtocol(t.lf);
|
|
994
1097
|
}
|
|
995
1098
|
if (t.mt) {
|
|
996
|
-
|
|
997
|
-
result.metadata.migratedTo = {};
|
|
998
|
-
if (mt.pa) {
|
|
999
|
-
result.metadata.migratedTo.programAddress = mt.pa;
|
|
1000
|
-
}
|
|
1001
|
-
if (mt.pf) {
|
|
1002
|
-
result.metadata.migratedTo.protocolFamily = mt.pf;
|
|
1003
|
-
}
|
|
1004
|
-
if (mt.pn) {
|
|
1005
|
-
result.metadata.migratedTo.protocolName = mt.pn;
|
|
1006
|
-
}
|
|
1099
|
+
result.metadata.migratedTo = this.parseDexProtocol(t.mt);
|
|
1007
1100
|
}
|
|
1008
1101
|
if (t.sm) {
|
|
1009
|
-
|
|
1010
|
-
result.metadata.socialMedia = {};
|
|
1011
|
-
if (sm.tw) {
|
|
1012
|
-
result.metadata.socialMedia.twitter = sm.tw;
|
|
1013
|
-
}
|
|
1014
|
-
if (sm.tg) {
|
|
1015
|
-
result.metadata.socialMedia.telegram = sm.tg;
|
|
1016
|
-
}
|
|
1017
|
-
if (sm.w) {
|
|
1018
|
-
result.metadata.socialMedia.website = sm.w;
|
|
1019
|
-
}
|
|
1020
|
-
if (sm.tt) {
|
|
1021
|
-
result.metadata.socialMedia.tiktok = sm.tt;
|
|
1022
|
-
}
|
|
1023
|
-
if (sm.dc) {
|
|
1024
|
-
result.metadata.socialMedia.discord = sm.dc;
|
|
1025
|
-
}
|
|
1026
|
-
if (sm.fb) {
|
|
1027
|
-
result.metadata.socialMedia.facebook = sm.fb;
|
|
1028
|
-
}
|
|
1029
|
-
if (sm.gh) {
|
|
1030
|
-
result.metadata.socialMedia.github = sm.gh;
|
|
1031
|
-
}
|
|
1032
|
-
if (sm.ig) {
|
|
1033
|
-
result.metadata.socialMedia.instagram = sm.ig;
|
|
1034
|
-
}
|
|
1035
|
-
if (sm.li) {
|
|
1036
|
-
result.metadata.socialMedia.linkedin = sm.li;
|
|
1037
|
-
}
|
|
1038
|
-
if (sm.md) {
|
|
1039
|
-
result.metadata.socialMedia.medium = sm.md;
|
|
1040
|
-
}
|
|
1041
|
-
if (sm.rd) {
|
|
1042
|
-
result.metadata.socialMedia.reddit = sm.rd;
|
|
1043
|
-
}
|
|
1044
|
-
if (sm.yt) {
|
|
1045
|
-
result.metadata.socialMedia.youtube = sm.yt;
|
|
1046
|
-
}
|
|
1047
|
-
if (sm.bb) {
|
|
1048
|
-
result.metadata.socialMedia.bitbucket = sm.bb;
|
|
1049
|
-
}
|
|
1102
|
+
result.metadata.socialMedia = this.parseSocialMedia(t.sm);
|
|
1050
1103
|
}
|
|
1051
1104
|
}
|
|
1052
1105
|
if (bc) {
|
|
@@ -2282,7 +2335,7 @@ var ChainStreamClient = class {
|
|
|
2282
2335
|
__publicField(this, "jobs");
|
|
2283
2336
|
__publicField(this, "kyt");
|
|
2284
2337
|
__publicField(this, "endpoint");
|
|
2285
|
-
const baseUrl = options.serverUrl ?? "https://api
|
|
2338
|
+
const baseUrl = options.serverUrl ?? "https://api.chainstream.io";
|
|
2286
2339
|
const streamUrl = options.streamUrl ?? "wss://realtime-dex.chainstream.io/connection/websocket";
|
|
2287
2340
|
this.requestCtx = { baseUrl, streamUrl, accessToken };
|
|
2288
2341
|
configure({
|