@point3/logto-module 1.1.4 → 1.1.6

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.
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LOGTO_ENV_REGISTRY = exports.LogtoEnvValidationError = void 0;
4
+ exports.resolveEnv = resolveEnv;
5
+ exports.resolveEnvOrThrow = resolveEnvOrThrow;
6
+ exports.validateLogtoEnv = validateLogtoEnv;
7
+ const errors_1 = require("./errors");
8
+ class LogtoEnvValidationError extends errors_1.LogtoError {
9
+ constructor(mode, missingVars) {
10
+ super(`LogtoModule 초기화 실패 [${mode} 모드]: 필수 환경변수가 누락되었습니다 - ${missingVars.join(', ')}`);
11
+ this.name = 'LogtoEnvValidationError';
12
+ }
13
+ }
14
+ exports.LogtoEnvValidationError = LogtoEnvValidationError;
15
+ exports.LOGTO_ENV_REGISTRY = [
16
+ {
17
+ newName: 'LOGTO/JWKS_URI',
18
+ legacyName: 'LOGTO_JWKS_URI',
19
+ requirement: 'always',
20
+ description: 'JWT 검증용 JWKS 엔드포인트',
21
+ },
22
+ {
23
+ newName: 'LOGTO/AUTH_ISSUER',
24
+ legacyName: 'LOGTO_AUTH_ISSUER',
25
+ requirement: 'always',
26
+ description: 'JWT 발급자(iss)',
27
+ },
28
+ {
29
+ newName: 'LOGTO/AUTH_ENDPOINT',
30
+ legacyName: 'LOGTO_AUTH_ENDPOINT',
31
+ requirement: 'client',
32
+ description: 'Logto 인증 서버 OIDC 엔드포인트',
33
+ },
34
+ {
35
+ newName: 'LOGTO/CLIENT_ID',
36
+ legacyName: 'LOGTO_CLIENT_ID',
37
+ requirement: 'client',
38
+ description: 'OAuth 클라이언트 ID',
39
+ },
40
+ {
41
+ newName: 'LOGTO/CLIENT_SECRET',
42
+ legacyName: 'LOGTO_CLIENT_SECRET',
43
+ requirement: 'client',
44
+ description: 'OAuth 클라이언트 시크릿',
45
+ },
46
+ {
47
+ newName: 'LOGTO/RESOURCES',
48
+ legacyName: 'LOGTO_RESOURCES',
49
+ requirement: 'client',
50
+ description: '접근할 리소스 서버',
51
+ },
52
+ {
53
+ newName: 'LOGTO/SCOPES',
54
+ legacyName: 'LOGTO_SCOPES',
55
+ requirement: 'client',
56
+ description: '요청할 OAuth 스코프',
57
+ },
58
+ {
59
+ newName: 'LOGTO/PROMPT',
60
+ legacyName: 'LOGTO_PROMPT',
61
+ requirement: 'client',
62
+ description: 'OAuth prompt 파라미터',
63
+ },
64
+ {
65
+ newName: 'LOGTO/REDIRECT_URI',
66
+ legacyName: 'LOGTO_REDIRECT_URI',
67
+ requirement: 'client',
68
+ description: '인증 후 리다이렉트 URI',
69
+ },
70
+ {
71
+ newName: 'LOGTO/SIGN_IN_URI',
72
+ legacyName: 'LOGTO_SIGN_IN_URI',
73
+ requirement: 'client',
74
+ description: '기본 로그인 URI',
75
+ },
76
+ {
77
+ newName: 'LOGTO/M2M_CLIENT_ID',
78
+ legacyName: 'LOGTO_M2M_CLIENT_ID',
79
+ requirement: 'client',
80
+ description: 'M2M 인증용 클라이언트 ID',
81
+ },
82
+ {
83
+ newName: 'LOGTO/M2M_CLIENT_SECRET',
84
+ legacyName: 'LOGTO_M2M_CLIENT_SECRET',
85
+ requirement: 'client',
86
+ description: 'M2M 인증용 클라이언트 시크릿',
87
+ },
88
+ {
89
+ newName: 'LOGTO/M2M_RESOURCE',
90
+ legacyName: 'LOGTO_M2M_RESOURCE',
91
+ requirement: 'client',
92
+ description: 'M2M 인증용 리소스',
93
+ },
94
+ {
95
+ newName: 'LOGTO/M2M_API_URL',
96
+ legacyName: 'LOGTO_M2M_API_URL',
97
+ requirement: 'client',
98
+ description: 'M2M API 서버 base URL',
99
+ },
100
+ {
101
+ newName: 'LOGTO/DASHBOARD_SIGN_IN_URI',
102
+ legacyName: 'LOGTO_DASHBOARD_SIGN_IN_URI',
103
+ requirement: 'optional',
104
+ description: '대시보드 로그인 URI',
105
+ },
106
+ ];
107
+ const warnedDeprecations = new Set();
108
+ function resolveEnv(newName, legacyName) {
109
+ const newValue = process.env[newName];
110
+ if (newValue !== undefined) {
111
+ return newValue;
112
+ }
113
+ const legacyValue = process.env[legacyName];
114
+ if (legacyValue !== undefined) {
115
+ if (!warnedDeprecations.has(legacyName)) {
116
+ console.warn(`[DEPRECATION WARNING] 환경변수 '${legacyName}'는 deprecated되었습니다. '${newName}'를 사용하세요.`);
117
+ warnedDeprecations.add(legacyName);
118
+ }
119
+ return legacyValue;
120
+ }
121
+ return undefined;
122
+ }
123
+ function resolveEnvOrThrow(newName, legacyName) {
124
+ const value = resolveEnv(newName, legacyName);
125
+ if (value === undefined) {
126
+ throw new Error(`환경변수 '${newName}' 또는 '${legacyName}'가 설정되지 않았습니다.`);
127
+ }
128
+ return value;
129
+ }
130
+ function validateLogtoEnv(enableClient) {
131
+ const mode = enableClient ? 'Stateful' : 'Stateless';
132
+ const missingVars = [];
133
+ for (const entry of exports.LOGTO_ENV_REGISTRY) {
134
+ const isRequired = entry.requirement === 'always' ||
135
+ (enableClient && entry.requirement === 'client');
136
+ if (isRequired) {
137
+ const value = resolveEnv(entry.newName, entry.legacyName);
138
+ if (value === undefined) {
139
+ missingVars.push(`${entry.newName} (또는 ${entry.legacyName})`);
140
+ }
141
+ }
142
+ }
143
+ if (missingVars.length > 0) {
144
+ throw new LogtoEnvValidationError(mode, missingVars);
145
+ }
146
+ if (enableClient) {
147
+ for (const entry of exports.LOGTO_ENV_REGISTRY) {
148
+ if (entry.requirement === 'optional') {
149
+ const value = resolveEnv(entry.newName, entry.legacyName);
150
+ if (value === undefined) {
151
+ console.warn(`[WARNING] 선택적 환경변수 '${entry.newName}' (또는 '${entry.legacyName}')가 설정되지 않았습니다.`);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ //# sourceMappingURL=env-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-config.js","sourceRoot":"","sources":["../env-config.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -22,3 +22,6 @@ export declare class SignInUriGenerationError extends LogtoError {
22
22
  export declare class SignOutUriGenerationError extends LogtoError {
23
23
  constructor();
24
24
  }
25
+ export declare class PersonalAccessTokenFetchError extends LogtoError {
26
+ constructor();
27
+ }
package/dist/errors.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SignOutUriGenerationError = exports.SignInUriGenerationError = exports.AuthorizationCodeTokenFetchError = exports.TokenRevocationFailedError = exports.MultipleUsersFoundError = exports.UserNotFoundError = exports.UserMissingRequiredFieldsError = exports.LogtoError = void 0;
3
+ exports.PersonalAccessTokenFetchError = exports.SignOutUriGenerationError = exports.SignInUriGenerationError = exports.AuthorizationCodeTokenFetchError = exports.TokenRevocationFailedError = exports.MultipleUsersFoundError = exports.UserNotFoundError = exports.UserMissingRequiredFieldsError = exports.LogtoError = void 0;
4
4
  class LogtoError extends Error {
5
5
  constructor(e) {
6
6
  super(typeof e === 'string' ? e : e.message);
@@ -59,4 +59,11 @@ class SignOutUriGenerationError extends LogtoError {
59
59
  }
60
60
  }
61
61
  exports.SignOutUriGenerationError = SignOutUriGenerationError;
62
+ class PersonalAccessTokenFetchError extends LogtoError {
63
+ constructor() {
64
+ super('Personal Access Token을 사용한 액세스 토큰 발급에 실패했습니다.');
65
+ this.name = "PersonalAccessTokenFetchError";
66
+ }
67
+ }
68
+ exports.PersonalAccessTokenFetchError = PersonalAccessTokenFetchError;
62
69
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAW,SAAQ,KAAK;IACjC,YAAY,CAAiB;QACzB,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9D,CAAC;CACJ;AAPD,gCAOC;AAED,MAAa,8BAA+B,SAAQ,UAAU;IAC1D;QACI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IACjD,CAAC;CACJ;AALD,wEAKC;AAED,MAAa,iBAAkB,SAAQ,UAAU;IAC7C,YAAY,KAAa,EAAE,KAAa;QACpC,KAAK,CAAC,QAAQ,KAAK,WAAW,KAAK,mBAAmB,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACpC,CAAC;CACJ;AALD,8CAKC;AAED,MAAa,uBAAwB,SAAQ,UAAU;IACnD,YAAY,KAAa,EAAE,KAAa;QACpC,KAAK,CAAC,QAAQ,KAAK,WAAW,KAAK,oBAAoB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IAC1C,CAAC;CACJ;AALD,0DAKC;AAED,MAAa,0BAA2B,SAAQ,UAAU;IACtD;QACI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC7C,CAAC;CACJ;AALD,gEAKC;AAED,MAAa,gCAAiC,SAAQ,UAAU;IAC5D,YAAY,IAAY;QACpB,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IACnD,CAAC;CACJ;AALD,4EAKC;AAED,MAAa,wBAAyB,SAAQ,UAAU;IACpD,YAAY,UAAkB;QAC1B,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,CAAC;CACJ;AALD,4DAKC;AAED,MAAa,yBAA0B,SAAQ,UAAU;IACrD;QACI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,CAAC;CACJ;AALD,8DAKC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAW,SAAQ,KAAK;IACjC,YAAY,CAAiB;QACzB,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9D,CAAC;CACJ;AAPD,gCAOC;AAED,MAAa,8BAA+B,SAAQ,UAAU;IAC1D;QACI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IACjD,CAAC;CACJ;AALD,wEAKC;AAED,MAAa,iBAAkB,SAAQ,UAAU;IAC7C,YAAY,KAAa,EAAE,KAAa;QACpC,KAAK,CAAC,QAAQ,KAAK,WAAW,KAAK,mBAAmB,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACpC,CAAC;CACJ;AALD,8CAKC;AAED,MAAa,uBAAwB,SAAQ,UAAU;IACnD,YAAY,KAAa,EAAE,KAAa;QACpC,KAAK,CAAC,QAAQ,KAAK,WAAW,KAAK,oBAAoB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IAC1C,CAAC;CACJ;AALD,0DAKC;AAED,MAAa,0BAA2B,SAAQ,UAAU;IACtD;QACI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC7C,CAAC;CACJ;AALD,gEAKC;AAED,MAAa,gCAAiC,SAAQ,UAAU;IAC5D,YAAY,IAAY;QACpB,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IACnD,CAAC;CACJ;AALD,4EAKC;AAED,MAAa,wBAAyB,SAAQ,UAAU;IACpD,YAAY,UAAkB;QAC1B,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,CAAC;CACJ;AALD,4DAKC;AAED,MAAa,yBAA0B,SAAQ,UAAU;IACrD;QACI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,CAAC;CACJ;AALD,8DAKC;AAED,MAAa,6BAA8B,SAAQ,UAAU;IACzD;QACI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAChD,CAAC;CACJ;AALD,sEAKC"}
@@ -0,0 +1 @@
1
+ export declare const MY_LOGGER_TOKEN: unique symbol;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MY_LOGGER_TOKEN = void 0;
10
+ const testing_1 = require("@nestjs/testing");
11
+ const config_1 = require("@nestjs/config");
12
+ const common_1 = require("@nestjs/common");
13
+ const module_1 = require("./module");
14
+ const token_1 = require("./token");
15
+ exports.MY_LOGGER_TOKEN = Symbol("LOGGER");
16
+ let MockLoggerService = class MockLoggerService {
17
+ log(message) {
18
+ console.log("[MockLogger] LOG:", message);
19
+ }
20
+ error(message) {
21
+ console.error("[MockLogger] ERROR:", message);
22
+ }
23
+ warn(message) {
24
+ console.warn("[MockLogger] WARN:", message);
25
+ }
26
+ debug(message) {
27
+ console.debug("[MockLogger] DEBUG:", message);
28
+ }
29
+ verbose(message) {
30
+ console.log("[MockLogger] VERBOSE:", message);
31
+ }
32
+ };
33
+ MockLoggerService = __decorate([
34
+ (0, common_1.Injectable)()
35
+ ], MockLoggerService);
36
+ let MockLoggerModule = class MockLoggerModule {
37
+ };
38
+ MockLoggerModule = __decorate([
39
+ (0, common_1.Global)(),
40
+ (0, common_1.Module)({
41
+ providers: [
42
+ {
43
+ provide: exports.MY_LOGGER_TOKEN,
44
+ useClass: MockLoggerService,
45
+ },
46
+ ],
47
+ exports: [exports.MY_LOGGER_TOKEN],
48
+ })
49
+ ], MockLoggerModule);
50
+ async function runTest() {
51
+ console.log("--- Starting Local Test for @point3/logto-module ---");
52
+ process.env.LOGTO_AUTH_ISSUER = "https://auth.example.com/oidc";
53
+ process.env.LOGTO_JWKS_URI = "https://auth.example.com/oidc/jwks";
54
+ try {
55
+ const moduleRef = await testing_1.Test.createTestingModule({
56
+ imports: [
57
+ config_1.ConfigModule.forRoot({
58
+ isGlobal: true,
59
+ ignoreEnvFile: true,
60
+ }),
61
+ module_1.LogtoModule.forRoot({
62
+ global: true,
63
+ logger: {
64
+ module: MockLoggerModule,
65
+ token: exports.MY_LOGGER_TOKEN,
66
+ },
67
+ }),
68
+ ],
69
+ }).compile();
70
+ const verifier = moduleRef.get(token_1.LogtoTokenVerifierToken);
71
+ if (verifier) {
72
+ console.log("✅ LogtoModule initialized successfully!");
73
+ console.log("✅ LogtoTokenVerifierToken resolved correctly.");
74
+ }
75
+ else {
76
+ console.error("❌ LogtoTokenVerifierToken could NOT be resolved.");
77
+ process.exit(1);
78
+ }
79
+ console.log("--- Test Completed Successfully ---");
80
+ }
81
+ catch (error) {
82
+ console.error("❌ Error during module initialization:", error);
83
+ process.exit(1);
84
+ }
85
+ }
86
+ runTest();
87
+ //# sourceMappingURL=local-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-test.js","sourceRoot":"","sources":["../local-test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,6CAAsD;AACtD,2CAA8C;AAC9C,2CAA4D;AAC5D,qCAAuC;AACvC,mCAAkD;AAGrC,QAAA,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAGhD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACrB,GAAG,CAAC,OAAY;QACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,CAAC,OAAY;QAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,OAAY;QACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,OAAY;QAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,OAAY;QAClB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AAhBK,iBAAiB;IADtB,IAAA,mBAAU,GAAE;GACP,iBAAiB,CAgBtB;AAYD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,gBAAgB;IAVrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,uBAAe;gBACxB,QAAQ,EAAE,iBAAiB;aAC5B;SACF;QACD,OAAO,EAAE,CAAC,uBAAe,CAAC;KAC3B,CAAC;GACI,gBAAgB,CAAG;AAEzB,KAAK,UAAU,OAAO;IACpB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IAKpE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,+BAA+B,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,oCAAoC,CAAC;IAElE,IAAI,CAAC;QAEH,MAAM,SAAS,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC9D,OAAO,EAAE;gBAEP,qBAAY,CAAC,OAAO,CAAC;oBACnB,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,IAAI;iBACpB,CAAC;gBACF,oBAAW,CAAC,OAAO,CAAC;oBAClB,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE;wBACN,MAAM,EAAE,gBAAgB;wBACxB,KAAK,EAAE,uBAAe;qBACvB;iBACF,CAAC;aACH;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAGb,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,+BAAuB,CAAC,CAAC;QAExD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import { CanActivate, ExecutionContext } from '@nestjs/common';
2
2
  import { LogtoTokenVerifier } from '../token';
3
+ import { ConfigService } from '@nestjs/config';
3
4
  export declare const LogtoTokenGuardToken: unique symbol;
4
5
  export declare class LogtoTokenGuard implements CanActivate {
5
6
  private tokenVerifier;
7
+ private configService;
6
8
  private reflector;
7
- constructor(tokenVerifier: LogtoTokenVerifier);
9
+ constructor(tokenVerifier: LogtoTokenVerifier, configService: ConfigService);
8
10
  canActivate(context: ExecutionContext): Promise<boolean>;
9
11
  private extractBearerTokenFrom;
12
+ private getRequest;
10
13
  }
@@ -14,20 +14,26 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.LogtoTokenGuard = exports.LogtoTokenGuardToken = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
+ const graphql_1 = require("@nestjs/graphql");
17
18
  const core_1 = require("@nestjs/core");
18
19
  const jose_1 = require("jose");
19
20
  const point3_common_tool_1 = require("point3-common-tool");
20
21
  const token_1 = require("../token");
22
+ const config_1 = require("@nestjs/config");
21
23
  exports.LogtoTokenGuardToken = Symbol('LogtoTokenGuard');
22
24
  let LogtoTokenGuard = class LogtoTokenGuard {
23
- constructor(tokenVerifier) {
25
+ constructor(tokenVerifier, configService) {
24
26
  this.tokenVerifier = tokenVerifier;
27
+ this.configService = configService;
25
28
  this.reflector = new core_1.Reflector();
26
29
  }
27
30
  async canActivate(context) {
31
+ if (this.configService.get('NODE_ENV') === 'local') {
32
+ return true;
33
+ }
28
34
  const requiredScopes = this.reflector.get('requiredScopes', context.getHandler());
29
35
  const requiredRoles = this.reflector.get('requiredRoles', context.getHandler());
30
- const request = context.switchToHttp().getRequest();
36
+ const request = this.getRequest(context);
31
37
  try {
32
38
  const bearerToken = this.extractBearerTokenFrom(request.headers);
33
39
  const result = await this.tokenVerifier.verifyToken(bearerToken, requiredScopes, requiredRoles);
@@ -59,11 +65,19 @@ let LogtoTokenGuard = class LogtoTokenGuard {
59
65
  return headers.authorization.slice(bearerTokenIdentifier.length + 1);
60
66
  }
61
67
  ;
68
+ getRequest(context) {
69
+ if (context.getType() === 'graphql') {
70
+ const gqlCtx = graphql_1.GqlExecutionContext.create(context);
71
+ return gqlCtx.getContext().req;
72
+ }
73
+ return context.switchToHttp().getRequest();
74
+ }
62
75
  };
63
76
  exports.LogtoTokenGuard = LogtoTokenGuard;
64
77
  exports.LogtoTokenGuard = LogtoTokenGuard = __decorate([
65
78
  (0, common_1.Injectable)(),
66
79
  __param(0, (0, common_1.Inject)(token_1.LogtoTokenVerifierToken)),
67
- __metadata("design:paramtypes", [token_1.LogtoTokenVerifier])
80
+ __metadata("design:paramtypes", [token_1.LogtoTokenVerifier,
81
+ config_1.ConfigService])
68
82
  ], LogtoTokenGuard);
69
83
  //# sourceMappingURL=guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../stateless/guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,uCAAyC;AAGzC,+BAA8B;AAE9B,2DAA8C;AAC9C,oCAAuE;AAE1D,QAAA,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAGvD,IAAM,eAAe,GAArB,MAAM,eAAe;IAE1B,YAKE,aAAyC;QAAjC,kBAAa,GAAb,aAAa,CAAoB;QANnC,cAAS,GAAc,IAAI,gBAAS,EAAE,CAAC;IAO3C,CAAC;IAEL,KAAK,CAAC,WAAW,CAAC,OAAyB;QAEzC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,gBAAgB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5F,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,eAAe,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAE1F,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAGpD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;YAGhG,OAAO,CAAC,IAAI,GAAG;gBACb,MAAM,EAAE,MAAM,CAAC,GAAG;gBAClB,SAAS,EAAE,6BAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;gBAChD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7E,CAAA;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,8BAAqB;gBAAE,MAAM,KAAK,CAAC;YACxD,IAAI,KAAK,YAAY,aAAM,CAAC,SAAS;gBAAE,MAAM,IAAI,8BAAqB,CAAC,KAAK,CAAC,CAAC;YAC9E,IAAI,KAAK,YAAY,KAAK;gBAAE,MAAM,IAAI,qCAA4B,CAAC,kBAAkB,EAAE,GAAG,mBAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;YAE9H,MAAM,IAAI,8BAAqB,CAAC,gBAAgB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAQO,sBAAsB,CAAC,OAA4B;QACzD,MAAM,qBAAqB,GAAG,QAAQ,CAAC;QAEvC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,8BAAqB,CAAC,iCAAiC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,8BAAqB,CAAC,wCAAwC,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAAA,CAAC;CACH,CAAA;AAzDY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,+BAAuB,CAAC,CAAA;qCACT,0BAAkB;GAPhC,eAAe,CAyD3B"}
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../stateless/guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,6CAAsD;AACtD,uCAAyC;AAGzC,+BAA8B;AAE9B,2DAA8C;AAC9C,oCAAuE;AACvE,2CAA+C;AAElC,QAAA,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAGvD,IAAM,eAAe,GAArB,MAAM,eAAe;IAE1B,YAEE,aAAyC,EAEjC,aAA4B;QAF5B,kBAAa,GAAb,aAAa,CAAoB;QAEjC,kBAAa,GAAb,aAAa,CAAe;QAL9B,cAAS,GAAc,IAAI,gBAAS,EAAE,CAAC;IAM3C,CAAC;IAEL,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,UAAU,CAAC,KAAK,OAAO,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,gBAAgB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5F,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,eAAe,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAE1F,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAGzC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;YAGhG,OAAO,CAAC,IAAI,GAAG;gBACb,MAAM,EAAE,MAAM,CAAC,GAAG;gBAClB,SAAS,EAAE,6BAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;gBAChD,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7E,CAAA;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,8BAAqB;gBAAE,MAAM,KAAK,CAAC;YACxD,IAAI,KAAK,YAAY,aAAM,CAAC,SAAS;gBAAE,MAAM,IAAI,8BAAqB,CAAC,KAAK,CAAC,CAAC;YAC9E,IAAI,KAAK,YAAY,KAAK;gBAAE,MAAM,IAAI,qCAA4B,CAAC,kBAAkB,EAAE,GAAG,mBAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;YAE9H,MAAM,IAAI,8BAAqB,CAAC,gBAAgB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAQO,sBAAsB,CAAC,OAA4B;QACzD,MAAM,qBAAqB,GAAG,QAAQ,CAAC;QAEvC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,8BAAqB,CAAC,iCAAiC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,8BAAqB,CAAC,wCAAwC,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAAA,CAAC;IAEM,UAAU,CAAC,OAAyB;QAE1C,IAAI,OAAO,CAAC,OAAO,EAAsB,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,6BAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnD,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;QACjC,CAAC;QAED,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;CAGF,CAAA;AAzEY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,eAAM,EAAC,+BAAuB,CAAC,CAAA;qCACT,0BAAkB;QAElB,sBAAa;GAN3B,eAAe,CAyE3B"}