diff --git a/cdk/BackendApp.ts b/cdk/BackendApp.ts index be5c6d0..e4bca5f 100644 --- a/cdk/BackendApp.ts +++ b/cdk/BackendApp.ts @@ -1,6 +1,6 @@ import { App } from 'aws-cdk-lib' import type { BackendLambdas } from './BackendLambdas.js' -import type { PackedLayer } from './packLayer.js' +import type { PackedLayer } from '@bifravst/aws-cdk-lambda-helpers/layer' import { BackendStack } from './stacks/BackendStack.js' export class BackendApp extends App { @@ -16,8 +16,10 @@ export class BackendApp extends App { super({ context: { version: Date.now().toString(), + isTest: false, }, }) + console.log(lambdaSources) new BackendStack(this, { lambdaSources, layer, assetTrackerStackName }) } } diff --git a/cdk/BackendLambdas.d.ts b/cdk/BackendLambdas.d.ts index 47b4244..8f9cc1d 100644 --- a/cdk/BackendLambdas.d.ts +++ b/cdk/BackendLambdas.d.ts @@ -1,4 +1,4 @@ -import type { PackedLambda } from './backend' +import type { PackedLambda } from '@bifravst/aws-cdk-lambda-helpers' type BackendLambdas = { publishToWebsocketClients: PackedLambda @@ -13,6 +13,6 @@ type BackendLambdas = { parseSinkMessages: PackedLambda updatesToLwM2M: PackedLambda publishLwM2MShadowsToJSON: PackedLambda - memfault: PackedLambda + memfaultPublishReboots: PackedLambda memfaultPollForReboots: PackedLambda } diff --git a/cdk/backend.ts b/cdk/backend.ts index 22ad53f..d12f106 100644 --- a/cdk/backend.ts +++ b/cdk/backend.ts @@ -1,10 +1,7 @@ -import { mkdir } from 'node:fs/promises' -import path from 'node:path' import { BackendApp } from './BackendApp.js' -import { packLambda } from './packLambda.js' -import { packLayer } from './packLayer.js' import { ASSET_TRACKER_STACK_NAME } from './stacks/stackName.js' -export type PackedLambda = { lambdaZipFile: string; handler: string } +import { packLambdaFromPath } from '@bifravst/aws-cdk-lambda-helpers' +import { packLayer } from '@bifravst/aws-cdk-lambda-helpers/layer' const packagesInLayer: string[] = [ '@nordicsemiconductor/from-env', @@ -17,27 +14,7 @@ const packagesInLayer: string[] = [ '@protobuf-ts/runtime', 'p-retry', ] -const pack = async ( - id: string, - handlerFunction = 'handler', -): Promise => { - try { - await mkdir(path.join(process.cwd(), 'dist', 'lambdas'), { - recursive: true, - }) - } catch { - // Directory exists - } - const zipFile = path.join(process.cwd(), 'dist', 'lambdas', `${id}.zip`) - const { handler } = await packLambda({ - sourceFile: path.join(process.cwd(), 'lambda', `${id}.ts`), - zipFile, - }) - return { - lambdaZipFile: zipFile, - handler: handler.replace('.js', `.${handlerFunction}`), - } -} +const pack = async (id: string) => packLambdaFromPath(id, `lambda/${id}.ts`) new BackendApp({ lambdaSources: { @@ -52,7 +29,7 @@ new BackendApp({ onNetworkSurveyLocated: await pack('onNetworkSurveyLocated'), parseSinkMessages: await pack('parseSinkMessages'), updatesToLwM2M: await pack('updatesToLwM2M'), - memfault: await pack('memfault'), + memfaultPublishReboots: await pack('memfaultPublishReboots'), memfaultPollForReboots: await pack('memfaultPollForReboots'), // For hello.nrfcloud.com/map publishLwM2MShadowsToJSON: await pack('publishLwM2MShadowsToJSON'), diff --git a/cdk/commonParent.spec.ts b/cdk/commonParent.spec.ts deleted file mode 100644 index 6220009..0000000 --- a/cdk/commonParent.spec.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { commonParent } from './commonParent.js' -import { describe, it } from 'node:test' -import assert from 'node:assert/strict' -void describe('commonParent()', () => { - void it('should return the common parent directory', () => - assert.equal( - commonParent([ - '/some/dir/lambda/onMessage.ts', - '/some/dir/lambda/notifyClients.ts', - '/some/dir/lambda/wirepasPublish.ts', - '/some/dir/wirepas-5g-mesh-gateway/protobuf/ts/data_message.ts', - ]), - '/some/dir/', - )) - void it('should return the entire parent tree for a single file', () => - assert.equal( - commonParent(['/some/dir/lambda/onMessage.ts']), - '/some/dir/lambda/', - )) - void it('should return "/" if files have no common directory', () => - assert.equal( - commonParent([ - '/some/dir/lambda/onMessage.ts', - '/other/dir/lambda/onMessage.ts', - ]), - '/', - )) -}) diff --git a/cdk/commonParent.ts b/cdk/commonParent.ts deleted file mode 100644 index ff62c0a..0000000 --- a/cdk/commonParent.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { parse, sep } from 'node:path' - -/** - * Returns the common ancestor directory from a list of files - */ -export const commonParent = (files: string[]): string => { - if (files.length === 1) return parse(files[0] ?? '').dir + sep - let index = 0 - let prefix = '/' - - while (files.filter((f) => f.startsWith(prefix)).length === files.length) { - prefix = files[0]?.slice(0, ++index) ?? '' - } - - return prefix.slice(0, prefix.length - 1) -} diff --git a/cdk/findDependencies.ts b/cdk/findDependencies.ts deleted file mode 100644 index 6001744..0000000 --- a/cdk/findDependencies.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { readFileSync, statSync } from 'node:fs' -import path from 'node:path' -import ts, { type ImportDeclaration, type StringLiteral } from 'typescript' - -/** - * Resolve project-level dependencies for the given file using TypeScript compiler API - */ -export const findDependencies = ( - sourceFile: string, - imports: string[] = [], - visited: string[] = [], -): string[] => { - if (visited.includes(sourceFile)) return imports - const fileNode = ts.createSourceFile( - sourceFile, - readFileSync(sourceFile, 'utf-8').toString(), - ts.ScriptTarget.ES2022, - /*setParentNodes */ true, - ) - - const parseChild = (node: ts.Node) => { - if (node.kind !== ts.SyntaxKind.ImportDeclaration) return - const moduleSpecifier = ( - (node as ImportDeclaration).moduleSpecifier as StringLiteral - ).text - const file = moduleSpecifier.startsWith('.') - ? path - .resolve(path.parse(sourceFile).dir, moduleSpecifier) - // In ECMA Script modules, all imports from local files must have an extension. - // See https://nodejs.org/api/esm.html#mandatory-file-extensions - // So we need to replace the `.js` in the import specification to find the TypeScript source for the file. - // Example: import { Network, notifyClients } from './notifyClients.js' - // The source file for that is actually in './notifyClients.ts' - .replace(/\.js$/, '.ts') - : moduleSpecifier - try { - statSync(file) - imports.push(file) - } catch { - // Module or file not found - visited.push(file) - } - } - ts.forEachChild(fileNode, parseChild) - visited.push(sourceFile) - - for (const file of imports) { - findDependencies(file, imports, visited) - } - - return imports -} diff --git a/cdk/packLambda.ts b/cdk/packLambda.ts deleted file mode 100644 index 23d9af4..0000000 --- a/cdk/packLambda.ts +++ /dev/null @@ -1,78 +0,0 @@ -import swc from '@swc/core' -import { createWriteStream } from 'node:fs' -import { parse } from 'path' -import * as yazl from 'yazl' -import { commonParent } from './commonParent.js' -import { findDependencies } from './findDependencies.js' - -const removeCommonAncestor = - (parentDir: string) => - (file: string): string => { - const p = parse(file) - const jsFileName = [ - p.dir.replace(parentDir.slice(0, parentDir.length - 1), ''), - `${p.name}.js`, - ] - .join('/') - // Replace leading slash - .replace(/^\//, '') - - return jsFileName - } - -/** - * In the bundle we only include code that's not in the layer. - */ -export const packLambda = async ({ - sourceFile, - zipFile, - debug, - progress, -}: { - sourceFile: string - zipFile: string - debug?: (label: string, info: string) => void - progress?: (label: string, info: string) => void -}): Promise<{ handler: string }> => { - const lambdaFiles = [sourceFile, ...findDependencies(sourceFile)] - - const zipfile = new yazl.ZipFile() - - const stripCommon = removeCommonAncestor(commonParent(lambdaFiles)) - - for (const file of lambdaFiles) { - const compiled = ( - await swc.transformFile(file, { - jsc: { - target: 'es2022', - }, - }) - ).code - debug?.(`compiled`, compiled) - const jsFileName = stripCommon(file) - zipfile.addBuffer(Buffer.from(compiled, 'utf-8'), jsFileName) - progress?.(`added`, jsFileName) - } - - // Mark it as ES module - zipfile.addBuffer( - Buffer.from( - JSON.stringify({ - type: 'module', - }), - 'utf-8', - ), - 'package.json', - ) - progress?.(`added`, 'package.json') - - await new Promise((resolve) => { - zipfile.outputStream.pipe(createWriteStream(zipFile)).on('close', () => { - resolve() - }) - zipfile.end() - }) - progress?.(`written`, zipFile) - - return { handler: stripCommon(sourceFile) } -} diff --git a/cdk/packLayer.ts b/cdk/packLayer.ts deleted file mode 100644 index 1bad2e5..0000000 --- a/cdk/packLayer.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { spawn } from 'child_process' -import { createWriteStream } from 'fs' -import { copyFile, mkdir, readFile, rm, writeFile } from 'fs/promises' -import { glob } from 'glob' -import path from 'path' -import { ZipFile } from 'yazl' - -export type PackedLayer = { layerZipFile: string } - -export const packLayer = async ({ - id, - dependencies, -}: { - id: string - dependencies: string[] -}): Promise => { - const packageJsonFile = path.join(process.cwd(), 'package.json') - const packageLockJsonFile = path.join(process.cwd(), 'package-lock.json') - const { dependencies: deps, devDependencies: devDeps } = JSON.parse( - await readFile(packageJsonFile, 'utf-8'), - ) - - const layerDir = path.join(process.cwd(), 'dist', 'layers', id) - const nodejsDir = path.join(layerDir, 'nodejs', 'node20') - - try { - await rm(layerDir, { recursive: true }) - } catch { - // Folder does not exist. - } - - await mkdir(nodejsDir, { recursive: true }) - - const depsToBeInstalled = dependencies.reduce( - (resolved, dep) => { - const resolvedDependency = deps[dep] ?? devDeps[dep] - if (resolvedDependency === undefined) - throw new Error( - `Could not resolve dependency "${dep}" in ${packageJsonFile}!`, - ) - return { - ...resolved, - [dep]: resolvedDependency, - } - }, - {} as Record, - ) - - await writeFile( - path.join(nodejsDir, 'package.json'), - JSON.stringify({ - dependencies: depsToBeInstalled, - }), - 'utf-8', - ) - await copyFile(packageLockJsonFile, path.join(nodejsDir, 'package-lock.json')) - - await new Promise((resolve, reject) => { - const [cmd, ...args] = [ - 'npm', - 'ci', - '--ignore-scripts', - '--only=prod', - '--no-audit', - ] - const p = spawn(cmd, args, { - cwd: nodejsDir, - }) - p.on('close', (code) => { - if (code !== 0) { - const msg = `${cmd} ${args.join( - ' ', - )} in ${nodejsDir} exited with code ${code}.` - return reject(new Error(msg)) - } - return resolve() - }) - }) - - const filesToAdd = await glob(`**`, { - cwd: layerDir, - nodir: true, - }) - const zipfile = new ZipFile() - filesToAdd.forEach((f) => { - zipfile.addFile(path.join(layerDir, f), f) - }) - - const zipFileName = await new Promise((resolve) => { - const zipFileName = path.join(process.cwd(), 'dist', 'layers', `${id}.zip`) - zipfile.outputStream - .pipe(createWriteStream(zipFileName)) - .on('close', () => { - resolve(zipFileName) - }) - zipfile.end() - }) - - return { - layerZipFile: zipFileName, - } -} diff --git a/cdk/resources/LambdaLogGroup.ts b/cdk/resources/LambdaLogGroup.ts deleted file mode 100644 index 2dfb265..0000000 --- a/cdk/resources/LambdaLogGroup.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Construct } from 'constructs' -import { aws_logs as Logs, Names, Stack } from 'aws-cdk-lib' - -export class LambdaLogGroup extends Construct { - public readonly logGroup: Logs.LogGroup - constructor( - parent: Construct, - id: string, - retention = Logs.RetentionDays.ONE_DAY, - ) { - super(parent, id) - this.logGroup = new Logs.LogGroup(this, 'logGroup', { - retention, - logGroupName: `/${Stack.of(this).stackName}/fn/${id}-${Names.uniqueId(this)}`, - logGroupClass: Logs.LogGroupClass.STANDARD, // INFREQUENT_ACCESS does not support custom metrics - }) - } -} diff --git a/cdk/resources/LwM2M.ts b/cdk/resources/LwM2M.ts index 31413c5..46b5ff4 100644 --- a/cdk/resources/LwM2M.ts +++ b/cdk/resources/LwM2M.ts @@ -6,8 +6,11 @@ import { aws_lambda as Lambda, Stack, } from 'aws-cdk-lib' -import type { PackedLambda } from '../backend.js' -import { LambdaLogGroup } from './LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' +import type { BackendLambdas } from '../BackendLambdas.js' /** * Contains resources that provide LwM2M based data for devices @@ -19,9 +22,7 @@ export class LwM2M extends Construct { lambdaSources, baseLayer, }: { - lambdaSources: { - updatesToLwM2M: PackedLambda - } + lambdaSources: Pick baseLayer: Lambda.ILayerVersion }, ) { @@ -33,7 +34,7 @@ export class LwM2M extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset(lambdaSources.updatesToLwM2M.lambdaZipFile), + code: new LambdaSource(this, lambdaSources.updatesToLwM2M).code, description: 'Store shadow updates asset_tracker_v2 shadow format as LwM2M objects in a named shadow. ', layers: [baseLayer], diff --git a/cdk/resources/Memfault.ts b/cdk/resources/Memfault.ts index 6212657..6b79a6e 100644 --- a/cdk/resources/Memfault.ts +++ b/cdk/resources/Memfault.ts @@ -10,9 +10,12 @@ import { RemovalPolicy, } from 'aws-cdk-lib' import { Construct } from 'constructs' -import type { PackedLambda } from '../backend.js' -import { LambdaLogGroup } from './LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' import type { WebsocketAPI } from './WebsocketAPI.js' +import type { BackendLambdas } from '../BackendLambdas.js' /** * Pull Memfault data for devices @@ -27,10 +30,10 @@ export class Memfault extends Construct { assetTrackerStackName, websocketAPI, }: { - lambdaSources: { - memfault: PackedLambda - memfaultPollForReboots: PackedLambda - } + lambdaSources: Pick< + BackendLambdas, + 'memfaultPublishReboots' | 'memfaultPollForReboots' + > baseLayer: Lambda.ILayerVersion assetTrackerStackName: string websocketAPI: WebsocketAPI @@ -59,12 +62,12 @@ export class Memfault extends Construct { }) const fn = new Lambda.Function(this, 'fn', { - handler: lambdaSources.memfault.handler, + handler: lambdaSources.memfaultPublishReboots.handler, architecture: Lambda.Architecture.ARM_64, runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset(lambdaSources.memfault.lambdaZipFile), + code: new LambdaSource(this, lambdaSources.memfaultPublishReboots).code, description: 'Pull Memfault data for devices and publish it on S3', layers: [baseLayer], environment: { @@ -114,9 +117,7 @@ export class Memfault extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(120), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.memfaultPollForReboots.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.memfaultPollForReboots).code, description: 'Poll the Memfault API for an update after a device publishes a button event for button 42', layers: [baseLayer], diff --git a/cdk/resources/NRPlusGateway.ts b/cdk/resources/NRPlusGateway.ts index 85923c0..46c71fe 100644 --- a/cdk/resources/NRPlusGateway.ts +++ b/cdk/resources/NRPlusGateway.ts @@ -5,8 +5,11 @@ import Kinesis, { StreamMode } from 'aws-cdk-lib/aws-kinesis' import Lambda, { StartingPosition } from 'aws-cdk-lib/aws-lambda' import { KinesisEventSource } from 'aws-cdk-lib/aws-lambda-event-sources' import { Construct } from 'constructs' -import type { PackedLambda } from '../backend.js' -import { LambdaLogGroup } from './LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' +import type { BackendLambdas } from '../BackendLambdas.js' export class NRPlusGateway extends Construct { constructor( @@ -14,9 +17,7 @@ export class NRPlusGateway extends Construct { { lambdaSources, }: { - lambdaSources: { - parseSinkMessages: PackedLambda - } + lambdaSources: Pick }, ) { super(parent, 'nrplus-gateway') @@ -79,9 +80,7 @@ export class NRPlusGateway extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.minutes(15), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.parseSinkMessages.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.parseSinkMessages).code, description: 'Parse sink messages', environment: { VERSION: this.node.tryGetContext('version'), diff --git a/cdk/resources/PublishSummaries.ts b/cdk/resources/PublishSummaries.ts index 85e274b..789d506 100644 --- a/cdk/resources/PublishSummaries.ts +++ b/cdk/resources/PublishSummaries.ts @@ -6,9 +6,12 @@ import { Duration, } from 'aws-cdk-lib' import { Construct } from 'constructs' -import type { PackedLambda } from '../backend.js' import type { WebsocketAPI } from './WebsocketAPI.js' -import { LambdaLogGroup } from './LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' +import type { BackendLambdas } from '../BackendLambdas.js' /** * Publish the summary statistics for the devices @@ -23,9 +26,7 @@ export class PublishSummaries extends Construct { historicaldataTableInfo, historicaldataTableArn, }: { - lambdaSources: { - publishSummaries: PackedLambda - } + lambdaSources: Pick baseLayer: Lambda.ILayerVersion websocketAPI: WebsocketAPI historicaldataTableInfo: string @@ -40,7 +41,7 @@ export class PublishSummaries extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset(lambdaSources.publishSummaries.lambdaZipFile), + code: new LambdaSource(this, lambdaSources.publishSummaries).code, description: 'Publish the summary statistics for the devices, invoked every minute', layers: [baseLayer], diff --git a/cdk/resources/ResolveCellLocation.ts b/cdk/resources/ResolveCellLocation.ts index 6679179..3d779c8 100644 --- a/cdk/resources/ResolveCellLocation.ts +++ b/cdk/resources/ResolveCellLocation.ts @@ -8,9 +8,12 @@ import { Stack, } from 'aws-cdk-lib' import { Construct } from 'constructs' -import type { PackedLambda } from '../backend.js' import type { WebsocketAPI } from './WebsocketAPI.js' -import { LambdaLogGroup } from './LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' +import type { BackendLambdas } from '../BackendLambdas.js' export class ResolveCellLocation extends Construct { public constructor( @@ -22,10 +25,10 @@ export class ResolveCellLocation extends Construct { websocketAPI, cellGeoStateMachineARN, }: { - lambdaSources: { - resolveCellLocation: PackedLambda - onCellGeoLocationResolved: PackedLambda - } + lambdaSources: Pick< + BackendLambdas, + 'resolveCellLocation' | 'onCellGeoLocationResolved' + > baseLayer: Lambda.ILayerVersion geolocationApiUrl: string websocketAPI: WebsocketAPI @@ -45,9 +48,7 @@ export class ResolveCellLocation extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.resolveCellLocation.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.resolveCellLocation).code, description: 'Invoked when devices report their cell location', layers: [baseLayer], environment: { @@ -152,9 +153,8 @@ export class ResolveCellLocation extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.onCellGeoLocationResolved.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.onCellGeoLocationResolved) + .code, description: 'Publish cell geolocation resolutions', environment: { VERSION: this.node.tryGetContext('version'), diff --git a/cdk/resources/ResolveNetworkSurveyGeoLocation.ts b/cdk/resources/ResolveNetworkSurveyGeoLocation.ts index 95f47d2..abc6e06 100644 --- a/cdk/resources/ResolveNetworkSurveyGeoLocation.ts +++ b/cdk/resources/ResolveNetworkSurveyGeoLocation.ts @@ -8,9 +8,12 @@ import { aws_lambda_event_sources as LambdaEvents, } from 'aws-cdk-lib' import { Construct } from 'constructs' -import type { PackedLambda } from '../backend.js' import type { WebsocketAPI } from './WebsocketAPI.js' -import { LambdaLogGroup } from './LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' +import type { BackendLambdas } from '../BackendLambdas.js' /** * Notify clients about resolved neighboring cell location reports geo locations @@ -26,10 +29,10 @@ export class ResolveNetworkSurveyGeoLocation extends Construct { surveysTable, networkSurveyGeoStateMachineARN, }: { - lambdaSources: { - onNewNetworkSurvey: PackedLambda - onNetworkSurveyLocated: PackedLambda - } + lambdaSources: Pick< + BackendLambdas, + 'onNewNetworkSurvey' | 'onNetworkSurveyLocated' + > baseLayer: Lambda.ILayerVersion websocketAPI: WebsocketAPI networkSurveyGeolocationApiUrl: string @@ -49,9 +52,7 @@ export class ResolveNetworkSurveyGeoLocation extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.onNewNetworkSurvey.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.onNewNetworkSurvey).code, description: 'Invoked when devices publishes a new network survey', layers: [baseLayer], environment: { @@ -91,9 +92,7 @@ export class ResolveNetworkSurveyGeoLocation extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.onNetworkSurveyLocated.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.onNetworkSurveyLocated).code, description: 'Publish network survey geo location resolutions', environment: { VERSION: this.node.tryGetContext('version'), diff --git a/cdk/resources/WebsocketAPI.ts b/cdk/resources/WebsocketAPI.ts index daf02a6..2ecf2dc 100644 --- a/cdk/resources/WebsocketAPI.ts +++ b/cdk/resources/WebsocketAPI.ts @@ -10,8 +10,11 @@ import { Stack, } from 'aws-cdk-lib' import { Construct } from 'constructs' -import type { PackedLambda } from '../backend.js' -import { LambdaLogGroup } from './LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' +import type { BackendLambdas } from '../BackendLambdas.js' export class WebsocketAPI extends Construct { public readonly websocketURI: string @@ -24,12 +27,10 @@ export class WebsocketAPI extends Construct { lambdaSources, baseLayer, }: { - lambdaSources: { - publishToWebsocketClients: PackedLambda - onConnect: PackedLambda - onMessage: PackedLambda - onDisconnect: PackedLambda - } + lambdaSources: Pick< + BackendLambdas, + `publishToWebsocketClients` | `onConnect` | `onMessage` | `onDisconnect` + > baseLayer: Lambda.ILayerVersion }, ) { @@ -81,7 +82,7 @@ export class WebsocketAPI extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(5), memorySize: 1792, - code: Lambda.Code.fromAsset(lambdaSources.onConnect.lambdaZipFile), + code: new LambdaSource(this, lambdaSources.onConnect).code, description: 'Registers new clients', environment: { VERSION: this.node.tryGetContext('version'), @@ -123,7 +124,7 @@ export class WebsocketAPI extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(60), memorySize: 1792, - code: Lambda.Code.fromAsset(lambdaSources.onMessage.lambdaZipFile), + code: new LambdaSource(this, lambdaSources.onMessage).code, description: 'Receives messages from clients', environment: { VERSION: this.node.tryGetContext('version'), @@ -193,7 +194,7 @@ export class WebsocketAPI extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.seconds(5), memorySize: 1792, - code: Lambda.Code.fromAsset(lambdaSources.onDisconnect.lambdaZipFile), + code: new LambdaSource(this, lambdaSources.onDisconnect).code, description: 'De-registers disconnected clients', environment: { VERSION: this.node.tryGetContext('version'), @@ -263,9 +264,8 @@ export class WebsocketAPI extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.minutes(1), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.publishToWebsocketClients.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.publishToWebsocketClients) + .code, description: 'Publishes device events to the websocket API.', environment: { VERSION: this.node.tryGetContext('version'), diff --git a/cdk/resources/hello.nrfcloud.com/PublicLwM2MShadows.ts b/cdk/resources/hello.nrfcloud.com/PublicLwM2MShadows.ts index c5f3765..d207024 100644 --- a/cdk/resources/hello.nrfcloud.com/PublicLwM2MShadows.ts +++ b/cdk/resources/hello.nrfcloud.com/PublicLwM2MShadows.ts @@ -8,8 +8,11 @@ import { aws_events as Events, } from 'aws-cdk-lib' import { Construct } from 'constructs' -import type { PackedLambda } from '../../backend.js' -import { LambdaLogGroup } from '../LambdaLogGroup.js' +import { + LambdaLogGroup, + LambdaSource, +} from '@bifravst/aws-cdk-lambda-helpers/cdk' +import type { BackendLambdas } from '../../BackendLambdas.js' /** * Publish a JSON of all LwM2M shadows so https://hello.nrfcloud.com/map can show them. @@ -23,9 +26,7 @@ export class PublicLwM2MShadows extends Construct { lambdaSources, }: { baseLayer: Lambda.ILayerVersion - lambdaSources: { - publishLwM2MShadowsToJSON: PackedLambda - } + lambdaSources: Pick }, ) { super(parent, 'PublicLwM2MShadows') @@ -56,9 +57,8 @@ export class PublicLwM2MShadows extends Construct { runtime: Lambda.Runtime.NODEJS_20_X, timeout: Duration.minutes(1), memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.publishLwM2MShadowsToJSON.lambdaZipFile, - ), + code: new LambdaSource(this, lambdaSources.publishLwM2MShadowsToJSON) + .code, description: 'Provides the LwM2M shadow of the devices to https://hello.nrfcloud.com/map', layers: [baseLayer], diff --git a/cdk/stacks/BackendStack.ts b/cdk/stacks/BackendStack.ts index bc95078..986ea04 100644 --- a/cdk/stacks/BackendStack.ts +++ b/cdk/stacks/BackendStack.ts @@ -7,7 +7,7 @@ import { Stack, } from 'aws-cdk-lib' import type { BackendLambdas } from '../BackendLambdas.js' -import type { PackedLayer } from '../packLayer.js' +import type { PackedLayer } from '@bifravst/aws-cdk-lambda-helpers/layer' import { Map } from '../resources/Map.js' import { PublishSummaries } from '../resources/PublishSummaries.js' import { ResolveCellLocation } from '../resources/ResolveCellLocation.js' diff --git a/lambda/memfault.ts b/lambda/memfaultPublishReboots.ts similarity index 100% rename from lambda/memfault.ts rename to lambda/memfaultPublishReboots.ts diff --git a/package-lock.json b/package-lock.json index d76a168..4f0d289 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,11 @@ "version": "0.0.0-development", "license": "BSD-3-Clause", "dependencies": { - "@hello.nrfcloud.com/proto-map": "5.0.1", + "@hello.nrfcloud.com/proto-map": "5.0.3", "@nordicsemiconductor/from-env": "3.0.1", "@nordicsemiconductor/timestream-helpers": "6.0.2", "@protobuf-ts/runtime": "2.9.4", - "@sinclair/typebox": "0.32.18", + "@sinclair/typebox": "0.32.20", "ajv": "8.12.0", "aws-iot-device-sdk-v2": "1.19.1", "jsonata": "2.0.4", @@ -24,35 +24,36 @@ "protobufjs": "7.2.6" }, "devDependencies": { - "@aws-sdk/client-apigatewaymanagementapi": "3.535.0", - "@aws-sdk/client-dynamodb": "3.538.0", - "@aws-sdk/client-iot": "3.536.0", - "@aws-sdk/client-iot-data-plane": "3.535.0", - "@aws-sdk/client-s3": "3.537.0", - "@aws-sdk/client-ssm": "3.535.0", - "@aws-sdk/client-timestream-query": "3.536.0", - "@aws-sdk/util-dynamodb": "3.538.0", - "@bifravst/eslint-config-typescript": "6.0.15", + "@aws-sdk/client-apigatewaymanagementapi": "3.549.0", + "@aws-sdk/client-dynamodb": "3.549.0", + "@aws-sdk/client-iot": "3.549.0", + "@aws-sdk/client-iot-data-plane": "3.549.0", + "@aws-sdk/client-s3": "3.550.0", + "@aws-sdk/client-ssm": "3.549.0", + "@aws-sdk/client-timestream-query": "3.549.0", + "@aws-sdk/util-dynamodb": "3.549.0", + "@bifravst/aws-cdk-lambda-helpers": "1.2.5", + "@bifravst/eslint-config-typescript": "6.0.20", "@bifravst/prettier-config": "1.0.0", "@commitlint/config-conventional": "19.1.0", "@protobuf-ts/plugin": "2.9.4", - "@swc/cli": "0.3.10", - "@swc/core": "1.4.8", - "@types/aws-lambda": "8.10.136", + "@swc/cli": "0.3.12", + "@swc/core": "1.4.12", + "@types/aws-lambda": "8.10.137", "@types/glob": "8.1.0", "@types/lodash-es": "4.17.12", - "@types/node": "20.11.30", + "@types/node": "20.12.5", "@types/yazl": "2.4.5", - "aws-cdk": "2.133.0", - "aws-cdk-lib": "2.133.0", - "cdk": "2.133.0", + "aws-cdk": "2.136.0", + "aws-cdk-lib": "2.136.0", + "cdk": "2.136.0", "chalk": "5.3.0", "check-node-version": "4.2.1", "constructs": "10.3.0", - "glob": "10.3.10", + "glob": "10.3.12", "husky": "9.0.11", "prettier": "3.2.5", - "tsx": "4.7.1", + "tsx": "4.7.2", "yazl": "2.5.1" }, "engines": { @@ -277,33 +278,33 @@ "peer": true }, "node_modules/@aws-sdk/client-apigatewaymanagementapi": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-apigatewaymanagementapi/-/client-apigatewaymanagementapi-3.535.0.tgz", - "integrity": "sha512-+hCuXoLPZOEqcCY+SCCF5CDcJZM3JeJIvJXlJsUeK7lQat5Vy6BWDaXfD6kttAXE1nK6N4Gew1PW6Ti5q5P9lA==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-apigatewaymanagementapi/-/client-apigatewaymanagementapi-3.549.0.tgz", + "integrity": "sha512-xuN0EMGvaXMTberihER8NYiwHFXvalV3HNu3vTJlWQGQPpagdmWibSELCai8cqBi71K5/XJgUhx4gIA3Wi2f5g==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", + "@aws-sdk/credential-provider-node": "3.549.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -414,34 +415,34 @@ "dev": true }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.538.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.538.0.tgz", - "integrity": "sha512-5OAc3AdcAlfzWLOJtIc0vBm2o9VHUyrmOayN+/OcQVvaOWCcGHwqanYVoEmqNaMKiAc5DKV1uARBj5MDLHyhqA==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.549.0.tgz", + "integrity": "sha512-0pwxpR7AuoRk+K6l2G+/jVSaALcFDt3b8EC0mEU0WhLZoWIS4Zvue3RUbnwEMyKckydO2DgYshsCvSSmLDjlcA==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", + "@aws-sdk/credential-provider-node": "3.549.0", "@aws-sdk/middleware-endpoint-discovery": "3.535.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -567,33 +568,33 @@ } }, "node_modules/@aws-sdk/client-iot": { - "version": "3.536.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-iot/-/client-iot-3.536.0.tgz", - "integrity": "sha512-qE7uysfKMcTnrJHo+Z8iCaRdsroO7tNWe3ys11F0/n88nErWbzBYS21Mq9sDMo/hCHwxzh0utQquf/spah9ZQg==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-iot/-/client-iot-3.549.0.tgz", + "integrity": "sha512-WYMF/45e0fNS1Ox+2vtUt1o0zZiQ3ZCV7l4ID0eJW6LMcI4fJpwcjXSMAJ8ZIPzfxdrvR6r0EPDAle2dJLW9OQ==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", + "@aws-sdk/credential-provider-node": "3.549.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -619,33 +620,33 @@ } }, "node_modules/@aws-sdk/client-iot-data-plane": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-iot-data-plane/-/client-iot-data-plane-3.535.0.tgz", - "integrity": "sha512-JMW2x/KxZxNB9sVx2H8pU+kooP6EjBYuF9sRoBLQIsvnO1M4X+Co0mF0i8DSMcWbNtXHvQcBJziSq4+5kaIDKg==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-iot-data-plane/-/client-iot-data-plane-3.549.0.tgz", + "integrity": "sha512-uNgjiWA9kA8clWmimStVEXdhDRFyiTXipTlzw3Qd69XG2ORQA3XExAX3bmmkJHsHC4xAnx26LLjn8jLMDvS3CA==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", + "@aws-sdk/credential-provider-node": "3.549.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -856,17 +857,17 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.537.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.537.0.tgz", - "integrity": "sha512-EMPN2toHz1QtSiDeLKS1zrazh+8J0g1Y5t5lCq25iTXqCSV9vB2jCKwG5+OB6L5tAKkwyl1uZofeWLmdFkztEg==", + "version": "3.550.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.550.0.tgz", + "integrity": "sha512-45jjDQI0Q37PIteWhywhlExxYaiUeOsTsbE62b+U/FOjYV8tirC8uBY9eHeHaP4IPVGHeQWvEYrFJHNU+qsQLQ==", "dev": true, "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", + "@aws-sdk/credential-provider-node": "3.549.0", "@aws-sdk/middleware-bucket-endpoint": "3.535.0", "@aws-sdk/middleware-expect-continue": "3.535.0", "@aws-sdk/middleware-flexible-checksums": "3.535.0", @@ -877,16 +878,16 @@ "@aws-sdk/middleware-sdk-s3": "3.535.0", "@aws-sdk/middleware-signing": "3.535.0", "@aws-sdk/middleware-ssec": "3.537.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/signature-v4-multi-region": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@aws-sdk/xml-builder": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/eventstream-serde-browser": "^2.2.0", "@smithy/eventstream-serde-config-resolver": "^2.2.0", "@smithy/eventstream-serde-node": "^2.2.0", @@ -898,7 +899,7 @@ "@smithy/md5-js": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -1010,33 +1011,33 @@ "dev": true }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.535.0.tgz", - "integrity": "sha512-W2fOV3LJeHLRBVVioNtBx4cCdyNCM66TfHBi/oe4NZw5Hp58+w5W8N5sV2VVEGawigczt+pp83zGFftjj7OwOg==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.549.0.tgz", + "integrity": "sha512-h5EvM1e09+ybmaCFXVjibWGyBSJ7yNIgKFq1SoifnZ5O4nf6SNNAhbuea1Gq4JCcjvDfzJ4Wl3EqVHf/Jb9oJg==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", + "@aws-sdk/credential-provider-node": "3.549.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -1162,30 +1163,30 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.535.0.tgz", - "integrity": "sha512-h9eQRdFnjDRVBnPJIKXuX7D+isSAioIfZPC4PQwsL5BscTRlk4c90DX0R0uk64YUtp7LZu8TNtrosFZ/1HtTrQ==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.549.0.tgz", + "integrity": "sha512-lz+yflOAj5Q263FlCsKpNqttaCb2NPh8jC76gVCqCt7TPxRDBYVaqg0OZYluDaETIDNJi4DwN2Azcck7ilwuPw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.535.0", + "@aws-sdk/core": "3.549.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -1210,31 +1211,31 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.535.0.tgz", - "integrity": "sha512-M2cG4EQXDpAJQyq33ORIr6abmdX9p9zX0ssVy8XwFNB7lrgoIKxuVoGL+fX+XMgecl24x7ELz6b4QlILOevbCw==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.549.0.tgz", + "integrity": "sha512-FbB4A78ILAb8sM4TfBd+3CrQcfZIhe0gtVZNbaxpq5cJZh1K7oZ8vPfKw4do9JWkDUXPLsD9Bwz12f8/JpAb6Q==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -1258,7 +1259,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.535.0" + "@aws-sdk/credential-provider-node": "^3.549.0" } }, "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-crypto/ie11-detection": { @@ -1414,30 +1415,30 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-sts": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.535.0.tgz", - "integrity": "sha512-ii9OOm3TJwP3JmO1IVJXKWIShVKPl0VtdlgROc/SkDglO/kuAw9eDdlROgc+qbFl+gm6bBTguOVTUXt3tS3flw==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.549.0.tgz", + "integrity": "sha512-63IreJ598Dzvpb+6sy81KfIX5iQxnrWSEtlyeCdC2GO6gmSQVwJzc9kr5pAC83lHmlZcm/Q3KZr3XBhRQqP0og==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.535.0", + "@aws-sdk/core": "3.549.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -1461,7 +1462,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.535.0" + "@aws-sdk/credential-provider-node": "^3.549.0" } }, "node_modules/@aws-sdk/client-sts/node_modules/@aws-crypto/ie11-detection": { @@ -1541,33 +1542,33 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-timestream-query": { - "version": "3.536.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-timestream-query/-/client-timestream-query-3.536.0.tgz", - "integrity": "sha512-VVZzsd+907x3toS6hxyS1VIEwJ6VwqP7a+nt2bG67wN/ruZUCblawdFLvOEmiPq+p+SIAbxO3hzMBjgNrrk9lQ==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-timestream-query/-/client-timestream-query-3.549.0.tgz", + "integrity": "sha512-k5JCpIcfPEPx/CcklL2CKBy7hmPR+8YdnNItmpGYHbTxGaN6YISQXdCgc7DiR5w6KaHJxqc6dF45G+r1mTW+2g==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.535.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", + "@aws-sdk/core": "3.549.0", + "@aws-sdk/credential-provider-node": "3.549.0", "@aws-sdk/middleware-endpoint-discovery": "3.535.0", "@aws-sdk/middleware-host-header": "3.535.0", "@aws-sdk/middleware-logger": "3.535.0", "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", "@aws-sdk/region-config-resolver": "3.535.0", "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@aws-sdk/util-user-agent-browser": "3.535.0", "@aws-sdk/util-user-agent-node": "3.535.0", "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/fetch-http-handler": "^2.5.0", "@smithy/hash-node": "^2.2.0", "@smithy/invalid-dependency": "^2.2.0", "@smithy/middleware-content-length": "^2.2.0", "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-retry": "^2.3.0", "@smithy/middleware-serde": "^2.3.0", "@smithy/middleware-stack": "^2.2.0", "@smithy/node-config-provider": "^2.3.0", @@ -2486,11 +2487,11 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.535.0.tgz", - "integrity": "sha512-+Yusa9HziuaEDta1UaLEtMAtmgvxdxhPn7jgfRY6PplqAqgsfa5FR83sxy5qr2q7xjQTwHtV4MjQVuOjG9JsLw==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.549.0.tgz", + "integrity": "sha512-jC61OxJn72r/BbuDRCcluiw05Xw9eVLG0CwxQpF3RocxfxyZqlrGYaGecZ8Wy+7g/3sqGRC/Ar5eUhU1YcLx7w==", "dependencies": { - "@smithy/core": "^1.4.0", + "@smithy/core": "^1.4.1", "@smithy/protocol-http": "^3.3.0", "@smithy/signature-v4": "^2.2.0", "@smithy/smithy-client": "^2.5.0", @@ -2557,15 +2558,15 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.535.0.tgz", - "integrity": "sha512-bm3XOYlyCjtAb8eeHXLrxqRxYVRw2Iqv9IufdJb4gM13TbNSYniUT1WKaHxGIZ5p+FuNlXVhvk1OpHFM13+gXA==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.549.0.tgz", + "integrity": "sha512-k6IIrluZjQpzui5Din8fW3bFFhHaJ64XrsfYx0Ks1mb7xan84dJxmYP3tdDDmLzUeJv5h95ag88taHfjY9rakA==", "dependencies": { - "@aws-sdk/client-sts": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", "@aws-sdk/credential-provider-env": "3.535.0", "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.535.0", - "@aws-sdk/credential-provider-web-identity": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.549.0", + "@aws-sdk/credential-provider-web-identity": "3.549.0", "@aws-sdk/types": "3.535.0", "@smithy/credential-provider-imds": "^2.3.0", "@smithy/property-provider": "^2.2.0", @@ -2578,16 +2579,16 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.535.0.tgz", - "integrity": "sha512-6JXp/EuL6euUkH5k4d+lQFF6gBwukrcCOWfNHCmq14mNJf/cqT3HAX1VMtWFRSK20am0IxfYQGccb0/nZykdKg==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.549.0.tgz", + "integrity": "sha512-f3YgalsMuywEAVX4AUm9tojqrBdfpAac0+D320ePzas0Ntbp7ItYu9ceKIhgfzXO3No7P3QK0rCrOxL+ABTn8Q==", "dependencies": { "@aws-sdk/credential-provider-env": "3.535.0", "@aws-sdk/credential-provider-http": "3.535.0", - "@aws-sdk/credential-provider-ini": "3.535.0", + "@aws-sdk/credential-provider-ini": "3.549.0", "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.535.0", - "@aws-sdk/credential-provider-web-identity": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.549.0", + "@aws-sdk/credential-provider-web-identity": "3.549.0", "@aws-sdk/types": "3.535.0", "@smithy/credential-provider-imds": "^2.3.0", "@smithy/property-provider": "^2.2.0", @@ -2615,12 +2616,12 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.535.0.tgz", - "integrity": "sha512-2Dw0YIr8ETdFpq65CC4zK8ZIEbX78rXoNRZXUGNQW3oSKfL0tj8O8ErY6kg1IdEnYbGnEQ35q6luZ5GGNKLgDg==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.549.0.tgz", + "integrity": "sha512-BGopRKHs7W8zkoH8qmSHrjudj263kXbhVkAUPxVUz0I28+CZNBgJC/RfVCbOpzmysIQEpwSqvOv1y0k+DQzIJQ==", "dependencies": { - "@aws-sdk/client-sso": "3.535.0", - "@aws-sdk/token-providers": "3.535.0", + "@aws-sdk/client-sso": "3.549.0", + "@aws-sdk/token-providers": "3.549.0", "@aws-sdk/types": "3.535.0", "@smithy/property-provider": "^2.2.0", "@smithy/shared-ini-file-loader": "^2.4.0", @@ -2632,11 +2633,11 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.535.0.tgz", - "integrity": "sha512-t2/JWrKY0H66A7JW7CqX06/DG2YkJddikt5ymdQvx/Q7dRMJ3d+o/vgjoKr7RvEx/pNruCeyM1599HCvwrVMrg==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.549.0.tgz", + "integrity": "sha512-QzclVXPxuwSI7515l34sdvliVq5leroO8P7RQFKRgfyQKO45o1psghierwG3PgV6jlMiv78FIAGJBr/n4qZ7YA==", "dependencies": { - "@aws-sdk/client-sts": "3.535.0", + "@aws-sdk/client-sts": "3.549.0", "@aws-sdk/types": "3.535.0", "@smithy/property-provider": "^2.2.0", "@smithy/types": "^2.12.0", @@ -2859,12 +2860,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.535.0.tgz", - "integrity": "sha512-Uvb2WJ+zdHdCOtsWVPI/M0BcfNrjOYsicDZWtaljucRJKLclY5gNWwD+RwIC+8b5TvfnVOlH+N5jhvpi5Impog==", + "version": "3.540.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz", + "integrity": "sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==", "dependencies": { "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", "@smithy/protocol-http": "^3.3.0", "@smithy/types": "^2.12.0", "tslib": "^2.6.2" @@ -2907,11 +2908,11 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.535.0.tgz", - "integrity": "sha512-4g+l/B9h1H/SiDtFRosW3pMwc+3PTXljZit+5NUBcET2XqcdUyHmgj3lBdu+CJ9CHdIMggRalYMAFXnRFe3Psg==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.549.0.tgz", + "integrity": "sha512-rJyeXkXknLukRFGuMQOgKnPBa+kLODJtOqEBf929SpQ96f1I6ytdndmWbB5B/OQN5Fu5DOOQUQqJypDQVl5ibQ==", "dependencies": { - "@aws-sdk/client-sso-oidc": "3.535.0", + "@aws-sdk/client-sso-oidc": "3.549.0", "@aws-sdk/types": "3.535.0", "@smithy/property-provider": "^2.2.0", "@smithy/shared-ini-file-loader": "^2.4.0", @@ -3006,9 +3007,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.538.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.538.0.tgz", - "integrity": "sha512-swCwUyd0BgpDhTytTsL0wGfEuqWvi4qFesRsI0GygTEMrY26tEzqBnWfFy3M3r5UuFszKKiv9lnuiJ0cBuIUFA==", + "version": "3.549.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.549.0.tgz", + "integrity": "sha512-HvJmvDNw9GN1vxWjbM7jYqv+DvQVeL21kLQ+Tth24QRPA1tiCrUuBi+lerRZ8fHG/kiZMTGyJ7UOPvljGD84dw==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -3021,9 +3022,9 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.535.0.tgz", - "integrity": "sha512-c8TlaQsiPchOOmTTR6qvHCO2O7L7NJwlKWAoQJ2GqWDZuC5es/fyuF2rp1h+ZRrUVraUomS0YdGkAmaDC7hJQg==", + "version": "3.540.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz", + "integrity": "sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==", "dependencies": { "@aws-sdk/types": "3.535.0", "@smithy/types": "^2.12.0", @@ -3137,89 +3138,18 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", @@ -3230,14 +3160,15 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -3325,21 +3256,41 @@ "node": ">=6.9.0" } }, + "node_modules/@bifravst/aws-cdk-lambda-helpers": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@bifravst/aws-cdk-lambda-helpers/-/aws-cdk-lambda-helpers-1.2.5.tgz", + "integrity": "sha512-idnHTubi35j5Y0WXRq9IbQoLcMcIXEqPPywf1UVCeYpRcHBYpqV08325QePwxtt9vGcokA/TePk/FLU6rvxXDQ==", + "dev": true, + "dependencies": { + "@swc/core": "1.4.12", + "glob": "10.3.12", + "typescript": "5.4.4", + "yazl": "2.5.1" + }, + "engines": { + "node": ">=20", + "npm": ">=9" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.136.0", + "constructs": "^10.3.0" + } + }, "node_modules/@bifravst/eslint-config-typescript": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/@bifravst/eslint-config-typescript/-/eslint-config-typescript-6.0.15.tgz", - "integrity": "sha512-8ZkuQ3e+t35QTBXE4W5PNHZuaR9CjZzWVK99MU+1avebIsSv7msQjgIWReLrQVs/wTf+p5E8DCENupX3mnWMew==", + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/@bifravst/eslint-config-typescript/-/eslint-config-typescript-6.0.20.tgz", + "integrity": "sha512-yaaBpMQPtcN0WbEloCg5tWPICoE7VnD0Cg+KpeZAk2FCXm6I/svvRtmeIvnQPq5BOvCN5eqV9DO+7Z6bg+4PLA==", "dev": true, "dependencies": { "@eslint/js": "8.57.0", - "@typescript-eslint/eslint-plugin": "7.3.1", + "@typescript-eslint/eslint-plugin": "7.5.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", "eslint-plugin-prefer-arrow": "1.2.3", - "eslint-plugin-unicorn": "51.0.1", - "typescript": "5.4.3", - "typescript-eslint": "7.3.1" + "eslint-plugin-unicorn": "52.0.0", + "typescript": "5.4.4", + "typescript-eslint": "7.5.0" }, "engines": { "node": ">=20", @@ -3480,11 +3431,11 @@ } }, "node_modules/@hello.nrfcloud.com/proto-map": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@hello.nrfcloud.com/proto-map/-/proto-map-5.0.1.tgz", - "integrity": "sha512-a0svRpra2Kwn1BpyqGTH06+6WAEPaNta5gmId2HpD9gEjKyPHzbKSJIoBX/yOu6uQReHreM4m0yM2z1SK6/fVQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@hello.nrfcloud.com/proto-map/-/proto-map-5.0.3.tgz", + "integrity": "sha512-nnaQEFPJnxHuah8NGa95FFBZQkIiyh6hTThMe+BzWyrEWYiXWDHsFoJWACN4IFpixJg+bmiZa/V/mAfwwZwqGA==", "dependencies": { - "@sinclair/typebox": "0.32.18", + "@sinclair/typebox": "0.32.20", "ajv": "8.12.0", "jsonata": "2.0.4" }, @@ -3829,9 +3780,9 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@sinclair/typebox": { - "version": "0.32.18", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.32.18.tgz", - "integrity": "sha512-ioMK5TA5YOloYf/GcnF+1fT4eTvowJes2j7Pm0Ivlm9xq61keqQw/XtbQQnPG8O4uq2y2DDenU8OqNc93xn11Q==" + "version": "0.32.20", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.32.20.tgz", + "integrity": "sha512-ziK497ILSIYMxD/thl496idIb03IZPlha04itLQu1xAFQbumWZ+Dj4PMMCkDRpAYhvVSdmRlTjGu2B2MA5RplQ==" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", @@ -3892,15 +3843,15 @@ } }, "node_modules/@smithy/core": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.0.tgz", - "integrity": "sha512-uu9ZDI95Uij4qk+L6kyFjdk11zqBkcJ3Lv0sc6jZrqHvLyr0+oeekD3CnqMafBn/5PRI6uv6ulW3kNLRBUHeVw==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", "dependencies": { - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", "@smithy/middleware-serde": "^2.3.0", "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", + "@smithy/smithy-client": "^2.5.1", "@smithy/types": "^2.12.0", "@smithy/util-middleware": "^2.2.0", "tslib": "^2.6.2" @@ -4087,9 +4038,9 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.0.tgz", - "integrity": "sha512-OBhI9ZEAG8Xen0xsFJwwNOt44WE2CWkfYIxTognC8x42Lfsdf0VN/wCMqpdkySMDio/vts10BiovAxQp0T0faA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", "dependencies": { "@smithy/middleware-serde": "^2.3.0", "@smithy/node-config-provider": "^2.3.0", @@ -4104,24 +4055,36 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.2.0.tgz", - "integrity": "sha512-PsjDOLpbevgn37yJbawmfVoanru40qVA8UEf2+YA1lvOefmhuhL6ZbKtGsLAWDRnE1OlAmedsbA/htH6iSZjNA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", "dependencies": { "@smithy/node-config-provider": "^2.3.0", "@smithy/protocol-http": "^3.3.0", "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.0", + "@smithy/smithy-client": "^2.5.1", "@smithy/types": "^2.12.0", "@smithy/util-middleware": "^2.2.0", "@smithy/util-retry": "^2.2.0", "tslib": "^2.6.2", - "uuid": "^8.3.2" + "uuid": "^9.0.1" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@smithy/middleware-serde": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", @@ -4266,11 +4229,11 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.0.tgz", - "integrity": "sha512-DDXWHWdimtS3y/Kw1Jo46KQ0ZYsDKcldFynQERUGBPDpkW1lXOTHy491ALHjwfiBQvzsVKVxl5+ocXNIgJuX4g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", "dependencies": { - "@smithy/middleware-endpoint": "^2.5.0", + "@smithy/middleware-endpoint": "^2.5.1", "@smithy/middleware-stack": "^2.2.0", "@smithy/protocol-http": "^3.3.0", "@smithy/types": "^2.12.0", @@ -4494,9 +4457,9 @@ } }, "node_modules/@swc/cli": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.3.10.tgz", - "integrity": "sha512-YWfYo9kXdbmIuGwIPth9geKgb0KssCMTdZa44zAN5KoqcuCP2rTW9s60heQDSRNpbtCmUr7BKF1VivsoHXrvrQ==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.3.12.tgz", + "integrity": "sha512-h7bvxT+4+UDrLWJLFHt6V+vNAcUNii2G4aGSSotKz1ECEk4MyEh5CWxmeSscwuz5K3i+4DWTgm4+4EyMCQKn+g==", "dev": true, "dependencies": { "@mole-inc/bin-wrapper": "^8.0.1", @@ -4561,9 +4524,9 @@ } }, "node_modules/@swc/core": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.8.tgz", - "integrity": "sha512-uY2RSJcFPgNOEg12RQZL197LZX+MunGiKxsbxmh22VfVxrOYGRvh4mPANFlrD1yb38CgmW1wI6YgIi8LkIwmWg==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.12.tgz", + "integrity": "sha512-QljRxTaUajSLB9ui93cZ38/lmThwIw/BPxjn+TphrYN6LPU3vu9/ykjgHtlpmaXDDcngL4K5i396E7iwwEUxYg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -4578,16 +4541,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.4.8", - "@swc/core-darwin-x64": "1.4.8", - "@swc/core-linux-arm-gnueabihf": "1.4.8", - "@swc/core-linux-arm64-gnu": "1.4.8", - "@swc/core-linux-arm64-musl": "1.4.8", - "@swc/core-linux-x64-gnu": "1.4.8", - "@swc/core-linux-x64-musl": "1.4.8", - "@swc/core-win32-arm64-msvc": "1.4.8", - "@swc/core-win32-ia32-msvc": "1.4.8", - "@swc/core-win32-x64-msvc": "1.4.8" + "@swc/core-darwin-arm64": "1.4.12", + "@swc/core-darwin-x64": "1.4.12", + "@swc/core-linux-arm-gnueabihf": "1.4.12", + "@swc/core-linux-arm64-gnu": "1.4.12", + "@swc/core-linux-arm64-musl": "1.4.12", + "@swc/core-linux-x64-gnu": "1.4.12", + "@swc/core-linux-x64-musl": "1.4.12", + "@swc/core-win32-arm64-msvc": "1.4.12", + "@swc/core-win32-ia32-msvc": "1.4.12", + "@swc/core-win32-x64-msvc": "1.4.12" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -4599,9 +4562,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.8.tgz", - "integrity": "sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.12.tgz", + "integrity": "sha512-BZUUq91LGJsLI2BQrhYL3yARkcdN4TS3YGNS6aRYUtyeWrGCTKHL90erF2BMU2rEwZLLkOC/U899R4o4oiSHfA==", "cpu": [ "arm64" ], @@ -4615,9 +4578,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.8.tgz", - "integrity": "sha512-P3ZBw8Jr8rKhY/J8d+6WqWriqngGTgHwtFeJ8MIakQJTbdYbFgXSZxcvDiERg3psbGeFXaUaPI0GO6BXv9k/OQ==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.12.tgz", + "integrity": "sha512-Wkk8rq1RwCOgg5ybTlfVtOYXLZATZ+QjgiBNM7pIn03A5/zZicokNTYd8L26/mifly2e74Dz34tlIZBT4aTGDA==", "cpu": [ "x64" ], @@ -4631,9 +4594,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.8.tgz", - "integrity": "sha512-PP9JIJt19bUWhAGcQW6qMwTjZOcMyzkvZa0/LWSlDm0ORYVLmDXUoeQbGD3e0Zju9UiZxyulnpjEN0ZihJgPTA==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.12.tgz", + "integrity": "sha512-8jb/SN67oTQ5KSThWlKLchhU6xnlAlnmnLCCOKK1xGtFS6vD+By9uL+qeEY2krV98UCRTf68WSmC0SLZhVoz5A==", "cpu": [ "arm" ], @@ -4647,9 +4610,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.8.tgz", - "integrity": "sha512-HvEWnwKHkoVUr5iftWirTApFJ13hGzhAY2CMw4lz9lur2m+zhPviRRED0FCI6T95Knpv7+8eUOr98Z7ctrG6DQ==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.12.tgz", + "integrity": "sha512-DhW47DQEZKCdSq92v5F03rqdpjRXdDMqxfu4uAlZ9Uo1wJEGvY23e1SNmhji2sVHsZbBjSvoXoBLk0v00nSG8w==", "cpu": [ "arm64" ], @@ -4663,9 +4626,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.8.tgz", - "integrity": "sha512-kY8+qa7k/dEeBq9p0Hrta18QnJPpsiJvDQSLNaTIFpdM3aEM9zbkshWz8gaX5VVGUEALowCBUWqmzO4VaqM+2w==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.12.tgz", + "integrity": "sha512-PR57pT3TssnCRvdsaKNsxZy9N8rFg9AKA1U7W+LxbZ/7Z7PHc5PjxF0GgZpE/aLmU6xOn5VyQTlzjoamVkt05g==", "cpu": [ "arm64" ], @@ -4679,9 +4642,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.8.tgz", - "integrity": "sha512-0WWyIw432wpO/zeGblwq4f2YWam4pn8Z/Ig4KzHMgthR/KmiLU3f0Z7eo45eVmq5vcU7Os1zi/Zb65OOt09q/w==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.12.tgz", + "integrity": "sha512-HLZIWNHWuFIlH+LEmXr1lBiwGQeCshKOGcqbJyz7xpqTh7m2IPAxPWEhr/qmMTMsjluGxeIsLrcsgreTyXtgNA==", "cpu": [ "x64" ], @@ -4695,9 +4658,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.8.tgz", - "integrity": "sha512-p4yxvVS05rBNCrBaSTa20KK88vOwtg8ifTW7ec/yoab0bD5EwzzB8KbDmLLxE6uziFa0sdjF0dfRDwSZPex37Q==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.12.tgz", + "integrity": "sha512-M5fBAtoOcpz2YQAFtNemrPod5BqmzAJc8pYtT3dVTn1MJllhmLHlphU8BQytvoGr1PHgJL8ZJBlBGdt70LQ7Mw==", "cpu": [ "x64" ], @@ -4711,9 +4674,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.8.tgz", - "integrity": "sha512-jKuXihxAaqUnbFfvPxtmxjdJfs87F1GdBf33il+VUmSyWCP4BE6vW+/ReDAe8sRNsKyrZ3UH1vI5q1n64csBUA==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.12.tgz", + "integrity": "sha512-K8LjjgZ7VQFtM+eXqjfAJ0z+TKVDng3r59QYn7CL6cyxZI2brLU3lNknZcUFSouZD+gsghZI/Zb8tQjVk7aKDQ==", "cpu": [ "arm64" ], @@ -4727,9 +4690,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.8.tgz", - "integrity": "sha512-O0wT4AGHrX8aBeH6c2ADMHgagAJc5Kf6W48U5moyYDAkkVnKvtSc4kGhjWhe1Yl0sI0cpYh2In2FxvYsb44eWw==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.12.tgz", + "integrity": "sha512-hflO5LCxozngoOmiQbDPyvt6ODc5Cu9AwTJP9uH/BSMPdEQ6PCnefuUOJLAKew2q9o+NmDORuJk+vgqQz9Uzpg==", "cpu": [ "ia32" ], @@ -4743,9 +4706,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.8.tgz", - "integrity": "sha512-C2AYc3A2o+ECciqsJWRgIpp83Vk5EaRzHe7ed/xOWzVd0MsWR+fweEsyOjlmzHfpUxJSi46Ak3/BIZJlhZbXbg==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.12.tgz", + "integrity": "sha512-3A4qMtddBDbtprV5edTB/SgJn9L+X5TL7RGgS3eWtEgn/NG8gA80X/scjf1v2MMeOsrcxiYhnemI2gXCKuQN2g==", "cpu": [ "x64" ], @@ -4800,9 +4763,9 @@ "dev": true }, "node_modules/@types/aws-lambda": { - "version": "8.10.136", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.136.tgz", - "integrity": "sha512-cmmgqxdVGhxYK9lZMYYXYRJk6twBo53ivtXjIUEFZxfxe4TkZTZBK3RRWrY2HjJcUIix0mdifn15yjOAat5lTA==", + "version": "8.10.137", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.137.tgz", + "integrity": "sha512-YNFwzVarXAOXkjuFxONyDw1vgRNzyH8AuyN19s0bM+ChSu/bzxb5XPxYFLXoqoM+tvgzwR3k7fXcEOW125yJxg==", "dev": true }, "node_modules/@types/cacheable-request": { @@ -4885,17 +4848,17 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.12.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.5.tgz", + "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz", - "integrity": "sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "node_modules/@types/readable-stream": { @@ -4950,16 +4913,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", - "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.5.0.tgz", + "integrity": "sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/type-utils": "7.3.1", - "@typescript-eslint/utils": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/scope-manager": "7.5.0", + "@typescript-eslint/type-utils": "7.5.0", + "@typescript-eslint/utils": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -4985,15 +4948,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", - "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", + "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/scope-manager": "7.5.0", + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/typescript-estree": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0", "debug": "^4.3.4" }, "engines": { @@ -5013,13 +4976,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", + "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5030,13 +4993,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", - "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.5.0.tgz", + "integrity": "sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.3.1", - "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/typescript-estree": "7.5.0", + "@typescript-eslint/utils": "7.5.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -5057,9 +5020,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", + "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5070,13 +5033,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", + "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/visitor-keys": "7.5.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5122,17 +5085,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", - "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.5.0.tgz", + "integrity": "sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/scope-manager": "7.5.0", + "@typescript-eslint/types": "7.5.0", + "@typescript-eslint/typescript-estree": "7.5.0", "semver": "^7.5.4" }, "engines": { @@ -5147,12 +5110,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", + "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.5.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -5430,9 +5393,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.133.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.133.0.tgz", - "integrity": "sha512-EwH8VgQQ8ODeMwjE3p+WhbcbWNkCbvuJJl+Py9IB5znGf7GwLcEmOu4YWBsBGPVu41SXbSAf36twMBrJytCFZA==", + "version": "2.136.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.136.0.tgz", + "integrity": "sha512-MVSE+AERoP0D1qXlkhKQOzs22QVulGleX1yJTkWzoYhEyseEmR8EiFJcmyEhJku/swmY0KDpVlT9R62dRG5+JQ==", "dev": true, "bin": { "cdk": "bin/cdk" @@ -5445,9 +5408,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.133.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.133.0.tgz", - "integrity": "sha512-5/ezv8Ir2xyz3myeXQcODwrjVRN/cDD2OpBwU/ySFBe+uNac25OoHfTXwUPwE7oLj9qetSt6/i1QvY2iIs6yiQ==", + "version": "2.136.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.136.0.tgz", + "integrity": "sha512-zdkWNe91mvZH6ESghUoIxB8ORoreExg2wowTLEVfy3vWY1a6n69crxk8mkCG+vn6GhXEnEPpovoG1QV8BpXTpA==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -5475,7 +5438,7 @@ "minimatch": "^3.1.2", "punycode": "^2.3.1", "semver": "^7.6.0", - "table": "^6.8.1", + "table": "^6.8.2", "yaml": "1.10.2" }, "engines": { @@ -5794,7 +5757,7 @@ } }, "node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.1", + "version": "6.8.2", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -6417,9 +6380,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001588", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", - "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", + "version": "1.0.30001607", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001607.tgz", + "integrity": "sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==", "dev": true, "funding": [ { @@ -6437,12 +6400,12 @@ ] }, "node_modules/cdk": { - "version": "2.133.0", - "resolved": "https://registry.npmjs.org/cdk/-/cdk-2.133.0.tgz", - "integrity": "sha512-QJDX+7NruqlfVQEQsSH2Z8r5GZx2AGJO/BhSStUb69C4QAfftLneWUL6FaXMARnavFaRIugN5gcF6Z8U0Ddyjg==", + "version": "2.136.0", + "resolved": "https://registry.npmjs.org/cdk/-/cdk-2.136.0.tgz", + "integrity": "sha512-vcGhctRGJnsVH1LaVRjknbb0kaBk0LMqNUXkyrRhAkNRZyqDPfukqIlNaO513eNCSCO2oMAEfjl616xsaWBnaQ==", "dev": true, "dependencies": { - "aws-cdk": "2.133.0" + "aws-cdk": "2.136.0" }, "bin": { "cdk": "bin/cdk" @@ -6659,12 +6622,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", - "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dev": true, "dependencies": { - "browserslist": "^4.22.3" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -6876,9 +6839,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.673", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.673.tgz", - "integrity": "sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw==", + "version": "1.4.729", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.729.tgz", + "integrity": "sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==", "dev": true }, "node_modules/emoji-regex": { @@ -7065,9 +7028,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -7269,9 +7232,9 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "51.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz", - "integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==", + "version": "52.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-52.0.0.tgz", + "integrity": "sha512-1Yzm7/m+0R4djH0tjDjfVei/ju2w3AzUGjG6q8JnuNIL5xIwsflyCooW5sfBvQp2pMYQFSWWCFONsjCax1EHng==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -7890,16 +7853,16 @@ } }, "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -8126,6 +8089,12 @@ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -8870,9 +8839,9 @@ } }, "node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -9002,6 +8971,27 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -9199,6 +9189,21 @@ "node": ">=4" } }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -9340,12 +9345,12 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -9356,9 +9361,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -9608,21 +9613,6 @@ "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -9644,33 +9634,6 @@ "node": ">=8" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -10128,9 +10091,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -10144,9 +10107,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/split2": { @@ -10512,9 +10475,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsx": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.1.tgz", - "integrity": "sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.2.tgz", + "integrity": "sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==", "dev": true, "dependencies": { "esbuild": "~0.19.10", @@ -10640,9 +10603,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10653,13 +10616,14 @@ } }, "node_modules/typescript-eslint": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.3.1.tgz", - "integrity": "sha512-psqcnHPRCdVIDbgj6RvfpwUKqMcNxIw7eizgxYi46X2BmXK6LxYqPD+SbDfPuA9JW+yPItY6aKJLRNbW7lZ4rA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.5.0.tgz", + "integrity": "sha512-eKhF39LRi2xYvvXh3h3S+mCxC01dZTIZBlka25o39i81VeQG+OZyfC4i2GEDspNclMRdXkg9uGhmvWMhjph2XQ==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "7.3.1", - "@typescript-eslint/parser": "7.3.1" + "@typescript-eslint/eslint-plugin": "7.5.0", + "@typescript-eslint/parser": "7.5.0", + "@typescript-eslint/utils": "7.5.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -10744,6 +10708,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true, "bin": { "uuid": "dist/bin/uuid" } diff --git a/package.json b/package.json index 012d9fc..b9677c2 100644 --- a/package.json +++ b/package.json @@ -25,35 +25,36 @@ "author": "Nordic Semiconductor ASA | nordicsemi.no", "license": "BSD-3-Clause", "devDependencies": { - "@aws-sdk/client-apigatewaymanagementapi": "3.535.0", - "@aws-sdk/client-dynamodb": "3.538.0", - "@aws-sdk/client-iot": "3.536.0", - "@aws-sdk/client-iot-data-plane": "3.535.0", - "@aws-sdk/client-s3": "3.537.0", - "@aws-sdk/client-ssm": "3.535.0", - "@aws-sdk/client-timestream-query": "3.536.0", - "@aws-sdk/util-dynamodb": "3.538.0", - "@bifravst/eslint-config-typescript": "6.0.15", + "@aws-sdk/client-apigatewaymanagementapi": "3.549.0", + "@aws-sdk/client-dynamodb": "3.549.0", + "@aws-sdk/client-iot": "3.549.0", + "@aws-sdk/client-iot-data-plane": "3.549.0", + "@aws-sdk/client-s3": "3.550.0", + "@aws-sdk/client-ssm": "3.549.0", + "@aws-sdk/client-timestream-query": "3.549.0", + "@aws-sdk/util-dynamodb": "3.549.0", + "@bifravst/aws-cdk-lambda-helpers": "1.2.5", + "@bifravst/eslint-config-typescript": "6.0.20", "@bifravst/prettier-config": "1.0.0", "@commitlint/config-conventional": "19.1.0", "@protobuf-ts/plugin": "2.9.4", - "@swc/cli": "0.3.10", - "@swc/core": "1.4.8", - "@types/aws-lambda": "8.10.136", + "@swc/cli": "0.3.12", + "@swc/core": "1.4.12", + "@types/aws-lambda": "8.10.137", "@types/glob": "8.1.0", "@types/lodash-es": "4.17.12", - "@types/node": "20.11.30", + "@types/node": "20.12.5", "@types/yazl": "2.4.5", - "aws-cdk": "2.133.0", - "aws-cdk-lib": "2.133.0", - "cdk": "2.133.0", + "aws-cdk": "2.136.0", + "aws-cdk-lib": "2.136.0", + "cdk": "2.136.0", "chalk": "5.3.0", "check-node-version": "4.2.1", "constructs": "10.3.0", - "glob": "10.3.10", + "glob": "10.3.12", "husky": "9.0.11", "prettier": "3.2.5", - "tsx": "4.7.1", + "tsx": "4.7.2", "yazl": "2.5.1" }, "lint-staged": { @@ -82,11 +83,11 @@ }, "prettier": "@bifravst/prettier-config", "dependencies": { - "@hello.nrfcloud.com/proto-map": "5.0.1", + "@hello.nrfcloud.com/proto-map": "5.0.3", "@nordicsemiconductor/from-env": "3.0.1", "@nordicsemiconductor/timestream-helpers": "6.0.2", "@protobuf-ts/runtime": "2.9.4", - "@sinclair/typebox": "0.32.18", + "@sinclair/typebox": "0.32.20", "ajv": "8.12.0", "aws-iot-device-sdk-v2": "1.19.1", "jsonata": "2.0.4",