@chainstream-io/sdk 2.0.10 → 2.0.11
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-LmorAvq7.d.cts → chainstream-BQsiLm9_.d.cts} +18 -6
- package/dist/{chainstream-LmorAvq7.d.ts → chainstream-BQsiLm9_.d.ts} +18 -6
- package/dist/chainstream.cjs +57 -18
- 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 +57 -18
- package/dist/chainstream.mjs.map +1 -1
- package/dist/index.cjs +89 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.mjs +85 -18
- package/dist/index.mjs.map +1 -1
- package/dist/stream/index.d.cts +1 -1
- package/dist/stream/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -82,10 +82,13 @@ __export(index_exports, {
|
|
|
82
82
|
WsRankingType: () => WsRankingType,
|
|
83
83
|
WsTokenActivityType: () => WsTokenActivityType,
|
|
84
84
|
buildSignMessage: () => buildSignMessage,
|
|
85
|
+
buildSiwxMessage: () => buildSiwxMessage,
|
|
85
86
|
calculatePnl: () => calculatePnl,
|
|
86
87
|
claimRedpacket: () => claimRedpacket,
|
|
88
|
+
clearSiwxTokenCache: () => clearSiwxTokenCache,
|
|
87
89
|
createEndpoint: () => createEndpoint,
|
|
88
90
|
createRedpacket: () => createRedpacket,
|
|
91
|
+
createSiwxToken: () => createSiwxToken,
|
|
89
92
|
createToken: () => createToken,
|
|
90
93
|
createWalletAuthHeaders: () => createWalletAuthHeaders,
|
|
91
94
|
deleteEndpoint: () => deleteEndpoint,
|
|
@@ -136,6 +139,7 @@ __export(index_exports, {
|
|
|
136
139
|
getRedpackets: () => getRedpackets,
|
|
137
140
|
getRedpacketsByAddress: () => getRedpacketsByAddress,
|
|
138
141
|
getSecurity: () => getSecurity,
|
|
142
|
+
getSiwxToken: () => getSiwxToken,
|
|
139
143
|
getStats: () => getStats,
|
|
140
144
|
getStatsMulti: () => getStatsMulti,
|
|
141
145
|
getStocksTokens: () => getStocksTokens,
|
|
@@ -192,24 +196,69 @@ var import_event_source_polyfill = require("event-source-polyfill");
|
|
|
192
196
|
var import_axios = __toESM(require("axios"), 1);
|
|
193
197
|
var import_axios_retry = __toESM(require("axios-retry"), 1);
|
|
194
198
|
|
|
195
|
-
// src/
|
|
199
|
+
// src/siwx-auth.ts
|
|
196
200
|
var import_crypto = require("crypto");
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
201
|
+
var SIWX_DOMAIN = "api.chainstream.io";
|
|
202
|
+
var SIWX_URI = "https://api.chainstream.io";
|
|
203
|
+
var SIWX_VERSION = "1";
|
|
204
|
+
var DEFAULT_CHAIN_ID = "8453";
|
|
205
|
+
var DEFAULT_EXPIRES_IN_SECONDS = 3600;
|
|
206
|
+
var REFRESH_BEFORE_SECONDS = 60;
|
|
207
|
+
function buildSiwxMessage(address, chain, nonce, issuedAt, expiresAt) {
|
|
208
|
+
const chainLabel = chain === "evm" ? "Ethereum" : "Solana";
|
|
209
|
+
const chainId = chain === "evm" ? DEFAULT_CHAIN_ID : "mainnet";
|
|
210
|
+
return [
|
|
211
|
+
`${SIWX_DOMAIN} wants you to sign in with your ${chainLabel} account:`,
|
|
212
|
+
address,
|
|
213
|
+
"",
|
|
214
|
+
"Sign in to ChainStream API",
|
|
215
|
+
"",
|
|
216
|
+
`URI: ${SIWX_URI}`,
|
|
217
|
+
`Version: ${SIWX_VERSION}`,
|
|
218
|
+
`Chain ID: ${chainId}`,
|
|
219
|
+
`Nonce: ${nonce}`,
|
|
220
|
+
`Issued At: ${issuedAt.toISOString()}`,
|
|
221
|
+
`Expiration Time: ${expiresAt.toISOString()}`
|
|
222
|
+
].join("\n");
|
|
200
223
|
}
|
|
201
|
-
async function
|
|
202
|
-
const timestamp = Math.floor(Date.now() / 1e3).toString();
|
|
224
|
+
async function createSiwxToken(signer, expiresInSeconds = DEFAULT_EXPIRES_IN_SECONDS) {
|
|
203
225
|
const nonce = (0, import_crypto.randomBytes)(16).toString("hex");
|
|
204
|
-
const
|
|
226
|
+
const issuedAt = /* @__PURE__ */ new Date();
|
|
227
|
+
const expiresAt = new Date(Date.now() + expiresInSeconds * 1e3);
|
|
228
|
+
const message = buildSiwxMessage(signer.address, signer.chain, nonce, issuedAt, expiresAt);
|
|
205
229
|
const signature = await signer.signMessage(message);
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
230
|
+
const messageB64 = Buffer.from(message).toString("base64");
|
|
231
|
+
const token = `${messageB64}.${signature}`;
|
|
232
|
+
return { token, expiresAt };
|
|
233
|
+
}
|
|
234
|
+
var cachedToken = null;
|
|
235
|
+
var cachedExpiresAt = null;
|
|
236
|
+
var refreshPromise = null;
|
|
237
|
+
async function getSiwxToken(signer) {
|
|
238
|
+
if (cachedToken && cachedExpiresAt) {
|
|
239
|
+
const now = /* @__PURE__ */ new Date();
|
|
240
|
+
const refreshThreshold = new Date(cachedExpiresAt.getTime() - REFRESH_BEFORE_SECONDS * 1e3);
|
|
241
|
+
if (now < refreshThreshold) {
|
|
242
|
+
return cachedToken;
|
|
243
|
+
}
|
|
244
|
+
if (now < cachedExpiresAt && !refreshPromise) {
|
|
245
|
+
refreshPromise = refreshToken(signer).finally(() => {
|
|
246
|
+
refreshPromise = null;
|
|
247
|
+
});
|
|
248
|
+
return cachedToken;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
await refreshToken(signer);
|
|
252
|
+
return cachedToken;
|
|
253
|
+
}
|
|
254
|
+
async function refreshToken(signer) {
|
|
255
|
+
const { token, expiresAt } = await createSiwxToken(signer);
|
|
256
|
+
cachedToken = token;
|
|
257
|
+
cachedExpiresAt = expiresAt;
|
|
258
|
+
}
|
|
259
|
+
function clearSiwxTokenCache() {
|
|
260
|
+
cachedToken = null;
|
|
261
|
+
cachedExpiresAt = null;
|
|
213
262
|
}
|
|
214
263
|
|
|
215
264
|
// src/openapi-client/chainstreamApiClient.ts
|
|
@@ -230,10 +279,8 @@ var configure = (options) => {
|
|
|
230
279
|
});
|
|
231
280
|
axiosInstance.interceptors.request.use(async (config) => {
|
|
232
281
|
if (options.walletSigner) {
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
config.headers[key] = value;
|
|
236
|
-
});
|
|
282
|
+
const token = await getSiwxToken(options.walletSigner);
|
|
283
|
+
config.headers.Authorization = `SIWX ${token}`;
|
|
237
284
|
} else if (options.apiKey) {
|
|
238
285
|
config.headers["X-API-KEY"] = options.apiKey;
|
|
239
286
|
} else if (options.accessToken) {
|
|
@@ -3046,6 +3093,26 @@ var QuoteDex = {
|
|
|
3046
3093
|
raydium: "raydium",
|
|
3047
3094
|
pumpfun: "pumpfun"
|
|
3048
3095
|
};
|
|
3096
|
+
|
|
3097
|
+
// src/wallet-auth.ts
|
|
3098
|
+
var import_crypto2 = require("crypto");
|
|
3099
|
+
var SIGNATURE_PREFIX = "chainstream";
|
|
3100
|
+
function buildSignMessage(chain, address, timestamp, nonce) {
|
|
3101
|
+
return `${SIGNATURE_PREFIX}:${chain}:${address}:${timestamp}:${nonce}`;
|
|
3102
|
+
}
|
|
3103
|
+
async function createWalletAuthHeaders(signer) {
|
|
3104
|
+
const timestamp = Math.floor(Date.now() / 1e3).toString();
|
|
3105
|
+
const nonce = (0, import_crypto2.randomBytes)(16).toString("hex");
|
|
3106
|
+
const message = buildSignMessage(signer.chain, signer.address, timestamp, nonce);
|
|
3107
|
+
const signature = await signer.signMessage(message);
|
|
3108
|
+
return {
|
|
3109
|
+
"X-Wallet-Address": signer.address,
|
|
3110
|
+
"X-Wallet-Chain": signer.chain,
|
|
3111
|
+
"X-Wallet-Signature": signature,
|
|
3112
|
+
"X-Wallet-Timestamp": timestamp,
|
|
3113
|
+
"X-Wallet-Nonce": nonce
|
|
3114
|
+
};
|
|
3115
|
+
}
|
|
3049
3116
|
// Annotate the CommonJS export names for ESM import in node:
|
|
3050
3117
|
0 && (module.exports = {
|
|
3051
3118
|
ActivityType,
|
|
@@ -3098,10 +3165,13 @@ var QuoteDex = {
|
|
|
3098
3165
|
WsRankingType,
|
|
3099
3166
|
WsTokenActivityType,
|
|
3100
3167
|
buildSignMessage,
|
|
3168
|
+
buildSiwxMessage,
|
|
3101
3169
|
calculatePnl,
|
|
3102
3170
|
claimRedpacket,
|
|
3171
|
+
clearSiwxTokenCache,
|
|
3103
3172
|
createEndpoint,
|
|
3104
3173
|
createRedpacket,
|
|
3174
|
+
createSiwxToken,
|
|
3105
3175
|
createToken,
|
|
3106
3176
|
createWalletAuthHeaders,
|
|
3107
3177
|
deleteEndpoint,
|
|
@@ -3152,6 +3222,7 @@ var QuoteDex = {
|
|
|
3152
3222
|
getRedpackets,
|
|
3153
3223
|
getRedpacketsByAddress,
|
|
3154
3224
|
getSecurity,
|
|
3225
|
+
getSiwxToken,
|
|
3155
3226
|
getStats,
|
|
3156
3227
|
getStatsMulti,
|
|
3157
3228
|
getStocksTokens,
|