{"_id":"@abapify/browser-auth","_rev":"5-b42a87efc519e5a61aa4e9403c43ecd1","name":"@abapify/browser-auth","dist-tags":{"latest":"0.4.1"},"versions":{"0.0.0":{"name":"@abapify/browser-auth","version":"0.0.0","_id":"@abapify/browser-auth@0.0.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"dist":{"shasum":"e8d2a57bced41594c73fa5440e4c37a4c41cc521","tarball":"https://registry.npmjs.org/@abapify/browser-auth/-/browser-auth-0.0.0.tgz","fileCount":2,"integrity":"sha512-IOSwGfO9gtnaCerXcCY9KTDqn6/SXZ0BhI+WXc3zaaGr+yWDX4u0A02MPPFQQOZp6Z6sH3Qcc7SvnK+VdBXMJw==","signatures":[{"sig":"MEQCIEJLfRbIvqt3tWVVeH2P+8gSbZ9bIFKSYj97MWyQgkALAiBlA9xKRV+fhOW7RMtwPutYYH8JUhNY0gn+8XQbHaEWXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232},"_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/browser-auth_0.0.0_1776719563331_0.1099505824984206","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@abapify/browser-auth","version":"0.3.5","license":"MIT","_id":"@abapify/browser-auth@0.3.5","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/browser-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"8f0b3604ed1a7683662eb7008c31622bfd672c72","tarball":"https://registry.npmjs.org/@abapify/browser-auth/-/browser-auth-0.3.5.tgz","fileCount":2,"integrity":"sha512-SkBtJqtkGT/XTK9CQAjXr4C3D8au9w+aqJw/CGOuJ0WyeTei7fjcy/XJMtg1yTHWeDGgciLhWl4MXs7y2hahKg==","signatures":[{"sig":"MEUCIQC1FYrwJCYqUzkYJ11WrcddeIj6WjgwJ+0XnUHM8TkRKQIgDluBGeR9hoWztaneyByvGngeZKFXtUO7f9+OXWftKFk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fbrowser-auth@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7584},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"185666fe6ccb304e7b08529eb376ec2493131a7a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cb28adf6-d4e9-45de-8d7f-7e3d91008b54"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/browser-auth"},"_npmVersion":"11.12.1","description":"Browser-based SSO authentication core - shared logic for Playwright/Puppeteer plugins","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@abapify/adt-config":"0.3.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/browser-auth_0.3.5_1776723640504_0.47193785461696813","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@abapify/browser-auth","version":"0.3.6","license":"MIT","_id":"@abapify/browser-auth@0.3.6","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/browser-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"9d47298a3b8cc6b7b4f231d389d86c0884919ddf","tarball":"https://registry.npmjs.org/@abapify/browser-auth/-/browser-auth-0.3.6.tgz","fileCount":2,"integrity":"sha512-QNQAmgE19ztQh3bAoKJHQoH08DAxoADAN5txCo29A23g9mPKcDOduyT5J4yYRTleHaB40fesbMT2um5uKMPiYQ==","signatures":[{"sig":"MEUCIQC4a4S+5M+JfIXTrTTv/c/ALoCuRpXB0pMvbkdSt2DKNQIgGE1+0vQbB4IR8XzHcrWk/2onxoVUMtxaTTbHMy7DpAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fbrowser-auth@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7584},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"489b2b4ad7c2ea972f323d4c356997ac5962ba9e","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cb28adf6-d4e9-45de-8d7f-7e3d91008b54"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/browser-auth"},"_npmVersion":"11.11.0","description":"Browser-based SSO authentication core - shared logic for Playwright/Puppeteer plugins","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@abapify/adt-config":"0.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/browser-auth_0.3.6_1776744787489_0.9722667682023878","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@abapify/browser-auth","version":"0.4.0","license":"MIT","_id":"@abapify/browser-auth@0.4.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/browser-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"9bf8a72d242d84e55a31348f5b9f4c752b30baf1","tarball":"https://registry.npmjs.org/@abapify/browser-auth/-/browser-auth-0.4.0.tgz","fileCount":2,"integrity":"sha512-dLHPUDhvctSGGwyi+FkBzf9pjlnBlc77+G047BT1H0gZMVrIjnKFT6HSDHxxyKOPsY1AGTe+l826OXlQXzYnEw==","signatures":[{"sig":"MEYCIQD+ZAgc9ude+fPX+QsAQmMEMW2AqppGHTXNQDxjayBMKQIhAMIB50PhGx8n9BPWe8OFrXxJmbdBpFWc63eLzAIEstsk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fbrowser-auth@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7584},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"81dc9eea47fe419e41d246f0ec212fa78570a489","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cb28adf6-d4e9-45de-8d7f-7e3d91008b54"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/browser-auth"},"_npmVersion":"11.13.0","description":"Browser-based SSO authentication core - shared logic for Playwright/Puppeteer plugins","directories":{},"_nodeVersion":"24.16.0","dependencies":{"@abapify/adt-config":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/browser-auth_0.4.0_1780072632205_0.3586186527668418","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@abapify/browser-auth","version":"0.4.1","description":"Browser-based SSO authentication core - shared logic for Playwright/Puppeteer plugins","license":"MIT","publishConfig":{"access":"public"},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"dependencies":{"@abapify/adt-config":"0.4.1"},"devDependencies":{"@types/node":"^22.10.2"},"repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/browser-auth"},"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/browser-auth#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"gitHead":"9d3b996a5c760a8db67e28c4df3c30098bd29e4a","_id":"@abapify/browser-auth@0.4.1","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-dGHiLapqRvXJOCT/KimSv9tS+kHrnmSv2juNkpH403adtCOU03fkG1Q9Rmti4JfUCBEkwDNt8KB8jlcyVVAsdg==","shasum":"9e84e18976e381f8a4d7c9907a2b33bac93d2dd8","tarball":"https://registry.npmjs.org/@abapify/browser-auth/-/browser-auth-0.4.1.tgz","fileCount":6,"unpackedSize":32158,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fbrowser-auth@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDpnun+1hnQBhHK2lhEbReriFojt9VnsQpl023ypzDGKwIgQf1ISrgGTxuv/DTb4mJPjllAXaDAyxmd2MSkXam6G6M="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cb28adf6-d4e9-45de-8d7f-7e3d91008b54"}},"directories":{},"maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/browser-auth_0.4.1_1780074913640_0.35895924144227775"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T21:12:43.237Z","modified":"2026-05-29T17:15:14.064Z","0.0.0":"2026-04-20T21:12:43.474Z","0.3.5":"2026-04-20T22:20:40.653Z","0.3.6":"2026-04-21T04:13:07.621Z","0.4.0":"2026-05-29T16:37:12.362Z","0.4.1":"2026-05-29T17:15:13.783Z"},"bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"license":"MIT","homepage":"https://github.com/abapify/adt-cli/tree/main/packages/browser-auth#readme","repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/browser-auth"},"description":"Browser-based SSO authentication core - shared logic for Playwright/Puppeteer plugins","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"readme":"# @abapify/browser-auth\n\n[![version](https://img.shields.io/github/package-json/v/abapify/adt-cli?filename=packages/browser-auth/package.json)](https://github.com/abapify/adt-cli/pkgs/npm/%40abapify%2Fbrowser-auth)\n\nCore browser-based SSO authentication logic for SAP ADT systems. This package provides the shared authentication flow used by browser-specific adapters like Playwright and Puppeteer.\n\n> **Note:** This is a low-level package. Most users should use `@abapify/adt-playwright` or `@abapify/adt-puppeteer` instead.\n\n## Architecture\n\n```\n@abapify/browser-auth (this package)\n├── BrowserAdapter interface\n├── Event-driven auth flow\n├── Cookie utilities\n└── Pattern matching\n    ↑\n@abapify/adt-playwright ─────┐\n    └── Playwright adapter   │\n                             ├── Implement BrowserAdapter\n@abapify/adt-puppeteer ──────┘\n    └── Puppeteer adapter\n```\n\n## Installation\n\n```bash\nnpm install @abapify/browser-auth\n```\n\n## Usage\n\nThis package is primarily used by browser adapter implementations. Direct usage:\n\n```typescript\nimport {\n  authenticate,\n  testCredentials,\n  toCookieHeader,\n} from '@abapify/browser-auth';\nimport type { BrowserAdapter } from '@abapify/browser-auth';\n\n// Create your browser adapter (see BrowserAdapter interface)\nconst adapter: BrowserAdapter = createMyAdapter();\n\n// Authenticate\nconst credentials = await authenticate(adapter, {\n  url: 'https://sap-system.example.com',\n  headless: false,\n  userDataDir: true,\n  requiredCookies: ['SAP_SESSIONID_*', 'sap-usercontext'],\n});\n\n// Test if credentials are still valid\nconst result = await testCredentials(credentials);\nconsole.log(result.valid); // true/false\n\n// Convert to Cookie header string\nconst cookieHeader = toCookieHeader(credentials);\n// \"SAP_SESSIONID_XXX=abc123; sap-usercontext=...\"\n```\n\n## API\n\n### `authenticate(adapter, options)`\n\nPerforms browser-based SSO authentication.\n\n```typescript\nasync function authenticate(\n  adapter: BrowserAdapter,\n  options: BrowserAuthOptions,\n): Promise<BrowserCredentials>;\n```\n\n**Parameters:**\n\n- `adapter` - Browser adapter implementing `BrowserAdapter` interface\n- `options` - Authentication options\n\n**Options:**\n\n```typescript\ninterface BrowserAuthOptions {\n  url: string; // SAP system URL\n  headless?: boolean; // Hide browser (default: false)\n  timeout?: number; // Login timeout in ms (default: 300000)\n  userAgent?: string; // Custom user agent\n  requiredCookies?: string[]; // Cookie patterns to wait for\n  userDataDir?: string | boolean; // Session persistence path\n  ignoreHTTPSErrors?: boolean; // Ignore SSL errors (default: true)\n}\n```\n\n**Returns:** `BrowserCredentials` with captured cookies\n\n### `testCredentials(credentials)`\n\nTests if credentials are still valid by making a request to the SAP system.\n\n```typescript\nasync function testCredentials(\n  credentials: BrowserCredentials,\n): Promise<TestResult>;\n```\n\n### `toCookieHeader(credentials)`\n\nConverts credentials to a Cookie header string.\n\n```typescript\nfunction toCookieHeader(credentials: BrowserCredentials): string;\n```\n\n### `toHeaders(credentials)`\n\nCreates headers object with Cookie and User-Agent.\n\n```typescript\nfunction toHeaders(credentials: BrowserCredentials): Record<string, string>;\n```\n\n## BrowserAdapter Interface\n\nTo create a new browser adapter, implement this interface:\n\n```typescript\ninterface BrowserAdapter {\n  /** Launch browser and create context */\n  launch(options: {\n    headless: boolean;\n    userDataDir?: string;\n    ignoreHTTPSErrors?: boolean;\n    userAgent?: string;\n  }): Promise<void>;\n\n  /** Create a new page */\n  newPage(): Promise<void>;\n\n  /** Navigate to URL */\n  goto(url: string, options?: { timeout?: number }): Promise<void>;\n\n  /** Get all cookies */\n  getCookies(): Promise<CookieData[]>;\n\n  /** Get user agent string */\n  getUserAgent(): Promise<string>;\n\n  /** Close the page */\n  closePage(): Promise<void>;\n\n  /** Close browser context */\n  close(): Promise<void>;\n\n  /** Register response event handler */\n  onResponse(handler: (event: ResponseEvent) => void): void;\n\n  /** Register page close handler */\n  onPageClose(handler: () => void): void;\n}\n```\n\n## Cookie Pattern Matching\n\nThe `requiredCookies` option supports wildcard patterns:\n\n```typescript\n// Wait for any SAP session cookie\nrequiredCookies: ['SAP_SESSIONID_*'];\n\n// Wait for specific cookies\nrequiredCookies: ['SAP_SESSIONID_S0D_200', 'sap-usercontext'];\n\n// Multiple patterns\nrequiredCookies: ['SAP_SESSIONID_*', 'MYSAPSSO2', 'sap-usercontext'];\n```\n\n### Utility Functions\n\n```typescript\nimport { matchesCookiePattern, cookieMatchesAny } from '@abapify/browser-auth';\n\n// Check single pattern\nmatchesCookiePattern('SAP_SESSIONID_S0D_200', 'SAP_SESSIONID_*'); // true\n\n// Check multiple patterns\ncookieMatchesAny('SAP_SESSIONID_S0D_200', ['MYSAPSSO2', 'SAP_SESSIONID_*']); // true\n```\n\n## Types\n\n```typescript\ninterface CookieData {\n  name: string;\n  value: string;\n  domain: string;\n  path: string;\n  expires?: number;\n  httpOnly?: boolean;\n  secure?: boolean;\n  sameSite?: 'Strict' | 'Lax' | 'None';\n}\n\ninterface BrowserCredentials {\n  baseUrl: string;\n  cookies: CookieData[];\n  authenticatedAt: Date;\n  userAgent?: string;\n}\n\ninterface TestResult {\n  valid: boolean;\n  error?: string;\n  responseTime?: number;\n}\n```\n\n## Creating a New Adapter\n\nExample: Creating a Selenium adapter\n\n```typescript\nimport type {\n  BrowserAdapter,\n  CookieData,\n  ResponseEvent,\n} from '@abapify/browser-auth';\nimport { Builder, Browser } from 'selenium-webdriver';\n\nexport function createSeleniumAdapter(): BrowserAdapter {\n  let driver: WebDriver | null = null;\n  const responseHandlers: ((event: ResponseEvent) => void)[] = [];\n\n  return {\n    async launch(options) {\n      driver = await new Builder().forBrowser(Browser.CHROME).build();\n    },\n\n    async newPage() {\n      // Selenium uses single page model\n    },\n\n    async goto(url, options) {\n      await driver?.get(url);\n    },\n\n    async getCookies(): Promise<CookieData[]> {\n      const cookies = await driver?.manage().getCookies();\n      return (\n        cookies?.map((c) => ({\n          name: c.name,\n          value: c.value,\n          domain: c.domain || '',\n          path: c.path || '/',\n          expires: c.expiry?.getTime(),\n          httpOnly: c.httpOnly,\n          secure: c.secure,\n        })) || []\n      );\n    },\n\n    // ... implement remaining methods\n  };\n}\n```\n\n## Related Packages\n\n- [`@abapify/adt-playwright`](../adt-playwright) - Playwright adapter (recommended)\n- [`@abapify/adt-puppeteer`](../adt-puppeteer) - Puppeteer adapter\n- [`@abapify/adt-auth`](../adt-auth) - Authentication manager\n- [`@abapify/adt-config`](../adt-config) - Configuration utilities\n","readmeFilename":"README.md"}