@vercel/oidc 3.6.1 → 3.7.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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @vercel/oidc
2
2
 
3
+ ## 3.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 415fde0: Add optional `audience` and `jti` parameters to exchange Vercel OIDC tokens for use with AWS STS and other providers.
8
+
9
+ ## 3.6.2
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [3f21605]
14
+ - @vercel/cli-exec@1.0.0
15
+
3
16
  ## 3.6.1
4
17
 
5
18
  ### Patch Changes
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The options for the `exchangeVercelOidcToken` function.
3
+ *
4
+ * @typedef {Object} ExchangeVercelOidcTokenOptions
5
+ * @property {string} token - The token to exchange.
6
+ * @property {string} audience - Optional audience to set on the exchanged token.
7
+ * @property {string} jti - Optional JTI to set on the exchanged token.
8
+ */
9
+ export interface ExchangeVercelOidcTokenOptions {
10
+ /**
11
+ * The token to exchange.
12
+ */
13
+ token: string;
14
+ /**
15
+ * Optional audience to set on the exchanged token.
16
+ * @default undefined
17
+ */
18
+ audience?: string;
19
+ /**
20
+ * Optional JTI to set on the exchanged token.
21
+ * @default undefined
22
+ */
23
+ jti?: string;
24
+ }
25
+ /**
26
+ * Exchanges a Vercel OIDC token for a Vercel token with a custom audience.
27
+ *
28
+ * @param {ExchangeVercelOidcTokenOptions} options - The options for the exchange.
29
+ * @param {string} options.token - The token to exchange.
30
+ * @param {string} options.audience - Optional audience to set on the exchanged token.
31
+ * @param {string} options.jti - Optional JTI to set on the exchanged token.
32
+ * @throws {Error} If the token exchange fails.
33
+ * @returns {Promise<string>} A promise that resolves to the exchanged token.
34
+ */
35
+ export declare function exchangeVercelOidcToken(options: ExchangeVercelOidcTokenOptions): Promise<string>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var exchange_vercel_oidc_token_exports = {};
20
+ __export(exchange_vercel_oidc_token_exports, {
21
+ exchangeVercelOidcToken: () => exchangeVercelOidcToken
22
+ });
23
+ module.exports = __toCommonJS(exchange_vercel_oidc_token_exports);
24
+ var import_version = require("./version");
25
+ async function exchangeVercelOidcToken(options) {
26
+ const response = await fetch("https://oidc.vercel.com/~token", {
27
+ method: "POST",
28
+ headers: {
29
+ "Content-Type": "application/json",
30
+ Accept: "application/json",
31
+ "User-Agent": `@vercel/oidc@${import_version.version}`
32
+ },
33
+ body: JSON.stringify({
34
+ token: options.token,
35
+ aud: options.audience,
36
+ ...options.jti ? { jti: options.jti } : void 0
37
+ })
38
+ });
39
+ if (!response.ok) {
40
+ throw new Error(
41
+ `Failed to exchange token: ${await readErrorMessage(response)}`
42
+ );
43
+ }
44
+ let data;
45
+ try {
46
+ data = await response.json();
47
+ } catch (_error) {
48
+ throw new Error("Failed to exchange token: response was not valid JSON");
49
+ }
50
+ if (!data || typeof data !== "object" || !("token" in data) || typeof data.token !== "string") {
51
+ throw new Error(
52
+ "Failed to exchange token: response did not contain a token"
53
+ );
54
+ }
55
+ return data.token;
56
+ }
57
+ async function readErrorMessage(response) {
58
+ try {
59
+ const data = await response.json();
60
+ if (data && typeof data === "object" && "error" in data && typeof data.error === "string") {
61
+ return data.error;
62
+ }
63
+ } catch (_error) {
64
+ }
65
+ return response.statusText || `HTTP ${response.status}`;
66
+ }
67
+ // Annotate the CommonJS export names for ESM import in node:
68
+ 0 && (module.exports = {
69
+ exchangeVercelOidcToken
70
+ });
@@ -1,7 +1,8 @@
1
+ import { type ExchangeVercelOidcTokenOptions } from './exchange-vercel-oidc-token';
1
2
  /**
2
3
  * Options for getting the Vercel OIDC token.
3
4
  */
4
- export interface GetVercelOidcTokenOptions {
5
+ export interface GetVercelOidcTokenOptions extends Omit<ExchangeVercelOidcTokenOptions, 'token'> {
5
6
  /**
6
7
  * Optional team ID (team_*) or slug to use for token refresh.
7
8
  * When provided, this team will be used instead of reading from `.vercel/project.json`.
@@ -31,6 +31,7 @@ __export(get_vercel_oidc_token_with_refresh_exports, {
31
31
  getVercelOidcToken: () => getVercelOidcToken
32
32
  });
33
33
  module.exports = __toCommonJS(get_vercel_oidc_token_with_refresh_exports);
34
+ var import_exchange_vercel_oidc_token = require("./exchange-vercel-oidc-token");
34
35
  var import_get_vercel_oidc_token_sync = require("./get-vercel-oidc-token-sync");
35
36
  var import_token_error = require("./token-error");
36
37
  async function getVercelOidcToken(options) {
@@ -61,6 +62,13 @@ ${error.message}`;
61
62
  }
62
63
  throw error;
63
64
  }
65
+ if (options?.audience) {
66
+ token = await (0, import_exchange_vercel_oidc_token.exchangeVercelOidcToken)({
67
+ token,
68
+ audience: options.audience,
69
+ jti: options.jti
70
+ });
71
+ }
64
72
  return token;
65
73
  }
66
74
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,12 +1,14 @@
1
+ import { ExchangeVercelOidcTokenOptions } from './exchange-vercel-oidc-token';
1
2
  export { getContext } from './get-context';
2
3
  export { verifyVercelOidcToken, type VercelOidcPayload, } from './verify-vercel-oidc-token';
3
4
  export { AccessTokenMissingError, RefreshAccessTokenFailedError, } from './auth-errors';
4
5
  export { getVercelOidcTokenSync } from './get-vercel-oidc-token-sync';
6
+ export { exchangeVercelOidcToken, type ExchangeVercelOidcTokenOptions, } from './exchange-vercel-oidc-token';
5
7
  /**
6
8
  * Gets the current OIDC token in Edge Runtime.
7
9
  *
8
10
  * Edge Runtime does not support automatic token refresh, so this returns the
9
11
  * request-scoped token without checking expiration.
10
12
  */
11
- export declare function getVercelOidcToken(): Promise<string>;
13
+ export declare function getVercelOidcToken(options?: ExchangeVercelOidcTokenOptions): Promise<string>;
12
14
  export declare function getVercelToken(): Promise<string>;
@@ -20,6 +20,7 @@ var index_edge_light_exports = {};
20
20
  __export(index_edge_light_exports, {
21
21
  AccessTokenMissingError: () => import_auth_errors.AccessTokenMissingError,
22
22
  RefreshAccessTokenFailedError: () => import_auth_errors.RefreshAccessTokenFailedError,
23
+ exchangeVercelOidcToken: () => import_exchange_vercel_oidc_token2.exchangeVercelOidcToken,
23
24
  getContext: () => import_get_context.getContext,
24
25
  getVercelOidcToken: () => getVercelOidcToken,
25
26
  getVercelOidcTokenSync: () => import_get_vercel_oidc_token_sync2.getVercelOidcTokenSync,
@@ -27,13 +28,23 @@ __export(index_edge_light_exports, {
27
28
  verifyVercelOidcToken: () => import_verify_vercel_oidc_token.verifyVercelOidcToken
28
29
  });
29
30
  module.exports = __toCommonJS(index_edge_light_exports);
31
+ var import_exchange_vercel_oidc_token = require("./exchange-vercel-oidc-token");
30
32
  var import_get_vercel_oidc_token_sync = require("./get-vercel-oidc-token-sync");
31
33
  var import_get_context = require("./get-context");
32
34
  var import_verify_vercel_oidc_token = require("./verify-vercel-oidc-token");
33
35
  var import_auth_errors = require("./auth-errors");
34
36
  var import_get_vercel_oidc_token_sync2 = require("./get-vercel-oidc-token-sync");
35
- async function getVercelOidcToken() {
36
- return (0, import_get_vercel_oidc_token_sync.getVercelOidcTokenSync)();
37
+ var import_exchange_vercel_oidc_token2 = require("./exchange-vercel-oidc-token");
38
+ async function getVercelOidcToken(options) {
39
+ let token = (0, import_get_vercel_oidc_token_sync.getVercelOidcTokenSync)();
40
+ if (options?.audience) {
41
+ token = await (0, import_exchange_vercel_oidc_token.exchangeVercelOidcToken)({
42
+ token,
43
+ audience: options.audience,
44
+ jti: options.jti
45
+ });
46
+ }
47
+ return token;
37
48
  }
38
49
  async function getVercelToken() {
39
50
  throw new Error("getVercelToken is not supported in Edge Runtime");
@@ -42,6 +53,7 @@ async function getVercelToken() {
42
53
  0 && (module.exports = {
43
54
  AccessTokenMissingError,
44
55
  RefreshAccessTokenFailedError,
56
+ exchangeVercelOidcToken,
45
57
  getContext,
46
58
  getVercelOidcToken,
47
59
  getVercelOidcTokenSync,
package/dist/index.d.ts CHANGED
@@ -3,4 +3,5 @@ export { getVercelOidcTokenSync } from './get-vercel-oidc-token-sync';
3
3
  export { getContext } from './get-context';
4
4
  export { verifyVercelOidcToken, type VercelOidcPayload, } from './verify-vercel-oidc-token';
5
5
  export { AccessTokenMissingError, RefreshAccessTokenFailedError, } from './auth-errors';
6
- export { getVercelToken } from './token-util';
6
+ export { exchangeVercelOidcToken, type ExchangeVercelOidcTokenOptions, } from './exchange-vercel-oidc-token';
7
+ export { getVercelToken, type GetVercelTokenOptions, } from './token-util';
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ var src_exports = {};
20
20
  __export(src_exports, {
21
21
  AccessTokenMissingError: () => import_auth_errors.AccessTokenMissingError,
22
22
  RefreshAccessTokenFailedError: () => import_auth_errors.RefreshAccessTokenFailedError,
23
+ exchangeVercelOidcToken: () => import_exchange_vercel_oidc_token.exchangeVercelOidcToken,
23
24
  getContext: () => import_get_context.getContext,
24
25
  getVercelOidcToken: () => import_get_vercel_oidc_token_with_refresh.getVercelOidcToken,
25
26
  getVercelOidcTokenSync: () => import_get_vercel_oidc_token_sync.getVercelOidcTokenSync,
@@ -32,11 +33,13 @@ var import_get_vercel_oidc_token_sync = require("./get-vercel-oidc-token-sync");
32
33
  var import_get_context = require("./get-context");
33
34
  var import_verify_vercel_oidc_token = require("./verify-vercel-oidc-token");
34
35
  var import_auth_errors = require("./auth-errors");
36
+ var import_exchange_vercel_oidc_token = require("./exchange-vercel-oidc-token");
35
37
  var import_token_util = require("./token-util");
36
38
  // Annotate the CommonJS export names for ESM import in node:
37
39
  0 && (module.exports = {
38
40
  AccessTokenMissingError,
39
41
  RefreshAccessTokenFailedError,
42
+ exchangeVercelOidcToken,
40
43
  getContext,
41
44
  getVercelOidcToken,
42
45
  getVercelOidcTokenSync,
@@ -0,0 +1 @@
1
+ export declare const version = "3.7.0";
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var version_exports = {};
20
+ __export(version_exports, {
21
+ version: () => version
22
+ });
23
+ module.exports = __toCommonJS(version_exports);
24
+ const version = "3.7.0";
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ version
28
+ });
package/docs/README.md CHANGED
@@ -9,12 +9,18 @@
9
9
  - [AccessTokenMissingError](classes/AccessTokenMissingError.md)
10
10
  - [RefreshAccessTokenFailedError](classes/RefreshAccessTokenFailedError.md)
11
11
 
12
+ ## Interfaces
13
+
14
+ - [ExchangeVercelOidcTokenOptions](interfaces/ExchangeVercelOidcTokenOptions.md)
15
+ - [GetVercelTokenOptions](interfaces/GetVercelTokenOptions.md)
16
+
12
17
  ## Type Aliases
13
18
 
14
19
  - [VercelOidcPayload](type-aliases/VercelOidcPayload.md)
15
20
 
16
21
  ## Functions
17
22
 
23
+ - [exchangeVercelOidcToken](functions/exchangeVercelOidcToken.md)
18
24
  - [getContext](functions/getContext.md)
19
25
  - [getVercelOidcToken](functions/getVercelOidcToken.md)
20
26
  - [getVercelOidcTokenSync](functions/getVercelOidcTokenSync.md)
@@ -0,0 +1,29 @@
1
+ [**@vercel/oidc**](../README.md)
2
+
3
+ ---
4
+
5
+ # Function: exchangeVercelOidcToken()
6
+
7
+ > **exchangeVercelOidcToken**(`options`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`string`\>
8
+
9
+ Defined in: [packages/oidc/src/exchange-vercel-oidc-token.ts:38](https://github.com/vercel/vercel/blob/main/packages/oidc/src/exchange-vercel-oidc-token.ts#L38)
10
+
11
+ Exchanges a Vercel OIDC token for a Vercel token with a custom audience.
12
+
13
+ ## Parameters
14
+
15
+ ### options
16
+
17
+ [`ExchangeVercelOidcTokenOptions`](../interfaces/ExchangeVercelOidcTokenOptions.md)
18
+
19
+ The options for the exchange.
20
+
21
+ ## Returns
22
+
23
+ [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`string`\>
24
+
25
+ A promise that resolves to the exchanged token.
26
+
27
+ ## Throws
28
+
29
+ If the token exchange fails.
@@ -6,7 +6,7 @@
6
6
 
7
7
  > **getVercelOidcToken**(`options?`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`string`\>
8
8
 
9
- Defined in: [packages/oidc/src/get-vercel-oidc-token-with-refresh.ts:64](https://github.com/vercel/vercel/blob/main/packages/oidc/src/get-vercel-oidc-token-with-refresh.ts#L64)
9
+ Defined in: [packages/oidc/src/get-vercel-oidc-token-with-refresh.ts:69](https://github.com/vercel/vercel/blob/main/packages/oidc/src/get-vercel-oidc-token-with-refresh.ts#L69)
10
10
 
11
11
  Gets the current OIDC token from the request context or the environment variable.
12
12
 
@@ -12,7 +12,7 @@ Defined in: [packages/oidc/src/token-util.ts:27](https://github.com/vercel/verce
12
12
 
13
13
  ### options?
14
14
 
15
- `GetVercelTokenOptions`
15
+ [`GetVercelTokenOptions`](../interfaces/GetVercelTokenOptions.md)
16
16
 
17
17
  ## Returns
18
18
 
@@ -0,0 +1,39 @@
1
+ [**@vercel/oidc**](../README.md)
2
+
3
+ ---
4
+
5
+ # Interface: ExchangeVercelOidcTokenOptions
6
+
7
+ Defined in: [packages/oidc/src/exchange-vercel-oidc-token.ts:11](https://github.com/vercel/vercel/blob/main/packages/oidc/src/exchange-vercel-oidc-token.ts#L11)
8
+
9
+ The options for the `exchangeVercelOidcToken` function.
10
+
11
+ ## Properties
12
+
13
+ ### audience?
14
+
15
+ > `optional` **audience?**: `string`
16
+
17
+ Defined in: [packages/oidc/src/exchange-vercel-oidc-token.ts:20](https://github.com/vercel/vercel/blob/main/packages/oidc/src/exchange-vercel-oidc-token.ts#L20)
18
+
19
+ Optional audience to set on the exchanged token.
20
+
21
+ ---
22
+
23
+ ### jti?
24
+
25
+ > `optional` **jti?**: `string`
26
+
27
+ Defined in: [packages/oidc/src/exchange-vercel-oidc-token.ts:25](https://github.com/vercel/vercel/blob/main/packages/oidc/src/exchange-vercel-oidc-token.ts#L25)
28
+
29
+ Optional JTI to set on the exchanged token.
30
+
31
+ ---
32
+
33
+ ### token
34
+
35
+ > **token**: `string`
36
+
37
+ Defined in: [packages/oidc/src/exchange-vercel-oidc-token.ts:15](https://github.com/vercel/vercel/blob/main/packages/oidc/src/exchange-vercel-oidc-token.ts#L15)
38
+
39
+ The token to exchange.
@@ -0,0 +1,24 @@
1
+ [**@vercel/oidc**](../README.md)
2
+
3
+ ---
4
+
5
+ # Interface: GetVercelTokenOptions
6
+
7
+ Defined in: [packages/oidc/src/token-util.ts:18](https://github.com/vercel/vercel/blob/main/packages/oidc/src/token-util.ts#L18)
8
+
9
+ ## Properties
10
+
11
+ ### expirationBufferMs?
12
+
13
+ > `optional` **expirationBufferMs?**: `number`
14
+
15
+ Defined in: [packages/oidc/src/token-util.ts:24](https://github.com/vercel/vercel/blob/main/packages/oidc/src/token-util.ts#L24)
16
+
17
+ Optional time buffer in milliseconds before token expiry to consider it expired.
18
+ When provided, the token will be refreshed if it expires within this buffer time.
19
+
20
+ #### Default
21
+
22
+ ```ts
23
+ 0;
24
+ ```
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "require": "./dist/index.js"
19
19
  }
20
20
  },
21
- "version": "3.6.1",
21
+ "version": "3.7.0",
22
22
  "repository": {
23
23
  "directory": "packages/oidc",
24
24
  "type": "git",
@@ -30,7 +30,7 @@
30
30
  "dependencies": {
31
31
  "jose": "^5.9.6",
32
32
  "@vercel/cli-config": "0.2.0",
33
- "@vercel/cli-exec": "0.1.1"
33
+ "@vercel/cli-exec": "1.0.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "prettier": "3.8.3",
@@ -52,7 +52,7 @@
52
52
  "pretest": "pnpm run build:code",
53
53
  "test": "vitest",
54
54
  "build": "pnpm run build:code && pnpm run build:docs",
55
- "build:code": "node ../../utils/build.mjs",
55
+ "build:code": "node build.mjs",
56
56
  "build:docs": "typedoc && prettier --write docs/**/*.md docs/*.md"
57
57
  }
58
58
  }