{"_id":"@alter-ai/connect","_rev":"16-555b67559932e9c70c92fa8ebf667077","name":"@alter-ai/connect","dist-tags":{"latest":"0.12.2"},"versions":{"0.1.0":{"name":"@alter-ai/connect","version":"0.1.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterai.dev"},"license":"MIT","_id":"@alter-ai/connect@0.1.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterai.dev","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"2996dfc4955510a7ba44701e08c26389c5190475","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.1.0.tgz","fileCount":30,"integrity":"sha512-1YNOR1faoQe6afMOp4sRmUP2bIgJuVt5aF+3rFZ66m4UoUwCsJn81I6eB4fRDCq0gAPsoBRT7Ifr3eqrho2RGg==","signatures":[{"sig":"MEQCIDOEgu+KlRPS/YxxYZuPSLsyBkrcV6V1x36OQD5BSFptAiAvSth0GPrUntSzurkVdw5ZAsT/r/cufpWncgGyyC1eiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294158},"main":"dist/alter-connect.cjs.js","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"gitHead":"eb8c50b84435d0e0bde7d0dcdbcd02401e09486a","scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"kdodhia","email":"kevan@alterai.dev"},"repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.5.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"24.5.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.1.0_1769384441061_0.9533972858441968","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alter-ai/connect","version":"0.1.1","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterai.dev"},"license":"MIT","_id":"@alter-ai/connect@0.1.1","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterai.dev","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"0a21577a8fe35d475bf1e36103be82eeec7d7053","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.1.1.tgz","fileCount":30,"integrity":"sha512-ywpaWy6DpraoLJNSMNKzYnadaegvF4s/5niurNMNe1xhvZ8Gt9gFbbYgHz1NgYVAsY+GWgHUMLDbilySHIr6VA==","signatures":[{"sig":"MEQCIEzqUBPflbSX2BUbl3j2DR7S55tpqP4+woaqN8vouKEcAiBCAjC4JjUTLhs0TmdebCCodQHFWumRm6Lv/8HZByQKBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294158},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.1.1.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"kdodhia","email":"kevan@alterai.dev"},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.1.1.tgz","_integrity":"sha512-ywpaWy6DpraoLJNSMNKzYnadaegvF4s/5niurNMNe1xhvZ8Gt9gFbbYgHz1NgYVAsY+GWgHUMLDbilySHIr6VA==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"10.8.2","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.1.1_1769392468083_0.33033915826904603","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@alter-ai/connect","version":"0.2.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterai.dev"},"license":"MIT","_id":"@alter-ai/connect@0.2.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterai.dev","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"58acad4b512f7864c6636fd183ddf176a8502dd3","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.2.0.tgz","fileCount":24,"integrity":"sha512-6nIy+gVruGUkgd5q1q42c9FtR2BqAtDNuI3Gd5I9DBnv7UEdO+shxPMQr9x69NTGx4ejv2fdUdpqIhgPNWcrNg==","signatures":[{"sig":"MEUCIQDgurI+tIVbYdM47km6H0Ki7EKZVKNytMdAvR590HMBRwIgE/kZ5OooD8AVcMNAxx0KOl222k35auLk2NBzeE//xlA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181073},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.2.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"kdodhia","email":"kevan@alterai.dev"},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.2.0.tgz","_integrity":"sha512-6nIy+gVruGUkgd5q1q42c9FtR2BqAtDNuI3Gd5I9DBnv7UEdO+shxPMQr9x69NTGx4ejv2fdUdpqIhgPNWcrNg==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"10.8.2","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.2.0_1771263752018_0.16674661622845144","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@alter-ai/connect","version":"0.2.1","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterai.dev"},"license":"MIT","_id":"@alter-ai/connect@0.2.1","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterai.dev","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"d1ec4f19e01b7f75f339348290c0072de0ce172a","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.2.1.tgz","fileCount":24,"integrity":"sha512-prA3QniRB94vIcQupPZCEu468lPPRw/2ijnFkL7I2njpFOnvO1eDw7dTQk1WdIC39imrwxDtWwJ8mbU6JzS8kg==","signatures":[{"sig":"MEYCIQDMKvAJ5ysPcpNwOrWYzSRe//QmxYjb796/AT3K2WqGZAIhAMEbk1oBlF6qawYZXTybJd4CWKUKWKUR7HIJZ9vSieWi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178804},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.2.1.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"kdodhia","email":"kevan@alterai.dev"},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.2.1.tgz","_integrity":"sha512-prA3QniRB94vIcQupPZCEu468lPPRw/2ijnFkL7I2njpFOnvO1eDw7dTQk1WdIC39imrwxDtWwJ8mbU6JzS8kg==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"10.8.2","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.2.1_1771266068833_0.3588100943110084","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@alter-ai/connect","version":"0.3.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterai.dev"},"license":"MIT","_id":"@alter-ai/connect@0.3.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterai.dev","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"620c049718a9593cddfaf0364368ce3c5ab59490","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.3.0.tgz","fileCount":24,"integrity":"sha512-L194MP2n8i1o7Mz4by0LF5yCC9VhX7bW2Ggldj7Shhdb3tAmMSkwelNxtlHRSICythzjRfDmTi8sw41UsoxZKQ==","signatures":[{"sig":"MEUCIQCc3J00LmBGugI1hzFBjJn0nIoCjQrGoiGbIb0RKCzkDwIgNLcV5RmaSH7yhifpR0RJZj7CdIY02QNT8YX9Y5fyyhs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":193569},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.3.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"kdodhia","email":"kevan@alterai.dev"},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.3.0.tgz","_integrity":"sha512-L194MP2n8i1o7Mz4by0LF5yCC9VhX7bW2Ggldj7Shhdb3tAmMSkwelNxtlHRSICythzjRfDmTi8sw41UsoxZKQ==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"10.8.2","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.3.0_1772388690754_0.6822055445931565","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@alter-ai/connect","version":"0.5.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.5.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"a6a65f2658bcb3eb1486b66599b504c03de553e2","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.5.0.tgz","fileCount":24,"integrity":"sha512-OcwH+uEWiivoJo8dvyXD6XytVZc+3ROM9wu1tfbLkCdZfDJYI8Arn8SQJw4beXITTIphkql8vVm310Tq23KyLA==","signatures":[{"sig":"MEYCIQDSceT4TbK8p9M8r2Kt7QCQSpMDIFbU1UsdDxK2HaaDFgIhANGYm4sw8vqaSDZ1BG2pt/PQc49jadsqVfvsGpgTDbYS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182979},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.5.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"kdodhia","email":"kevan@alterai.dev"},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.5.0.tgz","_integrity":"sha512-OcwH+uEWiivoJo8dvyXD6XytVZc+3ROM9wu1tfbLkCdZfDJYI8Arn8SQJw4beXITTIphkql8vVm310Tq23KyLA==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"10.8.2","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.5.0_1775695154145_0.7579803504734337","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@alter-ai/connect","version":"0.8.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.8.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"af33eb6eb09272ec0be1b73ed032cb815da7ec86","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.8.0.tgz","fileCount":24,"integrity":"sha512-NaWFg2fcfQ2LJ2lp7T2iwMmMVnzQg2eMW8mMi067WOGzuomn4GfDLFbJWTXUk649wNyQEEYrAvc9Eur/SG+AYA==","signatures":[{"sig":"MEUCIQCcWX7GyJRcEOyOFc5zrCcJ5f/24RkOJHcPNX5SlA0YWAIgX+ozBbX6cPZMjJrpCmP2lD093B50DDFhkCEsENHIWp8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182979},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.8.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"kdodhia","email":"kevan@alterai.dev"},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.8.0.tgz","_integrity":"sha512-NaWFg2fcfQ2LJ2lp7T2iwMmMVnzQg2eMW8mMi067WOGzuomn4GfDLFbJWTXUk649wNyQEEYrAvc9Eur/SG+AYA==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"10.8.2","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.8.0_1776030594326_0.27749683286660143","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@alter-ai/connect","version":"0.9.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.9.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"41e982dd1b18077412a812fb3b872ab98ed2496d","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.9.0.tgz","fileCount":24,"integrity":"sha512-6wD6ryB1vCDjA4EIdy/cbETRQTy7XEkox79U8neIztpi8hqxV4gZymny8cztcjaium8cnTifHuBUsdulG5sK3A==","signatures":[{"sig":"MEUCIHUKxYdGuR+fSGLXz84mrAQOnsuuwCS4xcfTR+WPZfiIAiEAoW8rDFDlMEwRT4eNsrun1+4OMEy3onLPSNrkLdpsLAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202607},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.9.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=16.0.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.9.0.tgz","_integrity":"sha512-6wD6ryB1vCDjA4EIdy/cbETRQTy7XEkox79U8neIztpi8hqxV4gZymny8cztcjaium8cnTifHuBUsdulG5sK3A==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.9.4","vitest":"^1.0.4","ts-jest":"^29.1.1","happy-dom":"^12.10.3","@vitest/ui":"^1.0.4","typescript":"^5.3.3","@types/jest":"^29.5.11","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.9.0_1779693009381_0.45049792729263416","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@alter-ai/connect","version":"0.9.1","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.9.1","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"3911a96b86d1dee531143a874a7f421e2fac565b","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.9.1.tgz","fileCount":24,"integrity":"sha512-e2ZPKdDP6XKvr2rtoNwFNSWBwiXnVvjSk4ZB2CtYw71sGNGXg8BKG7ShZ5fyIxbDltlnueKGwHVp3BLbHfXiWA==","signatures":[{"sig":"MEYCIQDUBkop4jcr0Qm+I+FaceXdZ03EAR6FjoRgVFWiB2ltLAIhAK6+CRntMDHWI/fsYbkVtZhSHpBf699GBZ55rm+WiWZ4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202461},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.9.1.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=20.19.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.9.1.tgz","_integrity":"sha512-e2ZPKdDP6XKvr2rtoNwFNSWBwiXnVvjSk4ZB2CtYw71sGNGXg8BKG7ShZ5fyIxbDltlnueKGwHVp3BLbHfXiWA==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.60.4","vitest":"^3.2.4","@vitest/ui":"^3.2.4","typescript":"^5.3.3","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^28.0.0","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.9.1_1780292046281_0.9931486605678344","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"@alter-ai/connect","version":"0.9.2","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.9.2","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"fd6f34e30ee46d8772cf4cb07ac517c686a29f5e","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.9.2.tgz","fileCount":24,"integrity":"sha512-Wkbqq6/nT3uRF/6BI0BkOJN7i6TyvQj226NN1RHNwZdxWcwuBKwoiTBjbgqtJlEnb8Q8P4Ma26Ujcr1W3bNO1w==","signatures":[{"sig":"MEQCIFadaXi3QiqMy+/ud7Sr2FlYTTI32g96tYv5Xbfz9AldAiBd5MJ+jFmhiP2oxvosuPLPtmihiWfVYGs2QNS1fPqBpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202461},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.9.2.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=20.19.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.9.2.tgz","_integrity":"sha512-Wkbqq6/nT3uRF/6BI0BkOJN7i6TyvQj226NN1RHNwZdxWcwuBKwoiTBjbgqtJlEnb8Q8P4Ma26Ujcr1W3bNO1w==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","tslib":"^2.6.2","eslint":"^9.0.0","rollup":"^4.60.4","vitest":"^4.1.8","@vitest/ui":"^4.1.8","typescript":"^5.3.3","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^1.0.0","@rollup/plugin-commonjs":"^28.0.0","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.9.2_1780986161239_0.01620724482287672","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@alter-ai/connect","version":"0.10.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.10.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"e12465d65dd9ac5a53af82de9d3cf188bfcc8d6a","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.10.0.tgz","fileCount":24,"integrity":"sha512-8VeJy6lFhB5hqaLTung5hnwdUpI//AYOUfaxGOU2r5O3GCztkvgug0XBFMhcPhw5wuyCao1vDXExCxo3zilhRg==","signatures":[{"sig":"MEUCIQCW7KJGxvaoggjIT/khkuoSu/8h6cPVTHjdmoL/YSE4NwIgTxCi47cblyEi7mjhCHo+Pdnr4SOFC4KiCF/2v84IRRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208533},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.10.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=20.19.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.10.0.tgz","_integrity":"sha512-8VeJy6lFhB5hqaLTung5hnwdUpI//AYOUfaxGOU2r5O3GCztkvgug0XBFMhcPhw5wuyCao1vDXExCxo3zilhRg==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","tslib":"^2.6.2","eslint":"^9.39.4","rollup":"^4.60.4","vitest":"^4.1.8","@eslint/js":"^9.39.4","@vitest/ui":"^4.1.8","typescript":"^5.3.3","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^1.0.0","eslint-plugin-security":"^4.0.1","@rollup/plugin-commonjs":"^28.0.0","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","eslint-plugin-no-unsanitized":"^4.1.5","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.10.0_1783369459614_0.5369656471504627","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@alter-ai/connect","version":"0.11.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.11.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"a66033d8f9f8539709fa387c8e489dc501d206e7","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.11.0.tgz","fileCount":24,"integrity":"sha512-9gtizCAOxcYDazUgsrnAt15ch/6Ar+4plYqcmdpeZ/wYYbh/MGIiunHSWHSwDDf512X4nJX55/9e9X+4Djibgg==","signatures":[{"sig":"MEUCICghmZ0HxhneBkoeBaRgx0Q+BTBYes/aphxcHwUOrMbiAiEAo6DxG354S4aNMJLiieM5qDpWKMA9vQxYGraTKXfowoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1537938},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.11.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=20.19.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.11.0.tgz","_integrity":"sha512-9gtizCAOxcYDazUgsrnAt15ch/6Ar+4plYqcmdpeZ/wYYbh/MGIiunHSWHSwDDf512X4nJX55/9e9X+4Djibgg==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","tslib":"^2.6.2","eslint":"^9.39.4","rollup":"^4.60.4","vitest":"^4.1.8","@eslint/js":"^9.39.4","@vitest/ui":"^4.1.8","typescript":"^5.3.3","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^1.0.0","eslint-plugin-security":"^4.0.1","@rollup/plugin-commonjs":"^28.0.0","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","eslint-plugin-no-unsanitized":"^4.1.5","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.11.0_1784650079765_0.2569935622050987","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@alter-ai/connect","version":"0.11.1","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.11.1","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"962695bdb74c3c0a9d345bc5758825f1c6e645a1","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.11.1.tgz","fileCount":24,"integrity":"sha512-gvlVHXcK905Ta4QzI/ziyqHo04y8zH2wvLOA/Y6snarZgWndMh7bY/1BFRiYsDnsq59SuURI9bZ1lstMNNs53g==","signatures":[{"sig":"MEQCID+bHcGjhC1itvDVRBJpg1Q6S6rgDzatUCLXcOTo8dbeAiBRUCjdSE4d6RdEd9oCrt1/7UZzdGw5c2ku8zM2QMFFjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1004217},"main":"dist/alter-connect.cjs.js","pnpm":{"overrides":{"brace-expansion@<1.1.16":"1.1.16","brace-expansion@>=2.0.0 <2.1.2":"2.1.2"}},"_from":"file:alter-ai-connect-0.11.1.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=20.19.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"npm run build:types && rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:types":"tsc --emitDeclarationOnly --outDir dist/types","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.11.1.tgz","_integrity":"sha512-gvlVHXcK905Ta4QzI/ziyqHo04y8zH2wvLOA/Y6snarZgWndMh7bY/1BFRiYsDnsq59SuURI9bZ1lstMNNs53g==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","tslib":"^2.6.2","eslint":"^9.39.4","rollup":"^4.62.2","vitest":"^4.1.8","esbuild":"^0.28.1","@eslint/js":"^9.39.4","@vitest/ui":"^4.1.8","typescript":"^5.3.3","typescript-eslint":"^8.53.0","@rollup/plugin-terser":"^1.0.0","rollup-plugin-esbuild":"^6.2.1","eslint-plugin-security":"^4.0.1","@rollup/plugin-commonjs":"^28.0.0","@typescript-eslint/parser":"^8.53.0","@rollup/plugin-node-resolve":"^15.2.3","eslint-plugin-no-unsanitized":"^4.1.5","@typescript-eslint/eslint-plugin":"^8.53.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.11.1_1785264467577_0.7240429391357206","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@alter-ai/connect","version":"0.12.0","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.12.0","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"ad82dcc2370b6e9b97b7d57ac0e3497b7b47cb4d","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.12.0.tgz","fileCount":26,"integrity":"sha512-irfEB238i+jSJxu+rrni1uD1iEUS7wy6QQYdHZBDyK7wyBQ1NIyOxiL7zZa1JvDz1Vc6u4BjqEUDpeqx9vKQvw==","signatures":[{"sig":"MEUCIQDWlR0+rVQ/9c9wvRC9ZwOqjSayd640d1c9Mbov/nhAIAIgFMgDNWKf+Mcn9FhInNEKWUsfEkxML2OAwb753G+xD2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1051229},"main":"dist/alter-connect.cjs.js","pnpm":{"overrides":{"brace-expansion@<1.1.16":"1.1.16","brace-expansion@>=2.0.0 <2.1.2":"2.1.2"}},"_from":"file:alter-ai-connect-0.12.0.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"node":">=20.19.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"npm run build:types && rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:types":"tsc --emitDeclarationOnly --outDir dist/types","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.12.0.tgz","_integrity":"sha512-irfEB238i+jSJxu+rrni1uD1iEUS7wy6QQYdHZBDyK7wyBQ1NIyOxiL7zZa1JvDz1Vc6u4BjqEUDpeqx9vKQvw==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","tslib":"^2.6.2","eslint":"^10.8.0","rollup":"^4.62.2","vitest":"^4.1.8","esbuild":"^0.28.1","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.8","typescript":"^5.3.3","typescript-eslint":"^8.65.0","@rollup/plugin-terser":"^1.0.0","rollup-plugin-esbuild":"^6.2.1","eslint-plugin-security":"^4.0.1","@rollup/plugin-commonjs":"^28.0.0","@typescript-eslint/parser":"^8.65.0","@rollup/plugin-node-resolve":"^15.2.3","eslint-plugin-no-unsanitized":"^4.1.5","@typescript-eslint/eslint-plugin":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.12.0_1785426564563_0.6604343683237395","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@alter-ai/connect","version":"0.12.1","keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","_id":"@alter-ai/connect@0.12.1","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"homepage":"https://alterauth.com","bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"dist":{"shasum":"69aa2411167ce6ecfc7e2ce2cab45d45aadaf703","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.12.1.tgz","fileCount":26,"integrity":"sha512-NArj4LLfIBZ5G7zdoT9sKukaykvngiaJLwHzPY+CWYB0wMm3y8RR9qQjYfG34XtclC4zODRTvbioL0ojqbaJOw==","signatures":[{"sig":"MEUCIFMkdozKKXk4Nei9mFjqZDMrqMRV/rmZuz/DUZUhv4sYAiEA3ELelr0q904Livl0vA6rtFDsmSYnYOy6w2SWrefL9pU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1089490},"main":"dist/alter-connect.cjs.js","_from":"file:alter-ai-connect-0.12.1.tgz","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","module":"dist/alter-connect.esm.js","engines":{"npm":"11.14.1","node":">=20.19.0"},"scripts":{"dev":"rollup -c -w","lint":"eslint src","test":"vitest run","build":"npm run build:types && rollup -c","test:ci":"vitest run","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","typecheck":"tsc --noEmit","test:watch":"vitest","build:types":"tsc --emitDeclarationOnly --outDir dist/types","build:watch":"rollup -c -w","test:coverage":"vitest run --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.12.1.tgz","overrides":{"nanoid@3.3.16":"3.3.18","nanoid@3.3.17":"3.3.18","undici@7.28.0":"7.29.0","postcss@8.5.24":"8.5.23","brace-expansion@5.0.8":"5.0.9"},"_integrity":"sha512-NArj4LLfIBZ5G7zdoT9sKukaykvngiaJLwHzPY+CWYB0wMm3y8RR9qQjYfG34XtclC4zODRTvbioL0ojqbaJOw==","repository":{"url":"git+https://github.com/AlterAIDev/Alter-Vault.git","type":"git","directory":"apps/alter_connect/sdk"},"_npmVersion":"11.14.1","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"zod":"4.4.3","jsdom":"29.1.1","tslib":"2.8.1","eslint":"10.8.0","rollup":"4.62.2","vitest":"4.1.8","esbuild":"0.28.1","@eslint/js":"10.0.1","@vitest/ui":"4.1.8","typescript":"5.9.3","typescript-eslint":"8.65.0","@rollup/plugin-terser":"1.0.0","rollup-plugin-esbuild":"6.2.1","eslint-plugin-security":"4.0.1","@rollup/plugin-commonjs":"28.0.9","@typescript-eslint/parser":"8.65.0","@rollup/plugin-node-resolve":"15.3.1","eslint-plugin-no-unsanitized":"4.1.5","@typescript-eslint/eslint-plugin":"8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/connect_0.12.1_1787550725822_0.7278282412620305","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"@alter-ai/connect","version":"0.12.2","description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","main":"dist/alter-connect.cjs.js","module":"dist/alter-connect.esm.js","types":"dist/types/index.d.ts","unpkg":"dist/alter-connect.umd.js","scripts":{"build":"npm run build:types && rollup -c","build:types":"tsc --emitDeclarationOnly --outDir dist/types","build:watch":"rollup -c -w","dev":"rollup -c -w","test":"vitest run","test:ci":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","typecheck":"tsc --noEmit","lint":"eslint src","lint:fix":"eslint src --fix","validate":"npm run typecheck && npm run lint && npm run test","prepublishOnly":"npm run validate && npm run build"},"keywords":["oauth","authentication","alter-vault","connect","integration"],"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","homepage":"https://alterauth.com","repository":{"type":"git","url":"git+https://github.com/AlterAIDev/Alter-Vault.git","directory":"apps/alter_connect/sdk"},"bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=20.19.0","npm":"11.14.1"},"devDependencies":{"@eslint/js":"10.0.1","@rollup/plugin-commonjs":"28.0.9","@rollup/plugin-node-resolve":"15.3.1","@rollup/plugin-terser":"1.0.0","@typescript-eslint/eslint-plugin":"8.65.0","@typescript-eslint/parser":"8.65.0","@vitest/ui":"4.1.8","esbuild":"0.28.1","eslint":"10.8.0","eslint-plugin-no-unsanitized":"4.1.5","eslint-plugin-security":"4.0.1","jsdom":"29.1.1","rollup":"4.62.2","rollup-plugin-esbuild":"6.2.1","tslib":"2.8.1","typescript":"5.9.3","typescript-eslint":"8.65.0","vitest":"4.1.8","zod":"4.4.3"},"overrides":{"brace-expansion@5.0.8":"5.0.9","nanoid@3.3.16":"3.3.18","postcss@8.5.24":"8.5.23","undici@7.28.0":"7.29.0","nanoid@3.3.17":"3.3.18"},"_id":"@alter-ai/connect@0.12.2","_integrity":"sha512-4uYzCrqzf5iiTsTy4pHnMaSlWbpjoXhjDxMMh7yEZH1wkk9DBiTUfkk8btNtCWNDy434/k1iRtOyolej68l4oA==","_resolved":"/home/runner/work/Alter-Vault/Alter-Vault/apps/alter_connect/sdk/alter-ai-connect-0.12.2.tgz","_from":"file:alter-ai-connect-0.12.2.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-4uYzCrqzf5iiTsTy4pHnMaSlWbpjoXhjDxMMh7yEZH1wkk9DBiTUfkk8btNtCWNDy434/k1iRtOyolej68l4oA==","shasum":"6298ff6154e63746ed4047bd36c217a6b11372a2","tarball":"https://registry.npmjs.org/@alter-ai/connect/-/connect-0.12.2.tgz","fileCount":26,"unpackedSize":1090186,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCxqRq5oTeowByHoMMeBCfwa/cgV/A3YxjW8w8nWsCgbgIgVtMiz545alXDYw0IQdzF1uddYNRIFeQ0TBPpNKvNVsA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a3a650f9-1ae5-41f1-9894-5f6c05938a30"}},"directories":{},"maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/connect_0.12.2_1789544347444_0.628110483696789"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-25T23:40:40.876Z","modified":"2026-09-16T07:39:07.793Z","0.1.0":"2026-01-25T23:40:41.216Z","0.1.1":"2026-01-26T01:54:28.228Z","0.2.0":"2026-02-16T17:42:32.194Z","0.2.1":"2026-02-16T18:21:08.976Z","0.3.0":"2026-03-01T18:11:30.912Z","0.5.0":"2026-04-09T00:39:14.304Z","0.8.0":"2026-04-12T21:49:54.480Z","0.9.0":"2026-05-25T07:10:09.518Z","0.9.1":"2026-06-01T05:34:06.426Z","0.9.2":"2026-06-09T06:22:41.377Z","0.10.0":"2026-07-06T20:24:19.837Z","0.11.0":"2026-07-21T16:07:59.937Z","0.11.1":"2026-07-28T18:47:47.793Z","0.12.0":"2026-07-30T15:49:24.957Z","0.12.1":"2026-08-24T05:52:05.959Z","0.12.2":"2026-09-16T07:39:07.608Z"},"bugs":{"url":"https://github.com/AlterAIDev/Alter-Vault/issues"},"author":{"name":"Alter Team","email":"founders@alterauth.com"},"license":"MIT","homepage":"https://alterauth.com","keywords":["oauth","authentication","alter-vault","connect","integration"],"repository":{"type":"git","url":"git+https://github.com/AlterAIDev/Alter-Vault.git","directory":"apps/alter_connect/sdk"},"description":"JavaScript SDK for Alter Connect - Secure OAuth integration UI","maintainers":[{"name":"srikard","email":"srikar@alterai.dev"},{"name":"kdodhia","email":"kevan@alterai.dev"}],"readme":"# Alter Connect SDK\n\nA lightweight JavaScript SDK for embedding OAuth integrations into an application. The SDK opens Alter Connect in a desktop popup, uses full-page navigation on mobile-classified devices, and validates completion data before invoking typed callbacks.\n\n**Typed OAuth callbacks | Zod-validated payloads | TypeScript included**\n\n## Quick Start\n\n### 1. Install\n\n```bash\nnpm install @alter-ai/connect\n```\n\nThe package metadata declares Node.js 20.19 or later for npm tooling. Browser\nexecution does not require Node.js. Or use the UMD bundle via CDN:\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/@alter-ai/connect@latest/dist/alter-connect.umd.js\"></script>\n```\n\n### 2. Get a Session Token from the Application Backend\n\nThe application backend creates a short-lived session token using the [Alter SDK](https://www.npmjs.com/package/@alter-ai/alter-sdk):\n\n```typescript\n// Application backend (Node.js example using @alter-ai/alter-sdk)\nimport { App, CallerType } from \"@alter-ai/alter-sdk\";\n\nconst alterApp = new App({\n  apiKey: process.env.ALTER_API_KEY!,\n  caller: \"my-backend\",\n  callerType: CallerType.SERVICE,\n});\n\nconst session = await alterApp.createConnectSession({\n  allowedProviders: [\"provider-id\"],\n  allowedOrigin: \"https://app.example.com\",\n  // Optional. When the user approves access, the Connect UI also lets them set\n  // their own usage limits on the connection being created — deny rules,\n  // human approval, time windows, request quotas, and operation/parameter\n  // rules. They can only narrow what they are granting, never widen it, and\n  // they can change or remove the limits later in their wallet.\n  //\n  // This step is enabled by default. To hide it, pass:\n  // allowUserPolicyRules: false,\n});\n\nconst sessionToken = session.sessionToken;\n```\n\n### 3. Open the Connect UI\n\n```javascript\nimport AlterConnect from '@alter-ai/connect';\n\n// Initialize SDK (no API key needed!)\nconst alterConnect = AlterConnect.create();\n\nconst connectButton = document.querySelector('#connect-button');\nif (!(connectButton instanceof HTMLButtonElement)) {\n  throw new Error('Connect button is missing');\n}\nconnectButton.disabled = true;\n\n// Prefetch before the user interacts. Browsers may block a popup opened only\n// after an awaited network request has detached it from the click gesture.\nlet sessionToken = null;\nfetch('/api/alter/session')\n  .then(response => response.json())\n  .then(({ session_token }) => {\n    sessionToken = session_token;\n    connectButton.disabled = false;\n  })\n  .catch(() => {\n    console.error('Unable to prepare the Connect session');\n  });\n\nconnectButton.addEventListener('click', () => {\n  if (!sessionToken) return;\n  void alterConnect.open({\n    token: sessionToken,\n    onSuccess: (grants, completion) => {\n      console.log('Connected!', grants);\n      grants.forEach(grant => console.log(grant.provider, grant.grant_id));\n      completion.failedGrants.forEach(failure => {\n        console.warn(failure.providerId, failure.reason, failure.message);\n      });\n    },\n    onError: (error) => {\n      console.error('Failed:', error);\n    },\n    onExit: () => {\n      console.log('User closed the window');\n    }\n  });\n});\n```\n\nThe package launches the hosted OAuth Connect UI and validates desktop popup results before callbacks receive them.\n\n## Framework Examples\n\nReact, Vue, Angular, Svelte, and vanilla applications use the same pattern:\n\n1. Create one reusable `AlterConnect` instance.\n2. Fetch a session token before enabling the Connect button.\n3. Call `open()` directly in the click handler so popup activation remains attached to the user gesture.\n4. Destroy the instance when the owning component unmounts.\n\nThe CDN bundle exposes the same class as `window.AlterConnect`. CommonJS\nconsumers read the default export with\n`require('@alter-ai/connect').default`.\n\n## API Reference\n\n### `AlterConnect.create(config?)`\n\nCreates a new SDK instance.\n\n```javascript\nconst alterConnect = AlterConnect.create({\n  debug: true  // Enable console logging (default: false)\n});\n```\n\n| Option | Type | Description | Default |\n|--------|------|-------------|---------|\n| `debug` | `boolean` | Enable debug logging | `false` |\n| `baseURL` | `string` | Reserved and unsupported. Passing any value throws. | — |\n\n**Note:** Visual customization (colors, fonts, logo) is configured via the Developer Portal branding settings. Alter Connect applies the configured branding automatically.\n\n---\n\n### `alterConnect.open(options)`\n\nAttempts to open Connect. Desktop uses a centered popup window (500×700 px). Mobile-classified devices use full-page navigation, with the limitation documented under [Mobile behavior](#mobile-behavior).\n\n```javascript\nawait alterConnect.open({\n  token: 'sess_abc123...',\n  onSuccess: (grants, completion) => { /* ... */ },\n  onError: (error) => { /* ... */ },\n  onExit: () => { /* ... */ },\n  onEvent: (eventName, metadata) => { /* ... */ }\n});\n```\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `token` | `string` | Yes | Short-lived session token created by the application backend with an Alter SDK |\n| `onSuccess` | `(grants, completion) => void` | Yes | Called with the legacy grants array and a typed completion object. `completion.failedGrants` identifies partial failures. |\n| `onError` | `(error) => void` | No | Called for failures delivered to the browser SDK, including a terminal provider denial (`code: \"connect_denied\"`). |\n| `onExit` | `function` | No | Called when the user closes the desktop popup; this does not mark the backend session denied |\n| `onEvent` | `(eventName, metadata) => void` | No | Called with `connect_opened` after each launch attempt (including a blocked popup), with `provider_declined` when the user refuses a provider in a session that can still continue, and with `provider_error` when the provider itself fails in such a session |\n\nThe promise resolves after the launch attempt, not after user authorization. Missing or invalid `token` or `onSuccess` values reject the returned promise with `code: \"invalid_options\"`. `baseURL` is not an `OpenOptions` field: TypeScript rejects it, while plain JavaScript ignores it.\n\n`onSuccess`, `onError`, and `onExit` run through the event emitter's exception\nguard. If one throws, the SDK logs the exception and still performs that\ncallback's final state/listener cleanup. `onEvent` splits: `connect_opened` is\ninvoked directly, so an exception from it rejects `open()` after the launch\nattempt, while the hosted-flow events run through that same guard. The terminal\nhandlers are always registered and always release the flow, so a manual popup\nclose resets `isOpen()` whether or not `onExit` was supplied and whether or not\nit threw.\n\n**Completion data (`onSuccess`):**\n\nFor compatibility, the first argument remains an array of `Grant` objects. The\nsecond argument makes partial completion explicit:\n\n```typescript\ninterface ConnectCompletion {\n  grants: Grant[];\n  failedGrants: Array<{\n    providerId: string;\n    reason: string;\n    message: string;\n  }>;\n}\n```\n\n`failedGrants` is empty for full success. When at least one provider succeeds,\nit identifies any providers whose grants were revoked because the selected\nusage limits could not be applied. Unknown `reason` strings are preserved.\n\n**Error Object (onError):**\n\n```typescript\n{\n  code: string;\n  message: string;\n  details?: Record<string, unknown>;\n  failedGrants?: Array<{\n    providerId: string;\n    reason: string;\n    message: string;\n  }>;\n}\n```\n\nA completion with no successful grants and one or more failed grants invokes\n`onError` with `code: \"grant_policy_application_failed\"` instead of reporting\nbare success.\n\nA provider denial is terminal only when the session has nothing left to try.\nDesktop delivers `code: \"connect_denied\"` to `onError` and the `error` event; a\nmobile flow with `returnUrl` delivers the same code to the returning page's\n`error` listener. If the session still offers a provider the user has not yet\ndeclined, already authorized a grant, or still has an account the user has\nconnected and can approve, Connect\nreturns to the picker and leaves backend polling pending so the user can\ncontinue — and reports the refusal as a non-terminal `provider_declined` event\n(`onEvent` and the `event` bus) rather than an error, because `onError` closes\nthe Connect UI and would strand a user who declined only one of several\nproviders. A provider failure that was not a refusal reports as `provider_error`\non that same channel, so an application must branch on the event name rather\nthan treat every notice as a user decision. Both are popup-flow only: the mobile\n`returnUrl` flow has no opening window to notify. Closing the popup through\nbrowser chrome remains `onExit`; it is not a provider denial.\n\n---\n\n### `alterConnect.close()`\n\nCloses an active popup if one exists, stops the current flow handler, removes\nthe current per-open callbacks, resets `isOpen()`, and emits `close`.\n\n```javascript\nalterConnect.close();\n```\n\n---\n\n### `alterConnect.destroy()`\n\nDestroys the SDK instance and cleans up resources.\n\n```javascript\nalterConnect.destroy();\n```\n\n---\n\n### `alterConnect.on(event, handler)`\n\nRegister an event listener. Returns an unsubscribe function.\n\n```javascript\nconst unsubscribe = alterConnect.on('success', (grants, completion) => {\n  console.log('Connected:', grants);\n  console.log('Providers not kept:', completion.failedGrants);\n});\n\n// Later: unsubscribe();\n```\n\n**Emitted bus events:** `success`, `error`, `exit`, `close`, `event`. The `success` handler receives `(grants, completion)`; the `event` handler receives `(eventName, metadata)` and carries the non-terminal transitions `provider_declined` and `provider_error`. `connect_opened` is raised directly by `open()` and reaches the per-open `onEvent` callback only.\n\n---\n\n### `alterConnect.off(event, handler)`\n\nRemoves a previously registered event handler. Pass the same handler reference\nthat was supplied to `on()`.\n\n```javascript\nconst handleError = error => console.error(error);\nalterConnect.on('error', handleError);\nalterConnect.off('error', handleError);\n```\n\n---\n\n### `alterConnect.isOpen()`\n\nReturns the SDK's open-state flag. It becomes `true` when a launch starts and\nreturns to `false` when `close()` runs. A manually closed popup resets it\nautomatically, whether or not `onExit` was supplied and whether or not that\ncallback threw.\n\n```javascript\nif (alterConnect.isOpen()) {\n  console.log('Connect is open');\n}\n```\n\n---\n\n### `alterConnect.getVersion()`\n\nGets the SDK version.\n\n```javascript\nconsole.log(alterConnect.getVersion()); // \"0.2.0\" in package 0.11.0\n```\n\n`getVersion()` reads a runtime constant embedded in the bundle. It does not currently match the package metadata version.\n\n## Mobile behavior\n\nThe SDK chooses the flow using user-agent, touch, viewport, and orientation checks:\n\n| Device | Flow | How It Works |\n|--------|------|-------------|\n| Desktop | Popup | Opens a centered popup (500x700px) and reports completion through callbacks |\n| Mobile-classified viewport ≤480 px | Redirect | Navigates the full page to Connect |\n| Mobile-classified viewport 481–1024 px in portrait | Redirect | Navigates the full page to Connect |\n| Other devices | Popup | Uses the desktop callback flow |\n\n**Redirect completion:** full-page navigation destroys the callbacks and listeners registered by the original page. Set `returnUrl` on the session and Connect navigates back to it with the outcome, which is delivered to the callbacks registered on the instance constructed by the returning page. Callback parameters that do not carry the per-flow value the SDK minted are ignored. Sessions created without a `returnUrl`, and returns arriving more than five minutes after the flow started, complete through `createConnectSession()` plus `pollConnectSession()` on the application backend.\n\nClosing the desktop popup invokes `onExit` locally but sends no denial\ntransition to the backend. A server-side poll remains pending until its timeout\nor the session expires.\n\nA provider can likewise render an authorization error on its own origin without\nredirecting to Alter. The browser SDK cannot observe that page or manufacture a\nprovider error. Server SDK polling reports the no-callback outcome as\n`ConnectTimeoutError`; `details.reason` distinguishes a local polling deadline\nfrom a session that was first observed pending and later expired.\n\n## Security\n\n- **API keys stay on the backend.** The frontend only receives a short-lived session token minted by the application backend.\n- **No API keys or provider credentials in the browser.** The frontend receives only the short-lived Connect session token.\n\n## Provider selection\n\nThe hosted UI renders the providers permitted by the session. When that provider is not already connected, a one-provider allowlist still renders one available provider. A verified user with an existing healthy connection can use the consent fast path; `requestedGrant`, when present, controls the sibling grant requested on that connection. Set `switchAccount: true` while creating the session to force full provider authorization.\n\n## Session-controlled behavior\n\nProvider allowlists, per-provider requested scopes, origin binding, user identity, requested sibling grants, delegated agents, onward-delegation permission, delegation scope constraints, account switching, grant-expiry bounds, and policy authoring are session-creation concerns. They are not browser `OpenOptions`. Grant-expiry bounds add a duration picker to the hosted confirmation screen.\n\nA recovery session from the server SDKs' `createConnectSessionForError()` is\nopened like any other session by passing its `sessionToken` to `open()`. This\nbrowser package exports none of the server-side exception classes, including\n`ReAuthRequiredError`, `NoDelegatedGrantError`, `GrantNotFoundError`,\n`CredentialRevokedError`, or the headless-flow `ConnectFlowError` family\n(`ConnectDeniedError`, `ConnectConfigError`, `ConnectTimeoutError`).\n\nWith `allowUserPolicyRules` enabled, the hosted UI can author narrowing deny,\nhuman-approval, time-window, quota, and operation/parameter content rules.\nHuman approval occurs on later API calls; Connect only authors the rule. If\nselected rules fail to apply for some providers,\n`completion.failedGrants` reports the partial failure. If no grant remains,\n`onError` receives `grant_policy_application_failed`.\n\n## TypeScript Support\n\nFull TypeScript definitions included:\n\n```typescript\nimport AlterConnect, {\n  type AlterConnectConfig,\n  type OpenOptions,\n  type ConnectCompletion,\n  type ConnectFailedGrant,\n  type Provider,\n  type Grant,\n  type AlterError\n} from '@alter-ai/connect';\n\nconst alterConnect = AlterConnect.create({ debug: true });\n\nawait alterConnect.open({\n  token: sessionToken,\n  onSuccess: (grants: Grant[], completion: ConnectCompletion) => {\n    for (const grant of grants) {\n      console.log(grant.grant_id);  // Store this in the application database\n      console.log(grant.provider);\n      console.log(grant.scopes);\n    }\n    for (const failure of completion.failedGrants) {\n      console.warn(failure.providerId, failure.message);\n    }\n  },\n  onError: (error: AlterError) => {\n    console.error(error.code, error.message);\n  }\n});\n```\n\nThe package has one runtime dependency: Zod 4 validates complete cross-window result payloads before callback data is consumed.\n\n## Browser Support\n\nThe CJS, ESM, and UMD bundles target ES2020 and use modern browser APIs including popup or full-page navigation, `postMessage`, URL parsing, and `sessionStorage`. Importing the package is side-effect free, but `AlterConnect.create()` must run in a browser because it checks redirect state during construction. The repository's product E2E suite exercises Chromium; it does not establish a cross-browser version matrix. The package metadata declares Node.js 20.19 or later for npm tooling; CDN browser use does not require Node.js.\n\n## Troubleshooting\n\n### Popup Blocked\n\n**Problem:** Browser blocks the OAuth popup\n\n**Solution:** Ensure `alterConnect.open()` is called directly from a user interaction (click event):\n\n```javascript\n// May be blocked: the network request runs after the click.\nbutton.addEventListener('click', async () => {\n  const token = await fetchToken();\n  void alterConnect.open({ token, onSuccess, onError });\n});\n\n// Reliable: fetch before enabling the button.\nconst token = await fetchToken();\nbutton.disabled = false;\n\nbutton.addEventListener('click', () => {\n  void alterConnect.open({ token, onSuccess, onError });\n});\n```\n\n### Session Token Expired\n\n**Problem:** The hosted Connect page reports that the session expired or is invalid\n\n**Solution:** Session tokens have a 10-minute default lifetime. Create a new session and open its token. An expiry detected while binding or loading the hosted page is rendered there; it is not a reliable browser `onError` callback.\n\n### CORS Errors\n\n**Problem:** Session creation was attempted from browser code\n\n**Solution:** Create sessions on the application backend with an Alter server SDK, then return only the short-lived session token to the browser.\n\n## Support\n\n- **Documentation:** [https://docs.alterauth.com](https://docs.alterauth.com)\n- **Issues:** [GitHub Issues](https://github.com/AlterAIDev/Alter-Vault/issues)\n- **Email:** support@alterauth.com\n\n## License\n\nMIT\n","readmeFilename":"README.md"}