{"_id":"@aethex.os/supabase","_rev":"3-3dce8896b530379a867d954952d2a5bd","name":"@aethex.os/supabase","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@aethex.os/supabase","version":"1.0.0","keywords":["supabase","auth","express","middleware","jwt","bearer","node","aethex"],"author":{"name":"AeThex Corporation"},"license":"MIT","_id":"@aethex.os/supabase@1.0.0","maintainers":[{"name":"mrpiglr","email":"mrpiglr@aethex.dev"}],"homepage":"https://aethex.dev","bugs":{"url":"https://github.com/AeThex-Corporation/AeThex-OS/issues"},"dist":{"shasum":"5e9abcb76abb08b68d46c14f001aa06f2a5e8608","tarball":"https://registry.npmjs.org/@aethex.os/supabase/-/supabase-1.0.0.tgz","fileCount":14,"integrity":"sha512-DIHh95/FJHg31Zb3PfXbrk32jn3BcR5hGFyiTPVK/B99q2jgbZDrIZ21GRtMLl0bMjeRhVE5GX0Pef5mvMRWVQ==","signatures":[{"sig":"MEUCIFDODCmyJFM5Bv5ZW7yLpKYoW8OTjF0sW4BfxU8JUxLGAiEAsyHTWX8GIzQx88lGsSCJqlQnkTdDZiZWf67nDWTATLU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14608},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b094d5c032765a30612c2348ce0356d3a50d9feb","scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"mrpiglr","email":"mrpiglr@aethex.dev"},"repository":{"url":"git+https://github.com/AeThex-Corporation/AeThex-OS.git","type":"git","directory":"packages/aethex-supabase"},"_npmVersion":"11.12.1","description":"Supabase client factories and Express auth middleware — admin client, user client, and Bearer token authentication for Node.js servers","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0","@supabase/supabase-js":"^2.0.0"},"peerDependencies":{"@supabase/supabase-js":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/supabase_1.0.0_1777934426345_0.7558671913363602","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aethex.os/supabase","version":"1.0.1","keywords":["supabase","auth","express","middleware","jwt","bearer","node","aethex"],"author":{"name":"AeThex Corporation"},"license":"MIT","_id":"@aethex.os/supabase@1.0.1","maintainers":[{"name":"mrpiglr","email":"mrpiglr@aethex.dev"}],"homepage":"https://aethex.dev","bugs":{"url":"https://github.com/AeThex-Corporation/AeThex-OS/issues"},"dist":{"shasum":"6cc8cdb09a7c4ceca7422e041d49f39a05341675","tarball":"https://registry.npmjs.org/@aethex.os/supabase/-/supabase-1.0.1.tgz","fileCount":14,"integrity":"sha512-zXEyoSOo9bUoD/PkxhcSswZmDEUBATB4pqeSBUQ6/6kaWdtGphzcQKbUrW/i39Jd5EdWnBAcScfPqYRlMje8Sg==","signatures":[{"sig":"MEYCIQCOY5/E60nN2+pL011HLeSlmjrMGnatpzKRA+QoK8xCLQIhAKqoJXJcrTn2h6U1TVz/1f+NsM9xyzc8vrmRko4j+Kvi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14722},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b094d5c032765a30612c2348ce0356d3a50d9feb","scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"mrpiglr","email":"mrpiglr@aethex.dev"},"repository":{"url":"git+https://github.com/AeThex-Corporation/AeThex-OS.git","type":"git","directory":"packages/aethex-supabase"},"_npmVersion":"11.12.1","description":"Supabase client factories and Express auth middleware — admin client, user client, and Bearer token authentication for Node.js servers","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.0.0","@supabase/supabase-js":"^2.0.0"},"peerDependencies":{"@supabase/supabase-js":">=2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/supabase_1.0.1_1777934461003_0.8829374045833782","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aethex.os/supabase","version":"1.0.2","description":"Supabase client factories and Express auth middleware — admin client, user client, and Bearer token authentication for Node.js servers","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc","dev":"tsc --watch"},"keywords":["supabase","auth","express","middleware","jwt","bearer","node","aethex"],"author":{"name":"AeThex Corporation"},"license":"MIT","homepage":"https://aethex.dev/docs","repository":{"type":"git","url":"git+https://git.aethex.tech/Labs/os.git","directory":"packages/aethex-supabase"},"peerDependencies":{"@supabase/supabase-js":">=2.0.0"},"devDependencies":{"@supabase/supabase-js":"^2.0.0","@types/node":"^20.0.0","typescript":"^5.3.0"},"engines":{"node":">=18.0.0"},"bugs":{"url":"https://git.aethex.tech/Labs/os/issues"},"_id":"@aethex.os/supabase@1.0.2","gitHead":"6c77abd6440deb925777f64998d4c67a398236e0","_nodeVersion":"22.22.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-C4O7cabI+QiO/FUNHvau0c/pPITVPwsqyQ9mGQYOALB6c5PMHsvlIj4EppTaNIfODaYWj645HwPZh4FFv+MbCg==","shasum":"b7a422bfb446b8c3da90fa7b396d857d4d6e96fa","tarball":"https://registry.npmjs.org/@aethex.os/supabase/-/supabase-1.0.2.tgz","fileCount":14,"unpackedSize":14784,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHWUBH9LfbkJTvGgif38WvfGikeYUg3cl5hDgY7KTHzJAiBCXosyjVROt61RNIwtYsqlA5BTTfT+074wa5VGPccdiA=="}]},"_npmUser":{"name":"mrpiglr","email":"mrpiglr@aethex.dev"},"directories":{},"maintainers":[{"name":"mrpiglr","email":"mrpiglr@aethex.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/supabase_1.0.2_1783400214999_0.39130930624824445"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-04T22:40:26.251Z","modified":"2026-07-07T04:56:55.289Z","1.0.0":"2026-05-04T22:40:26.489Z","1.0.1":"2026-05-04T22:41:01.156Z","1.0.2":"2026-07-07T04:56:55.134Z"},"bugs":{"url":"https://git.aethex.tech/Labs/os/issues"},"author":{"name":"AeThex Corporation"},"license":"MIT","homepage":"https://aethex.dev/docs","keywords":["supabase","auth","express","middleware","jwt","bearer","node","aethex"],"repository":{"type":"git","url":"git+https://git.aethex.tech/Labs/os.git","directory":"packages/aethex-supabase"},"description":"Supabase client factories and Express auth middleware — admin client, user client, and Bearer token authentication for Node.js servers","maintainers":[{"name":"mrpiglr","email":"mrpiglr@aethex.dev"}],"readme":"# @aethex.os/supabase\n\nSupabase client factories and Express auth middleware — stop copy-pasting the same Supabase boilerplate across every project.\n\n## Install\n\n```bash\nnpm install @aethex.os/supabase @supabase/supabase-js\n```\n\n## Client factories\n\n```ts\nimport { createAdminClient, createUserClient, configFromEnv } from \"@aethex.os/supabase\";\n\nconst config = configFromEnv();\n// reads SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE from process.env\n\nconst adminClient = createAdminClient(config);   // service role — full access\nconst userClient  = createUserClient(config, accessToken); // scoped to user's RLS\n```\n\nOr pass config directly:\n\n```ts\nconst config = {\n  url: \"https://xxxx.supabase.co\",\n  anonKey: \"...\",\n  serviceRoleKey: \"...\",\n};\n```\n\n## Express middleware\n\n```ts\nimport express from \"express\";\nimport { requireAuth, configFromEnv } from \"@aethex.os/supabase\";\n\nconst app = express();\nconst config = configFromEnv();\n\n// Protects all routes below\napp.use(requireAuth(config));\n\napp.get(\"/me\", (req, res) => {\n  // req.user   → { id, email, role, metadata }\n  // req.supabase      → user-scoped client (respects RLS)\n  // req.supabaseAdmin → service-role client\n  res.json(req.user);\n});\n```\n\nOptionally load profile columns alongside auth:\n\n```ts\napp.use(requireAuth(config, \"user_type, primary_arm, full_name\"));\n// req.user.role     → profile.user_type\n// req.user.metadata → full profile row\n```\n\n## Manual token verification\n\n```ts\nimport { authenticateToken, extractBearerToken } from \"@aethex.os/supabase\";\n\nconst token = extractBearerToken(req.headers.authorization);\nif (!token) return res.status(401).json({ error: \"No token\" });\n\nconst { user, adminClient, userClient, error } = await authenticateToken(token, config);\nif (!user) return res.status(401).json({ error });\n```\n\n## TypeScript augmentation\n\nExtend `Express.Request` with the user type:\n\n```ts\ndeclare global {\n  namespace Express {\n    interface Request {\n      user?: import(\"@aethex.os/supabase\").AuthenticatedUser;\n    }\n  }\n}\n```\n\n## API\n\n| Export | Description |\n|--------|-------------|\n| `createAdminClient(config)` | Service-role Supabase client (bypasses RLS) |\n| `createUserClient(config, token)` | User-scoped Supabase client (respects RLS) |\n| `configFromEnv()` | Read config from environment variables |\n| `authenticateToken(token, config, select?)` | Verify Bearer token, returns user + clients |\n| `extractBearerToken(header)` | Parse `Authorization: Bearer <token>` |\n| `requireAuth(config, select?)` | Express middleware — guards routes, attaches `req.user` |\n\n---\n\nPart of the [`@aethex.os`](https://www.npmjs.com/search?q=%40aethex.os) toolkit.\n","readmeFilename":"README.md"}