@minimaltech/node-infra 0.5.10-20 → 0.5.10-22
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/components/authenticate/common/types.d.ts +33 -0
- package/dist/components/authenticate/common/types.d.ts.map +1 -1
- package/dist/components/authenticate/common/types.js +5 -0
- package/dist/components/authenticate/common/types.js.map +1 -1
- package/dist/components/authenticate/controllers/oauth2.controller.d.ts +41 -0
- package/dist/components/authenticate/controllers/oauth2.controller.d.ts.map +1 -1
- package/dist/components/authenticate/controllers/oauth2.controller.js +25 -3
- package/dist/components/authenticate/controllers/oauth2.controller.js.map +1 -1
- package/dist/components/authenticate/models/oauth2-scope.model.d.ts +6 -2
- package/dist/components/authenticate/models/oauth2-scope.model.d.ts.map +1 -1
- package/dist/components/authenticate/models/oauth2-scope.model.js +47 -0
- package/dist/components/authenticate/models/oauth2-scope.model.js.map +1 -1
- package/dist/components/authenticate/oauth2-handlers/authorization-code.handler.d.ts.map +1 -1
- package/dist/components/authenticate/oauth2-handlers/authorization-code.handler.js +20 -13
- package/dist/components/authenticate/oauth2-handlers/authorization-code.handler.js.map +1 -1
- package/dist/components/authenticate/oauth2-handlers/base.d.ts +22 -5
- package/dist/components/authenticate/oauth2-handlers/base.d.ts.map +1 -1
- package/dist/components/authenticate/oauth2-handlers/base.js +103 -28
- package/dist/components/authenticate/oauth2-handlers/base.js.map +1 -1
- package/dist/components/authenticate/oauth2-handlers/config/index.d.ts +2 -0
- package/dist/components/authenticate/oauth2-handlers/config/index.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/config/index.js +18 -0
- package/dist/components/authenticate/oauth2-handlers/config/index.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/config/scope-config-validator.d.ts +46 -0
- package/dist/components/authenticate/oauth2-handlers/config/scope-config-validator.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/config/scope-config-validator.js +199 -0
- package/dist/components/authenticate/oauth2-handlers/config/scope-config-validator.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/constants/index.d.ts +2 -0
- package/dist/components/authenticate/oauth2-handlers/constants/index.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/constants/index.js +18 -0
- package/dist/components/authenticate/oauth2-handlers/constants/index.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/constants/scope-constants.d.ts +79 -0
- package/dist/components/authenticate/oauth2-handlers/constants/scope-constants.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/constants/scope-constants.js +117 -0
- package/dist/components/authenticate/oauth2-handlers/constants/scope-constants.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/data/index.d.ts +2 -0
- package/dist/components/authenticate/oauth2-handlers/data/index.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/data/index.js +18 -0
- package/dist/components/authenticate/oauth2-handlers/data/index.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/data/user-data-fetcher.d.ts +99 -0
- package/dist/components/authenticate/oauth2-handlers/data/user-data-fetcher.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/data/user-data-fetcher.js +371 -0
- package/dist/components/authenticate/oauth2-handlers/data/user-data-fetcher.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/index.d.ts +4 -0
- package/dist/components/authenticate/oauth2-handlers/index.d.ts.map +1 -1
- package/dist/components/authenticate/oauth2-handlers/index.js +4 -0
- package/dist/components/authenticate/oauth2-handlers/index.js.map +1 -1
- package/dist/components/authenticate/oauth2-handlers/scope/index.d.ts +4 -0
- package/dist/components/authenticate/oauth2-handlers/scope/index.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/scope/index.js +20 -0
- package/dist/components/authenticate/oauth2-handlers/scope/index.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-manager.d.ts +64 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-manager.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-manager.js +100 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-manager.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-parser.d.ts +49 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-parser.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-parser.js +89 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-parser.js.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-validator.d.ts +58 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-validator.d.ts.map +1 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-validator.js +165 -0
- package/dist/components/authenticate/oauth2-handlers/scope/scope-validator.js.map +1 -0
- package/dist/components/authenticate/services/index.d.ts +1 -0
- package/dist/components/authenticate/services/index.d.ts.map +1 -1
- package/dist/components/authenticate/services/index.js +1 -0
- package/dist/components/authenticate/services/index.js.map +1 -1
- package/dist/components/authenticate/services/oauth2-scope.service.d.ts +22 -0
- package/dist/components/authenticate/services/oauth2-scope.service.d.ts.map +1 -0
- package/dist/components/authenticate/services/oauth2-scope.service.js +63 -0
- package/dist/components/authenticate/services/oauth2-scope.service.js.map +1 -0
- package/dist/components/authenticate/services/oauth2.service.d.ts +2 -0
- package/dist/components/authenticate/services/oauth2.service.d.ts.map +1 -1
- package/dist/components/authenticate/services/oauth2.service.js +8 -3
- package/dist/components/authenticate/services/oauth2.service.js.map +1 -1
- package/dist/components/authenticate/views/pages/auth.ejs +6 -2
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/mail/common/constants.d.ts +26 -0
- package/dist/components/mail/common/constants.d.ts.map +1 -0
- package/dist/components/mail/common/constants.js +37 -0
- package/dist/components/mail/common/constants.js.map +1 -0
- package/dist/components/mail/common/index.d.ts +4 -0
- package/dist/components/mail/common/index.d.ts.map +1 -0
- package/dist/components/mail/common/index.js +20 -0
- package/dist/components/mail/common/index.js.map +1 -0
- package/dist/components/mail/common/keys.d.ts +17 -0
- package/dist/components/mail/common/keys.d.ts.map +1 -0
- package/dist/components/mail/common/keys.js +24 -0
- package/dist/components/mail/common/keys.js.map +1 -0
- package/dist/components/mail/common/types.d.ts +168 -0
- package/dist/components/mail/common/types.d.ts.map +1 -0
- package/dist/components/mail/common/types.js +10 -0
- package/dist/components/mail/common/types.js.map +1 -0
- package/dist/components/mail/component.d.ts +12 -0
- package/dist/components/mail/component.d.ts.map +1 -0
- package/dist/components/mail/component.js +90 -0
- package/dist/components/mail/component.js.map +1 -0
- package/dist/components/mail/controllers/index.d.ts +2 -0
- package/dist/components/mail/controllers/index.d.ts.map +1 -0
- package/dist/components/mail/controllers/index.js +18 -0
- package/dist/components/mail/controllers/index.js.map +1 -0
- package/dist/components/mail/controllers/mail.controller.d.ts +24 -0
- package/dist/components/mail/controllers/mail.controller.d.ts.map +1 -0
- package/dist/components/mail/controllers/mail.controller.js +330 -0
- package/dist/components/mail/controllers/mail.controller.js.map +1 -0
- package/dist/components/mail/helpers/executors/bullmq-executor.helper.d.ts +48 -0
- package/dist/components/mail/helpers/executors/bullmq-executor.helper.d.ts.map +1 -0
- package/dist/components/mail/helpers/executors/bullmq-executor.helper.js +159 -0
- package/dist/components/mail/helpers/executors/bullmq-executor.helper.js.map +1 -0
- package/dist/components/mail/helpers/executors/direct-executor.helper.d.ts +14 -0
- package/dist/components/mail/helpers/executors/direct-executor.helper.d.ts.map +1 -0
- package/dist/components/mail/helpers/executors/direct-executor.helper.js +27 -0
- package/dist/components/mail/helpers/executors/direct-executor.helper.js.map +1 -0
- package/dist/components/mail/helpers/executors/index.d.ts +4 -0
- package/dist/components/mail/helpers/executors/index.d.ts.map +1 -0
- package/dist/components/mail/helpers/executors/index.js +20 -0
- package/dist/components/mail/helpers/executors/index.js.map +1 -0
- package/dist/components/mail/helpers/executors/internal-queue-executor.helper.d.ts +22 -0
- package/dist/components/mail/helpers/executors/internal-queue-executor.helper.d.ts.map +1 -0
- package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js +103 -0
- package/dist/components/mail/helpers/executors/internal-queue-executor.helper.js.map +1 -0
- package/dist/components/mail/helpers/index.d.ts +3 -0
- package/dist/components/mail/helpers/index.d.ts.map +1 -0
- package/dist/components/mail/helpers/index.js +19 -0
- package/dist/components/mail/helpers/index.js.map +1 -0
- package/dist/components/mail/helpers/transports/index.d.ts +3 -0
- package/dist/components/mail/helpers/transports/index.d.ts.map +1 -0
- package/dist/components/mail/helpers/transports/index.js +19 -0
- package/dist/components/mail/helpers/transports/index.js.map +1 -0
- package/dist/components/mail/helpers/transports/mailgun-transport.helper.d.ts +11 -0
- package/dist/components/mail/helpers/transports/mailgun-transport.helper.d.ts.map +1 -0
- package/dist/components/mail/helpers/transports/mailgun-transport.helper.js +88 -0
- package/dist/components/mail/helpers/transports/mailgun-transport.helper.js.map +1 -0
- package/dist/components/mail/helpers/transports/nodemailer-transport.helper.d.ts +11 -0
- package/dist/components/mail/helpers/transports/nodemailer-transport.helper.d.ts.map +1 -0
- package/dist/components/mail/helpers/transports/nodemailer-transport.helper.js +67 -0
- package/dist/components/mail/helpers/transports/nodemailer-transport.helper.js.map +1 -0
- package/dist/components/mail/index.d.ts +8 -0
- package/dist/components/mail/index.d.ts.map +1 -0
- package/dist/components/mail/index.js +24 -0
- package/dist/components/mail/index.js.map +1 -0
- package/dist/components/mail/providers/index.d.ts +3 -0
- package/dist/components/mail/providers/index.d.ts.map +1 -0
- package/dist/components/mail/providers/index.js +19 -0
- package/dist/components/mail/providers/index.js.map +1 -0
- package/dist/components/mail/providers/mail-queue-executor.provider.d.ts +9 -0
- package/dist/components/mail/providers/mail-queue-executor.provider.d.ts.map +1 -0
- package/dist/components/mail/providers/mail-queue-executor.provider.js +41 -0
- package/dist/components/mail/providers/mail-queue-executor.provider.js.map +1 -0
- package/dist/components/mail/providers/mail-transport.provider.d.ts +15 -0
- package/dist/components/mail/providers/mail-transport.provider.d.ts.map +1 -0
- package/dist/components/mail/providers/mail-transport.provider.js +93 -0
- package/dist/components/mail/providers/mail-transport.provider.js.map +1 -0
- package/dist/components/mail/services/generator.service.d.ts +14 -0
- package/dist/components/mail/services/generator.service.d.ts.map +1 -0
- package/dist/components/mail/services/generator.service.js +70 -0
- package/dist/components/mail/services/generator.service.js.map +1 -0
- package/dist/components/mail/services/index.d.ts +4 -0
- package/dist/components/mail/services/index.d.ts.map +1 -0
- package/dist/components/mail/services/index.js +20 -0
- package/dist/components/mail/services/index.js.map +1 -0
- package/dist/components/mail/services/mail.service.d.ts +23 -0
- package/dist/components/mail/services/mail.service.d.ts.map +1 -0
- package/dist/components/mail/services/mail.service.js +178 -0
- package/dist/components/mail/services/mail.service.js.map +1 -0
- package/dist/components/mail/services/template-engine.service.d.ts +36 -0
- package/dist/components/mail/services/template-engine.service.d.ts.map +1 -0
- package/dist/components/mail/services/template-engine.service.js +126 -0
- package/dist/components/mail/services/template-engine.service.js.map +1 -0
- package/dist/components/mail/utilities/index.d.ts +3 -0
- package/dist/components/mail/utilities/index.d.ts.map +1 -0
- package/dist/components/mail/utilities/index.js +19 -0
- package/dist/components/mail/utilities/index.js.map +1 -0
- package/dist/components/mail/utilities/type.utility.d.ts +5 -0
- package/dist/components/mail/utilities/type.utility.d.ts.map +1 -0
- package/dist/components/mail/utilities/type.utility.js +34 -0
- package/dist/components/mail/utilities/type.utility.js.map +1 -0
- package/dist/components/mail/utilities/verification.utility.d.ts +3 -0
- package/dist/components/mail/utilities/verification.utility.d.ts.map +1 -0
- package/dist/components/mail/utilities/verification.utility.js +11 -0
- package/dist/components/mail/utilities/verification.utility.js.map +1 -0
- package/dist/utilities/index.d.ts +1 -0
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/index.js +1 -0
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/module.utility.d.ts +5 -0
- package/dist/utilities/module.utility.d.ts.map +1 -0
- package/dist/utilities/module.utility.js +21 -0
- package/dist/utilities/module.utility.js.map +1 -0
- package/package.json +14 -1
|
@@ -10,17 +10,74 @@ const utilities_1 = require("../../../utilities");
|
|
|
10
10
|
const security_1 = require("@loopback/security");
|
|
11
11
|
const get_1 = __importDefault(require("lodash/get"));
|
|
12
12
|
const common_2 = require("../common");
|
|
13
|
+
const services_1 = require("../services");
|
|
14
|
+
const data_1 = require("./data");
|
|
15
|
+
const scope_1 = require("./scope");
|
|
13
16
|
class AbstractOAuth2AuthenticationHandler {
|
|
14
17
|
constructor(opts) {
|
|
18
|
+
this.scopeManager = null;
|
|
19
|
+
this.userDataFetcher = null;
|
|
20
|
+
this.initPromise = null;
|
|
15
21
|
this.logger = helpers_1.LoggerFactory.getLogger([
|
|
16
22
|
opts?.scope ?? AbstractOAuth2AuthenticationHandler.name,
|
|
17
23
|
]);
|
|
18
24
|
this.injectionGetter = opts.injectionGetter;
|
|
19
25
|
this.authServiceKey = opts.authServiceKey;
|
|
26
|
+
// Initialize scope service
|
|
27
|
+
this.scopeService = new services_1.OAuth2ScopeService({
|
|
28
|
+
options: { injectionGetter: this.injectionGetter },
|
|
29
|
+
scope: `${this.constructor.name}:OAuth2ScopeService`,
|
|
30
|
+
});
|
|
31
|
+
// Start async initialization but don't wait
|
|
32
|
+
this.initPromise = this.initializeServices();
|
|
33
|
+
}
|
|
34
|
+
async initializeServices() {
|
|
35
|
+
try {
|
|
36
|
+
const oauth2Options = this.injectionGetter(common_2.AuthenticateKeys.OAUTH2_OPTIONS);
|
|
37
|
+
// Try to load scopes from database first
|
|
38
|
+
let availableScopes = await this.scopeService.loadScopes(true);
|
|
39
|
+
// Fallback to config if database is empty
|
|
40
|
+
if (availableScopes.length === 0) {
|
|
41
|
+
this.logger.warn('[initializeServices] No scopes found in database, falling back to config');
|
|
42
|
+
availableScopes = oauth2Options?.restOptions?.availableScopes ?? [];
|
|
43
|
+
}
|
|
44
|
+
const defaultScopes = oauth2Options?.restOptions?.defaultScopes ?? [];
|
|
45
|
+
// Initialize scope manager
|
|
46
|
+
this.scopeManager = new scope_1.ScopeManager({
|
|
47
|
+
availableScopes,
|
|
48
|
+
defaultScopes,
|
|
49
|
+
scope: `${this.constructor.name}:ScopeManager`,
|
|
50
|
+
});
|
|
51
|
+
// Initialize user data fetcher
|
|
52
|
+
this.userDataFetcher = new data_1.UserDataFetcher({
|
|
53
|
+
options: {
|
|
54
|
+
injectionGetter: this.injectionGetter,
|
|
55
|
+
scopeManager: this.scopeManager,
|
|
56
|
+
},
|
|
57
|
+
scope: `${this.constructor.name}:UserDataFetcher`,
|
|
58
|
+
});
|
|
59
|
+
this.logger.info('[initializeServices] Services initialized successfully');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
this.logger.error('[initializeServices] Failed to initialize services: %s', (0, utilities_1.getError)(error).message);
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Ensure services are initialized before use
|
|
68
|
+
* Should be called at the start of async methods
|
|
69
|
+
*/
|
|
70
|
+
async ensureInitialized() {
|
|
71
|
+
if (this.initPromise) {
|
|
72
|
+
await this.initPromise;
|
|
73
|
+
}
|
|
74
|
+
if (!this.scopeManager || !this.userDataFetcher) {
|
|
75
|
+
throw (0, utilities_1.getError)({ message: 'OAuth2 services not initialized' });
|
|
76
|
+
}
|
|
20
77
|
}
|
|
21
78
|
getClient(clientId, clientSecret) {
|
|
22
79
|
return new Promise((resolve, reject) => {
|
|
23
|
-
this.logger.debug('[getClient]
|
|
80
|
+
this.logger.debug('[getClient] Retrieving application client | client_id: %s', clientId);
|
|
24
81
|
const clientRepository = this.injectionGetter('repositories.OAuth2ClientRepository');
|
|
25
82
|
clientRepository
|
|
26
83
|
.findOne({
|
|
@@ -60,7 +117,7 @@ class AbstractOAuth2AuthenticationHandler {
|
|
|
60
117
|
.catch(reject);
|
|
61
118
|
});
|
|
62
119
|
}
|
|
63
|
-
async generateAccessToken(client, user,
|
|
120
|
+
async generateAccessToken(client, user, _scope) {
|
|
64
121
|
const service = this.injectionGetter('services.JWTTokenService');
|
|
65
122
|
const userId = (0, get_1.default)(user, 'id');
|
|
66
123
|
if (!userId) {
|
|
@@ -77,13 +134,12 @@ class AbstractOAuth2AuthenticationHandler {
|
|
|
77
134
|
roles: userInformation?.roles ?? [],
|
|
78
135
|
provider: client.provider,
|
|
79
136
|
clientId: client.id,
|
|
80
|
-
scopes,
|
|
81
137
|
},
|
|
82
138
|
});
|
|
83
139
|
return Promise.resolve(tokenValue);
|
|
84
140
|
}
|
|
85
141
|
_saveToken(opts) {
|
|
86
|
-
const { type, token, client, user, details } = opts;
|
|
142
|
+
const { type, token, client, user, details, scopes } = opts;
|
|
87
143
|
const oauth2TokenRepository = this.injectionGetter('repositories.OAuth2TokenRepository');
|
|
88
144
|
return oauth2TokenRepository.create({
|
|
89
145
|
token,
|
|
@@ -91,26 +147,26 @@ class AbstractOAuth2AuthenticationHandler {
|
|
|
91
147
|
status: common_1.OAuth2TokenStatuses.ACTIVATED,
|
|
92
148
|
clientId: (0, utilities_1.int)(client.id),
|
|
93
149
|
userId: (0, utilities_1.int)(user.id),
|
|
150
|
+
scopes: scopes ?? [],
|
|
94
151
|
details,
|
|
95
152
|
});
|
|
96
153
|
}
|
|
97
|
-
saveToken(token, client, user) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
resolve({ ...token, client, user });
|
|
108
|
-
})
|
|
109
|
-
.catch(reject);
|
|
154
|
+
async saveToken(token, client, user) {
|
|
155
|
+
await this.ensureInitialized();
|
|
156
|
+
const scopes = this.scopeManager.normalizeScopes(token.scope);
|
|
157
|
+
await this._saveToken({
|
|
158
|
+
token: token.accessToken,
|
|
159
|
+
type: common_2.AuthenticationTokenTypes.TYPE_ACCESS_TOKEN,
|
|
160
|
+
client,
|
|
161
|
+
user,
|
|
162
|
+
scopes,
|
|
163
|
+
details: token,
|
|
110
164
|
});
|
|
165
|
+
return { ...token, client, user };
|
|
111
166
|
}
|
|
112
167
|
async _getToken(opts) {
|
|
113
168
|
const { type, token } = opts;
|
|
169
|
+
await this.ensureInitialized();
|
|
114
170
|
const oauth2TokenRepository = this.injectionGetter('repositories.OAuth2TokenRepository');
|
|
115
171
|
const oauth2Token = await oauth2TokenRepository.findOne({
|
|
116
172
|
where: { type, token },
|
|
@@ -127,12 +183,11 @@ class AbstractOAuth2AuthenticationHandler {
|
|
|
127
183
|
message: `[_getToken] Invalid OAuth2Token status: ${oauth2Token.status}`,
|
|
128
184
|
});
|
|
129
185
|
}
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (!user) {
|
|
186
|
+
// Fetch user data using UserDataFetcher
|
|
187
|
+
const userId = (0, utilities_1.int)(oauth2Token.userId);
|
|
188
|
+
const grantedScopes = oauth2Token.scopes ?? [];
|
|
189
|
+
const user = await this.userDataFetcher.fetchByScopes({ userId, grantedScopes });
|
|
190
|
+
if (!user?.id) {
|
|
136
191
|
this.logger.error('[_getToken] Not found User | type: %s | token: %s | oauth2Token: %j', type, token, oauth2Token);
|
|
137
192
|
throw (0, utilities_1.getError)({
|
|
138
193
|
message: `[_getToken] Not found any User with type: ${type} | token: ${token}`,
|
|
@@ -187,11 +242,31 @@ class AbstractOAuth2AuthenticationHandler {
|
|
|
187
242
|
user: { id: tokenPayload.userId },
|
|
188
243
|
};
|
|
189
244
|
}
|
|
190
|
-
verifyScope(token,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
245
|
+
async verifyScope(token, requiredScopes) {
|
|
246
|
+
await this.ensureInitialized();
|
|
247
|
+
this.logger.info('[verifyScope] Token: %j | Required scopes: %s', token, requiredScopes ?? []);
|
|
248
|
+
if (!token) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
// If no scopes required, allow access
|
|
252
|
+
if (!requiredScopes || requiredScopes.length === 0) {
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
const tokenScopes = this.scopeManager.normalizeScopes(token.scope);
|
|
256
|
+
// Check if token has all required scopes
|
|
257
|
+
const hasAllScopes = requiredScopes.every(scope => tokenScopes.includes(scope));
|
|
258
|
+
this.logger.info('[verifyScope] Token scopes: %s | Has all required scopes: %s', tokenScopes.join(', '), hasAllScopes);
|
|
259
|
+
return hasAllScopes;
|
|
260
|
+
}
|
|
261
|
+
async validateScopes(requestedScopes) {
|
|
262
|
+
await this.ensureInitialized();
|
|
263
|
+
return this.scopeManager.validateScopes(requestedScopes ?? []);
|
|
264
|
+
}
|
|
265
|
+
getScopeManager() {
|
|
266
|
+
return this.scopeManager;
|
|
267
|
+
}
|
|
268
|
+
getUserDataFetcher() {
|
|
269
|
+
return this.userDataFetcher;
|
|
195
270
|
}
|
|
196
271
|
}
|
|
197
272
|
exports.AbstractOAuth2AuthenticationHandler = AbstractOAuth2AuthenticationHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/components/authenticate/oauth2-handlers/base.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/components/authenticate/oauth2-handlers/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/authenticate/oauth2-handlers/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./scope-config-validator"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/authenticate/oauth2-handlers/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { IAuthenticateOAuth2Options } from '../../common';
|
|
2
|
+
export interface IScopeConfigValidationError {
|
|
3
|
+
field: string;
|
|
4
|
+
message: string;
|
|
5
|
+
scopeIdentifier?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface IScopeConfigValidationResult {
|
|
8
|
+
valid: boolean;
|
|
9
|
+
errors: IScopeConfigValidationError[];
|
|
10
|
+
warnings: string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* ScopeConfigValidator validates OAuth2 scope configuration at startup
|
|
14
|
+
* Ensures configuration is well-formed and consistent
|
|
15
|
+
*/
|
|
16
|
+
export declare class ScopeConfigValidator {
|
|
17
|
+
private logger;
|
|
18
|
+
constructor(opts: {
|
|
19
|
+
scope?: string;
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Validate OAuth2 configuration
|
|
23
|
+
* @param config - OAuth2 options configuration
|
|
24
|
+
* @returns Validation result with errors and warnings
|
|
25
|
+
*/
|
|
26
|
+
validate(config: IAuthenticateOAuth2Options): IScopeConfigValidationResult;
|
|
27
|
+
/**
|
|
28
|
+
* Validate available scopes configuration
|
|
29
|
+
*/
|
|
30
|
+
private validateAvailableScopes;
|
|
31
|
+
/**
|
|
32
|
+
* Validate relations in a scope definition
|
|
33
|
+
*/
|
|
34
|
+
private validateRelations;
|
|
35
|
+
/**
|
|
36
|
+
* Validate default scopes
|
|
37
|
+
*/
|
|
38
|
+
private validateDefaultScopes;
|
|
39
|
+
/**
|
|
40
|
+
* Validate configuration and throw if invalid
|
|
41
|
+
* @param config - OAuth2 configuration
|
|
42
|
+
* @throws Error if configuration is invalid
|
|
43
|
+
*/
|
|
44
|
+
validateOrThrow(config: IAuthenticateOAuth2Options): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=scope-config-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-config-validator.d.ts","sourceRoot":"","sources":["../../../../../src/components/authenticate/oauth2-handlers/config/scope-config-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAoB,MAAM,cAAc,CAAC;AAG5E,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAoB;gBAEtB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAKpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,0BAA0B,GAAG,4BAA4B;IA8D1E;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqD/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmE7B;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI;CAQ1D"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScopeConfigValidator = void 0;
|
|
4
|
+
const helpers_1 = require("../../../../helpers");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
/**
|
|
7
|
+
* ScopeConfigValidator validates OAuth2 scope configuration at startup
|
|
8
|
+
* Ensures configuration is well-formed and consistent
|
|
9
|
+
*/
|
|
10
|
+
class ScopeConfigValidator {
|
|
11
|
+
constructor(opts) {
|
|
12
|
+
const { scope } = opts;
|
|
13
|
+
this.logger = helpers_1.LoggerFactory.getLogger([scope ?? ScopeConfigValidator.name]);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validate OAuth2 configuration
|
|
17
|
+
* @param config - OAuth2 options configuration
|
|
18
|
+
* @returns Validation result with errors and warnings
|
|
19
|
+
*/
|
|
20
|
+
validate(config) {
|
|
21
|
+
const errors = [];
|
|
22
|
+
const warnings = [];
|
|
23
|
+
if (!config.enable) {
|
|
24
|
+
this.logger.info('[validate] OAuth2 is disabled, skipping validation');
|
|
25
|
+
return { valid: true, errors: [], warnings: [] };
|
|
26
|
+
}
|
|
27
|
+
const restOptions = config.restOptions;
|
|
28
|
+
if (!restOptions) {
|
|
29
|
+
warnings.push('No restOptions configured for OAuth2');
|
|
30
|
+
return { valid: true, errors, warnings };
|
|
31
|
+
}
|
|
32
|
+
// Validate available scopes
|
|
33
|
+
if (restOptions.availableScopes) {
|
|
34
|
+
this.validateAvailableScopes(restOptions.availableScopes, errors, warnings);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
warnings.push('No availableScopes configured - all scopes will be allowed (backward compatibility mode)');
|
|
38
|
+
}
|
|
39
|
+
// Validate default scopes
|
|
40
|
+
if (restOptions.defaultScopes) {
|
|
41
|
+
this.validateDefaultScopes(restOptions.defaultScopes, restOptions.availableScopes, errors, warnings);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
warnings.push('No defaultScopes configured - empty scopes will result in no data access');
|
|
45
|
+
}
|
|
46
|
+
const isValid = errors.length === 0;
|
|
47
|
+
if (isValid) {
|
|
48
|
+
this.logger.info('[validate] Configuration valid | Warnings: %d | Available scopes: %d | Default scopes: %s', warnings.length, restOptions.availableScopes?.length ?? 0, restOptions.defaultScopes?.join(', ') ?? 'none');
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.logger.error('[validate] Configuration invalid | Errors: %d', errors.length);
|
|
52
|
+
errors.forEach(error => {
|
|
53
|
+
this.logger.error('[validate] Error: %s - %s', error.field, error.message);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (warnings.length > 0) {
|
|
57
|
+
warnings.forEach(warning => {
|
|
58
|
+
this.logger.warn('[validate] Warning: %s', warning);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return { valid: isValid, errors, warnings };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate available scopes configuration
|
|
65
|
+
*/
|
|
66
|
+
validateAvailableScopes(scopes, errors, warnings) {
|
|
67
|
+
const identifiers = new Set();
|
|
68
|
+
for (const scope of scopes) {
|
|
69
|
+
// Check for duplicate identifiers
|
|
70
|
+
if (identifiers.has(scope.identifier)) {
|
|
71
|
+
errors.push({
|
|
72
|
+
field: 'availableScopes',
|
|
73
|
+
message: `Duplicate scope identifier: ${scope.identifier}`,
|
|
74
|
+
scopeIdentifier: scope.identifier,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
identifiers.add(scope.identifier);
|
|
78
|
+
// Validate identifier format
|
|
79
|
+
if (!scope.identifier || scope.identifier.trim() === '') {
|
|
80
|
+
errors.push({
|
|
81
|
+
field: 'availableScopes',
|
|
82
|
+
message: 'Scope identifier cannot be empty',
|
|
83
|
+
scopeIdentifier: scope.identifier,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// Validate name
|
|
87
|
+
if (!scope.name || scope.name.trim() === '') {
|
|
88
|
+
errors.push({
|
|
89
|
+
field: 'availableScopes',
|
|
90
|
+
message: `Scope name cannot be empty for identifier: ${scope.identifier}`,
|
|
91
|
+
scopeIdentifier: scope.identifier,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// Check if scope has either fields or relations
|
|
95
|
+
if ((!scope.fields || scope.fields.length === 0) &&
|
|
96
|
+
(!scope.relations || scope.relations.length === 0)) {
|
|
97
|
+
warnings.push(`Scope '${scope.identifier}' has no fields or relations - it will not provide any data`);
|
|
98
|
+
}
|
|
99
|
+
// Validate relations
|
|
100
|
+
if (scope.relations) {
|
|
101
|
+
this.validateRelations(scope, errors, warnings);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Validate relations in a scope definition
|
|
107
|
+
*/
|
|
108
|
+
validateRelations(scope, errors, warnings) {
|
|
109
|
+
const relationNames = new Set();
|
|
110
|
+
for (const relation of scope.relations) {
|
|
111
|
+
// Check for duplicate relation names
|
|
112
|
+
if (relationNames.has(relation.relation)) {
|
|
113
|
+
errors.push({
|
|
114
|
+
field: 'availableScopes.relations',
|
|
115
|
+
message: `Duplicate relation name '${relation.relation}' in scope: ${scope.identifier}`,
|
|
116
|
+
scopeIdentifier: scope.identifier,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
relationNames.add(relation.relation);
|
|
120
|
+
// Validate relation name
|
|
121
|
+
if (!relation.relation || relation.relation.trim() === '') {
|
|
122
|
+
errors.push({
|
|
123
|
+
field: 'availableScopes.relations',
|
|
124
|
+
message: `Relation name cannot be empty in scope: ${scope.identifier}`,
|
|
125
|
+
scopeIdentifier: scope.identifier,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// Warn if relation has no fields
|
|
129
|
+
if (!relation.fields || relation.fields.length === 0) {
|
|
130
|
+
warnings.push(`Relation '${relation.relation}' in scope '${scope.identifier}' has no fields specified`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Validate default scopes
|
|
136
|
+
*/
|
|
137
|
+
validateDefaultScopes(defaultScopes, availableScopes, errors, warnings) {
|
|
138
|
+
if (defaultScopes.length === 0) {
|
|
139
|
+
warnings.push('Default scopes array is empty');
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// If no available scopes, can't validate default scopes
|
|
143
|
+
if (!availableScopes || availableScopes.length === 0) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Check if default scopes are valid hierarchical scopes
|
|
147
|
+
for (const defaultScope of defaultScopes) {
|
|
148
|
+
const parts = defaultScope.split(':');
|
|
149
|
+
if (parts.length < 3) {
|
|
150
|
+
errors.push({
|
|
151
|
+
field: 'defaultScopes',
|
|
152
|
+
message: `Invalid scope format: ${defaultScope} (expected resource:action:path)`,
|
|
153
|
+
});
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const [resource, action, ...path] = parts;
|
|
157
|
+
// Validate resource
|
|
158
|
+
if (resource !== constants_1.OAuth2Resources.USER) {
|
|
159
|
+
errors.push({
|
|
160
|
+
field: 'defaultScopes',
|
|
161
|
+
message: `Unsupported resource in default scope: ${defaultScope} (only 'user' is supported)`,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// Validate action
|
|
165
|
+
if (action !== constants_1.OAuth2Actions.READ) {
|
|
166
|
+
errors.push({
|
|
167
|
+
field: 'defaultScopes',
|
|
168
|
+
message: `Unsupported action in default scope: ${defaultScope} (only 'read' is supported)`,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// Check if path refers to an existing scope identifier
|
|
172
|
+
if (path.length > 0) {
|
|
173
|
+
const [firstPart] = path;
|
|
174
|
+
const isScopeFound = availableScopes.some(s => s.identifier === firstPart);
|
|
175
|
+
if (!isScopeFound && path.length > 1) {
|
|
176
|
+
// Check if it's a valid relation
|
|
177
|
+
const isRelationFound = availableScopes.some(s => s.relations?.some(r => r.relation === firstPart));
|
|
178
|
+
if (!isRelationFound) {
|
|
179
|
+
warnings.push(`Default scope '${defaultScope}' references unknown scope/relation: ${firstPart}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Validate configuration and throw if invalid
|
|
187
|
+
* @param config - OAuth2 configuration
|
|
188
|
+
* @throws Error if configuration is invalid
|
|
189
|
+
*/
|
|
190
|
+
validateOrThrow(config) {
|
|
191
|
+
const result = this.validate(config);
|
|
192
|
+
if (!result.valid) {
|
|
193
|
+
const errorMessages = result.errors.map(e => `${e.field}: ${e.message}`).join('\n');
|
|
194
|
+
throw new Error(`Invalid OAuth2 configuration:\n${errorMessages}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.ScopeConfigValidator = ScopeConfigValidator;
|
|
199
|
+
//# sourceMappingURL=scope-config-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-config-validator.js","sourceRoot":"","sources":["../../../../../src/components/authenticate/oauth2-handlers/config/scope-config-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/authenticate/oauth2-handlers/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./scope-constants"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/authenticate/oauth2-handlers/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export declare const OAuth2Resources: {
|
|
2
|
+
readonly USER: "user";
|
|
3
|
+
};
|
|
4
|
+
export declare const OAuth2Actions: {
|
|
5
|
+
readonly READ: "read";
|
|
6
|
+
};
|
|
7
|
+
export declare class ScopeBuilder {
|
|
8
|
+
private scopes;
|
|
9
|
+
/**
|
|
10
|
+
* Add a scope to the builder
|
|
11
|
+
* @param scope - Scope string (e.g., "user:read:basic")
|
|
12
|
+
* @returns This builder for chaining
|
|
13
|
+
*/
|
|
14
|
+
add(scope: string): this;
|
|
15
|
+
/**
|
|
16
|
+
* Add multiple scopes at once
|
|
17
|
+
* @param scopes - Array of scope strings
|
|
18
|
+
* @returns This builder for chaining
|
|
19
|
+
*/
|
|
20
|
+
addMultiple(scopes: string[]): this;
|
|
21
|
+
/**
|
|
22
|
+
* Build a scope string from resource, action, and path components
|
|
23
|
+
* @param resource - Resource name (e.g., 'user')
|
|
24
|
+
* @param action - Action name (e.g., 'read')
|
|
25
|
+
* @param path - Path components (e.g., ['basic'] or ['profile', 'firstName'])
|
|
26
|
+
* @returns This builder for chaining
|
|
27
|
+
*/
|
|
28
|
+
buildScope(resource: string, action: string, ...path: string[]): this;
|
|
29
|
+
/**
|
|
30
|
+
* Build the final scope string (space-separated)
|
|
31
|
+
* @returns Space-separated scope string
|
|
32
|
+
*/
|
|
33
|
+
build(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Get scopes as array
|
|
36
|
+
* @returns Array of scope strings
|
|
37
|
+
*/
|
|
38
|
+
toArray(): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Clear all scopes
|
|
41
|
+
* @returns This builder for chaining
|
|
42
|
+
*/
|
|
43
|
+
clear(): this;
|
|
44
|
+
/**
|
|
45
|
+
* Get number of scopes
|
|
46
|
+
* @returns Number of scopes
|
|
47
|
+
*/
|
|
48
|
+
count(): number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Helper function to create a new scope builder
|
|
52
|
+
* @returns New ScopeBuilder instance
|
|
53
|
+
*/
|
|
54
|
+
export declare function createScopeBuilder(): ScopeBuilder;
|
|
55
|
+
/**
|
|
56
|
+
* Helper function to build scope string from array
|
|
57
|
+
* @param scopes - Array of scope strings
|
|
58
|
+
* @returns Space-separated scope string
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildScopeString(...scopes: string[]): string;
|
|
61
|
+
/**
|
|
62
|
+
* Helper function to build a single scope string
|
|
63
|
+
* @param resource - Resource name
|
|
64
|
+
* @param action - Action name
|
|
65
|
+
* @param path - Path components
|
|
66
|
+
* @returns Scope string in format "resource:action:path1:path2:..."
|
|
67
|
+
*/
|
|
68
|
+
export declare function buildScope(resource: string, action: string, ...path: string[]): string;
|
|
69
|
+
/**
|
|
70
|
+
* Helper function to parse scope string into components
|
|
71
|
+
* @param scope - Scope string (e.g., "user:read:basic")
|
|
72
|
+
* @returns Object with resource, action, and path components or null if invalid
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseScopeString(scope: string): {
|
|
75
|
+
resource: string;
|
|
76
|
+
action: string;
|
|
77
|
+
path: string[];
|
|
78
|
+
} | null;
|
|
79
|
+
//# sourceMappingURL=scope-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-constants.d.ts","sourceRoot":"","sources":["../../../../../src/components/authenticate/oauth2-handlers/constants/scope-constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;CAElB,CAAC;AAEX,eAAO,MAAM,aAAa;;CAEhB,CAAC;AAEX,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA0B;IAExC;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxB;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAMrE;;;OAGG;IACH,KAAK,IAAI,MAAM;IAIf;;;OAGG;IACH,OAAO,IAAI,MAAM,EAAE;IAInB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,KAAK,IAAI,MAAM;CAGhB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,IAAI,CAOP"}
|