From 533d5d166b59b04887bb816c93627dbed6924a61 Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Thu, 30 Jan 2025 12:46:33 -0600 Subject: [PATCH] updating dynamic module to configurable module builder --- libs/modules/src/auth/auth.interface.ts | 2 +- .../src/auth/auth.module-definition.ts | 4 + libs/modules/src/auth/auth.module.ts | 34 +- libs/modules/src/auth/auth.strategy.ts | 13 +- .../azAppConfig/az-app-config.constants.ts | 1 - .../azAppConfig/az-app-config.interface.ts | 6 - .../src/azAppConfig/az-app-config.module.ts | 21 - .../src/azAppConfig/az-app-config.service.ts | 38 -- .../modules/src/azTable/az-table.constants.ts | 1 - .../modules/src/azTable/az-table.interface.ts | 6 - libs/modules/src/azTable/az-table.module.ts | 21 - libs/modules/src/azTable/az-table.service.ts | 47 -- libs/modules/src/dapr/dapr.logger.ts | 28 ++ libs/modules/src/dapr/dapr.module.ts | 8 + libs/modules/src/dapr/dapr.service.ts | 13 + libs/modules/src/index.ts | 20 +- .../modules/src/msGraph/ms-graph.constants.ts | 1 - .../modules/src/msGraph/ms-graph.interface.ts | 2 +- .../src/msGraph/ms-graph.module-definition.ts | 4 + libs/modules/src/msGraph/ms-graph.module.ts | 26 +- libs/modules/src/msGraph/ms-graph.service.ts | 12 +- libs/modules/src/util/customError.ts | 9 + package-lock.json | 418 ++++++++++++++++-- package.json | 5 +- 24 files changed, 497 insertions(+), 243 deletions(-) create mode 100644 libs/modules/src/auth/auth.module-definition.ts delete mode 100644 libs/modules/src/azAppConfig/az-app-config.constants.ts delete mode 100644 libs/modules/src/azAppConfig/az-app-config.interface.ts delete mode 100644 libs/modules/src/azAppConfig/az-app-config.module.ts delete mode 100644 libs/modules/src/azAppConfig/az-app-config.service.ts delete mode 100644 libs/modules/src/azTable/az-table.constants.ts delete mode 100644 libs/modules/src/azTable/az-table.interface.ts delete mode 100644 libs/modules/src/azTable/az-table.module.ts delete mode 100644 libs/modules/src/azTable/az-table.service.ts create mode 100644 libs/modules/src/dapr/dapr.logger.ts create mode 100644 libs/modules/src/dapr/dapr.module.ts create mode 100644 libs/modules/src/dapr/dapr.service.ts delete mode 100644 libs/modules/src/msGraph/ms-graph.constants.ts create mode 100644 libs/modules/src/msGraph/ms-graph.module-definition.ts create mode 100644 libs/modules/src/util/customError.ts diff --git a/libs/modules/src/auth/auth.interface.ts b/libs/modules/src/auth/auth.interface.ts index 33f14f0..b274c37 100644 --- a/libs/modules/src/auth/auth.interface.ts +++ b/libs/modules/src/auth/auth.interface.ts @@ -1,4 +1,4 @@ -export interface AuthOptions { +export interface AuthModuleOptions { tenantId: string; clientId: string; clientSecret: string; diff --git a/libs/modules/src/auth/auth.module-definition.ts b/libs/modules/src/auth/auth.module-definition.ts new file mode 100644 index 0000000..7f69668 --- /dev/null +++ b/libs/modules/src/auth/auth.module-definition.ts @@ -0,0 +1,4 @@ +import { ConfigurableModuleBuilder } from '@nestjs/common'; +import { AuthModuleOptions } from './auth.interface'; + +export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder().build() \ No newline at end of file diff --git a/libs/modules/src/auth/auth.module.ts b/libs/modules/src/auth/auth.module.ts index 00bc38f..4234bb6 100644 --- a/libs/modules/src/auth/auth.module.ts +++ b/libs/modules/src/auth/auth.module.ts @@ -1,26 +1,14 @@ -import { Module, DynamicModule } from '@nestjs/common'; -import { AuthOptions } from './auth.interface'; -import { AUTH_OPTIONS } from './auth.constants'; +import { Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { AzureAdStrategy } from './auth.strategy'; +import { ConfigurableModuleClass } from './auth.module-definition'; -@Module({}) -export class AuthModule { - static register(options: AuthOptions): DynamicModule { - return { - module: AuthModule, - imports: [ - PassportModule.register({ - defaultStrategy: 'azure-ad' - }) - ], - providers: [ - { - provide: AUTH_OPTIONS, - useValue: options - }, - AzureAdStrategy - ] - }; - } -} +@Module({ + imports: [ + PassportModule.register({ + defaultStrategy: 'azure-ad' + }) + ], + providers: [AzureAdStrategy] +}) +export class AuthModule extends ConfigurableModuleClass {} diff --git a/libs/modules/src/auth/auth.strategy.ts b/libs/modules/src/auth/auth.strategy.ts index 3b842fd..bfadd18 100644 --- a/libs/modules/src/auth/auth.strategy.ts +++ b/libs/modules/src/auth/auth.strategy.ts @@ -1,19 +1,20 @@ import { Inject, Injectable } from "@nestjs/common"; import { PassportStrategy } from "@nestjs/passport"; import { BearerStrategy } from 'passport-azure-ad'; -import { AuthOptions } from './auth.interface' -import { AUTH_OPTIONS } from "./auth.constants"; +import { AuthModuleOptions } from './auth.interface' +import { MODULE_OPTIONS_TOKEN } from "./auth.module-definition"; @Injectable() export class AzureAdStrategy extends PassportStrategy( BearerStrategy, 'azure-ad' ) { - constructor(@Inject(AUTH_OPTIONS) authOptions: AuthOptions) { + constructor(@Inject(MODULE_OPTIONS_TOKEN) authModuleOptions: AuthModuleOptions) { + console.log(authModuleOptions) super({ - identityMetadata: `https://login.microsoftonline.com/${authOptions.tenantId}/.well-known/openid-configuration`, - clientID: authOptions.clientId, - audience: `api://${authOptions.clientId}`, + identityMetadata: `https://login.microsoftonline.com/${authModuleOptions.tenantId}/.well-known/openid-configuration`, + clientID: authModuleOptions.clientId, + audience: `api://${authModuleOptions.clientId}`, loggingLevel: 'info', loggingNoPII: false }) diff --git a/libs/modules/src/azAppConfig/az-app-config.constants.ts b/libs/modules/src/azAppConfig/az-app-config.constants.ts deleted file mode 100644 index 5c4719d..0000000 --- a/libs/modules/src/azAppConfig/az-app-config.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const APP_CONFIG_OPTIONS = 'APP_CONFIG_OPTIONS'; diff --git a/libs/modules/src/azAppConfig/az-app-config.interface.ts b/libs/modules/src/azAppConfig/az-app-config.interface.ts deleted file mode 100644 index 38b1e6b..0000000 --- a/libs/modules/src/azAppConfig/az-app-config.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface AppConfigOptions { - url: string; - tenantId: string; - clientId: string; - clientSecret: string; -} diff --git a/libs/modules/src/azAppConfig/az-app-config.module.ts b/libs/modules/src/azAppConfig/az-app-config.module.ts deleted file mode 100644 index 67ea69c..0000000 --- a/libs/modules/src/azAppConfig/az-app-config.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Module, DynamicModule } from '@nestjs/common'; -import { AppConfigService } from './az-app-config.service'; -import { AppConfigOptions } from './az-app-config.interface'; -import { APP_CONFIG_OPTIONS } from './az-app-config.constants'; - -@Module({}) -export class AppConfigModule { - static register(options: AppConfigOptions): DynamicModule { - return { - module: AppConfigModule, - providers: [ - { - provide: APP_CONFIG_OPTIONS, - useValue: options - }, - AppConfigService - ], - exports: [AppConfigService] - }; - } -} diff --git a/libs/modules/src/azAppConfig/az-app-config.service.ts b/libs/modules/src/azAppConfig/az-app-config.service.ts deleted file mode 100644 index b1689f1..0000000 --- a/libs/modules/src/azAppConfig/az-app-config.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { AppConfigOptions } from './az-app-config.interface'; -import { APP_CONFIG_OPTIONS } from './az-app-config.constants'; -import axios, { AxiosResponse } from 'axios'; -import { AppConfigurationClient, ConfigurationSetting, FeatureFlagValue, GetConfigurationSettingResponse, featureFlagPrefix, isFeatureFlag, parseFeatureFlag } from '@azure/app-configuration'; -import { ClientSecretCredential } from '@azure/identity'; - -@Injectable() -export class AppConfigService { - constructor( - @Inject(APP_CONFIG_OPTIONS) - private appConfigOptions: AppConfigOptions - ) { } - - async getFeatureFlags(keys: string[], label: string): Promise<{ key: string, enabled: boolean }[]> { - const credential: ClientSecretCredential = new ClientSecretCredential(this.appConfigOptions.tenantId, this.appConfigOptions.clientId, this.appConfigOptions.clientSecret); - const client: AppConfigurationClient = new AppConfigurationClient(this.appConfigOptions.url, credential); - const featureFlags: { key: string, enabled: boolean }[] = await Promise.all( - keys.map(async (key: string) => { - const configSetting: GetConfigurationSettingResponse = await client.getConfigurationSetting({ - key: `${featureFlagPrefix}${key}`, - label: label - }); - - if (isFeatureFlag(configSetting)) { - const parsedFeatureFlag: ConfigurationSetting = parseFeatureFlag(configSetting); - - return { - key: parsedFeatureFlag.value.id, - enabled: parsedFeatureFlag.value.enabled - } - } - }) - ); - - return featureFlags; - } -} diff --git a/libs/modules/src/azTable/az-table.constants.ts b/libs/modules/src/azTable/az-table.constants.ts deleted file mode 100644 index cde8d41..0000000 --- a/libs/modules/src/azTable/az-table.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const TABLE_OPTIONS = 'TABLE_OPTIONS'; \ No newline at end of file diff --git a/libs/modules/src/azTable/az-table.interface.ts b/libs/modules/src/azTable/az-table.interface.ts deleted file mode 100644 index d628881..0000000 --- a/libs/modules/src/azTable/az-table.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface TableOptions { - accountName: string; - accountKey: string; - accountUrl: string; - allowInsecureConnection: boolean; -} \ No newline at end of file diff --git a/libs/modules/src/azTable/az-table.module.ts b/libs/modules/src/azTable/az-table.module.ts deleted file mode 100644 index 774f227..0000000 --- a/libs/modules/src/azTable/az-table.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Module, DynamicModule } from '@nestjs/common'; -import { TableService } from './az-table.service'; -import { TableOptions } from './az-table.interface'; -import { TABLE_OPTIONS } from './az-table.constants'; - -@Module({}) -export class TableModule { - static register(options: TableOptions): DynamicModule { - return { - module: TableModule, - providers: [ - { - provide: TABLE_OPTIONS, - useValue: options - }, - TableService - ], - exports: [TableService] - } - } -} \ No newline at end of file diff --git a/libs/modules/src/azTable/az-table.service.ts b/libs/modules/src/azTable/az-table.service.ts deleted file mode 100644 index 01cba9f..0000000 --- a/libs/modules/src/azTable/az-table.service.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { TableOptions } from './az-table.interface'; -import { TABLE_OPTIONS } from './az-table.constants'; -import { TableClient, AzureNamedKeyCredential, TableServiceClient, TableServiceClientOptions } from '@azure/data-tables'; - -@Injectable() -export class TableService { - constructor( - @Inject(TABLE_OPTIONS) - private tablesOptions: TableOptions - ) {} - - async checkTableExists(tableName: string, tableServiceClient: TableServiceClient): Promise { - const tables = tableServiceClient.listTables(); - let tableExists: boolean = false; - - for await (const table of tables) { - if (table.name === tableName) { - tableExists = true; - - break; - } - } - - return tableExists; - } - - async getTableClient(tableName: string): Promise { - try { - const credential: AzureNamedKeyCredential = new AzureNamedKeyCredential(this.tablesOptions.accountName, this.tablesOptions.accountKey); - const options: TableServiceClientOptions = { allowInsecureConnection: this.tablesOptions.allowInsecureConnection }; - const tableServiceClient: TableServiceClient = new TableServiceClient(this.tablesOptions.accountUrl, credential, options); - const tableExists: boolean = await this.checkTableExists(tableName, tableServiceClient); - - if (!tableExists) { - await tableServiceClient.createTable(tableName); - } - - const tableClient: TableClient = new TableClient(this.tablesOptions.accountUrl, tableName, credential, options); - - return tableClient; - } catch (error) { - console.log(error); - return error; - } - } -} \ No newline at end of file diff --git a/libs/modules/src/dapr/dapr.logger.ts b/libs/modules/src/dapr/dapr.logger.ts new file mode 100644 index 0000000..5522a98 --- /dev/null +++ b/libs/modules/src/dapr/dapr.logger.ts @@ -0,0 +1,28 @@ +// import { Logger } from '@nestjs/common'; +// import { LoggerService } from '@dapr/dapr'; + +// export class DaprLogger implements LoggerService { +// private readonly logger = new Logger(DaprLogger.name); + +// constructor() {} + +// error(message: any, ...optionalParams: any[]): void { +// this.logger.error(message, ...optionalParams); +// } + +// warn(message: any, ...optionalParams: any[]): void { +// this.logger.warn(message, ...optionalParams); +// } + +// info(message: any, ...optionalParams: any[]): void { +// this.logger.log(message, ...optionalParams); +// } + +// verbose(message: any, ...optionalParams: any[]): void { +// this.logger.verbose(message, ...optionalParams); +// } + +// debug(message: any, ...optionalParams: any[]): void { +// this.logger.debug(message, ...optionalParams); +// } +// } \ No newline at end of file diff --git a/libs/modules/src/dapr/dapr.module.ts b/libs/modules/src/dapr/dapr.module.ts new file mode 100644 index 0000000..a4f7789 --- /dev/null +++ b/libs/modules/src/dapr/dapr.module.ts @@ -0,0 +1,8 @@ +import { Module } from "@nestjs/common"; +import { DaprService } from "./dapr.service"; + +@Module({ + providers: [ DaprService ], + exports: [ DaprService ] +}) +export class DaprModule {} \ No newline at end of file diff --git a/libs/modules/src/dapr/dapr.service.ts b/libs/modules/src/dapr/dapr.service.ts new file mode 100644 index 0000000..66b5ff7 --- /dev/null +++ b/libs/modules/src/dapr/dapr.service.ts @@ -0,0 +1,13 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { DaprClient } from '@dapr/dapr'; + +@Injectable() +export class DaprService { + daprClient: DaprClient; + private readonly logger = new Logger(DaprService.name); + + constructor() { + this.logger.log('Initializing DaprClient') + this.daprClient = new DaprClient(); + } +} diff --git a/libs/modules/src/index.ts b/libs/modules/src/index.ts index 3222471..31be3ca 100644 --- a/libs/modules/src/index.ts +++ b/libs/modules/src/index.ts @@ -1,22 +1,20 @@ -// Azure App Configuration - -export * from './azAppConfig/az-app-config.module'; -export * from './azAppConfig/az-app-config.service'; - -// Azure Data Tables - -export * from './azTable/az-table.module'; -export * from './azTable/az-table.service'; -export { TableClient } from '@azure/data-tables'; - // Auth export * from './auth/auth.module'; export * from './auth/auth.gaurd'; export * from './auth/public.decorator'; +// Dapr + +export * from './dapr/dapr.module' +export * from './dapr/dapr.service' + // MS Graph export * from './msGraph/ms-graph.module'; export * from './msGraph/ms-graph.service'; export { Client as MsGraphClient } from '@microsoft/microsoft-graph-client'; + +// Custom Error + +export * from './util/customError'; diff --git a/libs/modules/src/msGraph/ms-graph.constants.ts b/libs/modules/src/msGraph/ms-graph.constants.ts deleted file mode 100644 index dca147d..0000000 --- a/libs/modules/src/msGraph/ms-graph.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const MS_GRAPH_OPTIONS = 'MS_GRAPH_OPTIONS'; \ No newline at end of file diff --git a/libs/modules/src/msGraph/ms-graph.interface.ts b/libs/modules/src/msGraph/ms-graph.interface.ts index a62ca91..2bfcb41 100644 --- a/libs/modules/src/msGraph/ms-graph.interface.ts +++ b/libs/modules/src/msGraph/ms-graph.interface.ts @@ -1,4 +1,4 @@ -export interface MsGraphOptions { +export interface MsGraphModuleOptions { tenantId: string; clientId: string; clientSecret: string; diff --git a/libs/modules/src/msGraph/ms-graph.module-definition.ts b/libs/modules/src/msGraph/ms-graph.module-definition.ts new file mode 100644 index 0000000..fc706db --- /dev/null +++ b/libs/modules/src/msGraph/ms-graph.module-definition.ts @@ -0,0 +1,4 @@ +import { ConfigurableModuleBuilder } from '@nestjs/common'; +import { MsGraphModuleOptions } from './ms-graph.interface'; + +export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder().build() \ No newline at end of file diff --git a/libs/modules/src/msGraph/ms-graph.module.ts b/libs/modules/src/msGraph/ms-graph.module.ts index da526a0..308abac 100644 --- a/libs/modules/src/msGraph/ms-graph.module.ts +++ b/libs/modules/src/msGraph/ms-graph.module.ts @@ -1,21 +1,9 @@ -import { Module, DynamicModule } from '@nestjs/common'; +import { Module } from '@nestjs/common'; import { MsGraphService } from './ms-graph.service'; -import { MsGraphOptions } from './ms-graph.interface'; -import { MS_GRAPH_OPTIONS } from './ms-graph.constants'; +import { ConfigurableModuleClass } from './ms-graph.module-definition'; -@Module({}) -export class MsGraphModule { - static register(options: MsGraphOptions): DynamicModule { - return { - module: MsGraphModule, - providers: [ - { - provide: MS_GRAPH_OPTIONS, - useValue: options - }, - MsGraphService - ], - exports: [MsGraphService] - } - } -} \ No newline at end of file +@Module({ + providers: [MsGraphService], + exports: [MsGraphService] +}) +export class MsGraphModule extends ConfigurableModuleClass {} \ No newline at end of file diff --git a/libs/modules/src/msGraph/ms-graph.service.ts b/libs/modules/src/msGraph/ms-graph.service.ts index f4b64c5..a41efa5 100644 --- a/libs/modules/src/msGraph/ms-graph.service.ts +++ b/libs/modules/src/msGraph/ms-graph.service.ts @@ -1,12 +1,12 @@ import { Inject, Injectable } from '@nestjs/common'; -import { MsGraphOptions } from './ms-graph.interface'; -import { MS_GRAPH_OPTIONS } from './ms-graph.constants'; +import { MsGraphModuleOptions } from './ms-graph.interface'; import { Client } from '@microsoft/microsoft-graph-client'; import { AuthenticationResult, ConfidentialClientApplication, OnBehalfOfRequest } from '@azure/msal-node'; +import { MODULE_OPTIONS_TOKEN } from './ms-graph.module-definition'; @Injectable() export class MsGraphService { - constructor(@Inject(MS_GRAPH_OPTIONS) private msGraphOptions: MsGraphOptions) {} + constructor(@Inject(MODULE_OPTIONS_TOKEN) private msGraphModuleOptions: MsGraphModuleOptions) {} async getMsGraphAuth(accessToken: string, scopes: string[]): Promise { try { @@ -16,9 +16,9 @@ export class MsGraphService { } const cca = new ConfidentialClientApplication({ auth: { - clientId: this.msGraphOptions.clientId, - clientSecret: this.msGraphOptions.clientSecret, - authority: `https://login.microsoftonline.com/${this.msGraphOptions.tenantId}` + clientId: this.msGraphModuleOptions.clientId, + clientSecret: this.msGraphModuleOptions.clientSecret, + authority: `https://login.microsoftonline.com/${this.msGraphModuleOptions.tenantId}` } }); const authenticationResult: AuthenticationResult = await cca.acquireTokenOnBehalfOf(oboRequest); diff --git a/libs/modules/src/util/customError.ts b/libs/modules/src/util/customError.ts new file mode 100644 index 0000000..cffb3bb --- /dev/null +++ b/libs/modules/src/util/customError.ts @@ -0,0 +1,9 @@ +export class CustomError extends Error { + statusCode: number; + + constructor(message, name, statusCode) { + super(message); + this.name = name; + this.statusCode = statusCode; + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3b25966..8d187af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,27 @@ { "name": "@noahspan/noahspan-modules", - "version": "0.3.5", + "version": "0.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@noahspan/noahspan-modules", - "version": "0.3.5", + "version": "0.5.2", "license": "UNLICENSED", "dependencies": { "@azure/app-configuration": "^1.6.0", "@azure/data-tables": "^13.2.2", "@azure/identity": "^4.2.0", "@azure/msal-node": "^2.9.2", + "@dapr/dapr": "^3.4.1", "@microsoft/microsoft-graph-client": "^3.0.7", "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.0.0", "axios": "^1.7.2", + "express-jwt": "^8.5.1", + "jwks-rsa": "^3.1.0", "passport-azure-ad": "^4.3.5", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1" @@ -1201,6 +1204,23 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@dapr/dapr": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@dapr/dapr/-/dapr-3.4.1.tgz", + "integrity": "sha512-Ev9/Pqzo2ftiDU3gYOCiOJR/UZ5fZk+y+hFcn133mBkYvbU9cTU9S+/46kH2YVJCg6+62m/rG7LQ1o2s5gX76Q==", + "dependencies": { + "@grpc/grpc-js": "^1.9.3", + "@js-temporal/polyfill": "^0.3.0", + "@microsoft/durabletask-js": "^0.1.0-alpha.2", + "@types/google-protobuf": "^3.15.5", + "@types/node-fetch": "^2.6.2", + "body-parser": "^1.19.0", + "express": "^4.18.2", + "google-protobuf": "^3.18.0", + "http-terminator": "^3.2.0", + "node-fetch": "^2.6.7" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1301,6 +1321,35 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@grpc/grpc-js": { + "version": "1.12.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.5.tgz", + "integrity": "sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1939,6 +1988,27 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@js-temporal/polyfill": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.3.0.tgz", + "integrity": "sha512-cxxxis19j0WvK3+kUwKrXeXaDBaWxLeRfKqlVz7g50Cly6UgGs2p3wovH9zjtZ4TtjYHDR4De/880+aalduDZQ==", + "dependencies": { + "big-integer": "^1.6.51", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@ljharb/through": { "version": "2.3.13", "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", @@ -1959,6 +2029,15 @@ "node": ">=8" } }, + "node_modules/@microsoft/durabletask-js": { + "version": "0.1.0-alpha.2", + "resolved": "https://registry.npmjs.org/@microsoft/durabletask-js/-/durabletask-js-0.1.0-alpha.2.tgz", + "integrity": "sha512-EiUgOyT05JQ9/M/InjTKdXs5Y1XxdXRczb6nizceJglXr8S/myxMnQHDV1QRASxroFCoTyKiDHU6uAq4Cpe/LQ==", + "dependencies": { + "@grpc/grpc-js": "^1.8.14", + "google-protobuf": "^3.21.2" + } + }, "node_modules/@microsoft/microsoft-graph-client": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.7.tgz", @@ -2326,6 +2405,60 @@ "node": ">=14" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2419,7 +2552,6 @@ "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -2429,7 +2561,6 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -2470,7 +2601,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -2482,7 +2612,6 @@ "version": "4.19.1", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.1.tgz", "integrity": "sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==", - "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2490,6 +2619,11 @@ "@types/send": "*" } }, + "node_modules/@types/google-protobuf": { + "version": "3.15.12", + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.12.tgz", + "integrity": "sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ==" + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -2502,8 +2636,7 @@ "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", @@ -2545,6 +2678,15 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.8.tgz", + "integrity": "sha512-7fx54m60nLFUVYlxAB1xpe9CBWX2vSrk50Y6ogRJ1v5xxtba7qXTg5BgYDN5dq+yuQQ9HaVlHJyAAt1/mxryFg==", + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, "node_modules/@types/methods": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", @@ -2554,29 +2696,39 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" }, "node_modules/@types/node": { "version": "20.12.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, "node_modules/@types/qs": { "version": "6.9.15", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/semver": { "version": "7.5.8", @@ -2588,7 +2740,6 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2598,7 +2749,6 @@ "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -3136,7 +3286,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3392,6 +3541,14 @@ "node": ">=6.0.0" } }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3832,7 +3989,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3846,7 +4002,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4179,6 +4334,17 @@ "node": ">=8" } }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4318,8 +4484,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -4385,7 +4550,6 @@ "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" } @@ -4741,6 +4905,24 @@ "node": ">= 0.10.0" } }, + "node_modules/express-jwt": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-8.5.1.tgz", + "integrity": "sha512-Dv6QjDLpR2jmdb8M6XQXiCcpEom7mK8TOqnr0/TngDKsG2DHVkO8+XnVxkJVN7BuS1I3OrGw6N8j5DaaGgkDRQ==", + "dependencies": { + "@types/jsonwebtoken": "^9", + "express-unless": "^2.1.3", + "jsonwebtoken": "^9.0.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/express-unless": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-2.1.3.tgz", + "integrity": "sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ==" + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4807,6 +4989,14 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-printf": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.10.tgz", + "integrity": "sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==", + "engines": { + "node": ">=10.0" + } + }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", @@ -5214,7 +5404,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -5333,6 +5522,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==" + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -5459,6 +5653,31 @@ "node": ">= 14" } }, + "node_modules/http-terminator": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/http-terminator/-/http-terminator-3.2.0.tgz", + "integrity": "sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==", + "dependencies": { + "delay": "^5.0.0", + "p-wait-for": "^3.2.0", + "roarr": "^7.0.4", + "type-fest": "^2.3.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/http-terminator/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/https-proxy-agent": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", @@ -5679,7 +5898,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -6551,6 +6769,14 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6666,6 +6892,22 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jwks-rsa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.1.0.tgz", + "integrity": "sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==", + "dependencies": { + "@types/express": "^4.17.17", + "@types/jsonwebtoken": "^9.0.2", + "debug": "^4.3.4", + "jose": "^4.14.6", + "limiter": "^1.1.5", + "lru-memoizer": "^2.2.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/jws": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", @@ -6715,6 +6957,11 @@ "node": ">= 0.8.0" } }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -6750,6 +6997,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -6832,6 +7084,31 @@ "yallist": "^3.0.2" } }, + "node_modules/lru-memoizer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", + "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-memoizer/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", @@ -7402,6 +7679,14 @@ "node": ">=0.10.0" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -7432,6 +7717,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -7441,6 +7737,20 @@ "node": ">=6" } }, + "node_modules/p-wait-for": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", + "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", + "dependencies": { + "p-timeout": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pako": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", @@ -7825,6 +8135,29 @@ "node": ">= 6" } }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -8016,7 +8349,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8175,6 +8507,19 @@ "node": ">=8" } }, + "node_modules/roarr": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.1.tgz", + "integrity": "sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==", + "dependencies": { + "fast-printf": "^1.6.9", + "safe-stable-stringify": "^2.4.3", + "semver-compare": "^1.0.0" + }, + "engines": { + "node": ">=18.0" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -8240,6 +8585,14 @@ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "optional": true }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8305,6 +8658,11 @@ "node": ">=10" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -8625,7 +8983,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8654,7 +9011,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9256,8 +9612,7 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/universalify": { "version": "2.0.1", @@ -9601,7 +9956,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -9616,7 +9970,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -9634,7 +9987,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "engines": { "node": ">=12" } diff --git a/package.json b/package.json index fc72e7b..daa4435 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@noahspan/noahspan-modules", - "version": "0.4.7", + "version": "0.5.3", "description": "", "author": "", "license": "UNLICENSED", @@ -28,12 +28,15 @@ "@azure/data-tables": "^13.2.2", "@azure/identity": "^4.2.0", "@azure/msal-node": "^2.9.2", + "@dapr/dapr": "^3.4.1", "@microsoft/microsoft-graph-client": "^3.0.7", "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.0.0", "axios": "^1.7.2", + "express-jwt": "^8.5.1", + "jwks-rsa": "^3.1.0", "passport-azure-ad": "^4.3.5", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1"