vibes-plug 1.0.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/.claude/rules/vibes-plug-core.md +32 -0
  2. package/.cursor/rules/vibes-plug-core.mdc +51 -0
  3. package/.cursorrules +42 -0
  4. package/AGENTS.md +96 -0
  5. package/BLUEPRINT.md +309 -125
  6. package/CHANGELOG.md +183 -1
  7. package/CLAUDE.md +70 -0
  8. package/LICENSE +1 -1
  9. package/README.md +641 -263
  10. package/index.js +19 -0
  11. package/package.json +61 -25
  12. package/plugin.json +24 -7
  13. package/scripts/generate_swarm_gif.py +295 -0
  14. package/scripts/install.js +201 -0
  15. package/skills/accessibility-testing-expert/SKILL.md +116 -0
  16. package/skills/ai-cost-token-optimizer/SKILL.md +82 -0
  17. package/skills/ai-evals-benchmark-expert/SKILL.md +188 -0
  18. package/skills/ai-llm-integration-expert/SKILL.md +147 -122
  19. package/skills/ai-media-generation-expert/SKILL.md +172 -0
  20. package/skills/ai-prompt-engineering-expert/SKILL.md +84 -0
  21. package/skills/angular-expert/SKILL.md +148 -0
  22. package/skills/api-design-expert/SKILL.md +316 -309
  23. package/skills/api-gateway-proxy-expert/SKILL.md +81 -0
  24. package/skills/app-analyzer-optimizer/SKILL.md +195 -188
  25. package/skills/apple-ecosystem-expert/SKILL.md +145 -0
  26. package/skills/{asisten_ramah → asisten-ramah}/SKILL.md +7 -1
  27. package/skills/astro-framework-expert/SKILL.md +200 -0
  28. package/skills/async-queue-temporal-expert/SKILL.md +240 -0
  29. package/skills/authentication-identity-expert/SKILL.md +279 -45
  30. package/skills/auto-doc-updater/SKILL.md +219 -203
  31. package/skills/autonomous-chaos-monkey/SKILL.md +63 -0
  32. package/skills/autonomous-red-teamer/SKILL.md +203 -0
  33. package/skills/autonomous-tdd-debugger/SKILL.md +71 -0
  34. package/skills/background-jobs-queue-expert/SKILL.md +235 -0
  35. package/skills/biome-linter-formatter-expert/SKILL.md +89 -0
  36. package/skills/blockchain-web3-expert/SKILL.md +115 -0
  37. package/skills/bootstrap-to-modern/SKILL.md +93 -86
  38. package/skills/brainstorming/SKILL.md +381 -353
  39. package/skills/browser-automation-expert/SKILL.md +222 -0
  40. package/skills/bun-runtime-expert/SKILL.md +7 -1
  41. package/skills/chatbot-messaging-expert/SKILL.md +114 -0
  42. package/skills/ci-cd-devops-architect/SKILL.md +81 -45
  43. package/skills/cloud-hosting-expert/SKILL.md +249 -243
  44. package/skills/coderabbit/SKILL.md +197 -191
  45. package/skills/compliance-gdpr-privacy-expert/SKILL.md +85 -0
  46. package/skills/cron-scheduler-expert/SKILL.md +304 -0
  47. package/skills/data-pipeline-etl-expert/SKILL.md +84 -0
  48. package/skills/data-telemetry-expert/SKILL.md +218 -212
  49. package/skills/data-visualization-expert/SKILL.md +154 -0
  50. package/skills/database-migration-versioning-expert/SKILL.md +90 -0
  51. package/skills/database-orm-expert/SKILL.md +303 -293
  52. package/skills/dependency-upgrade-migrator/SKILL.md +301 -0
  53. package/skills/design-system-architect/SKILL.md +278 -242
  54. package/skills/desktop-electron-expert/SKILL.md +128 -0
  55. package/skills/documentation-site-expert/SKILL.md +59 -0
  56. package/skills/doku-mcp-server/SKILL.md +257 -0
  57. package/skills/doku-payment-gateway/SKILL.md +233 -0
  58. package/skills/domain-driven-design-expert/SKILL.md +82 -0
  59. package/skills/e2e-testing-expert/SKILL.md +320 -314
  60. package/skills/ecommerce-expert/SKILL.md +87 -0
  61. package/skills/edge-serverless-db-expert/SKILL.md +99 -0
  62. package/skills/email-notification-expert/SKILL.md +368 -0
  63. package/skills/error-resilience-expert/SKILL.md +486 -0
  64. package/skills/event-driven-architect/SKILL.md +86 -80
  65. package/skills/feature-flag-analytics-expert/SKILL.md +66 -0
  66. package/skills/file-upload-media-expert/SKILL.md +437 -0
  67. package/skills/firebase-security-expert/SKILL.md +7 -1
  68. package/skills/form-validation-expert/SKILL.md +407 -0
  69. package/skills/fullstack-expert/SKILL.md +260 -201
  70. package/skills/fullstack-expert/references/api_design_guide.md +466 -466
  71. package/skills/fullstack-expert/references/multi_language_backend.md +528 -528
  72. package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -253
  73. package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -326
  74. package/skills/gemini-agent-booster/SKILL.md +142 -104
  75. package/skills/geospatial-maps-expert/SKILL.md +80 -0
  76. package/skills/global-a11y-i18n-expert/SKILL.md +86 -80
  77. package/skills/glsl-shader-expert/SKILL.md +107 -0
  78. package/skills/go-programming-expert/SKILL.md +300 -294
  79. package/skills/graph-rag-knowledge-expert/SKILL.md +159 -0
  80. package/skills/graphql-apollo-expert/SKILL.md +114 -0
  81. package/skills/headless-cms-expert/SKILL.md +181 -0
  82. package/skills/hig/SKILL.md +193 -187
  83. package/skills/js-backend-expert/SKILL.md +218 -191
  84. package/skills/legacy-code-translator/SKILL.md +71 -0
  85. package/skills/local-slm-edge-ai-expert/SKILL.md +167 -0
  86. package/skills/logging-error-tracking-expert/SKILL.md +344 -0
  87. package/skills/mcp-client-orchestrator/SKILL.md +76 -0
  88. package/skills/mcp-server-architect/SKILL.md +226 -126
  89. package/skills/micro-frontend-architect/SKILL.md +112 -0
  90. package/skills/mobile-expo-expert/SKILL.md +191 -185
  91. package/skills/mobile-push-notification-expert/SKILL.md +71 -0
  92. package/skills/modern-css-native-expert/SKILL.md +189 -0
  93. package/skills/monday-design-aesthetic/SKILL.md +72 -66
  94. package/skills/monorepo-architect/SKILL.md +232 -226
  95. package/skills/mpa-orchestrator/SKILL.md +120 -101
  96. package/skills/multi-agent-orchestration/SKILL.md +173 -153
  97. package/skills/multiple-entry-points/SKILL.md +91 -55
  98. package/skills/mvc-expert/SKILL.md +237 -231
  99. package/skills/n8n-automation-expert/SKILL.md +89 -0
  100. package/skills/nextjs-app-router-expert/SKILL.md +148 -0
  101. package/skills/openapi-swagger-codegen-expert/SKILL.md +67 -0
  102. package/skills/payment-gateway-expert/SKILL.md +129 -45
  103. package/skills/pdf-document-generation-expert/SKILL.md +91 -0
  104. package/skills/performance-web-vitals/SKILL.md +337 -331
  105. package/skills/post-quantum-crypto-migrator/SKILL.md +57 -0
  106. package/skills/prd-architect/SKILL.md +206 -190
  107. package/skills/proactive-background-watcher/SKILL.md +68 -0
  108. package/skills/production-ready-hardener/PRODUCTION_READINESS_REPORT.md +67 -0
  109. package/skills/production-ready-hardener/SKILL.md +461 -468
  110. package/skills/production-ready-hardener/references/production_checklist.md +161 -161
  111. package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +881 -875
  112. package/skills/project-context-mapper/SKILL.md +85 -0
  113. package/skills/pwa-offline-first-expert/SKILL.md +185 -0
  114. package/skills/python-programming-expert/SKILL.md +407 -270
  115. package/skills/rate-limit-abuse-prevention/SKILL.md +377 -0
  116. package/skills/realtime-collaboration-expert/SKILL.md +99 -45
  117. package/skills/rich-text-editor-expert/SKILL.md +177 -0
  118. package/skills/rust-programming-expert/SKILL.md +240 -234
  119. package/skills/saas-billing/SKILL.md +382 -376
  120. package/skills/saas-multi-tenant/SKILL.md +256 -236
  121. package/skills/saas-mvp-launcher/SKILL.md +30 -1
  122. package/skills/saas-transformer/SKILL.md +499 -445
  123. package/skills/saas-transformer/references/billing_integration_guide.md +401 -401
  124. package/skills/saas-transformer/references/feature_gating_patterns.md +137 -137
  125. package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -121
  126. package/skills/saas-transformer/scripts/saas_transformation_scanner.py +39 -29
  127. package/skills/scalability-clean-code/SKILL.md +234 -228
  128. package/skills/search-engine-expert/SKILL.md +89 -0
  129. package/skills/secure-fuzz-testing/SKILL.md +7 -1
  130. package/skills/self-evolving-memory-graph/SKILL.md +91 -0
  131. package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -0
  132. package/skills/senior-frontend/SKILL.md +85 -105
  133. package/skills/seo/SKILL.md +258 -224
  134. package/skills/session-context-loader/SKILL.md +83 -0
  135. package/skills/session-handoff-resume/SKILL.md +163 -157
  136. package/skills/{skill_baru → skill-baru}/SKILL.md +177 -146
  137. package/skills/solidjs-expert/SKILL.md +80 -0
  138. package/skills/spa-orchestrator/SKILL.md +306 -287
  139. package/skills/sse-websocket-streaming-expert/SKILL.md +93 -0
  140. package/skills/state-management-expert/SKILL.md +277 -271
  141. package/skills/supabase-migration/SKILL.md +47 -1
  142. package/skills/supabase-security-expert/SKILL.md +248 -242
  143. package/skills/svelte-sveltekit-expert/SKILL.md +91 -0
  144. package/skills/svg-animation-motion-expert/SKILL.md +115 -0
  145. package/skills/tailwind-expert/SKILL.md +139 -187
  146. package/skills/tanstack-query-expert/SKILL.md +204 -198
  147. package/skills/tauri-expert/SKILL.md +7 -1
  148. package/skills/token-saver/SKILL.md +118 -110
  149. package/skills/typescript-expert/SKILL.md +329 -278
  150. package/skills/ui-components-expert/SKILL.md +166 -63
  151. package/skills/ui-ux-pro-max/SKILL.md +221 -200
  152. package/skills/vector-db-rag-expert/SKILL.md +208 -0
  153. package/skills/vibe-code-gardener/SKILL.md +180 -172
  154. package/skills/visual-qa-vision-agent/SKILL.md +71 -0
  155. package/skills/voice-ai-realtime-agent/SKILL.md +202 -0
  156. package/skills/vue-frontend-expert/SKILL.md +132 -0
  157. package/skills/wasm-edge-computing-expert/SKILL.md +97 -0
  158. package/skills/web-3d-graphics-expert/SKILL.md +137 -0
  159. package/skills/web-game-engine-expert/SKILL.md +102 -0
  160. package/skills/web-scraper/SKILL.md +98 -146
  161. package/skills/website-design-cloner/SKILL.md +180 -0
  162. package/skills/webxr-ar-vr-expert/SKILL.md +123 -0
  163. package/skills/wordpress-headless-expert/SKILL.md +144 -0
  164. package/skills/zero-to-prod-orchestrator/SKILL.md +231 -180
  165. package/skills/zero-trust-secret-vault/SKILL.md +88 -0
  166. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  167. package/CONTRIBUTING.md +0 -199
  168. package/SECURITY.md +0 -21
  169. package/banner.png +0 -0
  170. package/skills/senior-fullstack/SKILL.md +0 -167
  171. package/skills/senior-fullstack/references/architecture_patterns.md +0 -160
  172. package/skills/senior-fullstack/references/development_workflows.md +0 -222
  173. package/skills/senior-fullstack/references/tech_stack_guide.md +0 -190
  174. package/skills/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
  175. package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
  176. package/skills/senior-fullstack/scripts/project_scaffolder.py +0 -114
  177. package/skills/seo-aeo-landing-page-writer/SKILL.md +0 -97
  178. package/skills/seo-geo/SKILL.md +0 -188
  179. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
  180. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  181. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
  182. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  183. package/skills/ui_ux_expert/SKILL.md +0 -114
@@ -1,45 +1,279 @@
1
- ---
2
- name: authentication-identity-expert
3
- description: "Expert guide for implementing secure authentication, authorization (RBAC/ABAC), OAuth2, and identity management (Clerk, Auth.js, Supabase Auth) / Panduan ahli untuk autentikasi dan otorisasi."
4
- author: "Antigravity"
5
- ---
6
-
7
- # Authentication & Identity Expert / Ahli Autentikasi & Identitas
8
-
9
- [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
-
11
- ---
12
-
13
- <a name="english"></a>
14
- ## English
15
-
16
- ### Description
17
- Expert guide for implementing robust and secure authentication and authorization systems in web and mobile applications. Covers JWT, Session management, OAuth2 providers, Identity as a Service (Clerk, Supabase Auth, Auth0), and Role/Attribute-Based Access Control (RBAC/ABAC).
18
-
19
- ### Instructions
20
- - **Never Roll Your Own Crypto**: Always use established libraries (like `bcrypt` or `argon2`) for hashing passwords if not using an Identity Provider.
21
- - **Session & Token Management**: Keep JWT lifetimes short (e.g., 15 minutes) and use secure, HttpOnly, SameSite cookies for refresh tokens to prevent XSS attacks.
22
- - **OAuth2 & SSO Integration**: When implementing OAuth, strictly validate the `state` parameter to mitigate CSRF attacks during the callback phase.
23
- - **Authorization (RBAC/ABAC)**: Enforce authorization checks at the server level (API routes, database queries), not just on the UI layer. Never expose sensitive data based on client-side roles alone.
24
- - **MFA (Multi-Factor Authentication)**: Recommend and implement MFA/2FA for administrative or high-privilege accounts.
25
-
26
- ### Trigger Conditions
27
- Active whenever the user is working on login/signup flows, session management, OAuth integration, role-based access control, or integrating Auth.js, Clerk, Supabase Auth, or Auth0.
28
-
29
- ---
30
-
31
- <a name="bahasa-indonesia"></a>
32
- ## Bahasa Indonesia
33
-
34
- ### Deskripsi
35
- Panduan ahli untuk mengimplementasikan sistem autentikasi dan otorisasi yang aman dan tangguh pada aplikasi web dan mobile. Mencakup JWT, manajemen Sesi, penyedia OAuth2, Identity as a Service (Clerk, Supabase Auth, Auth0), dan Role/Attribute-Based Access Control (RBAC/ABAC).
36
-
37
- ### Instruksi
38
- - **Jangan Membuat Kriptografi Sendiri**: Selalu gunakan library standar (seperti `bcrypt` atau `argon2`) untuk hashing password jika tidak menggunakan penyedia identitas (IdP).
39
- - **Manajemen Sesi & Token**: Jaga masa aktif JWT tetap singkat (misal: 15 menit) dan gunakan cookie *HttpOnly, SameSite* yang aman untuk token *refresh* guna mencegah serangan XSS.
40
- - **Integrasi OAuth2 & SSO**: Saat mengimplementasikan OAuth, validasi parameter `state` secara ketat untuk memitigasi serangan CSRF selama fase callback.
41
- - **Otorisasi (RBAC/ABAC)**: Terapkan pengecekan otorisasi pada level server (API route, query database), bukan hanya pada lapisan UI. Jangan pernah mengekspos data sensitif hanya berdasarkan *role* di sisi klien.
42
- - **MFA (Multi-Factor Authentication)**: Rekomendasikan dan implementasikan MFA/2FA untuk akun administratif atau hak akses tinggi.
43
-
44
- ### Kondisi Pemicu
45
- Aktif setiap kali pengguna sedang mengerjakan alur login/signup, manajemen sesi, integrasi OAuth, role-based access control, atau mengintegrasikan Auth.js, Clerk, Supabase Auth, atau Auth0.
1
+ ---
2
+ name: authentication-identity-expert
3
+ description: "Expert guide for implementing secure authentication, authorization (RBAC/ABAC), OAuth2, and identity management (Clerk, Auth.js, Supabase Auth) / Panduan ahli untuk autentikasi dan otorisasi."
4
+ author: "Roedy Rustam"
5
+ ---
6
+
7
+ # Authentication & Identity Expert (2026 Edition)
8
+
9
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
+
11
+ ---
12
+
13
+ <a name="english"></a>
14
+ ## English
15
+
16
+ ### Description
17
+ Production-grade guide for implementing secure authentication, authorization, and identity management in modern web and mobile applications. Covers **Clerk**, **Supabase Auth**, **Auth.js v5**, **Better Auth**, JWT patterns, OAuth 2.1, PKCE flows, RBAC/ABAC, passkeys (WebAuthn), and MFA implementation for React 19 / Next.js 15 stacks.
18
+
19
+ ### Trigger Conditions
20
+ - Working on login/signup flows, session management, or OAuth integration.
21
+ - Integrating **Clerk**, **Supabase Auth**, **Auth.js v5**, **Better Auth**, or **Auth0**.
22
+ - Implementing **Role-Based Access Control (RBAC)** or **Attribute-Based Access Control (ABAC)**.
23
+ - Setting up **WebAuthn/Passkeys**, **MFA/2FA**, or **SSO**.
24
+ - Securing Next.js App Router routes with middleware-based auth guards.
25
+ - Implementing **OAuth 2.1** flows with PKCE for SPAs or mobile apps.
26
+
27
+ ---
28
+
29
+ ### Identity Provider Selection Guide (2026)
30
+
31
+ | Provider | Best For | Key Strength |
32
+ |---|---|---|
33
+ | **Clerk** | SaaS, B2B apps | Built-in organizations, roles, MFA, UI components |
34
+ | **Supabase Auth** | Supabase-powered apps | RLS integration, social login, SSO |
35
+ | **Auth.js v5** | Next.js self-hosted | Flexible adapters, edge-compatible |
36
+ | **Better Auth** | TypeScript-first self-hosted | Modern DX, built-in 2FA, org management |
37
+ | **Auth0** | Enterprise, compliance | Enterprise SSO, compliance (SOC2, HIPAA) |
38
+
39
+ **Recommendation**: Use **Clerk** for most new SaaS apps (best DX). Use **Supabase Auth** if you're already using Supabase. Use **Better Auth** for full control without vendor lock-in.
40
+
41
+ ---
42
+
43
+ ### Core Security Principles
44
+
45
+ #### 1. Never Roll Your Own Crypto
46
+ - Use `argon2id` (preferred) or `bcrypt` for password hashing — **never MD5, SHA1, or plain SHA256**.
47
+ - Use battle-tested libraries: `@node-rs/argon2`, `bcryptjs`.
48
+ - Minimum: bcrypt cost factor ≥12, argon2id memory ≥64MB.
49
+
50
+ #### 2. JWT Best Practices
51
+ ```typescript
52
+ // ✅ Short-lived access tokens + HttpOnly refresh tokens
53
+ const ACCESS_TOKEN_EXPIRY = '15m'; // 15 minutes
54
+ const REFRESH_TOKEN_EXPIRY = '7d'; // 7 days
55
+
56
+ // ✅ Store refresh tokens in HttpOnly, Secure, SameSite=Strict cookies
57
+ res.cookie('refresh_token', token, {
58
+ httpOnly: true,
59
+ secure: true,
60
+ sameSite: 'strict',
61
+ maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days in ms
62
+ });
63
+
64
+ // ❌ Never store tokens in localStorage (XSS vulnerable)
65
+ // ❌ Never put sensitive data in JWT payload (it's base64 decoded, not encrypted)
66
+ ```
67
+
68
+ #### 3. OAuth 2.1 + PKCE (For SPAs & Mobile)
69
+ ```typescript
70
+ // PKCE flow — required for public clients in OAuth 2.1
71
+ import { generateCodeVerifier, generateCodeChallenge } from 'oslo/oauth2';
72
+
73
+ const codeVerifier = generateCodeVerifier(); // 43-128 char random string
74
+ const codeChallenge = await generateCodeChallenge(codeVerifier); // SHA-256 hash
75
+
76
+ // Store codeVerifier in sessionStorage (NOT localStorage) during redirect
77
+ sessionStorage.setItem('pkce_verifier', codeVerifier);
78
+
79
+ // Auth URL includes challenge
80
+ const authUrl = new URL('https://provider.com/oauth/authorize');
81
+ authUrl.searchParams.set('code_challenge', codeChallenge);
82
+ authUrl.searchParams.set('code_challenge_method', 'S256');
83
+ authUrl.searchParams.set('state', cryptoRandomState); // CSRF protection
84
+ ```
85
+
86
+ #### 4. Clerk — Next.js 15 Integration
87
+ ```typescript
88
+ // middleware.ts — protect routes at the edge
89
+ import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server';
90
+
91
+ const isPublicRoute = createRouteMatcher([
92
+ '/', '/sign-in(.*)', '/sign-up(.*)', '/api/webhooks(.*)',
93
+ ]);
94
+
95
+ export default clerkMiddleware(async (auth, req) => {
96
+ if (!isPublicRoute(req)) {
97
+ await auth.protect(); // Redirects to sign-in if unauthenticated
98
+ }
99
+ });
100
+
101
+ export const config = {
102
+ matcher: ['/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', '/(api|trpc)(.*)'],
103
+ };
104
+ ```
105
+
106
+ ```typescript
107
+ // Server Component — get user on the server
108
+ import { auth, currentUser } from '@clerk/nextjs/server';
109
+
110
+ export default async function DashboardPage() {
111
+ const { userId, orgId, orgRole } = await auth();
112
+ if (!userId) redirect('/sign-in');
113
+
114
+ const user = await currentUser();
115
+ return <div>Welcome, {user?.firstName}!</div>;
116
+ }
117
+ ```
118
+
119
+ #### 5. Supabase Auth — RLS Integration
120
+ ```typescript
121
+ // Create Supabase client with user session
122
+ import { createServerClient } from '@supabase/ssr';
123
+
124
+ export async function createSupabaseServerClient(cookieStore: ReadonlyRequestCookies) {
125
+ return createServerClient(
126
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
127
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
128
+ {
129
+ cookies: {
130
+ getAll: () => cookieStore.getAll(),
131
+ setAll: (cookies) => cookies.forEach(({ name, value, options }) =>
132
+ cookieStore.set(name, value, options)
133
+ ),
134
+ },
135
+ }
136
+ );
137
+ }
138
+
139
+ // RLS in PostgreSQL — users can only access their own rows
140
+ -- CREATE POLICY "Users can only see own data" ON profiles
141
+ -- FOR ALL USING (auth.uid() = user_id);
142
+ ```
143
+
144
+ #### 6. Auth.js v5 (Next.js App Router)
145
+ ```typescript
146
+ // auth.ts
147
+ import NextAuth from 'next-auth';
148
+ import GitHub from 'next-auth/providers/github';
149
+ import { DrizzleAdapter } from '@auth/drizzle-adapter';
150
+ import { db } from '@/db';
151
+
152
+ export const { handlers, auth, signIn, signOut } = NextAuth({
153
+ adapter: DrizzleAdapter(db),
154
+ providers: [
155
+ GitHub,
156
+ // Add more providers...
157
+ ],
158
+ session: { strategy: 'database' }, // or 'jwt'
159
+ callbacks: {
160
+ authorized({ auth, request: { nextUrl } }) {
161
+ const isLoggedIn = !!auth?.user;
162
+ const isProtected = nextUrl.pathname.startsWith('/dashboard');
163
+ if (isProtected && !isLoggedIn) return false;
164
+ return true;
165
+ },
166
+ },
167
+ });
168
+ ```
169
+
170
+ #### 7. RBAC — Role-Based Access Control (Server-Side)
171
+ ```typescript
172
+ // ✅ Always enforce roles server-side — never rely on client UI alone
173
+ type Role = 'viewer' | 'editor' | 'admin' | 'super_admin';
174
+
175
+ const permissions: Record<Role, string[]> = {
176
+ viewer: ['read:posts'],
177
+ editor: ['read:posts', 'write:posts', 'delete:own_posts'],
178
+ admin: ['read:posts', 'write:posts', 'delete:any_post', 'manage:users'],
179
+ super_admin: ['*'], // All permissions
180
+ };
181
+
182
+ function hasPermission(userRole: Role, required: string): boolean {
183
+ const allowed = permissions[userRole];
184
+ return allowed.includes('*') || allowed.includes(required);
185
+ }
186
+
187
+ // In Server Action / API Route
188
+ const { userId } = await auth();
189
+ const user = await db.query.users.findFirst({ where: eq(users.id, userId) });
190
+
191
+ if (!hasPermission(user.role, 'delete:any_post')) {
192
+ throw new Error('Forbidden');
193
+ }
194
+ ```
195
+
196
+ #### 8. WebAuthn / Passkeys (2026 Standard)
197
+ ```typescript
198
+ // Using SimpleWebAuthn library
199
+ import { generateRegistrationOptions, verifyRegistrationResponse } from '@simplewebauthn/server';
200
+
201
+ // Registration — generate challenge
202
+ const options = await generateRegistrationOptions({
203
+ rpName: 'My App',
204
+ rpID: 'myapp.com',
205
+ userName: user.email,
206
+ attestationType: 'none',
207
+ authenticatorSelection: {
208
+ residentKey: 'preferred', // Enables passkeys
209
+ userVerification: 'preferred',
210
+ },
211
+ });
212
+
213
+ // Store challenge in session, send options to client
214
+ await redis.setex(`webauthn:${userId}`, 60, JSON.stringify(options.challenge));
215
+ ```
216
+
217
+ ### Security Checklist
218
+ - [ ] Passwords hashed with argon2id (cost ≥64MB) or bcrypt (cost ≥12).
219
+ - [ ] JWT access tokens expire in ≤15 minutes; refresh in HttpOnly cookies.
220
+ - [ ] OAuth state parameter validated on callback (CSRF protection).
221
+ - [ ] PKCE enforced for all public OAuth clients.
222
+ - [ ] All authorization checks enforced server-side (not UI-only).
223
+ - [ ] Admin routes protected by both auth middleware AND role check.
224
+ - [ ] MFA offered (TOTP/WebAuthn) for privileged accounts.
225
+ - [ ] Refresh token rotation on every use (detect theft).
226
+ - [ ] Rate limiting on login/signup endpoints (prevent brute force).
227
+ - [ ] Account lockout after N failed attempts.
228
+
229
+ ---
230
+
231
+ <a name="bahasa-indonesia"></a>
232
+ ## Bahasa Indonesia
233
+
234
+ ### Integrasi Orkestrasi
235
+ Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
236
+
237
+ ### Deskripsi
238
+ Panduan tingkat produksi untuk mengimplementasikan autentikasi, otorisasi, dan manajemen identitas yang aman pada aplikasi web dan mobile modern. Mencakup **Clerk**, **Supabase Auth**, **Auth.js v5**, **Better Auth**, pola JWT, OAuth 2.1, alur PKCE, RBAC/ABAC, passkey (WebAuthn), dan implementasi MFA untuk stack React 19 / Next.js 15.
239
+
240
+ ### Kondisi Pemicu
241
+ - Mengerjakan alur login/signup, manajemen sesi, atau integrasi OAuth.
242
+ - Mengintegrasikan Clerk, Supabase Auth, Auth.js v5, Better Auth, atau Auth0.
243
+ - Mengimplementasikan RBAC (Role-Based Access Control) atau ABAC.
244
+ - Menyiapkan WebAuthn/Passkeys, MFA/2FA, atau SSO.
245
+ - Mengamankan rute Next.js App Router dengan auth guard berbasis middleware.
246
+
247
+ ### Panduan Teknis
248
+
249
+ #### 1. Prinsip Keamanan Inti
250
+ - **Jangan buat kriptografi sendiri**: Gunakan `argon2id` atau `bcrypt` untuk hashing password.
251
+ - **JWT berumur pendek**: Access token ≤15 menit, refresh token di HttpOnly cookie.
252
+ - **PKCE wajib** untuk semua public OAuth client (SPA, mobile).
253
+ - **Validasi state OAuth** di callback untuk proteksi CSRF.
254
+
255
+ #### 2. Pemilihan Identity Provider
256
+ - **Clerk**: Terbaik untuk SaaS baru — DX terbaik, komponen UI siap pakai, manajemen organisasi.
257
+ - **Supabase Auth**: Ideal jika sudah pakai Supabase — integrasi langsung dengan RLS.
258
+ - **Auth.js v5**: Self-hosted, fleksibel, edge-compatible untuk Next.js.
259
+ - **Better Auth**: TypeScript-first, kontrol penuh tanpa vendor lock-in.
260
+
261
+ #### 3. RBAC di Sisi Server
262
+ Selalu terapkan pengecekan role di server (Server Action, API route, middleware) — **jangan hanya di UI**. Gunakan tabel permission yang memetakan setiap role ke daftar aksi yang diizinkan.
263
+
264
+ #### 4. WebAuthn / Passkeys
265
+ Gunakan library `@simplewebauthn/server` untuk registrasi dan verifikasi passkey. Simpan challenge di Redis dengan TTL pendek (60 detik) untuk mencegah replay attack.
266
+
267
+ #### 5. Checklist Keamanan
268
+ - Password di-hash dengan argon2id atau bcrypt.
269
+ - JWT access token expire ≤15 menit; refresh di HttpOnly cookie.
270
+ - State OAuth divalidasi saat callback.
271
+ - PKCE diterapkan untuk semua klien publik OAuth.
272
+ - Pengecekan otorisasi dilakukan di server, bukan hanya UI.
273
+ - MFA ditawarkan untuk akun privileged.
274
+ - Rate limiting di endpoint login/signup.
275
+ - Rotasi refresh token setiap kali digunakan.
276
+
277
+
278
+ ## Orchestration & Integration
279
+ - Connects to other backend skills as part of the orchestration flow.