From 8f0ef994ce5a995b2efae7e73804ccc7b621e1cf Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Sun, 7 Jul 2024 01:08:34 +0100 Subject: [PATCH] refactor(root): Rename Echo to Bridge (#6003) --- .cspell.json | 2 +- .source | 2 +- README.md | 70 ++-- .../e2e/{echo.server.ts => bridge.server.ts} | 6 +- apps/api/package.json | 2 +- apps/api/src/app.module.ts | 4 +- ...2e-ee.ts => bridge-health-check.e2e-ee.ts} | 16 +- .../app/events/e2e/bridge-trigger.e2e-ee.ts | 66 +-- .../parse-event-request.usecase.ts | 8 +- .../send-test-email.usecase.ts | 6 +- .../bridge-sync.e2e-ee.ts} | 44 +- .../e2e/create-notification-templates.e2e.ts | 7 +- apps/api/src/bootstrap.ts | 2 - apps/web/src/components/docs/Docs.tsx | 8 +- .../{EchoStatus.tsx => BridgeStatus.tsx} | 14 +- ...-terminal.d.ts => framework-terminal.d.ts} | 2 +- apps/web/src/hooks/useEchoTerminalScript.ts | 12 - .../src/hooks/useFrameworkTerminalScript.ts | 12 + apps/web/src/hooks/useTemplates.ts | 4 +- .../src/pages/get-started/GetStartedPage.tsx | 4 +- .../components/AdditionInformationLink.tsx | 4 +- .../{EchoTab.tsx => FrameworkTab.tsx} | 16 +- .../get-started-tabs/GetStartedTabs.tsx | 13 +- .../get-started-tabs/useGetStartedTabs.ts | 2 +- .../consts/OnboardingUseCasesTabsEnum.ts | 2 +- .../get-started/consts/UseCases.const.tsx | 2 +- .../pages/templates/TemplatesListNoData.tsx | 4 +- .../components/ChannelStepEditor.tsx | 4 +- .../components/CreateWorkflowDropdown.tsx | 4 +- ...tList.tsx => FrameworkProjectWaitList.tsx} | 28 +- .../components/TemplateEditorFormProvider.tsx | 5 +- .../templates-store/TemplatesStoreModal.tsx | 4 +- .../templates/editor/TemplateEditorPage.tsx | 3 +- apps/worker/package.json | 2 +- .../usecases/add-job/add-job.usecase.ts | 18 +- .../send-message/send-message.usecase.ts | 43 +- .../subscriber-job-bound.usecase.ts | 6 +- .../src/app/workflow/workflow.module.ts | 4 +- .../{echo/echo-api => bridge-api}/.gitignore | 0 .../echo-api => bridge-api}/check-ee.mjs | 0 .../echo-api => bridge-api}/package.json | 4 +- enterprise/packages/bridge-api/src | 1 + .../echo-api => bridge-api}/tsconfig.json | 2 +- .../tsconfig.spec.json | 0 .../echo-worker => bridge-worker}/.gitignore | 0 .../check-ee.mjs | 0 .../package.json | 2 +- enterprise/packages/bridge-worker/src | 1 + .../tsconfig.json | 2 +- .../tsconfig.spec.json | 0 .../packages/{libs => }/dal/.dockerignore | 0 .../packages/{libs => }/dal/.eslintrc.js | 2 +- enterprise/packages/{libs => }/dal/.gitignore | 0 .../packages/{libs => }/dal/check-ee.mjs | 0 .../packages/{libs => }/dal/package.json | 0 enterprise/packages/dal/src | 1 + .../{libs => }/dal/tsconfig.build.json | 2 +- .../packages/{libs => }/dal/tsconfig.json | 2 +- enterprise/packages/echo/echo-api/src | 1 - enterprise/packages/echo/echo-worker/src | 1 - enterprise/packages/libs/dal/src | 1 - libs/application-generic/package.json | 2 +- .../create-notification-jobs.usecase.ts | 4 +- .../create-workflow.usecase.ts | 7 +- .../create-message-template.usecase.ts | 4 +- .../delete-message-template.usecase.ts | 4 +- .../update-message-template.usecase.ts | 4 +- .../trigger-event/trigger-event.usecase.ts | 2 +- .../update-workflow.usecase.ts | 6 +- .../src/utils/require-inject.ts | 46 ++- .../environment/environment.entity.ts | 3 + .../environment/environment.schema.ts | 3 + .../notification-template.entity.ts | 6 +- .../notification-template.schema.ts | 5 +- .../environment/environment.interface.ts | 3 + .../notification-template.interface.ts | 15 +- .../src/types/feature-flags/feature-flags.ts | 1 - .../src/types/notification-templates/index.ts | 1 + libs/shared/src/utils/bridge.utils.ts | 5 + libs/shared/src/utils/index.ts | 1 + pnpm-lock.yaml | 381 ++++++++++-------- pnpm-workspace.yaml | 3 - 82 files changed, 516 insertions(+), 467 deletions(-) rename apps/api/e2e/{echo.server.ts => bridge.server.ts} (84%) rename apps/api/src/app/events/e2e/{echo-health-check.e2e-ee.ts => bridge-health-check.e2e-ee.ts} (85%) rename apps/api/src/app/testing/{echo/echo-sync.e2e-ee.ts => bridge/bridge-sync.e2e-ee.ts} (87%) rename apps/web/src/components/layout/components/{EchoStatus.tsx => BridgeStatus.tsx} (87%) rename apps/web/src/{echo-terminal.d.ts => framework-terminal.d.ts} (83%) delete mode 100644 apps/web/src/hooks/useEchoTerminalScript.ts create mode 100644 apps/web/src/hooks/useFrameworkTerminalScript.ts rename apps/web/src/pages/get-started/components/get-started-tabs/{EchoTab.tsx => FrameworkTab.tsx} (91%) rename apps/web/src/pages/templates/components/{EchoProjectWaitList.tsx => FrameworkProjectWaitList.tsx} (75%) rename enterprise/packages/{echo/echo-api => bridge-api}/.gitignore (100%) rename enterprise/packages/{echo/echo-api => bridge-api}/check-ee.mjs (100%) rename enterprise/packages/{echo/echo-api => bridge-api}/package.json (95%) create mode 120000 enterprise/packages/bridge-api/src rename enterprise/packages/{echo/echo-api => bridge-api}/tsconfig.json (91%) rename enterprise/packages/{echo/echo-api => bridge-api}/tsconfig.spec.json (100%) rename enterprise/packages/{echo/echo-worker => bridge-worker}/.gitignore (100%) rename enterprise/packages/{echo/echo-worker => bridge-worker}/check-ee.mjs (100%) rename enterprise/packages/{echo/echo-worker => bridge-worker}/package.json (97%) create mode 120000 enterprise/packages/bridge-worker/src rename enterprise/packages/{echo/echo-worker => bridge-worker}/tsconfig.json (91%) rename enterprise/packages/{echo/echo-worker => bridge-worker}/tsconfig.spec.json (100%) rename enterprise/packages/{libs => }/dal/.dockerignore (100%) rename enterprise/packages/{libs => }/dal/.eslintrc.js (79%) rename enterprise/packages/{libs => }/dal/.gitignore (100%) rename enterprise/packages/{libs => }/dal/check-ee.mjs (100%) rename enterprise/packages/{libs => }/dal/package.json (100%) create mode 120000 enterprise/packages/dal/src rename enterprise/packages/{libs => }/dal/tsconfig.build.json (85%) rename enterprise/packages/{libs => }/dal/tsconfig.json (72%) delete mode 120000 enterprise/packages/echo/echo-api/src delete mode 120000 enterprise/packages/echo/echo-worker/src delete mode 120000 enterprise/packages/libs/dal/src create mode 100644 libs/shared/src/utils/bridge.utils.ts diff --git a/.cspell.json b/.cspell.json index dd013ca074e..91ac239ebc6 100644 --- a/.cspell.json +++ b/.cspell.json @@ -654,7 +654,7 @@ "tailwindcss", "focusable", "textareas", - "echoterminal" + "frameworkterminal" ], "flagWords": [], "patterns": [ diff --git a/.source b/.source index ee121ce7e56..3e87db2f004 160000 --- a/.source +++ b/.source @@ -1 +1 @@ -Subproject commit ee121ce7e561b2bb5e9b948e08add7df542abdd1 +Subproject commit 3e87db2f0044912c58151d3808c6e2a61c2007ae diff --git a/README.md b/README.md index d8cd905fe65..9bea16c48f2 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ With Novu, you can create custom workflows and define conditions for each channe To get started, type the following command in your Terminal. ```bash -npx novu-labs@latest echo +npx novu@latest dev ``` ## 📚 Table Of Contents @@ -90,54 +90,34 @@ npx novu-labs@latest echo ## Notification Workflows as Code -For API documentation and reference, please visit [Echo API Reference](https://docs.novu.co/framework/quickstart?utm_campaign=github-readme). +For API documentation and reference, please visit our [API Reference](https://docs.novu.co/getting-started/introduction?utm_campaign=github-readme). ```ts - -client.workflow('comment-on-post', async ({step, subscriber}) => { - const inAppResponse = await step.inApp('in-app-step', async (controls) => { - return { - body: renderReactComponent(controls) - }; - }, { - controlSchema: { - // ...JSON Schema or ZOD/Ajv/Class Validators definition - } +import { workflow, CronExpression } from '@novu/framework'; +import { z } from 'zod'; +import { render } from '@react-email/render'; + +const commentWorkflow = workflow('comment-workflow', async (event) => { + const digest = await event.step.digest('digest-comments', (controls) => ({ + cron: controls.schedule + }), { controlSchema: z.object({ schedule: z.nativeEnum(CronExpression) }) }); + + await event.step.email('digest-email', async (controls) => ({ + subject: controls.subject, + body: render() + }), { + skip: () => !digest.events.length, + controlSchema: z.object({ + subject: z.string().default('Hi {{subscriber.firstName}} - Acme Comments'), + openAiModel: z.enum(['gpt-3.5-turbo', 'gpt-4o']).default('gpt-4o'), + aiPrompt: z.string().default('Produce a concise comment digest'), + }) }); +}, { payloadSchema: z.object({ name: z.string(), comment: z.string() }) }); - // Novu Worker Engine will manage the state and durability of each step in isolation - const { events } = await step.digest('1 day'); - - await step.email('email-step', async () => { - return { - subject: 'E-mail Subject', - body: renderReactEmail(); - } - }, { - // Step-level controls defined in code and controlled in the novu Cloud UI by a Non-Technical Team member - controlSchema: { - // ...JSON Schema - }, - providers: { - sendgrid: async (controls) => { - // Echo runs as part of your application, so you have access to your database or resources - - return { - to: email, - ipPoolName: 'custom-pool' - }; - } - }, - skip: () => { - // Write custom skip logic - return inAppResponse.seen || subscriber.isOnline; - } - }); -// Define your workflow trigger payload using json schema and custom validation; -}, { - payloadSchema: { - // ...JSON Schema - } +await commentWorkflow.trigger({ + payload: { name: 'John', comment: 'Are you free to give me a call?' }, + to: 'jane@acme.com' }); ``` diff --git a/apps/api/e2e/echo.server.ts b/apps/api/e2e/bridge.server.ts similarity index 84% rename from apps/api/e2e/echo.server.ts rename to apps/api/e2e/bridge.server.ts index de63f1f8414..6f9bf45e0b2 100644 --- a/apps/api/e2e/echo.server.ts +++ b/apps/api/e2e/bridge.server.ts @@ -8,11 +8,11 @@ export type ServerStartOptions = { workflows: Array; }; -export class EchoServer { +export class BridgeServer { private server: express.Express; private app: http.Server; private port = 9999; - public echo = new Client({ strictAuthentication: false }); + public client = new Client({ strictAuthentication: false }); get serverPath() { return `http://localhost:${this.port}`; @@ -21,7 +21,7 @@ export class EchoServer { async start(options: ServerStartOptions) { this.server = express(); this.server.use(express.json()); - this.server.use(serve({ client: this.echo, workflows: options.workflows })); + this.server.use(serve({ client: this.client, workflows: options.workflows })); await new Promise((resolve) => { this.app = this.server.listen(this.port, () => { diff --git a/apps/api/package.json b/apps/api/package.json index 478fd902f69..cfca8cd200c 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -122,7 +122,7 @@ "optionalDependencies": { "@novu/ee-auth": "workspace:*", "@novu/ee-billing": "workspace:*", - "@novu/ee-echo-api": "workspace:*", + "@novu/ee-bridge-api": "workspace:*", "@novu/ee-shared-services": "workspace:*", "@novu/ee-translation": "workspace:*" } diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts index 49a9a98497f..0a0f65bca35 100644 --- a/apps/api/src/app.module.ts +++ b/apps/api/src/app.module.ts @@ -46,8 +46,8 @@ const enterpriseImports = (): Array { +describe('Bridge Health Check', async () => { let session: UserSession; - let frameworkClient: EchoServer; + let frameworkClient: BridgeServer; let subscriber: SubscriberEntity; let subscriberService: SubscribersService; @@ -20,7 +20,7 @@ describe('Echo Health Check', async () => { }; }); }); - frameworkClient = new EchoServer(); + frameworkClient = new BridgeServer(); await frameworkClient.start({ workflows: [healthCheckWorkflow] }); }); @@ -36,25 +36,25 @@ describe('Echo Health Check', async () => { }); it('should have a status', async () => { - const result = await axios.get(frameworkClient.serverPath + '/echo?action=health-check'); + const result = await axios.get(frameworkClient.serverPath + '/novu?action=health-check'); expect(result.data.status).to.equal('ok'); }); it('should have an sdk version', async () => { - const result = await axios.get(frameworkClient.serverPath + '/echo?action=health-check'); + const result = await axios.get(frameworkClient.serverPath + '/novu?action=health-check'); expect(result.data.sdkVersion).to.be.a('string'); }); it('should have a framework version', async () => { - const result = await axios.get(frameworkClient.serverPath + '/echo?action=health-check'); + const result = await axios.get(frameworkClient.serverPath + '/novu?action=health-check'); expect(result.data.frameworkVersion).to.be.a('string'); }); it('should return the discovered resources', async () => { - const result = await axios.get(frameworkClient.serverPath + '/echo?action=health-check'); + const result = await axios.get(frameworkClient.serverPath + '/novu?action=health-check'); expect(result.data.discovered).to.deep.equal({ workflows: 1, steps: 1 }); }); diff --git a/apps/api/src/app/events/e2e/bridge-trigger.e2e-ee.ts b/apps/api/src/app/events/e2e/bridge-trigger.e2e-ee.ts index cfa75d075ec..4f79ef9e201 100644 --- a/apps/api/src/app/events/e2e/bridge-trigger.e2e-ee.ts +++ b/apps/api/src/app/events/e2e/bridge-trigger.e2e-ee.ts @@ -19,7 +19,7 @@ import { } from '@novu/shared'; import { workflow } from '@novu/framework'; -import { EchoServer } from '../../../../e2e/echo.server'; +import { BridgeServer } from '../../../../e2e/bridge.server'; const eventTriggerPath = '/v1/events/trigger'; @@ -32,7 +32,7 @@ const contexts: Context[] = [ contexts.forEach((context: Context) => { describe('Bridge Trigger', async () => { let session: UserSession; - let echoServer: EchoServer; + let bridgeServer: BridgeServer; const messageRepository = new MessageRepository(); const workflowsRepository = new NotificationTemplateRepository(); const jobRepository = new JobRepository(); @@ -42,8 +42,8 @@ contexts.forEach((context: Context) => { let bridge; beforeEach(async () => { - echoServer = new EchoServer(); - bridge = context.isStateful ? undefined : { url: echoServer.serverPath + '/echo' }; + bridgeServer = new BridgeServer(); + bridge = context.isStateful ? undefined : { url: bridgeServer.serverPath + '/novu' }; session = new UserSession(); await session.initialize(); subscriberService = new SubscribersService(session.organization._id, session.environment._id); @@ -51,10 +51,10 @@ contexts.forEach((context: Context) => { }); afterEach(async () => { - await echoServer.stop(); + await bridgeServer.stop(); }); - it(`should trigger the echo workflow with sync [${context.name}]`, async () => { + it(`should trigger the bridge workflow with sync [${context.name}]`, async () => { const workflowId = `hello-world-${context.name + '-' + uuidv4()}`; const newWorkflow = workflow( workflowId, @@ -123,10 +123,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await discoverAndSyncEcho(session, workflowsRepository, workflowId, echoServer); + await discoverAndSyncBridge(session, workflowsRepository, workflowId, bridgeServer); const foundWorkflow = await workflowsRepository.findByTriggerIdentifier(session.environment._id, workflowId); expect(foundWorkflow).to.be.ok; @@ -190,10 +190,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await syncWorkflow(session, workflowsRepository, workflowIdSkipByStatic, echoServer); + await syncWorkflow(session, workflowsRepository, workflowIdSkipByStatic, bridgeServer); } await triggerEvent(session, workflowIdSkipByStatic, subscriber, null, bridge); @@ -254,10 +254,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await syncWorkflow(session, workflowsRepository, workflowIdSkipByVariable, echoServer); + await syncWorkflow(session, workflowsRepository, workflowIdSkipByVariable, bridgeServer); } await triggerEvent(session, workflowIdSkipByVariable, subscriber, null, bridge); @@ -305,10 +305,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await discoverAndSyncEcho(session, workflowsRepository, workflowId, echoServer); + await discoverAndSyncBridge(session, workflowsRepository, workflowId, bridgeServer); } await triggerEvent(session, workflowId, subscriber, {}, bridge); @@ -386,10 +386,10 @@ contexts.forEach((context: Context) => { }); }); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await discoverAndSyncEcho(session, workflowsRepository, workflowId, echoServer); + await discoverAndSyncBridge(session, workflowsRepository, workflowId, bridgeServer); } await triggerEvent(session, workflowId, subscriber, {}, bridge); @@ -413,7 +413,7 @@ contexts.forEach((context: Context) => { expect(messagesAfterEmail[0].subject).to.include('Read'); }); - it(`should trigger the echo workflow with digest [${context.name}]`, async () => { + it(`should trigger the bridge workflow with digest [${context.name}]`, async () => { const workflowId = `digest-workflow-${context.name + '-' + uuidv4()}`; const newWorkflow = workflow( workflowId, @@ -464,10 +464,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await discoverAndSyncEcho(session, workflowsRepository, workflowId, echoServer); + await discoverAndSyncBridge(session, workflowsRepository, workflowId, bridgeServer); } await triggerEvent(session, workflowId, subscriber, { name: 'John' }, bridge); @@ -485,7 +485,7 @@ contexts.forEach((context: Context) => { expect(messages[0].content).to.include('2 people liked your post'); }); - it(`should trigger the echo workflow with delay [${context.name}]`, async () => { + it(`should trigger the bridge workflow with delay [${context.name}]`, async () => { const workflowId = `delay-workflow-${context.name + '-' + uuidv4()}`; const newWorkflow = workflow( workflowId, @@ -546,10 +546,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await discoverAndSyncEcho(session, workflowsRepository, workflowId, echoServer); + await discoverAndSyncBridge(session, workflowsRepository, workflowId, bridgeServer); } await triggerEvent(session, workflowId, subscriber, null, bridge); @@ -566,7 +566,7 @@ contexts.forEach((context: Context) => { expect(messagesAfter[0].content).to.match(/people waited for \d+ seconds/); }); - it(`should trigger the echo workflow with control default and payload data [${context.name}]`, async () => { + it(`should trigger the bridge workflow with control default and payload data [${context.name}]`, async () => { const workflowId = `default-payload-params-workflow-${context.name + '-' + uuidv4()}`; const newWorkflow = workflow( workflowId, @@ -601,10 +601,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await discoverAndSyncEcho(session, workflowsRepository, workflowId, echoServer); + await discoverAndSyncBridge(session, workflowsRepository, workflowId, bridgeServer); } await triggerEvent(session, workflowId, subscriber, {}, bridge); @@ -623,7 +623,7 @@ contexts.forEach((context: Context) => { expect(sentMessage[0].subject).to.include('prefix Hello payload_name'); }); - it(`should trigger the echo workflow with control variables [${context.name}]`, async () => { + it(`should trigger the bridge workflow with control variables [${context.name}]`, async () => { const workflowId = `control-variables-workflow-${context.name + '-' + uuidv4()}`; const stepId = 'send-email'; const newWorkflow = workflow( @@ -660,10 +660,10 @@ contexts.forEach((context: Context) => { } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); if (context.isStateful) { - await discoverAndSyncEcho(session, workflowsRepository, workflowId, echoServer); + await discoverAndSyncBridge(session, workflowsRepository, workflowId, bridgeServer); await saveControlVariables(session, workflowId, stepId, { variables: { name: 'stored_control_name' } }); } @@ -687,10 +687,10 @@ async function syncWorkflow( session: UserSession, workflowsRepository: NotificationTemplateRepository, workflowIdentifier: string, - echoServer: EchoServer + bridgeServer: BridgeServer ) { await session.testAgent.post(`/v1/bridge/sync`).send({ - bridgeUrl: echoServer.serverPath + '/echo', + bridgeUrl: bridgeServer.serverPath + '/novu', }); const foundWorkflow = await workflowsRepository.findByTriggerIdentifier(session.environment._id, workflowIdentifier); @@ -731,14 +731,14 @@ async function triggerEvent( ); } -async function discoverAndSyncEcho( +async function discoverAndSyncBridge( session: UserSession, workflowsRepository?: NotificationTemplateRepository, workflowIdentifier?: string, - echoServer?: EchoServer + bridgeServer?: BridgeServer ) { const discoverResponse = await session.testAgent.post(`/v1/bridge/sync`).send({ - bridgeUrl: echoServer?.serverPath + '/echo', + bridgeUrl: bridgeServer?.serverPath + '/novu', }); if (!workflowsRepository || !workflowIdentifier) { diff --git a/apps/api/src/app/events/usecases/parse-event-request/parse-event-request.usecase.ts b/apps/api/src/app/events/usecases/parse-event-request/parse-event-request.usecase.ts index c2bffb57b85..8850dac9f3c 100644 --- a/apps/api/src/app/events/usecases/parse-event-request/parse-event-request.usecase.ts +++ b/apps/api/src/app/events/usecases/parse-event-request/parse-event-request.usecase.ts @@ -20,7 +20,7 @@ import { InvalidateCacheService, requireInject, IUseCaseInterface, - IDoBridgeRequestCommand, + IExecuteBridgeRequestCommand, } from '@novu/application-generic'; import { FeatureFlagsKeysEnum, @@ -57,7 +57,7 @@ const LOG_CONTEXT = 'ParseEventRequest'; @Injectable() export class ParseEventRequest { - private doBridgeRequest: IUseCaseInterface; + private executeBridgeRequest: IUseCaseInterface; constructor( private notificationTemplateRepository: NotificationTemplateRepository, @@ -75,7 +75,7 @@ export class ParseEventRequest { private invalidateCacheService: InvalidateCacheService, protected moduleRef: ModuleRef ) { - this.doBridgeRequest = requireInject('do_bridge_request', this.moduleRef); + this.executeBridgeRequest = requireInject('execute-bridge-request', this.moduleRef); } @InstrumentUsecase() @@ -196,7 +196,7 @@ export class ParseEventRequest { return null; } - const discover = await this.doBridgeRequest.execute({ + const discover = await this.executeBridgeRequest.execute({ bridgeUrl: command.bridgeUrl, apiKey: environment.apiKeys[0].key, action: GetActionEnum.DISCOVER, diff --git a/apps/api/src/app/events/usecases/send-test-email/send-test-email.usecase.ts b/apps/api/src/app/events/usecases/send-test-email/send-test-email.usecase.ts index 8cd63f4487c..22aaa7c8111 100644 --- a/apps/api/src/app/events/usecases/send-test-email/send-test-email.usecase.ts +++ b/apps/api/src/app/events/usecases/send-test-email/send-test-email.usecase.ts @@ -89,10 +89,10 @@ export class SendTestEmail { if (command.bridge) { if (process.env.NOVU_ENTERPRISE === 'true' || process.env.CI_EE_TEST === 'true') { - if (!require('@novu/ee-echo-api')?.PreviewStep) { - throw new ApiException('Echo api module is not loaded'); + if (!require('@novu/ee-bridge-api')?.PreviewStep) { + throw new ApiException('Bridge api module is not loaded'); } - const service = this.moduleRef.get(require('@novu/ee-echo-api')?.PreviewStep, { strict: false }); + const service = this.moduleRef.get(require('@novu/ee-bridge-api')?.PreviewStep, { strict: false }); const data = await service.execute({ workflowId: command.workflowId, stepId: command.stepId, diff --git a/apps/api/src/app/testing/echo/echo-sync.e2e-ee.ts b/apps/api/src/app/testing/bridge/bridge-sync.e2e-ee.ts similarity index 87% rename from apps/api/src/app/testing/echo/echo-sync.e2e-ee.ts rename to apps/api/src/app/testing/bridge/bridge-sync.e2e-ee.ts index a0dbed921e8..3a301320dd7 100644 --- a/apps/api/src/app/testing/echo/echo-sync.e2e-ee.ts +++ b/apps/api/src/app/testing/bridge/bridge-sync.e2e-ee.ts @@ -1,11 +1,11 @@ import { UserSession } from '@novu/testing'; import { expect } from 'chai'; import { EnvironmentRepository, NotificationTemplateRepository, MessageTemplateRepository } from '@novu/dal'; -import { StepTypeEnum } from '@novu/shared'; -import { EchoServer } from '../../../../e2e/echo.server'; +import { StepTypeEnum, WorkflowTypeEnum } from '@novu/shared'; +import { BridgeServer } from '../../../../e2e/bridge.server'; import { workflow } from '@novu/framework'; -describe('Echo Sync - /echo/sync (POST)', async () => { +describe('Bridge Sync - /bridge/sync (POST)', async () => { let session: UserSession; const environmentRepository = new EnvironmentRepository(); const workflowsRepository = new NotificationTemplateRepository(); @@ -28,29 +28,29 @@ describe('Echo Sync - /echo/sync (POST)', async () => { }, }; - let echoServer: EchoServer; + let bridgeServer: BridgeServer; beforeEach(async () => { session = new UserSession(); await session.initialize(); - echoServer = new EchoServer(); + bridgeServer = new BridgeServer(); }); afterEach(async () => { - await echoServer.stop(); + await bridgeServer.stop(); }); - it('should update echo url', async () => { - await echoServer.start({ workflows: [] }); + it('should update bridge url', async () => { + await bridgeServer.start({ workflows: [] }); const result = await session.testAgent.post(`/v1/bridge/sync`).send({ - bridgeUrl: echoServer.serverPath, + bridgeUrl: bridgeServer.serverPath, }); expect(result.body.data?.length).to.equal(0); const environment = await environmentRepository.findOne({ _id: session.environment._id }); - expect(environment?.echo.url).to.equal(echoServer.serverPath); + expect(environment?.echo.url).to.equal(bridgeServer.serverPath); const workflows = await workflowsRepository.find({ _environmentId: session.environment._id }); expect(workflows.length).to.equal(0); @@ -90,10 +90,10 @@ describe('Echo Sync - /echo/sync (POST)', async () => { } as const, } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); const result = await session.testAgent.post(`/v1/bridge/sync`).send({ - bridgeUrl: echoServer.serverPath, + bridgeUrl: bridgeServer.serverPath, }); expect(result.body.data?.length).to.equal(1); @@ -108,7 +108,7 @@ describe('Echo Sync - /echo/sync (POST)', async () => { expect(workflowsCount.length).to.equal(1); expect(workflowData.name).to.equal(workflowId); - expect(workflowData.type).to.equal('ECHO'); + expect(workflowData.type).to.equal(WorkflowTypeEnum.BRIDGE); expect(workflowData.rawData.workflowId).to.equal(workflowId); expect(workflowData.triggers[0].identifier).to.equal(workflowId); @@ -147,10 +147,10 @@ describe('Echo Sync - /echo/sync (POST)', async () => { } as const, } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); const result = await session.testAgent.post(`/v1/bridge/sync`).send({ - bridgeUrl: echoServer.serverPath, + bridgeUrl: bridgeServer.serverPath, }); expect(result.body.data?.length).to.equal(1); @@ -207,15 +207,15 @@ describe('Echo Sync - /echo/sync (POST)', async () => { } as const, } ); - await echoServer.start({ workflows: [newWorkflow] }); + await bridgeServer.start({ workflows: [newWorkflow] }); await session.testAgent.post(`/v1/bridge/sync`).send({ - bridgeUrl: echoServer.serverPath, + bridgeUrl: bridgeServer.serverPath, }); - await echoServer.stop(); + await bridgeServer.stop(); - echoServer = new EchoServer(); + bridgeServer = new BridgeServer(); const workflowId2 = 'hello-world-2'; const newWorkflow2 = workflow( workflowId2, @@ -255,10 +255,10 @@ describe('Echo Sync - /echo/sync (POST)', async () => { } as const, } ); - await echoServer.start({ workflows: [newWorkflow2] }); + await bridgeServer.start({ workflows: [newWorkflow2] }); await session.testAgent.post(`/v1/bridge/sync`).send({ - bridgeUrl: echoServer.serverPath, + bridgeUrl: bridgeServer.serverPath, }); const workflows = await workflowsRepository.find({ _environmentId: session.environment._id }); @@ -267,7 +267,7 @@ describe('Echo Sync - /echo/sync (POST)', async () => { const workflowData = workflows[0]; expect(workflowData.name).to.equal(workflowId2); - expect(workflowData.type).to.equal('ECHO'); + expect(workflowData.type).to.equal(WorkflowTypeEnum.BRIDGE); expect(workflowData.rawData.workflowId).to.equal(workflowId2); expect(workflowData.triggers[0].identifier).to.equal(workflowId2); diff --git a/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts b/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts index d7edff9a121..612a0e542ac 100644 --- a/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts +++ b/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts @@ -14,6 +14,7 @@ import { EmailProviderIdEnum, ChangeEntityTypeEnum, INotificationTemplateStep, + WorkflowTypeEnum, } from '@novu/shared'; import { ChangeRepository, @@ -723,7 +724,7 @@ const blueprintTemplateMock = { shouldStopOnFail: false, uuid: 'b6944995-a283-46bd-b55a-18625fd1d4fd', name: 'In-App', - type: 'REGULAR', + type: WorkflowTypeEnum.REGULAR, filters: [ { children: [], @@ -789,7 +790,7 @@ const blueprintTemplateMock = { shouldStopOnFail: false, uuid: '642e42b5-51e6-4d3b-8a91-067c29e902d4', name: 'Digest', - type: 'REGULAR', + type: WorkflowTypeEnum.REGULAR, filters: [], _templateId: '6485b92e2a50bb4986758662', _parentId: '6485b9052a50bb498675846d', @@ -835,7 +836,7 @@ const blueprintTemplateMock = { shouldStopOnFail: false, uuid: '671d86ec-dc27-413c-a666-ec4aeb191691', name: 'Email', - type: 'REGULAR', + type: WorkflowTypeEnum.REGULAR, filters: [ { value: 'AND', diff --git a/apps/api/src/bootstrap.ts b/apps/api/src/bootstrap.ts index b8c174165ab..e96262c1dcd 100644 --- a/apps/api/src/bootstrap.ts +++ b/apps/api/src/bootstrap.ts @@ -27,8 +27,6 @@ const extendedBodySizeRoutes = [ '/v1/notification-templates', '/v1/workflows', '/v1/layouts', - '/v1/echo/sync', - '/v1/echo/diff', '/v1/bridge/sync', '/v1/bridge/diff', ]; diff --git a/apps/web/src/components/docs/Docs.tsx b/apps/web/src/components/docs/Docs.tsx index 43a20d05218..b1c0a04bad7 100644 --- a/apps/web/src/components/docs/Docs.tsx +++ b/apps/web/src/components/docs/Docs.tsx @@ -10,7 +10,7 @@ import { PropsWithChildren, ReactNode, useEffect, useMemo } from 'react'; import { DOCS_URL, MINTLIFY_IMAGE_URL } from './docs.const'; import { Highlight } from './Highlight'; import { DocsQueryResults } from './useLoadDocs'; -import { useEchoTerminalScript } from '../../hooks/useEchoTerminalScript'; +import { useFrameworkTerminalScript } from '../../hooks/useFrameworkTerminalScript'; const Text = styled('p', text); const LiText = styled('span', text); @@ -40,13 +40,13 @@ export const Docs = ({ code = '', description = '', title = '', isLoading, child } return getMDXComponent(code, { - echoterminal: { - EchoTerminal: () => , + frameworkterminal: { + FrameworkTerminal: () => , }, }); }, [code]); - useEchoTerminalScript(); + useFrameworkTerminalScript(); // Workaround for img tags that is not parsed correctly by mdx-bundler useEffect(() => { diff --git a/apps/web/src/components/layout/components/EchoStatus.tsx b/apps/web/src/components/layout/components/BridgeStatus.tsx similarity index 87% rename from apps/web/src/components/layout/components/EchoStatus.tsx rename to apps/web/src/components/layout/components/BridgeStatus.tsx index a449046f723..55f43f5d6d1 100644 --- a/apps/web/src/components/layout/components/EchoStatus.tsx +++ b/apps/web/src/components/layout/components/BridgeStatus.tsx @@ -6,11 +6,11 @@ import { Popover } from '@novu/design-system'; import { useDisclosure } from '@mantine/hooks'; import { IS_DOCKER_HOSTED } from '../../../config'; -export function EchoStatus() { +export function BridgeStatus() { const [opened, { close, open }] = useDisclosure(false); const { environment } = useEnvironment(); - const echoEnabled = !!environment?.echo?.url && !IS_DOCKER_HOSTED; + const isBridgeEnabled = !!environment?.echo?.url && !IS_DOCKER_HOSTED; const { data, error, isInitialLoading } = useQuery<{ status: 'ok' | 'down'; version: string; @@ -21,7 +21,7 @@ export function EchoStatus() { return api.get('/v1/bridge/status'); }, { - enabled: echoEnabled, + enabled: isBridgeEnabled, refetchInterval: 5000, refetchOnWindowFocus: true, } @@ -31,7 +31,7 @@ export function EchoStatus() { return null; } - if (!echoEnabled) return null; + if (!isBridgeEnabled) return null; const status = data?.status === 'ok' && !error ? 'ok' : 'down'; let color = status === 'ok' ? 'green' : 'red'; @@ -46,10 +46,10 @@ export function EchoStatus() { position={'bottom'} target={ - Echo + Bridge } - title={'Echo Status'} + title={'Bridge Status'} content={} > ); @@ -72,7 +72,7 @@ function PopoverContent({ url, status }) { return ( <> - Status: Echo Is Up + Status: Bridge Is Up URL: {url} diff --git a/apps/web/src/echo-terminal.d.ts b/apps/web/src/framework-terminal.d.ts similarity index 83% rename from apps/web/src/echo-terminal.d.ts rename to apps/web/src/framework-terminal.d.ts index bd2b23790ac..5e4fc54ce10 100644 --- a/apps/web/src/echo-terminal.d.ts +++ b/apps/web/src/framework-terminal.d.ts @@ -6,7 +6,7 @@ declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace JSX { interface IntrinsicElements { - ['nv-echo-terminal']: CustomElement; + ['nv-framework-terminal']: CustomElement; } } } diff --git a/apps/web/src/hooks/useEchoTerminalScript.ts b/apps/web/src/hooks/useEchoTerminalScript.ts deleted file mode 100644 index 17d3adcf97d..00000000000 --- a/apps/web/src/hooks/useEchoTerminalScript.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { useEffect } from 'react'; - -export const useEchoTerminalScript = () => { - useEffect(() => { - if (!document.getElementById('echo-terminal-loader')) { - const script = document.createElement('script'); - script.src = 'https://cdn.jsdelivr.net/gh/novuhq/docs/echo-terminal.min.js'; - script.id = 'echo-terminal-loader'; - document.body.appendChild(script); - } - }, []); -}; diff --git a/apps/web/src/hooks/useFrameworkTerminalScript.ts b/apps/web/src/hooks/useFrameworkTerminalScript.ts new file mode 100644 index 00000000000..25651513288 --- /dev/null +++ b/apps/web/src/hooks/useFrameworkTerminalScript.ts @@ -0,0 +1,12 @@ +import { useEffect } from 'react'; + +export const useFrameworkTerminalScript = () => { + useEffect(() => { + if (!document.getElementById('framework-terminal-loader')) { + const script = document.createElement('script'); + script.src = 'https://cdn.jsdelivr.net/gh/novuhq/docs/framework-terminal.min.js'; + script.id = 'framework-terminal-loader'; + document.body.appendChild(script); + } + }, []); +}; diff --git a/apps/web/src/hooks/useTemplates.ts b/apps/web/src/hooks/useTemplates.ts index 6f78e7228f2..de62ed1992d 100644 --- a/apps/web/src/hooks/useTemplates.ts +++ b/apps/web/src/hooks/useTemplates.ts @@ -1,4 +1,4 @@ -import { INotificationTemplate, WorkflowIntegrationStatus, NotificationTemplateTypeEnum } from '@novu/shared'; +import { INotificationTemplate, isBridgeWorkflow, WorkflowIntegrationStatus, WorkflowTypeEnum } from '@novu/shared'; import { IUsePaginationQueryParamsStateOptions } from '@novu/design-system'; import { useEnvironment } from './useEnvironment'; @@ -56,7 +56,7 @@ export function useTemplates({ templates: data?.data.map((template) => { return { ...template, - bridge: template.type === NotificationTemplateTypeEnum.ECHO, + bridge: isBridgeWorkflow(template.type), }; }), loading: isLoading, diff --git a/apps/web/src/pages/get-started/GetStartedPage.tsx b/apps/web/src/pages/get-started/GetStartedPage.tsx index 0df8e0b8d31..2e71721acfd 100644 --- a/apps/web/src/pages/get-started/GetStartedPage.tsx +++ b/apps/web/src/pages/get-started/GetStartedPage.tsx @@ -7,7 +7,7 @@ import PageContainer from '../../components/layout/components/PageContainer'; import PageHeader from '../../components/layout/components/PageHeader'; import { usePageViewTracking } from '../../hooks/usePageViewTracking'; import { css } from '@novu/novui/css'; -import { EchoTab } from './components/get-started-tabs/EchoTab'; +import { FrameworkTab } from './components/get-started-tabs/FrameworkTab'; const PAGE_TITLE = 'Get started'; @@ -25,7 +25,7 @@ export function GetStartedPage() { {currentOrganization ? ( - ) : ( diff --git a/apps/web/src/pages/get-started/components/AdditionInformationLink.tsx b/apps/web/src/pages/get-started/components/AdditionInformationLink.tsx index f23be4080aa..53f985c31e2 100644 --- a/apps/web/src/pages/get-started/components/AdditionInformationLink.tsx +++ b/apps/web/src/pages/get-started/components/AdditionInformationLink.tsx @@ -14,10 +14,10 @@ export function AdditionInformationLink({ channel, ...linkProps }: IAdditionInfo return ( - + Learn about {channel} - + Learn more diff --git a/apps/web/src/pages/get-started/components/get-started-tabs/EchoTab.tsx b/apps/web/src/pages/get-started/components/get-started-tabs/FrameworkTab.tsx similarity index 91% rename from apps/web/src/pages/get-started/components/get-started-tabs/EchoTab.tsx rename to apps/web/src/pages/get-started/components/get-started-tabs/FrameworkTab.tsx index cf7309c821e..e44c179c78d 100644 --- a/apps/web/src/pages/get-started/components/get-started-tabs/EchoTab.tsx +++ b/apps/web/src/pages/get-started/components/get-started-tabs/FrameworkTab.tsx @@ -8,11 +8,11 @@ import { text, title } from '@novu/novui/recipes'; import { IconCellTower, IconCloudQueue, IconCode, IconHealthAndSafety } from '@novu/design-system'; import { useEffect } from 'react'; import { useMantineTheme } from '@mantine/core'; -import { useEchoTerminalScript } from '../../../../hooks/useEchoTerminalScript'; +import { useFrameworkTerminalScript } from '../../../../hooks/useFrameworkTerminalScript'; const link = 'https://docs.novu.co/framework/quickstart'; -const COMMAND = 'npx novu-labs@latest echo'; +const COMMAND = 'npx novu@latest dev'; const Text = styled('p', text); const Title = styled('h2', title); @@ -22,15 +22,15 @@ const columnText = css({ textStyle: 'text.main', marginTop: '50', maxW: '214px' const columnIcon = css({ marginBottom: '50' }); const mainText = css({ textStyle: 'text.main', maxW: '645px' }); -export const EchoTab = ({ className }: { className?: string }) => { +export const FrameworkTab = ({ className }: { className?: string }) => { const theme = useMantineTheme(); const segment = useSegment(); const handleDocsLinkClick = () => { - segment.track(`Additional Info Link - [Get Started]`, { href: link, tab: OnboardingUseCasesTabsEnum.ECHO }); + segment.track(`Additional Info Link - [Get Started]`, { href: link, tab: OnboardingUseCasesTabsEnum.FRAMEWORK }); }; - useEchoTerminalScript(); + useFrameworkTerminalScript(); useEffect(() => { const tabs = document.getElementsByClassName('nv-terminal-tab'); @@ -63,7 +63,7 @@ export const EchoTab = ({ className }: { className?: string }) => {
{ - segment.track(`Copy Echo command - [Get Started]`); + segment.track(`Copy Bridge command - [Get Started]`); }} > {
@@ -137,7 +137,7 @@ export const EchoTab = ({ className }: { className?: string }) => { }) )} > - +
); diff --git a/apps/web/src/pages/get-started/components/get-started-tabs/GetStartedTabs.tsx b/apps/web/src/pages/get-started/components/get-started-tabs/GetStartedTabs.tsx index 9884ac1d2c0..8fb2cf373e1 100644 --- a/apps/web/src/pages/get-started/components/get-started-tabs/GetStartedTabs.tsx +++ b/apps/web/src/pages/get-started/components/get-started-tabs/GetStartedTabs.tsx @@ -8,7 +8,7 @@ import { GetStartedTabConfig, ICON_STYLE, TAB_CONFIGS } from './GetStartedTabs.c import useStyles from './GetStartedTabs.style'; import { useGetStartedTabs } from './useGetStartedTabs'; import { useGetStartedTabView } from './useGetStartedTabView'; -import { EchoTab } from './EchoTab'; +import { FrameworkTab } from './FrameworkTab'; interface IGetStartedTabsProps extends ReturnType { tabConfigs?: GetStartedTabConfig[]; @@ -36,8 +36,8 @@ export const GetStartedTabs: React.FC = ({ tabConfigs = TA > } > Workflows @@ -53,8 +53,11 @@ export const GetStartedTabs: React.FC = ({ tabConfigs = TA ))} - - + + diff --git a/apps/web/src/pages/get-started/components/get-started-tabs/useGetStartedTabs.ts b/apps/web/src/pages/get-started/components/get-started-tabs/useGetStartedTabs.ts index 212ba762761..184cad3084b 100644 --- a/apps/web/src/pages/get-started/components/get-started-tabs/useGetStartedTabs.ts +++ b/apps/web/src/pages/get-started/components/get-started-tabs/useGetStartedTabs.ts @@ -5,7 +5,7 @@ import { useSegment } from '../../../../components/providers/SegmentProvider'; import { OnboardingUseCasesTabsEnum } from '../../consts/OnboardingUseCasesTabsEnum'; const TAB_SEARCH_PARAM_NAME = 'tab'; -const DEFAULT_TAB: OnboardingUseCasesTabsEnum = OnboardingUseCasesTabsEnum.ECHO; +const DEFAULT_TAB: OnboardingUseCasesTabsEnum = OnboardingUseCasesTabsEnum.FRAMEWORK; interface GetStartedTabSearchParams { [TAB_SEARCH_PARAM_NAME]: OnboardingUseCasesTabsEnum; diff --git a/apps/web/src/pages/get-started/consts/OnboardingUseCasesTabsEnum.ts b/apps/web/src/pages/get-started/consts/OnboardingUseCasesTabsEnum.ts index d6936585a3b..5c2f3769c8d 100644 --- a/apps/web/src/pages/get-started/consts/OnboardingUseCasesTabsEnum.ts +++ b/apps/web/src/pages/get-started/consts/OnboardingUseCasesTabsEnum.ts @@ -1,5 +1,5 @@ export enum OnboardingUseCasesTabsEnum { - ECHO = 'echo', + FRAMEWORK = 'framework', IN_APP = 'in-app', DIGEST = 'digest', DELAY = 'delay', diff --git a/apps/web/src/pages/get-started/consts/UseCases.const.tsx b/apps/web/src/pages/get-started/consts/UseCases.const.tsx index c9284cfae23..ac5eb770f5e 100644 --- a/apps/web/src/pages/get-started/consts/UseCases.const.tsx +++ b/apps/web/src/pages/get-started/consts/UseCases.const.tsx @@ -6,7 +6,7 @@ import { TranslationUseCaseConst } from './TranslationUseCase.const'; import { DigestUseCaseConst } from './DigestUseCase.const'; import { OnboardingUseCasesTabsEnum } from './OnboardingUseCasesTabsEnum'; -export const UseCasesConst: Omit = { +export const UseCasesConst: Omit = { [OnboardingUseCasesTabsEnum.IN_APP]: InAppUseCaseConst, [OnboardingUseCasesTabsEnum.MULTI_CHANNEL]: MultiChannelUseCaseConst, [OnboardingUseCasesTabsEnum.DELAY]: DelayUseCaseConst, diff --git a/apps/web/src/pages/templates/TemplatesListNoData.tsx b/apps/web/src/pages/templates/TemplatesListNoData.tsx index 3188c4163a4..25f660202f1 100644 --- a/apps/web/src/pages/templates/TemplatesListNoData.tsx +++ b/apps/web/src/pages/templates/TemplatesListNoData.tsx @@ -9,7 +9,7 @@ import { useSegment } from '../../components/providers/SegmentProvider'; import { IBlueprintTemplate } from '../../api/types'; import { TemplateCreationSourceEnum } from './shared'; import { useHoverOverItem } from '../../hooks'; -import { EchoProjectCardTile } from './components/EchoProjectWaitList'; +import { FrameworkProjectCardTile } from './components/FrameworkProjectWaitList'; const NoDataHolder = styled.div` display: flex; @@ -90,7 +90,7 @@ export const TemplatesListNoData = ({ Blank Workflow - + {isLoading ? Array.from({ length: 3 }).map((_, index) => ( diff --git a/apps/web/src/pages/templates/components/ChannelStepEditor.tsx b/apps/web/src/pages/templates/components/ChannelStepEditor.tsx index a6d57458495..dbe60308846 100644 --- a/apps/web/src/pages/templates/components/ChannelStepEditor.tsx +++ b/apps/web/src/pages/templates/components/ChannelStepEditor.tsx @@ -1,5 +1,5 @@ import { useParams } from 'react-router-dom'; -import { StepTypeEnum } from '@novu/shared'; +import { StepTypeEnum, WorkflowTypeEnum, isBridgeWorkflow } from '@novu/shared'; import { EmailMessagesCards } from './email-editor/EmailMessagesCards'; import { TemplateInAppEditor } from './in-app-editor/TemplateInAppEditor'; @@ -51,7 +51,7 @@ export const ChannelStepEditor = () => { ); } - if (template?.type === 'ECHO' && (channel === StepTypeEnum.DIGEST || channel === StepTypeEnum.DELAY)) { + if (isBridgeWorkflow(template?.type) && (channel === StepTypeEnum.DIGEST || channel === StepTypeEnum.DELAY)) { return ( diff --git a/apps/web/src/pages/templates/components/CreateWorkflowDropdown.tsx b/apps/web/src/pages/templates/components/CreateWorkflowDropdown.tsx index 2df291f435a..9f1367d6868 100644 --- a/apps/web/src/pages/templates/components/CreateWorkflowDropdown.tsx +++ b/apps/web/src/pages/templates/components/CreateWorkflowDropdown.tsx @@ -9,7 +9,7 @@ import { IBlueprintTemplate } from '../../../api/types'; import { useSegment } from '../../../components/providers/SegmentProvider'; import { TemplateCreationSourceEnum } from '../shared'; import { useFeatureFlag, useHoverOverItem } from '../../../hooks'; -import { EchoProjectDropDownItem } from './EchoProjectWaitList'; +import { FrameworkProjectDropDownItem } from './FrameworkProjectWaitList'; import { FeatureFlagsKeysEnum } from '@novu/shared'; import { Button } from '@novu/novui'; import { IconOutlineAdd } from '@novu/novui/icons'; @@ -99,7 +99,7 @@ export const CreateWorkflowDropdown = ({ > Blank workflow - + {isLoading ? Array.from({ length: 3 }).map((_, index) => ) diff --git a/apps/web/src/pages/templates/components/EchoProjectWaitList.tsx b/apps/web/src/pages/templates/components/FrameworkProjectWaitList.tsx similarity index 75% rename from apps/web/src/pages/templates/components/EchoProjectWaitList.tsx rename to apps/web/src/pages/templates/components/FrameworkProjectWaitList.tsx index f69ecba54cc..5f3e4fb4f8e 100644 --- a/apps/web/src/pages/templates/components/EchoProjectWaitList.tsx +++ b/apps/web/src/pages/templates/components/FrameworkProjectWaitList.tsx @@ -5,14 +5,14 @@ import { TemplateItem } from './templates-store/templateStoreStyles'; import { useSegment } from '../../../components/providers/SegmentProvider'; import { useAuth } from '../../../hooks/useAuth'; -const SEGMENT_EVENT = 'Button Clicked - [Echo promotion]'; +const SEGMENT_EVENT = 'Button Clicked - [Bridge promotion]'; const segmentEventAction = { - dropDownItem: 'Workflows > Dropdown > Echo item', - modalItem: 'Workflows > Dropdown > All templates > Echo item', - cardTile: 'Workflows > No workflows yet > Echo item', + dropDownItem: 'Workflows > Dropdown > Bridge item', + modalItem: 'Workflows > Dropdown > All templates > Bridge item', + cardTile: 'Workflows > No workflows yet > Bridge item', }; -const handleEchoClick = (event: React.MouseEvent) => { +const handleFrameworkClick = (event: React.MouseEvent) => { event.preventDefault(); window.open('https://docs.novu.co/framework/introduction', '_blank'); }; @@ -56,7 +56,7 @@ const ToolTip = ({ children }) => { ); }; -export const EchoProjectDropDownItem = () => { +export const FrameworkProjectDropDownItem = () => { const segment = useSegment(); const { currentOrganization } = useAuth(); @@ -69,9 +69,9 @@ export const EchoProjectDropDownItem = () => { _organization: currentOrganization?._id, }); - handleEchoClick(event); + handleFrameworkClick(event); }} - data-test-id="echo-project-demand-check-experiment-dropdown-item" + data-test-id="framework-project-demand-check-experiment-dropdown-item" > @@ -79,21 +79,21 @@ export const EchoProjectDropDownItem = () => { ); }; -export const EchoProjectModalItem = () => { +export const FrameworkProjectModalItem = () => { const segment = useSegment(); const { currentOrganization } = useAuth(); return ( { segment.track(SEGMENT_EVENT, { action: segmentEventAction.dropDownItem, _organization: currentOrganization?._id, }); - handleEchoClick(event); + handleFrameworkClick(event); }} > @@ -102,7 +102,7 @@ export const EchoProjectModalItem = () => { ); }; -export const EchoProjectCardTile = () => { +export const FrameworkProjectCardTile = () => { const segment = useSegment(); const { currentOrganization } = useAuth(); @@ -110,14 +110,14 @@ export const EchoProjectCardTile = () => { { segment.track(SEGMENT_EVENT, { action: segmentEventAction.dropDownItem, _organization: currentOrganization?._id, }); - handleEchoClick(event); + handleFrameworkClick(event); }} > diff --git a/apps/web/src/pages/templates/components/TemplateEditorFormProvider.tsx b/apps/web/src/pages/templates/components/TemplateEditorFormProvider.tsx index bba9ebc331a..c767c0c7aa7 100644 --- a/apps/web/src/pages/templates/components/TemplateEditorFormProvider.tsx +++ b/apps/web/src/pages/templates/components/TemplateEditorFormProvider.tsx @@ -10,7 +10,8 @@ import { DigestUnitEnum, INotificationTemplate, INotificationTrigger, - NotificationTemplateTypeEnum, + isBridgeWorkflow, + WorkflowTypeEnum, } from '@novu/shared'; import * as Sentry from '@sentry/react'; import { StepTypeEnum, ActorTypeEnum, EmailBlockTypeEnum, IEmailBlock, TextAlignEnum } from '@novu/shared'; @@ -298,7 +299,7 @@ const TemplateEditorFormProvider = ({ children }) => { () => ({ template: { ...template, - bridge: template?.type === NotificationTemplateTypeEnum.ECHO, + bridge: isBridgeWorkflow(template?.type), } as INotificationTemplateWithBridge, isLoading: isLoading || loadingGroups, isCreating, diff --git a/apps/web/src/pages/templates/components/templates-store/TemplatesStoreModal.tsx b/apps/web/src/pages/templates/components/templates-store/TemplatesStoreModal.tsx index ce32aebaec6..70f26870e80 100644 --- a/apps/web/src/pages/templates/components/templates-store/TemplatesStoreModal.tsx +++ b/apps/web/src/pages/templates/components/templates-store/TemplatesStoreModal.tsx @@ -35,7 +35,7 @@ import { TemplateCreationSourceEnum } from '../../shared'; import { useSegment } from '../../../../components/providers/SegmentProvider'; import { IBlueprintTemplate } from '../../../../api/types'; import { TemplateAnalyticsEnum } from '../../constants'; -import { EchoProjectModalItem } from '../EchoProjectWaitList'; +import { FrameworkProjectModalItem } from '../FrameworkProjectWaitList'; const nodeTypes = { triggerNode: TriggerNode, @@ -126,7 +126,7 @@ export const TemplatesStoreModal = ({ general, popular, isOpened, onClose }: ITe Blank Workflow - + {popular.map((group) => ( diff --git a/apps/web/src/pages/templates/editor/TemplateEditorPage.tsx b/apps/web/src/pages/templates/editor/TemplateEditorPage.tsx index 3c283f9924a..6fbadb8c76b 100644 --- a/apps/web/src/pages/templates/editor/TemplateEditorPage.tsx +++ b/apps/web/src/pages/templates/editor/TemplateEditorPage.tsx @@ -15,6 +15,7 @@ import { NavigateValidatorModal } from '../components/NavigateValidatorModal'; import { useTourStorage } from '../hooks/useTourStorage'; import { useBasePath } from '../hooks/useBasePath'; import { TemplateDetailsPageV2 } from '../editor_v2/TemplateDetailsPageV2'; +import { isBridgeWorkflow, WorkflowTypeEnum } from '@novu/shared'; function BaseTemplateEditorPage() { const navigate = useNavigate(); @@ -97,7 +98,7 @@ export default function TemplateEditorPage() { const [searchParams] = useSearchParams(); const type = searchParams.get('type'); - if (!type || type !== 'ECHO') { + if (!type || !isBridgeWorkflow(type as WorkflowTypeEnum)) { return ( diff --git a/apps/worker/package.json b/apps/worker/package.json index 10c3455514e..57657e0d14c 100644 --- a/apps/worker/package.json +++ b/apps/worker/package.json @@ -88,7 +88,7 @@ "optionalDependencies": { "@novu/ee-auth": "workspace:*", "@novu/ee-billing": "workspace:*", - "@novu/ee-echo-worker": "workspace:*", + "@novu/ee-bridge-worker": "workspace:*", "@novu/ee-shared-services": "workspace:*", "@novu/ee-translation": "workspace:*" } diff --git a/apps/worker/src/app/workflow/usecases/add-job/add-job.usecase.ts b/apps/worker/src/app/workflow/usecases/add-job/add-job.usecase.ts index 3b919d97c62..eb433da5e5a 100644 --- a/apps/worker/src/app/workflow/usecases/add-job/add-job.usecase.ts +++ b/apps/worker/src/app/workflow/usecases/add-job/add-job.usecase.ts @@ -53,7 +53,7 @@ const LOG_CONTEXT = 'AddJob'; @Injectable() export class AddJob { - private resonateUsecase: IUseCaseInterfaceInline; + private executeBridgeJob: IUseCaseInterfaceInline; constructor( private jobRepository: JobRepository, @@ -70,7 +70,7 @@ export class AddJob { private normalizeVariablesUsecase: NormalizeVariables, private moduleRef: ModuleRef ) { - this.resonateUsecase = requireInject('resonate', this.moduleRef); + this.executeBridgeJob = requireInject('execute-bridge-job', this.moduleRef); } @InstrumentUsecase() @@ -181,7 +181,7 @@ export class AddJob { filterVariables: IFilterVariables, delayAmount: number | undefined ) { - await this.fetchResonateData(command, filterVariables); + await this.fetchBridgeData(command, filterVariables); delayAmount = await this.addDelayJob.execute(command); Logger.debug(`Delay step Amount is: ${delayAmount}`, LOG_CONTEXT); @@ -189,8 +189,8 @@ export class AddJob { return delayAmount; } - private async fetchResonateData(command: AddJobCommand, filterVariables: IFilterVariables) { - const response = await this.resonateUsecase.execute< + private async fetchBridgeData(command: AddJobCommand, filterVariables: IFilterVariables) { + const response = await this.executeBridgeJob.execute< AddJobCommand & { variables: IFilterVariables; identifier: string }, ExecuteOutput | null >({ @@ -304,9 +304,9 @@ export class AddJob { digestAmount: number | undefined, filtered: boolean ) { - const resonateResponse = await this.fetchResonateData(command, filterVariables); + const bridgeResponse = await this.fetchBridgeData(command, filterVariables); - const bridgeAmount = this.mapBridgeTimedDigestAmount(resonateResponse); + const bridgeAmount = this.mapBridgeTimedDigestAmount(bridgeResponse); validateDigest(job); @@ -338,9 +338,9 @@ export class AddJob { return { digestAmount, digestCreationResult }; } - private mapBridgeTimedDigestAmount(resonateResponse: ExecuteOutput | null): number | null { + private mapBridgeTimedDigestAmount(bridgeResponse: ExecuteOutput | null): number | null { let bridgeAmount: number | null = null; - const outputs = resonateResponse?.outputs; + const outputs = bridgeResponse?.outputs; if (!isTimedDigestOutput(outputs)) { return null; diff --git a/apps/worker/src/app/workflow/usecases/send-message/send-message.usecase.ts b/apps/worker/src/app/workflow/usecases/send-message/send-message.usecase.ts index ef37e60d9c7..593cfbd404d 100644 --- a/apps/worker/src/app/workflow/usecases/send-message/send-message.usecase.ts +++ b/apps/worker/src/app/workflow/usecases/send-message/send-message.usecase.ts @@ -8,6 +8,7 @@ import { IDigestRegularMetadata, IPreferenceChannels, StepTypeEnum, + WorkflowTypeEnum, } from '@novu/shared'; import { AnalyticsService, @@ -29,10 +30,10 @@ import { Instrument, InstrumentUsecase, IBridgeChannelResponse, - IUseCaseInterfaceInline, NormalizeVariables, NormalizeVariablesCommand, requireInject, + IUseCaseInterface, } from '@novu/application-generic'; import { JobEntity, @@ -57,7 +58,10 @@ import { ExecuteStepCustom } from './execute-step-custom.usecase'; @Injectable() export class SendMessage { - private resonateUsecase: IUseCaseInterfaceInline; + private executeBridgeJob: IUseCaseInterface< + SendMessageCommand & { variables: IFilterVariables }, + ExecuteOutput | null + >; constructor( private sendMessageEmail: SendMessageEmail, @@ -80,7 +84,7 @@ export class SendMessage { private normalizeVariablesUsecase: NormalizeVariables, protected moduleRef: ModuleRef ) { - this.resonateUsecase = requireInject('resonate', this.moduleRef); + this.executeBridgeJob = requireInject('execute-bridge-job', this.moduleRef); } @InstrumentUsecase() @@ -101,30 +105,31 @@ export class SendMessage { const stepType = command.step?.template?.type; - let resonateResponse: ExecuteOutput | null = null; + let bridgeResponse: Awaited> = null; if (![StepTypeEnum.DIGEST, StepTypeEnum.DELAY, StepTypeEnum.TRIGGER].includes(stepType as any)) { - resonateResponse = await this.resonateUsecase.execute< - SendMessageCommand & { variables: IFilterVariables }, - ExecuteOutput | null - >({ + bridgeResponse = await this.executeBridgeJob.execute({ ...command, variables, }); } - const bridgeSkip = resonateResponse?.options?.skip; - const { filterResult, channelPreferenceResult } = await this.getStepExecutionHalt(bridgeSkip, command, variables); + const isBridgeSkipped = bridgeResponse?.options?.skip; + const { filterResult, channelPreferenceResult } = await this.getStepExecutionHalt( + isBridgeSkipped, + command, + variables + ); if (!command.payload?.$on_boarding_trigger) { this.sendProcessStepEvent( command, - bridgeSkip, + isBridgeSkipped, filterResult, channelPreferenceResult, - !!resonateResponse?.outputs + !!bridgeResponse?.outputs ); } - if (!filterResult?.passed || !channelPreferenceResult || bridgeSkip) { + if (!filterResult?.passed || !channelPreferenceResult || isBridgeSkipped) { await this.jobRepository.updateStatus(command.environmentId, command.jobId, JobStatusEnum.CANCELED); await this.executionLogRoute.execute( @@ -138,7 +143,7 @@ export class SendMessage { raw: JSON.stringify({ ...(filterResult ? { filter: { conditions: filterResult?.conditions, passed: filterResult?.passed } } : {}), ...(channelPreferenceResult ? { preferences: { passed: channelPreferenceResult } } : {}), - ...(bridgeSkip ? { skip: bridgeSkip } : {}), + ...(isBridgeSkipped ? { skip: isBridgeSkipped } : {}), }), }) ); @@ -162,7 +167,7 @@ export class SendMessage { const sendMessageCommand = SendMessageCommand.create({ ...command, compileContext: payload, - bridgeData: resonateResponse, + bridgeData: bridgeResponse, }); switch (stepType) { @@ -251,10 +256,10 @@ export class SendMessage { private sendProcessStepEvent( command: SendMessageCommand, - resonateSkip: boolean | undefined, + isBridgeSkipped: boolean | undefined, filterResult: IConditionsFilterResponse | null, preferredResult: boolean | null, - isEcho: boolean + isBridgeWorkflow: boolean ) { const usedFilters = filterResult?.conditions?.reduce(ConditionsFilter.sumFilters, { filters: [], @@ -280,7 +285,7 @@ export class SendMessage { * This is intentional, so that mixpanel can automatically reshard it. */ this.analyticsService.mixpanelTrack('Process Workflow Step - [Triggers]', '', { - workflowType: isEcho ? 'ECHO' : 'REGULAR', + workflowType: isBridgeWorkflow ? WorkflowTypeEnum.BRIDGE : WorkflowTypeEnum.REGULAR, _template: command.job._templateId, _organization: command.organizationId, _environment: command.environmentId, @@ -296,7 +301,7 @@ export class SendMessage { ...timedInfo, filterPassed: filterResult?.passed, preferencesPassed: preferredResult, - echoSkip: resonateSkip, + isBridgeSkipped, ...(usedFilters || {}), source: command.payload.__source || 'api', }); diff --git a/apps/worker/src/app/workflow/usecases/subscriber-job-bound/subscriber-job-bound.usecase.ts b/apps/worker/src/app/workflow/usecases/subscriber-job-bound/subscriber-job-bound.usecase.ts index b5c58731c5e..f4723b468a3 100644 --- a/apps/worker/src/app/workflow/usecases/subscriber-job-bound/subscriber-job-bound.usecase.ts +++ b/apps/worker/src/app/workflow/usecases/subscriber-job-bound/subscriber-job-bound.usecase.ts @@ -3,11 +3,11 @@ import { Injectable, Logger } from '@nestjs/common'; import { NotificationTemplateEntity, NotificationTemplateRepository, IntegrationRepository } from '@novu/dal'; import { ChannelTypeEnum, - ControlVariablesLevelEnum, InAppProviderIdEnum, ISubscribersDefine, ProvidersIdEnum, STEP_TYPE_TO_CHANNEL_TYPE, + WorkflowTypeEnum, } from '@novu/shared'; import { StoreSubscriberJobs, StoreSubscriberJobsCommand } from '../store-subscriber-jobs'; import { @@ -82,7 +82,7 @@ export class SubscriberJobBound { this.analyticsService.mixpanelTrack('Notification event trigger - [Triggers]', segmentUserId, { name: template.name, - type: template?.type || 'REGULAR', + type: template?.type || WorkflowTypeEnum.REGULAR, transactionId: command.transactionId, _template: template._id, _organization: command.organizationId, @@ -160,7 +160,7 @@ export class SubscriberJobBound { */ return { ...bridgeWorkflow, - type: 'ECHO', + type: WorkflowTypeEnum.BRIDGE, steps: bridgeWorkflow.steps.map((step) => { const stepControlVariables = command.controls?.steps?.[step.stepId]; diff --git a/apps/worker/src/app/workflow/workflow.module.ts b/apps/worker/src/app/workflow/workflow.module.ts index 3b97196e56a..48b4f953a5f 100644 --- a/apps/worker/src/app/workflow/workflow.module.ts +++ b/apps/worker/src/app/workflow/workflow.module.ts @@ -75,10 +75,10 @@ const enterpriseImports = (): Array; @@ -232,7 +232,7 @@ export class CreateNotificationJobs { * If the workflow is a framework workflow, we'll set the expiration date to 1 month from now * todo decide if we want to add another request in order to get more accurate expire at amount */ - if (command.template.type === NotificationTemplateTypeEnum.ECHO) { + if (isBridgeWorkflow(command.template.type)) { return addMonths(Date.now(), 1); } diff --git a/libs/application-generic/src/usecases/create-workflow/create-workflow.usecase.ts b/libs/application-generic/src/usecases/create-workflow/create-workflow.usecase.ts index 6346ae621f4..cc309877317 100644 --- a/libs/application-generic/src/usecases/create-workflow/create-workflow.usecase.ts +++ b/libs/application-generic/src/usecases/create-workflow/create-workflow.usecase.ts @@ -20,6 +20,7 @@ import { ChangeEntityTypeEnum, INotificationTemplateStep, INotificationTrigger, + isBridgeWorkflow, IStepVariant, TriggerTypeEnum, WorkflowTypeEnum, @@ -208,7 +209,7 @@ export class CreateWorkflow { item, parentChangeId: string ) { - if (command.type !== WorkflowTypeEnum.ECHO) { + if (!isBridgeWorkflow(command.type)) { await this.createChange.execute( CreateChangeCommand.create({ organizationId: command.organizationId, @@ -488,7 +489,7 @@ export class CreateWorkflow { _organizationId: command.organizationId, }); - if (command.type !== WorkflowTypeEnum.ECHO) { + if (!isBridgeWorkflow(command.type)) { await this.createChange.execute( CreateChangeCommand.create({ item: feedItem, @@ -528,7 +529,7 @@ export class CreateWorkflow { name: command.notificationGroup.name, }); - if (command.type !== WorkflowTypeEnum.ECHO) { + if (!isBridgeWorkflow(command.type)) { await this.createChange.execute( CreateChangeCommand.create({ item: notificationGroup, diff --git a/libs/application-generic/src/usecases/message-template/create-message-template/create-message-template.usecase.ts b/libs/application-generic/src/usecases/message-template/create-message-template/create-message-template.usecase.ts index 62919b63dcf..96c6dc7e91b 100644 --- a/libs/application-generic/src/usecases/message-template/create-message-template/create-message-template.usecase.ts +++ b/libs/application-generic/src/usecases/message-template/create-message-template/create-message-template.usecase.ts @@ -7,8 +7,8 @@ import { import { ChangeEntityTypeEnum, IMessageAction, + isBridgeWorkflow, StepTypeEnum, - WorkflowTypeEnum, } from '@novu/shared'; import { CreateMessageTemplateCommand } from './create-message-template.command'; @@ -81,7 +81,7 @@ export class CreateMessageTemplate { })) as MessageTemplateEntity; } - if (command.workflowType !== WorkflowTypeEnum.ECHO) { + if (!isBridgeWorkflow(command.workflowType)) { await this.createChange.execute( CreateChangeCommand.create({ organizationId: command.organizationId, diff --git a/libs/application-generic/src/usecases/message-template/delete-message-template/delete-message-template.usecase.ts b/libs/application-generic/src/usecases/message-template/delete-message-template/delete-message-template.usecase.ts index 4f5ea76c9fa..b15d267ab86 100644 --- a/libs/application-generic/src/usecases/message-template/delete-message-template/delete-message-template.usecase.ts +++ b/libs/application-generic/src/usecases/message-template/delete-message-template/delete-message-template.usecase.ts @@ -4,7 +4,7 @@ import { DalException, MessageTemplateRepository, } from '@novu/dal'; -import { ChangeEntityTypeEnum, WorkflowTypeEnum } from '@novu/shared'; +import { ChangeEntityTypeEnum, isBridgeWorkflow } from '@novu/shared'; import { DeleteMessageTemplateCommand } from './delete-message-template.command'; import { CreateChange, CreateChangeCommand } from '../../create-change'; @@ -37,7 +37,7 @@ export class DeleteMessageTemplate { _id: command.messageTemplateId, }); - if (command.workflowType !== WorkflowTypeEnum.ECHO) { + if (!isBridgeWorkflow(command.workflowType)) { await this.createChange.execute( CreateChangeCommand.create({ changeId, diff --git a/libs/application-generic/src/usecases/message-template/update-message-template/update-message-template.usecase.ts b/libs/application-generic/src/usecases/message-template/update-message-template/update-message-template.usecase.ts index 6fe8a53d302..19be3fe844e 100644 --- a/libs/application-generic/src/usecases/message-template/update-message-template/update-message-template.usecase.ts +++ b/libs/application-generic/src/usecases/message-template/update-message-template/update-message-template.usecase.ts @@ -10,7 +10,7 @@ import { MessageTemplateRepository, MessageRepository, } from '@novu/dal'; -import { ChangeEntityTypeEnum, WorkflowTypeEnum } from '@novu/shared'; +import { ChangeEntityTypeEnum, isBridgeWorkflow } from '@novu/shared'; import { UpdateMessageTemplateCommand } from './update-message-template.command'; import { CreateChange, CreateChangeCommand } from '../../create-change'; @@ -160,7 +160,7 @@ export class UpdateMessageTemplate { ChangeEntityTypeEnum.MESSAGE_TEMPLATE, item._id ); - if (command.workflowType !== WorkflowTypeEnum.ECHO) { + if (!isBridgeWorkflow(command.workflowType)) { await this.createChange.execute( CreateChangeCommand.create({ organizationId: command.organizationId, diff --git a/libs/application-generic/src/usecases/trigger-event/trigger-event.usecase.ts b/libs/application-generic/src/usecases/trigger-event/trigger-event.usecase.ts index 0a9da8edc62..16c762e3dcd 100644 --- a/libs/application-generic/src/usecases/trigger-event/trigger-event.usecase.ts +++ b/libs/application-generic/src/usecases/trigger-event/trigger-event.usecase.ts @@ -42,7 +42,7 @@ import { GetActionEnum, PostActionEnum } from '@novu/framework'; const LOG_CONTEXT = 'TriggerEventUseCase'; -export interface IDoBridgeRequestCommand { +export interface IExecuteBridgeRequestCommand { bridgeUrl: string; payload?: Record; apiKey: string; diff --git a/libs/application-generic/src/usecases/workflow/update-workflow/update-workflow.usecase.ts b/libs/application-generic/src/usecases/workflow/update-workflow/update-workflow.usecase.ts index b2d038ce819..44ec1abaecc 100644 --- a/libs/application-generic/src/usecases/workflow/update-workflow/update-workflow.usecase.ts +++ b/libs/application-generic/src/usecases/workflow/update-workflow/update-workflow.usecase.ts @@ -18,7 +18,7 @@ import { NotificationTemplateRepository, StepVariantEntity, } from '@novu/dal'; -import { ChangeEntityTypeEnum, WorkflowTypeEnum } from '@novu/shared'; +import { ChangeEntityTypeEnum, isBridgeWorkflow } from '@novu/shared'; import { AnalyticsService, @@ -239,7 +239,7 @@ export class UpdateWorkflow { notificationTemplateWithStepTemplate ); - if (command.type !== WorkflowTypeEnum.ECHO) { + if (!isBridgeWorkflow(command.type)) { await this.createChange.execute( CreateChangeCommand.create({ organizationId: command.organizationId, @@ -367,7 +367,7 @@ export class UpdateWorkflow { let messageTemplateExist = message._templateId; - if (!messageTemplateExist && command.type === WorkflowTypeEnum.ECHO) { + if (!messageTemplateExist && isBridgeWorkflow(command.type)) { const stepMessageTemplate = await this.messageTemplateRepository.findOne({ _environmentId: command.environmentId, diff --git a/libs/application-generic/src/utils/require-inject.ts b/libs/application-generic/src/utils/require-inject.ts index dbf345534b4..bc0eb5e1696 100644 --- a/libs/application-generic/src/utils/require-inject.ts +++ b/libs/application-generic/src/utils/require-inject.ts @@ -15,26 +15,29 @@ import { } from '@novu/framework'; export const requireInject = (inject: RequireInject, moduleRef?: ModuleRef) => { - if (inject === RequireInjectEnum.RESONATE) { - return initiateResonateProvider(moduleRef); - } else if (inject === RequireInjectEnum.DO_BRIDGE_REQUEST) { - return initiateDoBridgeRequestProvider(moduleRef); + if (inject === RequireInjectEnum.EXECUTE_BRIDGE_JOB) { + return initiateExecuteBridgeJobProvider(moduleRef); + } else if (inject === RequireInjectEnum.EXECUTE_BRIDGE_REQUEST) { + return initiateExecuteBridgeRequestProvider(moduleRef); } }; -const initiateResonateProvider = (moduleRef: ModuleRef) => { +const initiateExecuteBridgeJobProvider = (moduleRef: ModuleRef) => { try { if ( process.env.NOVU_ENTERPRISE === 'true' || process.env.CI_EE_TEST === 'true' ) { - if (!require('@novu/ee-echo-worker')?.Resonate) { - throw new PlatformException('Resonate provider is not loaded'); + if (!require('@novu/ee-bridge-worker')?.ExecuteBridgeJob) { + throw new PlatformException('ExecuteBridgeJob provider is not loaded'); } - return moduleRef.get(require('@novu/ee-echo-worker')?.Resonate, { - strict: false, - }); + return moduleRef.get( + require('@novu/ee-bridge-worker')?.ExecuteBridgeJob, + { + strict: false, + } + ); } else { return { execute: () => { @@ -46,25 +49,28 @@ const initiateResonateProvider = (moduleRef: ModuleRef) => { Logger.error( e, `Unexpected error while importing enterprise modules`, - 'Resonate' + 'ExecuteBridgeJob' ); throw e; } }; -const initiateDoBridgeRequestProvider = (moduleRef: ModuleRef) => { +const initiateExecuteBridgeRequestProvider = (moduleRef: ModuleRef) => { try { if ( process.env.NOVU_ENTERPRISE === 'true' || process.env.CI_EE_TEST === 'true' ) { - if (!require('@novu/ee-echo-worker')?.DoBridgeRequest) { - throw new PlatformException('Resonate provider is not loaded'); + if (!require('@novu/ee-bridge-worker')?.ExecuteBridgeRequest) { + throw new PlatformException('ExecuteBridgeJob provider is not loaded'); } - return moduleRef.get(require('@novu/ee-echo-worker')?.DoBridgeRequest, { - strict: false, - }); + return moduleRef.get( + require('@novu/ee-bridge-worker')?.ExecuteBridgeRequest, + { + strict: false, + } + ); } else { return { execute: () => { @@ -76,7 +82,7 @@ const initiateDoBridgeRequestProvider = (moduleRef: ModuleRef) => { Logger.error( e, `Unexpected error while importing enterprise modules`, - 'DoBridgeRequest' + 'ExecuteBridgeRequest' ); throw e; } @@ -85,8 +91,8 @@ const initiateDoBridgeRequestProvider = (moduleRef: ModuleRef) => { type RequireInject = `${RequireInjectEnum}`; enum RequireInjectEnum { - RESONATE = 'resonate', - DO_BRIDGE_REQUEST = 'do_bridge_request', + EXECUTE_BRIDGE_JOB = 'execute-bridge-job', + EXECUTE_BRIDGE_REQUEST = 'execute-bridge-request', } export function getDigestType(outputs: DigestOutput): DigestTypeEnum { diff --git a/libs/dal/src/repositories/environment/environment.entity.ts b/libs/dal/src/repositories/environment/environment.entity.ts index f4cc79829c5..6e2efd86448 100644 --- a/libs/dal/src/repositories/environment/environment.entity.ts +++ b/libs/dal/src/repositories/environment/environment.entity.ts @@ -47,6 +47,9 @@ export class EnvironmentEntity { echo: { url: string; }; + bridge: { + url: string; + }; } export type EnvironmentDBModel = ChangePropsValueType< diff --git a/libs/dal/src/repositories/environment/environment.schema.ts b/libs/dal/src/repositories/environment/environment.schema.ts index f973cc63f28..fc7263608e2 100644 --- a/libs/dal/src/repositories/environment/environment.schema.ts +++ b/libs/dal/src/repositories/environment/environment.schema.ts @@ -51,6 +51,9 @@ const environmentSchema = new Schema( echo: { url: Schema.Types.String, }, + bridge: { + url: Schema.Types.String, + }, _parentId: { type: Schema.Types.ObjectId, ref: 'Environment', diff --git a/libs/dal/src/repositories/notification-template/notification-template.entity.ts b/libs/dal/src/repositories/notification-template/notification-template.entity.ts index 5da3f6126a7..bc46bce0bc0 100644 --- a/libs/dal/src/repositories/notification-template/notification-template.entity.ts +++ b/libs/dal/src/repositories/notification-template/notification-template.entity.ts @@ -1,4 +1,4 @@ -import { Schema, Types } from 'mongoose'; +import { Types } from 'mongoose'; import { FilterParts, BuilderFieldType, @@ -15,8 +15,8 @@ import { INotificationTemplate, INotificationTemplateStep, IMessageTemplate, - NotificationTemplateTypeEnum, ControlsDto, + WorkflowTypeEnum, } from '@novu/shared'; import { NotificationGroupEntity } from '../notification-group'; @@ -73,7 +73,7 @@ export class NotificationTemplateEntity implements INotificationTemplate { data?: NotificationTemplateCustomData; - type?: NotificationTemplateTypeEnum; + type?: WorkflowTypeEnum; rawData?: any; diff --git a/libs/dal/src/repositories/notification-template/notification-template.schema.ts b/libs/dal/src/repositories/notification-template/notification-template.schema.ts index 006867367fb..b6ac4441bdd 100644 --- a/libs/dal/src/repositories/notification-template/notification-template.schema.ts +++ b/libs/dal/src/repositories/notification-template/notification-template.schema.ts @@ -1,3 +1,4 @@ +import { WorkflowTypeEnum } from '@novu/shared'; import * as mongoose from 'mongoose'; import { Schema } from 'mongoose'; import * as mongooseDelete from 'mongoose-delete'; @@ -23,7 +24,7 @@ const variantSchemePart = { name: Schema.Types.String, type: { type: Schema.Types.String, - default: 'REGULAR', + default: WorkflowTypeEnum.REGULAR, }, filters: [ { @@ -110,7 +111,7 @@ const notificationTemplateSchema = new Schema( }, type: { type: Schema.Types.String, - default: 'REGULAR', + default: WorkflowTypeEnum.REGULAR, }, draft: { type: Schema.Types.Boolean, diff --git a/libs/shared/src/entities/environment/environment.interface.ts b/libs/shared/src/entities/environment/environment.interface.ts index 8fa5a2d2ea0..4ef7d9187a0 100644 --- a/libs/shared/src/entities/environment/environment.interface.ts +++ b/libs/shared/src/entities/environment/environment.interface.ts @@ -22,6 +22,9 @@ export interface IEnvironment { echo?: { url?: string; }; + bridge?: { + url?: string; + }; } export interface IWidgetSettings { diff --git a/libs/shared/src/entities/notification-template/notification-template.interface.ts b/libs/shared/src/entities/notification-template/notification-template.interface.ts index 1e1d0c6748b..04edd848fc5 100644 --- a/libs/shared/src/entities/notification-template/notification-template.interface.ts +++ b/libs/shared/src/entities/notification-template/notification-template.interface.ts @@ -1,17 +1,18 @@ import { JSONSchema7 } from 'json-schema'; -import type { BuilderFieldType, BuilderGroupValues, TemplateVariableTypeEnum, FilterParts } from '../../types'; +import type { + BuilderFieldType, + BuilderGroupValues, + TemplateVariableTypeEnum, + FilterParts, + WorkflowTypeEnum, +} from '../../types'; import { IMessageTemplate } from '../message-template'; import { IPreferenceChannels } from '../subscriber-preference'; import { IWorkflowStepMetadata } from '../step'; import { INotificationGroup } from '../notification-group'; import { ControlsDto } from '../../dto'; -export enum NotificationTemplateTypeEnum { - REGULAR = 'REGULAR', - ECHO = 'ECHO', -} - export interface INotificationTemplate { _id?: string; name: string; @@ -29,7 +30,7 @@ export interface INotificationTemplate { steps: INotificationTemplateStep[] | INotificationBridgeTrigger[]; triggers: INotificationTrigger[]; isBlueprint?: boolean; - type?: NotificationTemplateTypeEnum; + type?: WorkflowTypeEnum; payloadSchema?: any; } diff --git a/libs/shared/src/types/feature-flags/feature-flags.ts b/libs/shared/src/types/feature-flags/feature-flags.ts index ba12b97d841..6a7af92b35a 100644 --- a/libs/shared/src/types/feature-flags/feature-flags.ts +++ b/libs/shared/src/types/feature-flags/feature-flags.ts @@ -4,7 +4,6 @@ export enum FeatureFlagsKeysEnum { IS_API_RATE_LIMITING_ENABLED = 'IS_API_RATE_LIMITING_ENABLED', IS_API_IDEMPOTENCY_ENABLED = 'IS_API_IDEMPOTENCY_ENABLED', IS_API_EXECUTION_LOG_QUEUE_ENABLED = 'IS_API_EXECUTION_LOG_QUEUE_ENABLED', - IS_ECHO_ENABLED = 'IS_ECHO_ENABLED', IS_IMPROVED_ONBOARDING_ENABLED = 'IS_IMPROVED_ONBOARDING_ENABLED', IS_NEW_MESSAGES_API_RESPONSE_ENABLED = 'IS_NEW_MESSAGES_API_RESPONSE_ENABLED', IS_HUBSPOT_ONBOARDING_ENABLED = 'IS_HUBSPOT_ONBOARDING_ENABLED', diff --git a/libs/shared/src/types/notification-templates/index.ts b/libs/shared/src/types/notification-templates/index.ts index e279c03236c..9880d2b8464 100644 --- a/libs/shared/src/types/notification-templates/index.ts +++ b/libs/shared/src/types/notification-templates/index.ts @@ -31,4 +31,5 @@ type ActiveIntegrationStatusWithPrimary = { export enum WorkflowTypeEnum { REGULAR = 'REGULAR', ECHO = 'ECHO', + BRIDGE = 'BRIDGE', } diff --git a/libs/shared/src/utils/bridge.utils.ts b/libs/shared/src/utils/bridge.utils.ts new file mode 100644 index 00000000000..a7585baaa8d --- /dev/null +++ b/libs/shared/src/utils/bridge.utils.ts @@ -0,0 +1,5 @@ +import { WorkflowTypeEnum } from '../types'; + +export const isBridgeWorkflow = (workflowType?: WorkflowTypeEnum): boolean => { + return workflowType === WorkflowTypeEnum.BRIDGE || workflowType === WorkflowTypeEnum.ECHO; +}; diff --git a/libs/shared/src/utils/index.ts b/libs/shared/src/utils/index.ts index 92e6139bc04..fb72b535fde 100644 --- a/libs/shared/src/utils/index.ts +++ b/libs/shared/src/utils/index.ts @@ -1,3 +1,4 @@ export * from './checkIsResponseError'; export * from './env'; export * from './normalizeEmail'; +export * from './bridge.utils'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 064be157e32..95a1570aa3f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -506,9 +506,9 @@ importers: '@novu/ee-billing': specifier: workspace:* version: link:../../enterprise/packages/billing - '@novu/ee-echo-api': + '@novu/ee-bridge-api': specifier: workspace:* - version: link:../../enterprise/packages/echo/echo-api + version: link:../../enterprise/packages/bridge-api '@novu/ee-shared-services': specifier: workspace:* version: link:../../enterprise/packages/shared-services @@ -1553,9 +1553,9 @@ importers: '@novu/ee-billing': specifier: workspace:* version: link:../../enterprise/packages/billing - '@novu/ee-echo-worker': + '@novu/ee-bridge-worker': specifier: workspace:* - version: link:../../enterprise/packages/echo/echo-worker + version: link:../../enterprise/packages/bridge-worker '@novu/ee-shared-services': specifier: workspace:* version: link:../../enterprise/packages/shared-services @@ -1879,7 +1879,7 @@ importers: version: link:../../../libs/dal '@novu/ee-dal': specifier: workspace:* - version: link:../libs/dal + version: link:../dal '@novu/shared': specifier: workspace:* version: link:../../../libs/shared @@ -1945,7 +1945,7 @@ importers: specifier: 4.9.5 version: 4.9.5 - enterprise/packages/echo/echo-api: + enterprise/packages/bridge-api: dependencies: '@nestjs/common': specifier: 10.2.2 @@ -1961,31 +1961,31 @@ importers: version: 7.3.1(@nestjs/common@10.2.2(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.2.2(@nestjs/common@10.2.2(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/platform-express@10.2.2)(@nestjs/websockets@10.2.2)(encoding@0.1.13)(reflect-metadata@0.1.13)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) '@novu/application-generic': specifier: workspace:* - version: link:../../../../libs/application-generic + version: link:../../../libs/application-generic '@novu/dal': specifier: workspace:* - version: link:../../../../libs/dal - '@novu/ee-dal': + version: link:../../../libs/dal + '@novu/ee-bridge-worker': specifier: workspace:* - version: link:../../libs/dal - '@novu/ee-echo-worker': + version: link:../bridge-worker + '@novu/ee-dal': specifier: workspace:* - version: link:../echo-worker + version: link:../dal '@novu/framework': specifier: workspace:* - version: link:../../../../packages/framework + version: link:../../../packages/framework '@novu/shared': specifier: workspace:* - version: link:../../../../libs/shared + version: link:../../../libs/shared '@novu/stateless': specifier: workspace:* - version: link:../../../../packages/stateless + version: link:../../../packages/stateless '@novu/testing': specifier: workspace:* - version: link:../../../../libs/testing + version: link:../../../libs/testing axios: specifier: ^1.6.2 - version: 1.6.7 + version: 1.6.8 class-transformer: specifier: ^0.5.1 version: 0.5.1 @@ -2046,12 +2046,12 @@ importers: version: 9.2.4 ts-node: specifier: ~10.9.1 - version: 10.9.1(@swc/core@1.3.107)(@types/node@14.18.42)(typescript@4.9.5) + version: 10.9.2(@swc/core@1.3.107)(@types/node@14.18.42)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 - enterprise/packages/echo/echo-worker: + enterprise/packages/bridge-worker: dependencies: '@nestjs/common': specifier: 10.2.2 @@ -2064,25 +2064,25 @@ importers: version: 9.0.3(@nestjs/common@10.2.2(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(passport@0.6.0) '@novu/dal': specifier: workspace:* - version: link:../../../../libs/dal + version: link:../../../libs/dal '@novu/ee-dal': specifier: workspace:* - version: link:../../libs/dal + version: link:../dal '@novu/framework': specifier: workspace:* - version: link:../../../../packages/framework + version: link:../../../packages/framework '@novu/shared': specifier: workspace:* - version: link:../../../../libs/shared + version: link:../../../libs/shared '@novu/stateless': specifier: workspace:* - version: link:../../../../packages/stateless + version: link:../../../packages/stateless '@novu/testing': specifier: workspace:* - version: link:../../../../libs/testing + version: link:../../../libs/testing axios: specifier: ^1.6.2 - version: 1.6.7 + version: 1.6.8 class-transformer: specifier: ^0.5.1 version: 0.5.1 @@ -2140,22 +2140,22 @@ importers: version: 9.2.4 ts-node: specifier: ~10.9.1 - version: 10.9.1(@swc/core@1.3.107)(@types/node@14.18.42)(typescript@4.9.5) + version: 10.9.2(@swc/core@1.3.107)(@types/node@14.18.42)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 - enterprise/packages/libs/dal: + enterprise/packages/dal: dependencies: '@nestjs/common': specifier: 10.2.2 version: 10.2.2(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@novu/dal': specifier: workspace:* - version: link:../../../../libs/dal + version: link:../../../libs/dal '@novu/shared': specifier: workspace:* - version: link:../../../../libs/shared + version: link:../../../libs/shared mongoose: specifier: ^7.5.0 version: 7.5.2(@aws-sdk/credential-providers@3.504.1) @@ -2177,7 +2177,7 @@ importers: version: 4.2.1(eslint-config-prettier@8.8.0(eslint@8.38.0))(eslint@8.57.0)(prettier@3.3.2) ts-node: specifier: ~10.9.1 - version: 10.9.1(@swc/core@1.3.107)(@types/node@14.18.42)(typescript@4.9.5) + version: 10.9.2(@swc/core@1.3.107)(@types/node@14.18.42)(typescript@4.9.5) tsconfig-paths: specifier: ~4.1.0 version: 4.1.2 @@ -2198,7 +2198,7 @@ importers: version: link:../../../libs/dal '@novu/ee-dal': specifier: workspace:* - version: link:../libs/dal + version: link:../dal '@novu/shared': specifier: workspace:* version: link:../../../libs/shared @@ -2250,7 +2250,7 @@ importers: version: link:../../../libs/dal '@novu/ee-dal': specifier: workspace:* - version: link:../libs/dal + version: link:../dal '@novu/ee-shared-services': specifier: workspace:* version: link:../shared-services @@ -2502,9 +2502,9 @@ importers: specifier: ^1.4.6 version: 1.6.6 optionalDependencies: - '@novu/ee-echo-worker': + '@novu/ee-bridge-worker': specifier: workspace:* - version: link:../../enterprise/packages/echo/echo-worker + version: link:../../enterprise/packages/bridge-worker '@novu/ee-shared-services': specifier: workspace:* version: link:../../enterprise/packages/shared-services @@ -3543,10 +3543,10 @@ importers: version: 5.3.0 compression-webpack-plugin: specifier: ^10.0.0 - version: 10.0.0(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)) + version: 10.0.0(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)) esbuild-plugin-compress: specifier: ^1.0.1 - version: 1.0.1(esbuild@0.19.12) + version: 1.0.1(esbuild@0.20.1) eslint-plugin-local-rules: specifier: ^3.0.2 version: 3.0.2 @@ -3570,28 +3570,28 @@ importers: version: 3.4.4(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5)) terser-webpack-plugin: specifier: ^5.3.9 - version: 5.3.9(@swc/core@1.3.107)(esbuild@0.19.12)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)) + version: 5.3.9(@swc/core@1.3.107)(esbuild@0.20.1)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)) tiny-glob: specifier: ^0.2.9 version: 0.2.9 ts-jest: specifier: ^29.0.3 - version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(esbuild@0.19.12)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5)))(typescript@4.9.5) + version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(esbuild@0.20.1)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5)))(typescript@4.9.5) ts-loader: specifier: ~9.4.0 - version: 9.4.2(typescript@4.9.5)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)) + version: 9.4.2(typescript@4.9.5)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)) tsup: specifier: ^8.0.2 version: 8.0.2(@microsoft/api-extractor@7.38.0(@types/node@18.16.9))(@swc/core@1.3.107)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5))(typescript@4.9.5) tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.19.12)(solid-js@1.8.17)(tsup@8.0.2(@microsoft/api-extractor@7.38.0(@types/node@18.16.9))(@swc/core@1.3.107)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5))(typescript@4.9.5)) + version: 2.2.0(esbuild@0.20.1)(solid-js@1.8.17)(tsup@8.0.2(@microsoft/api-extractor@7.38.0(@types/node@18.16.9))(@swc/core@1.3.107)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5))(typescript@4.9.5)) typescript: specifier: 4.9.5 version: 4.9.5 webpack: specifier: ^5.74.0 - version: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-bundle-analyzer: specifier: ^4.9.0 version: 4.10.1 @@ -3934,7 +3934,7 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^16.2.5 - version: 16.2.8(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(@swc/core@1.3.107)(@types/node@20.14.2)(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)))(jest-environment-jsdom@29.5.0)(jest@29.7.0(@types/node@20.14.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(karma@6.4.1)(lightningcss@1.23.0)(ng-packagr@16.2.3(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(tslib@2.5.0)(typescript@4.9.5))(sugarss@4.0.1(postcss@8.4.38))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(typescript@4.9.5) + version: 16.2.8(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(@swc/core@1.3.107)(@types/node@20.14.2)(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)))(jest-environment-jsdom@29.5.0)(jest@29.7.0(@types/node@20.14.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(karma@6.4.1)(lightningcss@1.23.0)(ng-packagr@16.2.3(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(tslib@2.5.0)(typescript@4.9.5))(sugarss@4.0.1(postcss@8.4.38))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(typescript@4.9.5) '@angular/cli': specifier: ^16.2.5 version: 16.2.8(chokidar@3.5.3) @@ -22212,9 +22212,6 @@ packages: engines: {node: '>= 10'} hasBin: true - keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -30791,11 +30788,11 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@16.2.8(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(@swc/core@1.3.107)(@types/node@20.14.2)(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)))(jest-environment-jsdom@29.5.0)(jest@29.7.0(@types/node@20.14.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(karma@6.4.1)(lightningcss@1.23.0)(ng-packagr@16.2.3(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(tslib@2.5.0)(typescript@4.9.5))(sugarss@4.0.1(postcss@8.4.38))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(typescript@4.9.5)': + '@angular-devkit/build-angular@16.2.8(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(@swc/core@1.3.107)(@types/node@20.14.2)(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)))(jest-environment-jsdom@29.5.0)(jest@29.7.0(@types/node@20.14.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(karma@6.4.1)(lightningcss@1.23.0)(ng-packagr@16.2.3(@angular/compiler-cli@16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(tslib@2.5.0)(typescript@4.9.5))(sugarss@4.0.1(postcss@8.4.38))(tailwindcss@3.4.4(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)))(typescript@4.9.5)': dependencies: '@ampproject/remapping': 2.2.1 '@angular-devkit/architect': 0.1602.8(chokidar@3.5.3) - '@angular-devkit/build-webpack': 0.1602.8(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.3.107)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) + '@angular-devkit/build-webpack': 0.1602.8(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) '@angular-devkit/core': 16.2.8(chokidar@3.5.3) '@angular/compiler-cli': 16.2.11(@angular/compiler@16.2.11(@angular/core@16.2.11(rxjs@7.8.1)(zone.js@0.13.3)))(typescript@4.9.5) '@babel/core': 7.22.9 @@ -30856,9 +30853,9 @@ snapshots: vite: 4.4.7(@types/node@20.14.2)(less@4.1.3)(lightningcss@1.23.0)(sass@1.64.1)(sugarss@4.0.1(postcss@8.4.38))(terser@5.19.2) webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) webpack-dev-middleware: 6.1.1(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) - webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.3.107)) + webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) webpack-merge: 5.9.0 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) optionalDependencies: esbuild: 0.18.17 jest: 29.7.0(@types/node@20.14.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5)) @@ -30884,12 +30881,12 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-webpack@0.1602.8(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.3.107)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17))': + '@angular-devkit/build-webpack@0.1602.8(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17))': dependencies: '@angular-devkit/architect': 0.1602.8(chokidar@3.5.3) rxjs: 7.8.1 webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) - webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.3.107)) + webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) transitivePeerDependencies: - chokidar @@ -31515,7 +31512,7 @@ snapshots: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-sdk/client-sso-oidc': 3.575.0 - '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + '@aws-sdk/client-sts': 3.575.0 '@aws-sdk/core': 3.575.0 '@aws-sdk/credential-provider-node': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) '@aws-sdk/middleware-bucket-endpoint': 3.575.0 @@ -31745,7 +31742,7 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + '@aws-sdk/client-sts': 3.575.0 '@aws-sdk/core': 3.575.0 '@aws-sdk/credential-provider-node': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) '@aws-sdk/middleware-host-header': 3.575.0 @@ -32078,7 +32075,7 @@ snapshots: - aws-crt optional: true - '@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)': + '@aws-sdk/client-sts@3.575.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -32120,6 +32117,51 @@ snapshots: '@smithy/util-retry': 3.0.0 '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.575.0 + '@aws-sdk/core': 3.575.0 + '@aws-sdk/credential-provider-node': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)) + '@aws-sdk/middleware-host-header': 3.575.0 + '@aws-sdk/middleware-logger': 3.575.0 + '@aws-sdk/middleware-recursion-detection': 3.575.0 + '@aws-sdk/middleware-user-agent': 3.575.0 + '@aws-sdk/region-config-resolver': 3.575.0 + '@aws-sdk/types': 3.575.0 + '@aws-sdk/util-endpoints': 3.575.0 + '@aws-sdk/util-user-agent-browser': 3.575.0 + '@aws-sdk/util-user-agent-node': 3.575.0 + '@smithy/config-resolver': 3.0.0 + '@smithy/core': 2.0.0 + '@smithy/fetch-http-handler': 3.0.0 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.0 + '@smithy/middleware-retry': 3.0.0 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.0 + '@smithy/util-defaults-mode-node': 3.0.0 + '@smithy/util-endpoints': 2.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt @@ -32257,12 +32299,29 @@ snapshots: - aws-crt optional: true - '@aws-sdk/credential-provider-ini@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0)': + '@aws-sdk/credential-provider-ini@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0))': dependencies: '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/credential-provider-env': 3.575.0 '@aws-sdk/credential-provider-process': 3.575.0 '@aws-sdk/credential-provider-sso': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + '@aws-sdk/credential-provider-web-identity': 3.575.0(@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)) + '@aws-sdk/types': 3.575.0 + '@smithy/credential-provider-imds': 3.0.0 + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-ini@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0)': + dependencies: + '@aws-sdk/client-sts': 3.575.0 + '@aws-sdk/credential-provider-env': 3.575.0 + '@aws-sdk/credential-provider-process': 3.575.0 + '@aws-sdk/credential-provider-sso': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/credential-provider-web-identity': 3.575.0(@aws-sdk/client-sts@3.575.0) '@aws-sdk/types': 3.575.0 '@smithy/credential-provider-imds': 3.0.0 @@ -32324,6 +32383,25 @@ snapshots: - aws-crt optional: true + '@aws-sdk/credential-provider-node@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0))': + dependencies: + '@aws-sdk/credential-provider-env': 3.575.0 + '@aws-sdk/credential-provider-http': 3.575.0 + '@aws-sdk/credential-provider-ini': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)) + '@aws-sdk/credential-provider-process': 3.575.0 + '@aws-sdk/credential-provider-sso': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + '@aws-sdk/credential-provider-web-identity': 3.575.0(@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)) + '@aws-sdk/types': 3.575.0 + '@smithy/credential-provider-imds': 3.0.0 + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + '@aws-sdk/credential-provider-node@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0)': dependencies: '@aws-sdk/credential-provider-env': 3.575.0 @@ -32453,7 +32531,7 @@ snapshots: - aws-crt optional: true - '@aws-sdk/credential-provider-web-identity@3.575.0(@aws-sdk/client-sts@3.575.0)': + '@aws-sdk/credential-provider-web-identity@3.575.0(@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0))': dependencies: '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/types': 3.575.0 @@ -32461,6 +32539,14 @@ snapshots: '@smithy/types': 3.0.0 tslib: 2.6.2 + '@aws-sdk/credential-provider-web-identity@3.575.0(@aws-sdk/client-sts@3.575.0)': + dependencies: + '@aws-sdk/client-sts': 3.575.0 + '@aws-sdk/types': 3.575.0 + '@smithy/property-provider': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + '@aws-sdk/credential-providers@3.504.1': dependencies: '@aws-sdk/client-cognito-identity': 3.504.0 @@ -38086,7 +38172,7 @@ snapshots: - ts-node - utf-8-validate - '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5))': + '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -38100,7 +38186,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -39637,7 +39723,7 @@ snapshots: tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 typescript: 5.1.6 - webpack: 5.88.2(@swc/core@1.3.107) + webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) webpack-node-externals: 3.0.0 optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.2) @@ -40615,7 +40701,7 @@ snapshots: semver: 7.5.3 source-map-support: 0.5.19 ts-node: 10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@18.16.9)(typescript@5.4.5) - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 optionalDependencies: verdaccio: 5.31.0(encoding@0.1.13)(typanion@3.14.0) @@ -40660,7 +40746,7 @@ snapshots: semver: 7.5.3 source-map-support: 0.5.19 ts-node: 10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5) - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 optionalDependencies: verdaccio: 5.31.0(encoding@0.1.13)(typanion@3.14.0) @@ -40705,7 +40791,7 @@ snapshots: semver: 7.5.3 source-map-support: 0.5.19 ts-node: 10.9.1(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@5.1.6) - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 optionalDependencies: verdaccio: 5.31.0(encoding@0.1.13)(typanion@3.14.0) @@ -40750,7 +40836,7 @@ snapshots: semver: 7.6.2 source-map-support: 0.5.19 ts-node: 10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@18.16.9)(typescript@5.3.3) - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 optionalDependencies: verdaccio: 5.31.0(encoding@0.1.13)(typanion@3.14.0) @@ -50058,9 +50144,9 @@ snapshots: '@webassemblyjs/ast': 1.11.5 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4))': dependencies: - webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.82.1))(webpack@5.82.1(@swc/core@1.3.107)(webpack-cli@5.1.4))': @@ -50068,9 +50154,9 @@ snapshots: webpack: 5.82.1(@swc/core@1.3.107)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.82.1) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4))': dependencies: - webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.82.1))(webpack@5.82.1(@swc/core@1.3.107)(webpack-cli@5.1.4))': @@ -50078,9 +50164,9 @@ snapshots: webpack: 5.82.1(@swc/core@1.3.107)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.82.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4))': dependencies: - webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.82.1))(webpack@5.82.1(@swc/core@1.3.107)(webpack-cli@5.1.4))': @@ -51941,7 +52027,7 @@ snapshots: clone-response: 1.0.3 get-stream: 5.2.0 http-cache-semantics: 4.1.1 - keyv: 4.5.3 + keyv: 4.5.4 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 @@ -52555,11 +52641,11 @@ snapshots: dependencies: mime-db: 1.52.0 - compression-webpack-plugin@10.0.0(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)): + compression-webpack-plugin@10.0.0(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)): dependencies: schema-utils: 4.0.0 serialize-javascript: 6.0.1 - webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) compression-webpack-plugin@10.0.0(webpack@5.82.1(@swc/core@1.3.107)(webpack-cli@5.1.4)): dependencies: @@ -53375,7 +53461,7 @@ snapshots: jest-worker: 27.5.1 postcss: 8.4.38 schema-utils: 4.0.0 - serialize-javascript: 6.0.1 + serialize-javascript: 6.0.2 source-map: 0.6.1 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.2))(esbuild@0.18.20) optionalDependencies: @@ -53387,7 +53473,7 @@ snapshots: jest-worker: 27.5.1 postcss: 8.4.38 schema-utils: 4.0.0 - serialize-javascript: 6.0.1 + serialize-javascript: 6.0.2 source-map: 0.6.1 webpack: 5.78.0(@swc/core@1.3.107) @@ -54466,19 +54552,19 @@ snapshots: esbuild-plugin-alias@0.2.1: {} - esbuild-plugin-compress@1.0.1(esbuild@0.19.12): + esbuild-plugin-compress@1.0.1(esbuild@0.20.1): dependencies: chalk: 4.1.2 - esbuild: 0.19.12 + esbuild: 0.20.1 fs-extra: 10.1.0 micromatch: 4.0.5 - esbuild-plugin-solid@0.5.0(esbuild@0.19.12)(solid-js@1.8.17): + esbuild-plugin-solid@0.5.0(esbuild@0.20.1)(solid-js@1.8.17): dependencies: '@babel/core': 7.24.4 '@babel/preset-typescript': 7.23.2(@babel/core@7.24.4) babel-preset-solid: 1.8.17(@babel/core@7.24.4) - esbuild: 0.19.12 + esbuild: 0.20.1 solid-js: 1.8.17 transitivePeerDependencies: - supports-color @@ -54801,7 +54887,7 @@ snapshots: lodash: 4.17.21 resolve: 2.0.0-next.4 semver: 5.7.2 - webpack: 5.88.2(@swc/core@1.3.107) + webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) transitivePeerDependencies: - supports-color @@ -55962,7 +56048,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.88.2(@swc/core@1.3.107) + webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) optional: true file-selector@0.6.0: @@ -56118,7 +56204,7 @@ snapshots: flat-cache@3.1.0: dependencies: flatted: 3.2.7 - keyv: 4.5.3 + keyv: 4.5.4 rimraf: 3.0.2 flat-cache@4.0.1: @@ -56281,7 +56367,7 @@ snapshots: semver: 7.5.4 tapable: 2.2.1 typescript: 5.1.6 - webpack: 5.88.2(@swc/core@1.3.107) + webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) form-data@2.3.3: dependencies: @@ -57479,7 +57565,7 @@ snapshots: tapable: 2.2.1 webpack: 5.78.0(@swc/core@1.3.107) - html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)): + html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -58580,14 +58666,14 @@ snapshots: jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -58601,14 +58687,14 @@ snapshots: jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -58919,7 +59005,7 @@ snapshots: - supports-color - utf-8-validate - jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)): + jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)): dependencies: '@babel/core': 7.24.4 '@jest/test-sequencer': 27.5.1 @@ -60060,7 +60146,7 @@ snapshots: jest@27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) import-local: 3.1.0 jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) transitivePeerDependencies: @@ -60072,7 +60158,7 @@ snapshots: jest@27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.2))(@types/node@12.20.55)(typescript@4.9.5)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) import-local: 3.1.0 jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@12.20.55)(typescript@4.9.5)) transitivePeerDependencies: @@ -60712,10 +60798,6 @@ snapshots: - supports-color - utf-8-validate - keyv@4.5.3: - dependencies: - json-buffer: 3.0.1 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -63323,7 +63405,7 @@ snapshots: nodemon@2.0.22: dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 debug: 3.2.7(supports-color@5.5.0) ignore-by-default: 1.0.1 minimatch: 3.1.2 @@ -63602,7 +63684,7 @@ snapshots: strong-log-transformer: 2.1.0 tar-stream: 2.2.0 tmp: 0.2.1 - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 v8-compile-cache: 2.3.0 yargs: 17.7.2 @@ -63654,7 +63736,7 @@ snapshots: strong-log-transformer: 2.1.0 tar-stream: 2.2.0 tmp: 0.2.1 - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 v8-compile-cache: 2.3.0 yargs: 17.7.2 @@ -63707,7 +63789,7 @@ snapshots: strong-log-transformer: 2.1.0 tar-stream: 2.2.0 tmp: 0.2.1 - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 v8-compile-cache: 2.3.0 yargs: 17.7.2 @@ -63761,7 +63843,7 @@ snapshots: strong-log-transformer: 2.1.0 tar-stream: 2.2.0 tmp: 0.2.1 - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 v8-compile-cache: 2.3.0 yargs: 17.7.2 @@ -63814,7 +63896,7 @@ snapshots: strong-log-transformer: 2.1.0 tar-stream: 2.2.0 tmp: 0.2.1 - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tslib: 2.6.2 yargs: 17.7.2 yargs-parser: 21.1.1 @@ -69438,7 +69520,7 @@ snapshots: '@jridgewell/trace-mapping': 0.3.19 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.1 + serialize-javascript: 6.0.2 terser: 5.22.0 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.2))(esbuild@0.18.20) optionalDependencies: @@ -69450,7 +69532,7 @@ snapshots: '@jridgewell/trace-mapping': 0.3.19 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.1 + serialize-javascript: 6.0.2 terser: 5.22.0 webpack: 5.78.0(@swc/core@1.3.107) optionalDependencies: @@ -69490,7 +69572,7 @@ snapshots: optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.2) - terser-webpack-plugin@5.3.9(@swc/core@1.3.107)(esbuild@0.18.17)(webpack@5.88.2(@swc/core@1.3.107)): + terser-webpack-plugin@5.3.9(@swc/core@1.3.107)(esbuild@0.18.17)(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 @@ -69502,17 +69584,17 @@ snapshots: '@swc/core': 1.3.107(@swc/helpers@0.5.2) esbuild: 0.18.17 - terser-webpack-plugin@5.3.9(@swc/core@1.3.107)(esbuild@0.19.12)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.9(@swc/core@1.3.107)(esbuild@0.20.1)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.22.0 - webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.2) - esbuild: 0.19.12 + esbuild: 0.20.1 terser-webpack-plugin@5.3.9(@swc/core@1.3.107)(webpack@5.78.0(@swc/core@1.3.107)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.82.1))): dependencies: @@ -69547,17 +69629,6 @@ snapshots: optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.2) - terser-webpack-plugin@5.3.9(@swc/core@1.3.107)(webpack@5.88.2(@swc/core@1.3.107)): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.22.0 - webpack: 5.88.2(@swc/core@1.3.107) - optionalDependencies: - '@swc/core': 1.3.107(@swc/helpers@0.5.2) - terser@5.16.9: dependencies: '@jridgewell/source-map': 0.3.3 @@ -69978,7 +70049,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.4) - ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(esbuild@0.19.12)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5)))(typescript@4.9.5): + ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(esbuild@0.20.1)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5)))(typescript@4.9.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -69994,7 +70065,7 @@ snapshots: '@babel/core': 7.24.4 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.4) - esbuild: 0.19.12 + esbuild: 0.20.1 ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@14.18.42)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@14.18.42)(typescript@4.9.5)))(typescript@4.9.5): dependencies: @@ -70030,14 +70101,14 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.4) - ts-loader@9.4.2(typescript@4.9.5)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)): + ts-loader@9.4.2(typescript@4.9.5)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.15.0 micromatch: 4.0.5 semver: 7.5.2 typescript: 4.9.5 - webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) ts-loader@9.4.2(typescript@4.9.5)(webpack@5.82.1(@swc/core@1.3.107)(webpack-cli@5.1.4)): dependencies: @@ -70055,7 +70126,7 @@ snapshots: micromatch: 4.0.5 semver: 7.5.2 typescript: 4.9.5 - webpack: 5.88.2(@swc/core@1.3.107) + webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) ts-morph@12.0.0: dependencies: @@ -70274,7 +70345,6 @@ snapshots: yn: 3.1.1 optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.2) - optional: true ts-node@10.9.2(@swc/core@1.3.107)(@types/node@16.11.7)(typescript@4.9.5): dependencies: @@ -70410,7 +70480,7 @@ snapshots: dependencies: chalk: 4.1.2 enhanced-resolve: 5.15.0 - tsconfig-paths: 4.2.0 + tsconfig-paths: 4.1.2 tsconfig-paths@3.14.2: dependencies: @@ -70445,9 +70515,9 @@ snapshots: tslib@2.6.2: {} - tsup-preset-solid@2.2.0(esbuild@0.19.12)(solid-js@1.8.17)(tsup@8.0.2(@microsoft/api-extractor@7.38.0(@types/node@18.16.9))(@swc/core@1.3.107)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5))(typescript@4.9.5)): + tsup-preset-solid@2.2.0(esbuild@0.20.1)(solid-js@1.8.17)(tsup@8.0.2(@microsoft/api-extractor@7.38.0(@types/node@18.16.9))(@swc/core@1.3.107)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5))(typescript@4.9.5)): dependencies: - esbuild-plugin-solid: 0.5.0(esbuild@0.19.12)(solid-js@1.8.17) + esbuild-plugin-solid: 0.5.0(esbuild@0.20.1)(solid-js@1.8.17) tsup: 8.0.2(@microsoft/api-extractor@7.38.0(@types/node@18.16.9))(@swc/core@1.3.107)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.3.107)(@types/node@18.16.9)(typescript@4.9.5))(typescript@4.9.5) transitivePeerDependencies: - esbuild @@ -70957,7 +71027,7 @@ snapshots: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.88.2(@swc/core@1.3.107) + webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) optionalDependencies: file-loader: 6.2.0(webpack@5.88.2(@swc/core@1.3.107)) @@ -71746,9 +71816,9 @@ snapshots: webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 @@ -71757,7 +71827,7 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4) webpack-merge: 5.9.0 optionalDependencies: webpack-bundle-analyzer: 4.10.1 @@ -71799,7 +71869,7 @@ snapshots: schema-utils: 4.0.0 webpack: 5.78.0(@swc/core@1.3.107) - webpack-dev-middleware@5.3.3(webpack@5.88.2(@swc/core@1.3.107)): + webpack-dev-middleware@5.3.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)): dependencies: colorette: 2.0.19 memfs: 3.5.0 @@ -71924,7 +71994,7 @@ snapshots: - supports-color - utf-8-validate - webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.3.107)): + webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)): dependencies: '@types/bonjour': 3.5.10 '@types/connect-history-api-fallback': 1.3.5 @@ -71954,7 +72024,7 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.3(webpack@5.88.2(@swc/core@1.3.107)) + webpack-dev-middleware: 5.3.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) ws: 8.16.0 optionalDependencies: webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) @@ -72001,12 +72071,12 @@ snapshots: webpack-sources@3.2.3: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)))(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)): dependencies: typed-assert: 1.0.9 webpack: 5.88.2(@swc/core@1.3.107)(esbuild@0.18.17) optionalDependencies: - html-webpack-plugin: 5.5.3(webpack@5.88.2(@swc/core@1.3.107)) + html-webpack-plugin: 5.5.3(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) webpack-virtual-modules@0.5.0: {} @@ -72136,7 +72206,7 @@ snapshots: - esbuild - uglify-js - webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4): + webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 0.0.51 @@ -72159,7 +72229,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(@swc/core@1.3.107)(esbuild@0.19.12)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.19.12)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.9(@swc/core@1.3.107)(esbuild@0.20.1)(webpack@5.78.0(@swc/core@1.3.107)(esbuild@0.20.1)(webpack-cli@5.1.4)) watchpack: 2.4.0 webpack-sources: 3.2.3 optionalDependencies: @@ -72235,37 +72305,6 @@ snapshots: - esbuild - uglify-js - webpack@5.88.2(@swc/core@1.3.107): - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/wasm-edit': 1.11.5 - '@webassemblyjs/wasm-parser': 1.11.5 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.2.1 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(@swc/core@1.3.107)(webpack@5.88.2(@swc/core@1.3.107)) - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17): dependencies: '@types/eslint-scope': 3.7.4 @@ -72289,7 +72328,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(@swc/core@1.3.107)(esbuild@0.18.17)(webpack@5.88.2(@swc/core@1.3.107)) + terser-webpack-plugin: 5.3.9(@swc/core@1.3.107)(esbuild@0.18.17)(webpack@5.88.2(@swc/core@1.3.107)(esbuild@0.18.17)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b7350501d9f..da1046bbf9f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,5 @@ packages: # all packages in subdirs of packages/ and components/ - - 'automation' - 'packages/*' # Angular projects - these are nested under the Angular workspace root, and need version bumps during release. - 'packages/notification-center-angular/projects/*' @@ -10,5 +9,3 @@ packages: - '!**/test/**' # all packages in enterprise modules - 'enterprise/packages/*' - - 'enterprise/packages/libs/*' - - 'enterprise/packages/echo/*'