@sebspark/gcp-iam 1.1.1 → 1.2.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/index.d.mts CHANGED
@@ -8,10 +8,9 @@ import { Logger } from 'winston';
8
8
  * @param logger An optional logger to use for logging.
9
9
  * @returns A JWT.
10
10
  */
11
- declare const getApiGatewayTokenByUrl: ({ apiURL, key, ttl, logger, }: {
11
+ declare const getApiGatewayTokenByUrl: ({ apiURL, key, logger, }: {
12
12
  apiURL: string;
13
13
  key?: string;
14
- ttl?: number;
15
14
  logger?: Logger;
16
15
  }) => Promise<string>;
17
16
  /**
package/dist/index.d.ts CHANGED
@@ -8,10 +8,9 @@ import { Logger } from 'winston';
8
8
  * @param logger An optional logger to use for logging.
9
9
  * @returns A JWT.
10
10
  */
11
- declare const getApiGatewayTokenByUrl: ({ apiURL, key, ttl, logger, }: {
11
+ declare const getApiGatewayTokenByUrl: ({ apiURL, key, logger, }: {
12
12
  apiURL: string;
13
13
  key?: string;
14
- ttl?: number;
15
14
  logger?: Logger;
16
15
  }) => Promise<string>;
17
16
  /**
package/dist/index.js CHANGED
@@ -72,17 +72,11 @@ var LruCache = class {
72
72
  // src/apiGatewayToken.ts
73
73
  var expInSeconds = 60 * 60;
74
74
  var apiGatewayJwtCache = new LruCache();
75
- var getApiGatewayTokenByUrl = async ({
75
+ var generateTokenByUrl = async ({
76
76
  apiURL,
77
77
  key,
78
- ttl,
79
78
  logger
80
79
  }) => {
81
- const cachedJwt = apiGatewayJwtCache.get(key || apiURL);
82
- if (cachedJwt) {
83
- logger?.debug(`JWT for ${key || apiURL} found in cache.`);
84
- return cachedJwt;
85
- }
86
80
  try {
87
81
  const iamClient = new import_iam_credentials.IAMCredentialsClient();
88
82
  const auth = new import_google_auth_library.GoogleAuth();
@@ -91,7 +85,7 @@ var getApiGatewayTokenByUrl = async ({
91
85
  if (!serviceAccountEmail) {
92
86
  throw new Error("No service account e-mail could be found.");
93
87
  }
94
- logger?.info(`Serice account e-mail beeing used: ${serviceAccountEmail}`);
88
+ logger?.info(`Service account e-mail being used: ${serviceAccountEmail}`);
95
89
  const header = {
96
90
  alg: "RS256",
97
91
  typ: "JWT"
@@ -124,7 +118,6 @@ var getApiGatewayTokenByUrl = async ({
124
118
  );
125
119
  const signature = Buffer.from(response.signedBlob).toString("base64");
126
120
  const signedJWT = `${unsignedJWT}.${signature}`;
127
- apiGatewayJwtCache.put(key || apiURL, signedJWT, ttl);
128
121
  return signedJWT;
129
122
  } catch (error) {
130
123
  if (process.env.GCP_IAM_SOFT_FAIL === "true") {
@@ -135,10 +128,35 @@ var getApiGatewayTokenByUrl = async ({
135
128
  throw new Error(`Error generating system JWT: ${JSON.stringify(error)}`);
136
129
  }
137
130
  };
131
+ var getApiGatewayTokenByUrl = async ({
132
+ apiURL,
133
+ key,
134
+ logger
135
+ }) => {
136
+ return checkCache({
137
+ cacheKey: key || apiURL,
138
+ generate: () => generateTokenByUrl({ apiURL, key, logger }),
139
+ logger
140
+ });
141
+ };
138
142
  var clearCache = async (key) => {
139
143
  apiGatewayJwtCache.clear(key);
140
144
  };
141
- var getApiGatewayTokenByClientId = async (clientId, logger) => {
145
+ var checkCache = ({
146
+ cacheKey,
147
+ generate,
148
+ logger
149
+ }) => {
150
+ const cachedJwt = apiGatewayJwtCache.get(cacheKey);
151
+ if (cachedJwt) {
152
+ logger?.debug(`JWT for ${cacheKey} found in cache.`);
153
+ return cachedJwt;
154
+ }
155
+ const jwtPromise = generate();
156
+ apiGatewayJwtCache.put(cacheKey, jwtPromise, expInSeconds / 2);
157
+ return jwtPromise;
158
+ };
159
+ var generateTokenByClientId = async (clientId, logger) => {
142
160
  try {
143
161
  const auth = new import_google_auth_library.GoogleAuth({
144
162
  scopes: "https://www.googleapis.com/auth/cloud-platform"
@@ -155,6 +173,13 @@ var getApiGatewayTokenByClientId = async (clientId, logger) => {
155
173
  throw new Error(`Error generating system JWT: ${JSON.stringify(error)}`);
156
174
  }
157
175
  };
176
+ var getApiGatewayTokenByClientId = async (clientId, logger) => {
177
+ return checkCache({
178
+ cacheKey: clientId,
179
+ generate: () => generateTokenByClientId(clientId),
180
+ logger
181
+ });
182
+ };
158
183
  // Annotate the CommonJS export names for ESM import in node:
159
184
  0 && (module.exports = {
160
185
  clearCache,
package/dist/index.mjs CHANGED
@@ -44,17 +44,11 @@ var LruCache = class {
44
44
  // src/apiGatewayToken.ts
45
45
  var expInSeconds = 60 * 60;
46
46
  var apiGatewayJwtCache = new LruCache();
47
- var getApiGatewayTokenByUrl = async ({
47
+ var generateTokenByUrl = async ({
48
48
  apiURL,
49
49
  key,
50
- ttl,
51
50
  logger
52
51
  }) => {
53
- const cachedJwt = apiGatewayJwtCache.get(key || apiURL);
54
- if (cachedJwt) {
55
- logger?.debug(`JWT for ${key || apiURL} found in cache.`);
56
- return cachedJwt;
57
- }
58
52
  try {
59
53
  const iamClient = new IAMCredentialsClient();
60
54
  const auth = new GoogleAuth();
@@ -63,7 +57,7 @@ var getApiGatewayTokenByUrl = async ({
63
57
  if (!serviceAccountEmail) {
64
58
  throw new Error("No service account e-mail could be found.");
65
59
  }
66
- logger?.info(`Serice account e-mail beeing used: ${serviceAccountEmail}`);
60
+ logger?.info(`Service account e-mail being used: ${serviceAccountEmail}`);
67
61
  const header = {
68
62
  alg: "RS256",
69
63
  typ: "JWT"
@@ -96,7 +90,6 @@ var getApiGatewayTokenByUrl = async ({
96
90
  );
97
91
  const signature = Buffer.from(response.signedBlob).toString("base64");
98
92
  const signedJWT = `${unsignedJWT}.${signature}`;
99
- apiGatewayJwtCache.put(key || apiURL, signedJWT, ttl);
100
93
  return signedJWT;
101
94
  } catch (error) {
102
95
  if (process.env.GCP_IAM_SOFT_FAIL === "true") {
@@ -107,10 +100,35 @@ var getApiGatewayTokenByUrl = async ({
107
100
  throw new Error(`Error generating system JWT: ${JSON.stringify(error)}`);
108
101
  }
109
102
  };
103
+ var getApiGatewayTokenByUrl = async ({
104
+ apiURL,
105
+ key,
106
+ logger
107
+ }) => {
108
+ return checkCache({
109
+ cacheKey: key || apiURL,
110
+ generate: () => generateTokenByUrl({ apiURL, key, logger }),
111
+ logger
112
+ });
113
+ };
110
114
  var clearCache = async (key) => {
111
115
  apiGatewayJwtCache.clear(key);
112
116
  };
113
- var getApiGatewayTokenByClientId = async (clientId, logger) => {
117
+ var checkCache = ({
118
+ cacheKey,
119
+ generate,
120
+ logger
121
+ }) => {
122
+ const cachedJwt = apiGatewayJwtCache.get(cacheKey);
123
+ if (cachedJwt) {
124
+ logger?.debug(`JWT for ${cacheKey} found in cache.`);
125
+ return cachedJwt;
126
+ }
127
+ const jwtPromise = generate();
128
+ apiGatewayJwtCache.put(cacheKey, jwtPromise, expInSeconds / 2);
129
+ return jwtPromise;
130
+ };
131
+ var generateTokenByClientId = async (clientId, logger) => {
114
132
  try {
115
133
  const auth = new GoogleAuth({
116
134
  scopes: "https://www.googleapis.com/auth/cloud-platform"
@@ -127,6 +145,13 @@ var getApiGatewayTokenByClientId = async (clientId, logger) => {
127
145
  throw new Error(`Error generating system JWT: ${JSON.stringify(error)}`);
128
146
  }
129
147
  };
148
+ var getApiGatewayTokenByClientId = async (clientId, logger) => {
149
+ return checkCache({
150
+ cacheKey: clientId,
151
+ generate: () => generateTokenByClientId(clientId),
152
+ logger
153
+ });
154
+ };
130
155
  export {
131
156
  clearCache,
132
157
  getApiGatewayTokenByClientId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/gcp-iam",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",