@skalfa/skalfa-api-core 1.0.25 → 1.0.27
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 +1 -17
- 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 +1 -24
- package/src/context/context.ts +11 -10
- package/src/middleware/context.ts +3 -4
|
@@ -31,23 +31,7 @@ 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
|
|
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
|
-
};
|
|
34
|
+
const user = await db("users").where("id", tokenRecord.user_id).first();
|
|
51
35
|
if (AUTH_CACHE) {
|
|
52
36
|
const redis = registry.get('redis');
|
|
53
37
|
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
|
|
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,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;IAEvE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,KAAK,CACf,QAAQ,EACR,cAAc,EACd,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAY,IAAI;gBACpB,KAAK,EAAW,WAAW,CAAC,KAAK;gBACjC,WAAW,EAAK,WAAW,CAAC,UAAU;aACvC,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,CAAA;AAC1E,CAAC"}
|
|
@@ -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,30 +35,7 @@ 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
|
|
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
|
-
}
|
|
38
|
+
const user = await db("users").where("id", tokenRecord.user_id).first()
|
|
62
39
|
|
|
63
40
|
if (AUTH_CACHE) {
|
|
64
41
|
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
|
})
|