astro-sessionkit 0.1.2
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/LICENSE +21 -0
- package/dist/core/config.d.ts +9 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +43 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +7 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +11 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/guardMiddleware.d.ts +3 -0
- package/dist/core/guardMiddleware.d.ts.map +1 -0
- package/dist/core/guardMiddleware.js +56 -0
- package/dist/core/guardMiddleware.js.map +1 -0
- package/dist/core/matcher.d.ts +2 -0
- package/dist/core/matcher.d.ts.map +1 -0
- package/dist/core/matcher.js +38 -0
- package/dist/core/matcher.js.map +1 -0
- package/dist/core/sessionMiddleware.d.ts +3 -0
- package/dist/core/sessionMiddleware.d.ts.map +1 -0
- package/dist/core/sessionMiddleware.js +23 -0
- package/dist/core/sessionMiddleware.js.map +1 -0
- package/dist/core/types.d.ts +40 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validation.d.ts +5 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +91 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/guard.d.ts +2 -0
- package/dist/guard.d.ts.map +1 -0
- package/dist/guard.js +5 -0
- package/dist/guard.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +5 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +22 -0
- package/dist/integration.js.map +1 -0
- package/dist/middleware.d.ts +2 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +1 -0
- package/dist/middleware.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +67 -0
- package/dist/server.js.map +1 -0
- package/package.json +89 -0
- package/readme.md +601 -0
- package/security.md +349 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { getSessionContext } from './core/context.js';
|
|
2
|
+
import { isValidSessionStructure } from './core/validation.js';
|
|
3
|
+
|
|
4
|
+
function getSession() {
|
|
5
|
+
const context = getSessionContext();
|
|
6
|
+
return context?.session ?? null;
|
|
7
|
+
}
|
|
8
|
+
function requireSession() {
|
|
9
|
+
const session = getSession();
|
|
10
|
+
if (!session) {
|
|
11
|
+
throw new Response("Unauthorized", { status: 401 });
|
|
12
|
+
}
|
|
13
|
+
return session;
|
|
14
|
+
}
|
|
15
|
+
function isAuthenticated() {
|
|
16
|
+
return getSession() !== null;
|
|
17
|
+
}
|
|
18
|
+
function hasRole(role) {
|
|
19
|
+
const session = getSession();
|
|
20
|
+
if (!session)
|
|
21
|
+
return false;
|
|
22
|
+
if (session.role === role)
|
|
23
|
+
return true;
|
|
24
|
+
return session.roles?.includes(role) ?? false;
|
|
25
|
+
}
|
|
26
|
+
function hasPermission(permission) {
|
|
27
|
+
const session = getSession();
|
|
28
|
+
if (!session)
|
|
29
|
+
return false;
|
|
30
|
+
return session.permissions?.includes(permission) ?? false;
|
|
31
|
+
}
|
|
32
|
+
function hasAllPermissions(...permissions) {
|
|
33
|
+
const session = getSession();
|
|
34
|
+
if (!session)
|
|
35
|
+
return false;
|
|
36
|
+
const userPermissions = session.permissions ?? [];
|
|
37
|
+
return permissions.every((p) => userPermissions.includes(p));
|
|
38
|
+
}
|
|
39
|
+
function hasAnyPermission(...permissions) {
|
|
40
|
+
const session = getSession();
|
|
41
|
+
if (!session)
|
|
42
|
+
return false;
|
|
43
|
+
const userPermissions = session.permissions ?? [];
|
|
44
|
+
return permissions.some((p) => userPermissions.includes(p));
|
|
45
|
+
}
|
|
46
|
+
function setSession(context, session) {
|
|
47
|
+
if (!isValidSessionStructure(session)) {
|
|
48
|
+
throw new Error('[SessionKit] Invalid session structure. Session must have a valid userId and follow the Session interface.');
|
|
49
|
+
}
|
|
50
|
+
context.session?.set('__session__', session);
|
|
51
|
+
}
|
|
52
|
+
function clearSession(context) {
|
|
53
|
+
context.session?.delete('__session__');
|
|
54
|
+
}
|
|
55
|
+
function updateSession(context, updates) {
|
|
56
|
+
const currentSession = context.session?.get('__session__');
|
|
57
|
+
if (!currentSession) {
|
|
58
|
+
throw new Error('[SessionKit] Cannot update session: no session exists');
|
|
59
|
+
}
|
|
60
|
+
const updatedSession = { ...currentSession, ...updates };
|
|
61
|
+
if (!isValidSessionStructure(updatedSession)) {
|
|
62
|
+
throw new Error('[SessionKit] Invalid session structure after update. Ensure all fields are valid.');
|
|
63
|
+
}
|
|
64
|
+
context.session?.set('__session__', updatedSession);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { clearSession, getSession, hasAllPermissions, hasAnyPermission, hasPermission, hasRole, isAuthenticated, requireSession, setSession, updateSession };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "astro-sessionkit",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Simple session access and route protection for Astro applications",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./server": {
|
|
14
|
+
"import": "./dist/server.js",
|
|
15
|
+
"types": "./dist/server.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./middleware": {
|
|
18
|
+
"import": "./dist/middleware.js",
|
|
19
|
+
"types": "./dist/middleware.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./guard": {
|
|
22
|
+
"import": "./dist/guard.js",
|
|
23
|
+
"types": "./dist/guard.d.ts"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"SECURITY.md",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"keywords": [
|
|
32
|
+
"astro",
|
|
33
|
+
"astrojs",
|
|
34
|
+
"session",
|
|
35
|
+
"authentication",
|
|
36
|
+
"authorization",
|
|
37
|
+
"rbac",
|
|
38
|
+
"permissions",
|
|
39
|
+
"route-protection",
|
|
40
|
+
"middleware",
|
|
41
|
+
"typescript",
|
|
42
|
+
"esm",
|
|
43
|
+
"withastro"
|
|
44
|
+
],
|
|
45
|
+
"author": "Alex Mora",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"astro": "^4.0.0 || ^5.0.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
52
|
+
"@vitest/ui": "^4.0.14",
|
|
53
|
+
"rimraf": "^6.0.1",
|
|
54
|
+
"rollup": "^4.46.2",
|
|
55
|
+
"rollup-plugin-dts": "^6.2.1",
|
|
56
|
+
"tslib": "^2.8.1",
|
|
57
|
+
"typescript": "^5.3.3",
|
|
58
|
+
"vite": "^6.4.1",
|
|
59
|
+
"vitest": "^3.2.4"
|
|
60
|
+
},
|
|
61
|
+
"engines": {
|
|
62
|
+
"node": ">=18"
|
|
63
|
+
},
|
|
64
|
+
"publishConfig": {
|
|
65
|
+
"registry": "https://registry.npmjs.org/"
|
|
66
|
+
},
|
|
67
|
+
"repository": {
|
|
68
|
+
"type": "git",
|
|
69
|
+
"url": "git+https://github.com/yourusername/astro-sessionkit.git"
|
|
70
|
+
},
|
|
71
|
+
"bugs": {
|
|
72
|
+
"url": "https://github.com/yourusername/astro-sessionkit/issues"
|
|
73
|
+
},
|
|
74
|
+
"homepage": "https://github.com/yourusername/astro-sessionkit#readme",
|
|
75
|
+
"dependencies": {
|
|
76
|
+
"@types/node": "^25.0.9",
|
|
77
|
+
"undici": "^7.18.2"
|
|
78
|
+
},
|
|
79
|
+
"scripts": {
|
|
80
|
+
"build": "tsc --project tsconfig.json",
|
|
81
|
+
"types:bundle": "rollup -c rollup.config.mjs",
|
|
82
|
+
"clean": "rimraf dist",
|
|
83
|
+
"dev": "tsc --watch --project tsconfig.json",
|
|
84
|
+
"test": "vitest run",
|
|
85
|
+
"test:watch": "vitest",
|
|
86
|
+
"test:coverage": "vitest run --coverage",
|
|
87
|
+
"bench": "vitest bench run bench/"
|
|
88
|
+
}
|
|
89
|
+
}
|