@skalfa/skalfa-api-core 1.0.24 → 1.0.26
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/dist/auth/verify-access-token.js +17 -1
- package/dist/auth/verify-access-token.js.map +1 -1
- package/dist/context/context.d.ts +4 -3
- package/dist/context/context.js +8 -8
- package/dist/context/context.js.map +1 -1
- package/dist/middleware/context.d.ts +2 -2
- package/dist/middleware/context.js +2 -2
- package/dist/middleware/context.js.map +1 -1
- package/dist/middleware/middleware.d.ts +2 -2
- package/package.json +1 -1
- package/src/auth/verify-access-token.ts +24 -1
- package/src/context/context.ts +11 -10
- package/src/middleware/context.ts +3 -4
|
@@ -31,7 +31,23 @@ export async function verifyAccessToken(token, req) {
|
|
|
31
31
|
if (!valid)
|
|
32
32
|
return null;
|
|
33
33
|
await db("user_access_tokens").where("id", tokenRecord.id).update({ last_used_at: new Date(), last_used_ip: ip });
|
|
34
|
-
const
|
|
34
|
+
const rows = await db("users")
|
|
35
|
+
.leftJoin("user_has_user_roles", "users.id", "user_has_user_roles.user_id")
|
|
36
|
+
.leftJoin("user_roles", "user_has_user_roles.user_role_id", "user_roles.id")
|
|
37
|
+
.where("users.id", tokenRecord.user_id)
|
|
38
|
+
.select("users.id", "users.username", "users.name", "user_roles.id as role_id", "user_roles.name as role_name");
|
|
39
|
+
if (!rows || rows.length === 0)
|
|
40
|
+
return null;
|
|
41
|
+
const firstRow = rows[0];
|
|
42
|
+
const user = {
|
|
43
|
+
id: firstRow.id,
|
|
44
|
+
username: firstRow.username,
|
|
45
|
+
name: firstRow.name,
|
|
46
|
+
roles: rows?.filter((row) => row && row.role_id != null)?.map((row) => ({
|
|
47
|
+
id: row.role_id,
|
|
48
|
+
name: row.role_name
|
|
49
|
+
})) || [],
|
|
50
|
+
};
|
|
35
51
|
if (AUTH_CACHE) {
|
|
36
52
|
const redis = registry.get('redis');
|
|
37
53
|
if (redis) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-access-token.js","sourceRoot":"","sources":["../../src/auth/verify-access-token.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAa,EAAE,GAAa;IAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAErC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAgB,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1D,MAAM,EAAE,GAAmB,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAEvD,MAAM,QAAQ,GAAG,cAAc,OAAO,EAAE,CAAA;IAExC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAClC,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAA;gBACxC,OAAO,OAAO,CAAA;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;IAE/E,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IAE5C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,MAAM,EAAE,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAA;IAEjH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"verify-access-token.js","sourceRoot":"","sources":["../../src/auth/verify-access-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface AppContext {
|
|
2
2
|
user_id?: number;
|
|
3
|
-
}
|
|
3
|
+
}
|
|
4
4
|
export declare const context: {
|
|
5
|
-
|
|
5
|
+
init(ctx: AppContext): void;
|
|
6
6
|
get<K extends keyof AppContext>(key: K): AppContext[K];
|
|
7
|
+
set<K extends keyof AppContext>(key: K, value: AppContext[K]): void;
|
|
7
8
|
};
|
package/dist/context/context.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
const storage = new AsyncLocalStorage();
|
|
3
3
|
export const context = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// =====================================>
|
|
7
|
-
run(ctx, fn) {
|
|
8
|
-
return storage.run(ctx, fn);
|
|
4
|
+
init(ctx) {
|
|
5
|
+
storage.enterWith(ctx);
|
|
9
6
|
},
|
|
10
|
-
// =====================================>
|
|
11
|
-
// ## Context: retrieve context property value
|
|
12
|
-
// =====================================>
|
|
13
7
|
get(key) {
|
|
14
8
|
return storage.getStore()?.[key];
|
|
15
9
|
},
|
|
10
|
+
set(key, value) {
|
|
11
|
+
const store = storage.getStore();
|
|
12
|
+
if (store) {
|
|
13
|
+
store[key] = value;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAMpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAc,CAAA;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAMpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAc,CAAA;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,CAAC,GAAe;QAClB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,GAAG,CAA6B,GAAM;QACpC,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IAED,GAAG,CAA6B,GAAM,EAAE,KAAoB;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAChC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -21,9 +21,9 @@ export declare const ContextMiddleware: (app: Elysia) => Elysia<"", {
|
|
|
21
21
|
standaloneSchema: {};
|
|
22
22
|
response: {};
|
|
23
23
|
}, {
|
|
24
|
-
derive: {}
|
|
24
|
+
derive: Partial<void & {}>;
|
|
25
25
|
resolve: {};
|
|
26
26
|
schema: {};
|
|
27
27
|
standaloneSchema: {};
|
|
28
|
-
response: import("elysia").ExtractErrorFromHandle<
|
|
28
|
+
response: import("elysia").ExtractErrorFromHandle<void>;
|
|
29
29
|
}>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { context } from '@utils';
|
|
2
2
|
export const ContextMiddleware = (app) => app.derive(async ({ store }) => {
|
|
3
3
|
const userId = store?.user?.id;
|
|
4
|
-
|
|
4
|
+
context.init({
|
|
5
5
|
user_id: userId,
|
|
6
|
-
}
|
|
6
|
+
});
|
|
7
7
|
});
|
|
8
8
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/middleware/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/E,MAAM,MAAM,GAAI,KAAa,EAAE,IAAI,EAAE,EAAE,CAAA;IAEvC,OAAO,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/middleware/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/E,MAAM,MAAM,GAAI,KAAa,EAAE,IAAI,EAAE,EAAE,CAAA;IAEvC,OAAO,CAAC,IAAI,CAAC;QACX,OAAO,EAAK,MAAM;KACnB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -275,10 +275,10 @@ export declare const middleware: {
|
|
|
275
275
|
standaloneSchema: {};
|
|
276
276
|
response: {};
|
|
277
277
|
}, {
|
|
278
|
-
derive: {}
|
|
278
|
+
derive: Partial<void & {}>;
|
|
279
279
|
resolve: {};
|
|
280
280
|
schema: {};
|
|
281
281
|
standaloneSchema: {};
|
|
282
|
-
response: import("elysia").ExtractErrorFromHandle<
|
|
282
|
+
response: import("elysia").ExtractErrorFromHandle<void>;
|
|
283
283
|
}>;
|
|
284
284
|
};
|
package/package.json
CHANGED
|
@@ -35,7 +35,30 @@ export async function verifyAccessToken(token: string, req?: Request) {
|
|
|
35
35
|
|
|
36
36
|
await db("user_access_tokens").where("id", tokenRecord.id).update({ last_used_at: new Date(), last_used_ip: ip })
|
|
37
37
|
|
|
38
|
-
const
|
|
38
|
+
const rows = await db("users")
|
|
39
|
+
.leftJoin("user_has_user_roles", "users.id", "user_has_user_roles.user_id")
|
|
40
|
+
.leftJoin("user_roles", "user_has_user_roles.user_role_id", "user_roles.id")
|
|
41
|
+
.where("users.id", tokenRecord.user_id)
|
|
42
|
+
.select(
|
|
43
|
+
"users.id",
|
|
44
|
+
"users.username",
|
|
45
|
+
"users.name",
|
|
46
|
+
"user_roles.id as role_id",
|
|
47
|
+
"user_roles.name as role_name"
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
if (!rows || rows.length === 0) return null
|
|
51
|
+
|
|
52
|
+
const firstRow = rows[0]
|
|
53
|
+
const user = {
|
|
54
|
+
id : firstRow.id,
|
|
55
|
+
username : firstRow.username,
|
|
56
|
+
name : firstRow.name,
|
|
57
|
+
roles : rows?.filter((row: any) => row && row.role_id != null)?.map((row: any) => ({
|
|
58
|
+
id : row.role_id,
|
|
59
|
+
name : row.role_name
|
|
60
|
+
})) || [],
|
|
61
|
+
}
|
|
39
62
|
|
|
40
63
|
if (AUTH_CACHE) {
|
|
41
64
|
const redis = registry.get('redis')
|
package/src/context/context.ts
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
user_id
|
|
3
|
+
export interface AppContext {
|
|
4
|
+
user_id?: number
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
const storage = new AsyncLocalStorage<AppContext>()
|
|
8
8
|
|
|
9
9
|
export const context = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
// =====================================>
|
|
13
|
-
run<T>(ctx: AppContext, fn: () => T) {
|
|
14
|
-
return storage.run(ctx, fn)
|
|
10
|
+
init(ctx: AppContext) {
|
|
11
|
+
storage.enterWith(ctx)
|
|
15
12
|
},
|
|
16
13
|
|
|
17
|
-
// =====================================>
|
|
18
|
-
// ## Context: retrieve context property value
|
|
19
|
-
// =====================================>
|
|
20
14
|
get<K extends keyof AppContext>(key: K): AppContext[K] {
|
|
21
15
|
return storage.getStore()?.[key]
|
|
22
16
|
},
|
|
17
|
+
|
|
18
|
+
set<K extends keyof AppContext>(key: K, value: AppContext[K]) {
|
|
19
|
+
const store = storage.getStore()
|
|
20
|
+
if (store) {
|
|
21
|
+
store[key] = value
|
|
22
|
+
}
|
|
23
|
+
}
|
|
23
24
|
}
|
|
@@ -4,8 +4,7 @@ import { context } from '@utils'
|
|
|
4
4
|
export const ContextMiddleware = (app: Elysia) => app.derive(async ({ store }) => {
|
|
5
5
|
const userId = (store as any)?.user?.id
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
)
|
|
7
|
+
context.init({
|
|
8
|
+
user_id : userId,
|
|
9
|
+
})
|
|
11
10
|
})
|