@forestadmin/agent-bff 1.10.0 → 1.12.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/api-key/agent-token.d.ts +6 -0
- package/dist/api-key/agent-token.js +38 -14
- package/dist/auth/auth-mode-middleware.js +6 -2
- package/dist/cors/cors-middleware.d.ts +1 -1
- package/dist/cors/cors-middleware.js +2 -2
- package/dist/http/agent-route-helpers.js +1 -4
- package/dist/oauth/bff-token.d.ts +1 -0
- package/dist/oauth/bff-token.js +2 -1
- package/package.json +1 -1
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import type { ResolvedApiKeyIdentity } from './api-key-client';
|
|
2
|
+
import type { BffAccessTokenPayload } from '../oauth/bff-token';
|
|
2
3
|
export declare const AGENT_TOKEN_EXPIRES_IN = "5m";
|
|
3
4
|
export interface IssueAgentTokenParams {
|
|
4
5
|
identity: ResolvedApiKeyIdentity;
|
|
5
6
|
authSecret: string;
|
|
6
7
|
}
|
|
8
|
+
export interface IssueAgentTokenFromPrincipalParams {
|
|
9
|
+
principal: BffAccessTokenPayload;
|
|
10
|
+
authSecret: string;
|
|
11
|
+
}
|
|
7
12
|
export declare function issueAgentToken({ identity, authSecret }: IssueAgentTokenParams): string;
|
|
13
|
+
export declare function issueAgentTokenFromPrincipal({ principal, authSecret, }: IssueAgentTokenFromPrincipalParams): string;
|
|
8
14
|
//# sourceMappingURL=agent-token.d.ts.map
|
|
@@ -5,30 +5,54 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AGENT_TOKEN_EXPIRES_IN = void 0;
|
|
7
7
|
exports.issueAgentToken = issueAgentToken;
|
|
8
|
+
exports.issueAgentTokenFromPrincipal = issueAgentTokenFromPrincipal;
|
|
8
9
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
10
|
+
const bff_http_error_1 = require("../http/bff-http-error");
|
|
9
11
|
exports.AGENT_TOKEN_EXPIRES_IN = '5m';
|
|
12
|
+
const POSITIVE_INTEGER = /^[1-9]\d*$/;
|
|
10
13
|
function tagsToRecord(tags) {
|
|
11
14
|
return tags.reduce((memo, { key, value }) => ({ ...memo, [key]: value }), {});
|
|
12
15
|
}
|
|
16
|
+
function signWithSnakeCaseAliasesForRubyAndPythonAgents(claims, authSecret) {
|
|
17
|
+
const firstName = claims.firstName ?? '';
|
|
18
|
+
const lastName = claims.lastName ?? '';
|
|
19
|
+
return jsonwebtoken_1.default.sign({
|
|
20
|
+
...claims,
|
|
21
|
+
firstName,
|
|
22
|
+
lastName,
|
|
23
|
+
first_name: firstName,
|
|
24
|
+
last_name: lastName,
|
|
25
|
+
rendering_id: claims.renderingId,
|
|
26
|
+
permission_level: claims.permissionLevel,
|
|
27
|
+
}, authSecret, { algorithm: 'HS256', expiresIn: exports.AGENT_TOKEN_EXPIRES_IN });
|
|
28
|
+
}
|
|
13
29
|
function issueAgentToken({ identity, authSecret }) {
|
|
14
30
|
const { user, renderingId } = identity;
|
|
15
|
-
|
|
16
|
-
const lastName = user.lastName ?? '';
|
|
17
|
-
const tags = tagsToRecord(user.tags);
|
|
18
|
-
// snake_case aliases: Ruby/Python agents splat JWT claims into Caller (snake_case kwargs).
|
|
19
|
-
return jsonwebtoken_1.default.sign({
|
|
31
|
+
return signWithSnakeCaseAliasesForRubyAndPythonAgents({
|
|
20
32
|
id: user.id,
|
|
21
33
|
email: user.email,
|
|
22
|
-
firstName,
|
|
23
|
-
lastName,
|
|
34
|
+
firstName: user.firstName,
|
|
35
|
+
lastName: user.lastName,
|
|
24
36
|
team: user.team,
|
|
25
37
|
renderingId,
|
|
26
|
-
tags,
|
|
38
|
+
tags: tagsToRecord(user.tags),
|
|
27
39
|
permissionLevel: user.permissionLevel,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
}, authSecret);
|
|
41
|
+
}
|
|
42
|
+
function issueAgentTokenFromPrincipal({ principal, authSecret, }) {
|
|
43
|
+
if (!POSITIVE_INTEGER.test(String(principal.rendering_id))) {
|
|
44
|
+
throw (0, bff_http_error_1.unauthorized)('The session carries no usable rendering');
|
|
45
|
+
}
|
|
46
|
+
return signWithSnakeCaseAliasesForRubyAndPythonAgents({
|
|
47
|
+
id: principal.id,
|
|
48
|
+
email: principal.email,
|
|
49
|
+
firstName: principal.first_name,
|
|
50
|
+
lastName: principal.last_name,
|
|
51
|
+
team: principal.team,
|
|
52
|
+
renderingId: Number(principal.rendering_id),
|
|
53
|
+
tags: principal.tags ?? {},
|
|
54
|
+
permissionLevel: principal.permission_level,
|
|
55
|
+
role: principal.role,
|
|
56
|
+
}, authSecret);
|
|
33
57
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpLWtleS9hZ2VudC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUEyREEsMENBZ0JDO0FBRUQsb0VBc0JDO0FBaEdELGdFQUF3QztBQUV4QywyREFBc0Q7QUFFekMsUUFBQSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFZM0MsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUM7QUFFdEMsU0FBUyxZQUFZLENBQUMsSUFBc0M7SUFDMUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFjRCxTQUFTLDhDQUE4QyxDQUNyRCxNQUF5QixFQUN6QixVQUFrQjtJQUVsQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUV2QyxPQUFPLHNCQUFZLENBQUMsSUFBSSxDQUN0QjtRQUNFLEdBQUcsTUFBTTtRQUNULFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVSxFQUFFLFNBQVM7UUFDckIsU0FBUyxFQUFFLFFBQVE7UUFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQ2hDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3pDLEVBQ0QsVUFBVSxFQUNWLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsOEJBQXNCLEVBQUUsQ0FDMUQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUF5QjtJQUM3RSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUV2QyxPQUFPLDhDQUE4QyxDQUNuRDtRQUNFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztRQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLFdBQVc7UUFDWCxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0IsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO0tBQ3RDLEVBQ0QsVUFBVSxDQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsNEJBQTRCLENBQUMsRUFDM0MsU0FBUyxFQUNULFVBQVUsR0FDeUI7SUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUEsNkJBQVksRUFBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxPQUFPLDhDQUE4QyxDQUNuRDtRQUNFLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNoQixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7UUFDdEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVO1FBQy9CLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBUztRQUM3QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDcEIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzNDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUU7UUFDMUIsZUFBZSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0I7UUFDM0MsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO0tBQ3JCLEVBQ0QsVUFBVSxDQUNYLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -7,6 +7,7 @@ exports.BFF_KEY_HEADER = void 0;
|
|
|
7
7
|
exports.default = createAuthModeMiddleware;
|
|
8
8
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
9
9
|
const auth_mode_1 = require("./auth-mode");
|
|
10
|
+
const agent_token_1 = require("../api-key/agent-token");
|
|
10
11
|
const bff_http_error_1 = require("../http/bff-http-error");
|
|
11
12
|
const bff_token_1 = require("../oauth/bff-token");
|
|
12
13
|
exports.BFF_KEY_HEADER = 'X-Forest-Bff-Key';
|
|
@@ -45,9 +46,12 @@ function createAuthModeMiddleware({ authSecret, }) {
|
|
|
45
46
|
const mode = (0, auth_mode_1.resolveAuthMode)({ hasBearer: bearer !== undefined, hasApiKey: apiKey !== '' });
|
|
46
47
|
ctx.state.authMode = mode;
|
|
47
48
|
if (mode === 'oauth') {
|
|
48
|
-
|
|
49
|
+
const principal = verifyBffAccess(bearer, authSecret);
|
|
50
|
+
ctx.state.principal = principal;
|
|
51
|
+
ctx.state.agentToken = (0, agent_token_1.issueAgentTokenFromPrincipal)({ principal, authSecret });
|
|
52
|
+
ctx.set('Cache-Control', 'no-store');
|
|
49
53
|
}
|
|
50
54
|
await next();
|
|
51
55
|
};
|
|
52
56
|
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1tb2RlLW1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9hdXRoLW1vZGUtbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFvREEsMkNBb0JDO0FBckVELGdFQUF3QztBQUV4QywyQ0FBa0U7QUFDbEUsd0RBQXNFO0FBQ3RFLDJEQUFzRTtBQUN0RSxrREFBMkQ7QUFFOUMsUUFBQSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7QUFNakQsU0FBUyxlQUFlLENBQUMsS0FBYSxFQUFFLFVBQWtCO0lBQ3hELElBQUksT0FBZ0IsQ0FBQztJQUVyQiw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFLGtFQUFrRTtJQUNsRSxJQUFJLENBQUM7UUFDSCxPQUFPLEdBQUcsc0JBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUMvQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDckIsZ0JBQWdCLEVBQUUsSUFBSTtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFBLDZCQUFZLEdBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDRSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQzNCLE9BQU8sS0FBSyxJQUFJO1FBQ2YsT0FBOEIsQ0FBQyxJQUFJLEtBQUssaUNBQXFCLEVBQzlELENBQUM7UUFDRCxNQUFNLElBQUEsNkJBQVksR0FBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBNEIsQ0FBQztJQUU3QyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBQSw2QkFBWSxHQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUEsK0JBQWMsR0FBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLE9BQWdDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQXdCLHdCQUF3QixDQUFDLEVBQy9DLFVBQVUsR0FDZ0I7SUFDMUIsT0FBTyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw4QkFBa0IsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxzQkFBYyxDQUFDLENBQUM7UUFFdkMsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBZSxFQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVGLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNyQixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDaEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBQSwwQ0FBNEIsRUFBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Middleware } from 'koa';
|
|
2
2
|
export declare const ALLOWED_METHODS = "GET, POST, PUT, PATCH, DELETE, OPTIONS";
|
|
3
|
-
export declare const ALLOWED_HEADERS = "Authorization, Content-Type, X-Forest-Timezone, X-Forest-Bff-Key, X-Request-Id";
|
|
3
|
+
export declare const ALLOWED_HEADERS = "Authorization, Content-Type, X-Forest-Timezone, X-Forest-Bff-Key, X-Request-Id, Forest-Projection";
|
|
4
4
|
export declare const PREFLIGHT_MAX_AGE_SECONDS = 600;
|
|
5
5
|
export interface CorsMiddlewareOptions {
|
|
6
6
|
allowedOrigins: string[];
|
|
@@ -4,7 +4,7 @@ exports.PREFLIGHT_MAX_AGE_SECONDS = exports.ALLOWED_HEADERS = exports.ALLOWED_ME
|
|
|
4
4
|
exports.default = createCorsMiddleware;
|
|
5
5
|
const origin_1 = require("./origin");
|
|
6
6
|
exports.ALLOWED_METHODS = 'GET, POST, PUT, PATCH, DELETE, OPTIONS';
|
|
7
|
-
exports.ALLOWED_HEADERS = 'Authorization, Content-Type, X-Forest-Timezone, X-Forest-Bff-Key, X-Request-Id';
|
|
7
|
+
exports.ALLOWED_HEADERS = 'Authorization, Content-Type, X-Forest-Timezone, X-Forest-Bff-Key, X-Request-Id, Forest-Projection';
|
|
8
8
|
exports.PREFLIGHT_MAX_AGE_SECONDS = 600;
|
|
9
9
|
function createCorsMiddleware({ allowedOrigins, }) {
|
|
10
10
|
return async function corsMiddleware(ctx, next) {
|
|
@@ -26,4 +26,4 @@ function createCorsMiddleware({ allowedOrigins, }) {
|
|
|
26
26
|
await next();
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycy1taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcnMvY29ycy1taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWFBLHVDQTBCQztBQXJDRCxxQ0FBeUM7QUFFNUIsUUFBQSxlQUFlLEdBQUcsd0NBQXdDLENBQUM7QUFDM0QsUUFBQSxlQUFlLEdBQzFCLG1HQUFtRyxDQUFDO0FBQ3pGLFFBQUEseUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBTTdDLFNBQXdCLG9CQUFvQixDQUFDLEVBQzNDLGNBQWMsR0FDUTtJQUN0QixPQUFPLEtBQUssVUFBVSxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDNUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVqQyxJQUFJLE1BQU07WUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxzQkFBYSxFQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRXZFLElBQUksT0FBTztZQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUQsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzdCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osR0FBRyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSx1QkFBZSxDQUFDLENBQUM7Z0JBQ3pELEdBQUcsQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsdUJBQWUsQ0FBQyxDQUFDO2dCQUN6RCxHQUFHLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxpQ0FBeUIsQ0FBQyxDQUFDLENBQUM7WUFDdkUsQ0FBQztZQUVELEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBRWpCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -29,9 +29,6 @@ async function resolveReadModel(store) {
|
|
|
29
29
|
throw error;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
// The agent token is minted only on the API-key path; the OAuth path sets a principal but no agent
|
|
33
|
-
// token yet. Fail closed instead of calling the agent with `Bearer undefined`.
|
|
34
|
-
// TODO(PRD-637): mint an agent token from the OAuth principal so agent routes work in OAuth mode.
|
|
35
32
|
function requireAgentToken(ctx) {
|
|
36
33
|
const token = ctx.state.agentToken;
|
|
37
34
|
if (!token)
|
|
@@ -48,4 +45,4 @@ async function callAgent(fn, logger) {
|
|
|
48
45
|
throw (0, agent_error_mapper_1.mapAgentError)(error, { logger });
|
|
49
46
|
}
|
|
50
47
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtcm91dGUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL2FnZW50LXJvdXRlLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVQSxzQ0FNQztBQUVELDRDQU9DO0FBRUQsOENBS0M7QUFJRCw4QkFNQztBQXJDRCw2REFBcUQ7QUFDckQscURBQWdEO0FBQ2hELHlEQUF1RTtBQUN2RSxrRUFBMEQ7QUFFMUQsU0FBZ0IsYUFBYSxDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ3RELElBQUksQ0FBQztRQUNILE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBQSxpQ0FBYyxFQUFDLGFBQWEsS0FBSyxVQUFVLENBQUMsQ0FBQztJQUNyRCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxLQUFxQjtJQUMxRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksZ0JBQXNCO1lBQUUsTUFBTSxJQUFBLG9DQUFpQixHQUFFLENBQUM7UUFDdkUsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLEdBQVk7SUFDNUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFnQyxDQUFDO0lBQ3pELElBQUksQ0FBQyxLQUFLO1FBQUUsTUFBTSxJQUFBLDZCQUFZLEVBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUV4RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxtR0FBbUc7QUFDbkcsNkRBQTZEO0FBQ3RELEtBQUssVUFBVSxTQUFTLENBQUksRUFBb0IsRUFBRSxNQUFjO0lBQ3JFLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBQSxrQ0FBYSxFQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -18,6 +18,7 @@ export interface BffAccessTokenPayload {
|
|
|
18
18
|
team: string;
|
|
19
19
|
rendering_id: string;
|
|
20
20
|
permission_level: string;
|
|
21
|
+
role?: string;
|
|
21
22
|
tags: Record<string, string>;
|
|
22
23
|
}
|
|
23
24
|
export declare function issueBffAccessToken({ sid, user, renderingId, authSecret, expiresInSeconds, }: IssueBffAccessTokenParams): string;
|
package/dist/oauth/bff-token.js
CHANGED
|
@@ -19,6 +19,7 @@ function issueBffAccessToken({ sid, user, renderingId, authSecret, expiresInSeco
|
|
|
19
19
|
team: user.team,
|
|
20
20
|
rendering_id: String(renderingId),
|
|
21
21
|
permission_level: user.permissionLevel,
|
|
22
|
+
role: user.role,
|
|
22
23
|
tags: user.tags ?? {},
|
|
23
24
|
};
|
|
24
25
|
return jsonwebtoken_1.default.sign(payload, authSecret, {
|
|
@@ -26,4 +27,4 @@ function issueBffAccessToken({ sid, user, renderingId, authSecret, expiresInSeco
|
|
|
26
27
|
expiresIn: Math.min(expiresInSeconds, exports.BFF_ACCESS_TOKEN_MAX_EXPIRES_IN),
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmZmLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29hdXRoL2JmZi10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2QkEsa0RBeUJDO0FBcERELGdFQUF3QztBQUUzQixRQUFBLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQUNyQyxRQUFBLCtCQUErQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUF3QnZELFNBQWdCLG1CQUFtQixDQUFDLEVBQ2xDLEdBQUcsRUFDSCxJQUFJLEVBQ0osV0FBVyxFQUNYLFVBQVUsRUFDVixnQkFBZ0IsR0FDVTtJQUMxQixNQUFNLE9BQU8sR0FBMEI7UUFDckMsSUFBSSxFQUFFLDZCQUFxQjtRQUMzQixHQUFHO1FBQ0gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztRQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDakMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWU7UUFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtLQUN0QixDQUFDO0lBRUYsT0FBTyxzQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO1FBQzVDLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLHVDQUErQixDQUFDO0tBQ3ZFLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|