@skillswaveca/nova-shared-libraries 4.18.1 → 4.19.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.
@@ -1,31 +1,31 @@
1
1
  export const packageInfo = [
2
2
  {
3
3
  "name": "@skillswaveca/nova-utils",
4
- "version": "4.18.0",
4
+ "version": "4.18.2",
5
5
  "description": "A collection of random utils used in nova repos",
6
6
  "docsPath": "./nova-utils/index.html"
7
7
  },
8
8
  {
9
9
  "name": "@skillswaveca/nova-router",
10
- "version": "4.18.0",
10
+ "version": "4.18.2",
11
11
  "description": "An extended Koa router that enables better validation",
12
12
  "docsPath": "./nova-router/index.html"
13
13
  },
14
14
  {
15
15
  "name": "@skillswaveca/nova-model",
16
- "version": "4.18.0",
16
+ "version": "4.18.2",
17
17
  "description": "Nova model stuff",
18
18
  "docsPath": "./nova-model/index.html"
19
19
  },
20
20
  {
21
21
  "name": "@skillswaveca/nova-middleware",
22
- "version": "4.18.0",
22
+ "version": "4.18.2",
23
23
  "description": "A collection of middleware used by nova projects",
24
24
  "docsPath": "./nova-middleware/index.html"
25
25
  },
26
26
  {
27
27
  "name": "@skillswaveca/nova-drivers",
28
- "version": "4.18.0",
28
+ "version": "4.18.2",
29
29
  "description": "Some helper drivers for AWS services",
30
30
  "docsPath": "./drivers/index.html"
31
31
  }
package/index.js CHANGED
@@ -10,6 +10,7 @@ export * from './packages/drivers/src/nova-driver.js';
10
10
  export * from './packages/drivers/src/kraken-driver.js';
11
11
  export * from './packages/drivers/src/http.js';
12
12
  export * from './packages/drivers/src/config.js';
13
+ export * from './packages/drivers/src/base-driver.js';
13
14
  export * from './packages/nova-model/src/stream/nova-stream-task-router.js';
14
15
  export * from './packages/nova-model/src/repo/nova-model-repo.js';
15
16
  export * from './packages/nova-model/src/repo/api-token.js';
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "@skillswaveca/nova-shared-libraries",
4
4
  "description": "A monorepo of shared libraries for Nova projects.",
5
5
  "repository": "https://github.com/SkillsWave/nova-shared-libraries",
6
- "version": "4.18.1",
6
+ "version": "4.19.0",
7
7
  "main": "index.js",
8
8
  "license": "MIT",
9
9
  "keywords": [],
@@ -4,6 +4,7 @@ export * from './src/nova-driver.js';
4
4
  export * from './src/kraken-driver.js';
5
5
  export * from './src/http.js';
6
6
  export * from './src/config.js';
7
+ export * from './src/base-driver.js';
7
8
  export * from './src/aws/sqs.js';
8
9
  export * from './src/aws/secrets-manager.js';
9
10
  export * from './src/aws/parameter-store.js';
@@ -3,7 +3,7 @@
3
3
  "name": "@skillswaveca/nova-drivers",
4
4
  "description": "Some helper drivers for AWS services",
5
5
  "repository": "https://github.com/SkillsWave/nova-shared-libraries",
6
- "version": "4.18.1",
6
+ "version": "4.19.0",
7
7
  "main": "index.js",
8
8
  "scripts": {
9
9
  "pre-release": "pnpm run create-index",
@@ -1,5 +1,5 @@
1
1
  import xray from 'aws-xray-sdk-core';
2
- import { NovaDriver } from '../nova-driver.js';
2
+ import { BaseDriver } from '../base-driver.js';
3
3
 
4
4
  /**
5
5
  * Base driver for AWS services. You can extend this driver with any AWS service to set the client and automatically capture AWS X-Ray traces.
@@ -13,7 +13,7 @@ import { NovaDriver } from '../nova-driver.js';
13
13
  * }
14
14
  * }
15
15
  */
16
- export class AwsBaseDriver extends NovaDriver {
16
+ export class AwsBaseDriver extends BaseDriver {
17
17
 
18
18
  /**
19
19
  * Constructor for the AWS base driver.
@@ -0,0 +1,27 @@
1
+ import { DEFAULT_CONFIG } from './config.js';
2
+
3
+ export class BaseDriver {
4
+
5
+ constructor(configOverrides = {}) {
6
+ this.config = { ...DEFAULT_CONFIG, ...configOverrides };
7
+ this.log = this.config.logger;
8
+ this.enabled = this.config.enabled;
9
+ this.novaRequestId = null;
10
+ this.region = this.config.aws.region;
11
+ this.rootEnvironmentAwsAccountId = this.config.rootEnvironmentAwsAccountId;
12
+ }
13
+
14
+ /**
15
+ * Provides a way to override the context of the driver. Specifically useful for logging
16
+ * and sending requests making use of the `distributedLoggingMiddleware` and it's reliance
17
+ * on the http header `x-nova-request-id`
18
+ *
19
+ * @param novaRequestId - The unique id of the request to send to external services
20
+ * @param log - The provided logger to use
21
+ */
22
+ useContext({ novaRequestId, log }) {
23
+ this.novaRequestId = novaRequestId;
24
+ this.log = log || this.log;
25
+ }
26
+
27
+ }
@@ -1,32 +1,27 @@
1
- import { DEFAULT_CONFIG } from './config.js';
1
+ import { BaseDriver } from './base-driver.js';
2
+
3
+ import { secretsManager } from './aws/secrets-manager.js';
2
4
 
3
5
  /**
4
6
  * NovaDriver class to provide a common interface for all drivers.
5
7
 
6
8
  */
7
- export class NovaDriver {
9
+ export class NovaDriver extends BaseDriver {
8
10
 
9
11
  /**
10
12
  * NovaDriver constructor.
11
13
  * @param {Object} configOverrides - Configuration overrides for the Nova driver.
12
14
  */
13
15
  constructor(configOverrides = {}) {
14
- this.config = { ...DEFAULT_CONFIG, ...configOverrides };
15
- this.log = this.config.logger;
16
- this.enabled = this.config.enabled;
17
- this.novaRequestId = null;
16
+ super(configOverrides);
18
17
  }
19
18
 
20
- /**
21
- * Provides a way to override the context of the driver. Specifically useful for logging
22
- * and sending requests making use of the `distributedLoggingMiddleware` and it's reliance
23
- * on the http header `x-nova-request-id`
24
- *
25
- * @param novaRequestId - The unique id of the request to send to external services
26
- * @param log - The provided logger to use
27
- */
28
- useContext({ novaRequestId, log }) {
29
- this.novaRequestId = novaRequestId;
30
- this.log = log || this.log;
19
+ async getSecret() {
20
+ if (!this.secretKey) {
21
+ return undefined;
22
+ }
23
+
24
+ const secret = await secretsManager.getSecret(this.secretKey, this.secretKeyId, this.region, this.rootEnvironmentAwsAccountId);
25
+ return secret;
31
26
  }
32
27
  }
@@ -4,8 +4,6 @@ import { HttpDriver } from './http.js';
4
4
  import { ApiToken } from '../../nova-model/src/model/api-token.js';
5
5
  import { apiTokenRepo } from '../../nova-model/src/repo/api-token.js';
6
6
 
7
- import { secretsManager } from './aws/secrets-manager.js';
8
-
9
7
  const TOKEN_EXPIRATION_WINDOW_SECONDS = 60;
10
8
 
11
9
  /**
@@ -55,8 +53,6 @@ export class OAuthDriver extends HttpDriver {
55
53
  this.secretKey = oauth.client.secret;
56
54
  this.secretKeyId = oauth.client.secretKeyId;
57
55
 
58
- this.region = configuration.region;
59
- this.rootEnvironmentAwsAccountId = configuration.rootEnvironmentAwsAccountId
60
56
  }
61
57
 
62
58
  /**
@@ -147,7 +143,7 @@ export class OAuthDriver extends HttpDriver {
147
143
  if (this.clientCredentialsInstance) {
148
144
  return this.clientCredentialsInstance;
149
145
  }
150
- if (this.secretKey) this.clientConfig.client.secret = await secretsManager.getSecret(this.secretKey, this.secretKeyId, this.region, this.rootEnvironmentAwsAccountId);
146
+ if (this.secretKey) this.clientConfig.client.secret = await this.getSecret();
151
147
  delete this.clientConfig.client.secretKeyId;
152
148
  this.clientCredentialsInstance = new ClientCredentials(this.clientConfig);
153
149
  return this.clientCredentialsInstance;
@@ -3,7 +3,7 @@
3
3
  "name": "@skillswaveca/nova-middleware",
4
4
  "description": "A collection of middleware used by nova projects",
5
5
  "repository": "https://github.com/SkillsWave/nova-shared-libraries",
6
- "version": "4.18.1",
6
+ "version": "4.19.0",
7
7
  "main": "index.js",
8
8
  "scripts": {
9
9
  "pre-release": "pnpm run create-index",
@@ -3,7 +3,7 @@
3
3
  "name": "@skillswaveca/nova-model",
4
4
  "description": "Nova model stuff",
5
5
  "repository": "https://github.com/SkillsWave/nova-shared-libraries",
6
- "version": "4.18.1",
6
+ "version": "4.19.0",
7
7
  "main": "index.js",
8
8
  "scripts": {
9
9
  "pre-release": "pnpm run create-index",
@@ -162,55 +162,15 @@ export class NovaModelRepo {
162
162
  return undefined;
163
163
  }
164
164
 
165
- // This recursive code handles paged data in query results
166
- async getAllResultsRecursive(context, params, results, limit, level = 0, startTime = 0, startingParams) {
167
- if (level === 0) {
168
- startTime = Date.now();
169
- startingParams = Object.assign({}, params);
170
- }
171
- level++;
172
-
173
- if (limit) {
174
- params.Limit = limit - results.length;
175
- }
176
-
177
- const data = await this.query(context, params);
178
-
179
- if (data?.Items?.length > 0) {
180
- results.push(...data.Items);
181
- }
182
-
183
- if (data.LastEvaluatedKey) {
184
- params.ExclusiveStartKey = data.LastEvaluatedKey;
185
- } else if (params.ExclusiveStartKey) {
186
- delete params.ExclusiveStartKey;
187
- }
188
-
189
- if (data.LastEvaluatedKey && (!limit || results.length < limit)) {
190
- return await this.getAllResultsRecursive(context, params, results, limit, level, startTime, startingParams);
191
- } else {
192
- const endTime = Date.now();
193
- const timeTaken = endTime - startTime;
194
- if ((level >= DDB_WARN_RECURSION_LEVELS) || (timeTaken >= DDB_WARN_TIME)) {
195
- context.log.warn({ startingParams, timeTaken, recursionLevel: level }, `getAllResultsRecursive: ${level} ${(level === 1) ? 'query' : 'queries'} for startingParams; took ${timeTaken} ms`);
196
- }
197
-
198
- return limit ? results.slice(0, limit) : results;
199
- }
200
- }
201
-
202
165
  /**
203
166
  * This function returns the array of recursively retrieved results based
204
167
  * on a DynamoDB query with the given parameters. It uses the
205
168
  * getAllResultsRecursive function and returns all pages of results.
206
- * @param {Object} context
207
169
  * @param {Object} params - DynamoDB query params
208
170
  * @returns {Array<*>} recursively retrieved results from dynamoDb query
209
171
  */
210
- async getAllResults(context, params) {
211
- const results = [];
212
- await this.getAllResultsRecursive(context, params, results);
213
- return results?.Items || results;
172
+ async getAllResults(params) {
173
+ return await this.dynamodb.getAllResults(params);
214
174
  }
215
175
 
216
176
  /**
@@ -3,13 +3,12 @@
3
3
  "name": "@skillswaveca/nova-router",
4
4
  "description": "An extended Koa router that enables better validation",
5
5
  "repository": "https://github.com/SkillsWave/nova-shared-libraries",
6
- "version": "4.18.1",
6
+ "version": "4.19.0",
7
7
  "main": "index.js",
8
8
  "scripts": {
9
9
  "pre-release": "pnpm run create-index",
10
10
  "create-index": "node ../../scripts/create-index.js",
11
- "generate-docs": "documentation build src/** -f html -o docs",
12
- "test": "mocha --parallel 'test/**/*.test.js'"
11
+ "generate-docs": "documentation build src/** -f html -o docs"
13
12
  },
14
13
  "author": "SkillsWave",
15
14
  "license": "UNLICENSED",
@@ -3,7 +3,7 @@
3
3
  "name": "@skillswaveca/nova-utils",
4
4
  "description": "A collection of random utils used in nova repos",
5
5
  "repository": "https://github.com/SkillsWave/nova-shared-libraries",
6
- "version": "4.18.1",
6
+ "version": "4.19.0",
7
7
  "main": "index.js",
8
8
  "scripts": {
9
9
  "pre-release": "pnpm run create-index",