{"_id":"@abapify/adt-auth","_rev":"5-1e2e6fc5b658a7fd204691a99839f036","name":"@abapify/adt-auth","dist-tags":{"latest":"0.4.1"},"versions":{"0.0.0":{"name":"@abapify/adt-auth","version":"0.0.0","_id":"@abapify/adt-auth@0.0.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"dist":{"shasum":"32395b0134daae271227be31edcfc86420a700bd","tarball":"https://registry.npmjs.org/@abapify/adt-auth/-/adt-auth-0.0.0.tgz","fileCount":2,"integrity":"sha512-iNxhkt9i3erjC1rl4AsggsYWX6ltqjyfqm9eCb1HcPAs23u/itUBz7MWU77mI7EkvCl0MiLTomCdFZ/o2vFsuw==","signatures":[{"sig":"MEUCIQCyXeO7Vbsq35F28l1HXRtrbrdadRz0scXMxL0bJFxgEwIgQyNQAqZkoQmztIj3NdI8tiq2pBxz7P/CMA+pzfJ4sb4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224},"_npmUser":{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"},"_npmVersion":"11.12.1","description":"Placeholder — real package is published via CI/CD (trusted publishing).","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-auth_0.0.0_1776719512166_0.3380581317990703","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@abapify/adt-auth","version":"0.3.5","keywords":["sap","adt","authentication","abap","slc","oauth"],"author":{"name":"Booking.com"},"license":"MIT","_id":"@abapify/adt-auth@0.3.5","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"23dc1cc50ddbba7f341d5d4d3057268d027d5714","tarball":"https://registry.npmjs.org/@abapify/adt-auth/-/adt-auth-0.3.5.tgz","fileCount":2,"integrity":"sha512-GvsG4xVbydK3ZyimS2nFPe2/jF2BpgWmp1EXRXpThGjxfTMc7L8JBX8ojgl3ulGnrFhaBvYud9ZkfPt/xKLy4g==","signatures":[{"sig":"MEUCIQCNSGIMLrTXK+zS7H/izsETOoFMSaU5wsikaaNe7exLogIgHjK6YIybmIz8AE8JiIZumTOgRYLc3BMLWsTLbCgPpFA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-auth@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7635},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./basic":"./dist/basic.mjs","./utils/env":"./dist/utils/env.mjs","./service-key":"./dist/service-key.mjs","./package.json":"./package.json","./plugins/basic":"./dist/plugins/basic.mjs","./plugins/service-key":"./dist/plugins/service-key.mjs"},"gitHead":"185666fe6ccb304e7b08529eb376ec2493131a7a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db3a9ff8-a6b7-49bd-a327-875632a61b90"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-auth"},"_npmVersion":"11.12.1","description":"Authentication package for SAP ADT systems - supports multiple auth methods","directories":{},"_nodeVersion":"24.14.1","dependencies":{"proxy-agent":"^6.4.0","@abapify/logger":"0.3.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-auth_0.3.5_1776723640829_0.3588691382192313","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@abapify/adt-auth","version":"0.3.6","keywords":["sap","adt","authentication","abap","slc","oauth"],"author":{"name":"Booking.com"},"license":"MIT","_id":"@abapify/adt-auth@0.3.6","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"e09950f98ed0d843e8ff10ef18b68abf890a5cf3","tarball":"https://registry.npmjs.org/@abapify/adt-auth/-/adt-auth-0.3.6.tgz","fileCount":2,"integrity":"sha512-Q20E5FLHL0o/pFrN+ZWL/7jEwnfBfI/20jtaChCuh2EtNiwuwLfKwgKvcA+b686B/wqmSwTzC99llsU0GK12fQ==","signatures":[{"sig":"MEQCID8C7+kAeTfJnryMw/jR/X6qg/U1+KXkDu4TQem82vLvAiAuNEaQsss+RWg44yzwVddIsjfvaDDvwF+yky9l3L/QEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-auth@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7635},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./basic":"./dist/basic.mjs","./utils/env":"./dist/utils/env.mjs","./service-key":"./dist/service-key.mjs","./package.json":"./package.json","./plugins/basic":"./dist/plugins/basic.mjs","./plugins/service-key":"./dist/plugins/service-key.mjs"},"gitHead":"489b2b4ad7c2ea972f323d4c356997ac5962ba9e","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db3a9ff8-a6b7-49bd-a327-875632a61b90"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-auth"},"_npmVersion":"11.11.0","description":"Authentication package for SAP ADT systems - supports multiple auth methods","directories":{},"_nodeVersion":"24.14.1","dependencies":{"proxy-agent":"^6.4.0","@abapify/logger":"0.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-auth_0.3.6_1776744787372_0.7775902215109212","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@abapify/adt-auth","version":"0.4.0","keywords":["sap","adt","authentication","abap","slc","oauth"],"author":{"name":"Booking.com"},"license":"MIT","_id":"@abapify/adt-auth@0.4.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"ecb6d70787ac58b219eaed8fc147deb0ee1bcb67","tarball":"https://registry.npmjs.org/@abapify/adt-auth/-/adt-auth-0.4.0.tgz","fileCount":2,"integrity":"sha512-agTQbshAe6dfvwWTQm/Yva+uOmGJVB9RFJ0ukPCQ25RJGQ9wR69tPBK1uhFHSGpkAUCwcVyotTaBaU4jq8JojA==","signatures":[{"sig":"MEYCIQCCmqJX1l+pTK+sp1cKUmvJyfnIh97V5svxXsrHBFliRQIhAIudO6jSavAtpHgrgIyygYT0jWb1IiV1h5Zgg9Cc/tou","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-auth@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7635},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./basic":"./dist/basic.mjs","./utils/env":"./dist/utils/env.mjs","./service-key":"./dist/service-key.mjs","./package.json":"./package.json","./plugins/basic":"./dist/plugins/basic.mjs","./plugins/service-key":"./dist/plugins/service-key.mjs"},"gitHead":"81dc9eea47fe419e41d246f0ec212fa78570a489","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db3a9ff8-a6b7-49bd-a327-875632a61b90"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-auth"},"_npmVersion":"11.13.0","description":"Authentication package for SAP ADT systems - supports multiple auth methods","directories":{},"_nodeVersion":"24.16.0","dependencies":{"proxy-agent":"^6.4.0","@abapify/logger":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-auth_0.4.0_1780072627827_0.5868922886145105","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@abapify/adt-auth","publishConfig":{"access":"public"},"version":"0.4.1","description":"Authentication package for SAP ADT systems - supports multiple auth methods","type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./basic":"./dist/basic.mjs","./plugins/basic":"./dist/plugins/basic.mjs","./plugins/service-key":"./dist/plugins/service-key.mjs","./service-key":"./dist/service-key.mjs","./utils/env":"./dist/utils/env.mjs","./package.json":"./package.json"},"dependencies":{"@abapify/logger":"0.4.1","proxy-agent":"^6.4.0"},"keywords":["sap","adt","authentication","abap","slc","oauth"],"author":{"name":"Booking.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/adt-auth"},"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"gitHead":"9d3b996a5c760a8db67e28c4df3c30098bd29e4a","_id":"@abapify/adt-auth@0.4.1","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-u6mDWFCBYvA5mwKuo9xqPyxqutJoXhZ4AtncYe6GXgELJr01OH2b6gB/zsnaH6/4uMfythgHz3FgPqFnxvm4yw==","shasum":"e912e0994ce05bef5ba5a4f4ae613f0abfe76b3d","tarball":"https://registry.npmjs.org/@abapify/adt-auth/-/adt-auth-0.4.1.tgz","fileCount":25,"unpackedSize":80786,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-auth@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFFgsO0rr+0ueL6OPg1qikplU5snnJqv5jpaW/RDuzDvAiB104EV2Akuz3iue8FenzCebAufPDyAhjX6CCDYm5jMBQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db3a9ff8-a6b7-49bd-a327-875632a61b90"}},"directories":{},"maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/adt-auth_0.4.1_1780074893400_0.46084764892898966"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T21:11:51.999Z","modified":"2026-05-29T17:14:53.848Z","0.0.0":"2026-04-20T21:11:52.312Z","0.3.5":"2026-04-20T22:20:40.997Z","0.3.6":"2026-04-21T04:13:07.511Z","0.4.0":"2026-05-29T16:37:07.979Z","0.4.1":"2026-05-29T17:14:53.573Z"},"bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"author":{"name":"Booking.com"},"license":"MIT","homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-auth#readme","keywords":["sap","adt","authentication","abap","slc","oauth"],"repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/adt-auth"},"description":"Authentication package for SAP ADT systems - supports multiple auth methods","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"readme":"# @abapify/adt-auth\n\n[![version](https://img.shields.io/github/package-json/v/abapify/adt-cli?filename=packages/adt-auth/package.json)](https://github.com/abapify/adt-cli/pkgs/npm/%40abapify%2Fadt-auth)\n\nAuthentication package for SAP ADT systems supporting multiple authentication methods.\n\n## Features\n\n- ✅ **Multiple Auth Methods**: Basic, SLC, OAuth (extensible)\n- ✅ **Secure Storage**: File-based with proper permissions\n- ✅ **Type-Safe**: Full TypeScript support\n- ✅ **Testable**: Easy to mock and test\n- ✅ **Reusable**: Can be used by any Node.js tool\n\n## Installation\n\n```bash\nnpm install @abapify/adt-auth\n# or\nbun add @abapify/adt-auth\n```\n\n## Usage\n\n### Basic Authentication\n\n```typescript\nimport { AuthManager, BasicAuthMethod } from '@abapify/adt-auth';\n\nconst authManager = new AuthManager();\nauthManager.registerMethod(new BasicAuthMethod());\n\n// Login\nconst session = await authManager.login(\n  {\n    method: 'basic',\n    baseUrl: 'https://sap.example.com',\n    username: 'user',\n    password: 'pass',\n    client: '100',\n  },\n  'BHF',\n);\n\nconsole.log('✅ Logged in!', session.sid);\n\n// Later: get credentials\nconst credentials = authManager.getCredentials('BHF');\n```\n\n### SAP Secure Login Client (SLC)\n\n```typescript\nimport { AuthManager, SlcAuthMethod } from '@abapify/adt-auth';\n\nconst authManager = new AuthManager();\nauthManager.registerMethod(new SlcAuthMethod());\n\n// Login (SLC handles authentication via proxy)\nconst session = await authManager.login(\n  {\n    method: 'slc',\n    baseUrl: 'https://sap.example.com',\n    slcProxy: {\n      host: 'localhost',\n      port: 3128,\n    },\n    client: '200',\n  },\n  'BHF',\n);\n\nconsole.log('✅ Logged in via SLC!');\n```\n\n### Multiple Systems\n\n```typescript\n// Login to multiple systems\nawait authManager.login(config1, 'BHF');\nawait authManager.login(config2, 'S0D');\nawait authManager.login(config3, 'PRD');\n\n// List all systems\nconst sids = authManager.listSids();\nconsole.log('Available systems:', sids);\n\n// Set default\nauthManager.setDefaultSid('BHF');\n\n// Get default system credentials\nconst creds = authManager.getCredentials(); // Uses default SID\n```\n\n## API\n\n### AuthManager\n\nMain orchestrator for authentication.\n\n#### Methods\n\n- `registerMethod(method: AuthMethod)` - Register an auth method\n- `login(config: AuthConfig, sid: string)` - Login and create session\n- `getSession(sid?: string)` - Get session (uses default if sid not provided)\n- `getCredentials(sid?: string)` - Get credentials for a session\n- `testSession(sid: string)` - Test if session is still valid\n- `logout(sid: string)` - Delete session\n- `listSids()` - List all available SIDs\n- `setDefaultSid(sid: string)` - Set default SID\n- `getDefaultSid()` - Get default SID\n\n### Auth Methods\n\n#### BasicAuthMethod\n\nUsername/password authentication.\n\n**Config:**\n\n```typescript\n{\n  method: 'basic',\n  baseUrl: string,\n  username: string,\n  password: string,\n  client?: string,\n  language?: string,\n  insecure?: boolean,\n}\n```\n\n#### SlcAuthMethod\n\nSAP Secure Login Client Web Adapter.\n\n**Config:**\n\n```typescript\n{\n  method: 'slc',\n  baseUrl: string,\n  slcProxy: {\n    host: string,\n    port: number,\n  },\n  client?: string,\n  language?: string,\n}\n```\n\n**Prerequisites:**\n\n- SAP Secure Login Client installed and running\n- Web Adapter profile configured and active\n\n## Storage\n\nSessions are stored in `~/.adt/sessions/` with file permissions `0600` (owner read/write only).\n\n### File Structure\n\n```\n~/.adt/\n└── sessions/\n    ├── BHF.json\n    ├── S0D.json\n    └── PRD.json\n```\n\n### Session Format\n\n```json\n{\n  \"sid\": \"BHF\",\n  \"credentials\": {\n    \"method\": \"basic\",\n    \"baseUrl\": \"https://sap.example.com\",\n    \"username\": \"user\",\n    \"password\": \"encrypted\",\n    \"client\": \"100\"\n  },\n  \"createdAt\": \"2025-01-01T00:00:00.000Z\",\n  \"lastUsed\": \"2025-01-01T00:00:00.000Z\"\n}\n```\n\n## Integration with adt-client\n\n```typescript\nimport { createAdtClient } from '@abapify/adt-client';\nimport { AuthManager, BasicAuthMethod } from '@abapify/adt-auth';\n\n// Get credentials\nconst authManager = new AuthManager();\nauthManager.registerMethod(new BasicAuthMethod());\nconst credentials = authManager.getCredentials('BHF');\n\nif (!credentials) {\n  throw new Error('Not authenticated. Run: adt login');\n}\n\n// Create ADT client\nconst client = createAdtClient({\n  baseUrl: credentials.baseUrl,\n  client: credentials.client,\n\n  // Method-specific config\n  ...(credentials.method === 'basic' && {\n    username: credentials.username,\n    password: credentials.password,\n  }),\n\n  ...(credentials.method === 'slc' && {\n    proxy: credentials.slcProxy,\n  }),\n});\n\n// Use client\nconst info =\n  await client.adt.core.http.systeminformation.getSystemInformation();\nconsole.log('System:', info);\n```\n\n## Plugin Architecture\n\nAuth plugins provide authentication methods. AuthManager is generic and delegates to plugins.\n\n### Plugin Contract\n\nAll auth plugins MUST:\n\n1. **Export default** - The plugin must be the default export\n2. **Implement AuthPlugin interface** - Must have `authenticate(options): Promise<AuthPluginResult>`\n3. **Return AuthPluginResult** - Standard format\n\n```typescript\n// Plugin implementation\nimport type {\n  AuthPlugin,\n  AuthPluginResult,\n  AuthPluginOptions,\n} from '@abapify/adt-auth';\n\nconst authPlugin: AuthPlugin = {\n  async authenticate(options: AuthPluginOptions): Promise<AuthPluginResult> {\n    // Your auth logic...\n    return {\n      method: 'cookie',\n      credentials: {\n        cookies: 'cookie-string',\n        expiresAt: new Date(Date.now() + 8 * 60 * 60 * 1000),\n      },\n    };\n  },\n};\n\nexport default authPlugin;\n```\n\n### Available Plugins\n\n- **@abapify/adt-puppeteer** - Browser-based SSO authentication\n\n### Credential Refresh\n\nWhen sessions expire, AuthManager automatically refreshes using the stored plugin:\n\n```typescript\n// AuthManager loads plugin dynamically\nconst pluginModule = await import(session.auth.plugin);\nconst result = await pluginModule.default.authenticate(options);\n```\n\n## Security\n\n### Credential Storage\n\n- **File permissions**: `0600` (owner read/write only)\n- **Directory permissions**: `0700` (owner only)\n- **Password encryption**: TODO (currently plain text)\n\n### SLC Security\n\n- No credentials stored (SLC handles authentication)\n- Only proxy configuration stored\n- Certificate-based authentication via SLC\n\n## Development\n\n```bash\n# Install dependencies\nbun install\n\n# Build\nbun run build\n\n# Test\nbun test\n\n# Type check\nbun run typecheck\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}