diff --git a/package-lock.json b/package-lock.json index 3578eb9d9..d3cfc54c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,7 @@ "minimist": "1.2.8", "moment": "2.30.1", "mqtt-packet": "~9.0.1", - "msgpackr": "1.11.12", + "msgpackr": "^2.0.1", "needle": "3.5.0", "node-forge": "^1.3.1", "node-stream-zip": "1.15.0", @@ -82,6 +82,7 @@ "ses": "^1.15.0", "stream-chain": "2.2.5", "stream-json": "1.9.1", + "structon": "^1.0.3", "systeminformation": "^5.31.4", "tar-fs": "^3.1.2", "ulidx": "0.5.0", @@ -136,6 +137,14 @@ "bufferutil": "^4.0.9", "segfault-handler": "^1.3.0", "utf-8-validate": "^5.0.10" + }, + "peerDependencies": { + "@aws-sdk/client-bedrock-runtime": "^3.0.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-bedrock-runtime": { + "optional": true + } } }, "node_modules/@agoric/babel-generator": { @@ -2891,6 +2900,7 @@ "resolved": "https://registry.npmjs.org/@harperfast/integration-testing/-/integration-testing-0.3.1.tgz", "integrity": "sha512-hW7XsSTRWv38pK0nY4GZhGmmWAeQg/2eSSHAdwOO+niL7QORLExGjKCYxySylpKbWRdORQ7JjG5RMkFH+LQc9g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tar-fs": "3.1.2" }, @@ -4403,9 +4413,9 @@ } }, "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.4.tgz", + "integrity": "sha512-PNIUUyLI5YpkJZj60YBzX1o0ByQ4ovvfmq9N/Kig/PAYbVlGyz4R6G0SEWrD0O9acc0sT2+IdMBVLFv8FSi0Nw==", "license": "MIT", "optional": true, "peer": true, @@ -6530,9 +6540,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.27", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.27.tgz", - "integrity": "sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==", + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", "license": "Apache-2.0", "optional": true, "peer": true, @@ -6829,9 +6839,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001792", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz", - "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==", + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", "funding": [ { "type": "opencollective", @@ -7534,9 +7544,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.352", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.352.tgz", - "integrity": "sha512-9wHk8x6dyuimoe18EdiDPWKExNdxYqo4fn4FwOVVper6RxT3cmpBwBkWWfSOCYJjQdIco/nPhJhNLmn4Ufg1Yg==", + "version": "1.5.361", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", + "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", "license": "ISC", "optional": true, "peer": true @@ -10384,17 +10394,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", @@ -10605,6 +10604,17 @@ "version": "0.1.2", "license": "MIT" }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "dev": true, @@ -10708,6 +10718,15 @@ "@lmdb/lmdb-win32-x64": "3.5.4" } }, + "node_modules/lmdb/node_modules/msgpackr": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.12.tgz", + "integrity": "sha512-RBdJ1Un7yGlXWajrkxcSa93nvQ0w4zBf60c0yYv7YtBelP8H2FA7XsfBbMHtXKXUMUxH7zV3Zuozh+kUQWhHvg==", + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, "node_modules/lmdb/node_modules/node-addon-api": { "version": "6.1.0", "license": "MIT" @@ -11370,9 +11389,9 @@ } }, "node_modules/metro/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", + "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", "license": "MIT", "optional": true, "peer": true, @@ -11764,9 +11783,9 @@ "license": "MIT" }, "node_modules/msgpackr": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.12.tgz", - "integrity": "sha512-RBdJ1Un7yGlXWajrkxcSa93nvQ0w4zBf60c0yYv7YtBelP8H2FA7XsfBbMHtXKXUMUxH7zV3Zuozh+kUQWhHvg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.1.tgz", + "integrity": "sha512-9J+tqTEsbHqY8YohazYgty7LgerFIWxvMLpUjqETSmjHojtJm2WnX2kK/2a1fLI7CO7ERP1YSEUXMucz4j+yBA==", "license": "MIT", "optionalDependencies": { "msgpackr-extract": "^3.0.2" @@ -11917,12 +11936,15 @@ "peer": true }, "node_modules/node-releases": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", - "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", + "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", "license": "MIT", "optional": true, - "peer": true + "peer": true, + "engines": { + "node": ">=18" + } }, "node_modules/node-stream-zip": { "version": "1.15.0", @@ -13101,9 +13123,9 @@ } }, "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", + "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", "license": "MIT", "optional": true, "peer": true, @@ -13304,9 +13326,9 @@ } }, "node_modules/react-native/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.4.tgz", + "integrity": "sha512-PNIUUyLI5YpkJZj60YBzX1o0ByQ4ovvfmq9N/Kig/PAYbVlGyz4R6G0SEWrD0O9acc0sT2+IdMBVLFv8FSi0Nw==", "license": "MIT", "optional": true, "peer": true, @@ -13943,9 +13965,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", "license": "MIT", "optional": true, "peer": true, @@ -14402,6 +14424,20 @@ ], "license": "MIT" }, + "node_modules/structon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/structon/-/structon-1.0.3.tgz", + "integrity": "sha512-+AWBBDL0GdUrRku2fNiRIGYjZDl/KVrnVn6566RzxiYicTXIG0pD8v4gOHjj9RG6oLCovZAnRO6/egrN2H7prg==", + "license": "Apache-2.0", + "peerDependencies": { + "msgpackr": ">=2.0.1" + }, + "peerDependenciesMeta": { + "msgpackr": { + "optional": true + } + } + }, "node_modules/superagent": { "version": "10.3.0", "dev": true, @@ -14525,9 +14561,9 @@ } }, "node_modules/terser": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.47.1.tgz", - "integrity": "sha512-tPbLXTI6ohPASb/1YViL428oEHu6/qv1OxqYnfaonVCFHqx4+wCd95pHrQWsL5X4pl90CTyW9piSAsS2L0VoMw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.48.0.tgz", + "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==", "license": "BSD-2-Clause", "optional": true, "peer": true, diff --git a/package.json b/package.json index f6317c08c..8edfdc50b 100644 --- a/package.json +++ b/package.json @@ -210,7 +210,8 @@ "minimist": "1.2.8", "moment": "2.30.1", "mqtt-packet": "~9.0.1", - "msgpackr": "1.11.12", + "msgpackr": "^2.0.1", + "structon": "^1.0.3", "needle": "3.5.0", "node-forge": "^1.3.1", "node-stream-zip": "1.15.0", diff --git a/resources/RecordEncoder.ts b/resources/RecordEncoder.ts index 81aa3cfcc..6f2299965 100644 --- a/resources/RecordEncoder.ts +++ b/resources/RecordEncoder.ts @@ -6,6 +6,7 @@ */ import { Encoder } from 'msgpackr'; +import { createStructon } from 'structon'; import { HAS_PREVIOUS_RESIDENCY_ID, HAS_CURRENT_RESIDENCY_ID, @@ -22,6 +23,8 @@ import { getThisNodeId } from './nodeIdMapping.ts'; import { recordAction } from './analytics/write.ts'; import { RocksDatabase } from '@harperfast/rocksdb-js'; import { when } from '../utility/when.ts'; + +const StructonEncoder = createStructon(Encoder) as typeof Encoder; export type Entry = { key: any; value: any; @@ -74,7 +77,7 @@ let timestampNextEncoding = 0, additionalAuditRefsNextEncoding: Array<{ version: number; nodeId: number }> | undefined; // tracking metadata with a singleton works better than trying to alter response of getEntry/get and coordinating that across caching layers export let lastMetadata: Entry | null = null; -export class RecordEncoder extends Encoder { +export class RecordEncoder extends StructonEncoder { rootStore: any; declare saveStructures: any; declare getStructures: any; diff --git a/utility/lmdb/OpenDBIObject.ts b/utility/lmdb/OpenDBIObject.ts index 2076bfdab..ab2f44046 100644 --- a/utility/lmdb/OpenDBIObject.ts +++ b/utility/lmdb/OpenDBIObject.ts @@ -17,7 +17,6 @@ export class OpenDBIObject { sharedStructuresKey: symbol; compression: any; cache: any; - randomAccessStructure: boolean; freezeData: boolean; encoder: any; /** @@ -35,11 +34,10 @@ export class OpenDBIObject { this.sharedStructuresKey = Symbol.for('structures'); /** @type {any} */ this.compression = undefined; + this.encoder = { Encoder: RecordEncoder }; if (isPrimary) { this.cache = LMDB_CACHING && { validated: true }; - this.randomAccessStructure = true; this.freezeData = true; - this.encoder = { Encoder: RecordEncoder }; } } }