@kood/claude-code 0.1.6 → 0.1.7

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 (75) hide show
  1. package/dist/index.js +21 -243
  2. package/package.json +1 -1
  3. package/templates/hono/CLAUDE.md +10 -6
  4. package/templates/hono/docs/deployment/index.md +5 -0
  5. package/templates/hono/docs/library/hono/index.md +6 -0
  6. package/templates/hono/docs/library/prisma/index.md +3 -0
  7. package/templates/npx/CLAUDE.md +8 -2
  8. package/templates/tanstack-start/CLAUDE.md +103 -255
  9. package/templates/tanstack-start/docs/deployment/cloudflare.md +37 -424
  10. package/templates/tanstack-start/docs/deployment/index.md +57 -286
  11. package/templates/tanstack-start/docs/deployment/nitro.md +36 -318
  12. package/templates/tanstack-start/docs/deployment/railway.md +40 -409
  13. package/templates/tanstack-start/docs/deployment/vercel.md +43 -465
  14. package/templates/tanstack-start/docs/design/accessibility.md +56 -326
  15. package/templates/tanstack-start/docs/design/color.md +37 -179
  16. package/templates/tanstack-start/docs/design/components.md +77 -311
  17. package/templates/tanstack-start/docs/design/index.md +24 -87
  18. package/templates/tanstack-start/docs/design/safe-area.md +51 -250
  19. package/templates/tanstack-start/docs/design/spacing.md +57 -276
  20. package/templates/tanstack-start/docs/design/tailwind-setup.md +45 -359
  21. package/templates/tanstack-start/docs/design/typography.md +40 -284
  22. package/templates/tanstack-start/docs/library/better-auth/2fa.md +27 -115
  23. package/templates/tanstack-start/docs/library/better-auth/advanced.md +22 -105
  24. package/templates/tanstack-start/docs/library/better-auth/index.md +17 -66
  25. package/templates/tanstack-start/docs/library/better-auth/plugins.md +11 -88
  26. package/templates/tanstack-start/docs/library/better-auth/session.md +12 -92
  27. package/templates/tanstack-start/docs/library/better-auth/setup.md +9 -91
  28. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +30 -358
  29. package/templates/tanstack-start/docs/library/prisma/config.md +27 -327
  30. package/templates/tanstack-start/docs/library/prisma/crud.md +46 -174
  31. package/templates/tanstack-start/docs/library/prisma/index.md +23 -113
  32. package/templates/tanstack-start/docs/library/prisma/relations.md +31 -153
  33. package/templates/tanstack-start/docs/library/prisma/schema.md +40 -217
  34. package/templates/tanstack-start/docs/library/prisma/setup.md +12 -112
  35. package/templates/tanstack-start/docs/library/prisma/transactions.md +20 -110
  36. package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -99
  37. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +28 -107
  38. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +44 -146
  39. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +11 -70
  40. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +33 -127
  41. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +49 -149
  42. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +19 -112
  43. package/templates/tanstack-start/docs/library/tanstack-start/index.md +33 -80
  44. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +28 -106
  45. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +21 -118
  46. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +34 -246
  47. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +6 -39
  48. package/templates/tanstack-start/docs/library/zod/basic-types.md +33 -145
  49. package/templates/tanstack-start/docs/library/zod/complex-types.md +32 -156
  50. package/templates/tanstack-start/docs/library/zod/index.md +22 -150
  51. package/templates/tanstack-start/docs/library/zod/transforms.md +20 -129
  52. package/templates/tanstack-start/docs/library/zod/validation.md +39 -155
  53. package/templates/hono/docs/commands/git.md +0 -145
  54. package/templates/hono/docs/mcp/context7.md +0 -106
  55. package/templates/hono/docs/mcp/index.md +0 -176
  56. package/templates/hono/docs/mcp/sequential-thinking.md +0 -101
  57. package/templates/hono/docs/mcp/serena.md +0 -269
  58. package/templates/hono/docs/mcp/sgrep.md +0 -105
  59. package/templates/hono/docs/skills/gemini-review/SKILL.md +0 -220
  60. package/templates/hono/docs/skills/gemini-review/references/checklists.md +0 -136
  61. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +0 -303
  62. package/templates/npx/docs/commands/git.md +0 -145
  63. package/templates/npx/docs/mcp/index.md +0 -60
  64. package/templates/npx/docs/skills/gemini-review/SKILL.md +0 -220
  65. package/templates/npx/docs/skills/gemini-review/references/checklists.md +0 -134
  66. package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +0 -301
  67. package/templates/tanstack-start/docs/commands/git.md +0 -145
  68. package/templates/tanstack-start/docs/mcp/context7.md +0 -204
  69. package/templates/tanstack-start/docs/mcp/index.md +0 -177
  70. package/templates/tanstack-start/docs/mcp/sequential-thinking.md +0 -180
  71. package/templates/tanstack-start/docs/mcp/serena.md +0 -269
  72. package/templates/tanstack-start/docs/mcp/sgrep.md +0 -174
  73. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +0 -220
  74. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +0 -144
  75. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +0 -292
@@ -1,83 +1,34 @@
1
1
  # Better Auth
2
2
 
3
- > **Version**: Latest
4
- > **Framework**: TypeScript Authentication Library
5
- > **Source**: [Better Auth Documentation](https://www.better-auth.com)
3
+ > TypeScript Authentication Library
6
4
 
7
- Better Auth는 TypeScript를 위한 프레임워크 독립적인 인증 및 권한 부여 라이브러리입니다.
5
+ @setup.md
6
+ @session.md
7
+ @plugins.md
8
+ @2fa.md
9
+ @advanced.md
8
10
 
9
- ## 문서 구조
10
-
11
- - [설치 및 설정](./setup.md) - 서버/클라이언트 설정, 소셜 로그인
12
- - [세션 관리](./session.md) - 세션 설정, 쿠키 캐시
13
- - [플러그인](./plugins.md) - Multi-Session, Custom Session
14
- - [2단계 인증](./2fa.md) - TOTP, OTP, 백업 코드
15
- - [고급 기능](./advanced.md) - CAPTCHA, SSO, SIWE, Stateless 모드
16
-
17
- ## 빠른 시작
18
-
19
- ```bash
20
- yarn add better-auth
21
- ```
22
-
23
- ### 기본 서버 설정
11
+ ## Quick Reference
24
12
 
25
13
  ```typescript
26
- // lib/auth.ts
14
+ // 서버
27
15
  import { betterAuth } from 'better-auth'
28
16
  import { prismaAdapter } from 'better-auth/adapters/prisma'
29
- import { prisma } from './prisma'
30
17
 
31
18
  export const auth = betterAuth({
32
19
  database: prismaAdapter(prisma),
33
- emailAndPassword: {
34
- enabled: true,
35
- requireEmailVerification: false,
36
- },
20
+ emailAndPassword: { enabled: true },
37
21
  })
38
- ```
39
22
 
40
- ### 기본 클라이언트 설정
41
-
42
- ```typescript
43
- // lib/auth-client.ts
23
+ // 클라이언트
44
24
  import { createAuthClient } from 'better-auth/react'
25
+ export const authClient = createAuthClient({})
45
26
 
46
- export const authClient = createAuthClient({
47
- // 옵션
48
- })
49
- ```
50
-
51
- ## 핵심 개념
27
+ // 로그인/가입
28
+ await authClient.signIn.email({ email, password })
29
+ await authClient.signUp.email({ email, password, name })
52
30
 
53
- ### 이메일/비밀번호 인증
54
- ```typescript
55
- // 로그인
56
- await authClient.signIn.email({
57
- email: 'user@example.com',
58
- password: 'password123',
59
- })
60
-
61
- // 회원가입
62
- await authClient.signUp.email({
63
- email: 'user@example.com',
64
- password: 'password123',
65
- name: 'John Doe',
66
- })
31
+ // 세션
32
+ const session = await authClient.getSession() // 클라이언트
33
+ const session = await auth.api.getSession({ headers }) // 서버
67
34
  ```
68
-
69
- ### 세션 조회
70
- ```typescript
71
- // 클라이언트
72
- const session = await authClient.getSession()
73
-
74
- // 서버
75
- const session = await auth.api.getSession({
76
- headers: request.headers,
77
- })
78
- ```
79
-
80
- ## 참고 자료
81
-
82
- - [Better Auth 공식 문서](https://www.better-auth.com)
83
- - [Better Auth GitHub](https://github.com/better-auth/better-auth)
@@ -1,111 +1,34 @@
1
1
  # Better Auth - 플러그인
2
2
 
3
- > **상위 문서**: [Better Auth](./index.md)
4
-
5
- ## Multi-Session Plugin
6
-
7
- 여러 계정으로 동시 로그인을 지원합니다.
8
-
9
- ### 서버 설정
3
+ ## Multi-Session
10
4
 
11
5
  ```typescript
12
- import { betterAuth } from 'better-auth'
6
+ // 서버
13
7
  import { multiSession } from 'better-auth/plugins'
8
+ plugins: [multiSession({ maximumSessions: 5 })]
14
9
 
15
- export const auth = betterAuth({
16
- plugins: [
17
- multiSession({
18
- maximumSessions: 5, // 최대 동시 세션 수
19
- }),
20
- ],
21
- })
22
- ```
23
-
24
- ### 클라이언트 사용
25
-
26
- ```typescript
27
- import { createAuthClient } from 'better-auth/client'
10
+ // 클라이언트
28
11
  import { multiSessionClient } from 'better-auth/client/plugins'
12
+ plugins: [multiSessionClient()]
29
13
 
30
- export const authClient = createAuthClient({
31
- plugins: [multiSessionClient()],
32
- })
33
-
34
- // 활성 세션 목록 조회
35
- const { data: sessions } = await authClient.multiSession.listSessions()
36
-
37
- sessions?.forEach((session) => {
38
- console.log(`Device: ${session.userAgent}, Last active: ${session.updatedAt}`)
39
- })
40
-
41
- // 특정 세션 취소
42
- await authClient.multiSession.revokeSession({
43
- sessionId: 'session_456',
44
- })
45
-
46
- // 다른 모든 세션 취소
14
+ // 사용
15
+ await authClient.multiSession.listSessions()
16
+ await authClient.multiSession.revokeSession({ sessionId })
47
17
  await authClient.multiSession.revokeOtherSessions()
48
18
  ```
49
19
 
50
- ## Polar Checkout Plugin
51
-
52
- 결제 통합을 위한 플러그인입니다.
53
-
54
- ```typescript
55
- import { polar, checkout } from '@polar-sh/better-auth'
56
-
57
- const auth = betterAuth({
58
- plugins: [
59
- polar({
60
- use: [
61
- checkout({
62
- products: [{ productId: '123-456-789', slug: 'pro' }],
63
- successUrl: '/success?checkout_id={CHECKOUT_ID}',
64
- authenticatedUsersOnly: true,
65
- }),
66
- ],
67
- }),
68
- ],
69
- })
70
-
71
- // 클라이언트
72
- import { polarClient } from '@polar-sh/better-auth'
73
-
74
- export const authClient = createAuthClient({
75
- plugins: [polarClient()],
76
- })
77
- ```
78
-
79
20
  ## 플러그인 조합
80
21
 
81
22
  ```typescript
82
- import { betterAuth } from 'better-auth'
83
- import {
84
- multiSession,
85
- customSession,
86
- twoFactor,
87
- captcha
88
- } from 'better-auth/plugins'
23
+ import { multiSession, customSession, twoFactor, captcha } from 'better-auth/plugins'
89
24
 
90
25
  export const auth = betterAuth({
91
26
  database: prismaAdapter(prisma),
92
27
  plugins: [
93
28
  multiSession({ maximumSessions: 5 }),
94
- customSession({
95
- schema: {
96
- session: {
97
- fields: {
98
- ipAddress: { type: 'string', required: false },
99
- },
100
- },
101
- },
102
- }),
29
+ customSession({ schema: { session: { fields: { ipAddress: { type: 'string' } } } } }),
103
30
  twoFactor({ issuer: 'My App' }),
104
- captcha({
105
- provider: 'recaptcha',
106
- siteKey: process.env.RECAPTCHA_SITE_KEY!,
107
- secretKey: process.env.RECAPTCHA_SECRET_KEY!,
108
- }),
31
+ captcha({ provider: 'recaptcha', siteKey: SITE_KEY, secretKey: SECRET_KEY }),
109
32
  ],
110
33
  })
111
34
  ```
@@ -1,127 +1,47 @@
1
1
  # Better Auth - 세션 관리
2
2
 
3
- > **상위 문서**: [Better Auth](./index.md)
4
-
5
- ## 세션 설정
6
-
7
- ```typescript
8
- import { betterAuth } from 'better-auth'
9
-
10
- export const auth = betterAuth({
11
- session: {
12
- modelName: 'sessions',
13
- fields: {
14
- userId: 'user_id',
15
- },
16
- expiresIn: 604800, // 7일 (초 단위)
17
- updateAge: 86400, // 1일마다 갱신
18
- additionalFields: {
19
- customField: {
20
- type: 'string',
21
- },
22
- },
23
- },
24
- })
25
- ```
26
-
27
- ## 쿠키 캐시
28
-
29
- 세션 조회 성능 최적화를 위한 쿠키 캐시:
3
+ ## 설정
30
4
 
31
5
  ```typescript
32
6
  export const auth = betterAuth({
33
7
  session: {
8
+ expiresIn: 604800, // 7일 (초)
9
+ updateAge: 86400, // 1일마다 갱신
34
10
  cookieCache: {
35
11
  enabled: true,
36
- maxAge: 5 * 60, // 5분
37
- strategy: 'compact', // 'compact' | 'jwt' | 'jwe'
38
- refreshCache: true,
12
+ maxAge: 5 * 60, // 5분
13
+ strategy: 'compact', // 'compact' | 'jwt' | 'jwe'
39
14
  },
40
15
  },
41
16
  })
42
17
  ```
43
18
 
44
- ## 세션 가져오기
45
-
46
- ### 클라이언트
19
+ ## 세션 조회
47
20
 
48
21
  ```typescript
49
- // 기본
22
+ // 클라이언트
50
23
  const session = await authClient.getSession()
24
+ const session = await authClient.getSession({ query: { disableCookieCache: true } })
51
25
 
52
- // 쿠키 캐시 우회 (DB에서 직접 가져오기)
53
- const session = await authClient.getSession({
54
- query: {
55
- disableCookieCache: true,
56
- },
57
- })
58
- ```
59
-
60
- ### 서버
61
-
62
- ```typescript
63
- await auth.api.getSession({
64
- query: {
65
- disableCookieCache: true,
66
- },
67
- headers: req.headers,
68
- })
26
+ // 서버
27
+ await auth.api.getSession({ headers: req.headers })
69
28
  ```
70
29
 
71
30
  ## Custom Session Plugin
72
31
 
73
- 세션 스키마 확장 및 커스텀 로직 구현:
74
-
75
32
  ```typescript
76
- import { betterAuth } from 'better-auth'
77
33
  import { customSession } from 'better-auth/plugins'
78
34
 
79
35
  export const auth = betterAuth({
80
36
  plugins: [
81
37
  customSession({
82
- // 세션 스키마 확장
83
38
  schema: {
84
- session: {
85
- fields: {
86
- ipAddress: {
87
- type: 'string',
88
- required: false,
89
- },
90
- userAgent: {
91
- type: 'string',
92
- required: false,
93
- },
94
- metadata: {
95
- type: 'json',
96
- required: false,
97
- },
98
- },
99
- },
39
+ session: { fields: { ipAddress: { type: 'string' }, metadata: { type: 'json' } } },
100
40
  },
101
-
102
- // 세션 생성 시 커스터마이즈
103
41
  async onSessionCreate(session, context) {
104
- return {
105
- ...session,
106
- ipAddress: context.request.headers.get('x-forwarded-for'),
107
- userAgent: context.request.headers.get('user-agent'),
108
- metadata: { loginMethod: 'email' },
109
- }
110
- },
111
-
112
- // 세션 조회 시 커스터마이즈
113
- async onSessionGet(session, context) {
114
- return {
115
- ...session,
116
- activeDevices: await getActiveDevices(session.userId),
117
- }
42
+ return { ...session, ipAddress: context.request.headers.get('x-forwarded-for') }
118
43
  },
119
44
  }),
120
45
  ],
121
46
  })
122
-
123
- // 타입 안전한 커스텀 세션 데이터 접근
124
- const session = await auth.api.getSession({ headers })
125
- console.log('IP Address:', session?.ipAddress)
126
- console.log('Metadata:', session?.metadata)
127
47
  ```
@@ -1,123 +1,41 @@
1
1
  # Better Auth - 설치 및 설정
2
2
 
3
- > **상위 문서**: [Better Auth](./index.md)
4
-
5
3
  ## 설치
6
4
 
7
5
  ```bash
8
6
  yarn add better-auth
9
7
  ```
10
8
 
11
- ## 서버 설정
12
-
13
- ### 기본 설정
9
+ ## 서버
14
10
 
15
11
  ```typescript
16
- // lib/auth.ts
17
12
  import { betterAuth } from 'better-auth'
18
13
  import { prismaAdapter } from 'better-auth/adapters/prisma'
19
- import { prisma } from './prisma'
20
-
21
- export const auth = betterAuth({
22
- database: prismaAdapter(prisma),
23
-
24
- // 이메일/비밀번호 인증 활성화
25
- emailAndPassword: {
26
- enabled: true,
27
- requireEmailVerification: false,
28
- },
29
- })
30
- ```
31
-
32
- ### 소셜 로그인 설정
33
-
34
- ```typescript
35
- import { betterAuth } from 'better-auth'
36
14
 
37
15
  export const auth = betterAuth({
38
16
  database: prismaAdapter(prisma),
17
+ emailAndPassword: { enabled: true },
39
18
  socialProviders: {
40
- google: {
41
- clientId: process.env.GOOGLE_CLIENT_ID as string,
42
- clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
43
- },
44
- github: {
45
- clientId: process.env.GITHUB_CLIENT_ID as string,
46
- clientSecret: process.env.GITHUB_CLIENT_SECRET as string,
47
- },
48
- spotify: {
49
- clientId: process.env.SPOTIFY_CLIENT_ID as string,
50
- clientSecret: process.env.SPOTIFY_CLIENT_SECRET as string,
51
- },
19
+ google: { clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET },
20
+ github: { clientId: process.env.GITHUB_CLIENT_ID, clientSecret: process.env.GITHUB_CLIENT_SECRET },
52
21
  },
53
22
  })
54
23
  ```
55
24
 
56
- ## 클라이언트 설정
57
-
58
- ### 기본 클라이언트
59
-
60
- ```typescript
61
- // lib/auth-client.ts
62
- import { createAuthClient } from 'better-auth/client'
63
-
64
- export const authClient = createAuthClient({
65
- // 옵션
66
- })
67
- ```
68
-
69
- ### React 클라이언트
25
+ ## 클라이언트
70
26
 
71
27
  ```typescript
72
28
  import { createAuthClient } from 'better-auth/react'
73
-
74
- export const authClient = createAuthClient({
75
- // 옵션
76
- })
77
- ```
78
-
79
- ### 플러그인 포함 클라이언트
80
-
81
- ```typescript
82
- import { createAuthClient } from 'better-auth/client'
83
29
  import { twoFactorClient } from 'better-auth/client/plugins'
84
30
 
85
- const authClient = createAuthClient({
86
- plugins: [
87
- twoFactorClient({
88
- twoFactorPage: '/two-factor',
89
- onTwoFactorRedirect() {
90
- router.push('/two-factor')
91
- },
92
- }),
93
- ],
31
+ export const authClient = createAuthClient({
32
+ plugins: [twoFactorClient({ twoFactorPage: '/two-factor' })],
94
33
  })
95
34
  ```
96
35
 
97
- ## TanStack Start 통합
36
+ ## TanStack Start 연동
98
37
 
99
38
  ```typescript
100
- // lib/auth.ts
101
- import { betterAuth } from 'better-auth'
102
- import { prismaAdapter } from 'better-auth/adapters/prisma'
103
- import { prisma } from './prisma'
104
-
105
- export const auth = betterAuth({
106
- database: prismaAdapter(prisma),
107
- emailAndPassword: {
108
- enabled: true,
109
- },
110
- })
111
-
112
- // Server Function에서 사용
113
- import { createServerFn } from '@tanstack/react-start'
114
- import { auth } from '@/lib/auth'
115
-
116
39
  export const getSession = createServerFn({ method: 'GET' })
117
- .handler(async ({ request }) => {
118
- const session = await auth.api.getSession({
119
- headers: request.headers,
120
- })
121
- return session
122
- })
40
+ .handler(async ({ request }) => auth.api.getSession({ headers: request.headers }))
123
41
  ```