@fileverse-dev/formulajs 4.4.11-mod-21 → 4.4.11-mod-21-patch-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/lib/browser/formula.js +110 -124
- package/lib/browser/formula.min.js +2 -2
- package/lib/browser/formula.min.js.map +1 -1
- package/lib/cjs/index.cjs +111 -92
- package/lib/esm/crypto-constants.mjs +1 -1
- package/lib/esm/index.mjs +111 -92
- package/package.json +1 -1
- package/types/cjs/index.d.cts +2 -2
- package/types/esm/index.d.mts +2 -2
package/lib/cjs/index.cjs
CHANGED
|
@@ -5226,6 +5226,75 @@ Z.TEST = (array, x, sigma) => {
|
|
|
5226
5226
|
return 1 - NORM.S.DIST((AVERAGE(array) - x) / (sigma / Math.sqrt(n)), true)
|
|
5227
5227
|
};
|
|
5228
5228
|
|
|
5229
|
+
function PNL() {
|
|
5230
|
+
const [A, B] = argsToArray(arguments);
|
|
5231
|
+
|
|
5232
|
+
const toNumberOrThrow = (val) => {
|
|
5233
|
+
const num = Number(val);
|
|
5234
|
+
if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
|
|
5235
|
+
return num;
|
|
5236
|
+
};
|
|
5237
|
+
|
|
5238
|
+
// Single numbers
|
|
5239
|
+
if (typeof A === "number" && typeof B === "number") {
|
|
5240
|
+
return A - B;
|
|
5241
|
+
}
|
|
5242
|
+
|
|
5243
|
+
// 1D arrays
|
|
5244
|
+
if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
|
|
5245
|
+
const maxLen = Math.max(A.length, B.length);
|
|
5246
|
+
let total = 0;
|
|
5247
|
+
for (let i = 0; i < maxLen; i++) {
|
|
5248
|
+
const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
|
|
5249
|
+
const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
|
|
5250
|
+
total += aVal - bVal;
|
|
5251
|
+
}
|
|
5252
|
+
return total;
|
|
5253
|
+
}
|
|
5254
|
+
|
|
5255
|
+
// 2D arrays
|
|
5256
|
+
if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
|
|
5257
|
+
let total = 0;
|
|
5258
|
+
const maxRows = Math.max(A.length, B.length);
|
|
5259
|
+
for (let i = 0; i < maxRows; i++) {
|
|
5260
|
+
const rowA = A[i] || [];
|
|
5261
|
+
const rowB = B[i] || [];
|
|
5262
|
+
const maxCols = Math.max(rowA.length, rowB.length);
|
|
5263
|
+
for (let j = 0; j < maxCols; j++) {
|
|
5264
|
+
const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
|
|
5265
|
+
const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
|
|
5266
|
+
total += aVal - bVal;
|
|
5267
|
+
}
|
|
5268
|
+
}
|
|
5269
|
+
return total;
|
|
5270
|
+
}
|
|
5271
|
+
|
|
5272
|
+
// 3D arrays
|
|
5273
|
+
if (Array.isArray(A[0][0])) {
|
|
5274
|
+
let total = 0;
|
|
5275
|
+
const maxX = Math.max(A.length, B.length);
|
|
5276
|
+
for (let i = 0; i < maxX; i++) {
|
|
5277
|
+
const matA = A[i] || [];
|
|
5278
|
+
const matB = B[i] || [];
|
|
5279
|
+
const maxY = Math.max(matA.length, matB.length);
|
|
5280
|
+
for (let j = 0; j < maxY; j++) {
|
|
5281
|
+
const rowA = matA[j] || [];
|
|
5282
|
+
const rowB = matB[j] || [];
|
|
5283
|
+
const maxZ = Math.max(rowA.length, rowB.length);
|
|
5284
|
+
for (let k = 0; k < maxZ; k++) {
|
|
5285
|
+
const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
|
|
5286
|
+
const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
|
|
5287
|
+
total += aVal - bVal;
|
|
5288
|
+
}
|
|
5289
|
+
}
|
|
5290
|
+
}
|
|
5291
|
+
return total;
|
|
5292
|
+
}
|
|
5293
|
+
|
|
5294
|
+
throw new Error("Unsupported or mismatched structure");
|
|
5295
|
+
}
|
|
5296
|
+
|
|
5297
|
+
|
|
5229
5298
|
/**
|
|
5230
5299
|
* Returns the absolute value of a number.
|
|
5231
5300
|
*
|
|
@@ -13019,6 +13088,12 @@ const CHAIN_ID_MAP = {
|
|
|
13019
13088
|
base: 8453,
|
|
13020
13089
|
};
|
|
13021
13090
|
|
|
13091
|
+
const ERROR_MESSAGES_FLAG = {
|
|
13092
|
+
INVALID_API_KEY: '_MISSING',
|
|
13093
|
+
RATE_LIMIT: '_RATE_LIMIT_REACHED',
|
|
13094
|
+
DEFAULT: 'FETCH_ERROR'
|
|
13095
|
+
};
|
|
13096
|
+
|
|
13022
13097
|
const fromTimeStampToBlock = async (timestamp, chain, apiKey) => {
|
|
13023
13098
|
if(!timestamp || !chain || !apiKey) return
|
|
13024
13099
|
const chainId = CHAIN_ID_MAP[chain];
|
|
@@ -13030,28 +13105,32 @@ if(!timestamp || !chain || !apiKey) return
|
|
|
13030
13105
|
};
|
|
13031
13106
|
|
|
13032
13107
|
async function ETHERSCAN(address, page, offset) {
|
|
13033
|
-
|
|
13034
|
-
const
|
|
13035
|
-
|
|
13036
|
-
|
|
13037
|
-
|
|
13038
|
-
|
|
13039
|
-
|
|
13040
|
-
|
|
13041
|
-
|
|
13042
|
-
|
|
13043
|
-
|
|
13044
|
-
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
|
|
13048
|
-
|
|
13049
|
-
|
|
13050
|
-
|
|
13051
|
-
|
|
13052
|
-
|
|
13053
|
-
|
|
13054
|
-
|
|
13108
|
+
return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13109
|
+
// const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Etherscan);
|
|
13110
|
+
// const url = `https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&page=${page || 1}&offset=${offset || 10}&sort=asc&apikey=${API_KEY}`
|
|
13111
|
+
|
|
13112
|
+
// try {
|
|
13113
|
+
// const response = await fetch(url)
|
|
13114
|
+
// if (!response.ok) {
|
|
13115
|
+
// throw new Error(`HTTP error! Status: ${response.status}`)
|
|
13116
|
+
// }
|
|
13117
|
+
// const json = await response.json()
|
|
13118
|
+
// if (json.result.includes("Invalid API Key")) {
|
|
13119
|
+
// return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
|
|
13120
|
+
// }
|
|
13121
|
+
// if(json.result.includes('Max rate limit reached')){
|
|
13122
|
+
// return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13123
|
+
// }
|
|
13124
|
+
// /*
|
|
13125
|
+
// [{blockNumber: '0x1d3d1', timeStamp: '0x5f7e4f', hash: '0x3c3c3c3c', nonce: '0x1',}]
|
|
13126
|
+
// */
|
|
13127
|
+
// return json.result;
|
|
13128
|
+
// } catch (error) {
|
|
13129
|
+
// return ERROR_MESSAGES_FLAG.DEFAULT
|
|
13130
|
+
// }
|
|
13131
|
+
}
|
|
13132
|
+
|
|
13133
|
+
async function COINGECKO(token, vs_currencies) {
|
|
13055
13134
|
const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Coingecko);
|
|
13056
13135
|
const url = `https://api.coingecko.com/api/v3/simple/price?vs_currencies=${vs_currencies}&ids=${token}`;
|
|
13057
13136
|
|
|
@@ -13065,7 +13144,10 @@ async function GETPRICE(token, vs_currencies) {
|
|
|
13065
13144
|
if (!response.ok) {
|
|
13066
13145
|
const json = await response.json();
|
|
13067
13146
|
if (json.status.error_message.includes("API Key Missing")) {
|
|
13068
|
-
return `${SERVICE_API_KEY.Coingecko}
|
|
13147
|
+
return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
|
|
13148
|
+
}
|
|
13149
|
+
if(response.status === 429){
|
|
13150
|
+
return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13069
13151
|
}
|
|
13070
13152
|
}
|
|
13071
13153
|
const jsonResponse = await response.json();
|
|
@@ -13084,7 +13166,7 @@ async function GETPRICE(token, vs_currencies) {
|
|
|
13084
13166
|
*/
|
|
13085
13167
|
return [output];
|
|
13086
13168
|
} catch (error) {
|
|
13087
|
-
return
|
|
13169
|
+
return ERROR_MESSAGES_FLAG.DEFAULT
|
|
13088
13170
|
}
|
|
13089
13171
|
}
|
|
13090
13172
|
|
|
@@ -13118,81 +13200,18 @@ async function EOA(address, categories, chain, startTime, endTime) {
|
|
|
13118
13200
|
if (json.result?.includes?.("Invalid API Key")) {
|
|
13119
13201
|
return `${SERVICE_API_KEY[chain.charAt(0).toUpperCase() + chain.slice(1)]}_MISSING`;
|
|
13120
13202
|
}
|
|
13203
|
+
if(json.result.includes('Max rate limit reached')){
|
|
13204
|
+
return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13205
|
+
}
|
|
13121
13206
|
return json.result;
|
|
13122
13207
|
} catch (e) {
|
|
13123
13208
|
console.log(e);
|
|
13124
|
-
return
|
|
13209
|
+
return ERROR_MESSAGES_FLAG.DEFAULT;
|
|
13125
13210
|
}
|
|
13126
13211
|
}
|
|
13127
13212
|
|
|
13128
13213
|
|
|
13129
|
-
function PNL() {
|
|
13130
|
-
const [A, B] = argsToArray(arguments);
|
|
13131
|
-
|
|
13132
|
-
const toNumberOrThrow = (val) => {
|
|
13133
|
-
const num = Number(val);
|
|
13134
|
-
if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
|
|
13135
|
-
return num;
|
|
13136
|
-
};
|
|
13137
|
-
|
|
13138
|
-
// Single numbers
|
|
13139
|
-
if (typeof A === "number" && typeof B === "number") {
|
|
13140
|
-
return A - B;
|
|
13141
|
-
}
|
|
13142
|
-
|
|
13143
|
-
// 1D arrays
|
|
13144
|
-
if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
|
|
13145
|
-
const maxLen = Math.max(A.length, B.length);
|
|
13146
|
-
let total = 0;
|
|
13147
|
-
for (let i = 0; i < maxLen; i++) {
|
|
13148
|
-
const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
|
|
13149
|
-
const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
|
|
13150
|
-
total += aVal - bVal;
|
|
13151
|
-
}
|
|
13152
|
-
return total;
|
|
13153
|
-
}
|
|
13154
|
-
|
|
13155
|
-
// 2D arrays
|
|
13156
|
-
if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
|
|
13157
|
-
let total = 0;
|
|
13158
|
-
const maxRows = Math.max(A.length, B.length);
|
|
13159
|
-
for (let i = 0; i < maxRows; i++) {
|
|
13160
|
-
const rowA = A[i] || [];
|
|
13161
|
-
const rowB = B[i] || [];
|
|
13162
|
-
const maxCols = Math.max(rowA.length, rowB.length);
|
|
13163
|
-
for (let j = 0; j < maxCols; j++) {
|
|
13164
|
-
const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
|
|
13165
|
-
const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
|
|
13166
|
-
total += aVal - bVal;
|
|
13167
|
-
}
|
|
13168
|
-
}
|
|
13169
|
-
return total;
|
|
13170
|
-
}
|
|
13171
|
-
|
|
13172
|
-
// 3D arrays
|
|
13173
|
-
if (Array.isArray(A[0][0])) {
|
|
13174
|
-
let total = 0;
|
|
13175
|
-
const maxX = Math.max(A.length, B.length);
|
|
13176
|
-
for (let i = 0; i < maxX; i++) {
|
|
13177
|
-
const matA = A[i] || [];
|
|
13178
|
-
const matB = B[i] || [];
|
|
13179
|
-
const maxY = Math.max(matA.length, matB.length);
|
|
13180
|
-
for (let j = 0; j < maxY; j++) {
|
|
13181
|
-
const rowA = matA[j] || [];
|
|
13182
|
-
const rowB = matB[j] || [];
|
|
13183
|
-
const maxZ = Math.max(rowA.length, rowB.length);
|
|
13184
|
-
for (let k = 0; k < maxZ; k++) {
|
|
13185
|
-
const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
|
|
13186
|
-
const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
|
|
13187
|
-
total += aVal - bVal;
|
|
13188
|
-
}
|
|
13189
|
-
}
|
|
13190
|
-
}
|
|
13191
|
-
return total;
|
|
13192
|
-
}
|
|
13193
13214
|
|
|
13194
|
-
throw new Error("Unsupported or mismatched structure");
|
|
13195
|
-
}
|
|
13196
13215
|
|
|
13197
13216
|
|
|
13198
13217
|
async function FLVURL(token, vs_currencies) {
|
|
@@ -13255,6 +13274,7 @@ exports.CHITEST = CHITEST;
|
|
|
13255
13274
|
exports.CHOOSE = CHOOSE;
|
|
13256
13275
|
exports.CLEAN = CLEAN;
|
|
13257
13276
|
exports.CODE = CODE;
|
|
13277
|
+
exports.COINGECKO = COINGECKO;
|
|
13258
13278
|
exports.COLUMN = COLUMN;
|
|
13259
13279
|
exports.COLUMNS = COLUMNS;
|
|
13260
13280
|
exports.COMBIN = COMBIN;
|
|
@@ -13360,7 +13380,6 @@ exports.GAUSS = GAUSS;
|
|
|
13360
13380
|
exports.GCD = GCD;
|
|
13361
13381
|
exports.GEOMEAN = GEOMEAN;
|
|
13362
13382
|
exports.GESTEP = GESTEP;
|
|
13363
|
-
exports.GETPRICE = GETPRICE;
|
|
13364
13383
|
exports.GROWTH = GROWTH;
|
|
13365
13384
|
exports.HARMEAN = HARMEAN;
|
|
13366
13385
|
exports.HEX2BIN = HEX2BIN;
|
package/lib/esm/index.mjs
CHANGED
|
@@ -5224,6 +5224,75 @@ Z.TEST = (array, x, sigma) => {
|
|
|
5224
5224
|
return 1 - NORM.S.DIST((AVERAGE(array) - x) / (sigma / Math.sqrt(n)), true)
|
|
5225
5225
|
};
|
|
5226
5226
|
|
|
5227
|
+
function PNL() {
|
|
5228
|
+
const [A, B] = argsToArray(arguments);
|
|
5229
|
+
|
|
5230
|
+
const toNumberOrThrow = (val) => {
|
|
5231
|
+
const num = Number(val);
|
|
5232
|
+
if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
|
|
5233
|
+
return num;
|
|
5234
|
+
};
|
|
5235
|
+
|
|
5236
|
+
// Single numbers
|
|
5237
|
+
if (typeof A === "number" && typeof B === "number") {
|
|
5238
|
+
return A - B;
|
|
5239
|
+
}
|
|
5240
|
+
|
|
5241
|
+
// 1D arrays
|
|
5242
|
+
if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
|
|
5243
|
+
const maxLen = Math.max(A.length, B.length);
|
|
5244
|
+
let total = 0;
|
|
5245
|
+
for (let i = 0; i < maxLen; i++) {
|
|
5246
|
+
const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
|
|
5247
|
+
const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
|
|
5248
|
+
total += aVal - bVal;
|
|
5249
|
+
}
|
|
5250
|
+
return total;
|
|
5251
|
+
}
|
|
5252
|
+
|
|
5253
|
+
// 2D arrays
|
|
5254
|
+
if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
|
|
5255
|
+
let total = 0;
|
|
5256
|
+
const maxRows = Math.max(A.length, B.length);
|
|
5257
|
+
for (let i = 0; i < maxRows; i++) {
|
|
5258
|
+
const rowA = A[i] || [];
|
|
5259
|
+
const rowB = B[i] || [];
|
|
5260
|
+
const maxCols = Math.max(rowA.length, rowB.length);
|
|
5261
|
+
for (let j = 0; j < maxCols; j++) {
|
|
5262
|
+
const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
|
|
5263
|
+
const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
|
|
5264
|
+
total += aVal - bVal;
|
|
5265
|
+
}
|
|
5266
|
+
}
|
|
5267
|
+
return total;
|
|
5268
|
+
}
|
|
5269
|
+
|
|
5270
|
+
// 3D arrays
|
|
5271
|
+
if (Array.isArray(A[0][0])) {
|
|
5272
|
+
let total = 0;
|
|
5273
|
+
const maxX = Math.max(A.length, B.length);
|
|
5274
|
+
for (let i = 0; i < maxX; i++) {
|
|
5275
|
+
const matA = A[i] || [];
|
|
5276
|
+
const matB = B[i] || [];
|
|
5277
|
+
const maxY = Math.max(matA.length, matB.length);
|
|
5278
|
+
for (let j = 0; j < maxY; j++) {
|
|
5279
|
+
const rowA = matA[j] || [];
|
|
5280
|
+
const rowB = matB[j] || [];
|
|
5281
|
+
const maxZ = Math.max(rowA.length, rowB.length);
|
|
5282
|
+
for (let k = 0; k < maxZ; k++) {
|
|
5283
|
+
const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
|
|
5284
|
+
const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
|
|
5285
|
+
total += aVal - bVal;
|
|
5286
|
+
}
|
|
5287
|
+
}
|
|
5288
|
+
}
|
|
5289
|
+
return total;
|
|
5290
|
+
}
|
|
5291
|
+
|
|
5292
|
+
throw new Error("Unsupported or mismatched structure");
|
|
5293
|
+
}
|
|
5294
|
+
|
|
5295
|
+
|
|
5227
5296
|
/**
|
|
5228
5297
|
* Returns the absolute value of a number.
|
|
5229
5298
|
*
|
|
@@ -13017,6 +13086,12 @@ const CHAIN_ID_MAP = {
|
|
|
13017
13086
|
base: 8453,
|
|
13018
13087
|
};
|
|
13019
13088
|
|
|
13089
|
+
const ERROR_MESSAGES_FLAG = {
|
|
13090
|
+
INVALID_API_KEY: '_MISSING',
|
|
13091
|
+
RATE_LIMIT: '_RATE_LIMIT_REACHED',
|
|
13092
|
+
DEFAULT: 'FETCH_ERROR'
|
|
13093
|
+
};
|
|
13094
|
+
|
|
13020
13095
|
const fromTimeStampToBlock = async (timestamp, chain, apiKey) => {
|
|
13021
13096
|
if(!timestamp || !chain || !apiKey) return
|
|
13022
13097
|
const chainId = CHAIN_ID_MAP[chain];
|
|
@@ -13028,28 +13103,32 @@ if(!timestamp || !chain || !apiKey) return
|
|
|
13028
13103
|
};
|
|
13029
13104
|
|
|
13030
13105
|
async function ETHERSCAN(address, page, offset) {
|
|
13031
|
-
|
|
13032
|
-
const
|
|
13033
|
-
|
|
13034
|
-
|
|
13035
|
-
|
|
13036
|
-
|
|
13037
|
-
|
|
13038
|
-
|
|
13039
|
-
|
|
13040
|
-
|
|
13041
|
-
|
|
13042
|
-
|
|
13043
|
-
|
|
13044
|
-
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
|
|
13048
|
-
|
|
13049
|
-
|
|
13050
|
-
|
|
13051
|
-
|
|
13052
|
-
|
|
13106
|
+
return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13107
|
+
// const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Etherscan);
|
|
13108
|
+
// const url = `https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&page=${page || 1}&offset=${offset || 10}&sort=asc&apikey=${API_KEY}`
|
|
13109
|
+
|
|
13110
|
+
// try {
|
|
13111
|
+
// const response = await fetch(url)
|
|
13112
|
+
// if (!response.ok) {
|
|
13113
|
+
// throw new Error(`HTTP error! Status: ${response.status}`)
|
|
13114
|
+
// }
|
|
13115
|
+
// const json = await response.json()
|
|
13116
|
+
// if (json.result.includes("Invalid API Key")) {
|
|
13117
|
+
// return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
|
|
13118
|
+
// }
|
|
13119
|
+
// if(json.result.includes('Max rate limit reached')){
|
|
13120
|
+
// return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13121
|
+
// }
|
|
13122
|
+
// /*
|
|
13123
|
+
// [{blockNumber: '0x1d3d1', timeStamp: '0x5f7e4f', hash: '0x3c3c3c3c', nonce: '0x1',}]
|
|
13124
|
+
// */
|
|
13125
|
+
// return json.result;
|
|
13126
|
+
// } catch (error) {
|
|
13127
|
+
// return ERROR_MESSAGES_FLAG.DEFAULT
|
|
13128
|
+
// }
|
|
13129
|
+
}
|
|
13130
|
+
|
|
13131
|
+
async function COINGECKO(token, vs_currencies) {
|
|
13053
13132
|
const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Coingecko);
|
|
13054
13133
|
const url = `https://api.coingecko.com/api/v3/simple/price?vs_currencies=${vs_currencies}&ids=${token}`;
|
|
13055
13134
|
|
|
@@ -13063,7 +13142,10 @@ async function GETPRICE(token, vs_currencies) {
|
|
|
13063
13142
|
if (!response.ok) {
|
|
13064
13143
|
const json = await response.json();
|
|
13065
13144
|
if (json.status.error_message.includes("API Key Missing")) {
|
|
13066
|
-
return `${SERVICE_API_KEY.Coingecko}
|
|
13145
|
+
return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
|
|
13146
|
+
}
|
|
13147
|
+
if(response.status === 429){
|
|
13148
|
+
return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13067
13149
|
}
|
|
13068
13150
|
}
|
|
13069
13151
|
const jsonResponse = await response.json();
|
|
@@ -13082,7 +13164,7 @@ async function GETPRICE(token, vs_currencies) {
|
|
|
13082
13164
|
*/
|
|
13083
13165
|
return [output];
|
|
13084
13166
|
} catch (error) {
|
|
13085
|
-
return
|
|
13167
|
+
return ERROR_MESSAGES_FLAG.DEFAULT
|
|
13086
13168
|
}
|
|
13087
13169
|
}
|
|
13088
13170
|
|
|
@@ -13116,81 +13198,18 @@ async function EOA(address, categories, chain, startTime, endTime) {
|
|
|
13116
13198
|
if (json.result?.includes?.("Invalid API Key")) {
|
|
13117
13199
|
return `${SERVICE_API_KEY[chain.charAt(0).toUpperCase() + chain.slice(1)]}_MISSING`;
|
|
13118
13200
|
}
|
|
13201
|
+
if(json.result.includes('Max rate limit reached')){
|
|
13202
|
+
return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
|
|
13203
|
+
}
|
|
13119
13204
|
return json.result;
|
|
13120
13205
|
} catch (e) {
|
|
13121
13206
|
console.log(e);
|
|
13122
|
-
return
|
|
13207
|
+
return ERROR_MESSAGES_FLAG.DEFAULT;
|
|
13123
13208
|
}
|
|
13124
13209
|
}
|
|
13125
13210
|
|
|
13126
13211
|
|
|
13127
|
-
function PNL() {
|
|
13128
|
-
const [A, B] = argsToArray(arguments);
|
|
13129
|
-
|
|
13130
|
-
const toNumberOrThrow = (val) => {
|
|
13131
|
-
const num = Number(val);
|
|
13132
|
-
if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
|
|
13133
|
-
return num;
|
|
13134
|
-
};
|
|
13135
|
-
|
|
13136
|
-
// Single numbers
|
|
13137
|
-
if (typeof A === "number" && typeof B === "number") {
|
|
13138
|
-
return A - B;
|
|
13139
|
-
}
|
|
13140
|
-
|
|
13141
|
-
// 1D arrays
|
|
13142
|
-
if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
|
|
13143
|
-
const maxLen = Math.max(A.length, B.length);
|
|
13144
|
-
let total = 0;
|
|
13145
|
-
for (let i = 0; i < maxLen; i++) {
|
|
13146
|
-
const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
|
|
13147
|
-
const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
|
|
13148
|
-
total += aVal - bVal;
|
|
13149
|
-
}
|
|
13150
|
-
return total;
|
|
13151
|
-
}
|
|
13152
|
-
|
|
13153
|
-
// 2D arrays
|
|
13154
|
-
if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
|
|
13155
|
-
let total = 0;
|
|
13156
|
-
const maxRows = Math.max(A.length, B.length);
|
|
13157
|
-
for (let i = 0; i < maxRows; i++) {
|
|
13158
|
-
const rowA = A[i] || [];
|
|
13159
|
-
const rowB = B[i] || [];
|
|
13160
|
-
const maxCols = Math.max(rowA.length, rowB.length);
|
|
13161
|
-
for (let j = 0; j < maxCols; j++) {
|
|
13162
|
-
const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
|
|
13163
|
-
const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
|
|
13164
|
-
total += aVal - bVal;
|
|
13165
|
-
}
|
|
13166
|
-
}
|
|
13167
|
-
return total;
|
|
13168
|
-
}
|
|
13169
|
-
|
|
13170
|
-
// 3D arrays
|
|
13171
|
-
if (Array.isArray(A[0][0])) {
|
|
13172
|
-
let total = 0;
|
|
13173
|
-
const maxX = Math.max(A.length, B.length);
|
|
13174
|
-
for (let i = 0; i < maxX; i++) {
|
|
13175
|
-
const matA = A[i] || [];
|
|
13176
|
-
const matB = B[i] || [];
|
|
13177
|
-
const maxY = Math.max(matA.length, matB.length);
|
|
13178
|
-
for (let j = 0; j < maxY; j++) {
|
|
13179
|
-
const rowA = matA[j] || [];
|
|
13180
|
-
const rowB = matB[j] || [];
|
|
13181
|
-
const maxZ = Math.max(rowA.length, rowB.length);
|
|
13182
|
-
for (let k = 0; k < maxZ; k++) {
|
|
13183
|
-
const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
|
|
13184
|
-
const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
|
|
13185
|
-
total += aVal - bVal;
|
|
13186
|
-
}
|
|
13187
|
-
}
|
|
13188
|
-
}
|
|
13189
|
-
return total;
|
|
13190
|
-
}
|
|
13191
13212
|
|
|
13192
|
-
throw new Error("Unsupported or mismatched structure");
|
|
13193
|
-
}
|
|
13194
13213
|
|
|
13195
13214
|
|
|
13196
13215
|
async function FLVURL(token, vs_currencies) {
|
|
@@ -13203,4 +13222,4 @@ async function FLVURL(token, vs_currencies) {
|
|
|
13203
13222
|
|
|
13204
13223
|
const utils = { errors, symbols, date };
|
|
13205
13224
|
|
|
13206
|
-
export { ABS, ACCRINT, ACOS, ACOSH, ACOT, ACOTH, AGGREGATE, AND, ARABIC, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, AVERAGEIFS, BASE, BESSELI, BESSELJ, BESSELK, BESSELY, BETA, BETADIST, BETAINV, BIN2DEC, BIN2HEX, BIN2OCT, BINOM, BINOMDIST, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, CEILING, CEILINGMATH, CEILINGPRECISE, CHAR, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ, CHITEST, CHOOSE, CLEAN, CODE, COLUMN, COLUMNS, COMBIN, COMBINA, COMPLEX, CONCAT, CONCATENATE, CONFIDENCE, CONVERT, CORREL, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUPDAYS, COVAR, COVARIANCE, COVARIANCEP, COVARIANCES, CRITBINOM, CSC, CSCH, CUMIPMT, CUMPRINC, DATE, DATEDIF, DATEVALUE, DAVERAGE, DAY, DAYS, DAYS360, DB, DCOUNT, DCOUNTA, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DEGREES, DELTA, DEVSQ, DGET, DISC, DMAX, DMIN, DOLLAR, DOLLARDE, DOLLARFR, DPRODUCT, DSTDEV, DSTDEVP, DSUM, DVAR, DVARP, EDATE, EFFECT, EOA, EOMONTH, ERF, ERFC, ERFCPRECISE, ERFPRECISE, ERROR, ETHERSCAN, EVEN, EXACT, EXP, EXPON, EXPONDIST, F, FACT, FACTDOUBLE, FALSE, FDIST, FDISTRT, FIND, FINV, FINVRT, FISHER, FISHERINV, FIXED, FLOOR, FLOORMATH, FLOORPRECISE, FLVURL, FORECAST, FREQUENCY, FTEST, FV, FVSCHEDULE, GAMMA, GAMMADIST, GAMMAINV, GAMMALN, GAMMALNPRECISE, GAUSS, GCD, GEOMEAN, GESTEP,
|
|
13225
|
+
export { ABS, ACCRINT, ACOS, ACOSH, ACOT, ACOTH, AGGREGATE, AND, ARABIC, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, AVERAGEIFS, BASE, BESSELI, BESSELJ, BESSELK, BESSELY, BETA, BETADIST, BETAINV, BIN2DEC, BIN2HEX, BIN2OCT, BINOM, BINOMDIST, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, CEILING, CEILINGMATH, CEILINGPRECISE, CHAR, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ, CHITEST, CHOOSE, CLEAN, CODE, COINGECKO, COLUMN, COLUMNS, COMBIN, COMBINA, COMPLEX, CONCAT, CONCATENATE, CONFIDENCE, CONVERT, CORREL, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUPDAYS, COVAR, COVARIANCE, COVARIANCEP, COVARIANCES, CRITBINOM, CSC, CSCH, CUMIPMT, CUMPRINC, DATE, DATEDIF, DATEVALUE, DAVERAGE, DAY, DAYS, DAYS360, DB, DCOUNT, DCOUNTA, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DEGREES, DELTA, DEVSQ, DGET, DISC, DMAX, DMIN, DOLLAR, DOLLARDE, DOLLARFR, DPRODUCT, DSTDEV, DSTDEVP, DSUM, DVAR, DVARP, EDATE, EFFECT, EOA, EOMONTH, ERF, ERFC, ERFCPRECISE, ERFPRECISE, ERROR, ETHERSCAN, EVEN, EXACT, EXP, EXPON, EXPONDIST, F, FACT, FACTDOUBLE, FALSE, FDIST, FDISTRT, FIND, FINV, FINVRT, FISHER, FISHERINV, FIXED, FLOOR, FLOORMATH, FLOORPRECISE, FLVURL, FORECAST, FREQUENCY, FTEST, FV, FVSCHEDULE, GAMMA, GAMMADIST, GAMMAINV, GAMMALN, GAMMALNPRECISE, GAUSS, GCD, GEOMEAN, GESTEP, GROWTH, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, HOUR, HYPGEOM, HYPGEOMDIST, IF, IFERROR, IFNA, IFS, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, INDEX, INT, INTERCEPT, IPMT, IRR, ISBLANK, ISDATE, ISERR, ISERROR, ISEVEN, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISO, ISODD, ISOWEEKNUM, ISPMT, ISTEXT, KURT, LARGE, LCM, LEFT, LEN, LINEST, LN, LOG, LOG10, LOGEST, LOGINV, LOGNORM, LOGNORMDIST, LOGNORMINV, LOOKUP, LOWER, MATCH, MAX, MAXA, MAXIFS, MEDIAN, MID, MIN, MINA, MINIFS, MINUTE, MIRR, MMULT, MOD, MODE, MODEMULT, MODESNGL, MONTH, MROUND, MULTINOMIAL, MUNIT, N, NA, NEGBINOM, NEGBINOMDIST, NETWORKDAYS, NETWORKDAYSINTL, NETWORKDAYS_INTL, NOMINAL, NORM, NORMDIST, NORMINV, NORMSDIST, NORMSINV, NOT, NOW, NPER, NPV, NUMBERVALUE, OCT2BIN, OCT2DEC, OCT2HEX, ODD, OR, PDURATION, PEARSON, PERCENTILE, PERCENTILEEXC, PERCENTILEINC, PERCENTRANK, PERCENTRANKEXC, PERCENTRANKINC, PERMUT, PERMUTATIONA, PHI, PI, PMT, PNL, POISSON, POISSONDIST, POWER, PPMT, PRICEDISC, PROB, PRODUCT, PROPER, PV, QUARTILE, QUARTILEEXC, QUARTILEINC, QUOTIENT, RADIANS, RAND, RANDBETWEEN, RANK, RANKAVG, RANKEQ, RATE, REPLACE, REPT, RIGHT, ROMAN, ROUND, ROUNDDOWN, ROUNDUP, ROW, ROWS, RRI, RSQ, SEARCH, SEC, SECH, SECOND, SERIESSUM, SIGN, SIN, SINH, SKEW, SKEWP, SLN, SLOPE, SMALL, SORT, SQRT, SQRTPI, STANDARDIZE, STDEV, STDEVA, STDEVP, STDEVPA, STDEVS, STEYX, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, SWITCH, SYD, T, TAN, TANH, TBILLEQ, TBILLPRICE, TBILLYIELD, TDIST, TDISTRT, TEXT, TEXTJOIN, TIME, TIMEVALUE, TINV, TODAY, TRANSPOSE, TREND, TRIM, TRIMMEAN, TRUE, TRUNC, TTEST, TYPE, UNICHAR, UNICODE, UNIQUE, UPPER, VALUE, VAR, VARA, VARP, VARPA, VARS, VLOOKUP, WEEKDAY, WEEKNUM, WEIBULL, WEIBULLDIST, WORKDAY, WORKDAYINTL, WORKDAY_INTL, XIRR, XNPV, XOR, YEAR, YEARFRAC, Z, ZTEST, utils };
|
package/package.json
CHANGED
package/types/cjs/index.d.cts
CHANGED
|
@@ -624,6 +624,7 @@ export function CLEAN(text: any): any;
|
|
|
624
624
|
* @returns
|
|
625
625
|
*/
|
|
626
626
|
export function CODE(text: any): any;
|
|
627
|
+
export function COINGECKO(token: any, vs_currencies: any): Promise<string | {}[]>;
|
|
627
628
|
/**
|
|
628
629
|
* Returns the column number of a reference.
|
|
629
630
|
*
|
|
@@ -1328,7 +1329,7 @@ export const ERFPRECISE: any;
|
|
|
1328
1329
|
export namespace ERROR {
|
|
1329
1330
|
function TYPE(error_val: any): Error | 1 | 2 | 3 | 4 | 8 | 5 | 6 | 7;
|
|
1330
1331
|
}
|
|
1331
|
-
export function ETHERSCAN(address: any, page: any, offset: any): Promise<
|
|
1332
|
+
export function ETHERSCAN(address: any, page: any, offset: any): Promise<string>;
|
|
1332
1333
|
/**
|
|
1333
1334
|
* Rounds a number up to the nearest even integer.
|
|
1334
1335
|
*
|
|
@@ -1787,7 +1788,6 @@ export function GEOMEAN(...args: any[]): any;
|
|
|
1787
1788
|
* @returns
|
|
1788
1789
|
*/
|
|
1789
1790
|
export function GESTEP(number: any, step: any): any;
|
|
1790
|
-
export function GETPRICE(token: any, vs_currencies: any): Promise<string | {}[]>;
|
|
1791
1791
|
/**
|
|
1792
1792
|
* Returns values along an exponential trend.
|
|
1793
1793
|
*
|
package/types/esm/index.d.mts
CHANGED
|
@@ -624,6 +624,7 @@ export function CLEAN(text: any): any;
|
|
|
624
624
|
* @returns
|
|
625
625
|
*/
|
|
626
626
|
export function CODE(text: any): any;
|
|
627
|
+
export function COINGECKO(token: any, vs_currencies: any): Promise<string | {}[]>;
|
|
627
628
|
/**
|
|
628
629
|
* Returns the column number of a reference.
|
|
629
630
|
*
|
|
@@ -1328,7 +1329,7 @@ export const ERFPRECISE: any;
|
|
|
1328
1329
|
export namespace ERROR {
|
|
1329
1330
|
function TYPE(error_val: any): Error | 1 | 2 | 3 | 4 | 8 | 5 | 6 | 7;
|
|
1330
1331
|
}
|
|
1331
|
-
export function ETHERSCAN(address: any, page: any, offset: any): Promise<
|
|
1332
|
+
export function ETHERSCAN(address: any, page: any, offset: any): Promise<string>;
|
|
1332
1333
|
/**
|
|
1333
1334
|
* Rounds a number up to the nearest even integer.
|
|
1334
1335
|
*
|
|
@@ -1787,7 +1788,6 @@ export function GEOMEAN(...args: any[]): any;
|
|
|
1787
1788
|
* @returns
|
|
1788
1789
|
*/
|
|
1789
1790
|
export function GESTEP(number: any, step: any): any;
|
|
1790
|
-
export function GETPRICE(token: any, vs_currencies: any): Promise<string | {}[]>;
|
|
1791
1791
|
/**
|
|
1792
1792
|
* Returns values along an exponential trend.
|
|
1793
1793
|
*
|