@xlt-token/nestjs 2.1.0 → 2.3.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/dist/index.cjs +6 -1
- package/dist/index.d.cts +1 -7
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -7
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +6 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -435,7 +435,12 @@ let XltTokenGuard = class XltTokenGuard {
|
|
|
435
435
|
requiresLogin(context) {
|
|
436
436
|
const isIgnored = this.reflector.getAllAndOverride(_xlt_token_core.XLT_IGNORE_KEY, [context.getHandler(), context.getClass()]);
|
|
437
437
|
if (this.config.defaultCheck) return !isIgnored;
|
|
438
|
-
|
|
438
|
+
const shouldCheck = this.reflector.getAllAndOverride(_xlt_token_core.XLT_CHECK_LOGIN_KEY, [context.getHandler(), context.getClass()]);
|
|
439
|
+
return Boolean(shouldCheck || [
|
|
440
|
+
_xlt_token_core.XLT_PERMISSION_KEY,
|
|
441
|
+
_xlt_token_core.XLT_ROLE_KEY,
|
|
442
|
+
XLT_CHECK_SAFE_KEY
|
|
443
|
+
].some((key) => this.reflector.getAllAndOverride(key, [context.getHandler(), context.getClass()]) !== void 0));
|
|
439
444
|
}
|
|
440
445
|
getBusiness(context) {
|
|
441
446
|
return this.reflector.getAllAndOverride(XLT_CHECK_SAFE_KEY, [context.getHandler(), context.getClass()]);
|
package/dist/index.d.cts
CHANGED
|
@@ -24,7 +24,7 @@ interface XltTokenModuleOptions {
|
|
|
24
24
|
eventSink?: XltEventSink$1;
|
|
25
25
|
}
|
|
26
26
|
interface XltTokenModuleAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
27
|
-
useFactory: (...args: any[]) => Promise<XltTokenModuleOptions
|
|
27
|
+
useFactory: (...args: any[]) => Promise<Pick<XltTokenModuleOptions, "config">> | Pick<XltTokenModuleOptions, "config">;
|
|
28
28
|
inject?: any[];
|
|
29
29
|
store?: {
|
|
30
30
|
useClass: new (...args: any[]) => XltTokenStore$1;
|
|
@@ -173,12 +173,6 @@ declare abstract class XltAbstractLoginGuard implements CanActivate {
|
|
|
173
173
|
token?: string | undefined;
|
|
174
174
|
reason?: NotLoginType$1 | undefined;
|
|
175
175
|
}, request: any): void | Promise<void>;
|
|
176
|
-
protected onPermissionDenied?(result: {
|
|
177
|
-
ok: boolean;
|
|
178
|
-
loginId?: string | undefined;
|
|
179
|
-
token?: string | undefined;
|
|
180
|
-
reason?: NotLoginType$1 | undefined;
|
|
181
|
-
}, request: any): void | Promise<void>;
|
|
182
176
|
}
|
|
183
177
|
//#endregion
|
|
184
178
|
//#region src/exceptions/not-login.exception.d.ts
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/xlt-token.module.ts","../src/store/redis-store.ts","../src/store/ioredis-store.ts","../src/decorators/xlt-check-login.decorator.ts","../src/decorators/xlt-ignore.decorator.ts","../src/decorators/login-id.decorator.ts","../src/decorators/token-value.decorator.ts","../src/decorators/xlt-check-permission.decorator.ts","../src/decorators/xlt-check-role.decorator.ts","../src/decorators/xlt-check-safe.decorator.ts","../src/guards/xlt-token.guard.ts","../src/guards/xlt-abstract-login.guard.ts","../src/exceptions/not-login.exception.ts","../src/exceptions/not-permission.exception.ts","../src/exceptions/not-role.exception.ts","../src/exceptions/not-safe.exception.ts"],"mappings":";;;;;;;;UAyBiB,qBAAA;EACf,MAAA,GAAS,OAAA,CAAQ,mBAAA;EACjB,KAAA;IAAU,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC1E,QAAA;IAAa,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC7E,QAAA;EACA,SAAA,GAAY,QAAA;EACZ,YAAA,WAAuB,IAAA,YAAgB,cAAA;EACvC,SAAA,GAAY,cAAA;AAAA;AAAA,UAGG,0BAAA,SAAmC,IAAA,CAAK,cAAA;EACvD,UAAA,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/xlt-token.module.ts","../src/store/redis-store.ts","../src/store/ioredis-store.ts","../src/decorators/xlt-check-login.decorator.ts","../src/decorators/xlt-ignore.decorator.ts","../src/decorators/login-id.decorator.ts","../src/decorators/token-value.decorator.ts","../src/decorators/xlt-check-permission.decorator.ts","../src/decorators/xlt-check-role.decorator.ts","../src/decorators/xlt-check-safe.decorator.ts","../src/guards/xlt-token.guard.ts","../src/guards/xlt-abstract-login.guard.ts","../src/exceptions/not-login.exception.ts","../src/exceptions/not-permission.exception.ts","../src/exceptions/not-role.exception.ts","../src/exceptions/not-safe.exception.ts"],"mappings":";;;;;;;;UAyBiB,qBAAA;EACf,MAAA,GAAS,OAAA,CAAQ,mBAAA;EACjB,KAAA;IAAU,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC1E,QAAA;IAAa,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC7E,QAAA;EACA,SAAA,GAAY,QAAA;EACZ,YAAA,WAAuB,IAAA,YAAgB,cAAA;EACvC,SAAA,GAAY,cAAA;AAAA;AAAA,UAGG,0BAAA,SAAmC,IAAA,CAAK,cAAA;EACvD,UAAA,MACK,IAAA,YACA,OAAA,CAAQ,IAAA,CAAK,qBAAA,eAAoC,IAAA,CAAK,qBAAA;EAC3D,MAAA;EACA,KAAA;IAAU,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC1E,QAAA;IAAa,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC7E,QAAA;EACA,SAAA,GAAY,QAAA;EACZ,YAAA,WAAuB,IAAA,YAAgB,cAAA;EACvC,SAAA,GAAY,cAAA;AAAA;AAAA,cAID,cAAA;EAAA,wBACa,gBAAA;EAAA,wBAUA,oBAAA;EAAA,wBAMA,YAAA;EAAA,wBASA,aAAA;EAAA,OAQjB,OAAA,CAAQ,OAAA,GAAS,qBAAA;;;;;;SA4BjB,YAAA,CAAa,OAAA,EAAS,0BAAA;;;;;sCAkBY,OAAA,CAAA,gBAAA;;;;;;iBAoB1B,mBAAA;EAAA,eAOA,sBAAA;EAAA,eAOA,0BAAA;EAAA,eAiBA,uBAAA;AAAA;;;cCjLJ,gBAAA;;;;;cAOA,UAAA,SAAmB,YAAA;cAG5B,WAAA,EAAa,WAAA;AAAA;;;cCVJ,kBAAA;;;;;cAOA,YAAA,SAAqB,cAAA;cAG9B,WAAA,EAAa,aAAA;AAAA;;;;;;;cCJJ,aAAA,QAA4D,eAAA,CAA/C,eAAA;;;cCJb,SAAA,QAAmD,eAAA,CAA1C,eAAA;;;;;;;cCGT,OAAA,MAAO,WAAA,gBAAA,kBAAA;;;;;;;cCAP,UAAA,MAAU,WAAA,YAAA,kBAAA;;;;;;;;;;cCEV,kBAAA,GAAsB,WAAA,qBAAgC,OAAA;EAAY,IAAA,EAAM,SAAA;AAAA,MAAO,eAAA,CAAE,eAAA;;;;;;;;;;cCAjF,YAAA,GAAgB,KAAA,qBAA0B,OAAA;EAAY,IAAA,EAAM,SAAA;AAAA,MAAO,eAAA,CAAE,eAAA;;;cCRrE,kBAAA;AAAA,cAEA,YAAA,GAAgB,QAAA,aAE5B,eAAA,CAF4C,eAAA;;;cCehC,aAAA,YAAyB,WAAA;EAAA,iBAEjB,SAAA;EAAA,iBAC0B,MAAA;EAAA,iBAC1B,QAAA;EAAA,iBACY,YAAA;cAHZ,SAAA,EAAW,SAAA,EACe,MAAA,EAAQ,gBAAA,EAClC,QAAA,EAAU,UAAA,EACE,YAAA,GAAe,cAAA;EAGxC,WAAA,CAAY,OAAA,EAAS,gBAAA,GAAmB,OAAA;EAAA,QA+CtC,aAAA;EAAA,QAwBA,WAAA;AAAA;;;uBCnFY,qBAAA,YAAiC,WAAA;EAAA,mBAEhC,SAAA,EAAW,SAAA;EAAA,mBACe,MAAA,EAAQ,gBAAA;EAAA,mBAClC,QAAA,EAAU,UAAA;EAAA,UAHtB,WAAA,CACY,SAAA,EAAW,SAAA,EACe,MAAA,EAAQ,gBAAA,EAClC,QAAA,EAAU,UAAA;EAGzB,WAAA,CAAY,GAAA,EAAK,gBAAA,GAAmB,OAAA;EAAA,UAuBhC,aAAA,CAAc,GAAA,EAAK,gBAAA;EAAA,UAgBnB,aAAA,CAAA,CACR,MAAA;IACE,EAAA;IACA,OAAA;IACA,KAAA;IACA,MAAA,GAAS,cAAA;EAAA,GAEX,OAAA,eACQ,OAAA;EAAA,UAEA,UAAA,CAAA,CACR,MAAA;IACE,EAAA;IACA,OAAA;IACA,KAAA;IACA,MAAA,GAAS,cAAA;EAAA,GAEX,OAAA,eACQ,OAAA;AAAA;;;cC5EC,iBAAA,SAA0B,qBAAA;EAAA,SACrB,IAAA,EAAM,cAAA;EAAA,SACN,KAAA;cAEJ,IAAA,EAAM,cAAA,EAAc,KAAA;EAAA,eAWjB,WAAA;EAAA,eAYA,YAAA;AAAA;;;cC3BJ,sBAAA,SAA+B,kBAAA;EAAA,SAC1B,UAAA;EAAA,SACA,IAAA,EAAM,SAAA;cAEV,UAAA,qBAA+B,IAAA,EAAM,SAAA;AAAA;;;cCJtC,gBAAA,SAAyB,kBAAA;EAAA,SACpB,IAAA;EAAA,SACA,IAAA,EAAM,SAAA;cAEV,IAAA,qBAAyB,IAAA,EAAM,SAAA;AAAA;;;cCLhC,gBAAA,SAAyB,kBAAA;EAAA,SAC3B,QAAA;cAEG,QAAA;AAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -24,7 +24,7 @@ interface XltTokenModuleOptions {
|
|
|
24
24
|
eventSink?: XltEventSink$1;
|
|
25
25
|
}
|
|
26
26
|
interface XltTokenModuleAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
27
|
-
useFactory: (...args: any[]) => Promise<XltTokenModuleOptions
|
|
27
|
+
useFactory: (...args: any[]) => Promise<Pick<XltTokenModuleOptions, "config">> | Pick<XltTokenModuleOptions, "config">;
|
|
28
28
|
inject?: any[];
|
|
29
29
|
store?: {
|
|
30
30
|
useClass: new (...args: any[]) => XltTokenStore$1;
|
|
@@ -173,12 +173,6 @@ declare abstract class XltAbstractLoginGuard implements CanActivate {
|
|
|
173
173
|
token?: string | undefined;
|
|
174
174
|
reason?: NotLoginType$1 | undefined;
|
|
175
175
|
}, request: any): void | Promise<void>;
|
|
176
|
-
protected onPermissionDenied?(result: {
|
|
177
|
-
ok: boolean;
|
|
178
|
-
loginId?: string | undefined;
|
|
179
|
-
token?: string | undefined;
|
|
180
|
-
reason?: NotLoginType$1 | undefined;
|
|
181
|
-
}, request: any): void | Promise<void>;
|
|
182
176
|
}
|
|
183
177
|
//#endregion
|
|
184
178
|
//#region src/exceptions/not-login.exception.d.ts
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/xlt-token.module.ts","../src/store/redis-store.ts","../src/store/ioredis-store.ts","../src/decorators/xlt-check-login.decorator.ts","../src/decorators/xlt-ignore.decorator.ts","../src/decorators/login-id.decorator.ts","../src/decorators/token-value.decorator.ts","../src/decorators/xlt-check-permission.decorator.ts","../src/decorators/xlt-check-role.decorator.ts","../src/decorators/xlt-check-safe.decorator.ts","../src/guards/xlt-token.guard.ts","../src/guards/xlt-abstract-login.guard.ts","../src/exceptions/not-login.exception.ts","../src/exceptions/not-permission.exception.ts","../src/exceptions/not-role.exception.ts","../src/exceptions/not-safe.exception.ts"],"mappings":";;;;;;;;UAyBiB,qBAAA;EACf,MAAA,GAAS,OAAA,CAAQ,mBAAA;EACjB,KAAA;IAAU,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC1E,QAAA;IAAa,QAAA,UAAkB,IAAA,YAAgB,eAAA;EAAA;IAAoB,QAAA,EAAU,eAAA;EAAA;EAC7E,QAAA;EACA,SAAA,GAAY,QAAA;EACZ,YAAA,WAAuB,IAAA,YAAgB,cAAA;EACvC,SAAA,GAAY,cAAA;AAAA;AAAA,UAGG,0BAAA,SAAmC,IAAA,CAAK,cAAA;EACvD,UAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/xlt-token.module.ts","../src/store/redis-store.ts","../src/store/ioredis-store.ts","../src/decorators/xlt-check-login.decorator.ts","../src/decorators/xlt-ignore.decorator.ts","../src/decorators/login-id.decorator.ts","../src/decorators/token-value.decorator.ts","../src/decorators/xlt-check-permission.decorator.ts","../src/decorators/xlt-check-role.decorator.ts","../src/decorators/xlt-check-safe.decorator.ts","../src/guards/xlt-token.guard.ts","../src/guards/xlt-abstract-login.guard.ts","../src/exceptions/not-login.exception.ts","../src/exceptions/not-permission.exception.ts","../src/exceptions/not-role.exception.ts","../src/exceptions/not-safe.exception.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -434,7 +434,12 @@ let XltTokenGuard = class XltTokenGuard {
|
|
|
434
434
|
requiresLogin(context) {
|
|
435
435
|
const isIgnored = this.reflector.getAllAndOverride(XLT_IGNORE_KEY, [context.getHandler(), context.getClass()]);
|
|
436
436
|
if (this.config.defaultCheck) return !isIgnored;
|
|
437
|
-
|
|
437
|
+
const shouldCheck = this.reflector.getAllAndOverride(XLT_CHECK_LOGIN_KEY, [context.getHandler(), context.getClass()]);
|
|
438
|
+
return Boolean(shouldCheck || [
|
|
439
|
+
XLT_PERMISSION_KEY,
|
|
440
|
+
XLT_ROLE_KEY,
|
|
441
|
+
XLT_CHECK_SAFE_KEY
|
|
442
|
+
].some((key) => this.reflector.getAllAndOverride(key, [context.getHandler(), context.getClass()]) !== void 0));
|
|
438
443
|
}
|
|
439
444
|
getBusiness(context) {
|
|
440
445
|
return this.reflector.getAllAndOverride(XLT_CHECK_SAFE_KEY, [context.getHandler(), context.getClass()]);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["StpLogic","XLT_TOKEN_CONFIG","XLT_TOKEN_STORE","XLT_TOKEN_STRATEGY","XLT_EVENT_SINK","StpPermLogic","XLT_STP_INTERFACE","MemoryStore","UuidStrategy","BaseRedisStore","BaseIORedisStore","XltMode","XltMode","NotLoginType","createExpressContext","CoreNotLoginException","CoreNotPermissionException","CoreNotRoleException","CoreNotSafeException","XLT_TOKEN_CONFIG","CoreNotLoginException","XLT_TOKEN_CONFIG"],"sources":["../src/xlt-token.module.ts","../src/store/redis-store.ts","../src/store/ioredis-store.ts","../src/decorators/xlt-check-login.decorator.ts","../src/decorators/xlt-ignore.decorator.ts","../src/decorators/login-id.decorator.ts","../src/decorators/token-value.decorator.ts","../src/decorators/xlt-check-permission.decorator.ts","../src/decorators/xlt-check-role.decorator.ts","../src/decorators/xlt-check-safe.decorator.ts","../src/exceptions/not-login.exception.ts","../src/exceptions/not-permission.exception.ts","../src/exceptions/not-role.exception.ts","../src/exceptions/not-safe.exception.ts","../src/http/nest-bridge.ts","../src/guards/xlt-token.guard.ts","../src/guards/xlt-abstract-login.guard.ts"],"sourcesContent":["import type { ModuleMetadata, Provider } from \"@nestjs/common\";\nimport { Module } from \"@nestjs/common\";\nimport type {\n StpInterface,\n TokenStrategy,\n XltEventSink,\n XltTokenConfig,\n XltTokenConfigInput,\n XltTokenStore,\n} from \"@xlt-token/core\";\nimport {\n MemoryStore,\n setStpLogic,\n setStpPermLogic,\n StpLogic,\n StpPermLogic,\n UuidStrategy,\n XLT_STP_INTERFACE,\n XLT_EVENT_SINK,\n XLT_TOKEN_CONFIG,\n XLT_TOKEN_STORE,\n XLT_TOKEN_STRATEGY,\n normalizeXltTokenConfig,\n} from \"@xlt-token/core\";\n\nexport interface XltTokenModuleOptions {\n config?: Partial<XltTokenConfigInput>;\n store?: { useClass: new (...args: any[]) => XltTokenStore } | { useValue: XltTokenStore };\n strategy?: { useClass: new (...args: any[]) => TokenStrategy } | { useValue: TokenStrategy };\n isGlobal?: boolean;\n providers?: Provider[];\n stpInterface?: new (...args: any[]) => StpInterface;\n eventSink?: XltEventSink;\n}\n\nexport interface XltTokenModuleAsyncOptions extends Pick<ModuleMetadata, \"imports\"> {\n useFactory: (...args: any[]) => Promise<XltTokenModuleOptions> | XltTokenModuleOptions;\n inject?: any[];\n store?: { useClass: new (...args: any[]) => XltTokenStore } | { useValue: XltTokenStore };\n strategy?: { useClass: new (...args: any[]) => TokenStrategy } | { useValue: TokenStrategy };\n isGlobal?: boolean;\n providers?: Provider[];\n stpInterface?: new (...args: any[]) => StpInterface;\n eventSink?: XltEventSink;\n}\n\n@Module({})\nexport class XltTokenModule {\n private static readonly stpLogicProvider: Provider = {\n provide: StpLogic,\n useFactory: (\n config: XltTokenConfig,\n store: XltTokenStore,\n strategy: TokenStrategy,\n eventSink: XltEventSink,\n ) => new StpLogic(config, store, strategy, eventSink),\n inject: [XLT_TOKEN_CONFIG, XLT_TOKEN_STORE, XLT_TOKEN_STRATEGY, XLT_EVENT_SINK],\n };\n private static readonly stpPermLogicProvider: Provider = {\n provide: StpPermLogic,\n useFactory: (stpInterface: StpInterface, store: XltTokenStore, config: XltTokenConfig) =>\n new StpPermLogic(stpInterface, store, config),\n inject: [XLT_STP_INTERFACE, XLT_TOKEN_STORE, XLT_TOKEN_CONFIG],\n };\n private static readonly initProvider: Provider = {\n provide: \"XLT_TOKEN_INIT\",\n useFactory: (stpLogic: StpLogic, stpPermLogic: StpPermLogic) => {\n setStpLogic(stpLogic);\n setStpPermLogic(stpPermLogic);\n return true;\n },\n inject: [StpLogic, StpPermLogic],\n };\n private static readonly moduleExports = [\n XLT_TOKEN_CONFIG,\n XLT_TOKEN_STORE,\n XLT_TOKEN_STRATEGY,\n StpLogic,\n StpPermLogic,\n ];\n\n static forRoot(options: XltTokenModuleOptions = {}) {\n const {\n config: userConfig,\n store,\n strategy,\n isGlobal = false,\n providers = [],\n stpInterface,\n } = options;\n\n return {\n module: XltTokenModule,\n providers: [\n { provide: XLT_TOKEN_CONFIG, useValue: normalizeXltTokenConfig(userConfig) },\n XltTokenModule.createStoreProvider(store),\n XltTokenModule.createStrategyProvider(strategy),\n XltTokenModule.createStpInterfaceProvider(stpInterface),\n XltTokenModule.createEventSinkProvider(options.eventSink),\n XltTokenModule.stpLogicProvider,\n XltTokenModule.stpPermLogicProvider,\n XltTokenModule.initProvider,\n ...providers,\n ],\n exports: XltTokenModule.moduleExports,\n global: isGlobal,\n };\n }\n\n static forRootAsync(options: XltTokenModuleAsyncOptions) {\n const {\n useFactory,\n inject = [],\n imports = [],\n store,\n strategy,\n isGlobal = false,\n providers = [],\n stpInterface,\n } = options;\n\n return {\n module: XltTokenModule,\n imports,\n providers: [\n {\n provide: XLT_TOKEN_CONFIG,\n useFactory: async (...args: any[]) => {\n const { config = {} } = await useFactory(...args);\n return normalizeXltTokenConfig(config);\n },\n inject,\n },\n XltTokenModule.createStoreProvider(store),\n XltTokenModule.createStrategyProvider(strategy),\n XltTokenModule.createStpInterfaceProvider(stpInterface),\n XltTokenModule.createEventSinkProvider(options.eventSink),\n XltTokenModule.stpLogicProvider,\n XltTokenModule.stpPermLogicProvider,\n XltTokenModule.initProvider,\n ...providers,\n ],\n exports: XltTokenModule.moduleExports,\n global: isGlobal,\n };\n }\n\n private static createStoreProvider(store?: XltTokenModuleOptions[\"store\"]): Provider {\n if (!store) return { provide: XLT_TOKEN_STORE, useClass: MemoryStore };\n return \"useClass\" in store\n ? { provide: XLT_TOKEN_STORE, useClass: store.useClass }\n : { provide: XLT_TOKEN_STORE, useValue: store.useValue };\n }\n\n private static createStrategyProvider(strategy?: XltTokenModuleOptions[\"strategy\"]): Provider {\n if (!strategy) return { provide: XLT_TOKEN_STRATEGY, useClass: UuidStrategy };\n return \"useClass\" in strategy\n ? { provide: XLT_TOKEN_STRATEGY, useClass: strategy.useClass }\n : { provide: XLT_TOKEN_STRATEGY, useValue: strategy.useValue };\n }\n\n private static createStpInterfaceProvider(\n stpInterface?: new (...args: any[]) => StpInterface,\n ): Provider {\n if (stpInterface) return { provide: XLT_STP_INTERFACE, useClass: stpInterface };\n return {\n provide: XLT_STP_INTERFACE,\n useValue: {\n getPermissionList: () => {\n throw new Error(\"StpInterface not registered: getPermissionList\");\n },\n getRoleList: () => {\n throw new Error(\"StpInterface not registered: getRoleList\");\n },\n },\n };\n }\n\n private static createEventSinkProvider(eventSink?: XltTokenModuleOptions[\"eventSink\"]): Provider {\n return { provide: XLT_EVENT_SINK, useValue: eventSink ?? {} };\n }\n}\n","import { Inject, Injectable } from \"@nestjs/common\";\nimport { RedisStore as BaseRedisStore, type RedisClient } from \"@xlt-token/store-redis\";\n\nexport const XLT_REDIS_CLIENT = \"XLT_REDIS_CLIENT\";\n\n/**\n * @deprecated Import `RedisStore` from `@xlt-token/store-redis` and provide it\n * through `store.useValue` for new applications.\n */\n@Injectable()\nexport class RedisStore extends BaseRedisStore {\n constructor(\n @Inject(XLT_REDIS_CLIENT)\n redisClient: RedisClient,\n ) {\n super(redisClient);\n }\n}\n","import { Inject, Injectable } from \"@nestjs/common\";\nimport { IORedisStore as BaseIORedisStore, type IORedisClient } from \"@xlt-token/store-redis\";\n\nexport const XLT_IOREDIS_CLIENT = \"XLT_IOREDIS_CLIENT\";\n\n/**\n * @deprecated Import `IORedisStore` from `@xlt-token/store-redis` and provide it\n * through `store.useValue` for new applications.\n */\n@Injectable()\nexport class IORedisStore extends BaseIORedisStore {\n constructor(\n @Inject(XLT_IOREDIS_CLIENT)\n redisClient: IORedisClient,\n ) {\n super(redisClient);\n }\n}\n","// 登录校验装饰器\n\nimport { SetMetadata } from \"@nestjs/common\";\nimport { XLT_CHECK_LOGIN_KEY } from \"@xlt-token/core\";\n\n/**\n * 登录校验装饰器\n * @constructor\n */\nexport const XltCheckLogin = () => SetMetadata(XLT_CHECK_LOGIN_KEY, true);\n","// 忽略校验装饰器\n\nimport { SetMetadata } from \"@nestjs/common\";\nimport { XLT_IGNORE_KEY } from \"@xlt-token/core\";\n\nexport const XltIgnore = () => SetMetadata(XLT_IGNORE_KEY, true);\n","// 注入当前用户 ID\n\nimport { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\n/**\n * 注入当前用户 ID\n * @constructor\n */\nexport const LoginId = createParamDecorator((data: unknown, ctx: ExecutionContext) => {\n const request = ctx.switchToHttp().getRequest();\n return request.stpLoginId;\n});\n","// 注入当前 Token\n\nimport { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\n/**\n * 注入当前 Token\n * @constructor\n */\nexport const TokenValue = createParamDecorator((data: any, ctx: ExecutionContext) => {\n const request = ctx.switchToHttp().getRequest();\n return request.stpToken;\n});\n","import { XLT_PERMISSION_KEY, XltMode } from \"@xlt-token/core\";\nimport { SetMetadata } from \"@nestjs/common\";\n\n/**\n * 权限检查装饰器\n * @param {string | string[]} permissions 权限列表\n * @param {Object} [options] 模式选项\n * @param {XltMode} [options.mode] 模式选项\n * @constructor\n */\nexport const XltCheckPermission = (permissions: string | string[], options?: { mode: XltMode }) => {\n const perms = Array.isArray(permissions) ? permissions : [permissions];\n const mode = options?.mode ?? XltMode.AND;\n return SetMetadata(XLT_PERMISSION_KEY, { permissions: perms, mode });\n};\n","import { XLT_ROLE_KEY, XltMode } from \"@xlt-token/core\";\nimport { SetMetadata } from \"@nestjs/common\";\n\n/**\n * 角色检查装饰器\n * @param {string | string[]} roles 角色列表\n * @param {Object} [options] 模式选项\n * @param {XltMode} [options.mode] 模式选项\n * @constructor\n */\nexport const XltCheckRole = (roles: string | string[], options?: { mode: XltMode }) => {\n const _roles = Array.isArray(roles) ? roles : [roles];\n const mode = options?.mode ?? XltMode.AND;\n return SetMetadata(XLT_ROLE_KEY, { roles: _roles, mode });\n};\n","import { SetMetadata } from \"@nestjs/common\";\n\nexport const XLT_CHECK_SAFE_KEY = \"XLT_CHECK_SAFE\";\n\nexport const XltCheckSafe = (business: string) => {\n return SetMetadata(XLT_CHECK_SAFE_KEY, business);\n};\n","import { UnauthorizedException } from \"@nestjs/common\";\nimport { NotLoginType, type XltErrorCode } from \"@xlt-token/core\";\n\nexport class NotLoginException extends UnauthorizedException {\n public readonly type: NotLoginType;\n public readonly token: string | undefined;\n\n constructor(type: NotLoginType, token?: string) {\n super({\n statusCode: 401,\n code: NotLoginException.codeForType(type),\n type,\n message: NotLoginException.describeType(type),\n });\n this.type = type;\n this.token = token;\n }\n\n private static codeForType(type: NotLoginType): XltErrorCode {\n const map: Record<NotLoginType, XltErrorCode> = {\n [NotLoginType.NOT_TOKEN]: \"TOKEN_MISSING\",\n [NotLoginType.INVALID_TOKEN]: \"TOKEN_INVALID\",\n [NotLoginType.TOKEN_TIMEOUT]: \"TOKEN_TIMEOUT\",\n [NotLoginType.TOKEN_FREEZE]: \"TOKEN_FREEZE\",\n [NotLoginType.BE_REPLACED]: \"TOKEN_REPLACED\",\n [NotLoginType.KICK_OUT]: \"TOKEN_KICKED_OUT\",\n };\n return map[type] ?? \"TOKEN_INVALID\";\n }\n\n private static describeType(type: NotLoginType): string {\n const map: Record<NotLoginType, string> = {\n [NotLoginType.NOT_TOKEN]: \"未提供 Token\",\n [NotLoginType.INVALID_TOKEN]: \"Token 无效\",\n [NotLoginType.TOKEN_TIMEOUT]: \"Token 已过期\",\n [NotLoginType.TOKEN_FREEZE]: \"Token 已被冻结\",\n [NotLoginType.BE_REPLACED]: \"已被顶下线\",\n [NotLoginType.KICK_OUT]: \"已被踢下线\",\n };\n return map[type] ?? \"未登录\";\n }\n}\n","import { ForbiddenException } from \"@nestjs/common\";\nimport { XltMode } from \"@xlt-token/core\";\n\nexport class NotPermissionException extends ForbiddenException {\n public readonly permission: string | string[];\n public readonly mode: XltMode;\n\n constructor(permission: string | string[], mode: XltMode) {\n super({\n statusCode: 403,\n code: \"PERMISSION_DENIED\",\n permission,\n mode,\n message: `缺少权限: ${Array.isArray(permission) ? permission.join(\", \") : permission}`,\n });\n this.permission = permission;\n this.mode = mode;\n }\n}\n","import { ForbiddenException } from \"@nestjs/common\";\nimport { XltMode } from \"@xlt-token/core\";\n\nexport class NotRoleException extends ForbiddenException {\n public readonly role: string | string[];\n public readonly mode: XltMode;\n\n constructor(role: string | string[], mode: XltMode) {\n super({\n statusCode: 403,\n code: \"ROLE_DENIED\",\n role,\n mode,\n message: `缺少角色: ${Array.isArray(role) ? role.join(\", \") : role}`,\n });\n this.role = role;\n this.mode = mode;\n }\n}\n","import { ForbiddenException } from \"@nestjs/common\";\n\nexport class NotSafeException extends ForbiddenException {\n readonly business: string;\n\n constructor(business: string) {\n super({\n statusCode: 403,\n code: \"SAFE_REQUIRED\",\n business,\n message: `二级认证未开启:${business}`,\n });\n this.business = business;\n }\n}\n","import {\n createExpressContext,\n type CookieOptions,\n type ExpressLikeResponse,\n NotLoginException as CoreNotLoginException,\n NotPermissionException as CoreNotPermissionException,\n NotRoleException as CoreNotRoleException,\n NotSafeException as CoreNotSafeException,\n} from \"@xlt-token/core\";\nimport { NotLoginException } from \"../exceptions/not-login.exception.js\";\nimport { NotPermissionException } from \"../exceptions/not-permission.exception.js\";\nimport { NotRoleException } from \"../exceptions/not-role.exception.js\";\nimport { NotSafeException } from \"../exceptions/not-safe.exception.js\";\n\n/**\n * Fastify reply 的写回 API 与 Express response 不同:\n * - 写 header:Express 用 `res.setHeader(n, v)`,Fastify 用 `reply.header(n, v)`\n * - 写 cookie:Express 用 `res.cookie(n, v, o)`,Fastify 用 `reply.setCookie(n, v, o)`\n *\n * 这里把任意一种 response 归一化成 core 期望的 {@link ExpressLikeResponse} 形态,\n * 让核心层无需感知底层 HTTP 平台。读取侧(headers/cookies/query)两个平台形态一致,\n * 直接复用 core 的 createExpressContext。\n */\nfunction normalizeResponse(res: any): ExpressLikeResponse {\n return {\n setHeader(name: string, value: string): void {\n if (typeof res?.setHeader === \"function\") {\n // Express response / 原生 Node 响应\n res.setHeader(name, value);\n } else if (typeof res?.header === \"function\") {\n // Fastify reply\n res.header(name, value);\n } else {\n throw new Error(\n \"xlt-token: 当前 response 不支持写入 header(既无 setHeader 也无 header 方法)\",\n );\n }\n },\n cookie(name: string, value: string, options?: CookieOptions): void {\n if (typeof res?.cookie === \"function\") {\n // Express response(或已注册 @fastify/cookie 暴露的 cookie 别名)\n res.cookie(name, value, options);\n } else if (typeof res?.setCookie === \"function\") {\n // Fastify reply + @fastify/cookie 插件\n res.setCookie(name, value, options);\n } else {\n throw new Error(\n \"xlt-token: 当前 response 不支持写入 cookie。\" +\n \"若使用 Fastify,请先注册 @fastify/cookie 插件。\",\n );\n }\n },\n };\n}\n\nexport function createNestHttpContext(req: any, res: any) {\n return createExpressContext(req, normalizeResponse(res));\n}\n\nexport function rethrowCoreAuthException(error: unknown): never {\n if (error instanceof CoreNotLoginException) {\n throw new NotLoginException(error.type, error.token);\n }\n if (error instanceof CoreNotPermissionException) {\n throw new NotPermissionException(error.permission, error.mode);\n }\n if (error instanceof CoreNotRoleException) {\n throw new NotRoleException(error.role, error.mode);\n }\n if (error instanceof CoreNotSafeException) {\n throw new NotSafeException(error.business);\n }\n throw error;\n}\n","// 全局守卫\n\nimport { CanActivate, ExecutionContext, Inject, Injectable, Optional } from \"@nestjs/common\";\nimport { Reflector } from \"@nestjs/core\";\nimport {\n type AuthResult,\n StpLogic,\n StpPermLogic,\n XLT_CHECK_LOGIN_KEY,\n XLT_IGNORE_KEY,\n XLT_PERMISSION_KEY,\n XLT_ROLE_KEY,\n XLT_TOKEN_CONFIG,\n type XltTokenConfig,\n} from \"@xlt-token/core\";\nimport { XLT_CHECK_SAFE_KEY } from \"../decorators/xlt-check-safe.decorator.js\";\nimport { createNestHttpContext, rethrowCoreAuthException } from \"../http/nest-bridge.js\";\n\n@Injectable()\nexport class XltTokenGuard implements CanActivate {\n constructor(\n private readonly reflector: Reflector,\n @Inject(XLT_TOKEN_CONFIG) private readonly config: XltTokenConfig,\n private readonly stpLogic: StpLogic,\n @Optional() private readonly stpPermLogic?: StpPermLogic,\n ) {}\n\n async canActivate(context: ExecutionContext): Promise<boolean> {\n if (!this.requiresLogin(context)) return true;\n\n const request = context.switchToHttp().getRequest();\n const response = context.switchToHttp().getResponse();\n\n let result: AuthResult;\n try {\n result = await this.stpLogic.checkLogin(createNestHttpContext(request, response));\n } catch (error) {\n rethrowCoreAuthException(error);\n }\n\n const business = this.getBusiness(context);\n request.stpLoginId = result.loginId;\n request.stpToken = result.token;\n\n try {\n if (this.stpPermLogic) {\n const handler = context.getHandler();\n const cls = context.getClass();\n\n const permMeta = this.reflector.getAllAndOverride(XLT_PERMISSION_KEY, [handler, cls]);\n if (permMeta) {\n await this.stpPermLogic.checkPermission(\n result.loginId!,\n permMeta.permissions,\n permMeta.mode,\n );\n }\n\n const roleMeta = this.reflector.getAllAndOverride(XLT_ROLE_KEY, [handler, cls]);\n if (roleMeta) {\n await this.stpPermLogic.checkRole(result.loginId!, roleMeta.roles, roleMeta.mode);\n }\n }\n\n if (business) {\n await this.stpLogic.checkSafe(result.token!, business);\n }\n } catch (error) {\n rethrowCoreAuthException(error);\n }\n\n return true;\n }\n\n private requiresLogin(context: ExecutionContext): boolean {\n const isIgnored = this.reflector.getAllAndOverride<boolean>(XLT_IGNORE_KEY, [\n context.getHandler(),\n context.getClass(),\n ]);\n\n if (this.config.defaultCheck) {\n return !isIgnored;\n }\n\n const shouldCheck = this.reflector.getAllAndOverride<boolean>(XLT_CHECK_LOGIN_KEY, [\n context.getHandler(),\n context.getClass(),\n ]);\n return shouldCheck ?? false;\n }\n\n private getBusiness(context: ExecutionContext): string {\n return this.reflector.getAllAndOverride<string>(XLT_CHECK_SAFE_KEY, [\n context.getHandler(),\n context.getClass(),\n ]);\n }\n}\n","import { CanActivate, ExecutionContext, Inject, Injectable } from \"@nestjs/common\";\nimport { Reflector } from \"@nestjs/core\";\nimport {\n NotLoginException as CoreNotLoginException,\n NotLoginType,\n StpLogic,\n XLT_CHECK_LOGIN_KEY,\n XLT_IGNORE_KEY,\n XLT_TOKEN_CONFIG,\n type XltTokenConfig,\n} from \"@xlt-token/core\";\nimport { NotLoginException } from \"../exceptions/not-login.exception.js\";\nimport { createNestHttpContext } from \"../http/nest-bridge.js\";\n\n@Injectable()\nexport abstract class XltAbstractLoginGuard implements CanActivate {\n protected constructor(\n protected readonly reflector: Reflector,\n @Inject(XLT_TOKEN_CONFIG) protected readonly config: XltTokenConfig,\n protected readonly stpLogic: StpLogic,\n ) {}\n\n async canActivate(ctx: ExecutionContext): Promise<boolean> {\n if (!this.requiresLogin(ctx)) return true;\n\n const request = ctx.switchToHttp().getRequest();\n const response = ctx.switchToHttp().getResponse();\n\n let result: { ok: boolean; loginId?: string; token?: string; reason?: NotLoginType };\n try {\n result = await this.stpLogic.checkLogin(createNestHttpContext(request, response));\n } catch (err) {\n if (err instanceof CoreNotLoginException) {\n await this.onAuthFail?.({ ok: false, reason: err.type, token: err.token }, request);\n throw new NotLoginException(err.type, err.token);\n }\n throw err;\n }\n\n request.stpLoginId = result.loginId;\n request.stpToken = result.token;\n await this.onAuthSuccess?.(result, request);\n return true;\n }\n\n protected requiresLogin(ctx: ExecutionContext): boolean {\n const isIgnored = this.reflector.getAllAndOverride<boolean>(XLT_IGNORE_KEY, [\n ctx.getHandler(),\n ctx.getClass(),\n ]);\n\n if (this.config.defaultCheck) return !isIgnored;\n\n return (\n this.reflector.getAllAndOverride<boolean>(XLT_CHECK_LOGIN_KEY, [\n ctx.getHandler(),\n ctx.getClass(),\n ]) ?? false\n );\n }\n\n protected onAuthSuccess?(\n result: {\n ok: boolean;\n loginId?: string | undefined;\n token?: string | undefined;\n reason?: NotLoginType | undefined;\n },\n request: any,\n ): void | Promise<void>;\n\n protected onAuthFail?(\n result: {\n ok: boolean;\n loginId?: string | undefined;\n token?: string | undefined;\n reason?: NotLoginType | undefined;\n },\n request: any,\n ): void | Promise<void>;\n\n protected onPermissionDenied?(\n result: {\n ok: boolean;\n loginId?: string | undefined;\n token?: string | undefined;\n reason?: NotLoginType | undefined;\n },\n request: any,\n ): void | Promise<void>;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["StpLogic","XLT_TOKEN_CONFIG","XLT_TOKEN_STORE","XLT_TOKEN_STRATEGY","XLT_EVENT_SINK","StpPermLogic","XLT_STP_INTERFACE","MemoryStore","UuidStrategy","BaseRedisStore","BaseIORedisStore","XltMode","XltMode","NotLoginType","createExpressContext","CoreNotLoginException","CoreNotPermissionException","CoreNotRoleException","CoreNotSafeException","XLT_TOKEN_CONFIG","CoreNotLoginException","XLT_TOKEN_CONFIG"],"sources":["../src/xlt-token.module.ts","../src/store/redis-store.ts","../src/store/ioredis-store.ts","../src/decorators/xlt-check-login.decorator.ts","../src/decorators/xlt-ignore.decorator.ts","../src/decorators/login-id.decorator.ts","../src/decorators/token-value.decorator.ts","../src/decorators/xlt-check-permission.decorator.ts","../src/decorators/xlt-check-role.decorator.ts","../src/decorators/xlt-check-safe.decorator.ts","../src/exceptions/not-login.exception.ts","../src/exceptions/not-permission.exception.ts","../src/exceptions/not-role.exception.ts","../src/exceptions/not-safe.exception.ts","../src/http/nest-bridge.ts","../src/guards/xlt-token.guard.ts","../src/guards/xlt-abstract-login.guard.ts"],"sourcesContent":["import type { ModuleMetadata, Provider } from \"@nestjs/common\";\nimport { Module } from \"@nestjs/common\";\nimport type {\n StpInterface,\n TokenStrategy,\n XltEventSink,\n XltTokenConfig,\n XltTokenConfigInput,\n XltTokenStore,\n} from \"@xlt-token/core\";\nimport {\n MemoryStore,\n setStpLogic,\n setStpPermLogic,\n StpLogic,\n StpPermLogic,\n UuidStrategy,\n XLT_STP_INTERFACE,\n XLT_EVENT_SINK,\n XLT_TOKEN_CONFIG,\n XLT_TOKEN_STORE,\n XLT_TOKEN_STRATEGY,\n normalizeXltTokenConfig,\n} from \"@xlt-token/core\";\n\nexport interface XltTokenModuleOptions {\n config?: Partial<XltTokenConfigInput>;\n store?: { useClass: new (...args: any[]) => XltTokenStore } | { useValue: XltTokenStore };\n strategy?: { useClass: new (...args: any[]) => TokenStrategy } | { useValue: TokenStrategy };\n isGlobal?: boolean;\n providers?: Provider[];\n stpInterface?: new (...args: any[]) => StpInterface;\n eventSink?: XltEventSink;\n}\n\nexport interface XltTokenModuleAsyncOptions extends Pick<ModuleMetadata, \"imports\"> {\n useFactory: (\n ...args: any[]\n ) => Promise<Pick<XltTokenModuleOptions, \"config\">> | Pick<XltTokenModuleOptions, \"config\">;\n inject?: any[];\n store?: { useClass: new (...args: any[]) => XltTokenStore } | { useValue: XltTokenStore };\n strategy?: { useClass: new (...args: any[]) => TokenStrategy } | { useValue: TokenStrategy };\n isGlobal?: boolean;\n providers?: Provider[];\n stpInterface?: new (...args: any[]) => StpInterface;\n eventSink?: XltEventSink;\n}\n\n@Module({})\nexport class XltTokenModule {\n private static readonly stpLogicProvider: Provider = {\n provide: StpLogic,\n useFactory: (\n config: XltTokenConfig,\n store: XltTokenStore,\n strategy: TokenStrategy,\n eventSink: XltEventSink,\n ) => new StpLogic(config, store, strategy, eventSink),\n inject: [XLT_TOKEN_CONFIG, XLT_TOKEN_STORE, XLT_TOKEN_STRATEGY, XLT_EVENT_SINK],\n };\n private static readonly stpPermLogicProvider: Provider = {\n provide: StpPermLogic,\n useFactory: (stpInterface: StpInterface, store: XltTokenStore, config: XltTokenConfig) =>\n new StpPermLogic(stpInterface, store, config),\n inject: [XLT_STP_INTERFACE, XLT_TOKEN_STORE, XLT_TOKEN_CONFIG],\n };\n private static readonly initProvider: Provider = {\n provide: \"XLT_TOKEN_INIT\",\n useFactory: (stpLogic: StpLogic, stpPermLogic: StpPermLogic) => {\n setStpLogic(stpLogic);\n setStpPermLogic(stpPermLogic);\n return true;\n },\n inject: [StpLogic, StpPermLogic],\n };\n private static readonly moduleExports = [\n XLT_TOKEN_CONFIG,\n XLT_TOKEN_STORE,\n XLT_TOKEN_STRATEGY,\n StpLogic,\n StpPermLogic,\n ];\n\n static forRoot(options: XltTokenModuleOptions = {}) {\n const {\n config: userConfig,\n store,\n strategy,\n isGlobal = false,\n providers = [],\n stpInterface,\n } = options;\n\n return {\n module: XltTokenModule,\n providers: [\n { provide: XLT_TOKEN_CONFIG, useValue: normalizeXltTokenConfig(userConfig) },\n XltTokenModule.createStoreProvider(store),\n XltTokenModule.createStrategyProvider(strategy),\n XltTokenModule.createStpInterfaceProvider(stpInterface),\n XltTokenModule.createEventSinkProvider(options.eventSink),\n XltTokenModule.stpLogicProvider,\n XltTokenModule.stpPermLogicProvider,\n XltTokenModule.initProvider,\n ...providers,\n ],\n exports: XltTokenModule.moduleExports,\n global: isGlobal,\n };\n }\n\n static forRootAsync(options: XltTokenModuleAsyncOptions) {\n const {\n useFactory,\n inject = [],\n imports = [],\n store,\n strategy,\n isGlobal = false,\n providers = [],\n stpInterface,\n } = options;\n\n return {\n module: XltTokenModule,\n imports,\n providers: [\n {\n provide: XLT_TOKEN_CONFIG,\n useFactory: async (...args: any[]) => {\n const { config = {} } = await useFactory(...args);\n return normalizeXltTokenConfig(config);\n },\n inject,\n },\n XltTokenModule.createStoreProvider(store),\n XltTokenModule.createStrategyProvider(strategy),\n XltTokenModule.createStpInterfaceProvider(stpInterface),\n XltTokenModule.createEventSinkProvider(options.eventSink),\n XltTokenModule.stpLogicProvider,\n XltTokenModule.stpPermLogicProvider,\n XltTokenModule.initProvider,\n ...providers,\n ],\n exports: XltTokenModule.moduleExports,\n global: isGlobal,\n };\n }\n\n private static createStoreProvider(store?: XltTokenModuleOptions[\"store\"]): Provider {\n if (!store) return { provide: XLT_TOKEN_STORE, useClass: MemoryStore };\n return \"useClass\" in store\n ? { provide: XLT_TOKEN_STORE, useClass: store.useClass }\n : { provide: XLT_TOKEN_STORE, useValue: store.useValue };\n }\n\n private static createStrategyProvider(strategy?: XltTokenModuleOptions[\"strategy\"]): Provider {\n if (!strategy) return { provide: XLT_TOKEN_STRATEGY, useClass: UuidStrategy };\n return \"useClass\" in strategy\n ? { provide: XLT_TOKEN_STRATEGY, useClass: strategy.useClass }\n : { provide: XLT_TOKEN_STRATEGY, useValue: strategy.useValue };\n }\n\n private static createStpInterfaceProvider(\n stpInterface?: new (...args: any[]) => StpInterface,\n ): Provider {\n if (stpInterface) return { provide: XLT_STP_INTERFACE, useClass: stpInterface };\n return {\n provide: XLT_STP_INTERFACE,\n useValue: {\n getPermissionList: () => {\n throw new Error(\"StpInterface not registered: getPermissionList\");\n },\n getRoleList: () => {\n throw new Error(\"StpInterface not registered: getRoleList\");\n },\n },\n };\n }\n\n private static createEventSinkProvider(eventSink?: XltTokenModuleOptions[\"eventSink\"]): Provider {\n return { provide: XLT_EVENT_SINK, useValue: eventSink ?? {} };\n }\n}\n","import { Inject, Injectable } from \"@nestjs/common\";\nimport { RedisStore as BaseRedisStore, type RedisClient } from \"@xlt-token/store-redis\";\n\nexport const XLT_REDIS_CLIENT = \"XLT_REDIS_CLIENT\";\n\n/**\n * @deprecated Import `RedisStore` from `@xlt-token/store-redis` and provide it\n * through `store.useValue` for new applications.\n */\n@Injectable()\nexport class RedisStore extends BaseRedisStore {\n constructor(\n @Inject(XLT_REDIS_CLIENT)\n redisClient: RedisClient,\n ) {\n super(redisClient);\n }\n}\n","import { Inject, Injectable } from \"@nestjs/common\";\nimport { IORedisStore as BaseIORedisStore, type IORedisClient } from \"@xlt-token/store-redis\";\n\nexport const XLT_IOREDIS_CLIENT = \"XLT_IOREDIS_CLIENT\";\n\n/**\n * @deprecated Import `IORedisStore` from `@xlt-token/store-redis` and provide it\n * through `store.useValue` for new applications.\n */\n@Injectable()\nexport class IORedisStore extends BaseIORedisStore {\n constructor(\n @Inject(XLT_IOREDIS_CLIENT)\n redisClient: IORedisClient,\n ) {\n super(redisClient);\n }\n}\n","// 登录校验装饰器\n\nimport { SetMetadata } from \"@nestjs/common\";\nimport { XLT_CHECK_LOGIN_KEY } from \"@xlt-token/core\";\n\n/**\n * 登录校验装饰器\n * @constructor\n */\nexport const XltCheckLogin = () => SetMetadata(XLT_CHECK_LOGIN_KEY, true);\n","// 忽略校验装饰器\n\nimport { SetMetadata } from \"@nestjs/common\";\nimport { XLT_IGNORE_KEY } from \"@xlt-token/core\";\n\nexport const XltIgnore = () => SetMetadata(XLT_IGNORE_KEY, true);\n","// 注入当前用户 ID\n\nimport { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\n/**\n * 注入当前用户 ID\n * @constructor\n */\nexport const LoginId = createParamDecorator((data: unknown, ctx: ExecutionContext) => {\n const request = ctx.switchToHttp().getRequest();\n return request.stpLoginId;\n});\n","// 注入当前 Token\n\nimport { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\n/**\n * 注入当前 Token\n * @constructor\n */\nexport const TokenValue = createParamDecorator((data: any, ctx: ExecutionContext) => {\n const request = ctx.switchToHttp().getRequest();\n return request.stpToken;\n});\n","import { XLT_PERMISSION_KEY, XltMode } from \"@xlt-token/core\";\nimport { SetMetadata } from \"@nestjs/common\";\n\n/**\n * 权限检查装饰器\n * @param {string | string[]} permissions 权限列表\n * @param {Object} [options] 模式选项\n * @param {XltMode} [options.mode] 模式选项\n * @constructor\n */\nexport const XltCheckPermission = (permissions: string | string[], options?: { mode: XltMode }) => {\n const perms = Array.isArray(permissions) ? permissions : [permissions];\n const mode = options?.mode ?? XltMode.AND;\n return SetMetadata(XLT_PERMISSION_KEY, { permissions: perms, mode });\n};\n","import { XLT_ROLE_KEY, XltMode } from \"@xlt-token/core\";\nimport { SetMetadata } from \"@nestjs/common\";\n\n/**\n * 角色检查装饰器\n * @param {string | string[]} roles 角色列表\n * @param {Object} [options] 模式选项\n * @param {XltMode} [options.mode] 模式选项\n * @constructor\n */\nexport const XltCheckRole = (roles: string | string[], options?: { mode: XltMode }) => {\n const _roles = Array.isArray(roles) ? roles : [roles];\n const mode = options?.mode ?? XltMode.AND;\n return SetMetadata(XLT_ROLE_KEY, { roles: _roles, mode });\n};\n","import { SetMetadata } from \"@nestjs/common\";\n\nexport const XLT_CHECK_SAFE_KEY = \"XLT_CHECK_SAFE\";\n\nexport const XltCheckSafe = (business: string) => {\n return SetMetadata(XLT_CHECK_SAFE_KEY, business);\n};\n","import { UnauthorizedException } from \"@nestjs/common\";\nimport { NotLoginType, type XltErrorCode } from \"@xlt-token/core\";\n\nexport class NotLoginException extends UnauthorizedException {\n public readonly type: NotLoginType;\n public readonly token: string | undefined;\n\n constructor(type: NotLoginType, token?: string) {\n super({\n statusCode: 401,\n code: NotLoginException.codeForType(type),\n type,\n message: NotLoginException.describeType(type),\n });\n this.type = type;\n this.token = token;\n }\n\n private static codeForType(type: NotLoginType): XltErrorCode {\n const map: Record<NotLoginType, XltErrorCode> = {\n [NotLoginType.NOT_TOKEN]: \"TOKEN_MISSING\",\n [NotLoginType.INVALID_TOKEN]: \"TOKEN_INVALID\",\n [NotLoginType.TOKEN_TIMEOUT]: \"TOKEN_TIMEOUT\",\n [NotLoginType.TOKEN_FREEZE]: \"TOKEN_FREEZE\",\n [NotLoginType.BE_REPLACED]: \"TOKEN_REPLACED\",\n [NotLoginType.KICK_OUT]: \"TOKEN_KICKED_OUT\",\n };\n return map[type] ?? \"TOKEN_INVALID\";\n }\n\n private static describeType(type: NotLoginType): string {\n const map: Record<NotLoginType, string> = {\n [NotLoginType.NOT_TOKEN]: \"未提供 Token\",\n [NotLoginType.INVALID_TOKEN]: \"Token 无效\",\n [NotLoginType.TOKEN_TIMEOUT]: \"Token 已过期\",\n [NotLoginType.TOKEN_FREEZE]: \"Token 已被冻结\",\n [NotLoginType.BE_REPLACED]: \"已被顶下线\",\n [NotLoginType.KICK_OUT]: \"已被踢下线\",\n };\n return map[type] ?? \"未登录\";\n }\n}\n","import { ForbiddenException } from \"@nestjs/common\";\nimport { XltMode } from \"@xlt-token/core\";\n\nexport class NotPermissionException extends ForbiddenException {\n public readonly permission: string | string[];\n public readonly mode: XltMode;\n\n constructor(permission: string | string[], mode: XltMode) {\n super({\n statusCode: 403,\n code: \"PERMISSION_DENIED\",\n permission,\n mode,\n message: `缺少权限: ${Array.isArray(permission) ? permission.join(\", \") : permission}`,\n });\n this.permission = permission;\n this.mode = mode;\n }\n}\n","import { ForbiddenException } from \"@nestjs/common\";\nimport { XltMode } from \"@xlt-token/core\";\n\nexport class NotRoleException extends ForbiddenException {\n public readonly role: string | string[];\n public readonly mode: XltMode;\n\n constructor(role: string | string[], mode: XltMode) {\n super({\n statusCode: 403,\n code: \"ROLE_DENIED\",\n role,\n mode,\n message: `缺少角色: ${Array.isArray(role) ? role.join(\", \") : role}`,\n });\n this.role = role;\n this.mode = mode;\n }\n}\n","import { ForbiddenException } from \"@nestjs/common\";\n\nexport class NotSafeException extends ForbiddenException {\n readonly business: string;\n\n constructor(business: string) {\n super({\n statusCode: 403,\n code: \"SAFE_REQUIRED\",\n business,\n message: `二级认证未开启:${business}`,\n });\n this.business = business;\n }\n}\n","import {\n createExpressContext,\n type CookieOptions,\n type ExpressLikeResponse,\n NotLoginException as CoreNotLoginException,\n NotPermissionException as CoreNotPermissionException,\n NotRoleException as CoreNotRoleException,\n NotSafeException as CoreNotSafeException,\n} from \"@xlt-token/core\";\nimport { NotLoginException } from \"../exceptions/not-login.exception.js\";\nimport { NotPermissionException } from \"../exceptions/not-permission.exception.js\";\nimport { NotRoleException } from \"../exceptions/not-role.exception.js\";\nimport { NotSafeException } from \"../exceptions/not-safe.exception.js\";\n\n/**\n * Fastify reply 的写回 API 与 Express response 不同:\n * - 写 header:Express 用 `res.setHeader(n, v)`,Fastify 用 `reply.header(n, v)`\n * - 写 cookie:Express 用 `res.cookie(n, v, o)`,Fastify 用 `reply.setCookie(n, v, o)`\n *\n * 这里把任意一种 response 归一化成 core 期望的 {@link ExpressLikeResponse} 形态,\n * 让核心层无需感知底层 HTTP 平台。读取侧(headers/cookies/query)两个平台形态一致,\n * 直接复用 core 的 createExpressContext。\n */\nfunction normalizeResponse(res: any): ExpressLikeResponse {\n return {\n setHeader(name: string, value: string): void {\n if (typeof res?.setHeader === \"function\") {\n // Express response / 原生 Node 响应\n res.setHeader(name, value);\n } else if (typeof res?.header === \"function\") {\n // Fastify reply\n res.header(name, value);\n } else {\n throw new Error(\n \"xlt-token: 当前 response 不支持写入 header(既无 setHeader 也无 header 方法)\",\n );\n }\n },\n cookie(name: string, value: string, options?: CookieOptions): void {\n if (typeof res?.cookie === \"function\") {\n // Express response(或已注册 @fastify/cookie 暴露的 cookie 别名)\n res.cookie(name, value, options);\n } else if (typeof res?.setCookie === \"function\") {\n // Fastify reply + @fastify/cookie 插件\n res.setCookie(name, value, options);\n } else {\n throw new Error(\n \"xlt-token: 当前 response 不支持写入 cookie。\" +\n \"若使用 Fastify,请先注册 @fastify/cookie 插件。\",\n );\n }\n },\n };\n}\n\nexport function createNestHttpContext(req: any, res: any) {\n return createExpressContext(req, normalizeResponse(res));\n}\n\nexport function rethrowCoreAuthException(error: unknown): never {\n if (error instanceof CoreNotLoginException) {\n throw new NotLoginException(error.type, error.token);\n }\n if (error instanceof CoreNotPermissionException) {\n throw new NotPermissionException(error.permission, error.mode);\n }\n if (error instanceof CoreNotRoleException) {\n throw new NotRoleException(error.role, error.mode);\n }\n if (error instanceof CoreNotSafeException) {\n throw new NotSafeException(error.business);\n }\n throw error;\n}\n","// 全局守卫\n\nimport { CanActivate, ExecutionContext, Inject, Injectable, Optional } from \"@nestjs/common\";\nimport { Reflector } from \"@nestjs/core\";\nimport {\n type AuthResult,\n StpLogic,\n StpPermLogic,\n XLT_CHECK_LOGIN_KEY,\n XLT_IGNORE_KEY,\n XLT_PERMISSION_KEY,\n XLT_ROLE_KEY,\n XLT_TOKEN_CONFIG,\n type XltTokenConfig,\n} from \"@xlt-token/core\";\nimport { XLT_CHECK_SAFE_KEY } from \"../decorators/xlt-check-safe.decorator.js\";\nimport { createNestHttpContext, rethrowCoreAuthException } from \"../http/nest-bridge.js\";\n\n@Injectable()\nexport class XltTokenGuard implements CanActivate {\n constructor(\n private readonly reflector: Reflector,\n @Inject(XLT_TOKEN_CONFIG) private readonly config: XltTokenConfig,\n private readonly stpLogic: StpLogic,\n @Optional() private readonly stpPermLogic?: StpPermLogic,\n ) {}\n\n async canActivate(context: ExecutionContext): Promise<boolean> {\n if (!this.requiresLogin(context)) return true;\n\n const request = context.switchToHttp().getRequest();\n const response = context.switchToHttp().getResponse();\n\n let result: AuthResult;\n try {\n result = await this.stpLogic.checkLogin(createNestHttpContext(request, response));\n } catch (error) {\n rethrowCoreAuthException(error);\n }\n\n const business = this.getBusiness(context);\n request.stpLoginId = result.loginId;\n request.stpToken = result.token;\n\n try {\n if (this.stpPermLogic) {\n const handler = context.getHandler();\n const cls = context.getClass();\n\n const permMeta = this.reflector.getAllAndOverride(XLT_PERMISSION_KEY, [handler, cls]);\n if (permMeta) {\n await this.stpPermLogic.checkPermission(\n result.loginId!,\n permMeta.permissions,\n permMeta.mode,\n );\n }\n\n const roleMeta = this.reflector.getAllAndOverride(XLT_ROLE_KEY, [handler, cls]);\n if (roleMeta) {\n await this.stpPermLogic.checkRole(result.loginId!, roleMeta.roles, roleMeta.mode);\n }\n }\n\n if (business) {\n await this.stpLogic.checkSafe(result.token!, business);\n }\n } catch (error) {\n rethrowCoreAuthException(error);\n }\n\n return true;\n }\n\n private requiresLogin(context: ExecutionContext): boolean {\n const isIgnored = this.reflector.getAllAndOverride<boolean>(XLT_IGNORE_KEY, [\n context.getHandler(),\n context.getClass(),\n ]);\n\n if (this.config.defaultCheck) {\n return !isIgnored;\n }\n\n const shouldCheck = this.reflector.getAllAndOverride<boolean>(XLT_CHECK_LOGIN_KEY, [\n context.getHandler(),\n context.getClass(),\n ]);\n return Boolean(\n shouldCheck ||\n [XLT_PERMISSION_KEY, XLT_ROLE_KEY, XLT_CHECK_SAFE_KEY].some(\n (key) =>\n this.reflector.getAllAndOverride(key, [context.getHandler(), context.getClass()]) !==\n undefined,\n ),\n );\n }\n\n private getBusiness(context: ExecutionContext): string {\n return this.reflector.getAllAndOverride<string>(XLT_CHECK_SAFE_KEY, [\n context.getHandler(),\n context.getClass(),\n ]);\n }\n}\n","import { CanActivate, ExecutionContext, Inject, Injectable } from \"@nestjs/common\";\nimport { Reflector } from \"@nestjs/core\";\nimport {\n NotLoginException as CoreNotLoginException,\n NotLoginType,\n StpLogic,\n XLT_CHECK_LOGIN_KEY,\n XLT_IGNORE_KEY,\n XLT_TOKEN_CONFIG,\n type XltTokenConfig,\n} from \"@xlt-token/core\";\nimport { NotLoginException } from \"../exceptions/not-login.exception.js\";\nimport { createNestHttpContext } from \"../http/nest-bridge.js\";\n\n@Injectable()\nexport abstract class XltAbstractLoginGuard implements CanActivate {\n protected constructor(\n protected readonly reflector: Reflector,\n @Inject(XLT_TOKEN_CONFIG) protected readonly config: XltTokenConfig,\n protected readonly stpLogic: StpLogic,\n ) {}\n\n async canActivate(ctx: ExecutionContext): Promise<boolean> {\n if (!this.requiresLogin(ctx)) return true;\n\n const request = ctx.switchToHttp().getRequest();\n const response = ctx.switchToHttp().getResponse();\n\n let result: { ok: boolean; loginId?: string; token?: string; reason?: NotLoginType };\n try {\n result = await this.stpLogic.checkLogin(createNestHttpContext(request, response));\n } catch (err) {\n if (err instanceof CoreNotLoginException) {\n await this.onAuthFail?.({ ok: false, reason: err.type, token: err.token }, request);\n throw new NotLoginException(err.type, err.token);\n }\n throw err;\n }\n\n request.stpLoginId = result.loginId;\n request.stpToken = result.token;\n await this.onAuthSuccess?.(result, request);\n return true;\n }\n\n protected requiresLogin(ctx: ExecutionContext): boolean {\n const isIgnored = this.reflector.getAllAndOverride<boolean>(XLT_IGNORE_KEY, [\n ctx.getHandler(),\n ctx.getClass(),\n ]);\n\n if (this.config.defaultCheck) return !isIgnored;\n\n return (\n this.reflector.getAllAndOverride<boolean>(XLT_CHECK_LOGIN_KEY, [\n ctx.getHandler(),\n ctx.getClass(),\n ]) ?? false\n );\n }\n\n protected onAuthSuccess?(\n result: {\n ok: boolean;\n loginId?: string | undefined;\n token?: string | undefined;\n reason?: NotLoginType | undefined;\n },\n request: any,\n ): void | Promise<void>;\n\n protected onAuthFail?(\n result: {\n ok: boolean;\n loginId?: string | undefined;\n token?: string | undefined;\n reason?: NotLoginType | undefined;\n },\n request: any,\n ): void | Promise<void>;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xlt-token/nestjs",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "NestJS integration for xlt-token",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"auth",
|
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@xlt-token/core": "^2.
|
|
51
|
-
"@xlt-token/jwt": "^2.
|
|
52
|
-
"@xlt-token/store-redis": "^2.
|
|
50
|
+
"@xlt-token/core": "^2.3.0",
|
|
51
|
+
"@xlt-token/jwt": "^2.3.0",
|
|
52
|
+
"@xlt-token/store-redis": "^2.3.0",
|
|
53
53
|
"uuid": "^10.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|