@opensaas/stack-auth 0.3.0 → 0.4.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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +91 -0
- package/dist/lists/index.d.ts +7 -7
- package/dist/lists/index.d.ts.map +1 -1
- package/dist/lists/index.js +4 -0
- package/dist/lists/index.js.map +1 -1
- package/dist/server/schema-converter.d.ts +2 -2
- package/dist/server/schema-converter.d.ts.map +1 -1
- package/dist/server/schema-converter.js +12 -1
- package/dist/server/schema-converter.js.map +1 -1
- package/package.json +10 -11
- package/src/lists/index.ts +15 -7
- package/src/server/schema-converter.ts +27 -14
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,96 @@
|
|
|
1
1
|
# @opensaas/stack-auth
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#172](https://github.com/OpenSaasAU/stack/pull/172) [`929a2a9`](https://github.com/OpenSaasAU/stack/commit/929a2a9a2dfa80b1d973d259dd87828d644ea58d) Thanks [@list<Lists.User.TypeInfo>({](https://github.com/list<Lists.User.TypeInfo>({), [@list<Lists.User.TypeInfo>({](https://github.com/list<Lists.User.TypeInfo>({)! - Improve TypeScript type inference for field configs and list-level hooks by automatically passing TypeInfo from list level down
|
|
8
|
+
|
|
9
|
+
This change eliminates the need to manually specify type parameters on field builders when using features like virtual fields, and fixes a critical bug where list-level hooks weren't receiving properly typed parameters.
|
|
10
|
+
|
|
11
|
+
## Field Type Inference Improvements
|
|
12
|
+
|
|
13
|
+
Previously, users had to write `virtual<Lists.User.TypeInfo>({...})` to get proper type inference. Now TypeScript automatically infers the correct types from the list-level type parameter.
|
|
14
|
+
|
|
15
|
+
**Example:**
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// Before
|
|
19
|
+
|
|
20
|
+
fields: {
|
|
21
|
+
displayName: virtual<Lists.User.TypeInfo>({
|
|
22
|
+
type: 'string',
|
|
23
|
+
hooks: {
|
|
24
|
+
resolveOutput: ({ item }) => `${item.name} (${item.email})`,
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
// After
|
|
31
|
+
|
|
32
|
+
fields: {
|
|
33
|
+
displayName: virtual({
|
|
34
|
+
type: 'string',
|
|
35
|
+
hooks: {
|
|
36
|
+
resolveOutput: ({ item }) => `${item.name} (${item.email})`,
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
},
|
|
40
|
+
})
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## List-Level Hooks Type Inference Fix
|
|
44
|
+
|
|
45
|
+
Fixed a critical type parameter mismatch where `Hooks<TTypeInfo>` was passing the entire TypeInfo object as the first parameter instead of properly destructuring it into three required parameters:
|
|
46
|
+
1. `TOutput` - The item type (what's stored in DB)
|
|
47
|
+
2. `TCreateInput` - Prisma create input type
|
|
48
|
+
3. `TUpdateInput` - Prisma update input type
|
|
49
|
+
|
|
50
|
+
**Impact:**
|
|
51
|
+
- `resolveInput` now receives proper Prisma input types (e.g., `PostCreateInput`, `PostUpdateInput`)
|
|
52
|
+
- `validateInput` has access to properly typed input data
|
|
53
|
+
- `beforeOperation` and `afterOperation` have correct item types
|
|
54
|
+
- All list-level hook callbacks now get full IntelliSense and type checking
|
|
55
|
+
|
|
56
|
+
**Example:**
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
Post: list<Lists.Post.TypeInfo>({
|
|
60
|
+
fields: { title: text(), content: text() },
|
|
61
|
+
hooks: {
|
|
62
|
+
resolveInput: async ({ operation, resolvedData }) => {
|
|
63
|
+
// ✅ resolvedData is now properly typed as PostCreateInput or PostUpdateInput
|
|
64
|
+
// ✅ Full autocomplete for title, content, etc.
|
|
65
|
+
if (operation === 'create') {
|
|
66
|
+
console.log(resolvedData.title) // TypeScript knows this is string | undefined
|
|
67
|
+
}
|
|
68
|
+
return resolvedData
|
|
69
|
+
},
|
|
70
|
+
beforeOperation: async ({ operation, item }) => {
|
|
71
|
+
// ✅ item is now properly typed as Post with all fields
|
|
72
|
+
if (operation === 'update' && item) {
|
|
73
|
+
console.log(item.title) // TypeScript knows this is string
|
|
74
|
+
console.log(item.createdAt) // TypeScript knows this is Date
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Breaking Changes
|
|
82
|
+
- Field types now accept full `TTypeInfo extends TypeInfo` instead of just `TItem`
|
|
83
|
+
- `FieldsWithItemType` utility replaced with `FieldsWithTypeInfo`
|
|
84
|
+
- All field builders updated to use new type signature
|
|
85
|
+
- List-level hooks now receive properly typed parameters (may reveal existing type errors)
|
|
86
|
+
|
|
87
|
+
## Benefits
|
|
88
|
+
- ✨ Cleaner code without manual type parameter repetition
|
|
89
|
+
- 🎯 Better type inference in both field-level and list-level hooks
|
|
90
|
+
- 🔄 Consistent type flow from list configuration down to individual fields
|
|
91
|
+
- 🛡️ Maintained full type safety with improved DX
|
|
92
|
+
- 💡 Full IntelliSense support in all hook callbacks
|
|
93
|
+
|
|
3
94
|
## 0.3.0
|
|
4
95
|
|
|
5
96
|
### Minor Changes
|
package/dist/lists/index.d.ts
CHANGED
|
@@ -12,35 +12,35 @@ export type ExtendUserListConfig = {
|
|
|
12
12
|
* Access control for the User list
|
|
13
13
|
* If not provided, defaults to basic access control (users can update their own records)
|
|
14
14
|
*/
|
|
15
|
-
access?: ListConfig['access'];
|
|
15
|
+
access?: ListConfig<any>['access'];
|
|
16
16
|
/**
|
|
17
17
|
* Hooks for the User list
|
|
18
18
|
*/
|
|
19
|
-
hooks?: ListConfig['hooks'];
|
|
19
|
+
hooks?: ListConfig<any>['hooks'];
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* Create the base User list with better-auth required fields
|
|
23
23
|
* This matches the better-auth user schema
|
|
24
24
|
*/
|
|
25
|
-
export declare function createUserList(config?: ExtendUserListConfig): ListConfig
|
|
25
|
+
export declare function createUserList(config?: ExtendUserListConfig): ListConfig<any>;
|
|
26
26
|
/**
|
|
27
27
|
* Create the Session list for better-auth
|
|
28
28
|
* Stores active user sessions
|
|
29
29
|
*/
|
|
30
|
-
export declare function createSessionList(): ListConfig
|
|
30
|
+
export declare function createSessionList(): ListConfig<any>;
|
|
31
31
|
/**
|
|
32
32
|
* Create the Account list for better-auth
|
|
33
33
|
* Stores OAuth provider accounts and credentials
|
|
34
34
|
*/
|
|
35
|
-
export declare function createAccountList(): ListConfig
|
|
35
|
+
export declare function createAccountList(): ListConfig<any>;
|
|
36
36
|
/**
|
|
37
37
|
* Create the Verification list for better-auth
|
|
38
38
|
* Stores email verification tokens, password reset tokens, etc.
|
|
39
39
|
*/
|
|
40
|
-
export declare function createVerificationList(): ListConfig
|
|
40
|
+
export declare function createVerificationList(): ListConfig<any>;
|
|
41
41
|
/**
|
|
42
42
|
* Get all auth lists required by better-auth
|
|
43
43
|
* This is the main export used by withAuth()
|
|
44
44
|
*/
|
|
45
|
-
export declare function getAuthLists(userConfig?: ExtendUserListConfig): Record<string, ListConfig
|
|
45
|
+
export declare function getAuthLists(userConfig?: ExtendUserListConfig): Record<string, ListConfig<any>>;
|
|
46
46
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lists/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpC;;;OAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lists/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpC;;;OAGG;IAEH,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IAClC;;OAEG;IAEH,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;CACjC,CAAA;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,oBAAoB,GAC5B,UAAU,CAAC,GAAG,CAAC,CAqDjB;AAED;;;GAGG;AAEH,wBAAgB,iBAAiB,IAAI,UAAU,CAAC,GAAG,CAAC,CA+CnD;AAED;;;GAGG;AAEH,wBAAgB,iBAAiB,IAAI,UAAU,CAAC,GAAG,CAAC,CA0DnD;AAED;;;GAGG;AAEH,wBAAgB,sBAAsB,IAAI,UAAU,CAAC,GAAG,CAAC,CA2BxD;AAED;;;GAGG;AAEH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAO/F"}
|
package/dist/lists/index.js
CHANGED
|
@@ -62,6 +62,7 @@ export function createUserList(config) {
|
|
|
62
62
|
* Create the Session list for better-auth
|
|
63
63
|
* Stores active user sessions
|
|
64
64
|
*/
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
65
66
|
export function createSessionList() {
|
|
66
67
|
return list({
|
|
67
68
|
fields: {
|
|
@@ -117,6 +118,7 @@ export function createSessionList() {
|
|
|
117
118
|
* Create the Account list for better-auth
|
|
118
119
|
* Stores OAuth provider accounts and credentials
|
|
119
120
|
*/
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
120
122
|
export function createAccountList() {
|
|
121
123
|
return list({
|
|
122
124
|
fields: {
|
|
@@ -184,6 +186,7 @@ export function createAccountList() {
|
|
|
184
186
|
* Create the Verification list for better-auth
|
|
185
187
|
* Stores email verification tokens, password reset tokens, etc.
|
|
186
188
|
*/
|
|
189
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
187
190
|
export function createVerificationList() {
|
|
188
191
|
return list({
|
|
189
192
|
fields: {
|
|
@@ -216,6 +219,7 @@ export function createVerificationList() {
|
|
|
216
219
|
* Get all auth lists required by better-auth
|
|
217
220
|
* This is the main export used by withAuth()
|
|
218
221
|
*/
|
|
222
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
219
223
|
export function getAuthLists(userConfig) {
|
|
220
224
|
return {
|
|
221
225
|
User: createUserList(userConfig),
|
package/dist/lists/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lists/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lists/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,11 +30,11 @@ type BetterAuthTableSchema = {
|
|
|
30
30
|
/**
|
|
31
31
|
* Convert Better Auth table schema to OpenSaaS ListConfig
|
|
32
32
|
*/
|
|
33
|
-
export declare function convertTableToList(tableName: string, tableSchema: BetterAuthTableSchema): ListConfig
|
|
33
|
+
export declare function convertTableToList(tableName: string, tableSchema: BetterAuthTableSchema): ListConfig<any>;
|
|
34
34
|
/**
|
|
35
35
|
* Convert all Better Auth tables to OpenSaaS list configs
|
|
36
36
|
* This is called by withAuth() to generate lists from Better Auth + plugins
|
|
37
37
|
*/
|
|
38
|
-
export declare function convertBetterAuthSchema(tables: Record<string, BetterAuthTableSchema>): Record<string, ListConfig
|
|
38
|
+
export declare function convertBetterAuthSchema(tables: Record<string, BetterAuthTableSchema>): Record<string, ListConfig<any>>;
|
|
39
39
|
export {};
|
|
40
40
|
//# sourceMappingURL=schema-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,sBAAsB,CAAA;AAEnE;;;GAGG;AACH,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAA;KAC/C,CAAA;IACD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;CACjD,CAAA;
|
|
1
|
+
{"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,sBAAsB,CAAA;AAEnE;;;GAGG;AACH,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAA;KAC/C,CAAA;IACD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;CACjD,CAAA;AAiND;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,qBAAqB,GAEjC,UAAU,CAAC,GAAG,CAAC,CAgCjB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAE5C,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAUjC"}
|
|
@@ -52,6 +52,7 @@ function convertField(fieldName, betterAuthField) {
|
|
|
52
52
|
* Get default access control for auth tables
|
|
53
53
|
* Most auth tables should only be accessible to their owners
|
|
54
54
|
*/
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
55
56
|
function getDefaultAccess(tableName) {
|
|
56
57
|
const lowerTableName = tableName.toLowerCase();
|
|
57
58
|
// User table - special access control
|
|
@@ -60,6 +61,7 @@ function getDefaultAccess(tableName) {
|
|
|
60
61
|
operation: {
|
|
61
62
|
query: () => true, // Anyone can query users
|
|
62
63
|
create: () => true, // Anyone can create (sign up)
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
63
65
|
update: ({ session, item }) => {
|
|
64
66
|
if (!session)
|
|
65
67
|
return false;
|
|
@@ -67,6 +69,7 @@ function getDefaultAccess(tableName) {
|
|
|
67
69
|
const itemId = item?.id;
|
|
68
70
|
return userId === itemId;
|
|
69
71
|
},
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
70
73
|
delete: ({ session, item }) => {
|
|
71
74
|
if (!session)
|
|
72
75
|
return false;
|
|
@@ -81,6 +84,7 @@ function getDefaultAccess(tableName) {
|
|
|
81
84
|
if (lowerTableName === 'session') {
|
|
82
85
|
return {
|
|
83
86
|
operation: {
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
84
88
|
query: ({ session }) => {
|
|
85
89
|
if (!session)
|
|
86
90
|
return false;
|
|
@@ -93,6 +97,7 @@ function getDefaultAccess(tableName) {
|
|
|
93
97
|
},
|
|
94
98
|
create: () => true, // Better-auth handles session creation
|
|
95
99
|
update: () => false, // No manual updates
|
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
96
101
|
delete: ({ session, item }) => {
|
|
97
102
|
if (!session)
|
|
98
103
|
return false;
|
|
@@ -107,6 +112,7 @@ function getDefaultAccess(tableName) {
|
|
|
107
112
|
if (lowerTableName === 'account') {
|
|
108
113
|
return {
|
|
109
114
|
operation: {
|
|
115
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
110
116
|
query: ({ session }) => {
|
|
111
117
|
if (!session)
|
|
112
118
|
return false;
|
|
@@ -118,6 +124,7 @@ function getDefaultAccess(tableName) {
|
|
|
118
124
|
};
|
|
119
125
|
},
|
|
120
126
|
create: () => true, // Better-auth handles account creation
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
121
128
|
update: ({ session, item }) => {
|
|
122
129
|
if (!session)
|
|
123
130
|
return false;
|
|
@@ -125,6 +132,7 @@ function getDefaultAccess(tableName) {
|
|
|
125
132
|
const itemUserId = item?.user?.id;
|
|
126
133
|
return userId === itemUserId;
|
|
127
134
|
},
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
128
136
|
delete: ({ session, item }) => {
|
|
129
137
|
if (!session)
|
|
130
138
|
return false;
|
|
@@ -152,6 +160,7 @@ function getDefaultAccess(tableName) {
|
|
|
152
160
|
lowerTableName === 'oauthconsent') {
|
|
153
161
|
return {
|
|
154
162
|
operation: {
|
|
163
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
155
164
|
query: ({ session }) => {
|
|
156
165
|
if (!session)
|
|
157
166
|
return false;
|
|
@@ -164,6 +173,7 @@ function getDefaultAccess(tableName) {
|
|
|
164
173
|
};
|
|
165
174
|
},
|
|
166
175
|
create: () => true, // Better-auth/plugins handle creation
|
|
176
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
167
177
|
update: ({ session, item }) => {
|
|
168
178
|
if (!session)
|
|
169
179
|
return false;
|
|
@@ -171,6 +181,7 @@ function getDefaultAccess(tableName) {
|
|
|
171
181
|
const itemUserId = item?.userId;
|
|
172
182
|
return userId === itemUserId;
|
|
173
183
|
},
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
174
185
|
delete: ({ session, item }) => {
|
|
175
186
|
if (!session)
|
|
176
187
|
return false;
|
|
@@ -229,7 +240,7 @@ export function convertTableToList(tableName, tableSchema) {
|
|
|
229
240
|
* This is called by withAuth() to generate lists from Better Auth + plugins
|
|
230
241
|
*/
|
|
231
242
|
export function convertBetterAuthSchema(tables) {
|
|
232
|
-
const lists = {};
|
|
243
|
+
const lists = {}; // eslint-disable-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
233
244
|
for (const [tableName, tableSchema] of Object.entries(tables)) {
|
|
234
245
|
// Convert table name to PascalCase for OpenSaaS list key
|
|
235
246
|
const listKey = tableSchema.modelName || toPascalCase(tableName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AA6BhF;;GAEG;AACH,SAAS,YAAY,CACnB,SAAiB,EACjB,eAAyC;IAEzC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,eAAe,CAAA;IAE5E,+CAA+C;IAC/C,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QACjF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oCAAoC;IACpC,IAAI,UAAU,EAAE,CAAC;QACf,uCAAuC;QACvC,mDAAmD;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gDAAgD;IAChD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;gBACV,UAAU,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;gBACpC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACxC,YAAY,EAAE,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aAC1E,CAAC,CAAA;QAEJ,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC;gBACb,UAAU,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;gBACpC,YAAY,EAAE,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aAC1E,CAAC,CAAA;QAEJ,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;gBACd,YAAY,EAAE,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK;aACvE,CAAC,CAAA;QAEJ,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;gBACf,YAAY,EAAE,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;aACnE,CAAC,CAAA;QAEJ;YACE,iCAAiC;YACjC,OAAO,CAAC,IAAI,CACV,gDAAgD,IAAI,gBAAgB,SAAS,6BAA6B,CAC3G,CAAA;YACD,OAAO,IAAI,CAAC;gBACV,UAAU,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;aACrC,CAAC,CAAA;IACN,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,SAAiB;IACzC,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;IAE9C,sCAAsC;IACtC,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO;YACL,SAAS,EAAE;gBACT,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,yBAAyB;gBAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,8BAA8B;gBAClD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensaas/stack-auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Better-auth integration for OpenSaas Stack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -54,18 +54,17 @@
|
|
|
54
54
|
"next": "^15.0.0 || ^16.0.0",
|
|
55
55
|
"react": "^18.0.0 || ^19.0.0"
|
|
56
56
|
},
|
|
57
|
-
"dependencies": {},
|
|
58
57
|
"devDependencies": {
|
|
59
|
-
"@types/node": "^24.
|
|
60
|
-
"@types/react": "^19.2.
|
|
61
|
-
"@vitest/coverage-v8": "^4.0.
|
|
62
|
-
"@vitest/ui": "^4.0.
|
|
63
|
-
"better-auth": "^1.
|
|
64
|
-
"next": "^16.0.
|
|
65
|
-
"react": "^19.2.
|
|
58
|
+
"@types/node": "^24.10.1",
|
|
59
|
+
"@types/react": "^19.2.7",
|
|
60
|
+
"@vitest/coverage-v8": "^4.0.15",
|
|
61
|
+
"@vitest/ui": "^4.0.15",
|
|
62
|
+
"better-auth": "^1.4.5",
|
|
63
|
+
"next": "^16.0.7",
|
|
64
|
+
"react": "^19.2.1",
|
|
66
65
|
"typescript": "^5.9.3",
|
|
67
|
-
"vitest": "^4.0.
|
|
68
|
-
"@opensaas/stack-core": "0.
|
|
66
|
+
"vitest": "^4.0.15",
|
|
67
|
+
"@opensaas/stack-core": "0.4.0"
|
|
69
68
|
},
|
|
70
69
|
"scripts": {
|
|
71
70
|
"build": "tsc",
|
package/src/lists/index.ts
CHANGED
|
@@ -15,18 +15,22 @@ export type ExtendUserListConfig = {
|
|
|
15
15
|
* Access control for the User list
|
|
16
16
|
* If not provided, defaults to basic access control (users can update their own records)
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
19
|
+
access?: ListConfig<any>['access']
|
|
19
20
|
/**
|
|
20
21
|
* Hooks for the User list
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
24
|
+
hooks?: ListConfig<any>['hooks']
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Create the base User list with better-auth required fields
|
|
27
29
|
* This matches the better-auth user schema
|
|
28
30
|
*/
|
|
29
|
-
export function createUserList(
|
|
31
|
+
export function createUserList(
|
|
32
|
+
config?: ExtendUserListConfig, // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
33
|
+
): ListConfig<any> {
|
|
30
34
|
return list({
|
|
31
35
|
fields: {
|
|
32
36
|
// Better-auth required fields
|
|
@@ -85,7 +89,8 @@ export function createUserList(config?: ExtendUserListConfig): ListConfig {
|
|
|
85
89
|
* Create the Session list for better-auth
|
|
86
90
|
* Stores active user sessions
|
|
87
91
|
*/
|
|
88
|
-
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
93
|
+
export function createSessionList(): ListConfig<any> {
|
|
89
94
|
return list({
|
|
90
95
|
fields: {
|
|
91
96
|
// Session token (stored in cookie, used as primary key)
|
|
@@ -138,7 +143,8 @@ export function createSessionList(): ListConfig {
|
|
|
138
143
|
* Create the Account list for better-auth
|
|
139
144
|
* Stores OAuth provider accounts and credentials
|
|
140
145
|
*/
|
|
141
|
-
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
147
|
+
export function createAccountList(): ListConfig<any> {
|
|
142
148
|
return list({
|
|
143
149
|
fields: {
|
|
144
150
|
// Account identifier from provider
|
|
@@ -202,7 +208,8 @@ export function createAccountList(): ListConfig {
|
|
|
202
208
|
* Create the Verification list for better-auth
|
|
203
209
|
* Stores email verification tokens, password reset tokens, etc.
|
|
204
210
|
*/
|
|
205
|
-
|
|
211
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
212
|
+
export function createVerificationList(): ListConfig<any> {
|
|
206
213
|
return list({
|
|
207
214
|
fields: {
|
|
208
215
|
// Identifier (e.g., email address)
|
|
@@ -235,7 +242,8 @@ export function createVerificationList(): ListConfig {
|
|
|
235
242
|
* Get all auth lists required by better-auth
|
|
236
243
|
* This is the main export used by withAuth()
|
|
237
244
|
*/
|
|
238
|
-
|
|
245
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
246
|
+
export function getAuthLists(userConfig?: ExtendUserListConfig): Record<string, ListConfig<any>> {
|
|
239
247
|
return {
|
|
240
248
|
User: createUserList(userConfig),
|
|
241
249
|
Session: createSessionList(),
|
|
@@ -94,7 +94,8 @@ function convertField(
|
|
|
94
94
|
* Get default access control for auth tables
|
|
95
95
|
* Most auth tables should only be accessible to their owners
|
|
96
96
|
*/
|
|
97
|
-
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
98
|
+
function getDefaultAccess(tableName: string): ListConfig<any>['access'] {
|
|
98
99
|
const lowerTableName = tableName.toLowerCase()
|
|
99
100
|
|
|
100
101
|
// User table - special access control
|
|
@@ -103,13 +104,15 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
103
104
|
operation: {
|
|
104
105
|
query: () => true, // Anyone can query users
|
|
105
106
|
create: () => true, // Anyone can create (sign up)
|
|
106
|
-
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
108
|
+
update: ({ session, item }: any) => {
|
|
107
109
|
if (!session) return false
|
|
108
110
|
const userId = (session as { userId?: string }).userId
|
|
109
111
|
const itemId = (item as { id?: string })?.id
|
|
110
112
|
return userId === itemId
|
|
111
113
|
},
|
|
112
|
-
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
115
|
+
delete: ({ session, item }: any) => {
|
|
113
116
|
if (!session) return false
|
|
114
117
|
const userId = (session as { userId?: string }).userId
|
|
115
118
|
const itemId = (item as { id?: string })?.id
|
|
@@ -123,7 +126,8 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
123
126
|
if (lowerTableName === 'session') {
|
|
124
127
|
return {
|
|
125
128
|
operation: {
|
|
126
|
-
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
130
|
+
query: ({ session }: any) => {
|
|
127
131
|
if (!session) return false
|
|
128
132
|
const userId = (session as { userId?: string }).userId
|
|
129
133
|
if (!userId) return false
|
|
@@ -133,7 +137,8 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
133
137
|
},
|
|
134
138
|
create: () => true, // Better-auth handles session creation
|
|
135
139
|
update: () => false, // No manual updates
|
|
136
|
-
|
|
140
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
141
|
+
delete: ({ session, item }: any) => {
|
|
137
142
|
if (!session) return false
|
|
138
143
|
const userId = (session as { userId?: string }).userId
|
|
139
144
|
const itemUserId = (item as { user?: { id?: string } })?.user?.id
|
|
@@ -147,7 +152,8 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
147
152
|
if (lowerTableName === 'account') {
|
|
148
153
|
return {
|
|
149
154
|
operation: {
|
|
150
|
-
|
|
155
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
156
|
+
query: ({ session }: any) => {
|
|
151
157
|
if (!session) return false
|
|
152
158
|
const userId = (session as { userId?: string }).userId
|
|
153
159
|
if (!userId) return false
|
|
@@ -156,13 +162,15 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
156
162
|
} as Record<string, unknown>
|
|
157
163
|
},
|
|
158
164
|
create: () => true, // Better-auth handles account creation
|
|
159
|
-
|
|
165
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
166
|
+
update: ({ session, item }: any) => {
|
|
160
167
|
if (!session) return false
|
|
161
168
|
const userId = (session as { userId?: string }).userId
|
|
162
169
|
const itemUserId = (item as { user?: { id?: string } })?.user?.id
|
|
163
170
|
return userId === itemUserId
|
|
164
171
|
},
|
|
165
|
-
|
|
172
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
173
|
+
delete: ({ session, item }: any) => {
|
|
166
174
|
if (!session) return false
|
|
167
175
|
const userId = (session as { userId?: string }).userId
|
|
168
176
|
const itemUserId = (item as { user?: { id?: string } })?.user?.id
|
|
@@ -192,7 +200,8 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
192
200
|
) {
|
|
193
201
|
return {
|
|
194
202
|
operation: {
|
|
195
|
-
|
|
203
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
204
|
+
query: ({ session }: any) => {
|
|
196
205
|
if (!session) return false
|
|
197
206
|
const userId = (session as { userId?: string }).userId
|
|
198
207
|
if (!userId) return false
|
|
@@ -202,13 +211,15 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
202
211
|
} as Record<string, unknown>
|
|
203
212
|
},
|
|
204
213
|
create: () => true, // Better-auth/plugins handle creation
|
|
205
|
-
|
|
214
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
215
|
+
update: ({ session, item }: any) => {
|
|
206
216
|
if (!session) return false
|
|
207
217
|
const userId = (session as { userId?: string }).userId
|
|
208
218
|
const itemUserId = (item as { userId?: string })?.userId
|
|
209
219
|
return userId === itemUserId
|
|
210
220
|
},
|
|
211
|
-
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Access control parameters are runtime values
|
|
222
|
+
delete: ({ session, item }: any) => {
|
|
212
223
|
if (!session) return false
|
|
213
224
|
const userId = (session as { userId?: string }).userId
|
|
214
225
|
const itemUserId = (item as { userId?: string })?.userId
|
|
@@ -235,7 +246,8 @@ function getDefaultAccess(tableName: string): ListConfig['access'] {
|
|
|
235
246
|
export function convertTableToList(
|
|
236
247
|
tableName: string,
|
|
237
248
|
tableSchema: BetterAuthTableSchema,
|
|
238
|
-
|
|
249
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
250
|
+
): ListConfig<any> {
|
|
239
251
|
const fields: Record<string, FieldConfig> = {}
|
|
240
252
|
|
|
241
253
|
// First pass: convert regular fields
|
|
@@ -275,8 +287,9 @@ export function convertTableToList(
|
|
|
275
287
|
*/
|
|
276
288
|
export function convertBetterAuthSchema(
|
|
277
289
|
tables: Record<string, BetterAuthTableSchema>,
|
|
278
|
-
|
|
279
|
-
|
|
290
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
291
|
+
): Record<string, ListConfig<any>> {
|
|
292
|
+
const lists: Record<string, ListConfig<any>> = {} // eslint-disable-line @typescript-eslint/no-explicit-any -- ListConfig must accept any TypeInfo
|
|
280
293
|
|
|
281
294
|
for (const [tableName, tableSchema] of Object.entries(tables)) {
|
|
282
295
|
// Convert table name to PascalCase for OpenSaaS list key
|