@sentio/sdk 2.6.3 → 2.6.4-rc.2
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.
@@ -9,7 +9,11 @@ export function normalizeKey(name) {
|
|
9
9
|
return normalizeName(name);
|
10
10
|
}
|
11
11
|
function normalizeValue(name) {
|
12
|
-
|
12
|
+
if (name.length > 1024) {
|
13
|
+
console.warn(`${name} is exceed max length for value storage, will be truncate to 1024 characters`);
|
14
|
+
return name.slice(0, 1024);
|
15
|
+
}
|
16
|
+
return name;
|
13
17
|
}
|
14
18
|
export function normalizeLabels(labels) {
|
15
19
|
const normLabels = {};
|
@@ -46,6 +50,10 @@ function normalizeObject(obj, length) {
|
|
46
50
|
return obj.toISOString();
|
47
51
|
}
|
48
52
|
if (obj instanceof BigDecimal) {
|
53
|
+
if (obj.isNaN() || !obj.isFinite()) {
|
54
|
+
console.error("can't submit NaN or Infinity value, will store as 0");
|
55
|
+
return 0;
|
56
|
+
}
|
49
57
|
return obj.toNumber();
|
50
58
|
}
|
51
59
|
if (obj instanceof Promise) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"normalization.js","sourceRoot":"","sources":["../../src/core/normalization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB,OAAO,SAAS,CAAA;KACjB;IACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"normalization.js","sourceRoot":"","sources":["../../src/core/normalization.ts"],"names":[],"mappings":"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","sourcesContent":["import { Labels } from './meter.js'\nimport { BigDecimal } from './big-decimal.js'\n\nfunction normalizeName(name: string): string {\n return name.slice(0, 128).replace(/[^_\\-a-zA-Z0-9]/g, '_')\n}\n\nexport function normalizeKey(name: string): string {\n if (name === 'labels') {\n return 'labels_'\n }\n return normalizeName(name)\n}\n\nfunction normalizeValue(name: string): string {\n if (name.length > 1024) {\n console.warn(`${name} is exceed max length for value storage, will be truncate to 1024 characters`)\n return name.slice(0, 1024)\n }\n return name\n}\n\nexport function normalizeLabels(labels: Labels): Labels {\n const normLabels: Labels = {}\n for (const key in labels) {\n normLabels[normalizeKey(key)] = normalizeValue(labels[key])\n }\n return normLabels\n}\n\nfunction normalizeObject(obj: any, length: number): any {\n let ret: any\n\n const typeString = typeof obj\n switch (typeString) {\n case 'string':\n return obj.slice(0, length)\n case 'bigint':\n return Number(obj)\n case 'number':\n return obj\n case 'function':\n return null\n case 'symbol':\n return null\n }\n if (Array.isArray(obj)) {\n console.warn('Array type inside log/event payload is not currently supported and will be ignored.')\n return null\n // ret = []\n // for (const val of obj) {\n // ret.push(normalizeObject(val, length))\n // }\n } else if (obj === Object(obj)) {\n if (obj instanceof Date) {\n return obj.toISOString()\n }\n if (obj instanceof BigDecimal) {\n if (obj.isNaN() || !obj.isFinite()) {\n console.error(\"can't submit NaN or Infinity value, will store as 0\")\n return 0\n }\n return obj.toNumber()\n }\n if (obj instanceof Promise) {\n console.error('Cannot submit promise')\n return null\n }\n ret = {}\n for (const [key, value] of Object.entries(obj)) {\n const normValue = normalizeObject(value, length)\n if (normValue != null) {\n ret[key] = normValue\n }\n }\n } else {\n ret = obj\n }\n return ret\n}\n\nexport function normalizeAttribute(record: Record<string, any>): any {\n return normalizeObject(record, 1000)\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"numberish.test.js","sourceRoot":"","sources":["../../src/core/numberish.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from 'chai'\nimport { toBigInteger, toMetricValue } from './numberish.js'\nimport { webcrypto } from 'crypto'\nimport { performance } from 'perf_hooks'\nimport { BigInteger, Struct } from '@sentio/protos'\nimport { BigDecimal } from './big-decimal.js'\nimport { bytesToBigInt } from '../utils/conversion.js'\nimport { normalizeAttribute } from './normalization.js'\n\n// TODO add test for type conversion\ndescribe('Numberish tests', () => {\n const values: bigint[] = [0n, -0n, 3815372408723498172304781320847103784n, 2132n, -18708707n, 123n << 100n]\n\n test('big integer conversion correctness ', async () => {\n for (const v of values) {\n const b = toBigInteger(v)\n const hex1 = BigIntegerToHex(b)\n const hex2 = v.toString(16)\n expect(hex1).equals(hex2)\n }\n })\n\n test('random big integer conversion correctness ', async () => {\n for (let i = 0; i < 1000; i++) {\n const random = webcrypto.getRandomValues(new Uint8Array(256))\n const v = bytesToBigInt(random)\n const b = toBigInteger(v)\n\n expect(bytesToBigInt(b.data)).equals(v)\n }\n })\n\n test.skip('random big integer performance', async () => {\n jest.setTimeout(100000)\n jest.retryTimes(3)\n\n let timer1 = 0\n let timer2 = 0\n for (let i = 0; i < 1000; i++) {\n // Use higher value for local debugging\n const random = webcrypto.getRandomValues(new Uint8Array(256))\n const v = bytesToBigInt(random)\n\n let start = performance.now()\n toBigInteger(v)\n timer1 += performance.now() - start\n\n start = performance.now()\n v.toString(16)\n timer2 += performance.now() - start\n }\n\n console.log(timer1, timer2)\n expect(timer1).to.lessThan(timer2 * 3)\n })\n\n test('metric values', async () => {\n const longDec = '12.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002'\n expect(toMetricValue(new BigDecimal(longDec)).bigDecimal == longDec)\n\n const complexDec = '-7.350918e-428'\n expect(toMetricValue(new BigDecimal(complexDec)).bigDecimal == complexDec)\n\n expect(\n BigIntegerToBigInt(toMetricValue(new BigDecimal('100000')).bigInteger || BigInteger.fromPartial({})) === 100000n\n )\n })\n\n test('normalize attributes basic', async () => {\n const t1 = { a: 'a', n: 123, n2: 1233333333300000000000n, n3: BigDecimal(0.0), nested: { date: new Date() } }\n const r1 = normalizeAttribute(t1)\n expect(typeof r1.n2).equals('number')\n expect(typeof r1.n3).equals('number')\n expect(typeof r1.nested.date).equals('string')\n\n const w1 = Struct.encode(Struct.wrap(r1))\n const s2 = Struct.decode(w1.finish())\n\n const t2 = { f: () => {} }\n const r2 = normalizeAttribute(t2)\n expect(r2.f).equals(undefined)\n\n const t3 = {\n token0Symbol: null,\n token1Symbol: 't2',\n }\n const r3 = normalizeAttribute(t3)\n const w3 = Struct.encode(Struct.wrap(r3))\n const s3 = Struct.decode(w3.finish())\n console.log(r3)\n })\n})\n\n// Performance very bad\nfunction BigIntegerToHex(b: BigInteger): string {\n let res = bytesToBigInt(b.data).toString(16)\n if (b.negative) {\n res = '-' + res\n }\n return res\n}\n\nfunction BigIntegerToBigInt(b: BigInteger): bigint {\n let res = bytesToBigInt(b.data)\n if (b.negative) {\n res = -res\n }\n return res\n}\n"]}
|
1
|
+
{"version":3,"file":"numberish.test.js","sourceRoot":"","sources":["../../src/core/numberish.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from 'chai'\nimport { toBigInteger, toMetricValue } from './numberish.js'\nimport { webcrypto } from 'crypto'\nimport { performance } from 'perf_hooks'\nimport { BigInteger, Struct } from '@sentio/protos'\nimport { BigDecimal } from './big-decimal.js'\nimport { bytesToBigInt } from '../utils/conversion.js'\nimport { normalizeAttribute } from './normalization.js'\n\n// TODO add test for type conversion\ndescribe('Numberish tests', () => {\n const values: bigint[] = [0n, -0n, 3815372408723498172304781320847103784n, 2132n, -18708707n, 123n << 100n]\n\n test('big integer conversion correctness ', async () => {\n for (const v of values) {\n const b = toBigInteger(v)\n const hex1 = BigIntegerToHex(b)\n const hex2 = v.toString(16)\n expect(hex1).equals(hex2)\n }\n })\n\n test('random big integer conversion correctness ', async () => {\n for (let i = 0; i < 1000; i++) {\n const random = webcrypto.getRandomValues(new Uint8Array(256))\n const v = bytesToBigInt(random)\n const b = toBigInteger(v)\n\n expect(bytesToBigInt(b.data)).equals(v)\n }\n })\n\n test.skip('random big integer performance', async () => {\n jest.setTimeout(100000)\n jest.retryTimes(3)\n\n let timer1 = 0\n let timer2 = 0\n for (let i = 0; i < 1000; i++) {\n // Use higher value for local debugging\n const random = webcrypto.getRandomValues(new Uint8Array(256))\n const v = bytesToBigInt(random)\n\n let start = performance.now()\n toBigInteger(v)\n timer1 += performance.now() - start\n\n start = performance.now()\n v.toString(16)\n timer2 += performance.now() - start\n }\n\n console.log(timer1, timer2)\n expect(timer1).to.lessThan(timer2 * 3)\n })\n\n test('metric values', async () => {\n const longDec = '12.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002'\n expect(toMetricValue(new BigDecimal(longDec)).bigDecimal == longDec)\n\n const complexDec = '-7.350918e-428'\n expect(toMetricValue(new BigDecimal(complexDec)).bigDecimal == complexDec)\n\n expect(\n BigIntegerToBigInt(toMetricValue(new BigDecimal('100000')).bigInteger || BigInteger.fromPartial({})) === 100000n\n )\n })\n\n test('normalize attributes basic', async () => {\n const t1 = { a: 'a', n: 123, n2: 1233333333300000000000n, n3: BigDecimal(0.0), nested: { date: new Date() } }\n const r1 = normalizeAttribute(t1)\n expect(typeof r1.n2).equals('number')\n expect(typeof r1.n3).equals('number')\n expect(typeof r1.nested.date).equals('string')\n\n const w1 = Struct.encode(Struct.wrap(r1))\n const s2 = Struct.decode(w1.finish())\n\n const t2 = { f: () => {} }\n const r2 = normalizeAttribute(t2)\n expect(r2.f).equals(undefined)\n\n const t3 = {\n token0Symbol: null,\n token1Symbol: 't2',\n }\n const r3 = normalizeAttribute(t3)\n const w3 = Struct.encode(Struct.wrap(r3))\n const s3 = Struct.decode(w3.finish())\n console.log(r3)\n })\n\n test('invalid value', async () => {\n const t1 = { a: BigDecimal(1).dividedBy(0) }\n const r1 = normalizeAttribute(t1)\n expect(r1.a).equals(0)\n })\n})\n\n// Performance very bad\nfunction BigIntegerToHex(b: BigInteger): string {\n let res = bytesToBigInt(b.data).toString(16)\n if (b.negative) {\n res = '-' + res\n }\n return res\n}\n\nfunction BigIntegerToBigInt(b: BigInteger): bigint {\n let res = bytesToBigInt(b.data)\n if (b.negative) {\n res = -res\n }\n return res\n}\n"]}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sentio/sdk",
|
3
3
|
"license": "Apache-2.0",
|
4
|
-
"version": "2.6.
|
4
|
+
"version": "2.6.4-rc.2",
|
5
5
|
"type": "module",
|
6
6
|
"scripts": {
|
7
7
|
"compile": "tsc && cp src/utils/*.csv lib/utils && cp src/tsup.config.ts lib",
|
@@ -23,11 +23,11 @@
|
|
23
23
|
"@project-serum/anchor": "^0.26.0",
|
24
24
|
"@sentio/bigdecimal": "^9.1.1-patch.3",
|
25
25
|
"@sentio/ethers-v6": "^1.0.25",
|
26
|
-
"@sentio/protos": "^2.6.
|
27
|
-
"@sentio/runtime": "^2.6.
|
26
|
+
"@sentio/protos": "^2.6.4-rc.2",
|
27
|
+
"@sentio/runtime": "^2.6.4-rc.2",
|
28
28
|
"@solana/web3.js": "^1.73.2",
|
29
29
|
"@types/prettier": "^2.7.2",
|
30
|
-
"aptos-sdk": "npm
|
30
|
+
"aptos-sdk": "npm:aptos@^1.7.1",
|
31
31
|
"bs58": "^5.0.0",
|
32
32
|
"chalk": "^5.2.0",
|
33
33
|
"csv-parse": "^5.3.0",
|
@@ -78,5 +78,5 @@
|
|
78
78
|
"engines": {
|
79
79
|
"node": ">=16"
|
80
80
|
},
|
81
|
-
"gitHead": "
|
81
|
+
"gitHead": "faae824002e6280c132fd607096b80e7025768c4"
|
82
82
|
}
|
@@ -13,7 +13,11 @@ export function normalizeKey(name: string): string {
|
|
13
13
|
}
|
14
14
|
|
15
15
|
function normalizeValue(name: string): string {
|
16
|
-
|
16
|
+
if (name.length > 1024) {
|
17
|
+
console.warn(`${name} is exceed max length for value storage, will be truncate to 1024 characters`)
|
18
|
+
return name.slice(0, 1024)
|
19
|
+
}
|
20
|
+
return name
|
17
21
|
}
|
18
22
|
|
19
23
|
export function normalizeLabels(labels: Labels): Labels {
|
@@ -52,6 +56,10 @@ function normalizeObject(obj: any, length: number): any {
|
|
52
56
|
return obj.toISOString()
|
53
57
|
}
|
54
58
|
if (obj instanceof BigDecimal) {
|
59
|
+
if (obj.isNaN() || !obj.isFinite()) {
|
60
|
+
console.error("can't submit NaN or Infinity value, will store as 0")
|
61
|
+
return 0
|
62
|
+
}
|
55
63
|
return obj.toNumber()
|
56
64
|
}
|
57
65
|
if (obj instanceof Promise) {
|