{"_id":"@mcp-abap-adt/auth-stores","_rev":"31-ceb7ac3a5bc66a7db38c69f26ae2b5ac","name":"@mcp-abap-adt/auth-stores","dist-tags":{"latest":"3.2.0"},"versions":{"0.1.0":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"9f8ac2748c2142c03d06e664f11392303c91c7b3","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.0.tgz","fileCount":50,"integrity":"sha512-rRI6eFwmhZgEDlsPG9HsU07TCamkoUPREUM1N53XrY99ijzqKD08y1nlcgHUjoI6G1CqvVT0WbP5MHQDQWFY0A==","signatures":[{"sig":"MEUCIQCg82jCpNk/9jVYEGfVDhi0JVAF5W4k0mS77QoX3YTNVAIgG0Pe6ZnUiaF8Y1NKH3durwjEtga/lCZVA4h4BfREzgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152181},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d763abac1fb65bea630fd1020e6997dbabe278b6","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"10.9.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/auth-broker":"^0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.0_1764799868940_0.05082012520230106","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.1","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.1","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"8925187fa1e2bd6f6daf9b5c054dcf2047cadb81","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.1.tgz","fileCount":50,"integrity":"sha512-VCQGmd2kpKTQ7WOdIl0wO8KnEo18K9yjNB+bicHg/EABqTQkrf6V1XXyOHf06/Ekew4DmNNKW1FMkeUIQeZ0eg==","signatures":[{"sig":"MEQCIHlSTkxZUiC2fXvLml0WzqNNI/GnPfT6oV3IeQlcoVxRAiBDbWmw1Tr449vGdUUFwoijwx0IJBK7XIXqAK+dz6P/AQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152599},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b000c912cc86f45d4368c9a97e840323d2c6e810","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/auth-broker":"^0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.1_1764802564766_0.5873845686182952","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.2","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.2","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"e20dc26f07ba58b097701d0c105dc4b2e38d1577","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.2.tgz","fileCount":48,"integrity":"sha512-KVlsFSpzBGzA8CzHlmQotcgRKzPyIfmDZGUP8/FXRU8BU175nSka9rpcuai6zzmrAOAH3KpRyKzLcg6o7bVbVQ==","signatures":[{"sig":"MEQCIByxgSCFNejdvMDYTfZcVbqJwXZ8XYmMqwPGU4gzppaXAiByIxGJ25jhsgsw/xcliGeMZzb+uzuB2unJJ44S7vWV0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155508},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d01f97b6b70e7e06b17e4e0867e93f005ae1292f","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/auth-broker":"^0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.2_1764806892871_0.28848759905054755","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.3","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.3","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"18cd13b6f82f725107eee23987c7277130eed790","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.3.tgz","fileCount":48,"integrity":"sha512-AiBNNEleVRfjvCG1J9Ken7WrG196OBd2W4Pwtzr9BkWlIR12M5WYCgKN6v6L1q9T8My6KyZGAm+dYQACc47q4g==","signatures":[{"sig":"MEQCIEfCrxL8c74Uar92+6RZmr8kIWnkYVAt5JDRTS0OKiIBAiAxw2qNfmT5SO92PwZ4+zviUSiyprULoKGIV4NptMWQ1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159052},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"705847c863eb78b74b28d3a0683db8ca5bebea36","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"10.9.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.3_1764847451185_0.1853199570121531","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.4","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.4","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"d1e49ff9721027a52b1531bc0fc2971c170cf410","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.4.tgz","fileCount":48,"integrity":"sha512-o2M4BW8fWhUerDCgmYQqTFAmNYWU0Dj7o55VCiHKI7p3Ojjpt/ERpKlP4dJKVGNmcJsNJRhfvktVLkJOOJcLkQ==","signatures":[{"sig":"MEQCIDRYoBQjPAkYmHB8fwHPCxAdBajLnkh8lBKBytJRnwPxAiBfjGG0Qx4ayokv63r4FCMDb/rxh5kNWtdRq1Yxjcrv4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159423},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"69ae9e607aa3f75bf3c23acf8c8a2612652cc1c2","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.4_1764931573142_0.6424160494202562","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.5","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.5","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"2858241147a297c2e3484964a5d4a36c863ca210","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.5.tgz","fileCount":48,"integrity":"sha512-lsL/FrWPOzvpml7eXthk9nXdyeIWI1/ikHJke5wnfbRle/NuE61nPWBkxsryjOv0eURCNJ21QMEP4GbjjR8gXw==","signatures":[{"sig":"MEYCIQDdVp7704C5jZoGcpIKlqN5lT0G+RDmSVjtIf+OA5+JdQIhAI0NuE3pZ8GcqaQZ2lMFtJoPmA8f5WnrwcJLRdZRNym9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159645},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3fe1449d60034488b0d8ce4c4eddc3e26cb5e73c","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"10.9.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.5_1765174889004_0.2160585185338828","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.6","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.6","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"ce20911b788eb0423f59f9801c6cecebdebd6766","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.6.tgz","fileCount":48,"integrity":"sha512-sY/ij4298nJUTjAWebOB+Jr0TJHPABtTsyvRm+DQ61DfegL/SFwM0obijrNCdY8TtbE7DYmM9qA0C3z+Lr/D+Q==","signatures":[{"sig":"MEUCIQDPhZLSxyi9sTyd0m7YT4l3J7dtaTPVXJLJg/gTYcdkcwIgVu3gzV2uRWkkct2bQfH3VCzHdjx29i9CPGUy80cJN+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188375},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b94e95909ea4ff80cefbff393c857b419584132c","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.6_1765216705996_0.8973856404812748","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@mcp-abap-adt/auth-stores","version":"0.1.7","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.1.7","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"9e407bd1971f4e8d9cae6df849f55d37135339f8","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.1.7.tgz","fileCount":48,"integrity":"sha512-x5Pf8LBsLQ8brLYKZbr7APDfAuL/xD1oGc64o1kVR9Ye0smcd5Gzpq+UesdRRLZtiomkFkcpWA2t57PghZ/HWg==","signatures":[{"sig":"MEYCIQCV02F4Y/lASjpSdGUf3mmZyepPtoKq814KARLTElrmcQIhAOwgmOX4C1vlJiGG0vzG0edZv7SdcbvGX//D+3nE1gai","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":203097},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ac6d0c7e3de70ed6dbb7a039cc5f98705926bc1a","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"10.9.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.1.7_1765223675828_0.3126119201885651","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"3ad7a317368295eeb9e26b0ce707a461bf35e337","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.0.tgz","fileCount":48,"integrity":"sha512-VcdNgb9YpELgoOSARfl+jB1+R+ivYlfcj7VQ5PnvVTmn3bdgnV3jpUuU8UmXy1QXnE+gfb5iStA+x6ZXHPwkWQ==","signatures":[{"sig":"MEUCIQDOAkRVQTA+eOYypTRn8DVa+GkdLn6RFqwvEvK6vVuKKQIgbFVpL5xVwMpClnTAzlfCUXse/fkGV9dQ2d2fwL33OVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226720},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9b56078aaf4b61454c88ca235672f3deed34f612","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"10.9.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"22.16.0","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.0_1765281286292_0.8676411996264792","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.1","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.1","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"5d9bbe94b863e0ccd3444e680f84755a3ee7b4e2","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.1.tgz","fileCount":48,"integrity":"sha512-/5f3zQ6fqHNsFOHdBtpWzYbMWMoKdy5OgtVwQ4yjsps+xrlNnkY8Hd0ln/fGxO0NhyIdx7t245yLDRbeql2CIw==","signatures":[{"sig":"MEQCIGsKtBADEwWbefShq/DpfCtz+Nz48NEvw9Bsmpr2YhSPAiBP8cqlMJDYxFwUQhNQANPBJ/GA0P4/avU1I41ijajTeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227097},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3b5112a789b66b7ad2e76a60a57721b923835b73","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.1_1765566162215_0.47612833768998497","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.3","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.3","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"4f9ad1563ad98cb06563df3f8bc0fe42eecf514c","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.3.tgz","fileCount":48,"integrity":"sha512-79Y6AbkzbmnPKT4IHNii+Q1uTPhAytoMKydM0rWHmdLbonk9wu20eWE3WGOyro0DNcZrTC2gmd9gJo5tdsTSKg==","signatures":[{"sig":"MEUCIGHuQ4v+Ag8OEBgK+11In8OBKGlXh2k5EUyxb7p1myEKAiEA1kCLa8wzcjWduxUG+Gn8HhB0l3zk0ML2Q3X0blgqq8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235982},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ebc26e4fb897ce99c6adf9e16e46518ff3281191","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.12.0","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.1.17"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.3_1765903982746_0.9621214874330308","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.5","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.5","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"319f0a74fd22cb9061ef2ef9df8983a6c92a84fc","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.5.tgz","fileCount":50,"integrity":"sha512-2vfQEPKObXvDU7YnsEif0GX00IBGKGRIe23LbNGzwKCPQMTHC3zAfMIRoQ6G3Sb0ewOuwMCwsJ5x1QfHNl9BkQ==","signatures":[{"sig":"MEQCIH3VR0RVZBeU7MsNP6p8YyWOSVBHX4bjYHjXRU0Xa/kTAiAcQNcUcMQUXzgvYaTvJRl6qJBsldoHcAYgiz1jcI9yDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244126},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a27fd02a705af5b156c52703701f9a04f54fd1e5","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.12.0","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.5_1766166344930_0.7045301640180532","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.6","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.6","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"409501fd79b29580648f35ad4db3e44ee0ada33f","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.6.tgz","fileCount":52,"integrity":"sha512-84RO7bmEBYwVJGLJFW17xMZoE5kKogbtA3mOx7cuxGXJBVplEcP1w0BSpcDnOhmfRS9M+V1plnSRUnemXip0cQ==","signatures":[{"sig":"MEYCIQDr+/sP4vFYDl/RiUNVBZZ3c7tdGxuk00APCUjvcdviKQIhAJoJQ1bgTaJH/6OyOtMMaavQMZYy/n1ZffAwsmJWaqW7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261700},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"261d1109f8a885ce7ebb93c633179ddbfd0506bc","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.6_1766314230308_0.7320789083776957","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.7","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.7","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"f120fa37a920d1b2e19d3447489bf03284f37431","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.7.tgz","fileCount":46,"integrity":"sha512-d8uD8Xeh8/xIcenuQXiWPCOi9Dgkj0Fp1Llu2lsEEPGXGavTxw8DrapvnLax6aDp+LuhXfT9/8Hw57pIp1fNpQ==","signatures":[{"sig":"MEQCIDjQRQi8rVAI7FhygJusjI6Z7/ijFl1vYm0vGjXneBUJAiB8wdsG81cKjtUyXoI8DzdDWduFEOhrrd/9w5GfGtgzRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222762},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"127b250bf48bbb632f64d313856eef2f021a1852","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.7_1766316752189_0.5060758627552109","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.8","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.8","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"f5c4cfb323da7fdb9b4efa0eef15d3790861bfa2","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.8.tgz","fileCount":46,"integrity":"sha512-OZpXwjIwDCSpFNxvpbcM9eSvO/v8b7UYISZLJQjHq/Bq1DDlo/jMrUJn2XoG2Nr1WO9wN9Cby+D4OUfW6gxn1g==","signatures":[{"sig":"MEQCIF5GN1j5C2EmzRDVvXgvr9DYHrYaONLdvrw2iEOnr4tmAiBRG0KJpYc7ynVHPFTR20mV9CNckNLrwhBd7NOOrwufrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226493},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2feb7f6290073d93f07233ae3ceb973a1d0eaedf","scripts":{"test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run clean --silent && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","build:fast":"npx tsc -p tsconfig.json","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.8_1766318059596_0.7422011278760758","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.9","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.9","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"55cc1128d39fc8be3376750b27ade2702771ac1d","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.9.tgz","fileCount":46,"integrity":"sha512-CksjJODepjSxTWNRpesw9bKlAIEEBDyy5nDY/B8zpWkLOLsI5LJCGFTwVlWJR/hthkq0lTpFT/qxlPm50dg3Zg==","signatures":[{"sig":"MEYCIQDtP6WH6oLyT8bbn8EZ3ujrTbiebB9Fm1cWOpO3IItH7gIhAO/8iTvPyqPtZBfeNn9IgYBHMDBKscdBuwyYAEdjmKd0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230145},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e77aaeb127f1238414d665bbcca72062e1e3ab4f","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","@biomejs/biome":"^2.3.10","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.9_1766409099873_0.6621517204562808","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@mcp-abap-adt/auth-stores","version":"0.2.10","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.2.10","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"c1622e78881ca401a2de6a935a98f53054098f83","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.2.10.tgz","fileCount":48,"integrity":"sha512-awH7seP7szMKgjOoUUxDsKZMN4OLrRjT+0ldX/Sigspi9IDFrIkiC4SpI37qkKIDUQyjy1nGc5I6nb/w+AAaGQ==","signatures":[{"sig":"MEQCIFUtNSqguZVjGs3QyBT0RTBlrjoko0PG1dwIldNLZtPKAiAexwxcY0dCAy3rs6pg1P6zlmeWNj1K0ZsNFopQRN9Aow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239412},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1da44b601bef860ffd89d78e4597e5feebe20f0a","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.2.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","pino":"^10.1.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","pino-pretty":"^13.1.3","@biomejs/biome":"^2.3.10","@types/js-yaml":"^4.0.9","@mcp-abap-adt/logger":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.2.10_1766649272779_0.1869298593354567","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@mcp-abap-adt/auth-stores","version":"0.3.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@0.3.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"cf7b77185905bf913747b33fa731c9a0a2f4fa88","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-0.3.0.tgz","fileCount":48,"integrity":"sha512-kLMeBQbIE71IgGS8qXJuukGRdmZFrfvNuhh5bf29uinkqyogivnQrx3B4gd8eAHnDQkzd7Lld6SZiizs50bK8w==","signatures":[{"sig":"MEYCIQCYliiKQ8/oopqU6+lSK6pObL7wyrTg+5/iptcN9shiCQIhAN8Li+GKkeOwU3mDqYsNyLbHEQfHhdq43QpLy92o371o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239258},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6a561e2f5a07183083002c4463d8cbb0cc10bdd9","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^0.2.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","pino":"^10.1.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","pino-pretty":"^13.1.3","@biomejs/biome":"^2.3.10","@types/js-yaml":"^4.0.9","@mcp-abap-adt/logger":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_0.3.0_1767184513418_0.6225499657627045","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@mcp-abap-adt/auth-stores","version":"1.0.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@1.0.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"49f19b7fb67964d6da236f3e2dfa0636df6cb58b","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.0.0.tgz","fileCount":48,"integrity":"sha512-owExS3IaaOFzuqEQHQ5UdkYCySng7QZyTCZviBLBfA/5l7E9tp6bvPf/Fo3feirM+9mBuLojzx2hwsuaUv19Fw==","signatures":[{"sig":"MEQCIEZrEnbfzDeatPAp+FgxETWCu1GeHzziwH+2uGbahVUmAiAHkiPW2g8cO4oKa1ltSve+8aeBETzziam4GY6EsVyJhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244497},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"30751dccdaeb26a6fc68c00c54ec9a5bffe859a9","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","pino":"^10.1.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","pino-pretty":"^13.1.3","@biomejs/biome":"^2.3.10","@types/js-yaml":"^4.0.9","@mcp-abap-adt/logger":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.0.0_1770752870207_0.8179113835688405","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@mcp-abap-adt/auth-stores","version":"1.0.1","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@1.0.1","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"37e13706ab38ad47c96c840b209943f17a7169b2","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.0.1.tgz","fileCount":48,"integrity":"sha512-TdKtPauCjPOqw70e9pyU8iVxMqIGPkjSbr1tOQJL30vtZVxdHwr+9huH7w/03A2uTZN9wiHBrLmyrvAvLQYoHw==","signatures":[{"sig":"MEQCIA/7NMCnqNCtt7sGb+g+x+boIj8D7SCL7sjuF9HlMTaVAiAWEAbf59LfxEfGcTgnydiwFrge2WkundeQXkHDk4dSxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244568},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d87810378c0be2e252c1aa0f74e4a79e772fc46d","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","pino":"^10.1.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","pino-pretty":"^13.1.3","@biomejs/biome":"^2.3.10","@types/js-yaml":"^4.0.9","@mcp-abap-adt/logger":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.0.1_1770758648161_0.7028780430283885","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@mcp-abap-adt/auth-stores","version":"1.0.2","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@1.0.2","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"34931cc4d4002ee9c6d1d943b04382057eb87582","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.0.2.tgz","fileCount":48,"integrity":"sha512-iYcp5TQJZYv4SVdXBBEdrLGI6crwHIOA8s2TENHGTG76jSk/o+95v6ESvEyK2G+R7EzGcbv4m6pXGyCsuaoTDQ==","signatures":[{"sig":"MEUCIDcLA4oM6PNpKR1W6MN71CJwgmaac/sHfAKBI6CWiNpwAiEArasd51KFLlZ+BoCYH/64bVi6OmtjUExWsNI/UQlf4nM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246638},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9adebaa08cd8919cea618255ebb439c2f9ccd010","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.6.2","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"24.11.1","dependencies":{"dotenv":"^17.2.1","@mcp-abap-adt/interfaces":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","pino":"^10.1.0","js-yaml":"^4.1.1","ts-jest":"^29.2.5","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.2.1","pino-pretty":"^13.1.3","@biomejs/biome":"^2.3.10","@types/js-yaml":"^4.0.9","@mcp-abap-adt/logger":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.0.2_1770849704008_0.9096379746699059","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@mcp-abap-adt/auth-stores","version":"1.0.4","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"MIT","_id":"@mcp-abap-adt/auth-stores@1.0.4","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"411cf344b614852fa8ae701fedf386f8585eadf6","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.0.4.tgz","fileCount":48,"integrity":"sha512-VZOUMR7AtMHXhgiWFkx5VmbFFaEqeYWYijE5rFUWlcAgfzz7yO1w2cRFxTHYJAB5yRWbaCE4KgFxvAr8nJlmJA==","signatures":[{"sig":"MEQCIEzGnaqdDzdtqLdFqUTrdAyWb1xUGr9Nl8RY/gKNUPEYAiB1gm3+K6Dv+5BjKMkEEMwf/yk+CFcgYfazHyqbLOYhBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247538},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"aeeab0a6984a978f68efbeee2ce8b25dade6121e","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.10.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"25.6.1","dependencies":{"dotenv":"^17.3.1","@mcp-abap-adt/interfaces":"^5.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^4.1.1","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@types/js-yaml":"^4.0.9","@mcp-abap-adt/logger":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.0.4_1773480389877_0.9937376704132119","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@mcp-abap-adt/auth-stores","version":"1.2.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@1.2.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"f73da467e2986dcf02c26e27afe87f4d42ef614b","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.2.0.tgz","fileCount":49,"integrity":"sha512-Sy79AR3KEdJ4GYzwRWnHF8QtsGbALLmJt/gXKtjBSnaJ8sCfOl8dn0x5KepipXXrgNRoECAtOw3ACbLo4Zw2vQ==","signatures":[{"sig":"MEUCID3hte6wRm8BX/fMklzLPfKNinNoUtFM/B87toiOM5VQAiEA7E/3SZWBzL1d4G/m3LPNu+JJ2vXVbvKvt9ZUnZSG/XA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDL5MFME9aG3XtS2QtUnKaJr4busU1l8tPNeMB0wpZ2LAIgQzwywgYRPN97cwty/Qex5bdeYg24K9tT0KIhKNCSHNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294392},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2741a3169bff13d3ab3f63da7dedaedeeed1b24d","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^17.3.1","@mcp-abap-adt/interfaces-auth":"^1.2.0","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^4.1.1","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@types/js-yaml":"^4.0.9","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.2.0_1790199278422_0.37359439388045224","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@mcp-abap-adt/auth-stores","version":"1.2.1","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@1.2.1","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"68de6eec3e2949660abd946273e1fe0640f825af","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.2.1.tgz","fileCount":49,"integrity":"sha512-I3QSGHUO3MfudKRqDYgIgWDAKeH3nJ13wgM++DLoEOLywyP2vZnRjD8yg7WXrj5lmXAFw1xw0i7TJKczg84tHg==","signatures":[{"sig":"MEQCICwaS8JjZbsin8eypCCF4jWeQZ1vGZDqQbTcJQhg7CIvAiAhzR/ZC6z6h/S2V5/GeR/qEpS007S4M1vCQYfPQtdJ/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB10aIyHi2sZ9lRRc9CpJ833SyJ2a3LVVTmLYnCglPZlAiBiXXq0E6v0kzifHOJ2yzIPg1DVEXEtDhUYahppaNrL4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295186},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5b632b258a8d21981eec4c1b822655518f65a48f","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^2.0.1","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.2.1_1790405774532_0.7320362102047107","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@mcp-abap-adt/auth-stores","version":"1.2.2","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@1.2.2","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"30cb993f5af81f6632060f054fedc3ca624ad64e","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.2.2.tgz","fileCount":49,"integrity":"sha512-EOCxll9NGsxCRezG0JqPfdUtNMBLDHh7b2BW0x+UfgvLgUhWIvqpASbQQy14Lhnu7dWvYKWADddPnohFIWVmWA==","signatures":[{"sig":"MEYCIQC716WsZcodp5Ost/ruzN7+LjnWuWsQk1b7PlP41SGiFwIhALHc9s18Gl09xif5w1t5onCJGT7CKd/pQNG6xldfPvKv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDLbEzj3g5xuWz9Gs+/OmNk/Z2kGVVAYUt1UBauoZAk1gIhAKTO55uuaAvl6ksb5OUUrSnRH3otVOd+NeD9FBWDz8Vi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296737},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2154d7256b873fb20e71036ea71e09d91136d8e0","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^2.0.1","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.2.2_1790425997663_0.9228686998105151","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@mcp-abap-adt/auth-stores","version":"1.2.3","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@1.2.3","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"83b0b417b951bf3b890c157bc25e457c54f6ece8","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.2.3.tgz","fileCount":49,"integrity":"sha512-6qj9jXbI39p1bAbaZq+4ip5RlaWyktQktH82Yxr9dmwkaysanxo4ExiLCOJOQUEiC9Bve4AY2wj32WfYGyPWhw==","signatures":[{"sig":"MEUCIQDu83gOaf8i5iAK8i4fQO3KvYfH1i5gEcH9QUn9H3gpqQIgczame7QflpKssafLVxM1iB8uERsTyKKSO9c1RVU0QjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCkTOWTciyki+Jtg3B1cqSlPzrzoIc7IcjYA196QPFqFgIgA4v4FEUGkZd8mHnCQ+F2VQSarfccGWlcuNfeWmqgVHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300900},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"4c0e5a7f67863b80618e33212ade2e98734ba13f","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^2.0.1","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.2.3_1790429325918_0.19434639848982838","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@mcp-abap-adt/auth-stores","version":"1.2.4","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@1.2.4","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"f2c783a6aa76148e4c006644d4dc5bebbf35feaa","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-1.2.4.tgz","fileCount":51,"integrity":"sha512-f0VHpwic95PxK5quiONWpLpTtFF6BCUrva8XBoYg+K/n55v/Vk3yfSbTLstPyjdxclLruz473A33se4KJGRGpg==","signatures":[{"sig":"MEUCIQCeO++sdEwBkgQlTHVYzhyDklSOtllP3bbYS1/rjByQZQIgTfCL3lHFz6F1E2Bgf25v3t1n1EUk+g0HDheGU61mLcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAl2hoTTTDC7BoI2AWp0FAMWEEz1Wnr16kuGFGRGdjPaAiEAsOG+FwDk/YzaAZxRmrlio/5vKn/bb5psQpcwaYnMgHc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305776},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8950ec5d349e266ac7f3f1a09c1447f4290b3aea","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^2.0.1","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_1.2.4_1790490239011_0.4576325753130257","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@mcp-abap-adt/auth-stores","version":"2.0.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@2.0.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"3c70c2b6f03aaadd0d86db8ca65e5b2cb31340c2","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-2.0.0.tgz","fileCount":53,"integrity":"sha512-iWe1AucKPE79RUSyA9E8CEL3Fn+9hlJs+xpNIbTvp6QHTBahQVYClaofa7r64KiH2KWRpdZZP6faWCdk7qL9hQ==","signatures":[{"sig":"MEYCIQD336/6L0bt3z4hkjers/cDEQez013szVd3B6FZzHJ1BQIhAPRlUWSmSp8C7GpaO+OObCVifeWGTJuunBck2LNS/L9/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIECtAszUYIdKBHHCA7G8Fl04L6A4oHhIYTdfAcRKiG9zAiAQiEPS5GlA+kQ/cG1qsaucUa+85VD3AtsC1+rsYfxh1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":331233},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2a7fc4b6ac6d94a35944d80890ff2f1f9ae80e8c","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^3.0.0","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_2.0.0_1790796627551_0.6843673093258413","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@mcp-abap-adt/auth-stores","version":"3.0.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@3.0.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"7dea997f568c0022c43aed21923297df9f946d05","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-3.0.0.tgz","fileCount":57,"integrity":"sha512-ot4TStAUgDTJm/FC8KuAAZE5kN765lbLZMic4uGFJ5LJQrVRiRtAWc9MKUFPKkoqEjZqlWQ+MlcXlZjmn3KDpA==","signatures":[{"sig":"MEYCIQCBeQwrSgqxfYCL0AlaJwW8UKFBZMM24npzH4z/3FQ9owIhANx+mCDJh3io9V0s/BxpD1xrSIVnOCioUhOTJjmz4N3d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDvq3hhrxUIACTyIw2bIlHETZcprM10NsnI9LOPSn4o4AIhAOH609kbZ8DFuva6WdcwRrSs15WNz6rA0DSb0+n29ev0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295042},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a4f4612611fb7d5a426162e9d3da9ebd898b2b12","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^3.0.0","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^2.0.0","@mcp-abap-adt/interfaces-auth-broker":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_3.0.0_1790856054620_0.5006023528657688","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@mcp-abap-adt/auth-stores","version":"3.1.0","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","_id":"@mcp-abap-adt/auth-stores@3.1.0","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"feedb13de41bb6e4068b62804168b4b966df89b3","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-3.1.0.tgz","fileCount":59,"integrity":"sha512-xS7yIasaxZTH4bgK0p1XpSVYZ/y8hQGTHau2R6WWZkxdk3Wje8+OAxHo65SUVInmO3wnQYQuoX5irD/xdwC31A==","signatures":[{"sig":"MEYCIQDtK1cunBtE+hcP+vbgAJvIyqVGdhNEMnSHHSlIBkLgqgIhAKwfixNiT0af8SR3Yux1ROIG6UwUyBZn2G0HtjvlBWoI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCr/B+NF4VS40AKsnA7sa7+yUDSREBL7wM0yHdP7Zv4tQIhAJKfRfdNBGgvFoyg/5qa2QV3Dk5dGe2+ZwgySPqmbw3n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319554},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3c76617239e2f7e067975316079e43da873c17a8","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^3.0.0","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^2.0.0","@mcp-abap-adt/interfaces-auth-broker":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-stores_3.1.0_1790933151199_0.7604371112735069","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"_id":"@mcp-abap-adt/auth-stores@3.2.0","bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"dist":{"shasum":"1fd2624e8d60ab41236e7b957af65ba1780e33d3","tarball":"https://registry.npmjs.org/@mcp-abap-adt/auth-stores/-/auth-stores-3.2.0.tgz","fileCount":59,"integrity":"sha512-Q4Uv7Kxdkc5Y5xQge93SaxToMzEs0wfWdcmmpMzTasvM2sPQpXhUX9FRvfY6tSOeracY8RsChCdnElWiO6Z4wg==","signatures":[{"sig":"MEUCIAWwyHYmiT+M+SLVH2Poex1YQ5FjyBIXkfW2GT2KnoqJAiEAvwqCsVzqPB559iXtxmLgMXeLy+maN1SO/41b0k4BYOw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHeq1i09ys1kndForm2sm7AZRVRToQ1Ew8cT8q/9gkUlAiEAgyXxvIMV6VzxOP6lANlbxl6HIDuCcHS1NHMBIC+1hh0="}],"unpackedSize":321385},"main":"dist/index.js","name":"@mcp-abap-adt/auth-stores","types":"dist/index.d.ts","author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"engines":{"node":">=18.0.0"},"gitHead":"ccf7c2b4ab97cbc6f0a1c0b83991220404af6570","license":"LGPL-3.0-only","scripts":{"lint":"npx biome check --write src","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"npm run --silent clean && npx biome check src --diagnostic-level=error && npx tsc -p tsconfig.json","clean":"rm -rf dist tsconfig.tsbuildinfo","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","build:fast":"npx tsc -p tsconfig.json","lint:check":"npx biome check src","test:check":"npx tsc --noEmit","prepublishOnly":"npm run build"},"version":"3.2.0","_npmUser":{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"},"homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"_npmVersion":"11.19.0","description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","directories":{},"maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"_nodeVersion":"26.7.0","dependencies":{"dotenv":"^18.0.4","@mcp-abap-adt/interfaces-auth":"^3.0.0","@mcp-abap-adt/interfaces-utils":"^1.1.0","@mcp-abap-adt/interfaces-auth-sap":"^2.0.0","@mcp-abap-adt/interfaces-auth-broker":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","pino":"^10.1.0","js-yaml":"^5.4.2","ts-jest":"^29.4.6","jest-util":"^30.3.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","pino-pretty":"^13.1.3","@biomejs/biome":"^2.4.7","@mcp-abap-adt/logger":"^0.4.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/auth-stores_3.2.0_1790949394233_0.22862952688423532"}}},"time":{"created":"2025-12-03T22:11:08.796Z","modified":"2026-10-02T13:56:34.547Z","0.1.0":"2025-12-03T22:11:09.188Z","0.1.1":"2025-12-03T22:56:04.905Z","0.1.2":"2025-12-04T00:08:13.030Z","0.1.3":"2025-12-04T11:24:11.308Z","0.1.4":"2025-12-05T10:46:13.296Z","0.1.5":"2025-12-08T06:21:29.152Z","0.1.6":"2025-12-08T17:58:26.145Z","0.1.7":"2025-12-08T19:54:36.035Z","0.2.0":"2025-12-09T11:54:46.429Z","0.2.1":"2025-12-12T19:02:42.359Z","0.2.3":"2025-12-16T16:53:02.883Z","0.2.5":"2025-12-19T17:45:45.078Z","0.2.6":"2025-12-21T10:50:30.487Z","0.2.7":"2025-12-21T11:32:32.358Z","0.2.8":"2025-12-21T11:54:19.745Z","0.2.9":"2025-12-22T13:11:40.019Z","0.2.10":"2025-12-25T07:54:32.942Z","0.3.0":"2025-12-31T12:35:13.559Z","1.0.0":"2026-02-10T19:47:50.358Z","1.0.1":"2026-02-10T21:24:08.466Z","1.0.2":"2026-02-11T22:41:44.196Z","1.0.4":"2026-03-14T09:26:30.042Z","1.2.0":"2026-09-23T21:34:38.515Z","1.2.1":"2026-09-26T06:56:14.611Z","1.2.2":"2026-09-26T12:33:17.751Z","1.2.3":"2026-09-26T13:28:45.996Z","1.2.4":"2026-09-27T06:23:59.104Z","2.0.0":"2026-09-30T19:30:27.676Z","3.0.0":"2026-10-01T12:00:54.716Z","3.1.0":"2026-10-02T09:25:51.290Z","3.2.0":"2026-10-02T13:56:34.329Z"},"bugs":{"url":"https://github.com/fr0ster/mcp-abap-adt-auth-stores/issues"},"author":{"name":"Oleksii Kyslytsia","email":"oleksij.kyslytsja@gmail.com"},"license":"LGPL-3.0-only","homepage":"https://github.com/fr0ster/mcp-abap-adt-auth-stores#readme","keywords":["abap","sap","adt","jwt","authentication","token","store","btp","abap","xsuaa","mcp","abap-adt"],"repository":{"url":"git+https://github.com/fr0ster/mcp-abap-adt-auth-stores.git","type":"git"},"description":"Stores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations","maintainers":[{"name":"fr0ster","email":"oleksij.kyslytsja@gmail.com"}],"readme":"# @mcp-abap-adt/auth-stores\n[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)\n\nStores for MCP ABAP ADT auth-broker - BTP, ABAP, and XSUAA implementations.\n\nThis package provides file-based and in-memory stores for service keys and sessions used by the `@mcp-abap-adt/auth-broker` package.\n\n## Installation\n\n```bash\nnpm install @mcp-abap-adt/auth-stores\n```\n\n## Overview\n\nThis package implements the `IServiceKeyStore` and `ISessionStore` contracts from `@mcp-abap-adt/interfaces-auth-broker`. Since 3.0.0 the two stores are split **by the role of the data**:\n\n| Store | Holds | Implementations here |\n|---|---|---|\n| `IServiceKeyStore` — the **means**: what is used to obtain a session secret | the client (`uaaUrl`, `uaaClientId`, `uaaClientSecret`); `authType`, `grantType`; basic's `username` / `password`; the `snc*`, `oidc*` and `saml*` settings; `serviceUrl`, `sapClient`, `language` | `AbapServiceKeyStore`, `XsuaaServiceKeyStore` (SAP service key JSON), `EnvDestinationStore` (`<dir>/<destination>.env`) |\n| `ISessionStore` — the **secret** that authorizes within a session | `authorizationToken` or `sessionCookies`, their `expiresAt`, `refreshToken` — and what the credential is bound to, `issuedFor` and `issuedBy` (3.1.0) | `AbapSessionStore`, `XsuaaSessionStore`, `EnvFileSessionStore` (files), `SafeAbapSessionStore`, `SafeXsuaaSessionStore` (memory) |\n\nA key store never answers a secret, and a session store refuses to hold means. `basic` and `snc` destinations obtain no session secret: their session holds nothing.\n\n- **File Handlers**: utility classes for JSON and ENV files (exported for consumers; the stores do their own file I/O)\n\n## Responsibilities and Design Principles\n\n### Core Development Principle\n\n**Interface-Only Communication**: This package follows a fundamental development principle: **all interactions with external dependencies happen ONLY through interfaces**. The code knows **NOTHING beyond what is defined in the interfaces**.\n\nThis means:\n- Does not know about concrete implementation classes from other packages\n- Does not know about internal data structures or methods not defined in interfaces\n- Does not make assumptions about implementation behavior beyond interface contracts\n- Does not access properties or methods not explicitly defined in interfaces\n\nThis principle ensures:\n- **Loose coupling**: Stores are decoupled from concrete implementations in other packages\n- **Flexibility**: New implementations can be added without modifying stores\n- **Testability**: Easy to mock dependencies for testing\n- **Maintainability**: Changes to implementations don't affect stores\n\n### Package Responsibilities\n\nThis package is responsible for:\n\n1. **Implementing storage interfaces**: Provides concrete implementations of `IServiceKeyStore` (the means) and `ISessionStore` (the session secret) defined in `@mcp-abap-adt/interfaces-auth-broker`\n2. **File I/O operations**: Handles reading and writing service key JSON files and session `.env` files\n3. **Data format conversion**: Converts between interface types (`IConfig`, `IConnectionConfig`, `IAuthorizationConfig`) and internal storage formats\n4. **Platform-specific handling**: Provides different store implementations for ABAP, BTP, and XSUAA with their specific data formats\n\n#### What This Package Does\n\n- **Implements interfaces**: Provides concrete implementations of `IServiceKeyStore` and `ISessionStore`\n- **Handles file operations**: Reads/writes JSON and `.env` files using atomic operations\n- **Manages data formats**: Converts between interface types and `.env` / JSON key names\n- **Provides utilities**: File handlers (`JsonFileHandler`, `EnvFileHandler`) for safe file operations. The `.env` stores do not use `EnvFileHandler`: they read with dotenv and rewrite only their own keys of a file, keeping every other line\n\n#### What This Package Does NOT Do\n\n- **Does NOT implement authentication logic**: Token acquisition and OAuth2 flows are handled by `@mcp-abap-adt/auth-providers`\n- **Does NOT orchestrate authentication**: Token lifecycle management is handled by `@mcp-abap-adt/auth-broker`\n- **Does NOT know about token validation**: Token validation logic is not part of this package\n- **Does NOT interact with external services**: All HTTP requests and OAuth flows are handled by other packages\n\n### External Dependencies\n\nThis package interacts with external packages **ONLY through interfaces**:\n\n- **`@mcp-abap-adt/interfaces-auth-broker`** (`^1.1.0`): `IServiceKeyStore`, `ISessionStore`, `IConfig`, `IConnectionConfig`, `DestinationGrant` — the broker's port: the destination and the stores that hold it. 1.0.0 carries `grantType`, `expiresAt` and the `oidc*` / `saml*` fields; 1.1.0 adds `issuedFor` / `issuedBy`\n- **`@mcp-abap-adt/interfaces-auth-sap`** (`^2.0.0`): `IAuthorizationConfig` — the UAA client\n- **`@mcp-abap-adt/interfaces-auth`** (`^3.0.0`): `STORE_ERROR_CODES` and `StoreErrorCode` — the failure vocabulary, which means the same off SAP\n- **`@mcp-abap-adt/interfaces-utils`** (`^1.1.0`): `ILogger`\n- **`dotenv`** (`^18.0.4`): parses `.env` files\n- **Not `@mcp-abap-adt/interfaces`**: that facade is **deleted** as of its 52.0.0. npm still serves 51.0.0 to anyone pinned to it, with every symbol re-exported and deprecated, and nothing further ships there — a consumer takes the package that declares the name\n- **No direct dependencies on other implementation packages**: all interactions happen through those contracts\n\n## Store Types\n\n### Key stores — the means\n\n- **`AbapServiceKeyStore`** — reads ABAP service keys (`{destination}.json`, nested `uaa` object)\n- **`XsuaaServiceKeyStore`** (alias **`BtpServiceKeyStore`**) — reads XSUAA service keys (direct format, or `cf service-key` output with a `credentials` wrapper)\n- **`EnvDestinationStore`** — a destination's means in `<directory>/<destination>.env`, with a write method of its own; optionally falls back to another key store field by field\n\nA SAP service key holds an OAuth client and nothing else, so both service key stores answer `authType: 'jwt'` from `getConnectionConfig`. A service key cannot state which grant a destination uses (the grants a client may use are declared on the XSUAA instance, and a client permitted several serves all of them), so the grant comes from whoever builds the store (3.1.0):\n\n```typescript\nnew AbapServiceKeyStore(dir, { grantType: 'authorization_code', log });\nnew XsuaaServiceKeyStore(dir, { grantType: 'client_credentials' });\nnew AbapServiceKeyStore(dir, log); // the 3.0.0 form: no grant answered\n```\n\n- **`grantType`** given is answered by `getConnectionConfig` and `getServiceKey` for every destination that has a key; without it **no `grantType`** is answered, as in 3.0.0. Nothing is inferred. Alternatively, state the grant in an `EnvDestinationStore` — on its own, or with the service key store as its fallback.\n- **The second argument** is `{ grantType?, log? }` or, as in 3.0.0, the logger itself (an object with a logger's `debug` / `info` / `warn` / `error` — `console` included). Anything else is a `TypeError` at construction, naming what was wrong and never a value: a string or another non-object, an option it does not take, a grant it does not know.\n- **No `serviceUrl` option.** The resource URL is means of the destination, not of the key: state it in an `EnvDestinationStore` (`setDestination(name, { serviceUrl })`, `XSUAA_MCP_URL` with `XSUAA_DESTINATION_VARS`) with the key store as its fallback. An XSUAA key's own `url` is still read as before (a `url` without `authentication` in it).\n- They answer **no token** (2.x answered `authorizationToken: ''`) and never `issuedFor` / `issuedBy`.\n\n### Session stores — the secret\n\n**File-based** (`.env` files):\n- **`AbapSessionStore`** (alias **`SamlSessionStore`**) — `SAP_JWT_TOKEN` or `SAP_SESSION_COOKIES_B64`, `SAP_EXPIRES_AT`, `SAP_REFRESH_TOKEN`, `SAP_ISSUED_FOR`, `SAP_ISSUED_BY`\n- **`XsuaaSessionStore`** (alias **`BtpSessionStore`**) — `XSUAA_JWT_TOKEN`, `XSUAA_EXPIRES_AT`, `XSUAA_REFRESH_TOKEN`, `XSUAA_ISSUED_FOR`, `XSUAA_ISSUED_BY`\n- **`EnvFileSessionStore`** — the `SAP_*` secret keys of one given file (`--env /path/to/.env`), whatever the destination\n\n**In-memory** (non-persistent):\n- **`SafeAbapSessionStore`** (alias **`SafeSamlSessionStore`**)\n- **`SafeXsuaaSessionStore`** (alias **`SafeBtpSessionStore`**)\n\nEvery session store follows the same rules:\n\n- **The secret alone.** `saveSession` and `setConnectionConfig` take `authorizationToken`, `sessionCookies`, `expiresAt` (epoch ms), `refreshToken`, and what the credential is bound to, `issuedFor` and `issuedBy` (see *The binding*). A write carrying **any other field** — `serviceUrl`, `authType`, `grantType`, `username`, `password`, the `snc*`, `oidc*` and `saml*` fields, `sapClient`, `language`, `uaaUrl` / `uaaClientId` / `uaaClientSecret`, or a field no store knows — is refused with a `RefusedFieldsError` (code `INVALID_CONFIG`) whose message and `fields` name the fields, never a value. A field given as `undefined` is not carried.\n- **No serviceUrl.** A session needs none, and none is answered.\n- **No client.** `setAuthorizationConfig` always refuses (`IAuthorizationConfig` is the client, which is means); `getAuthorizationConfig` answers `null`. A refresh token is written through `saveSession`, and answered by `loadSession`.\n- **One secret kind at a time.** Writing a token clears stored cookies, and writing cookies clears the token. `expiresAt` is written and cleared with its credential: a new credential written without `expiresAt` does not keep the old one's. A credential given as `''` clears it, with its `expiresAt`; clearing the kind not held (`authorizationToken: ''` while cookies are stored) changes nothing. `expiresAt` must be a non-negative whole number of epoch milliseconds — what the file stores read back — anything else is refused. The refresh token is kept until a write gives another (`''` clears it).\n- **The XSUAA stores hold a token.** They refuse cookies, and a write that would leave the session without a token.\n- **What is answered.** `loadSession`: the secret fields present — with `issuedFor` / `issuedBy` while a credential is held — or `null` when there are none. `getConnectionConfig`: the same without the refresh token, or `null`.\n- **A file store touches only its own keys.** A write sets or removes the secret keys and leaves every other line of the file — keys, comments, blank lines — byte for byte. `deleteSession` removes the secret keys, and the file only when no key is left.\n- **The binding** — see below.\n- Constructors: `AbapSessionStore(directory, log?)`, `XsuaaSessionStore(directory, log?)`, `EnvFileSessionStore(envFilePath, log?)`, `SafeAbapSessionStore(log?)`, `SafeXsuaaSessionStore(log?)`. File stores create their directory if it is missing. A string where the logger goes — 2.x's `defaultServiceUrl`, passed by a JavaScript caller — throws a `TypeError` at construction saying so.\n\n### The binding: `issuedFor` and `issuedBy` (3.1.0)\n\nA session store keeps, beside the credential, two strings (`IConnectionConfig`, `@mcp-abap-adt/interfaces-auth-broker` 1.1.0): `issuedFor`, the URI of the resource the credential was obtained for, and `issuedBy`, the URI of who issued it and to which client. The broker (`@mcp-abap-adt/auth-broker` 4) writes both with every secret and uses a stored secret only when both equal what the destination's means give — so a secret is never presented to another resource, and one from another issuer or client is never used in place of this one. The store keeps the strings **as given**: it neither canonicalises nor judges them; the broker canonicalises both sides before it compares.\n\nThey follow the credential, extending the rules above:\n\n- **A credential written** (a token or cookies, including one replacing the other kind) takes the `issuedFor` / `issuedBy` its write gives; one the write leaves out — absent or `''` — is cleared. A new credential never inherits the old one's binding.\n- **No credential written** (only `expiresAt`, `refreshToken`, or the binding itself): a binding field given sets it, `''` clears it, absent (`undefined`) keeps it.\n- **No credential held** after the write (none written yet, or `''` cleared it, or `deleteSession`): neither is kept, and neither is answered.\n- A value that is not a string is refused with an `InvalidConfigError` naming the field.\n- File keys: `SAP_ISSUED_FOR` / `SAP_ISSUED_BY` (`AbapSessionStore`, `EnvFileSessionStore`), `XSUAA_ISSUED_FOR` / `XSUAA_ISSUED_BY` (`XsuaaSessionStore`); fields in the in-memory stores. A file store writes **both keys with every credential, empty when there is none**, and removes them with the credential.\n- Key stores never answer them, and `EnvDestinationStore.setDestination` refuses them like any secret field.\n\n**A custom `ISessionStore`** (a database, a message log, a secret store) must persist both fields beside the secret. One that drops them still type-checks, but the broker then never uses its sessions — every process start logs in afresh, a browser each time for an interactive grant.\n\n#### Files written before 3.1.0\n\nA file written by auth-stores 2.x or 3.0.0 (or auth-broker 3.x) has no binding key. While it holds a credential, the session store answers the binding its writers left beside the token — the 3.x broker wrote the URL with the token, and the 3.x CLI and broker the client — **composed, not canonicalised**:\n\n| Field | Composed from (ABAP / `EnvFileSessionStore`) | XSUAA store | When |\n|---|---|---|---|\n| `issuedFor` | `SAP_URL`, with `sap-client=<SAP_CLIENT>` when `SAP_CLIENT` is stated | `XSUAA_MCP_URL` (+ `XSUAA_CLIENT`) | the file holds a token or cookies and the URL key |\n| `issuedBy` | `SAP_UAA_URL` with `client_id=<SAP_UAA_CLIENT_ID>` | `XSUAA_UAA_URL` + `XSUAA_UAA_CLIENT_ID` | the file holds a **token** and both keys; a cookie session never had an ACS stored, so it has none |\n\nThe parameter is appended with `?`, or `&` when the URL already has a query; its value is percent-encoded. Case, port, path and trailing `/` stay as written. These are exactly the destination store's means keys (`ABAP_DESTINATION_VARS` / `XSUAA_DESTINATION_VARS`). A file without them answers no binding, and the broker logs in once afresh.\n\nEach binding key stands alone: present — **empty included** — it is what a 3.1.0 writer stated, and its legacy source is no longer read. Since a file store writes both keys with every credential, the **first credential written by 3.1.0 ends the legacy reading** of that file; a write that keeps the credential (a new refresh token, an expiry) writes the binding it answered at that moment, which then no longer follows the means keys.\n\n**A shared file** — `EnvDestinationStore` and a session store on one `<destination>.env` — holds `SAP_URL` / `SAP_UAA_*` as **means**. A session written by 3.1.0 carries its own binding keys, so later changes of those means do not move it (whichever store wrote first). A session written before 3.1.0 is read as above: its binding is composed from the **current** means keys. **Remaining risk:** if those keys were edited (by hand, or by `setDestination`) before the first 3.1.0 write — or a 3.0.0 store rewrote the token after the means had moved — the session answers a binding nobody checked, and the broker may present that secret to the edited URL. The first 3.1.0 write of the session ends it.\n\n## Usage\n\n### Composing the two stores\n\nThe consumer — the broker's caller — decides where means and secrets live; no store picks a directory by itself.\n\n```typescript\nimport {\n  AbapServiceKeyStore,\n  AbapSessionStore,\n  EnvDestinationStore,\n} from '@mcp-abap-adt/auth-stores';\n\n// One directory: means and secret in the same <destination>.env.\n// Each store touches only its own keys, so neither loses the other's.\nconst sessions = '/home/me/.config/mcp-abap-adt/sessions';\nconst keyStore = new EnvDestinationStore(sessions, {\n  // a SAP service key supplies the client and URL; the .env file the grant\n  fallback: new AbapServiceKeyStore('/home/me/.config/mcp-abap-adt/service-keys'),\n});\nconst sessionStore = new AbapSessionStore(sessions);\n\n// Or two directories: the secret apart from the means.\nconst meansStore = new EnvDestinationStore('/etc/mcp-abap-adt/destinations');\nconst secretStore = new AbapSessionStore('/var/lib/mcp-abap-adt/sessions');\n```\n\nWriting means is `EnvDestinationStore`'s own method — `IServiceKeyStore` is read-only. A given field is set, `null` removes it, a field not given stays:\n\n```typescript\nawait keyStore.setDestination('TRIAL', {\n  authType: 'jwt',\n  grantType: 'authorization_code',\n});\n\nawait keyStore.setDestination('DEV', {\n  serviceUrl: 'https://dev.example.com',\n  authType: 'basic',\n  username: 'DEVELOPER',\n  password: '...',\n  sapClient: '100',\n});\n\nawait keyStore.setDestination('DEV_SNC', {\n  serviceUrl: 'https://dev.example.com',\n  authType: 'snc',\n  sncPartnerName: 'p:CN=DEV, O=ORG, C=DE',\n});\n\n// A public OIDC client: the secret is stated as ''\nawait keyStore.setDestination('IDP', {\n  serviceUrl: 'https://h.abap.example',\n  authType: 'jwt',\n  grantType: 'device_code',\n  uaaUrl: 'https://idp.example/realms/r',\n  uaaClientId: 'public-client',\n  uaaClientSecret: '',\n  oidcIssuerUrl: 'https://idp.example/realms/r',\n  oidcScopes: ['openid', 'offline_access'],\n});\n\n// The secret, after a login, goes to the session store\nawait sessionStore.saveSession('TRIAL', {\n  authorizationToken: '<jwt>',\n  expiresAt: Date.now() + 3_600_000,\n  refreshToken: '<refresh token>',\n});\n```\n\n### EnvDestinationStore\n\n`new EnvDestinationStore(directory, { fallback?, variables?, log? })` — `directory` has no default; a destination is `<directory>/<destination>.env`.\n\n`EnvDestinationStore.forFile(path, { fallback?, variables?, log? })` — one given file, whatever its name (`.env.dev`, `conn.cfg`): every destination name resolves to that file and is not used to find it, as with `EnvFileSessionStore`. The fallback is still asked by the destination name.\n\n- **Reads** every means field of `IConnectionConfig` (`getConnectionConfig`) and the client (`getAuthorizationConfig`: answered whenever `uaaClientId` is stated and not empty — `''` is no id, so no client; `uaaUrl` or `uaaClientSecret` not stated is answered as `''`, so an OIDC client — an issuer, no UAA URL — or a public client — no secret — is a client too. Whether a grant needs those fields is the broker's to decide, not the store's). `getServiceKey` answers both together.\n- **Answers means only**: no token, cookies, expiry or refresh token, from the file or the fallback.\n- **Infers nothing**: a file without `SAP_AUTH_TYPE` states no type; a type or grant it does not know is answered as stored, for the consumer to name. With a fallback, the missing type comes from the fallback: a 1.x/2.x `basic` file without `SAP_AUTH_TYPE` beside a SAP service key reads as `authType: 'jwt'` (the key's) **with** the file's `username` / `password` — state `SAP_AUTH_TYPE=basic` in such a file, or `SAP_AUTH_TYPE=jwt` and `SAP_GRANT_TYPE` for a token destination.\n- **Fallback**: another `IServiceKeyStore` fills, field by field, what the file leaves out. A field the file states — `''` included — wins.\n- **Writes** (`setDestination`, `deleteDestination`): only its means keys. A secret field, or any field that is not means, is refused with a `RefusedFieldsError`; a malformed value (an unknown `authType` or `grantType`, a scope with whitespace, a non-boolean `samlIdpInitiated`) with an `InvalidConfigError` naming the field.\n- **Destination names** are file names: one containing `/`, `\\` or `..` is refused (`InvalidConfigError`) by every store that builds a path from it — `EnvDestinationStore`, `AbapSessionStore`, `XsuaaSessionStore` — for reads and writes. `''` is the file named `.env`. (`forFile` and `EnvFileSessionStore` do not use the name.)\n- **Key names**: `variables: ABAP_DESTINATION_VARS` (the default) or `XSUAA_DESTINATION_VARS`.\n\n### Env file format\n\nOne `<destination>.env` may hold both roles. The **means** keys (read and written by `EnvDestinationStore`, `ABAP_DESTINATION_VARS`):\n\n```bash\nSAP_URL=https://your-sap-system.com\nSAP_AUTH_TYPE=jwt                     # basic | jwt | saml | snc\nSAP_GRANT_TYPE=authorization_code     # authorization_code | client_credentials | passcode |\n                                      # oidc_authorization_code | device_code | password |\n                                      # token_exchange | saml2_pure | saml2_bearer | none\nSAP_CLIENT=100\nSAP_LANGUAGE=EN\n\n# basic\nSAP_USERNAME=DEVELOPER\nSAP_PASSWORD='...'\n\n# snc\nSAP_SNC_PARTNERNAME='p:CN=SID, O=ORG, C=DE'\nSAP_SNC_QOP=9\nSAP_SNC_LIB=/usr/sap/sapcrypto/libsapcrypto.so\nSAP_SNC_MYNAME=p:CN=ME\n\n# the client: its id is what makes one; a missing URL or secret is answered\n# as '' (an OIDC client has an issuer instead; a public client has no secret)\nSAP_UAA_URL=https://uaa.example.com\nSAP_UAA_CLIENT_ID=client-id\nSAP_UAA_CLIENT_SECRET=client-secret\n\n# OIDC\nSAP_OIDC_ISSUER_URL=https://idp.example/realms/r\nSAP_OIDC_AUTHORIZATION_ENDPOINT=...\nSAP_OIDC_TOKEN_ENDPOINT=...\nSAP_OIDC_DEVICE_AUTHORIZATION_ENDPOINT=...\nSAP_OIDC_SCOPES='openid offline_access'   # space-separated\nSAP_OIDC_SUBJECT_TOKEN=...                # token_exchange\nSAP_OIDC_SUBJECT_TOKEN_TYPE=...\nSAP_OIDC_AUDIENCE=...\nSAP_OIDC_ACTOR_TOKEN=...\nSAP_OIDC_ACTOR_TOKEN_TYPE=...\n\n# SAML\nSAP_SAML_IDP_SSO_URL=https://idp.example/sso\nSAP_SAML_IDP_ENTITY_ID=https://idp.example\nSAP_SAML_IDP_CERTIFICATES_B64=<base64 of cert 1>,<base64 of cert 2>   # each certificate's text, base64\nSAP_SAML_SP_ENTITY_ID=https://h.abap.example\nSAP_SAML_ACS_URL=https://h.abap.example/sap/saml2/sp/acs\nSAP_SAML_RELAY_STATE=...\nSAP_SAML_IDP_INITIATED=true               # true | false\nSAP_SAML_CLOCK_SKEW_MS=30000\nSAP_SAML_TOKEN_URL=https://uaa.example/oauth/token/alias/...   # saml2_bearer\n```\n\nThe **secret** keys (read and written by `AbapSessionStore` and `EnvFileSessionStore`, `ABAP_SESSION_VARS`):\n\n```bash\nSAP_JWT_TOKEN=<access token>              # or:\nSAP_SESSION_COOKIES_B64=<base64 of the Cookie header value>\nSAP_EXPIRES_AT=1790000000000              # epoch ms\nSAP_REFRESH_TOKEN=<refresh token>\nSAP_ISSUED_FOR=<URI of the resource>      # 3.1.0: written with every credential,\nSAP_ISSUED_BY=<URI of issuer and client>  # empty when there is none\n```\n\n`XSUAA_DESTINATION_VARS` and `XSUAA_SESSION_VARS` are the same with `XSUAA_`, the URL under `XSUAA_MCP_URL`. Values with spaces or special characters are written in the first quote character they do not contain — `'`, then `` ` ``, then `\"` — so dotenv reads them back unchanged. Two values cannot be written, and are refused with a `StorageError` naming the key: one with a line break (certificates are base64-encoded for that reason), and one containing `'`, `` ` `` and `\"` together (no dotenv quoting reads it back).\n\n**One key per line.** The stores write one `KEY=value` per line. In a hand-written file they find a key where dotenv does — `KEY=value`, `export KEY=value`, `KEY: value`, a quoted value spanning lines, a duplicate (the last wins in dotenv; a write keeps one) — and change nothing else, CRLF line ends included. Every rewrite is read back with dotenv before it replaces the file; if any key would not read as intended, the write is refused with a `StorageError` naming the file and the key, and the file is left alone.\n\n### 2.x session files\n\nA file written by auth-stores 2.x (or auth-broker 3.x) holds means and secret together. 3.0.0 reads it where it is, split by key — nothing is moved:\n\n| 2.x key (ABAP; the XSUAA stores' `XSUAA_*` keys alike) | Role in 3.0.0 | Read by |\n|---|---|---|\n| `SAP_JWT_TOKEN`, `SAP_SESSION_COOKIES_B64`, `SAP_REFRESH_TOKEN` (and the new `SAP_EXPIRES_AT`, and 3.1.0's `SAP_ISSUED_FOR` / `SAP_ISSUED_BY`) | secret | the session store |\n| `SAP_URL`, `SAP_AUTH_TYPE`, `SAP_USERNAME`, `SAP_PASSWORD`, `SAP_SNC_*`, `SAP_UAA_URL`, `SAP_UAA_CLIENT_ID`, `SAP_UAA_CLIENT_SECRET`, `SAP_CLIENT`, `SAP_LANGUAGE` | means | `EnvDestinationStore`, pointed at the same directory |\n\nA session write rewrites only the secret keys, so a 2.x file stays a complete 2.x file. From 3.1.0 the session store also answers the binding the URL and client keys compose (see *Files written before 3.1.0*). A 2.x `basic` or `snc` file is a complete destination as it is. A 2.x `jwt` or `saml` file states no grant — 2.x never wrote one — so add `SAP_GRANT_TYPE` (by hand, or through `setDestination`). A 3.x public-client file (`mcp-sso` stripped its `__public__` secret line) has no `SAP_UAA_CLIENT_SECRET`; from 3.2.0 its client is answered with the secret `''`, a public client, as it is. A file without `SAP_AUTH_TYPE` read with a service key fallback takes the key's `jwt` — see *Infers nothing* above.\n\n### BTP / XSUAA stores\n\n```typescript\nimport {\n  XsuaaServiceKeyStore,\n  XsuaaSessionStore,\n  SafeXsuaaSessionStore,\n  EnvDestinationStore,\n  XSUAA_DESTINATION_VARS,\n} from '@mcp-abap-adt/auth-stores';\n\nconst serviceKeyStore = new XsuaaServiceKeyStore('/path/to/service-keys', {\n  grantType: 'client_credentials', // what the key cannot state (3.1.0)\n});\n// the MCP URL is means: state it in a destination store\nconst keyStore = new EnvDestinationStore('/path/to/sessions', {\n  variables: XSUAA_DESTINATION_VARS,\n  fallback: serviceKeyStore,\n});\nconst sessionStore = new XsuaaSessionStore('/path/to/sessions', logger);\nconst safeSessionStore = new SafeXsuaaSessionStore(logger);\n```\n\n### EnvFileSessionStore (single file)\n\n`EnvFileSessionStore` holds the secret in one given file — the `--env /path/to/.env.dev` case — and `EnvDestinationStore.forFile` reads and writes the means in the same file. Neither uses the destination name to find the file: any name resolves to it.\n\n```typescript\nimport { EnvDestinationStore, EnvFileSessionStore } from '@mcp-abap-adt/auth-stores';\n\nconst envPath = '/path/to/.env.dev';\nconst sessionStore = new EnvFileSessionStore(envPath, logger);\nconst keyStore = EnvDestinationStore.forFile(envPath, { log: logger });\n\nconst means = await keyStore.getConnectionConfig('default');\nconst secret = await sessionStore.loadSession('default'); // the file's secret keys\n```\n\nBesides the contract it offers `getToken`, `setToken`, `getRefreshToken`, `setRefreshToken`. 2.x's `getAuthType()` (the type is means), `save()` and `clear()` (the in-memory layer is gone: writes reach the file at once) were removed.\n\n### Directory Configuration\n\nEvery directory is a constructor parameter; a file store reads and writes only `<directory>/<destination>.env` (or `.json`) and searches nowhere else.\n\n### Service Key Format\n\n**ABAP Service Key** (with nested `uaa` object):\n```json\n{\n  \"uaa\": {\n    \"url\": \"https://...authentication...hana.ondemand.com\",\n    \"clientid\": \"...\",\n    \"clientsecret\": \"...\"\n  },\n  \"abap\": {\n    \"url\": \"https://...abap...hana.ondemand.com\",\n    \"client\": \"001\"\n  }\n}\n```\n\n**XSUAA Service Key** (direct format):\n```json\n{\n  \"url\": \"https://...authentication...hana.ondemand.com\",\n  \"clientid\": \"...\",\n  \"clientsecret\": \"...\",\n  \"apiurl\": \"https://...api...hana.ondemand.com\"\n}\n```\n\n## File Handlers\n\nThis package provides utility classes for safe file operations:\n\n### Error Handling\n\nAll service key stores throw typed errors for better error handling:\n\n```typescript\nimport { \n  BtpServiceKeyStore,\n  FileNotFoundError,\n  ParseError,\n  InvalidConfigError \n} from '@mcp-abap-adt/auth-stores';\nimport { STORE_ERROR_CODES } from '@mcp-abap-adt/interfaces-auth';\n\nconst serviceKeyStore = new BtpServiceKeyStore('/path/to/keys');\n\ntry {\n  const authConfig = await serviceKeyStore.getAuthorizationConfig('TRIAL');\n  console.log('Auth config loaded:', authConfig);\n} catch (error: any) {\n  if (error.code === STORE_ERROR_CODES.FILE_NOT_FOUND) {\n    // File not found - returns null instead of throwing\n    console.error('Service key file not found:', error.filePath);\n  } else if (error.code === STORE_ERROR_CODES.PARSE_ERROR) {\n    // JSON parsing failed or invalid format\n    console.error('Failed to parse service key:', error.filePath);\n    console.error('Cause:', error.cause);\n  } else if (error.code === STORE_ERROR_CODES.INVALID_CONFIG) {\n    // Required UAA fields missing - returns null instead of throwing\n    console.error('Invalid config:', error.missingFields);\n  } else if (error.code === STORE_ERROR_CODES.STORAGE_ERROR) {\n    // File write/permission error\n    console.error('Storage operation failed:', error.operation);\n    console.error('Cause:', error.cause);\n  } else {\n    // Generic error\n    console.error('Unexpected error:', error.message);\n  }\n}\n```\n\n**Error Types:**\n- **`FileNotFoundError`** - Service key file not found (includes `filePath`)\n- **`ParseError`** - JSON parsing failed or invalid format (includes `filePath` and `cause`)\n- **`InvalidConfigError`** - Required configuration fields missing (includes `missingFields` array)\n- **`StorageError`** - File read, write or permission error (includes `operation` and `cause`); a session file that exists but cannot be read raises it — only a missing file is `null`\n- **`RefusedFieldsError`** (code `INVALID_CONFIG`) - A write carried fields the store does not hold: means given to a session store, a secret given to `EnvDestinationStore` (includes `fields`; the message names fields, never values)\n\n**Note**: Most errors result in `null` return values rather than exceptions. Only fatal errors (like JSON parsing failures) throw exceptions.\n\n## File Handlers\n\nUtility classes for working with files:\n\n### JsonFileHandler\n\n```typescript\nimport { JsonFileHandler } from '@mcp-abap-adt/auth-stores';\n\n// Load JSON file\nconst data = await JsonFileHandler.load('TRIAL.json', '/path/to/directory');\n\n// Save JSON file (atomic write)\nawait JsonFileHandler.save('/path/to/file.json', { key: 'value' });\n```\n\n### EnvFileHandler\n\n```typescript\nimport { EnvFileHandler } from '@mcp-abap-adt/auth-stores';\n\n// Load .env file\nconst vars = await EnvFileHandler.load('TRIAL.env', '/path/to/directory');\n\n// Save .env file (atomic write, preserves existing variables)\nawait EnvFileHandler.save('/path/to/file.env', {\n  KEY1: 'value1',\n  KEY2: 'value2'\n}, true); // preserveExisting = true\n```\n\n## Utilities\n\n### Constants\n\n```typescript\nimport {\n  ABAP_DESTINATION_VARS, // means keys of EnvDestinationStore (SAP_*)\n  XSUAA_DESTINATION_VARS, // the same, XSUAA_*\n  ABAP_SESSION_VARS, // secret and binding keys of AbapSessionStore / EnvFileSessionStore\n  XSUAA_SESSION_VARS, // secret and binding keys of XsuaaSessionStore\n  // the 2.x tables, unchanged:\n  ABAP_AUTHORIZATION_VARS,\n  ABAP_CONNECTION_VARS,\n  BTP_AUTHORIZATION_VARS,\n  BTP_CONNECTION_VARS,\n  XSUAA_AUTHORIZATION_VARS,\n  XSUAA_CONNECTION_VARS,\n} from '@mcp-abap-adt/auth-stores';\n```\n\n### Service Key Loaders\n\n```typescript\nimport { loadServiceKey, loadXSUAAServiceKey } from '@mcp-abap-adt/auth-stores';\n\n// Load ABAP service key (auto-detects format)\nconst abapKey = await loadServiceKey('TRIAL', '/path/to/service-keys');\n\n// Load XSUAA service key\nconst xsuaaKey = await loadXSUAAServiceKey('mcp', '/path/to/service-keys');\n```\n\n## Debug Logging\n\nStores support optional logging through the `ILogger` interface. To enable detailed logging:\n\n### Using Logger in Code\n\n```typescript\nimport { AbapServiceKeyStore } from '@mcp-abap-adt/auth-stores';\nimport type { ILogger } from '@mcp-abap-adt/interfaces-utils';\n\n// Create logger (or use your own implementation)\nconst logger: ILogger = {\n  debug: (msg) => console.debug(msg),\n  info: (msg) => console.info(msg),\n  warn: (msg) => console.warn(msg),\n  error: (msg) => console.error(msg),\n};\n\n// Pass logger to store constructor\nconst store = new AbapServiceKeyStore('/path/to/service-keys', logger);\nconst sessionStore = new AbapSessionStore('/path/to/sessions', logger);\n```\n\n### Using Test Logger in Tests\n\nFor tests, use the `createTestLogger` helper which respects environment variables:\n\n```typescript\nimport { createTestLogger } from './__tests__/helpers/testLogger';\n\n// Logger will output only if DEBUG_AUTH_STORES=true is set\nconst logger = createTestLogger('MY-TEST');\nconst store = new AbapServiceKeyStore('/path/to/service-keys', logger);\n```\n\n### Environment Variables\n\nTo enable logging in tests or when using `createTestLogger`:\n\n```bash\n# Enable logging for auth stores (short name)\nDEBUG_STORES=true npm test\n\n# Or use long name (backward compatibility)\nDEBUG_AUTH_STORES=true npm test\n\n# Or enable via general DEBUG variable\nDEBUG=true npm test\n\n# Or include in DEBUG list\nDEBUG=stores npm test\n# Or\nDEBUG=auth-stores npm test\n\n# Set log level (debug, info, warn, error)\nLOG_LEVEL=debug npm test\n```\n\n**Note**: Logging requires explicit enable via environment variables. Both `DEBUG_STORES` (short) and `DEBUG_AUTH_STORES` (long) are supported for backward compatibility.\n\nLogging shows:\n- **File operations**: Which files are read/written, file sizes, file paths\n- **Parsing operations**: Structure of parsed data, validation results, keys found\n- **Storage operations**: What data is saved/loaded, token lengths, refresh token presence, URLs\n- **Token formatting**: Tokens are logged as `<redacted, N chars>` — never a character of the token\n- **Errors**: Detailed error information with context\n\n**Logging Features**:\n- **Token Formatting**: Tokens are logged as `<redacted, N chars>`\n- **Structured Logging**: Uses `DefaultLogger` from `@mcp-abap-adt/logger` for proper formatting with icons and level prefixes\n- **Log Levels**: Controlled via `LOG_LEVEL` or `AUTH_LOG_LEVEL` environment variable (error, warn, info, debug)\n\nExample output with `DEBUG_STORES=true LOG_LEVEL=debug`:\n```\n[INFO] ℹ️ [TEST-STORE] Reading service key file: /path/to/TRIAL.json\n[DEBUG] 🐛 [TEST-STORE] File read successfully, size: 121 bytes, keys: uaa\n[DEBUG] 🐛 [TEST-STORE] Parsed service key structure: hasUaa(true), uaaKeys(url, clientid, clientsecret)\n[INFO] ℹ️ [TEST-STORE] Authorization config loaded from /path/to/TRIAL.json: uaaUrl(https://...authentication...), clientId(test-client...)\n[DEBUG] 🐛 [TEST-STORE] Session loaded for TRIAL: token(<redacted, 2263 chars>), expiresAt, refreshToken(<redacted, 34 chars>)\n```\n\n**Note**: Logging only works when a logger is explicitly provided. Stores will not output anything to console if no logger is passed.\n\n## Testing\n\nThe package includes both unit tests (with mocked file system) and integration tests (with real files).\n\n### Unit Tests\n\nUnit tests use Jest with mocked file system operations:\n\n```bash\nnpm test\n```\n\n### Integration Tests\n\nIntegration tests work with real files from `tests/test-config.yaml`:\n\n1. Copy `tests/test-config.yaml.template` to `tests/test-config.yaml`\n2. Fill in real paths and destinations\n3. Run tests - integration tests will use real files if configured\n\n```yaml\nauth_broker:\n  paths:\n    service_keys_dir: ~/.config/mcp-abap-adt/service-keys/\n    sessions_dir: ~/.config/mcp-abap-adt/sessions/\n  abap:\n    destination: \"TRIAL\"\n  xsuaa:\n    btp_destination: \"mcp\"\n    mcp_url: \"https://...\"\n```\n\nIntegration tests return at once, with a warning, if `test-config.yaml` is not configured or contains placeholder values (the template's). The session write cases write a destination of their own and remove it — they never touch the configured destination's session.\n\n## Architecture\n\n### File Operations\n\n- **Service key stores** read JSON files through `JsonFileHandler`\n- **`.env` stores** read with dotenv and write by rewriting only their own keys: every other line — keys of the other role, comments, blank lines — stays byte for byte, so one file may be shared by `EnvDestinationStore` and a session store\n- Every write is atomic: a temporary file of the writer's own (`<file>.<pid>.<random>.tmp`, created exclusively, removed on failure), then a rename\n- A new file is created `0600`; an existing one is narrowed to its owner's bits on every rewrite (`mode & 0o600`: a 2.x `0644` file becomes `0600`), never widened\n- **Concurrent writers lose nothing.** Writes for one destination run one after another within a store instance. Across instances and processes, every writer of a `.env` file — a session store's secret, `EnvDestinationStore`'s means, `deleteSession`, `deleteDestination` — holds an advisory lock, `<file>.lock` (created exclusively), from its read to its rename. A live lock is waited for, retrying, up to 10 s, then the write fails with a `StorageError` naming the file; a lock older than 30 s is a crashed holder's and is taken over. Readers take no lock: a rename is atomic. A writer that does not take the lock (2.x, an editor) is not excluded — its own `<file>.tmp` is never touched, but its rename may replace a concurrent 3.0 write\n- A malformed `SAP_EXPIRES_AT` is reported by reads (`StorageError`) and replaced by the next write instead of blocking it\n- A file that exists but cannot be read raises a `StorageError`; only a missing file is \"nothing stored\"\n\n### Store Implementation\n\n- Key stores implement `IServiceKeyStore` and answer means only; session stores implement `ISessionStore` and hold the session secret only (both contracts from `@mcp-abap-adt/interfaces-auth-broker`)\n- Every directory is a constructor parameter; no store searches other locations\n- File-based session stores create their directory in the constructor if it is missing\n- In-memory stores (`Safe*SessionStore`) do not persist anything to disk\n- Nothing a store holds reaches a log line or an error message: tokens are logged as `<redacted, N chars>`, means by field name only, `issuedFor` / `issuedBy` by name only\n\n## Dependencies\n\n- `@mcp-abap-adt/interfaces-auth-broker` (^1.1.0) - the store contracts (`IServiceKeyStore`, `ISessionStore`, `IConfig`, `IConnectionConfig`, `DestinationGrant`)\n- `@mcp-abap-adt/interfaces-auth-sap` (^2.0.0) - `IAuthorizationConfig`\n- `@mcp-abap-adt/interfaces-auth` (^3.0.0) - `STORE_ERROR_CODES`\n- `@mcp-abap-adt/interfaces-utils` (^1.1.0) - `ILogger`\n- `dotenv` - Environment variable parsing\n\n## License\n\n**GNU Lesser General Public License v3.0 only** (`LGPL-3.0-only`).\nEarlier published versions were MIT and stay MIT — a licence change is not\nretroactive.\n\nCopyright © 2025–2026 Oleksii Kyslytsia\n\nThis library is free software: you can redistribute it and/or modify it under the\nterms of the GNU Lesser General Public License as published by the Free Software\nFoundation, version 3.\n\nIt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\nwithout even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\nPURPOSE. See the GNU Lesser General Public License for more details.\n\nBoth texts ship with the package and both are needed: [`LICENSE`](LICENSE) is the\nLGPL, [`COPYING`](COPYING) is the GPL it is written on top of, since the LGPL is a\nset of additional permissions over the GPL and cannot be read alone.\n\n**What this means if you depend on this package.** Linking it into your own\nprogram — importing it, as every consumer of an npm package does — does not put\nyour program under the LGPL. What the licence asks is that changes *to this\nlibrary* stay free, and that your users can replace it with their own build.\n\n","readmeFilename":"README.md"}