@veloxts/auth 0.3.3 → 0.3.4
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/README.md +755 -30
- package/dist/adapter.d.ts +710 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +581 -0
- package/dist/adapter.js.map +1 -0
- package/dist/adapters/better-auth.d.ts +271 -0
- package/dist/adapters/better-auth.d.ts.map +1 -0
- package/dist/adapters/better-auth.js +341 -0
- package/dist/adapters/better-auth.js.map +1 -0
- package/dist/adapters/index.d.ts +28 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +28 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/csrf.d.ts +294 -0
- package/dist/csrf.d.ts.map +1 -0
- package/dist/csrf.js +396 -0
- package/dist/csrf.js.map +1 -0
- package/dist/guards.d.ts +139 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +247 -0
- package/dist/guards.js.map +1 -0
- package/dist/hash.d.ts +85 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +220 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +25 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +63 -36
- package/dist/index.js.map +1 -1
- package/dist/jwt.d.ts +128 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +363 -0
- package/dist/jwt.js.map +1 -0
- package/dist/middleware.d.ts +87 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +241 -0
- package/dist/middleware.js.map +1 -0
- package/dist/plugin.d.ts +107 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +174 -0
- package/dist/plugin.js.map +1 -0
- package/dist/policies.d.ts +137 -0
- package/dist/policies.d.ts.map +1 -0
- package/dist/policies.js +240 -0
- package/dist/policies.js.map +1 -0
- package/dist/session.d.ts +494 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +795 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +251 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/package.json +38 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../src/policies.ts"],"names":[],"mappings":"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"}
|
package/dist/policies.js
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource-level authorization policies for @veloxts/auth
|
|
3
|
+
* @module auth/policies
|
|
4
|
+
*/
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Policy Registry
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* Global policy registry
|
|
10
|
+
* Maps resource names to their policy definitions
|
|
11
|
+
*/
|
|
12
|
+
const policyRegistry = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Registers a policy for a resource type
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* registerPolicy('Post', {
|
|
19
|
+
* view: (user, post) => true, // Anyone can view
|
|
20
|
+
* update: (user, post) => user.id === post.authorId,
|
|
21
|
+
* delete: (user, post) => user.id === post.authorId || user.role === 'admin',
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function registerPolicy(resourceName, policy) {
|
|
26
|
+
policyRegistry.set(resourceName, policy);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Gets a registered policy by resource name
|
|
30
|
+
*/
|
|
31
|
+
export function getPolicy(resourceName) {
|
|
32
|
+
return policyRegistry.get(resourceName);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clears all registered policies (useful for testing)
|
|
36
|
+
*/
|
|
37
|
+
export function clearPolicies() {
|
|
38
|
+
policyRegistry.clear();
|
|
39
|
+
}
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// Policy Definition Helper
|
|
42
|
+
// ============================================================================
|
|
43
|
+
/**
|
|
44
|
+
* Defines a policy for a resource type
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const PostPolicy = definePolicy<User, Post>({
|
|
49
|
+
* view: () => true,
|
|
50
|
+
* create: (user) => user.emailVerified,
|
|
51
|
+
* update: (user, post) => user.id === post.authorId,
|
|
52
|
+
* delete: (user, post) => user.id === post.authorId || user.role === 'admin',
|
|
53
|
+
* publish: (user, post) => user.role === 'editor' && user.id === post.authorId,
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* // Register it
|
|
57
|
+
* registerPolicy('Post', PostPolicy);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export function definePolicy(actions) {
|
|
61
|
+
return actions;
|
|
62
|
+
}
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// Authorization Checks
|
|
65
|
+
// ============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Checks if a user can perform an action on a resource
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const canEdit = await can(user, 'update', 'Post', post);
|
|
72
|
+
* if (!canEdit) {
|
|
73
|
+
* throw new ForbiddenError('Cannot edit this post');
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export async function can(user, action, resourceName, resource) {
|
|
78
|
+
// No user = no permission
|
|
79
|
+
if (!user) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const policy = policyRegistry.get(resourceName);
|
|
83
|
+
if (!policy) {
|
|
84
|
+
// No policy registered = deny by default
|
|
85
|
+
console.warn(`No policy registered for resource: ${resourceName}`);
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
const actionHandler = policy[action];
|
|
89
|
+
if (!actionHandler) {
|
|
90
|
+
// Action not defined = deny by default
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
return actionHandler(user, resource);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Checks if a user cannot perform an action (inverse of can)
|
|
97
|
+
*/
|
|
98
|
+
export async function cannot(user, action, resourceName, resource) {
|
|
99
|
+
return !(await can(user, action, resourceName, resource));
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Throws an error if user cannot perform action
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* await authorize(ctx.user, 'delete', 'Post', post);
|
|
107
|
+
* // If we get here, user is authorized
|
|
108
|
+
* await db.post.delete({ where: { id: post.id } });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export async function authorize(user, action, resourceName, resource) {
|
|
112
|
+
const allowed = await can(user, action, resourceName, resource);
|
|
113
|
+
if (!allowed) {
|
|
114
|
+
const error = new Error(`Unauthorized: cannot ${action} ${resourceName}${resource ? ` (id: ${resource.id ?? 'unknown'})` : ''}`);
|
|
115
|
+
error.statusCode = 403;
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// Policy Builder
|
|
121
|
+
// ============================================================================
|
|
122
|
+
/**
|
|
123
|
+
* Fluent policy builder for complex policies
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const CommentPolicy = createPolicyBuilder<User, Comment>()
|
|
128
|
+
* .allow('view', () => true)
|
|
129
|
+
* .allow('create', (user) => user.emailVerified)
|
|
130
|
+
* .allow('update', (user, comment) => user.id === comment.authorId)
|
|
131
|
+
* .allow('delete', (user, comment) =>
|
|
132
|
+
* user.id === comment.authorId || user.role === 'admin'
|
|
133
|
+
* )
|
|
134
|
+
* .build();
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export function createPolicyBuilder() {
|
|
138
|
+
return new PolicyBuilder();
|
|
139
|
+
}
|
|
140
|
+
class PolicyBuilder {
|
|
141
|
+
actions = {};
|
|
142
|
+
/**
|
|
143
|
+
* Allows an action based on the check function
|
|
144
|
+
*/
|
|
145
|
+
allow(action, check) {
|
|
146
|
+
this.actions[action] = check;
|
|
147
|
+
return this;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Denies an action (always returns false)
|
|
151
|
+
*/
|
|
152
|
+
deny(action) {
|
|
153
|
+
this.actions[action] = () => false;
|
|
154
|
+
return this;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Allows action only for resource owner
|
|
158
|
+
* Assumes resource has a userId or authorId field
|
|
159
|
+
*/
|
|
160
|
+
allowOwner(action, ownerField = 'userId') {
|
|
161
|
+
this.actions[action] = (user, resource) => {
|
|
162
|
+
const ownerId = resource?.[ownerField];
|
|
163
|
+
return ownerId === user.id;
|
|
164
|
+
};
|
|
165
|
+
return this;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Allows action for owner OR users with specific role
|
|
169
|
+
*/
|
|
170
|
+
allowOwnerOr(action, roles, ownerField = 'userId') {
|
|
171
|
+
this.actions[action] = (user, resource) => {
|
|
172
|
+
const ownerId = resource?.[ownerField];
|
|
173
|
+
const userRole = user.role;
|
|
174
|
+
const isOwner = ownerId === user.id;
|
|
175
|
+
const hasRole = typeof userRole === 'string' && roles.includes(userRole);
|
|
176
|
+
return isOwner || hasRole;
|
|
177
|
+
};
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Builds the final policy definition
|
|
182
|
+
*/
|
|
183
|
+
build() {
|
|
184
|
+
return { ...this.actions };
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Builds and registers the policy
|
|
188
|
+
*/
|
|
189
|
+
register(resourceName) {
|
|
190
|
+
const policy = this.build();
|
|
191
|
+
registerPolicy(resourceName, policy);
|
|
192
|
+
return policy;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Common Policy Patterns
|
|
197
|
+
// ============================================================================
|
|
198
|
+
/**
|
|
199
|
+
* Creates a policy that allows all actions for admins
|
|
200
|
+
* and owner-only for regular users
|
|
201
|
+
*/
|
|
202
|
+
export function createOwnerOrAdminPolicy(ownerField = 'userId') {
|
|
203
|
+
const isOwnerOrAdmin = (user, resource) => {
|
|
204
|
+
if (user.role === 'admin') {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
const ownerId = resource[ownerField];
|
|
208
|
+
return ownerId === user.id;
|
|
209
|
+
};
|
|
210
|
+
return {
|
|
211
|
+
view: () => true,
|
|
212
|
+
create: () => true,
|
|
213
|
+
update: isOwnerOrAdmin,
|
|
214
|
+
delete: isOwnerOrAdmin,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Creates a read-only policy (only view allowed)
|
|
219
|
+
*/
|
|
220
|
+
export function createReadOnlyPolicy() {
|
|
221
|
+
return {
|
|
222
|
+
view: () => true,
|
|
223
|
+
create: () => false,
|
|
224
|
+
update: () => false,
|
|
225
|
+
delete: () => false,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Creates a policy for admin-only resources
|
|
230
|
+
*/
|
|
231
|
+
export function createAdminOnlyPolicy() {
|
|
232
|
+
const isAdmin = (user) => user.role === 'admin';
|
|
233
|
+
return {
|
|
234
|
+
view: isAdmin,
|
|
235
|
+
create: isAdmin,
|
|
236
|
+
update: isAdmin,
|
|
237
|
+
delete: isAdmin,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../src/policies.ts"],"names":[],"mappings":"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"}
|