Skip to content

Commit 240f587

Browse files
committed
chore(token-providers): add provider to retrieve token from environment variable
1 parent ab952cb commit 240f587

File tree

6 files changed

+84
-0
lines changed

6 files changed

+84
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from "./aws_sdk";
2+
export * from "./utils/getBearerTokenEnvKey";

packages/token-providers/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
},
2828
"license": "Apache-2.0",
2929
"dependencies": {
30+
"@aws-sdk/core": "*",
3031
"@aws-sdk/nested-clients": "*",
3132
"@aws-sdk/types": "*",
3233
"@smithy/property-provider": "^4.0.2",
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { getBearerTokenEnvKey } from "@aws-sdk/core";
2+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3+
4+
import { fromEnvBearerToken } from "./fromEnvBearerToken";
5+
6+
vi.mock("@aws-sdk/core");
7+
8+
describe("fromEnvBearerToken", () => {
9+
const originalEnv = process.env;
10+
const mockInit = { signingName: "signing name" };
11+
const mockBearerTokenEnvKey = "AWS_BEARER_TOKEN_SIGNING_NAME";
12+
13+
beforeEach(() => {
14+
process.env = { ...originalEnv };
15+
vi.mocked(getBearerTokenEnvKey).mockReturnValue(mockBearerTokenEnvKey);
16+
});
17+
18+
afterEach(() => {
19+
process.env = originalEnv;
20+
vi.clearAllMocks();
21+
});
22+
23+
describe("throws error", () => {
24+
it("when signingName is not passed", async () => {
25+
await expect(fromEnvBearerToken()()).rejects.toThrow(
26+
"Please pass 'signingName' to compute environment variable key"
27+
);
28+
expect(getBearerTokenEnvKey).not.toHaveBeenCalled();
29+
});
30+
31+
it("when token is not present in environment variable", async () => {
32+
await expect(fromEnvBearerToken(mockInit)()).rejects.toThrow(
33+
`Token not present in '${mockBearerTokenEnvKey}' environment variable`
34+
);
35+
expect(getBearerTokenEnvKey).toHaveBeenCalledWith(mockInit.signingName);
36+
});
37+
});
38+
39+
it("returns token from environment variable", async () => {
40+
const mockBearerToken = "mock-bearer-token";
41+
process.env[mockBearerTokenEnvKey] = mockBearerToken;
42+
const token = await fromEnvBearerToken(mockInit)();
43+
expect(token).toEqual({ token: mockBearerToken });
44+
expect(getBearerTokenEnvKey).toHaveBeenCalledWith(mockInit.signingName);
45+
});
46+
});
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { getBearerTokenEnvKey } from "@aws-sdk/core";
2+
import type { CredentialProviderOptions, TokenIdentityProvider } from "@aws-sdk/types";
3+
import { TokenProviderError } from "@smithy/property-provider";
4+
5+
export interface FromEnvBearerTokenInit extends CredentialProviderOptions {
6+
signingName?: string;
7+
}
8+
9+
/**
10+
* Creates a TokenIdentityProvider that retrieves bearer token from environment variable
11+
*
12+
* @param options - Configuration options for the token provider
13+
* @param options.logger - Optional logger for debug messages
14+
* @param options.signingName - Service signing name used to determine environment variable key
15+
* @returns TokenIdentityProvider that provides bearer token from environment variable
16+
*
17+
* @public
18+
*/
19+
export const fromEnvBearerToken =
20+
({ logger, signingName }: FromEnvBearerTokenInit = {}): TokenIdentityProvider =>
21+
async () => {
22+
logger?.debug("@aws-sdk/token-providers - fromEnvBearerToken");
23+
24+
if (!signingName) {
25+
throw new TokenProviderError("Please pass 'signingName' to compute environment variable key", { logger });
26+
}
27+
28+
const bearerTokenKey = getBearerTokenEnvKey(signingName);
29+
if (!(bearerTokenKey in process.env)) {
30+
throw new TokenProviderError(`Token not present in '${bearerTokenKey}' environment variable`, { logger });
31+
}
32+
33+
return { token: process.env[bearerTokenKey]! };
34+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from "./fromEnvBearerToken";
12
export * from "./fromSso";
23
export * from "./fromStatic";
34
export * from "./nodeProvider";

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23675,6 +23675,7 @@ __metadata:
2367523675
version: 0.0.0-use.local
2367623676
resolution: "@aws-sdk/token-providers@workspace:packages/token-providers"
2367723677
dependencies:
23678+
"@aws-sdk/core": "npm:*"
2367823679
"@aws-sdk/nested-clients": "npm:*"
2367923680
"@aws-sdk/types": "npm:*"
2368023681
"@smithy/property-provider": "npm:^4.0.2"

0 commit comments

Comments
 (0)