From 3f961fdf13fe54ad62102e25e0b459620538c85e Mon Sep 17 00:00:00 2001 From: ukumar-ks Date: Fri, 14 Aug 2026 20:16:01 +0530 Subject: [PATCH 1/2] fix for bundler tree-shaking --- keeperapi/package-lock.json | 4 ++-- keeperapi/package.json | 2 +- keeperapi/scripts/generate-proto.mjs | 24 +++++++++++++++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/keeperapi/package-lock.json b/keeperapi/package-lock.json index a9c6ee80..8d654c29 100644 --- a/keeperapi/package-lock.json +++ b/keeperapi/package-lock.json @@ -1,12 +1,12 @@ { "name": "@keeper-security/keeperapi", - "version": "18.1.0", + "version": "18.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@keeper-security/keeperapi", - "version": "18.1.0", + "version": "18.1.1", "license": "ISC", "dependencies": { "@noble/post-quantum": "^0.5.2", diff --git a/keeperapi/package.json b/keeperapi/package.json index 9022cdc2..a4024834 100644 --- a/keeperapi/package.json +++ b/keeperapi/package.json @@ -1,7 +1,7 @@ { "name": "@keeper-security/keeperapi", "description": "Keeper API Javascript SDK", - "version": "18.1.0", + "version": "18.1.1", "browser": "dist/browser/index.js", "main": "dist/index.cjs.js", "types": "dist/node/index.d.ts", diff --git a/keeperapi/scripts/generate-proto.mjs b/keeperapi/scripts/generate-proto.mjs index 778e6e81..7a0623f9 100644 --- a/keeperapi/scripts/generate-proto.mjs +++ b/keeperapi/scripts/generate-proto.mjs @@ -37,6 +37,18 @@ const FILENAME_OVERRIDES = { folder: 'Remove', } +// Cross-namespace `$root.Other.Type` has no ES import — bundlers drop sibling modules. +// Rewrite to named imports so nested types (e.g. Folder) still decode. +function withSiblingImports(body, currentName, allNames, filenameOverrides) { + const siblings = allNames.filter((name) => name !== currentName && body.includes(`$root.${name}.`)) + let rewritten = body + for (const name of [...siblings].sort((a, b) => b.length - a.length)) { + rewritten = rewritten.split(`$root.${name}.`).join(`${name}.`) + } + const imports = siblings.map((name) => `import { ${name} } from './${filenameOverrides[name] ?? name}.js';`) + return { rewritten, imports } +} + const run = (tool, args) => new Promise((resolve, reject) => tool.main(args, (err, output) => (err ? reject(err) : resolve(output)))) @@ -87,6 +99,7 @@ async function main() { if (splits.length === 0) throw new Error('No namespaces found — pbjs output format may have changed') + const allNames = splits.map((s) => s.name) const protoDir = join(ROOT, 'src/proto') mkdirSync(protoDir, { recursive: true }) for (const f of readdirSync(protoDir)) { @@ -102,12 +115,17 @@ async function main() { .filter((l) => l !== 'export { $root as default };') .join('\n') const filename = FILENAME_OVERRIDES[name] ?? name + const { rewritten, imports } = withSiblingImports(body, name, allNames, FILENAME_OVERRIDES) writeFileSync( join(protoDir, `${filename}.js`), - [ESLINT_HEADER, `import { $protobuf, $Reader, $Writer, $util, $root } from './root.js';`, '', body].join( - '\n' - ) + [ + ESLINT_HEADER, + `import { $protobuf, $Reader, $Writer, $util, $root } from './root.js';`, + ...imports, + '', + rewritten, + ].join('\n') ) } From a5dac2baa70e33157f329c39952ea727c8ed335b Mon Sep 17 00:00:00 2001 From: ukumar-ks Date: Mon, 17 Aug 2026 16:37:10 +0530 Subject: [PATCH 2/2] Protobuf dependency added for sdk --- KeeperSdk/package-lock.json | 87 ++++++++++++++++++++++++++++ KeeperSdk/package.json | 3 +- keeperapi/scripts/generate-proto.mjs | 24 +------- 3 files changed, 92 insertions(+), 22 deletions(-) diff --git a/KeeperSdk/package-lock.json b/KeeperSdk/package-lock.json index 423b5df9..50385222 100644 --- a/KeeperSdk/package-lock.json +++ b/KeeperSdk/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@keeper-security/keeperapi": "18.1.0", "asmcrypto.js": "^2.3.2", + "protobufjs": "^7.6.5", "ts-node": "^10.7.0", "typescript": "^4.6.3" }, @@ -115,6 +116,63 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.2.tgz", + "integrity": "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==", + "license": "BSD-3-Clause" + }, "node_modules/@tsconfig/node10": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", @@ -436,6 +494,12 @@ "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "license": "MIT" }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -497,6 +561,29 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/protobufjs": { + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", + "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", diff --git a/KeeperSdk/package.json b/KeeperSdk/package.json index 666a6aef..71424d3b 100644 --- a/KeeperSdk/package.json +++ b/KeeperSdk/package.json @@ -25,8 +25,9 @@ }, "dependencies": { "@keeper-security/keeperapi": "18.1.0", - "ts-node": "^10.7.0", "asmcrypto.js": "^2.3.2", + "protobufjs": "^7.6.5", + "ts-node": "^10.7.0", "typescript": "^4.6.3" }, "devDependencies": { diff --git a/keeperapi/scripts/generate-proto.mjs b/keeperapi/scripts/generate-proto.mjs index 7a0623f9..778e6e81 100644 --- a/keeperapi/scripts/generate-proto.mjs +++ b/keeperapi/scripts/generate-proto.mjs @@ -37,18 +37,6 @@ const FILENAME_OVERRIDES = { folder: 'Remove', } -// Cross-namespace `$root.Other.Type` has no ES import — bundlers drop sibling modules. -// Rewrite to named imports so nested types (e.g. Folder) still decode. -function withSiblingImports(body, currentName, allNames, filenameOverrides) { - const siblings = allNames.filter((name) => name !== currentName && body.includes(`$root.${name}.`)) - let rewritten = body - for (const name of [...siblings].sort((a, b) => b.length - a.length)) { - rewritten = rewritten.split(`$root.${name}.`).join(`${name}.`) - } - const imports = siblings.map((name) => `import { ${name} } from './${filenameOverrides[name] ?? name}.js';`) - return { rewritten, imports } -} - const run = (tool, args) => new Promise((resolve, reject) => tool.main(args, (err, output) => (err ? reject(err) : resolve(output)))) @@ -99,7 +87,6 @@ async function main() { if (splits.length === 0) throw new Error('No namespaces found — pbjs output format may have changed') - const allNames = splits.map((s) => s.name) const protoDir = join(ROOT, 'src/proto') mkdirSync(protoDir, { recursive: true }) for (const f of readdirSync(protoDir)) { @@ -115,17 +102,12 @@ async function main() { .filter((l) => l !== 'export { $root as default };') .join('\n') const filename = FILENAME_OVERRIDES[name] ?? name - const { rewritten, imports } = withSiblingImports(body, name, allNames, FILENAME_OVERRIDES) writeFileSync( join(protoDir, `${filename}.js`), - [ - ESLINT_HEADER, - `import { $protobuf, $Reader, $Writer, $util, $root } from './root.js';`, - ...imports, - '', - rewritten, - ].join('\n') + [ESLINT_HEADER, `import { $protobuf, $Reader, $Writer, $util, $root } from './root.js';`, '', body].join( + '\n' + ) ) }