@salesforce/b2c-tooling-sdk 1.7.0 → 1.9.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/cjs/auth/index.d.ts +3 -0
- package/dist/cjs/auth/index.js +2 -0
- package/dist/cjs/auth/index.js.map +1 -1
- package/dist/cjs/auth/jwt-utils.d.ts +25 -0
- package/dist/cjs/auth/jwt-utils.js +66 -0
- package/dist/cjs/auth/jwt-utils.js.map +1 -0
- package/dist/cjs/auth/oauth-implicit.js +4 -1
- package/dist/cjs/auth/oauth-implicit.js.map +1 -1
- package/dist/cjs/auth/oauth-jwt.d.ts +99 -0
- package/dist/cjs/auth/oauth-jwt.js +343 -0
- package/dist/cjs/auth/oauth-jwt.js.map +1 -0
- package/dist/cjs/auth/oauth.d.ts +42 -3
- package/dist/cjs/auth/oauth.js +90 -35
- package/dist/cjs/auth/oauth.js.map +1 -1
- package/dist/cjs/auth/stateful-oauth-strategy.js +3 -9
- package/dist/cjs/auth/stateful-oauth-strategy.js.map +1 -1
- package/dist/cjs/auth/stateful-store.js +33 -35
- package/dist/cjs/auth/stateful-store.js.map +1 -1
- package/dist/cjs/auth/types.d.ts +2 -1
- package/dist/cjs/auth/types.js +1 -1
- package/dist/cjs/auth/types.js.map +1 -1
- package/dist/cjs/cli/am-command.d.ts +1 -1
- package/dist/cjs/cli/am-command.js +3 -0
- package/dist/cjs/cli/am-command.js.map +1 -1
- package/dist/cjs/cli/base-command.js +4 -2
- package/dist/cjs/cli/base-command.js.map +1 -1
- package/dist/cjs/cli/columns.d.ts +128 -0
- package/dist/cjs/cli/columns.js +128 -0
- package/dist/cjs/cli/columns.js.map +1 -0
- package/dist/cjs/cli/config.js +4 -0
- package/dist/cjs/cli/config.js.map +1 -1
- package/dist/cjs/cli/details.d.ts +69 -0
- package/dist/cjs/cli/details.js +72 -0
- package/dist/cjs/cli/details.js.map +1 -0
- package/dist/cjs/cli/index.d.ts +4 -0
- package/dist/cjs/cli/index.js +2 -0
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/instance-command.d.ts +3 -0
- package/dist/cjs/cli/oauth-command.d.ts +14 -2
- package/dist/cjs/cli/oauth-command.js +54 -3
- package/dist/cjs/cli/oauth-command.js.map +1 -1
- package/dist/cjs/cli/ods-command.d.ts +3 -0
- package/dist/cjs/cli/webdav-command.d.ts +3 -0
- package/dist/cjs/clients/cdn-zones.js +5 -2
- package/dist/cjs/clients/cdn-zones.js.map +1 -1
- package/dist/cjs/clients/cip.js +2 -1
- package/dist/cjs/clients/cip.js.map +1 -1
- package/dist/cjs/clients/custom-apis.js +5 -2
- package/dist/cjs/clients/custom-apis.js.map +1 -1
- package/dist/cjs/clients/granular-replications.js +4 -1
- package/dist/cjs/clients/granular-replications.js.map +1 -1
- package/dist/cjs/clients/mrt.generated.d.ts +1073 -41
- package/dist/cjs/clients/scapi-schemas.js +5 -2
- package/dist/cjs/clients/scapi-schemas.js.map +1 -1
- package/dist/cjs/clients/webdav.js +11 -3
- package/dist/cjs/clients/webdav.js.map +1 -1
- package/dist/cjs/config/dw-json.d.ts +10 -0
- package/dist/cjs/config/dw-json.js +4 -7
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/mapping.js +27 -0
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/sources/env-source.js +13 -1
- package/dist/cjs/config/sources/env-source.js.map +1 -1
- package/dist/cjs/config/sources/package-json-source.js +1 -0
- package/dist/cjs/config/sources/package-json-source.js.map +1 -1
- package/dist/cjs/config/types.d.ts +14 -0
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/operations/bm-users/index.d.ts +50 -0
- package/dist/cjs/operations/bm-users/index.js +55 -0
- package/dist/cjs/operations/bm-users/index.js.map +1 -0
- package/dist/cjs/operations/bm-users/users.d.ts +189 -0
- package/dist/cjs/operations/bm-users/users.js +229 -0
- package/dist/cjs/operations/bm-users/users.js.map +1 -0
- package/dist/cjs/operations/code/deploy.js +19 -10
- package/dist/cjs/operations/code/deploy.js.map +1 -1
- package/dist/cjs/operations/code/download.d.ts +17 -6
- package/dist/cjs/operations/code/download.js +224 -104
- package/dist/cjs/operations/code/download.js.map +1 -1
- package/dist/cjs/operations/code/index.d.ts +3 -1
- package/dist/cjs/operations/code/index.js +3 -1
- package/dist/cjs/operations/code/index.js.map +1 -1
- package/dist/cjs/operations/code/upload-files.d.ts +47 -0
- package/dist/cjs/operations/code/upload-files.js +116 -0
- package/dist/cjs/operations/code/upload-files.js.map +1 -0
- package/dist/cjs/operations/code/watch.js +18 -92
- package/dist/cjs/operations/code/watch.js.map +1 -1
- package/dist/cjs/operations/debug/debug-session.js +23 -8
- package/dist/cjs/operations/debug/debug-session.js.map +1 -1
- package/dist/cjs/operations/debug/index.d.ts +3 -0
- package/dist/cjs/operations/debug/index.js +2 -0
- package/dist/cjs/operations/debug/index.js.map +1 -1
- package/dist/cjs/operations/debug/projections.d.ts +72 -0
- package/dist/cjs/operations/debug/projections.js +84 -0
- package/dist/cjs/operations/debug/projections.js.map +1 -0
- package/dist/cjs/operations/debug/resolve-path.d.ts +15 -0
- package/dist/cjs/operations/debug/resolve-path.js +52 -0
- package/dist/cjs/operations/debug/resolve-path.js.map +1 -0
- package/dist/cjs/operations/mrt/certificate.d.ts +60 -0
- package/dist/cjs/operations/mrt/certificate.js +76 -0
- package/dist/cjs/operations/mrt/certificate.js.map +1 -0
- package/dist/cjs/operations/mrt/env.d.ts +79 -0
- package/dist/cjs/operations/mrt/env.js +65 -3
- package/dist/cjs/operations/mrt/env.js.map +1 -1
- package/dist/cjs/operations/mrt/index.d.ts +8 -4
- package/dist/cjs/operations/mrt/index.js +6 -2
- package/dist/cjs/operations/mrt/index.js.map +1 -1
- package/dist/cjs/operations/mrt/organization-member.d.ts +68 -0
- package/dist/cjs/operations/mrt/organization-member.js +88 -0
- package/dist/cjs/operations/mrt/organization-member.js.map +1 -0
- package/dist/cjs/operations/mrt/push.d.ts +67 -0
- package/dist/cjs/operations/mrt/push.js +63 -0
- package/dist/cjs/operations/mrt/push.js.map +1 -1
- package/dist/cjs/ux/index.d.ts +1 -0
- package/dist/cjs/ux/index.js +7 -0
- package/dist/cjs/ux/index.js.map +1 -0
- package/dist/esm/auth/index.d.ts +3 -0
- package/dist/esm/auth/index.js +2 -0
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/auth/jwt-utils.d.ts +25 -0
- package/dist/esm/auth/jwt-utils.js +66 -0
- package/dist/esm/auth/jwt-utils.js.map +1 -0
- package/dist/esm/auth/oauth-implicit.js +4 -1
- package/dist/esm/auth/oauth-implicit.js.map +1 -1
- package/dist/esm/auth/oauth-jwt.d.ts +99 -0
- package/dist/esm/auth/oauth-jwt.js +343 -0
- package/dist/esm/auth/oauth-jwt.js.map +1 -0
- package/dist/esm/auth/oauth.d.ts +42 -3
- package/dist/esm/auth/oauth.js +90 -35
- package/dist/esm/auth/oauth.js.map +1 -1
- package/dist/esm/auth/stateful-oauth-strategy.js +3 -9
- package/dist/esm/auth/stateful-oauth-strategy.js.map +1 -1
- package/dist/esm/auth/stateful-store.js +33 -35
- package/dist/esm/auth/stateful-store.js.map +1 -1
- package/dist/esm/auth/types.d.ts +2 -1
- package/dist/esm/auth/types.js +1 -1
- package/dist/esm/auth/types.js.map +1 -1
- package/dist/esm/cli/am-command.d.ts +1 -1
- package/dist/esm/cli/am-command.js +3 -0
- package/dist/esm/cli/am-command.js.map +1 -1
- package/dist/esm/cli/base-command.js +4 -2
- package/dist/esm/cli/base-command.js.map +1 -1
- package/dist/esm/cli/columns.d.ts +128 -0
- package/dist/esm/cli/columns.js +128 -0
- package/dist/esm/cli/columns.js.map +1 -0
- package/dist/esm/cli/config.js +4 -0
- package/dist/esm/cli/config.js.map +1 -1
- package/dist/esm/cli/details.d.ts +69 -0
- package/dist/esm/cli/details.js +72 -0
- package/dist/esm/cli/details.js.map +1 -0
- package/dist/esm/cli/index.d.ts +4 -0
- package/dist/esm/cli/index.js +2 -0
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +3 -0
- package/dist/esm/cli/oauth-command.d.ts +14 -2
- package/dist/esm/cli/oauth-command.js +54 -3
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +3 -0
- package/dist/esm/cli/webdav-command.d.ts +3 -0
- package/dist/esm/clients/cdn-zones.js +5 -2
- package/dist/esm/clients/cdn-zones.js.map +1 -1
- package/dist/esm/clients/cip.js +2 -1
- package/dist/esm/clients/cip.js.map +1 -1
- package/dist/esm/clients/custom-apis.js +5 -2
- package/dist/esm/clients/custom-apis.js.map +1 -1
- package/dist/esm/clients/granular-replications.js +4 -1
- package/dist/esm/clients/granular-replications.js.map +1 -1
- package/dist/esm/clients/mrt.generated.d.ts +1073 -41
- package/dist/esm/clients/scapi-schemas.js +5 -2
- package/dist/esm/clients/scapi-schemas.js.map +1 -1
- package/dist/esm/clients/webdav.js +11 -3
- package/dist/esm/clients/webdav.js.map +1 -1
- package/dist/esm/config/dw-json.d.ts +10 -0
- package/dist/esm/config/dw-json.js +4 -7
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/mapping.js +27 -0
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/sources/env-source.js +13 -1
- package/dist/esm/config/sources/env-source.js.map +1 -1
- package/dist/esm/config/sources/package-json-source.js +1 -0
- package/dist/esm/config/sources/package-json-source.js.map +1 -1
- package/dist/esm/config/types.d.ts +14 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/operations/bm-users/index.d.ts +50 -0
- package/dist/esm/operations/bm-users/index.js +55 -0
- package/dist/esm/operations/bm-users/index.js.map +1 -0
- package/dist/esm/operations/bm-users/users.d.ts +189 -0
- package/dist/esm/operations/bm-users/users.js +229 -0
- package/dist/esm/operations/bm-users/users.js.map +1 -0
- package/dist/esm/operations/code/deploy.js +19 -10
- package/dist/esm/operations/code/deploy.js.map +1 -1
- package/dist/esm/operations/code/download.d.ts +17 -6
- package/dist/esm/operations/code/download.js +224 -104
- package/dist/esm/operations/code/download.js.map +1 -1
- package/dist/esm/operations/code/index.d.ts +3 -1
- package/dist/esm/operations/code/index.js +3 -1
- package/dist/esm/operations/code/index.js.map +1 -1
- package/dist/esm/operations/code/upload-files.d.ts +47 -0
- package/dist/esm/operations/code/upload-files.js +116 -0
- package/dist/esm/operations/code/upload-files.js.map +1 -0
- package/dist/esm/operations/code/watch.js +18 -92
- package/dist/esm/operations/code/watch.js.map +1 -1
- package/dist/esm/operations/debug/debug-session.js +23 -8
- package/dist/esm/operations/debug/debug-session.js.map +1 -1
- package/dist/esm/operations/debug/index.d.ts +3 -0
- package/dist/esm/operations/debug/index.js +2 -0
- package/dist/esm/operations/debug/index.js.map +1 -1
- package/dist/esm/operations/debug/projections.d.ts +72 -0
- package/dist/esm/operations/debug/projections.js +84 -0
- package/dist/esm/operations/debug/projections.js.map +1 -0
- package/dist/esm/operations/debug/resolve-path.d.ts +15 -0
- package/dist/esm/operations/debug/resolve-path.js +52 -0
- package/dist/esm/operations/debug/resolve-path.js.map +1 -0
- package/dist/esm/operations/mrt/certificate.d.ts +60 -0
- package/dist/esm/operations/mrt/certificate.js +76 -0
- package/dist/esm/operations/mrt/certificate.js.map +1 -0
- package/dist/esm/operations/mrt/env.d.ts +79 -0
- package/dist/esm/operations/mrt/env.js +65 -3
- package/dist/esm/operations/mrt/env.js.map +1 -1
- package/dist/esm/operations/mrt/index.d.ts +8 -4
- package/dist/esm/operations/mrt/index.js +6 -2
- package/dist/esm/operations/mrt/index.js.map +1 -1
- package/dist/esm/operations/mrt/organization-member.d.ts +68 -0
- package/dist/esm/operations/mrt/organization-member.js +88 -0
- package/dist/esm/operations/mrt/organization-member.js.map +1 -0
- package/dist/esm/operations/mrt/push.d.ts +67 -0
- package/dist/esm/operations/mrt/push.js +63 -0
- package/dist/esm/operations/mrt/push.js.map +1 -1
- package/dist/esm/ux/index.d.ts +1 -0
- package/dist/esm/ux/index.js +7 -0
- package/dist/esm/ux/index.js.map +1 -0
- package/package.json +22 -2
- package/specs/mrt-api-v1.json +2192 -48
package/dist/cjs/auth/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - {@link BasicAuthStrategy} - Username/password authentication for WebDAV operations
|
|
10
10
|
* - {@link OAuthStrategy} - OAuth 2.0 client credentials for OCAPI and platform APIs
|
|
11
|
+
* - {@link JwtOAuthStrategy} - OAuth 2.0 JWT Bearer (certificate-based authentication)
|
|
11
12
|
* - {@link ImplicitOAuthStrategy} - Interactive browser-based OAuth for CLI/desktop apps
|
|
12
13
|
* - {@link ApiKeyStrategy} - API key authentication for MRT services
|
|
13
14
|
*
|
|
@@ -60,6 +61,8 @@ export { OAuthStrategy, decodeJWT } from './oauth.js';
|
|
|
60
61
|
export type { OAuthConfig } from './oauth.js';
|
|
61
62
|
export { ImplicitOAuthStrategy } from './oauth-implicit.js';
|
|
62
63
|
export type { ImplicitOAuthConfig } from './oauth-implicit.js';
|
|
64
|
+
export { JwtOAuthStrategy } from './oauth-jwt.js';
|
|
65
|
+
export type { JwtOAuthConfig } from './oauth-jwt.js';
|
|
63
66
|
export { ApiKeyStrategy } from './api-key.js';
|
|
64
67
|
export { StatefulOAuthStrategy } from './stateful-oauth-strategy.js';
|
|
65
68
|
export type { StatefulOAuthStrategyOptions } from './stateful-oauth-strategy.js';
|
package/dist/cjs/auth/index.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* - {@link BasicAuthStrategy} - Username/password authentication for WebDAV operations
|
|
15
15
|
* - {@link OAuthStrategy} - OAuth 2.0 client credentials for OCAPI and platform APIs
|
|
16
|
+
* - {@link JwtOAuthStrategy} - OAuth 2.0 JWT Bearer (certificate-based authentication)
|
|
16
17
|
* - {@link ImplicitOAuthStrategy} - Interactive browser-based OAuth for CLI/desktop apps
|
|
17
18
|
* - {@link ApiKeyStrategy} - API key authentication for MRT services
|
|
18
19
|
*
|
|
@@ -63,6 +64,7 @@ export { ALL_AUTH_METHODS } from './types.js';
|
|
|
63
64
|
export { BasicAuthStrategy } from './basic.js';
|
|
64
65
|
export { OAuthStrategy, decodeJWT } from './oauth.js';
|
|
65
66
|
export { ImplicitOAuthStrategy } from './oauth-implicit.js';
|
|
67
|
+
export { JwtOAuthStrategy } from './oauth-jwt.js';
|
|
66
68
|
export { ApiKeyStrategy } from './api-key.js';
|
|
67
69
|
export { StatefulOAuthStrategy } from './stateful-oauth-strategy.js';
|
|
68
70
|
// Stateful auth store
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAeH,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAE5C,aAAa;AACb,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,8BAA8B,CAAC;AAGnE,sBAAsB;AACtB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAG7B,qBAAqB;AACrB,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAAC,MAAM,cAAc,CAAC;AAG5E,kBAAkB;AAClB,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Default buffer (seconds) before token `exp` to consider the token expired. */
|
|
2
|
+
export declare const DEFAULT_EXPIRY_BUFFER_SEC = 60;
|
|
3
|
+
/**
|
|
4
|
+
* Extract `scope` from a decoded JWT payload. Tolerates both the (legacy)
|
|
5
|
+
* space-delimited string form and the array form.
|
|
6
|
+
*/
|
|
7
|
+
export declare function extractJwtScopes(payload: Record<string, unknown>): string[];
|
|
8
|
+
/**
|
|
9
|
+
* Decode a JWT and return its `expires` Date and `scopes` array. Errors from
|
|
10
|
+
* `decodeJWT` propagate to the caller — callers that want a soft-fail should
|
|
11
|
+
* wrap this in try/catch.
|
|
12
|
+
*/
|
|
13
|
+
export declare function decodeJwtTokenInfo(token: string): {
|
|
14
|
+
expires: Date;
|
|
15
|
+
scopes: string[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Returns `true` if the token is non-empty, decodes successfully, has not
|
|
19
|
+
* expired (with a small buffer), and includes all required scopes.
|
|
20
|
+
*
|
|
21
|
+
* @param token - The JWT access token
|
|
22
|
+
* @param requiredScopes - Scopes that must all be present in the token (default: none)
|
|
23
|
+
* @param expiryBufferSec - Treat token as expired this many seconds before its real `exp`
|
|
24
|
+
*/
|
|
25
|
+
export declare function isJwtTokenValid(token: string, requiredScopes?: string[], expiryBufferSec?: number): boolean;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Shared helpers for working with decoded JWT access tokens. Centralizes the
|
|
8
|
+
* `exp` / `scope` extraction patterns that previously lived in multiple auth
|
|
9
|
+
* strategy files.
|
|
10
|
+
*
|
|
11
|
+
* @module auth/jwt-utils
|
|
12
|
+
*/
|
|
13
|
+
import { decodeJWT } from './oauth.js';
|
|
14
|
+
/** Default buffer (seconds) before token `exp` to consider the token expired. */
|
|
15
|
+
export const DEFAULT_EXPIRY_BUFFER_SEC = 60;
|
|
16
|
+
/**
|
|
17
|
+
* Extract `scope` from a decoded JWT payload. Tolerates both the (legacy)
|
|
18
|
+
* space-delimited string form and the array form.
|
|
19
|
+
*/
|
|
20
|
+
export function extractJwtScopes(payload) {
|
|
21
|
+
const scope = payload.scope;
|
|
22
|
+
if (scope == null)
|
|
23
|
+
return [];
|
|
24
|
+
return Array.isArray(scope) ? scope : scope.split(' ');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Decode a JWT and return its `expires` Date and `scopes` array. Errors from
|
|
28
|
+
* `decodeJWT` propagate to the caller — callers that want a soft-fail should
|
|
29
|
+
* wrap this in try/catch.
|
|
30
|
+
*/
|
|
31
|
+
export function decodeJwtTokenInfo(token) {
|
|
32
|
+
const decoded = decodeJWT(token);
|
|
33
|
+
const exp = typeof decoded.payload.exp === 'number' ? decoded.payload.exp : 0;
|
|
34
|
+
return {
|
|
35
|
+
expires: new Date(exp * 1000),
|
|
36
|
+
scopes: extractJwtScopes(decoded.payload),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns `true` if the token is non-empty, decodes successfully, has not
|
|
41
|
+
* expired (with a small buffer), and includes all required scopes.
|
|
42
|
+
*
|
|
43
|
+
* @param token - The JWT access token
|
|
44
|
+
* @param requiredScopes - Scopes that must all be present in the token (default: none)
|
|
45
|
+
* @param expiryBufferSec - Treat token as expired this many seconds before its real `exp`
|
|
46
|
+
*/
|
|
47
|
+
export function isJwtTokenValid(token, requiredScopes = [], expiryBufferSec = DEFAULT_EXPIRY_BUFFER_SEC) {
|
|
48
|
+
if (!token)
|
|
49
|
+
return false;
|
|
50
|
+
let info;
|
|
51
|
+
try {
|
|
52
|
+
info = decodeJwtTokenInfo(token);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const nowSec = Math.floor(Date.now() / 1000);
|
|
58
|
+
const expSec = Math.floor(info.expires.getTime() / 1000);
|
|
59
|
+
if (expSec === 0 || nowSec >= expSec - expiryBufferSec)
|
|
60
|
+
return false;
|
|
61
|
+
if (requiredScopes.length > 0 && !requiredScopes.every((s) => info.scopes.includes(s))) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=jwt-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-utils.js","sourceRoot":"","sources":["../../../src/auth/jwt-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;GAMG;AACH,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAErC,iFAAiF;AACjF,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAsC,CAAC;IAC7D,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO;QACL,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAC7B,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAkC,CAAC;KACrE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,iBAA2B,EAAE,EAC7B,kBAA0B,yBAAyB;IAEnD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,IAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,MAAM,GAAG,eAAe;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -339,7 +339,10 @@ export class ImplicitOAuthStrategy {
|
|
|
339
339
|
});
|
|
340
340
|
server.on('error', (err) => {
|
|
341
341
|
logger.error({ error: err.message, port: this.localPort }, '[Auth] Failed to start OAuth redirect server');
|
|
342
|
-
|
|
342
|
+
const hint = 'code' in err && err.code === 'EADDRINUSE'
|
|
343
|
+
? ` Port ${this.localPort} is in use; set SFCC_OAUTH_LOCAL_PORT or pass localPort to use a different port.`
|
|
344
|
+
: '';
|
|
345
|
+
reject(new Error(`Failed to start OAuth redirect server: ${err.message}.${hint}`));
|
|
343
346
|
});
|
|
344
347
|
});
|
|
345
348
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-implicit.js","sourceRoot":"","sources":["../../../src/auth/oauth-implicit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oauth-implicit.js","sourceRoot":"","sources":["../../../src/auth/oauth-implicit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { AuthStrategy, FetchInit, AccessTokenResponse } from './types.js';
|
|
2
|
+
import { decodeJWT } from './oauth.js';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for JWT Bearer authentication.
|
|
5
|
+
*/
|
|
6
|
+
export interface JwtOAuthConfig {
|
|
7
|
+
/** OAuth client ID */
|
|
8
|
+
clientId: string;
|
|
9
|
+
/** Path to JWT certificate file (cert.pem) */
|
|
10
|
+
certPath: string;
|
|
11
|
+
/** Path to JWT private key file (key.pem) */
|
|
12
|
+
keyPath: string;
|
|
13
|
+
/** Optional passphrase for encrypted private key */
|
|
14
|
+
passphrase?: string;
|
|
15
|
+
/** Account Manager hostname */
|
|
16
|
+
accountManagerHost: string;
|
|
17
|
+
/** OAuth scopes to request */
|
|
18
|
+
scopes?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* OAuth 2.0 JWT Bearer authentication strategy.
|
|
22
|
+
*
|
|
23
|
+
* Implements RFC 7523 (JSON Web Token (JWT) Profile for OAuth 2.0 Client
|
|
24
|
+
* Authentication and Authorization Grants).
|
|
25
|
+
*
|
|
26
|
+
* Key differences from client credentials flow:
|
|
27
|
+
* - Uses public/private key pair instead of client secret
|
|
28
|
+
* - Sends JWT as `client_assertion` in POST body (not Authorization header)
|
|
29
|
+
* - JWT is self-signed and short-lived (60 seconds)
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const strategy = new JwtOAuthStrategy({
|
|
34
|
+
* clientId: 'my-client-id',
|
|
35
|
+
* certPath: './cert.pem',
|
|
36
|
+
* keyPath: './key.pem',
|
|
37
|
+
* accountManagerHost: 'account.demandware.com',
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* const response = await strategy.fetch('https://api.example.com/data');
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare class JwtOAuthStrategy implements AuthStrategy {
|
|
44
|
+
private readonly config;
|
|
45
|
+
private readonly logger;
|
|
46
|
+
private readonly cacheKey;
|
|
47
|
+
private _hasHadSuccess;
|
|
48
|
+
private readonly privateKey;
|
|
49
|
+
constructor(config: JwtOAuthConfig);
|
|
50
|
+
/**
|
|
51
|
+
* Validates JWT configuration and checks that certificate/key files exist and are readable.
|
|
52
|
+
*/
|
|
53
|
+
private validateConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Performs a fetch request with JWT Bearer authentication.
|
|
56
|
+
* Automatically injects the Authorization header with a fresh access token.
|
|
57
|
+
* Includes 401 retry logic and x-dw-client-id header.
|
|
58
|
+
*/
|
|
59
|
+
fetch(url: string, init?: FetchInit): Promise<Response>;
|
|
60
|
+
/**
|
|
61
|
+
* Returns the Authorization header value for legacy clients.
|
|
62
|
+
*/
|
|
63
|
+
getAuthorizationHeader(): Promise<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Gets the decoded JWT payload.
|
|
66
|
+
*/
|
|
67
|
+
getJWT(): Promise<ReturnType<typeof decodeJWT>>;
|
|
68
|
+
/**
|
|
69
|
+
* Creates a new JwtOAuthStrategy with additional scopes merged in.
|
|
70
|
+
* Used by clients that have specific scope requirements.
|
|
71
|
+
*
|
|
72
|
+
* @param additionalScopes - Scopes to add to this strategy's existing scopes
|
|
73
|
+
* @returns A new JwtOAuthStrategy instance with merged scopes
|
|
74
|
+
*/
|
|
75
|
+
withAdditionalScopes(additionalScopes: string[]): JwtOAuthStrategy;
|
|
76
|
+
/**
|
|
77
|
+
* Gets the full token response including expiration and scopes.
|
|
78
|
+
* Useful for commands that need to display or return token metadata.
|
|
79
|
+
*/
|
|
80
|
+
getTokenResponse(): Promise<AccessTokenResponse>;
|
|
81
|
+
/**
|
|
82
|
+
* Invalidates the cached access token, forcing re-authentication on next request.
|
|
83
|
+
*/
|
|
84
|
+
invalidateToken(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Gets an access token string, using cached token if still valid.
|
|
87
|
+
*/
|
|
88
|
+
private getAccessToken;
|
|
89
|
+
/**
|
|
90
|
+
* Requests a new access token from Account Manager using JWT Bearer flow.
|
|
91
|
+
* Returns the full token response and caches it.
|
|
92
|
+
*/
|
|
93
|
+
private requestNewToken;
|
|
94
|
+
/**
|
|
95
|
+
* Creates and signs a JWT token for OAuth authentication.
|
|
96
|
+
* Uses RS256 algorithm and Base64URL encoding per RFC 7519.
|
|
97
|
+
*/
|
|
98
|
+
private createSignedJwt;
|
|
99
|
+
}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* JWT Bearer OAuth authentication strategy (RFC 7523).
|
|
8
|
+
*
|
|
9
|
+
* Implements OAuth 2.0 JWT Bearer Token flow for Account Manager authentication.
|
|
10
|
+
* Uses client certificate/key pair instead of client secret for enhanced security.
|
|
11
|
+
*
|
|
12
|
+
* @module auth/oauth-jwt
|
|
13
|
+
*/
|
|
14
|
+
import * as crypto from 'node:crypto';
|
|
15
|
+
import * as fs from 'node:fs';
|
|
16
|
+
import { getLogger } from '../logging/logger.js';
|
|
17
|
+
import { getOAuthCacheKey, getCachedOAuthToken, setCachedOAuthToken, invalidateCachedOAuthToken, decodeJWT, } from './oauth.js';
|
|
18
|
+
import { globalAuthMiddlewareRegistry, applyAuthRequestMiddleware, applyAuthResponseMiddleware } from './middleware.js';
|
|
19
|
+
/**
|
|
20
|
+
* OAuth 2.0 JWT Bearer authentication strategy.
|
|
21
|
+
*
|
|
22
|
+
* Implements RFC 7523 (JSON Web Token (JWT) Profile for OAuth 2.0 Client
|
|
23
|
+
* Authentication and Authorization Grants).
|
|
24
|
+
*
|
|
25
|
+
* Key differences from client credentials flow:
|
|
26
|
+
* - Uses public/private key pair instead of client secret
|
|
27
|
+
* - Sends JWT as `client_assertion` in POST body (not Authorization header)
|
|
28
|
+
* - JWT is self-signed and short-lived (60 seconds)
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const strategy = new JwtOAuthStrategy({
|
|
33
|
+
* clientId: 'my-client-id',
|
|
34
|
+
* certPath: './cert.pem',
|
|
35
|
+
* keyPath: './key.pem',
|
|
36
|
+
* accountManagerHost: 'account.demandware.com',
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* const response = await strategy.fetch('https://api.example.com/data');
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export class JwtOAuthStrategy {
|
|
43
|
+
config;
|
|
44
|
+
logger = getLogger();
|
|
45
|
+
cacheKey;
|
|
46
|
+
_hasHadSuccess = false;
|
|
47
|
+
privateKey;
|
|
48
|
+
constructor(config) {
|
|
49
|
+
this.validateConfig(config);
|
|
50
|
+
this.config = config;
|
|
51
|
+
this.cacheKey = getOAuthCacheKey(this.config.clientId, 'jwt', this.config.accountManagerHost, this.config.scopes);
|
|
52
|
+
// Cache private key to avoid file I/O on every token request
|
|
53
|
+
const keyContent = fs.readFileSync(config.keyPath, 'utf8');
|
|
54
|
+
this.privateKey = crypto.createPrivateKey({
|
|
55
|
+
key: keyContent,
|
|
56
|
+
passphrase: config.passphrase,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Validates JWT configuration and checks that certificate/key files exist and are readable.
|
|
61
|
+
*/
|
|
62
|
+
validateConfig(config) {
|
|
63
|
+
// Validate required fields
|
|
64
|
+
if (!config.clientId) {
|
|
65
|
+
throw new Error('JWT authentication requires clientId');
|
|
66
|
+
}
|
|
67
|
+
if (!config.certPath) {
|
|
68
|
+
throw new Error('JWT authentication requires certificate path (--jwt-cert)');
|
|
69
|
+
}
|
|
70
|
+
if (!config.keyPath) {
|
|
71
|
+
throw new Error('JWT authentication requires private key path (--jwt-key)');
|
|
72
|
+
}
|
|
73
|
+
if (!config.accountManagerHost) {
|
|
74
|
+
throw new Error('JWT authentication requires accountManagerHost');
|
|
75
|
+
}
|
|
76
|
+
// Validate certificate file exists and has content
|
|
77
|
+
if (!fs.existsSync(config.certPath)) {
|
|
78
|
+
throw new Error(`JWT certificate file not found: ${config.certPath}\n` +
|
|
79
|
+
`Generate a certificate pair with: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes`);
|
|
80
|
+
}
|
|
81
|
+
// Check certificate file is readable
|
|
82
|
+
try {
|
|
83
|
+
const certContent = fs.readFileSync(config.certPath, 'utf8');
|
|
84
|
+
if (!certContent.includes('BEGIN CERTIFICATE')) {
|
|
85
|
+
throw new Error(`Invalid certificate format in ${config.certPath}. Expected PEM format (BEGIN CERTIFICATE).`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error instanceof Error && error.message.includes('Invalid certificate format')) {
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
throw new Error(`Failed to read JWT certificate from ${config.certPath}: ${error}`);
|
|
93
|
+
}
|
|
94
|
+
// Validate key file exists
|
|
95
|
+
if (!fs.existsSync(config.keyPath)) {
|
|
96
|
+
throw new Error(`JWT private key file not found: ${config.keyPath}\n` +
|
|
97
|
+
`Generate a key pair with: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes`);
|
|
98
|
+
}
|
|
99
|
+
// Validate private key is readable and valid
|
|
100
|
+
try {
|
|
101
|
+
const keyContent = fs.readFileSync(config.keyPath, 'utf8');
|
|
102
|
+
// Check key format
|
|
103
|
+
if (!keyContent.includes('BEGIN') || !keyContent.includes('PRIVATE KEY')) {
|
|
104
|
+
throw new Error(`Invalid private key format in ${config.keyPath}. Expected PEM format (BEGIN PRIVATE KEY or BEGIN RSA PRIVATE KEY).`);
|
|
105
|
+
}
|
|
106
|
+
// Validate key can be loaded (will throw if encrypted and passphrase is wrong)
|
|
107
|
+
crypto.createPrivateKey({
|
|
108
|
+
key: keyContent,
|
|
109
|
+
passphrase: config.passphrase,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
114
|
+
// Specific error for wrong passphrase
|
|
115
|
+
if (message.includes('bad decrypt') || message.includes('wrong passphrase') || message.includes('incorrect')) {
|
|
116
|
+
throw new Error(`Invalid passphrase for encrypted JWT private key.\n` +
|
|
117
|
+
`Use --jwt-passphrase flag or SFCC_JWT_PASSPHRASE environment variable to provide the passphrase.`);
|
|
118
|
+
}
|
|
119
|
+
// Specific error for encrypted key without passphrase
|
|
120
|
+
if (message.includes('encrypted') || message.includes('passphrase')) {
|
|
121
|
+
throw new Error(`JWT private key is encrypted but no passphrase provided.\n` +
|
|
122
|
+
`Use --jwt-passphrase flag or SFCC_JWT_PASSPHRASE environment variable.`);
|
|
123
|
+
}
|
|
124
|
+
// Specific error for invalid format
|
|
125
|
+
if (message.includes('Invalid private key format')) {
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
// Generic error
|
|
129
|
+
throw new Error(`Invalid JWT private key at ${config.keyPath}: ${message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Performs a fetch request with JWT Bearer authentication.
|
|
134
|
+
* Automatically injects the Authorization header with a fresh access token.
|
|
135
|
+
* Includes 401 retry logic and x-dw-client-id header.
|
|
136
|
+
*/
|
|
137
|
+
async fetch(url, init = {}) {
|
|
138
|
+
const token = await this.getAccessToken();
|
|
139
|
+
const headers = new Headers(init.headers);
|
|
140
|
+
headers.set('Authorization', `Bearer ${token}`);
|
|
141
|
+
headers.set('x-dw-client-id', this.config.clientId);
|
|
142
|
+
// Pass through dispatcher for TLS/mTLS support
|
|
143
|
+
let res = await fetch(url, { ...init, headers });
|
|
144
|
+
if (res.status !== 401) {
|
|
145
|
+
this._hasHadSuccess = true;
|
|
146
|
+
}
|
|
147
|
+
// If we previously had a successful response and now get a 401,
|
|
148
|
+
// the token likely expired. Retry once after invalidating the cached token.
|
|
149
|
+
// Skip retry on initial 401 to avoid retrying with bad credentials.
|
|
150
|
+
if (res.status === 401 && this._hasHadSuccess) {
|
|
151
|
+
this.invalidateToken();
|
|
152
|
+
const newToken = await this.getAccessToken();
|
|
153
|
+
headers.set('Authorization', `Bearer ${newToken}`);
|
|
154
|
+
res = await fetch(url, { ...init, headers });
|
|
155
|
+
}
|
|
156
|
+
return res;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Returns the Authorization header value for legacy clients.
|
|
160
|
+
*/
|
|
161
|
+
async getAuthorizationHeader() {
|
|
162
|
+
const token = await this.getAccessToken();
|
|
163
|
+
return `Bearer ${token}`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Gets the decoded JWT payload.
|
|
167
|
+
*/
|
|
168
|
+
async getJWT() {
|
|
169
|
+
const token = await this.getAccessToken();
|
|
170
|
+
return decodeJWT(token);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Creates a new JwtOAuthStrategy with additional scopes merged in.
|
|
174
|
+
* Used by clients that have specific scope requirements.
|
|
175
|
+
*
|
|
176
|
+
* @param additionalScopes - Scopes to add to this strategy's existing scopes
|
|
177
|
+
* @returns A new JwtOAuthStrategy instance with merged scopes
|
|
178
|
+
*/
|
|
179
|
+
withAdditionalScopes(additionalScopes) {
|
|
180
|
+
const mergedScopes = [...new Set([...(this.config.scopes || []), ...additionalScopes])];
|
|
181
|
+
return new JwtOAuthStrategy({
|
|
182
|
+
...this.config,
|
|
183
|
+
scopes: mergedScopes,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Gets the full token response including expiration and scopes.
|
|
188
|
+
* Useful for commands that need to display or return token metadata.
|
|
189
|
+
*/
|
|
190
|
+
async getTokenResponse() {
|
|
191
|
+
const cached = getCachedOAuthToken(this.cacheKey, this.config.scopes || []);
|
|
192
|
+
if (cached) {
|
|
193
|
+
this.logger.debug('[JwtOAuthStrategy] Reusing cached access token');
|
|
194
|
+
return cached;
|
|
195
|
+
}
|
|
196
|
+
// Get new token (returns full response)
|
|
197
|
+
return this.requestNewToken();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Invalidates the cached access token, forcing re-authentication on next request.
|
|
201
|
+
*/
|
|
202
|
+
invalidateToken() {
|
|
203
|
+
invalidateCachedOAuthToken(this.cacheKey);
|
|
204
|
+
this.logger.trace('[JwtOAuthStrategy] Token invalidated');
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Gets an access token string, using cached token if still valid.
|
|
208
|
+
*/
|
|
209
|
+
async getAccessToken() {
|
|
210
|
+
// Check global cache first
|
|
211
|
+
const cached = getCachedOAuthToken(this.cacheKey, this.config.scopes || []);
|
|
212
|
+
if (cached) {
|
|
213
|
+
this.logger.trace('[JwtOAuthStrategy] Using cached access token from global cache');
|
|
214
|
+
return cached.accessToken;
|
|
215
|
+
}
|
|
216
|
+
// Request new token and return just the access token string
|
|
217
|
+
const tokenResponse = await this.requestNewToken();
|
|
218
|
+
return tokenResponse.accessToken;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Requests a new access token from Account Manager using JWT Bearer flow.
|
|
222
|
+
* Returns the full token response and caches it.
|
|
223
|
+
*/
|
|
224
|
+
async requestNewToken() {
|
|
225
|
+
this.logger.trace('[JwtOAuthStrategy] Requesting new access token with JWT Bearer flow');
|
|
226
|
+
// Generate signed JWT
|
|
227
|
+
const jwt = await this.createSignedJwt();
|
|
228
|
+
// Request access token using JWT Bearer flow
|
|
229
|
+
const tokenUrl = `https://${this.config.accountManagerHost}/dwsso/oauth2/access_token`;
|
|
230
|
+
// IMPORTANT: JWT credentials go in POST body, NOT Authorization header
|
|
231
|
+
// This is the key difference from client_credentials flow
|
|
232
|
+
const params = new URLSearchParams({
|
|
233
|
+
grant_type: 'client_credentials',
|
|
234
|
+
client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
|
|
235
|
+
client_assertion: jwt, // ← JWT in body, not header
|
|
236
|
+
});
|
|
237
|
+
if (this.config.scopes && this.config.scopes.length > 0) {
|
|
238
|
+
params.append('scope', this.config.scopes.join(' '));
|
|
239
|
+
}
|
|
240
|
+
this.logger.trace({
|
|
241
|
+
tokenUrl,
|
|
242
|
+
clientId: this.config.clientId,
|
|
243
|
+
scopes: this.config.scopes,
|
|
244
|
+
}, '[JwtOAuthStrategy] Sending JWT Bearer token request');
|
|
245
|
+
// Build request object for middleware
|
|
246
|
+
let request = new Request(tokenUrl, {
|
|
247
|
+
method: 'POST',
|
|
248
|
+
headers: {
|
|
249
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
250
|
+
},
|
|
251
|
+
body: params.toString(),
|
|
252
|
+
});
|
|
253
|
+
// Apply auth middleware (e.g., User-Agent)
|
|
254
|
+
const middleware = globalAuthMiddlewareRegistry.getMiddleware();
|
|
255
|
+
request = await applyAuthRequestMiddleware(request, middleware);
|
|
256
|
+
let response = await fetch(request);
|
|
257
|
+
// Apply auth response middleware
|
|
258
|
+
response = await applyAuthResponseMiddleware(request, response, middleware);
|
|
259
|
+
if (!response.ok) {
|
|
260
|
+
const errorText = await response.text();
|
|
261
|
+
this.logger.error({
|
|
262
|
+
status: response.status,
|
|
263
|
+
statusText: response.statusText,
|
|
264
|
+
error: errorText,
|
|
265
|
+
}, '[JwtOAuthStrategy] JWT authentication failed');
|
|
266
|
+
// Provide helpful error messages for common issues
|
|
267
|
+
if (response.status === 401) {
|
|
268
|
+
throw new Error(`JWT authentication failed (401): Invalid JWT signature or unregistered certificate. ` +
|
|
269
|
+
`Ensure the certificate (${this.config.certPath}) is registered in Account Manager.`);
|
|
270
|
+
}
|
|
271
|
+
if (response.status === 400) {
|
|
272
|
+
throw new Error(`JWT authentication failed (400): ${errorText}`);
|
|
273
|
+
}
|
|
274
|
+
throw new Error(`JWT authentication failed: ${response.status} ${response.statusText}\n${errorText}`);
|
|
275
|
+
}
|
|
276
|
+
const data = (await response.json());
|
|
277
|
+
if (!data.access_token) {
|
|
278
|
+
throw new Error('No access token in response from Account Manager');
|
|
279
|
+
}
|
|
280
|
+
// Calculate token expiry (default 30 minutes if not specified)
|
|
281
|
+
const expiresInSeconds = data.expires_in ?? 1800;
|
|
282
|
+
const expiryDate = new Date(Date.now() + expiresInSeconds * 1000);
|
|
283
|
+
// Decode JWT to extract scopes (scope can be string or array)
|
|
284
|
+
const decoded = decodeJWT(data.access_token);
|
|
285
|
+
const scope = decoded.payload.scope;
|
|
286
|
+
const scopes = Array.isArray(scope) ? scope : scope?.split(' ') || this.config.scopes || [];
|
|
287
|
+
// Build and cache token response
|
|
288
|
+
const tokenResponse = {
|
|
289
|
+
accessToken: data.access_token,
|
|
290
|
+
expires: expiryDate,
|
|
291
|
+
scopes,
|
|
292
|
+
};
|
|
293
|
+
setCachedOAuthToken(this.cacheKey, tokenResponse);
|
|
294
|
+
this.logger.trace({
|
|
295
|
+
expiresIn: expiresInSeconds,
|
|
296
|
+
expiresAt: expiryDate.toISOString(),
|
|
297
|
+
scopes,
|
|
298
|
+
}, '[JwtOAuthStrategy] Access token obtained successfully');
|
|
299
|
+
return tokenResponse;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Creates and signs a JWT token for OAuth authentication.
|
|
303
|
+
* Uses RS256 algorithm and Base64URL encoding per RFC 7519.
|
|
304
|
+
*/
|
|
305
|
+
async createSignedJwt() {
|
|
306
|
+
const header = {
|
|
307
|
+
alg: 'RS256',
|
|
308
|
+
typ: 'JWT',
|
|
309
|
+
};
|
|
310
|
+
const encodedHeader = base64UrlEncode(JSON.stringify(header));
|
|
311
|
+
const now = Math.floor(Date.now() / 1000);
|
|
312
|
+
const tokenUrl = `https://${this.config.accountManagerHost}/dwsso/oauth2/access_token`;
|
|
313
|
+
const payload = {
|
|
314
|
+
iss: this.config.clientId,
|
|
315
|
+
sub: this.config.clientId,
|
|
316
|
+
aud: tokenUrl,
|
|
317
|
+
exp: now + 60,
|
|
318
|
+
};
|
|
319
|
+
const encodedPayload = base64UrlEncode(JSON.stringify(payload));
|
|
320
|
+
const signatureInput = `${encodedHeader}.${encodedPayload}`;
|
|
321
|
+
const signature = crypto.sign('RSA-SHA256', Buffer.from(signatureInput), this.privateKey);
|
|
322
|
+
const encodedSignature = base64UrlEncode(signature);
|
|
323
|
+
const jwt = `${encodedHeader}.${encodedPayload}.${encodedSignature}`;
|
|
324
|
+
this.logger.trace({
|
|
325
|
+
header,
|
|
326
|
+
payload: {
|
|
327
|
+
...payload,
|
|
328
|
+
exp: new Date(payload.exp * 1000).toISOString(),
|
|
329
|
+
},
|
|
330
|
+
}, '[JwtOAuthStrategy] Generated JWT token');
|
|
331
|
+
return jwt;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Encodes data as Base64URL (RFC 4648 Section 5).
|
|
336
|
+
* Replaces +/= with URL-safe characters.
|
|
337
|
+
*/
|
|
338
|
+
function base64UrlEncode(data) {
|
|
339
|
+
const buffer = typeof data === 'string' ? Buffer.from(data) : data;
|
|
340
|
+
const base64 = buffer.toString('base64');
|
|
341
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=oauth-jwt.js.map
|