gitextract_65y55uur/ ├── .agents/ │ └── skills/ │ ├── email-best-practices/ │ │ ├── SKILL.md │ │ └── resources/ │ │ ├── branding.md │ │ ├── compliance.md │ │ ├── deliverability.md │ │ ├── email-capture.md │ │ ├── email-types.md │ │ ├── list-management.md │ │ ├── marketing-emails.md │ │ ├── sending-reliability.md │ │ ├── transactional-email-catalog.md │ │ ├── transactional-emails.md │ │ └── webhooks-events.md │ └── react-email/ │ ├── SKILL.md │ ├── TESTS.md │ └── references/ │ ├── COMPONENTS.md │ ├── I18N.md │ ├── PATTERNS.md │ ├── SENDING.md │ └── STYLING.md ├── .claude/ │ └── skills/ │ └── better-auth-best-practices/ │ └── SKILL.md ├── .coderabbit.yaml ├── .copilotignore ├── .cursor/ │ ├── Dockerfile │ ├── agents/ │ │ ├── impact-checker.md │ │ └── verifier.md │ ├── commands/ │ │ ├── code-review-checklist.md │ │ └── create-pr.md │ ├── rules/ │ │ ├── api-property-optionality-hygiene.mdc │ │ ├── api.mdc │ │ ├── clickhouse.mdc │ │ ├── context-engineering.mdc │ │ ├── dal-repository.mdc │ │ ├── dashboard.mdc │ │ ├── dependency-graph.mdc │ │ ├── infrastructure.mdc │ │ ├── novu.mdc │ │ ├── packages.mdc │ │ ├── pullrequest.mdc │ │ ├── testing.mdc │ │ ├── worker.mdc │ │ └── ws.mdc │ ├── scripts/ │ │ └── dead-code/ │ │ ├── knip.config.jsonc │ │ └── scan.sh │ ├── settings.json │ └── skills/ │ ├── better-auth-best-practices/ │ │ └── SKILL.md │ ├── enterprise-submodule/ │ │ └── SKILL.md │ └── run-api-e2e-tests/ │ └── SKILL.md ├── .cursorignore ├── .deepsource.toml ├── .devcontainer/ │ ├── Dockerfile │ ├── devcontainer.json │ └── docker-compose.yml ├── .editorconfig ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── docs_feedback.yml │ │ ├── feature_request.yml │ │ └── polishing.yml │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ ├── cache/ │ │ │ └── action.yml │ │ ├── checkout-submodules/ │ │ │ └── action.yml │ │ ├── free-space/ │ │ │ └── action.yml │ │ ├── run-api/ │ │ │ └── action.yml │ │ ├── run-backend/ │ │ │ └── action.yml │ │ ├── setup-project/ │ │ │ └── action.yml │ │ ├── setup-project-minimal/ │ │ │ └── action.yml │ │ ├── setup-redis-cluster/ │ │ │ └── action.yml │ │ ├── slack-notify-on-failure/ │ │ │ └── action.yml │ │ ├── start-localstack/ │ │ │ └── action.yml │ │ └── validate-openapi/ │ │ └── action.yml │ ├── labeler.yml │ └── workflows/ │ ├── check-only.yml │ ├── check-submodule-sync-merge.yaml │ ├── check-submodule-sync-pr.yaml │ ├── codeql-analysis.yml │ ├── community-label.yml │ ├── contributor-checks.yml │ ├── conventional-commit.yml │ ├── deploy.yml │ ├── deployment-summary.yml │ ├── dev-deploy-dashboard.yml │ ├── dev-deploy-inbound-mail.yml │ ├── issue-label.yml │ ├── jarvis.yml │ ├── on-pr-change.yml │ ├── on-pr.yml │ ├── on-push-trigger.yml │ ├── pr-labeler.yml │ ├── pr-manager.yml │ ├── prepare-cloud-release.yaml │ ├── prepare-enterprise-self-hosted-release.yml │ ├── prepare-self-hosted-release.yml │ ├── preview-packages.yml │ ├── prod-deploy-inbound-mail.yml │ ├── release-packages.yml │ ├── reusable-api-e2e.yml │ ├── reusable-dashboard-deploy.yml │ ├── reusable-dashboard-e2e.yml │ ├── reusable-inbound-mail-e2e.yml │ ├── reusable-webhook-e2e.yml │ ├── reusable-worker-e2e.yml │ ├── reusable-ws-e2e.yml │ ├── rollback.yml │ └── scripts/ │ ├── add-triage-label.js │ ├── community-contribution-label.js │ ├── is-community-contributor.js │ ├── stop-only.sh │ └── validate-submodule-sync.sh ├── .gitignore ├── .gitmodules ├── .husky/ │ └── pre-commit ├── .idea/ │ ├── .gitignore │ ├── aws.xml │ ├── codeStyles/ │ │ ├── Project.xml │ │ └── codeStyleConfig.xml │ ├── discord.xml │ ├── inspectionProfiles/ │ │ └── Project_Default.xml │ ├── jsLibraryMappings.xml │ ├── modules.xml │ ├── novu.iml │ ├── nx-angular-config.xml │ ├── runConfigurations/ │ │ ├── API.xml │ │ ├── API___TEST.xml │ │ ├── APPLICATION_GENERIC.xml │ │ ├── DAL.xml │ │ ├── DAL2.xml │ │ ├── DOCS.xml │ │ ├── EE_AUTH.xml │ │ ├── EMBED.xml │ │ ├── RUN_LOCAL_ENV.xml │ │ ├── RUN_TEST_ENV.xml │ │ ├── SHARED.xml │ │ ├── SHARED_WEB.xml │ │ ├── TESTING.xml │ │ ├── WEB.xml │ │ ├── WEBHOOK.xml │ │ ├── WEB___CYPRESS.xml │ │ ├── WIDGET.xml │ │ ├── WIDGET_CLI.xml │ │ ├── WIDGET___CYPRESS.xml │ │ ├── WIDGET___TEST.xml │ │ ├── WORKER.xml │ │ ├── WORKER___TEST.xml │ │ ├── WS.xml │ │ ├── WS___TEST.xml │ │ └── _template__of_Mocha.xml │ ├── swagger-settings.xml │ └── vcs.xml ├── .markdownlint.jsonc ├── .npmrc ├── .npmrc-cloud ├── .nvmrc ├── .nxignore ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── AGENTS.md ├── CITATION.cff ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── EE-PACKAGES-LICENSE ├── LICENSE-ENTERPRISE ├── LICENSE-MIT ├── README.md ├── SECURITY.md ├── _templates/ │ ├── module/ │ │ └── new/ │ │ ├── controller.ejs.t │ │ ├── module.ejs.t │ │ ├── prompt.ejs.t │ │ └── usecase-index.ejs.t │ └── usecase/ │ └── new/ │ ├── command.ejs.t │ ├── import-inject.ejs.t │ ├── import-row-inject.ejs.t │ ├── prompt.ejs.t │ └── usecase.ejs.t ├── apps/ │ ├── api/ │ │ ├── .gitignore │ │ ├── .mocharc.json │ │ ├── .spectral.yaml │ │ ├── .swcrc │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── admin/ │ │ │ ├── connect-to-dal.ts │ │ │ ├── make-json-backup.ts │ │ │ ├── remove-organization.ts │ │ │ └── remove-user-account.ts │ │ ├── e2e/ │ │ │ ├── compile-email-template.e2e.ts │ │ │ ├── enterprise/ │ │ │ │ └── inbound-webhook/ │ │ │ │ └── process-inbound-webhook.e2e.ts │ │ │ ├── mock-http-client.ts │ │ │ ├── retry.e2e.ts │ │ │ ├── setup.ts │ │ │ └── test-bridge-server.ts │ │ ├── exportOpenAPIJSON.ts │ │ ├── jarvis-api-intro.md │ │ ├── migrations/ │ │ │ ├── 001-add-default-identifier-to-topic-subscribers/ │ │ │ │ ├── add-default-identifier-to-topic-subscribers-migration.spec.ts │ │ │ │ └── add-default-identifier-to-topic-subscribers-migration.ts │ │ │ ├── 002-remove-duplicate-identifiers/ │ │ │ │ ├── remove-duplicate-identifiers.spec.ts │ │ │ │ └── remove-duplicate-identifiers.ts │ │ │ ├── add-layout-id-to-email-controls/ │ │ │ │ ├── add-layout-id-to-email-controls-migration.spec.ts │ │ │ │ └── add-layout-id-to-email-controls-migration.ts │ │ │ ├── changes-migration.ts │ │ │ ├── clickhouse-migrations/ │ │ │ │ ├── 1_initial_schema.sql │ │ │ │ ├── 2_add_workflow_id_to_schema.sql │ │ │ │ ├── 3_analytics_tables.sql │ │ │ │ ├── 4_refactor_traces_schema.sql │ │ │ │ ├── 5_finalize_table_exchange.sql │ │ │ │ └── README.md │ │ │ ├── deleteLogs/ │ │ │ │ └── dropLogsCollection.ts │ │ │ ├── email-step-ui-schema-html-editor/ │ │ │ │ ├── email-step-ui-schema-html-editor-migration.spec.ts │ │ │ │ └── email-step-ui-schema-html-editor-migration.ts │ │ │ ├── encrypt-api-keys/ │ │ │ │ ├── encrypt-api-keys-migration.spec.ts │ │ │ │ └── encrypt-api-keys-migration.ts │ │ │ ├── encrypt-credentials/ │ │ │ │ ├── encrypt-credentials-migration.spec.ts │ │ │ │ └── encrypt-credentials-migration.ts │ │ │ ├── expire-at/ │ │ │ │ ├── expire-at-delay.migration.spec.ts │ │ │ │ ├── expire-at.migration.spec.ts │ │ │ │ └── expire-at.migration.ts │ │ │ ├── fcm-credentials/ │ │ │ │ ├── fcm-credentials-migration.spec.ts │ │ │ │ └── fcm-credentials-migration.ts │ │ │ ├── in-app-integration/ │ │ │ │ └── in-app-integration.migration.ts │ │ │ ├── integration-scheme-update/ │ │ │ │ ├── add-integration-identifier-migration.spec.ts │ │ │ │ ├── add-integration-identifier-migration.ts │ │ │ │ ├── add-primary-priority-migration.ts │ │ │ │ └── update-primary-for-disabled-novu-integrations.ts │ │ │ ├── layout-identifier-update/ │ │ │ │ ├── add-layout-identifier-migration.spec.ts │ │ │ │ └── add-layout-identifier-migration.ts │ │ │ ├── normalize-message-template-cta-action/ │ │ │ │ ├── normalize-message-cta-action-migration.ts │ │ │ │ ├── normalize-message-template-cta-action-migration.spec.ts │ │ │ │ └── normalize-message-template-cta-action-migration.ts │ │ │ ├── normalize-users-email/ │ │ │ │ └── normalize-users-email.migration.ts │ │ │ ├── novu-integrations/ │ │ │ │ └── novu-integrations.migration.ts │ │ │ ├── preference-centralization/ │ │ │ │ ├── preference-centralization-migration.spec.ts │ │ │ │ └── preference-centralization-migration.ts │ │ │ ├── preferences-uniqueness/ │ │ │ │ ├── preferences-uniqueness-migration.spec.ts │ │ │ │ └── preferences-uniqueness-migration.ts │ │ │ ├── secure-to-boolean/ │ │ │ │ ├── secure-to-boolean-migration.spec.ts │ │ │ │ └── secure-to-boolean-migration.ts │ │ │ ├── seen-read-support/ │ │ │ │ ├── seen-read-support.migration.spec.ts │ │ │ │ └── seen-read-support.migration.ts │ │ │ ├── subscribers/ │ │ │ │ └── remove-duplicated-subscribers/ │ │ │ │ ├── remove-duplicated-subscribers.migration.spec.ts │ │ │ │ └── remove-duplicated-subscribers.migration.ts │ │ │ └── topic-subscriber-normalize/ │ │ │ ├── topic-subscriber-normalize.migration.spec.ts │ │ │ └── topic-subscriber-normalize.migration.ts │ │ ├── nest-cli.json │ │ ├── package.json │ │ ├── project.json │ │ ├── scripts/ │ │ │ ├── check-api-property-optionality.ts │ │ │ ├── clickhouse-seeder/ │ │ │ │ ├── README.md │ │ │ │ ├── config.ts │ │ │ │ ├── generators.ts │ │ │ │ ├── inserter.ts │ │ │ │ └── time-distribution.ts │ │ │ ├── generate-metadata.ts │ │ │ ├── run-novu-v2-e2e-shard.cjs │ │ │ ├── seed-clickhouse.ts │ │ │ └── seed-triggers.ts │ │ ├── src/ │ │ │ ├── .example.env │ │ │ ├── app/ │ │ │ │ ├── activity/ │ │ │ │ │ ├── activity.controller.ts │ │ │ │ │ ├── activity.module.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── get-charts.request.dto.ts │ │ │ │ │ │ ├── get-charts.response.dto.ts │ │ │ │ │ │ ├── get-request.request.dto.ts │ │ │ │ │ │ ├── get-request.response.dto.ts │ │ │ │ │ │ ├── get-requests.dto.ts │ │ │ │ │ │ ├── get-requests.response.dto.ts │ │ │ │ │ │ ├── shared.dto.ts │ │ │ │ │ │ ├── workflow-run-response.dto.ts │ │ │ │ │ │ ├── workflow-runs-request.dto.ts │ │ │ │ │ │ └── workflow-runs-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── get-requests.e2e.ts │ │ │ │ │ │ ├── get-workflow-run.e2e.ts │ │ │ │ │ │ └── get-workflow-runs.e2e.ts │ │ │ │ │ ├── shared/ │ │ │ │ │ │ ├── mappers.ts │ │ │ │ │ │ └── select.const.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── build-active-subscribers-chart/ │ │ │ │ │ │ ├── build-active-subscribers-chart.command.ts │ │ │ │ │ │ ├── build-active-subscribers-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-active-subscribers-trend-chart/ │ │ │ │ │ │ ├── build-active-subscribers-trend-chart.command.ts │ │ │ │ │ │ ├── build-active-subscribers-trend-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-avg-messages-per-subscriber-chart/ │ │ │ │ │ │ ├── build-avg-messages-per-subscriber-chart.command.ts │ │ │ │ │ │ ├── build-avg-messages-per-subscriber-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-delivery-trend-chart/ │ │ │ │ │ │ ├── build-delivery-trend-chart.command.ts │ │ │ │ │ │ ├── build-delivery-trend-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-interaction-trend-chart/ │ │ │ │ │ │ ├── build-interaction-trend-chart.command.ts │ │ │ │ │ │ ├── build-interaction-trend-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-messages-delivered-chart/ │ │ │ │ │ │ ├── build-messages-delivered-chart.command.ts │ │ │ │ │ │ ├── build-messages-delivered-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-provider-by-volume-chart/ │ │ │ │ │ │ ├── build-provider-by-volume-chart.command.ts │ │ │ │ │ │ ├── build-provider-by-volume-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-total-interactions-chart/ │ │ │ │ │ │ ├── build-total-interactions-chart.command.ts │ │ │ │ │ │ ├── build-total-interactions-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-workflow-by-volume-chart/ │ │ │ │ │ │ ├── build-workflow-by-volume-chart.command.ts │ │ │ │ │ │ ├── build-workflow-by-volume-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-workflow-runs-count-chart/ │ │ │ │ │ │ ├── build-workflow-runs-count-chart.command.ts │ │ │ │ │ │ ├── build-workflow-runs-count-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-workflow-runs-metric-chart/ │ │ │ │ │ │ ├── build-workflow-runs-metric-chart.command.ts │ │ │ │ │ │ ├── build-workflow-runs-metric-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── build-workflow-runs-trend-chart/ │ │ │ │ │ │ ├── build-workflow-runs-trend-chart.command.ts │ │ │ │ │ │ ├── build-workflow-runs-trend-chart.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-charts/ │ │ │ │ │ │ ├── get-charts.command.ts │ │ │ │ │ │ └── get-charts.usecase.ts │ │ │ │ │ ├── get-request/ │ │ │ │ │ │ ├── get-request.command.ts │ │ │ │ │ │ └── get-request.usecase.ts │ │ │ │ │ ├── get-requests/ │ │ │ │ │ │ ├── get-requests.command.ts │ │ │ │ │ │ └── get-requests.usecase.ts │ │ │ │ │ ├── get-workflow-run/ │ │ │ │ │ │ ├── get-workflow-run.command.ts │ │ │ │ │ │ └── get-workflow-run.usecase.ts │ │ │ │ │ └── get-workflow-runs/ │ │ │ │ │ ├── get-workflow-runs.command.ts │ │ │ │ │ └── get-workflow-runs.usecase.ts │ │ │ │ ├── analytics/ │ │ │ │ │ ├── analytics.controller.ts │ │ │ │ │ ├── analytics.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ └── hubspot-identify-form/ │ │ │ │ │ ├── hubspot-identify-form.command.ts │ │ │ │ │ └── hubspot-identify-form.usecase.ts │ │ │ │ ├── auth/ │ │ │ │ │ ├── auth.controller.ts │ │ │ │ │ ├── auth.module.ts │ │ │ │ │ ├── community.auth.module.config.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── login.dto.ts │ │ │ │ │ │ ├── password-reset.dto.ts │ │ │ │ │ │ ├── update-password.dto.ts │ │ │ │ │ │ └── user-registration.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── clerk.strategy.spec.ts │ │ │ │ │ │ ├── link-entities.service.spec.ts │ │ │ │ │ │ ├── login.e2e.ts │ │ │ │ │ │ ├── password-reset.e2e.ts │ │ │ │ │ │ ├── permissions.guard.e2e.ts │ │ │ │ │ │ ├── switch-organization.e2e.ts │ │ │ │ │ │ ├── update-password.e2e.ts │ │ │ │ │ │ ├── user-registration.e2e.ts │ │ │ │ │ │ └── user.auth.guard.e2e.ts │ │ │ │ │ ├── ee.auth.module.config.ts │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── auth.decorator.ts │ │ │ │ │ │ ├── community.user.auth.guard.ts │ │ │ │ │ │ ├── external-api.decorator.ts │ │ │ │ │ │ └── root-environment-guard.service.ts │ │ │ │ │ ├── services/ │ │ │ │ │ │ ├── auth.service.ts │ │ │ │ │ │ ├── community.auth.service.ts │ │ │ │ │ │ └── passport/ │ │ │ │ │ │ ├── apikey.strategy.ts │ │ │ │ │ │ ├── github.strategy.ts │ │ │ │ │ │ ├── jwt.strategy.ts │ │ │ │ │ │ ├── newrelic.util.ts │ │ │ │ │ │ └── subscriber-jwt.strategy.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── login/ │ │ │ │ │ │ ├── login.command.ts │ │ │ │ │ │ └── login.usecase.ts │ │ │ │ │ ├── password-reset/ │ │ │ │ │ │ ├── password-reset.command.ts │ │ │ │ │ │ └── password-reset.usecase.ts │ │ │ │ │ ├── password-reset-request/ │ │ │ │ │ │ ├── password-reset-request.command.ts │ │ │ │ │ │ └── password-reset-request.usecase.ts │ │ │ │ │ ├── register/ │ │ │ │ │ │ ├── user-register.command.ts │ │ │ │ │ │ └── user-register.usecase.ts │ │ │ │ │ ├── switch-environment/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── switch-environment.command.ts │ │ │ │ │ │ └── switch-environment.usecase.ts │ │ │ │ │ ├── switch-organization/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── switch-organization.command.ts │ │ │ │ │ │ └── switch-organization.usecase.ts │ │ │ │ │ └── update-password/ │ │ │ │ │ ├── update-password.command.ts │ │ │ │ │ └── update-password.usecase.ts │ │ │ │ ├── billing/ │ │ │ │ │ └── e2e/ │ │ │ │ │ ├── checkout-session-completed.e2e-ee.ts │ │ │ │ │ ├── create-checkout-session.e2e-ee.ts │ │ │ │ │ ├── create-subscription.e2e-ee.ts │ │ │ │ │ ├── create-usage-records.e2e-ee.ts │ │ │ │ │ ├── customer-subscription-created.e2e-ee.ts │ │ │ │ │ ├── customer-subscription-deleted.e2e-ee.ts │ │ │ │ │ ├── get-event-resource-limit.e2e-ee.ts │ │ │ │ │ ├── get-platform-notification-usage.e2e-ee.ts │ │ │ │ │ ├── get-portal-link.e2e-ee.ts │ │ │ │ │ ├── get-prices.e2e-ee.ts │ │ │ │ │ ├── get-subscription.e2e-ee.ts │ │ │ │ │ ├── quota-throttler.guard.e2e-ee.ts │ │ │ │ │ └── verify-customer.e2e-ee.ts │ │ │ │ ├── blueprint/ │ │ │ │ │ ├── blueprint.controller.ts │ │ │ │ │ ├── blueprint.module.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── get-blueprint.response.dto.ts │ │ │ │ │ │ └── grouped-blueprint.response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── get-blueprints-by-id.e2e.ts │ │ │ │ │ │ └── get-grouped-blueprints.e2e.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-blueprint/ │ │ │ │ │ │ ├── get-blueprint.command.ts │ │ │ │ │ │ ├── get-blueprint.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-grouped-blueprints/ │ │ │ │ │ │ ├── consts.ts │ │ │ │ │ │ ├── get-grouped-blueprints.command.ts │ │ │ │ │ │ ├── get-grouped-blueprints.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── bridge/ │ │ │ │ │ ├── bridge.controller.ts │ │ │ │ │ ├── bridge.module.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-bridge-request.dto.ts │ │ │ │ │ │ ├── create-bridge-response.dto.ts │ │ │ │ │ │ ├── validate-bridge-url-request.dto.ts │ │ │ │ │ │ └── validate-bridge-url-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── health-check.e2e.ts │ │ │ │ │ │ └── sync.e2e.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-bridge-status/ │ │ │ │ │ │ ├── get-bridge-status.command.ts │ │ │ │ │ │ ├── get-bridge-status.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── store-control-values/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── store-control-values.command.ts │ │ │ │ │ │ └── store-control-values.usecase.ts │ │ │ │ │ └── sync/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── sync.command.ts │ │ │ │ │ └── sync.usecase.ts │ │ │ │ ├── change/ │ │ │ │ │ ├── change.module.ts │ │ │ │ │ ├── changes.controller.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── bulk-apply-change.dto.ts │ │ │ │ │ │ ├── change-request.dto.ts │ │ │ │ │ │ └── change-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── get-changes.e2e.ts │ │ │ │ │ │ ├── promote-changes.e2e.ts │ │ │ │ │ │ └── promote-layout-changes.e2e.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── apply-change/ │ │ │ │ │ │ ├── apply-change.command.ts │ │ │ │ │ │ ├── apply-change.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── bulk-apply-change/ │ │ │ │ │ │ ├── bulk-apply-change.command.ts │ │ │ │ │ │ └── bulk-apply-change.usecase.ts │ │ │ │ │ ├── count-changes/ │ │ │ │ │ │ ├── count-changes.command.ts │ │ │ │ │ │ └── count-changes.usecase.ts │ │ │ │ │ ├── create-change/ │ │ │ │ │ │ └── create-change.spec.ts │ │ │ │ │ ├── get-changes/ │ │ │ │ │ │ ├── get-changes.command.ts │ │ │ │ │ │ └── get-changes.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── promote-change-to-environment/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── promote-change-to-environment.command.ts │ │ │ │ │ │ └── promote-change-to-environment.usecase.ts │ │ │ │ │ ├── promote-feed-change/ │ │ │ │ │ │ └── promote-feed-change.ts │ │ │ │ │ ├── promote-layout-change/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── promote-layout-change.use-case.ts │ │ │ │ │ ├── promote-message-template-change/ │ │ │ │ │ │ └── promote-message-template-change.ts │ │ │ │ │ ├── promote-notification-group-change/ │ │ │ │ │ │ └── promote-notification-group-change.ts │ │ │ │ │ ├── promote-notification-template-change/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── promote-notification-template-change.usecase.ts │ │ │ │ │ ├── promote-translation-change/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── promote-translation-change.usecase.ts │ │ │ │ │ ├── promote-translation-group-change/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── promote-translation-group-change.usecase.ts │ │ │ │ │ ├── promote-type-change.command.ts │ │ │ │ │ └── shared/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notification-template-change.interface.ts │ │ │ │ ├── channel-connections/ │ │ │ │ │ ├── channel-connections.controller.ts │ │ │ │ │ ├── channel-connections.module.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-channel-connection-request.dto.ts │ │ │ │ │ │ ├── cursor-pagination-query.dto.ts │ │ │ │ │ │ ├── dto.mapper.ts │ │ │ │ │ │ ├── get-channel-connection-response.dto.ts │ │ │ │ │ │ ├── list-channel-connections-query.dto.ts │ │ │ │ │ │ ├── list-channel-connections-response.dto.ts │ │ │ │ │ │ ├── shared.dto.ts │ │ │ │ │ │ └── update-channel-connection-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-channel-connection.e2e.ts │ │ │ │ │ │ ├── delete-channel-connection.e2e.ts │ │ │ │ │ │ ├── get-channel-connection.e2e.ts │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── channel-helpers.ts │ │ │ │ │ │ ├── list-channel-connections.e2e.ts │ │ │ │ │ │ └── update-channel-connection.e2e.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-channel-connection/ │ │ │ │ │ │ ├── create-channel-connection.command.ts │ │ │ │ │ │ └── create-channel-connection.usecase.ts │ │ │ │ │ ├── delete-channel-connection/ │ │ │ │ │ │ ├── delete-channel-connection.command.ts │ │ │ │ │ │ └── delete-channel-connection.usecase.ts │ │ │ │ │ ├── get-channel-connection/ │ │ │ │ │ │ ├── get-channel-connection.command.ts │ │ │ │ │ │ └── get-channel-connection.usecase.ts │ │ │ │ │ ├── list-channel-connections/ │ │ │ │ │ │ ├── list-channel-connections.command.ts │ │ │ │ │ │ └── list-channel-connections.usecase.ts │ │ │ │ │ └── update-channel-connection/ │ │ │ │ │ ├── update-channel-connection.command.ts │ │ │ │ │ └── update-channel-connection.usecase.ts │ │ │ │ ├── channel-endpoints/ │ │ │ │ │ ├── channel-endpoints.controller.ts │ │ │ │ │ ├── channel-endpoints.module.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-channel-endpoint-request.dto.ts │ │ │ │ │ │ ├── create-channel-endpoint-variants.dto.ts │ │ │ │ │ │ ├── cursor-pagination-query.dto.ts │ │ │ │ │ │ ├── dto.mapper.ts │ │ │ │ │ │ ├── endpoint-types.dto.ts │ │ │ │ │ │ ├── get-channel-endpoint-response.dto.ts │ │ │ │ │ │ ├── list-channel-endpoints-query.dto.ts │ │ │ │ │ │ ├── list-channel-endpoints-response.dto.ts │ │ │ │ │ │ └── update-channel-endpoint-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-channel-endpoint.e2e.ts │ │ │ │ │ │ ├── delete-channel-endpoint.e2e.ts │ │ │ │ │ │ ├── get-channel-endpoint.e2e.ts │ │ │ │ │ │ ├── list-channel-endpoints.e2e.ts │ │ │ │ │ │ └── update-channel-endpoint.e2e.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── create-channel-endpoint/ │ │ │ │ │ │ │ ├── create-channel-endpoint.command.ts │ │ │ │ │ │ │ └── create-channel-endpoint.usecase.ts │ │ │ │ │ │ ├── delete-channel-endpoint/ │ │ │ │ │ │ │ ├── delete-channel-endpoint.command.ts │ │ │ │ │ │ │ └── delete-channel-endpoint.usecase.ts │ │ │ │ │ │ ├── get-channel-endpoint/ │ │ │ │ │ │ │ ├── get-channel-endpoint.command.ts │ │ │ │ │ │ │ └── get-channel-endpoint.usecase.ts │ │ │ │ │ │ ├── list-channel-endpoints/ │ │ │ │ │ │ │ ├── list-channel-endpoints.command.ts │ │ │ │ │ │ │ └── list-channel-endpoints.usecase.ts │ │ │ │ │ │ └── update-channel-endpoint/ │ │ │ │ │ │ ├── update-channel-endpoint.command.ts │ │ │ │ │ │ └── update-channel-endpoint.usecase.ts │ │ │ │ │ └── validators/ │ │ │ │ │ └── channel-endpoint.validator.ts │ │ │ │ ├── content-templates/ │ │ │ │ │ ├── content-templates.controller.ts │ │ │ │ │ ├── content-templates.module.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── preview-email.e2e.ts │ │ │ │ │ │ └── preview-step.e2e.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ └── index.ts │ │ │ │ ├── contexts/ │ │ │ │ │ ├── contexts.controller.ts │ │ │ │ │ ├── contexts.module.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-context-request.dto.ts │ │ │ │ │ │ ├── cursor-pagination-query.dto.ts │ │ │ │ │ │ ├── dto.mapper.ts │ │ │ │ │ │ ├── get-context-response.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── list-contexts-query.dto.ts │ │ │ │ │ │ ├── list-contexts-response.dto.ts │ │ │ │ │ │ └── update-context-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-context.e2e.ts │ │ │ │ │ │ ├── delete-context.e2e.ts │ │ │ │ │ │ ├── get-context.e2e.ts │ │ │ │ │ │ ├── list-contexts.e2e.ts │ │ │ │ │ │ └── update-context.e2e.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-context/ │ │ │ │ │ │ ├── create-context.command.ts │ │ │ │ │ │ ├── create-context.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── delete-context/ │ │ │ │ │ │ ├── delete-context.command.ts │ │ │ │ │ │ ├── delete-context.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-context/ │ │ │ │ │ │ ├── get-context.command.ts │ │ │ │ │ │ ├── get-context.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── list-contexts/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── list-contexts.command.ts │ │ │ │ │ │ └── list-contexts.usecase.ts │ │ │ │ │ └── update-context/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-context.command.ts │ │ │ │ │ └── update-context.usecase.ts │ │ │ │ ├── environment-variables/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-environment-variable-request.dto.ts │ │ │ │ │ │ ├── environment-variable-response.dto.ts │ │ │ │ │ │ ├── get-environment-variable-usage-response.dto.ts │ │ │ │ │ │ ├── get-environment-variables-request.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── update-environment-variable-request.dto.ts │ │ │ │ │ ├── environment-variables.controller.ts │ │ │ │ │ ├── environment-variables.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-environment-variable/ │ │ │ │ │ │ ├── create-environment-variable.command.ts │ │ │ │ │ │ └── create-environment-variable.usecase.ts │ │ │ │ │ ├── delete-environment-variable/ │ │ │ │ │ │ ├── delete-environment-variable.command.ts │ │ │ │ │ │ └── delete-environment-variable.usecase.ts │ │ │ │ │ ├── get-environment-variable/ │ │ │ │ │ │ ├── get-environment-variable.command.ts │ │ │ │ │ │ └── get-environment-variable.usecase.ts │ │ │ │ │ ├── get-environment-variable-usage/ │ │ │ │ │ │ ├── get-environment-variable-usage.command.ts │ │ │ │ │ │ ├── get-environment-variable-usage.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-environment-variables/ │ │ │ │ │ │ ├── get-environment-variables.command.ts │ │ │ │ │ │ └── get-environment-variables.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── update-environment-variable/ │ │ │ │ │ ├── update-environment-variable.command.ts │ │ │ │ │ └── update-environment-variable.usecase.ts │ │ │ │ ├── environments-v1/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── api-key.dto.ts │ │ │ │ │ │ ├── create-environment-request.dto.ts │ │ │ │ │ │ ├── environment-response.dto.ts │ │ │ │ │ │ └── update-environment-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── environments.controller.e2e.ts │ │ │ │ │ │ ├── get-api-keys.e2e.ts │ │ │ │ │ │ └── regenerate-api-keys.e2e.ts │ │ │ │ │ ├── environments-v1.controller.ts │ │ │ │ │ ├── environments-v1.module.ts │ │ │ │ │ ├── novu-bridge-client.ts │ │ │ │ │ ├── novu-bridge.controller.ts │ │ │ │ │ ├── novu-bridge.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── construct-framework-workflow/ │ │ │ │ │ │ ├── construct-framework-workflow.command.ts │ │ │ │ │ │ ├── construct-framework-workflow.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── create-environment/ │ │ │ │ │ │ ├── create-environment.command.ts │ │ │ │ │ │ ├── create-environment.e2e.ts │ │ │ │ │ │ └── create-environment.usecase.ts │ │ │ │ │ ├── delete-environment/ │ │ │ │ │ │ ├── delete-environment.command.ts │ │ │ │ │ │ ├── delete-environment.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── generate-unique-api-key/ │ │ │ │ │ │ ├── generate-unique-api-key.spec.ts │ │ │ │ │ │ └── generate-unique-api-key.usecase.ts │ │ │ │ │ ├── get-api-keys/ │ │ │ │ │ │ ├── get-api-keys.command.ts │ │ │ │ │ │ └── get-api-keys.usecase.ts │ │ │ │ │ ├── get-environment/ │ │ │ │ │ │ ├── get-environment.command.ts │ │ │ │ │ │ ├── get-environment.e2e.ts │ │ │ │ │ │ ├── get-environment.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-my-environments/ │ │ │ │ │ │ ├── get-my-environments.command.ts │ │ │ │ │ │ ├── get-my-environments.e2e.ts │ │ │ │ │ │ └── get-my-environments.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── output-renderers/ │ │ │ │ │ │ ├── base-translation-renderer.usecase.ts │ │ │ │ │ │ ├── chat-output-renderer.usecase.ts │ │ │ │ │ │ ├── delay-output-renderer.usecase.ts │ │ │ │ │ │ ├── digest-output-renderer.usecase.ts │ │ │ │ │ │ ├── email-output-renderer.spec.ts │ │ │ │ │ │ ├── email-output-renderer.usecase.ts │ │ │ │ │ │ ├── in-app-output-renderer.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── novu-branding-html.ts │ │ │ │ │ │ ├── push-output-renderer.usecase.ts │ │ │ │ │ │ ├── render-command.ts │ │ │ │ │ │ ├── sms-output-renderer.usecase.ts │ │ │ │ │ │ └── throttle-output-renderer.usecase.ts │ │ │ │ │ ├── regenerate-api-keys/ │ │ │ │ │ │ └── regenerate-api-keys.usecase.ts │ │ │ │ │ └── update-environment/ │ │ │ │ │ ├── update-environment.command.ts │ │ │ │ │ ├── update-environment.e2e-ee.ts │ │ │ │ │ ├── update-environment.e2e.ts │ │ │ │ │ └── update-environment.usecase.ts │ │ │ │ ├── environments-v2/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── diff-environment.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── publish-environment.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── environments-v2-diff.e2e.ts │ │ │ │ │ │ ├── environments-v2-publish.e2e.ts │ │ │ │ │ │ └── get-environment-tags.e2e.ts │ │ │ │ │ ├── environments.controller.ts │ │ │ │ │ ├── environments.module.ts │ │ │ │ │ ├── services/ │ │ │ │ │ │ ├── dependency-analyzer.service.ts │ │ │ │ │ │ ├── environment-validation.service.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── types/ │ │ │ │ │ │ └── sync.types.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── diff-environment/ │ │ │ │ │ │ ├── diff-environment.command.ts │ │ │ │ │ │ ├── diff-environment.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── publish-environment/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── publish-environment.command.ts │ │ │ │ │ │ └── publish-environment.usecase.ts │ │ │ │ │ └── sync-strategies/ │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── layout-comparator.adapter.ts │ │ │ │ │ │ ├── layout-delete.adapter.ts │ │ │ │ │ │ ├── layout-repository.adapter.ts │ │ │ │ │ │ ├── layout-sync.adapter.ts │ │ │ │ │ │ ├── workflow-comparator.adapter.ts │ │ │ │ │ │ ├── workflow-delete.adapter.ts │ │ │ │ │ │ ├── workflow-repository.adapter.ts │ │ │ │ │ │ └── workflow-sync.adapter.ts │ │ │ │ │ ├── base/ │ │ │ │ │ │ ├── base-sync.strategy.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ │ ├── base-comparator.interface.ts │ │ │ │ │ │ │ ├── base-delete.interface.ts │ │ │ │ │ │ │ ├── base-repository.interface.ts │ │ │ │ │ │ │ ├── base-sync.interface.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── operations/ │ │ │ │ │ │ ├── base-diff.operation.ts │ │ │ │ │ │ ├── base-sync.operation.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── builders/ │ │ │ │ │ │ ├── diff-result.builder.ts │ │ │ │ │ │ └── sync-result.builder.ts │ │ │ │ │ ├── comparators/ │ │ │ │ │ │ ├── layout.comparator.ts │ │ │ │ │ │ └── workflow.comparator.ts │ │ │ │ │ ├── constants/ │ │ │ │ │ │ └── sync.constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── layout-sync.strategy.ts │ │ │ │ │ ├── normalizers/ │ │ │ │ │ │ ├── layout.normalizer.ts │ │ │ │ │ │ └── workflow.normalizer.ts │ │ │ │ │ ├── operations/ │ │ │ │ │ │ ├── layout-diff.operation.ts │ │ │ │ │ │ ├── layout-repository.service.ts │ │ │ │ │ │ ├── layout-sync.operation.ts │ │ │ │ │ │ ├── workflow-diff.operation.ts │ │ │ │ │ │ ├── workflow-repository.service.ts │ │ │ │ │ │ └── workflow-sync.operation.ts │ │ │ │ │ ├── sync.module.ts │ │ │ │ │ ├── types/ │ │ │ │ │ │ ├── layout-sync.types.ts │ │ │ │ │ │ └── workflow-sync.types.ts │ │ │ │ │ └── workflow-sync.strategy.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── test-email-request.dto.ts │ │ │ │ │ │ ├── trigger-event-request.dto.ts │ │ │ │ │ │ ├── trigger-event-response.dto.ts │ │ │ │ │ │ └── trigger-event-to-all-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── bridge-trigger.e2e.ts │ │ │ │ │ │ ├── bulk-trigger.e2e.ts │ │ │ │ │ │ ├── cancel-event.e2e.ts │ │ │ │ │ │ ├── context-events.e2e.ts │ │ │ │ │ │ ├── delay-events.e2e.ts │ │ │ │ │ │ ├── digest-events.e2e.ts │ │ │ │ │ │ ├── process-subscriber.e2e.ts │ │ │ │ │ │ ├── scheduled-digest.e2e.ts │ │ │ │ │ │ ├── send-message-email.e2e.ts │ │ │ │ │ │ ├── send-message-push.e2e.ts │ │ │ │ │ │ ├── test-email.e2e.ts │ │ │ │ │ │ ├── throttle-events.e2e.ts │ │ │ │ │ │ ├── trigger-event-preferences.e2e.ts │ │ │ │ │ │ ├── trigger-event-to-all.e2e.ts │ │ │ │ │ │ ├── trigger-event-topic.e2e.ts │ │ │ │ │ │ ├── trigger-event.e2e.ts │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── poll-for-job-status-change.util.ts │ │ │ │ │ │ └── sleep.util.ts │ │ │ │ │ ├── events.controller.ts │ │ │ │ │ ├── events.module.ts │ │ │ │ │ ├── exceptions/ │ │ │ │ │ │ └── payload-validation-exception.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── cancel-delayed/ │ │ │ │ │ │ │ ├── cancel-delayed.command.ts │ │ │ │ │ │ │ ├── cancel-delayed.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── parse-event-request/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── parse-event-request.command.ts │ │ │ │ │ │ │ ├── parse-event-request.e2e.ts │ │ │ │ │ │ │ └── parse-event-request.usecase.ts │ │ │ │ │ │ ├── process-bulk-trigger/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── process-bulk-trigger.command.ts │ │ │ │ │ │ │ └── process-bulk-trigger.usecase.ts │ │ │ │ │ │ ├── send-test-email/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── send-test-email.command.ts │ │ │ │ │ │ │ └── send-test-email.usecase.ts │ │ │ │ │ │ └── trigger-event-to-all/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── trigger-event-to-all.command.ts │ │ │ │ │ │ ├── trigger-event-to-all.spec.ts │ │ │ │ │ │ └── trigger-event-to-all.usecase.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── trigger-recipient-validation.ts │ │ │ │ ├── execution-details/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ └── execution-details-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ └── get-execution-details.e2e.ts │ │ │ │ │ ├── execution-details.controller.ts │ │ │ │ │ ├── execution-details.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-execution-details/ │ │ │ │ │ │ ├── get-execution-details.command.ts │ │ │ │ │ │ ├── get-execution-details.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── feeds/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-feed-request.dto.ts │ │ │ │ │ │ └── feed-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-feed.e2e.ts │ │ │ │ │ │ ├── delete-feed.e2e.ts │ │ │ │ │ │ └── get-feeds.e2e.ts │ │ │ │ │ ├── feeds.controller.ts │ │ │ │ │ ├── feeds.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-feed/ │ │ │ │ │ │ ├── create-feed.command.ts │ │ │ │ │ │ └── create-feed.usecase.ts │ │ │ │ │ ├── delete-feed/ │ │ │ │ │ │ ├── delete-feed.command.ts │ │ │ │ │ │ └── delete-feed.usecase.ts │ │ │ │ │ ├── get-feeds/ │ │ │ │ │ │ ├── get-feeds.command.ts │ │ │ │ │ │ └── get-feeds.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── health/ │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ └── health-check.e2e.ts │ │ │ │ │ ├── health.controller.ts │ │ │ │ │ └── health.module.ts │ │ │ │ ├── inbound-parse/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ └── get-mx-record.dto.ts │ │ │ │ │ ├── inbound-parse.controller.ts │ │ │ │ │ ├── inbound-parse.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-mx-record/ │ │ │ │ │ │ ├── get-mx-record.command.ts │ │ │ │ │ │ └── get-mx-record.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── inbox/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── action-type-request.dto.ts │ │ │ │ │ │ ├── bulk-update-preferences-request.dto.ts │ │ │ │ │ │ ├── create-topic-subscription-request.dto.ts │ │ │ │ │ │ ├── get-notifications-count-request.dto.ts │ │ │ │ │ │ ├── get-notifications-count-response.dto.ts │ │ │ │ │ │ ├── get-notifications-request.dto.ts │ │ │ │ │ │ ├── get-notifications-response.dto.ts │ │ │ │ │ │ ├── get-preferences-request.dto.ts │ │ │ │ │ │ ├── get-preferences-response.dto.ts │ │ │ │ │ │ ├── inbox-notification.dto.ts │ │ │ │ │ │ ├── mark-notifications-as-seen-request.dto.ts │ │ │ │ │ │ ├── snooze-notification-request.dto.ts │ │ │ │ │ │ ├── subscriber-session-request.dto.ts │ │ │ │ │ │ ├── subscriber-session-response.dto.ts │ │ │ │ │ │ ├── update-all-notifications-request.dto.ts │ │ │ │ │ │ ├── update-preferences-request.dto.ts │ │ │ │ │ │ └── workflow.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── context-aware-topic-subscriptions.e2e.ts │ │ │ │ │ │ ├── create-topic-subscription.e2e.ts │ │ │ │ │ │ ├── delete-notifications.e2e.ts │ │ │ │ │ │ ├── get-notifications-count.e2e.ts │ │ │ │ │ │ ├── get-notifications.e2e.ts │ │ │ │ │ │ ├── get-preferences.e2e.ts │ │ │ │ │ │ ├── get-topic-subscription.e2e.ts │ │ │ │ │ │ ├── mark-notification-as.e2e.ts │ │ │ │ │ │ ├── mark-notifications-as-seen.e2e.ts │ │ │ │ │ │ ├── session.e2e.ts │ │ │ │ │ │ ├── snooze-unsnooze-notification.e2e.ts │ │ │ │ │ │ ├── update-all-notifications.e2e.ts │ │ │ │ │ │ ├── update-notification-action.e2e.ts │ │ │ │ │ │ ├── update-preferences.e2e.ts │ │ │ │ │ │ └── update-subscription-workflow-preferences.e2e.ts │ │ │ │ │ ├── inbox.controller.ts │ │ │ │ │ ├── inbox.module.ts │ │ │ │ │ ├── inbox.topic.controller.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ └── context-compatibility.interceptor.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── bulk-update-preferences/ │ │ │ │ │ │ │ ├── bulk-update-preferences.command.ts │ │ │ │ │ │ │ ├── bulk-update-preferences.spec.ts │ │ │ │ │ │ │ └── bulk-update-preferences.usecase.ts │ │ │ │ │ │ ├── delete-all-notifications/ │ │ │ │ │ │ │ ├── delete-all-notifications.command.ts │ │ │ │ │ │ │ └── delete-all-notifications.usecase.ts │ │ │ │ │ │ ├── delete-many-notifications/ │ │ │ │ │ │ │ ├── delete-many-notifications.command.ts │ │ │ │ │ │ │ └── delete-many-notifications.usecase.ts │ │ │ │ │ │ ├── delete-notification/ │ │ │ │ │ │ │ ├── delete-notification.command.ts │ │ │ │ │ │ │ └── delete-notification.usecase.ts │ │ │ │ │ │ ├── delete-subscription/ │ │ │ │ │ │ │ ├── delete-subscription.command.ts │ │ │ │ │ │ │ └── delete-subscription.usecase.ts │ │ │ │ │ │ ├── get-inbox-preferences/ │ │ │ │ │ │ │ ├── get-inbox-preferences.command.ts │ │ │ │ │ │ │ ├── get-inbox-preferences.spec.ts │ │ │ │ │ │ │ └── get-inbox-preferences.usecase.ts │ │ │ │ │ │ ├── get-notifications/ │ │ │ │ │ │ │ ├── get-notifications.command.ts │ │ │ │ │ │ │ ├── get-notifications.spec.ts │ │ │ │ │ │ │ └── get-notifications.usecase.ts │ │ │ │ │ │ ├── get-topic-subscriptions/ │ │ │ │ │ │ │ ├── get-topic-subscriptions.command.ts │ │ │ │ │ │ │ └── get-topic-subscriptions.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── mark-many-notifications-as/ │ │ │ │ │ │ │ ├── mark-many-notifications-as.command.ts │ │ │ │ │ │ │ ├── mark-many-notifications-as.spec.ts │ │ │ │ │ │ │ └── mark-many-notifications-as.usecase.ts │ │ │ │ │ │ ├── mark-notification-as/ │ │ │ │ │ │ │ ├── mark-notification-as.command.ts │ │ │ │ │ │ │ ├── mark-notification-as.spec.ts │ │ │ │ │ │ │ └── mark-notification-as.usecase.ts │ │ │ │ │ │ ├── mark-notifications-as-seen/ │ │ │ │ │ │ │ ├── mark-notifications-as-seen.command.ts │ │ │ │ │ │ │ └── mark-notifications-as-seen.usecase.ts │ │ │ │ │ │ ├── noop-send-webhook-message.usecase.ts │ │ │ │ │ │ ├── notifications-count/ │ │ │ │ │ │ │ ├── notifications-count.command.ts │ │ │ │ │ │ │ ├── notifications-count.spec.ts │ │ │ │ │ │ │ └── notifications-count.usecase.ts │ │ │ │ │ │ ├── session/ │ │ │ │ │ │ │ ├── session.command.ts │ │ │ │ │ │ │ ├── session.spec.ts │ │ │ │ │ │ │ └── session.usecase.ts │ │ │ │ │ │ ├── snooze-notification/ │ │ │ │ │ │ │ ├── snooze-notification.command.ts │ │ │ │ │ │ │ ├── snooze-notification.spec.ts │ │ │ │ │ │ │ └── snooze-notification.usecase.ts │ │ │ │ │ │ ├── unsnooze-notification/ │ │ │ │ │ │ │ ├── unsnooze-notification.command.ts │ │ │ │ │ │ │ ├── unsnooze-notification.spec.ts │ │ │ │ │ │ │ └── unsnooze-notification.usecase.ts │ │ │ │ │ │ ├── update-all-notifications/ │ │ │ │ │ │ │ ├── update-all-notifications.command.ts │ │ │ │ │ │ │ ├── update-all-notifications.spec.ts │ │ │ │ │ │ │ └── update-all-notifications.usecase.ts │ │ │ │ │ │ ├── update-notification-action/ │ │ │ │ │ │ │ ├── update-notification-action.command.ts │ │ │ │ │ │ │ ├── update-notification-action.spec.ts │ │ │ │ │ │ │ └── update-notification-action.usecase.ts │ │ │ │ │ │ └── update-preferences/ │ │ │ │ │ │ ├── update-preferences.command.ts │ │ │ │ │ │ ├── update-preferences.spec.ts │ │ │ │ │ │ └── update-preferences.usecase.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── analytics.ts │ │ │ │ │ ├── encryption.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification-mapper.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── validate-data.ts │ │ │ │ ├── integrations/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── auto-configure-integration-request.dto.ts │ │ │ │ │ │ ├── auto-configure-integration-response.dto.ts │ │ │ │ │ │ ├── create-integration-request.dto.ts │ │ │ │ │ │ ├── generate-chat-oauth-url-response.dto.ts │ │ │ │ │ │ ├── generate-chat-oauth-url.dto.ts │ │ │ │ │ │ ├── get-channel-type-limit.sto.ts │ │ │ │ │ │ └── update-integration.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-integration.e2e.ts │ │ │ │ │ │ ├── deactivate-integration.e2e.ts │ │ │ │ │ │ ├── get-active-integration.e2e.ts │ │ │ │ │ │ ├── get-decrypted-integrations.e2e.ts │ │ │ │ │ │ ├── get-in-app-activated.e2e.ts │ │ │ │ │ │ ├── get-integration.e2e.ts │ │ │ │ │ │ ├── get-webhook-support-status.e2e.ts │ │ │ │ │ │ ├── remove-integration.e2e.ts │ │ │ │ │ │ ├── set-itegration-as-primary.e2e.ts │ │ │ │ │ │ └── update-integration.e2e.ts │ │ │ │ │ ├── integrations.controller.ts │ │ │ │ │ ├── integrations.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── auto-configure-integration/ │ │ │ │ │ │ ├── auto-configure-integration.command.ts │ │ │ │ │ │ └── auto-configure-integration.usecase.ts │ │ │ │ │ ├── chat-oauth-callback/ │ │ │ │ │ │ ├── chat-oauth-callback.command.ts │ │ │ │ │ │ ├── chat-oauth-callback.response.ts │ │ │ │ │ │ ├── chat-oauth-callback.usecase.ts │ │ │ │ │ │ ├── msteams-oauth-callback/ │ │ │ │ │ │ │ ├── msteams-oauth-callback.command.ts │ │ │ │ │ │ │ └── msteams-oauth-callback.usecase.ts │ │ │ │ │ │ └── slack-oauth-callback/ │ │ │ │ │ │ ├── slack-oauth-callback.command.ts │ │ │ │ │ │ └── slack-oauth-callback.usecase.ts │ │ │ │ │ ├── check-integration/ │ │ │ │ │ │ ├── check-integration-email.usecase.ts │ │ │ │ │ │ ├── check-integration.command.ts │ │ │ │ │ │ └── check-integration.usecase.ts │ │ │ │ │ ├── create-integration/ │ │ │ │ │ │ ├── create-integration.command.ts │ │ │ │ │ │ └── create-integration.usecase.ts │ │ │ │ │ ├── create-novu-integrations/ │ │ │ │ │ │ ├── create-novu-integrations.command.ts │ │ │ │ │ │ └── create-novu-integrations.usecase.ts │ │ │ │ │ ├── generate-chat-oath-url/ │ │ │ │ │ │ ├── chat-oauth.constants.ts │ │ │ │ │ │ ├── generate-chat-oauth-url.command.ts │ │ │ │ │ │ ├── generate-chat-oauth-url.usecase.ts │ │ │ │ │ │ ├── generate-msteams-oath-url/ │ │ │ │ │ │ │ ├── generate-msteams-oauth-url.command.ts │ │ │ │ │ │ │ └── generate-msteams-oauth-url.usecase.ts │ │ │ │ │ │ └── generate-slack-oath-url/ │ │ │ │ │ │ ├── generate-slack-oauth-url.command.ts │ │ │ │ │ │ └── generate-slack-oauth-url.usecase.ts │ │ │ │ │ ├── get-in-app-activated/ │ │ │ │ │ │ ├── get-in-app-activated.command.ts │ │ │ │ │ │ └── get-in-app-activated.usecase.ts │ │ │ │ │ ├── get-integrations/ │ │ │ │ │ │ ├── get-integrations.command.ts │ │ │ │ │ │ └── get-integrations.usecase.ts │ │ │ │ │ ├── get-webhook-support-status/ │ │ │ │ │ │ ├── get-webhook-support-status.command.ts │ │ │ │ │ │ └── get-webhook-support-status.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── remove-integration/ │ │ │ │ │ │ ├── remove-integration.command.ts │ │ │ │ │ │ └── remove-integration.usecase.ts │ │ │ │ │ ├── set-integration-as-primary/ │ │ │ │ │ │ ├── set-integration-as-primary.command.ts │ │ │ │ │ │ └── set-integration-as-primary.usecase.ts │ │ │ │ │ └── update-integration/ │ │ │ │ │ ├── update-integration.command.ts │ │ │ │ │ └── update-integration.usecase.ts │ │ │ │ ├── internal/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── scheduler-callback.dto.ts │ │ │ │ │ │ └── subscriber-online-state.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ └── internal.e2e.ts │ │ │ │ │ ├── guards/ │ │ │ │ │ │ └── internal-callback.guard.ts │ │ │ │ │ ├── internal.controller.ts │ │ │ │ │ ├── internal.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── handle-scheduler-callback/ │ │ │ │ │ │ ├── handle-scheduler-callback.command.ts │ │ │ │ │ │ └── handle-scheduler-callback.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── update-subscriber-online-state/ │ │ │ │ │ ├── update-subscriber-online-state.command.ts │ │ │ │ │ └── update-subscriber-online-state.usecase.ts │ │ │ │ ├── invites/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── bulk-invite-members.dto.ts │ │ │ │ │ │ ├── invite-member.dto.ts │ │ │ │ │ │ └── resend-invite.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── accept-invite.e2e.ts │ │ │ │ │ │ ├── bulk-invite.e2e.ts │ │ │ │ │ │ ├── get-invite.e2e.ts │ │ │ │ │ │ └── resend-invite.e2e.ts │ │ │ │ │ ├── invites.controller.ts │ │ │ │ │ ├── invites.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── accept-invite/ │ │ │ │ │ │ ├── accept-invite.command.ts │ │ │ │ │ │ └── accept-invite.usecase.ts │ │ │ │ │ ├── bulk-invite/ │ │ │ │ │ │ ├── bulk-invite.command.ts │ │ │ │ │ │ └── bulk-invite.usecase.ts │ │ │ │ │ ├── get-invite/ │ │ │ │ │ │ ├── get-invite.command.ts │ │ │ │ │ │ └── get-invite.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── invite-member/ │ │ │ │ │ │ ├── invite-member.command.ts │ │ │ │ │ │ └── invite-member.usecase.ts │ │ │ │ │ └── resend-invite/ │ │ │ │ │ ├── resend-invite.command.ts │ │ │ │ │ └── resend-invite.usecase.ts │ │ │ │ ├── layouts-v1/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-layout.dto.ts │ │ │ │ │ │ ├── filter-layouts.dto.ts │ │ │ │ │ │ ├── get-layout.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── update-layout.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-layout.e2e.ts │ │ │ │ │ │ ├── delete-layout.e2e.ts │ │ │ │ │ │ ├── filter-layouts.e2e.ts │ │ │ │ │ │ ├── get-layout.e2e.ts │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── set-default-layout.e2e.ts │ │ │ │ │ │ └── update-layout.e2e.ts │ │ │ │ │ ├── layouts-v1.controller.ts │ │ │ │ │ ├── layouts-v1.module.ts │ │ │ │ │ ├── types/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── check-layout-is-used/ │ │ │ │ │ │ ├── check-layout-is-used.command.ts │ │ │ │ │ │ ├── check-layout-is-used.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── create-default-layout/ │ │ │ │ │ │ ├── create-default-layout.command.ts │ │ │ │ │ │ ├── create-default-layout.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── create-default-layout-change/ │ │ │ │ │ │ ├── create-default-layout-change.command.ts │ │ │ │ │ │ └── create-default-layout-change.usecase.ts │ │ │ │ │ ├── create-layout/ │ │ │ │ │ │ ├── create-layout.command.ts │ │ │ │ │ │ ├── create-layout.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── create-layout-change/ │ │ │ │ │ │ ├── create-layout-change.command.ts │ │ │ │ │ │ ├── create-layout-change.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── delete-layout/ │ │ │ │ │ │ ├── delete-layout.command.ts │ │ │ │ │ │ ├── delete-layout.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── filter-layouts/ │ │ │ │ │ │ ├── filter-layouts.command.ts │ │ │ │ │ │ ├── filter-layouts.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── find-deleted-layout/ │ │ │ │ │ │ ├── find-deleted-layout.command.ts │ │ │ │ │ │ ├── find-deleted-layout.spec.ts │ │ │ │ │ │ ├── find-deleted-layout.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── set-default-layout/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── set-default-layout.command.ts │ │ │ │ │ │ └── set-default-layout.use-case.ts │ │ │ │ │ └── update-layout/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-layout.command.ts │ │ │ │ │ └── update-layout.use-case.ts │ │ │ │ ├── layouts-v2/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── duplicate-layout.dto.ts │ │ │ │ │ │ ├── generate-layout-preview-response.dto.ts │ │ │ │ │ │ ├── get-layout-list-query-params.dto.ts │ │ │ │ │ │ ├── get-layout-usage-response.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── layout-preview-payload.dto.ts │ │ │ │ │ │ ├── layout-preview-request.dto.ts │ │ │ │ │ │ └── list-layout-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── preview-layout.e2e.ts │ │ │ │ │ │ └── upsert-layout.e2e.ts │ │ │ │ │ ├── layouts.controller.ts │ │ │ │ │ ├── layouts.module.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── build-layout-issues/ │ │ │ │ │ │ │ ├── build-layout-issues.command.ts │ │ │ │ │ │ │ └── build-layout-issues.usecase.ts │ │ │ │ │ │ ├── delete-layout/ │ │ │ │ │ │ │ ├── delete-layout.command.ts │ │ │ │ │ │ │ ├── delete-layout.use-case.spec.ts │ │ │ │ │ │ │ ├── delete-layout.use-case.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── duplicate-layout/ │ │ │ │ │ │ │ ├── duplicate-layout.command.ts │ │ │ │ │ │ │ ├── duplicate-layout.use-case.spec.ts │ │ │ │ │ │ │ ├── duplicate-layout.use-case.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── get-layout-usage/ │ │ │ │ │ │ │ ├── get-layout-usage.command.ts │ │ │ │ │ │ │ ├── get-layout-usage.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── list-layouts/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── list-layouts.command.ts │ │ │ │ │ │ │ ├── list-layouts.use-case.spec.ts │ │ │ │ │ │ │ └── list-layouts.use-case.ts │ │ │ │ │ │ ├── preview-layout/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── preview-layout.command.ts │ │ │ │ │ │ │ ├── preview-layout.usecase.spec.ts │ │ │ │ │ │ │ ├── preview-layout.usecase.ts │ │ │ │ │ │ │ └── preview-utils.ts │ │ │ │ │ │ ├── sync-to-environment/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── layout-sync-to-environment.command.ts │ │ │ │ │ │ │ └── layout-sync-to-environment.usecase.ts │ │ │ │ │ │ └── upsert-layout/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── upsert-layout.command.ts │ │ │ │ │ │ ├── upsert-layout.usecase.spec.ts │ │ │ │ │ │ └── upsert-layout.usecase.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── layout-templates.ts │ │ │ │ ├── message-template/ │ │ │ │ │ ├── message-template.controller.ts │ │ │ │ │ ├── message-template.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── find-message-templates-by-layout/ │ │ │ │ │ │ ├── find-message-templates-by-layout.command.ts │ │ │ │ │ │ ├── find-message-templates-by-layout.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── messages/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── delete-message-response.dto.ts │ │ │ │ │ │ ├── get-messages-requests.dto.ts │ │ │ │ │ │ └── remove-messages-by-transactionId-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── get-messages.e2e.ts │ │ │ │ │ │ ├── remove-message.e2e.ts │ │ │ │ │ │ └── remove-messages-by-transactionId.e2e.ts │ │ │ │ │ ├── messages.controller.ts │ │ │ │ │ ├── messages.module.ts │ │ │ │ │ ├── params/ │ │ │ │ │ │ └── delete-message.param.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-messages/ │ │ │ │ │ │ ├── get-messages.command.ts │ │ │ │ │ │ ├── get-messages.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── remove-message/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── remove-message.command.ts │ │ │ │ │ │ └── remove-message.usecase.ts │ │ │ │ │ └── remove-messages-by-transactionId/ │ │ │ │ │ ├── remove-messages-by-transactionId.command.ts │ │ │ │ │ └── remove-messages-by-transactionId.usecase.ts │ │ │ │ ├── notification-groups/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-notification-group-request.dto.ts │ │ │ │ │ │ ├── delete-notification-group-response.dto.ts │ │ │ │ │ │ └── notification-group-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-notification-group.e2e.ts │ │ │ │ │ │ ├── delete-notification-group.e2e.ts │ │ │ │ │ │ ├── get-notification-group.e2e.ts │ │ │ │ │ │ ├── get-notification-groups.e2e.ts │ │ │ │ │ │ └── update-notification-group.e2e.ts │ │ │ │ │ ├── notification-groups.controller.ts │ │ │ │ │ ├── notification-groups.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-notification-group/ │ │ │ │ │ │ ├── create-notification-group.command.ts │ │ │ │ │ │ └── create-notification-group.usecase.ts │ │ │ │ │ ├── delete-notification-group/ │ │ │ │ │ │ ├── delete-notification-group.command.ts │ │ │ │ │ │ └── delete-notification-group.usecase.ts │ │ │ │ │ ├── get-notification-group/ │ │ │ │ │ │ ├── get-notification-group.command.ts │ │ │ │ │ │ └── get-notification-group.usecase.ts │ │ │ │ │ ├── get-notification-groups/ │ │ │ │ │ │ ├── get-notification-groups.command.ts │ │ │ │ │ │ └── get-notification-groups.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── update-notification-group/ │ │ │ │ │ ├── update-notification-group.command.ts │ │ │ │ │ └── update-notification-group.usecase.ts │ │ │ │ ├── notifications/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── activities-request.dto.ts │ │ │ │ │ │ ├── activities-response.dto.ts │ │ │ │ │ │ ├── activity-graph-states-response.dto.ts │ │ │ │ │ │ └── activity-stats-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── get-activity-feed.e2e.ts │ │ │ │ │ │ └── get-activity.e2e.ts │ │ │ │ │ ├── notification.controller.ts │ │ │ │ │ ├── notification.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-activity/ │ │ │ │ │ │ ├── get-activity.command.ts │ │ │ │ │ │ └── get-activity.usecase.ts │ │ │ │ │ ├── get-activity-feed/ │ │ │ │ │ │ ├── get-activity-feed.command.ts │ │ │ │ │ │ ├── get-activity-feed.usecase.spec.ts │ │ │ │ │ │ ├── get-activity-feed.usecase.ts │ │ │ │ │ │ └── map-feed-item-to.dto.ts │ │ │ │ │ ├── get-activity-graph-states/ │ │ │ │ │ │ ├── get-activity-graph-states.command.ts │ │ │ │ │ │ └── get-activity-graph-states.usecase.ts │ │ │ │ │ ├── get-activity-stats/ │ │ │ │ │ │ ├── get-activity-stats.command.ts │ │ │ │ │ │ ├── get-activity-stats.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── organization/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-organization.dto.ts │ │ │ │ │ │ ├── get-my-organization.dto.ts │ │ │ │ │ │ ├── get-organization-settings.dto.ts │ │ │ │ │ │ ├── get-organizations.dto.ts │ │ │ │ │ │ ├── member-response.dto.ts │ │ │ │ │ │ ├── organization-response.dto.ts │ │ │ │ │ │ ├── rename-organization.dto.ts │ │ │ │ │ │ ├── update-branding-details.dto.ts │ │ │ │ │ │ ├── update-member-roles.dto.ts │ │ │ │ │ │ └── update-organization-settings.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── change-member-role.e2e.ts │ │ │ │ │ │ ├── create-organization.e2e.ts │ │ │ │ │ │ ├── get-members.e2e.ts │ │ │ │ │ │ ├── get-my-organization.e2e.ts │ │ │ │ │ │ ├── get-organizations.e2e.ts │ │ │ │ │ │ ├── remove-member.e2e.ts │ │ │ │ │ │ ├── rename-organization.e2e.ts │ │ │ │ │ │ ├── update-branding-details.e2e.ts │ │ │ │ │ │ └── update-organization-settings.e2e.ts │ │ │ │ │ ├── ee.organization.controller.ts │ │ │ │ │ ├── organization.controller.ts │ │ │ │ │ ├── organization.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-organization/ │ │ │ │ │ │ ├── create-organization.command.ts │ │ │ │ │ │ ├── create-organization.usecase.ts │ │ │ │ │ │ └── sync-external-organization/ │ │ │ │ │ │ ├── sync-external-organization.command.ts │ │ │ │ │ │ └── sync-external-organization.usecase.ts │ │ │ │ │ ├── get-my-organization/ │ │ │ │ │ │ ├── get-my-organization.command.ts │ │ │ │ │ │ └── get-my-organization.usecase.ts │ │ │ │ │ ├── get-organization/ │ │ │ │ │ │ ├── get-organization.command.ts │ │ │ │ │ │ └── get-organization.usecase.ts │ │ │ │ │ ├── get-organization-settings/ │ │ │ │ │ │ ├── get-organization-settings.command.ts │ │ │ │ │ │ └── get-organization-settings.usecase.ts │ │ │ │ │ ├── get-organizations/ │ │ │ │ │ │ ├── get-organizations.command.ts │ │ │ │ │ │ └── get-organizations.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── membership/ │ │ │ │ │ │ ├── add-member/ │ │ │ │ │ │ │ ├── add-member.command.ts │ │ │ │ │ │ │ └── add-member.usecase.ts │ │ │ │ │ │ ├── change-member-role/ │ │ │ │ │ │ │ ├── change-member-role.command.ts │ │ │ │ │ │ │ └── change-member-role.usecase.ts │ │ │ │ │ │ ├── get-members/ │ │ │ │ │ │ │ ├── get-members.command.ts │ │ │ │ │ │ │ └── get-members.usecase.ts │ │ │ │ │ │ └── remove-member/ │ │ │ │ │ │ ├── remove-member.command.ts │ │ │ │ │ │ └── remove-member.usecase.ts │ │ │ │ │ ├── rename-organization/ │ │ │ │ │ │ ├── rename-organization-command.ts │ │ │ │ │ │ └── rename-organization.usecase.ts │ │ │ │ │ ├── update-branding-details/ │ │ │ │ │ │ ├── update-branding-details.command.ts │ │ │ │ │ │ └── update-branding-details.usecase.ts │ │ │ │ │ └── update-organization-settings/ │ │ │ │ │ ├── update-organization-settings.command.ts │ │ │ │ │ └── update-organization-settings.usecase.ts │ │ │ │ ├── outbound-webhooks/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-webhook-portal-response.dto.ts │ │ │ │ │ │ └── get-webhook-portal-token-response.dto.ts │ │ │ │ │ ├── outbound-webhooks.controller.ts │ │ │ │ │ ├── outbound-webhooks.module.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── create-webhook-portal-token/ │ │ │ │ │ │ │ ├── create-webhook-portal.command.ts │ │ │ │ │ │ │ └── create-webhook-portal.usecase.ts │ │ │ │ │ │ └── get-webhook-portal-token/ │ │ │ │ │ │ ├── get-webhook-portal-token.command.ts │ │ │ │ │ │ └── get-webhook-portal-token.usecase.ts │ │ │ │ │ └── webhooks.const.ts │ │ │ │ ├── partner-integrations/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-vercel-integration-request.dto.ts │ │ │ │ │ │ ├── create-vercel-integration-response.dto.ts │ │ │ │ │ │ └── update-vercel-integration-request.dto.ts │ │ │ │ │ ├── partner-integrations.controller.ts │ │ │ │ │ ├── partner-integrations.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-vercel-integration/ │ │ │ │ │ │ ├── create-vercel-integration.command.ts │ │ │ │ │ │ ├── create-vercel-integration.spec.ts │ │ │ │ │ │ └── create-vercel-integration.usecase.ts │ │ │ │ │ ├── get-vercel-integration/ │ │ │ │ │ │ ├── get-vercel-integration.command.ts │ │ │ │ │ │ ├── get-vercel-integration.spec.ts │ │ │ │ │ │ └── get-vercel-integration.usecase.ts │ │ │ │ │ ├── get-vercel-projects/ │ │ │ │ │ │ ├── get-vercel-integration-projects.command.ts │ │ │ │ │ │ ├── get-vercel-integration-projects.spec.ts │ │ │ │ │ │ └── get-vercel-integration-projects.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── process-vercel-webhook/ │ │ │ │ │ │ ├── process-vercel-webhook.command.ts │ │ │ │ │ │ ├── process-vercel-webhook.spec.ts │ │ │ │ │ │ └── process-vercel-webhook.usecase.ts │ │ │ │ │ └── update-vercel-integration/ │ │ │ │ │ ├── update-vercel-integration.command.ts │ │ │ │ │ ├── update-vercel-integration.spec.ts │ │ │ │ │ └── update-vercel-integration.usecase.ts │ │ │ │ ├── preferences/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── preferences.dto.ts │ │ │ │ │ │ └── upsert-preferences.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preferences.controller.ts │ │ │ │ │ ├── preferences.module.ts │ │ │ │ │ └── preferences.spec.ts │ │ │ │ ├── rate-limiting/ │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ └── throttler.guard.e2e.ts │ │ │ │ │ ├── guards/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── throttler.decorator.ts │ │ │ │ │ │ └── throttler.guard.ts │ │ │ │ │ ├── rate-limiting.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── evaluate-api-rate-limit/ │ │ │ │ │ │ ├── evaluate-api-rate-limit.command.ts │ │ │ │ │ │ ├── evaluate-api-rate-limit.spec.ts │ │ │ │ │ │ ├── evaluate-api-rate-limit.types.ts │ │ │ │ │ │ ├── evaluate-api-rate-limit.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── evaluate-token-bucket-rate-limit/ │ │ │ │ │ │ ├── evaluate-token-bucket-rate-limit.command.ts │ │ │ │ │ │ ├── evaluate-token-bucket-rate-limit.spec.ts │ │ │ │ │ │ ├── evaluate-token-bucket-rate-limit.types.ts │ │ │ │ │ │ ├── evaluate-token-bucket-rate-limit.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-api-rate-limit-algorithm-config/ │ │ │ │ │ │ ├── get-api-rate-limit-algorithm-config.spec.ts │ │ │ │ │ │ ├── get-api-rate-limit-algorithm-config.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-api-rate-limit-cost-config/ │ │ │ │ │ │ ├── get-api-rate-limit-cost-config.spec.ts │ │ │ │ │ │ ├── get-api-rate-limit-cost-config.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-api-rate-limit-maximum/ │ │ │ │ │ │ ├── get-api-rate-limit-maximum.command.ts │ │ │ │ │ │ ├── get-api-rate-limit-maximum.dto.ts │ │ │ │ │ │ ├── get-api-rate-limit-maximum.spec.ts │ │ │ │ │ │ ├── get-api-rate-limit-maximum.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── shared/ │ │ │ │ │ ├── commands/ │ │ │ │ │ │ ├── authenticated.command.ts │ │ │ │ │ │ ├── organization.command.ts │ │ │ │ │ │ └── project.command.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── api-key.ts │ │ │ │ │ │ ├── base-responses.ts │ │ │ │ │ │ ├── base-subscriber-fields.dto.ts │ │ │ │ │ │ ├── channel-preference.ts │ │ │ │ │ │ ├── cursor-paginated-response.ts │ │ │ │ │ │ ├── cursor-pagination-request.ts │ │ │ │ │ │ ├── data-wrapper-dto.ts │ │ │ │ │ │ ├── limit-offset-pagination.dto.ts │ │ │ │ │ │ ├── message-template.ts │ │ │ │ │ │ ├── message.template.dto.ts │ │ │ │ │ │ ├── notification-step-dto.ts │ │ │ │ │ │ ├── pagination-request.ts │ │ │ │ │ │ ├── pagination-response.ts │ │ │ │ │ │ ├── pagination-with-filters-request.ts │ │ │ │ │ │ ├── preference-channels.ts │ │ │ │ │ │ ├── schedule.ts │ │ │ │ │ │ ├── subscription-details-response.dto.ts │ │ │ │ │ │ └── subscriptions/ │ │ │ │ │ │ ├── create-subscriptions-response.dto.ts │ │ │ │ │ │ ├── create-subscriptions.dto.ts │ │ │ │ │ │ └── update-subscription.dto.ts │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── analytics-logs.guard.ts │ │ │ │ │ │ ├── analytics-logs.interceptor.ts │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ ├── headers.schema.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── responses.schema.ts │ │ │ │ │ │ ├── exclude-from-idempotency.ts │ │ │ │ │ │ ├── idempotency.e2e.ts │ │ │ │ │ │ ├── idempotency.interceptor.ts │ │ │ │ │ │ ├── paginated-ok-response.decorator.ts │ │ │ │ │ │ ├── response.decorator.ts │ │ │ │ │ │ ├── response.interceptor.ts │ │ │ │ │ │ ├── swagger/ │ │ │ │ │ │ │ ├── headers.decorator.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── injection.ts │ │ │ │ │ │ │ ├── keyless.security.ts │ │ │ │ │ │ │ ├── open.api.manipulation.component.ts │ │ │ │ │ │ │ ├── responses.decorator.ts │ │ │ │ │ │ │ ├── sdk.decorators.ts │ │ │ │ │ │ │ └── swagger.controller.ts │ │ │ │ │ │ └── user.decorator.ts │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ ├── content.service.spec.ts │ │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ │ └── sdk/ │ │ │ │ │ │ │ └── e2e-sdk.helper.ts │ │ │ │ │ │ ├── generate-transaction-id.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── is-valid-hmac.ts │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── mapMarkMessageToWebSocketEvent.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ └── product-feature.interceptor.ts │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ └── request-id.middleware.ts │ │ │ │ │ ├── services/ │ │ │ │ │ │ └── encryption/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── shared.module.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils/ │ │ │ │ │ │ ├── auth.utils.ts │ │ │ │ │ │ ├── mappers.ts │ │ │ │ │ │ └── request-transaction.util.ts │ │ │ │ │ └── validators/ │ │ │ │ │ ├── image.validator.ts │ │ │ │ │ ├── is-enum-or-array.ts │ │ │ │ │ ├── is-mongo-id-or-array-of-ids.validator.ts │ │ │ │ │ ├── is-time-12-hour-format.validator.ts │ │ │ │ │ ├── json-schema.validator.ts │ │ │ │ │ └── weekly-schedule-disabled.validator.ts │ │ │ │ ├── step-resolvers/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── deploy-step-resolver-request.dto.ts │ │ │ │ │ │ ├── deploy-step-resolver-response.dto.ts │ │ │ │ │ │ ├── disconnect-step-resolver-request.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── step-resolvers-count-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ └── step-resolvers.e2e.ts │ │ │ │ │ ├── services/ │ │ │ │ │ │ └── cloudflare-step-resolver-deploy.service.ts │ │ │ │ │ ├── step-resolvers.controller.ts │ │ │ │ │ ├── step-resolvers.module.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── deploy-step-resolver/ │ │ │ │ │ │ │ ├── deploy-step-resolver.command.ts │ │ │ │ │ │ │ ├── deploy-step-resolver.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── get-step-resolvers-count/ │ │ │ │ │ │ │ ├── get-step-resolvers-count.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── sync-step-resolver-to-environment/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── sync-step-resolver-to-environment.command.ts │ │ │ │ │ │ └── sync-step-resolver-to-environment.usecase.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── generate-step-resolver-worker-id.ts │ │ │ │ ├── storage/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ └── upload-url-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ └── get-signed-url.e2e.ts │ │ │ │ │ ├── storage.controller.ts │ │ │ │ │ ├── storage.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-signed-url/ │ │ │ │ │ │ ├── get-signed-url.command.ts │ │ │ │ │ │ └── get-signed-url.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── subscribers/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── bulk-create-subscriber-response.dto.ts │ │ │ │ │ │ ├── chat-oauth-request.dto.ts │ │ │ │ │ │ ├── create-subscriber-request.dto.ts │ │ │ │ │ │ ├── delete-subscriber-response.dto.ts │ │ │ │ │ │ ├── get-in-app-notification-feed-for-subscriber.dto.ts │ │ │ │ │ │ ├── get-subscriber-preferences-response.dto.ts │ │ │ │ │ │ ├── get-subscribers.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── mark-all-messages-as-request.dto.ts │ │ │ │ │ │ ├── subscriber-feed-response.dto.ts │ │ │ │ │ │ ├── subscriber-preference-override.dto.ts │ │ │ │ │ │ ├── subscriber-preference-template-response.dto.ts │ │ │ │ │ │ ├── subscriber-preference.dto.ts │ │ │ │ │ │ ├── subscribers-response.dto.ts │ │ │ │ │ │ ├── update-subscriber-global-preferences-request.dto.ts │ │ │ │ │ │ ├── update-subscriber-online-flag-request.dto.ts │ │ │ │ │ │ └── update-subscriber-request.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── bulk-create-subscribers.e2e.ts │ │ │ │ │ │ ├── create-subscriber.e2e.ts │ │ │ │ │ │ ├── get-notifications-feed.e2e.ts │ │ │ │ │ │ ├── get-subscriber.e2e.ts │ │ │ │ │ │ ├── get-unseen-count.e2e.ts │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── mark-all-subscriber-messages.e2e.ts │ │ │ │ │ │ ├── mark-as-by-mark.e2e.ts │ │ │ │ │ │ ├── remove-subscriber.e2e.ts │ │ │ │ │ │ └── update-online-flag.e2e.ts │ │ │ │ │ ├── params/ │ │ │ │ │ │ ├── get-subscriber-preferences-by-level.params.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── query-objects/ │ │ │ │ │ │ └── unseen-count.query.ts │ │ │ │ │ ├── subscribersV1.controller.ts │ │ │ │ │ ├── subscribersV1.module.ts │ │ │ │ │ ├── unit/ │ │ │ │ │ │ └── update-subscriber-channel.spec.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── bulk-create-subscribers/ │ │ │ │ │ │ ├── bulk-create-subscribers.command.ts │ │ │ │ │ │ ├── bulk-create-subscribers.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── chat-oauth/ │ │ │ │ │ │ ├── chat-oauth.command.ts │ │ │ │ │ │ └── chat-oauth.usecase.ts │ │ │ │ │ ├── chat-oauth-callback/ │ │ │ │ │ │ ├── chat-oauth-callback.command.ts │ │ │ │ │ │ ├── chat-oauth-callback.result.ts │ │ │ │ │ │ ├── chat-oauth-callback.usecase.ts │ │ │ │ │ │ └── is-not-empty.spec.ts │ │ │ │ │ ├── delete-subscriber-credentials/ │ │ │ │ │ │ ├── delete-subscriber-credentials.command.ts │ │ │ │ │ │ ├── delete-subscriber-credentials.spec.ts │ │ │ │ │ │ ├── delete-subscriber-credentials.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-preferences-by-level/ │ │ │ │ │ │ ├── get-preferences-by-level.command.ts │ │ │ │ │ │ └── get-preferences-by-level.usecase.ts │ │ │ │ │ ├── get-subscriber/ │ │ │ │ │ │ ├── get-subscriber.command.ts │ │ │ │ │ │ ├── get-subscriber.spec.ts │ │ │ │ │ │ ├── get-subscriber.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-subscriber-global-preference/ │ │ │ │ │ │ ├── get-subscriber-global-preference.command.ts │ │ │ │ │ │ ├── get-subscriber-global-preference.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-subscriber-preference/ │ │ │ │ │ │ ├── get-subscriber-preference.command.ts │ │ │ │ │ │ ├── get-subscriber-preference.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-subscribers/ │ │ │ │ │ │ ├── get-subscribers.command.ts │ │ │ │ │ │ ├── get-subscribers.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── remove-subscriber/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── remove-subscriber.command.ts │ │ │ │ │ │ ├── remove-subscriber.spec.ts │ │ │ │ │ │ └── remove-subscriber.usecase.ts │ │ │ │ │ ├── search-by-external-subscriber-ids/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── search-by-external-subscriber-ids.command.ts │ │ │ │ │ │ ├── search-by-external-subscriber-ids.spec.ts │ │ │ │ │ │ └── search-by-external-subscriber-ids.use-case.ts │ │ │ │ │ └── update-subscriber-online-flag/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-subscriber-online-flag.command.ts │ │ │ │ │ └── update-subscriber-online-flag.usecase.ts │ │ │ │ ├── subscribers-v2/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── bulk-update-subscriber-preferences.dto.ts │ │ │ │ │ │ ├── context-keys-query.dto.ts │ │ │ │ │ │ ├── create-subscriber.dto.ts │ │ │ │ │ │ ├── cursor-pagination-query.dto.ts │ │ │ │ │ │ ├── get-subscriber-notifications-count-query.dto.ts │ │ │ │ │ │ ├── get-subscriber-notifications-count-response.dto.ts │ │ │ │ │ │ ├── get-subscriber-notifications-query.dto.ts │ │ │ │ │ │ ├── get-subscriber-notifications-response.dto.ts │ │ │ │ │ │ ├── get-subscriber-preferences-request.dto.ts │ │ │ │ │ │ ├── get-subscriber-preferences.dto.ts │ │ │ │ │ │ ├── inbox-notification.dto.ts │ │ │ │ │ │ ├── list-subscribers-query.dto.ts │ │ │ │ │ │ ├── list-subscribers-response.dto.ts │ │ │ │ │ │ ├── mark-subscriber-notifications-as-seen.dto.ts │ │ │ │ │ │ ├── patch-subscriber-preferences.dto.ts │ │ │ │ │ │ ├── patch-subscriber.dto.ts │ │ │ │ │ │ ├── remove-subscriber.dto.ts │ │ │ │ │ │ ├── snooze-subscriber-notification.dto.ts │ │ │ │ │ │ ├── subscriber-global-preference.dto.ts │ │ │ │ │ │ ├── subscriber-notification-action.dto.ts │ │ │ │ │ │ ├── subscriber-preferences-workflow-info.dto.ts │ │ │ │ │ │ ├── subscriber-workflow-preference.dto.ts │ │ │ │ │ │ └── update-all-subscriber-notifications.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-subscriber.e2e.ts │ │ │ │ │ │ ├── delete-subscriber.e2e.ts │ │ │ │ │ │ ├── get-subscriber-preferences.e2e.ts │ │ │ │ │ │ ├── get-subscriber.e2e.ts │ │ │ │ │ │ ├── list-subscriber-subscriptions.e2e.ts │ │ │ │ │ │ ├── patch-subscriber-preferences.e2e.ts │ │ │ │ │ │ ├── patch-subscriber.e2e.ts │ │ │ │ │ │ └── subscriber-notifications.e2e.ts │ │ │ │ │ ├── subscribers.controller.e2e.ts │ │ │ │ │ ├── subscribers.controller.ts │ │ │ │ │ ├── subscribers.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── get-subscriber/ │ │ │ │ │ │ ├── get-subscriber.command.ts │ │ │ │ │ │ └── get-subscriber.usecase.ts │ │ │ │ │ ├── get-subscriber-preferences/ │ │ │ │ │ │ ├── get-subscriber-preferences.command.ts │ │ │ │ │ │ └── get-subscriber-preferences.usecase.ts │ │ │ │ │ ├── list-subscribers/ │ │ │ │ │ │ ├── list-subscribers.command.ts │ │ │ │ │ │ ├── list-subscribers.usecase.ts │ │ │ │ │ │ └── map-subscriber-entity-to.dto.ts │ │ │ │ │ ├── patch-subscriber/ │ │ │ │ │ │ ├── patch-subscriber.command.ts │ │ │ │ │ │ └── patch-subscriber.usecase.ts │ │ │ │ │ ├── remove-subscriber/ │ │ │ │ │ │ ├── remove-subscriber.command.ts │ │ │ │ │ │ └── remove-subscriber.usecase.ts │ │ │ │ │ └── update-subscriber-preferences/ │ │ │ │ │ ├── update-subscriber-preferences.command.ts │ │ │ │ │ └── update-subscriber-preferences.usecase.ts │ │ │ │ ├── subscriptions/ │ │ │ │ │ ├── subscriptions.module.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── create-subscription-preferences/ │ │ │ │ │ │ │ ├── create-subscription-preferences.command.ts │ │ │ │ │ │ │ ├── create-subscription-preferences.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── create-subscriptions/ │ │ │ │ │ │ │ ├── create-subscriptions.command.ts │ │ │ │ │ │ │ ├── create-subscriptions.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── get-subscription/ │ │ │ │ │ │ │ ├── get-subscription.command.ts │ │ │ │ │ │ │ └── get-subscription.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── update-subscription/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── update-subscription.command.ts │ │ │ │ │ │ └── update-subscription.usecase.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── subscriptions.ts │ │ │ │ ├── support/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-thread.dto.ts │ │ │ │ │ │ └── plain-card.dto.ts │ │ │ │ │ ├── guards/ │ │ │ │ │ │ └── plain-cards.guard.ts │ │ │ │ │ ├── support.controller.ts │ │ │ │ │ ├── support.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── create-thread.command.ts │ │ │ │ │ ├── create-thread.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plain-cards.command.ts │ │ │ │ │ └── plain-cards.usecase.ts │ │ │ │ ├── tenant/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-tenant-request.dto.ts │ │ │ │ │ │ ├── create-tenant-response.dto.ts │ │ │ │ │ │ ├── get-tenant-response.dto.ts │ │ │ │ │ │ ├── get-tenants-request.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── update-tenant-request.dto.ts │ │ │ │ │ │ └── update-tenant-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-tenant.e2e.ts │ │ │ │ │ │ ├── delete-tenant.e2e.ts │ │ │ │ │ │ ├── get-tenant.e2e.ts │ │ │ │ │ │ ├── get-tenants.e2e.ts │ │ │ │ │ │ └── update-tenant.e2e.ts │ │ │ │ │ ├── tenant.controller.ts │ │ │ │ │ ├── tenant.module.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── delete-tenant/ │ │ │ │ │ │ ├── delete-tenant.command.ts │ │ │ │ │ │ └── delete-tenant.usecase.ts │ │ │ │ │ ├── get-tenants/ │ │ │ │ │ │ ├── get-tenants.command.ts │ │ │ │ │ │ └── get-tenants.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── testing/ │ │ │ │ │ ├── auth.controller.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ └── idempotency.dto.ts │ │ │ │ │ ├── product-feature.e2e.ts │ │ │ │ │ ├── rate-limiting.controller.ts │ │ │ │ │ ├── testing.controller.ts │ │ │ │ │ └── testing.module.ts │ │ │ │ ├── topics-v1/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── add-subscribers.dto.ts │ │ │ │ │ │ ├── assignSubscriberToTopicDto.ts │ │ │ │ │ │ ├── create-topic.dto.ts │ │ │ │ │ │ ├── filter-topics.dto.ts │ │ │ │ │ │ ├── get-topic.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── remove-subscribers.dto.ts │ │ │ │ │ │ ├── rename-topic.dto.ts │ │ │ │ │ │ ├── topic-subscriber.dto.ts │ │ │ │ │ │ └── topic.dto.ts │ │ │ │ │ ├── topics-v1.controller.ts │ │ │ │ │ ├── topics-v1.module.ts │ │ │ │ │ ├── types/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── use-cases/ │ │ │ │ │ ├── add-subscribers/ │ │ │ │ │ │ ├── add-subscribers.command.ts │ │ │ │ │ │ ├── add-subscribers.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── create-topic/ │ │ │ │ │ │ ├── create-topic.command.ts │ │ │ │ │ │ ├── create-topic.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── delete-topic/ │ │ │ │ │ │ ├── delete-topic.command.ts │ │ │ │ │ │ ├── delete-topic.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── filter-topics/ │ │ │ │ │ │ ├── filter-topics.command.ts │ │ │ │ │ │ ├── filter-topics.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-topic/ │ │ │ │ │ │ ├── get-topic.command.ts │ │ │ │ │ │ ├── get-topic.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-topic-subscriber/ │ │ │ │ │ │ ├── get-topic-subscriber.command.ts │ │ │ │ │ │ ├── get-topic-subscriber.use-case.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── remove-subscribers/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── remove-subscribers.command.ts │ │ │ │ │ │ └── remove-subscribers.use-case.ts │ │ │ │ │ └── rename-topic/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rename-topic.command.ts │ │ │ │ │ └── rename-topic.use-case.ts │ │ │ │ ├── topics-v2/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-topic-subscriptions.dto.ts │ │ │ │ │ │ ├── create-update-topic.dto.ts │ │ │ │ │ │ ├── cursor-pagination-query.dto.ts │ │ │ │ │ │ ├── delete-topic-response.dto.ts │ │ │ │ │ │ ├── delete-topic-subscriptions-response.dto.ts │ │ │ │ │ │ ├── delete-topic-subscriptions.dto.ts │ │ │ │ │ │ ├── list-subscriber-subscriptions-query.dto.ts │ │ │ │ │ │ ├── list-topic-subscriptions-query.dto.ts │ │ │ │ │ │ ├── list-topic-subscriptions-response.dto.ts │ │ │ │ │ │ ├── list-topics-query.dto.ts │ │ │ │ │ │ ├── list-topics-response.dto.ts │ │ │ │ │ │ ├── topic-response.dto.ts │ │ │ │ │ │ ├── topic-subscription-response.dto.ts │ │ │ │ │ │ ├── update-topic-subscription.dto.ts │ │ │ │ │ │ └── update-topic.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-topic-subscriptions.e2e.ts │ │ │ │ │ │ ├── delete-topic-subscriptions.e2e.ts │ │ │ │ │ │ ├── delete-topic.e2e.ts │ │ │ │ │ │ ├── get-topic.e2e.ts │ │ │ │ │ │ ├── list-topic-subscriptions.e2e.ts │ │ │ │ │ │ ├── list-topics.e2e.ts │ │ │ │ │ │ ├── update-topic-subscription.e2e.ts │ │ │ │ │ │ ├── update-topic.e2e.ts │ │ │ │ │ │ └── upsert-topic.e2e.ts │ │ │ │ │ ├── topics-v2.module.ts │ │ │ │ │ ├── topics.controller.ts │ │ │ │ │ └── usecases/ │ │ │ │ │ ├── delete-topic/ │ │ │ │ │ │ ├── delete-topic.command.ts │ │ │ │ │ │ └── delete-topic.usecase.ts │ │ │ │ │ ├── delete-topic-subscriptions/ │ │ │ │ │ │ ├── delete-topic-subscriptions.command.ts │ │ │ │ │ │ ├── delete-topic-subscriptions.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── get-topic/ │ │ │ │ │ │ ├── get-topic.command.ts │ │ │ │ │ │ └── get-topic.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── list-subscriber-subscriptions/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── list-subscriber-subscriptions.command.ts │ │ │ │ │ │ └── list-subscriber-subscriptions.usecase.ts │ │ │ │ │ ├── list-topic-subscriptions/ │ │ │ │ │ │ ├── list-topic-subscriptions.command.ts │ │ │ │ │ │ └── list-topic-subscriptions.usecase.ts │ │ │ │ │ ├── list-topics/ │ │ │ │ │ │ ├── list-topics.command.ts │ │ │ │ │ │ ├── list-topics.usecase.ts │ │ │ │ │ │ └── map-topic-entity-to.dto.ts │ │ │ │ │ ├── update-topic/ │ │ │ │ │ │ ├── update-topic.command.ts │ │ │ │ │ │ └── update-topic.usecase.ts │ │ │ │ │ └── upsert-topic/ │ │ │ │ │ ├── upsert-topic.command.ts │ │ │ │ │ └── upsert-topic.usecase.ts │ │ │ │ ├── translations/ │ │ │ │ │ └── e2e/ │ │ │ │ │ ├── v1/ │ │ │ │ │ │ ├── create-translation.e2e-ee.ts │ │ │ │ │ │ ├── delete-translation-group.e2e-ee.ts │ │ │ │ │ │ ├── delete-translation.e2e-ee.ts │ │ │ │ │ │ ├── edit-translation.e2e-ee.ts │ │ │ │ │ │ ├── get-locales-from-content.e2e-ee.ts │ │ │ │ │ │ ├── get-locales.e2e-ee.ts │ │ │ │ │ │ ├── get-translation-group.e2e-ee.ts │ │ │ │ │ │ ├── get-translation-groups.e2e-ee.ts │ │ │ │ │ │ ├── get-translation.e2e-ee.ts │ │ │ │ │ │ ├── update-default-locale.e2e-ee.ts │ │ │ │ │ │ └── update-translation.e2e-ee.ts │ │ │ │ │ └── v2/ │ │ │ │ │ ├── create-translation.e2e-ee.ts │ │ │ │ │ ├── delete-translation-group.e2e-ee.ts │ │ │ │ │ ├── delete-translation.e2e-ee.ts │ │ │ │ │ ├── export-master-json.e2e-ee.ts │ │ │ │ │ ├── get-translation-group.e2e-ee.ts │ │ │ │ │ ├── get-translation.e2e-ee.ts │ │ │ │ │ ├── get-translations-list.e2e-ee.ts │ │ │ │ │ ├── import-master-json.e2e-ee.ts │ │ │ │ │ ├── translation-replacement.e2e-ee.ts │ │ │ │ │ ├── upload-master-json.e2e-ee.ts │ │ │ │ │ └── upload-translations.e2e-ee.ts │ │ │ │ ├── user/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── change-profile-email.dto.ts │ │ │ │ │ │ ├── update-profile-request.dto.ts │ │ │ │ │ │ ├── user-onboarding-request.dto.ts │ │ │ │ │ │ ├── user-onboarding-tour-request.dto.ts │ │ │ │ │ │ └── user-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── email-change.e2e.ts │ │ │ │ │ │ ├── get-me.e2e.ts │ │ │ │ │ │ └── update-name-and-profile-picture.e2e.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── base-user-profile.usecase.ts │ │ │ │ │ │ ├── create-user/ │ │ │ │ │ │ │ ├── create-user.command.ts │ │ │ │ │ │ │ ├── create-user.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── get-my-profile/ │ │ │ │ │ │ │ ├── get-my-profile.dto.ts │ │ │ │ │ │ │ └── get-my-profile.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── update-name-and-profile-picture/ │ │ │ │ │ │ │ ├── update-name-and-profile-picture.command.ts │ │ │ │ │ │ │ └── update-name-and-profile-picture.usecase.ts │ │ │ │ │ │ ├── update-on-boarding/ │ │ │ │ │ │ │ ├── update-on-boarding.command.ts │ │ │ │ │ │ │ └── update-on-boarding.usecase.ts │ │ │ │ │ │ ├── update-on-boarding-tour/ │ │ │ │ │ │ │ ├── update-on-boarding-tour.command.ts │ │ │ │ │ │ │ └── update-on-boarding-tour.usecase.ts │ │ │ │ │ │ └── update-profile-email/ │ │ │ │ │ │ ├── update-profile-email.command.ts │ │ │ │ │ │ └── update-profile-email.usecase.ts │ │ │ │ │ ├── user.controller.ts │ │ │ │ │ └── user.module.ts │ │ │ │ ├── widgets/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── feeds-response.dto.ts │ │ │ │ │ │ ├── get-notifications-feed-request.dto.ts │ │ │ │ │ │ ├── log-usage-request.dto.ts │ │ │ │ │ │ ├── log-usage-response.dto.ts │ │ │ │ │ │ ├── mark-as-request.dto.ts │ │ │ │ │ │ ├── mark-message-action-as-seen.dto.ts │ │ │ │ │ │ ├── mark-message-as-request.dto.ts │ │ │ │ │ │ ├── message-response.dto.ts │ │ │ │ │ │ ├── organization-response.dto.ts │ │ │ │ │ │ ├── remove-all-messages.dto.ts │ │ │ │ │ │ ├── remove-messages-bulk-request.dto.ts │ │ │ │ │ │ ├── session-initialize-request.dto.ts │ │ │ │ │ │ ├── session-initialize-response.dto.ts │ │ │ │ │ │ ├── unseen-count-response.dto.ts │ │ │ │ │ │ ├── update-subscriber-preference-request.dto.ts │ │ │ │ │ │ └── update-subscriber-preference-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── get-count.e2e.ts │ │ │ │ │ │ ├── get-notification-feed.e2e.ts │ │ │ │ │ │ ├── get-subscriber-preference.e2e.ts │ │ │ │ │ │ ├── get-unread-count.e2e.ts │ │ │ │ │ │ ├── get-unseen-count.e2e.ts │ │ │ │ │ │ ├── initialize-widget-session.e2e.ts │ │ │ │ │ │ ├── mark-all-as-read.e2e.ts │ │ │ │ │ │ ├── mark-as-by-mark.e2e.ts │ │ │ │ │ │ ├── mark-as.e2e.ts │ │ │ │ │ │ ├── remove-all-messages.e2e.ts │ │ │ │ │ │ ├── remove-messages-bulk.e2e.ts │ │ │ │ │ │ └── update-subscriber-preference.e2e.ts │ │ │ │ │ ├── pipes/ │ │ │ │ │ │ └── limit-pipe/ │ │ │ │ │ │ ├── limit-pipe.spec.ts │ │ │ │ │ │ └── limit-pipe.ts │ │ │ │ │ ├── queries/ │ │ │ │ │ │ ├── get-count.query.ts │ │ │ │ │ │ └── store.query.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── get-feed-count/ │ │ │ │ │ │ │ ├── get-feed-count.command.ts │ │ │ │ │ │ │ └── get-feed-count.usecase.ts │ │ │ │ │ │ ├── get-notifications-feed/ │ │ │ │ │ │ │ ├── get-notifications-feed.command.ts │ │ │ │ │ │ │ └── get-notifications-feed.usecase.ts │ │ │ │ │ │ ├── get-organization-data/ │ │ │ │ │ │ │ ├── get-organization-data.command.ts │ │ │ │ │ │ │ └── get-organization-data.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── initialize-session/ │ │ │ │ │ │ │ ├── initialize-session.command.ts │ │ │ │ │ │ │ └── initialize-session.usecase.ts │ │ │ │ │ │ ├── mark-action-as-done/ │ │ │ │ │ │ │ ├── update-message-actions.command.ts │ │ │ │ │ │ │ └── update-message-actions.usecase.ts │ │ │ │ │ │ ├── mark-all-messages-as/ │ │ │ │ │ │ │ ├── mark-all-messages-as.command.ts │ │ │ │ │ │ │ └── mark-all-messages-as.usecase.ts │ │ │ │ │ │ ├── mark-message-as/ │ │ │ │ │ │ │ ├── mark-message-as.command.ts │ │ │ │ │ │ │ └── mark-message-as.usecase.ts │ │ │ │ │ │ ├── mark-message-as-by-mark/ │ │ │ │ │ │ │ ├── mark-message-as-by-mark.command.ts │ │ │ │ │ │ │ └── mark-message-as-by-mark.usecase.ts │ │ │ │ │ │ ├── remove-message/ │ │ │ │ │ │ │ ├── remove-message.command.ts │ │ │ │ │ │ │ └── remove-message.usecase.ts │ │ │ │ │ │ ├── remove-messages/ │ │ │ │ │ │ │ ├── remove-all-messages.command.ts │ │ │ │ │ │ │ └── remove-all-messages.usecase.ts │ │ │ │ │ │ └── remove-messages-bulk/ │ │ │ │ │ │ ├── remove-messages-bulk.command.ts │ │ │ │ │ │ └── remove-messages-bulk.usecase.ts │ │ │ │ │ ├── widgets.controller.ts │ │ │ │ │ └── widgets.module.ts │ │ │ │ ├── workflow-overrides/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-workflow-override-request.dto.ts │ │ │ │ │ │ ├── create-workflow-override-response.dto.ts │ │ │ │ │ │ ├── get-workflow-override-response.dto.ts │ │ │ │ │ │ ├── get-workflow-overrides-request.dto.ts │ │ │ │ │ │ ├── get-workflow-overrides-response.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── shared.ts │ │ │ │ │ │ ├── update-workflow-override-request.dto.ts │ │ │ │ │ │ └── update-workflow-override-response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── create-workflow-override.e2e.ts │ │ │ │ │ │ ├── delete-workflow-override.e2e.ts │ │ │ │ │ │ ├── get-workflow-override-by-id.e2e.ts │ │ │ │ │ │ ├── get-workflow-override.e2e.ts │ │ │ │ │ │ ├── get-workflow-overrides.e2e.ts │ │ │ │ │ │ ├── update-workflow-override-by-id.e2e.ts │ │ │ │ │ │ └── update-workflow-override.e2e.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── create-workflow-override/ │ │ │ │ │ │ │ ├── create-workflow-override.command.ts │ │ │ │ │ │ │ └── create-workflow-override.usecase.ts │ │ │ │ │ │ ├── delete-workflow-override/ │ │ │ │ │ │ │ ├── delete-workflow-override.command.ts │ │ │ │ │ │ │ └── delete-workflow-override.usecase.ts │ │ │ │ │ │ ├── get-workflow-override/ │ │ │ │ │ │ │ ├── get-workflow-override.command.ts │ │ │ │ │ │ │ └── get-workflow-override.usecase.ts │ │ │ │ │ │ ├── get-workflow-override-by-id/ │ │ │ │ │ │ │ ├── get-workflow-override-by-id.command.ts │ │ │ │ │ │ │ └── get-workflow-override-by-id.usecase.ts │ │ │ │ │ │ ├── get-workflow-overrides/ │ │ │ │ │ │ │ ├── get-workflow-overrides.command.ts │ │ │ │ │ │ │ └── get-workflow-overrides.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── update-workflow-override/ │ │ │ │ │ │ │ ├── update-workflow-override.command.ts │ │ │ │ │ │ │ └── update-workflow-override.usecase.ts │ │ │ │ │ │ └── update-workflow-override-by-id/ │ │ │ │ │ │ ├── update-workflow-override-by-id.command.ts │ │ │ │ │ │ └── update-workflow-override-by-id.usecase.ts │ │ │ │ │ ├── workflow-overrides.controller.ts │ │ │ │ │ └── workflow-overrides.module.ts │ │ │ │ ├── workflows-v1/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── change-workflow-status-request.dto.ts │ │ │ │ │ │ ├── create-workflow.request.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── update-workflow-request.dto.ts │ │ │ │ │ │ ├── variables.response.dto.ts │ │ │ │ │ │ ├── workflow-response.dto.ts │ │ │ │ │ │ ├── workflows-request.dto.ts │ │ │ │ │ │ └── workflows.response.dto.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── change-template-status.e2e.ts │ │ │ │ │ │ ├── create-notification-templates.e2e.ts │ │ │ │ │ │ ├── delete-notification-template.e2e.ts │ │ │ │ │ │ ├── get-notification-template.e2e.ts │ │ │ │ │ │ ├── get-notification-templates.e2e.ts │ │ │ │ │ │ └── update-notification-template.e2e.ts │ │ │ │ │ ├── notification-template.controller.ts │ │ │ │ │ ├── queries/ │ │ │ │ │ │ ├── CreateWorkflowQuery.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── change-template-active-status/ │ │ │ │ │ │ │ ├── change-template-active-status.command.ts │ │ │ │ │ │ │ └── change-template-active-status.usecase.ts │ │ │ │ │ │ ├── delete-notification-template/ │ │ │ │ │ │ │ ├── delete-notification-template.command.ts │ │ │ │ │ │ │ └── delete-notification-template.usecase.ts │ │ │ │ │ │ ├── delete-workflow/ │ │ │ │ │ │ │ ├── delete-workflow.command.ts │ │ │ │ │ │ │ └── delete-workflow.usecase.ts │ │ │ │ │ │ ├── get-active-integrations-status/ │ │ │ │ │ │ │ ├── get-active-integrations-status.command.ts │ │ │ │ │ │ │ ├── get-active-integrations-status.spec.ts │ │ │ │ │ │ │ └── get-active-integrations-status.usecase.ts │ │ │ │ │ │ ├── get-notification-template/ │ │ │ │ │ │ │ ├── get-notification-template.command.ts │ │ │ │ │ │ │ └── get-notification-template.usecase.ts │ │ │ │ │ │ ├── get-notification-templates/ │ │ │ │ │ │ │ ├── get-notification-templates.command.ts │ │ │ │ │ │ │ └── get-notification-templates.usecase.ts │ │ │ │ │ │ ├── get-workflow-variables/ │ │ │ │ │ │ │ ├── get-workflow-variables.command.ts │ │ │ │ │ │ │ └── get-workflow-variables.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── workflow-v1.controller.ts │ │ │ │ │ └── workflow-v1.module.ts │ │ │ │ └── workflows-v2/ │ │ │ │ ├── dtos/ │ │ │ │ │ ├── base-step-issue.dto.ts │ │ │ │ │ ├── control-schemas.dto.ts │ │ │ │ │ ├── create-step.dto.ts │ │ │ │ │ ├── create-workflow.dto.ts │ │ │ │ │ ├── duplicate-workflow.dto.ts │ │ │ │ │ ├── get-list-query-params.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── list-workflow.dto.ts │ │ │ │ │ ├── patch-step-data.dto.ts │ │ │ │ │ ├── patch-workflow.dto.ts │ │ │ │ │ ├── preferences.request.dto.ts │ │ │ │ │ ├── sync-workflow.dto.ts │ │ │ │ │ ├── test-http-endpoint.dto.ts │ │ │ │ │ ├── update-workflow.dto.ts │ │ │ │ │ └── workflow-test-data.dto.ts │ │ │ │ ├── e2e/ │ │ │ │ │ ├── generate-preview.e2e.ts │ │ │ │ │ ├── list-workflows.e2e.ts │ │ │ │ │ └── upsert-workflow.e2e.ts │ │ │ │ ├── exceptions/ │ │ │ │ │ ├── workflow-not-duplicable-exception.ts │ │ │ │ │ └── workflow-not-syncable-exception.ts │ │ │ │ ├── maily-test-data.ts │ │ │ │ ├── usecases/ │ │ │ │ │ ├── build-test-data/ │ │ │ │ │ │ ├── build-workflow-test-data.command.ts │ │ │ │ │ │ ├── build-workflow-test-data.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── duplicate-workflow/ │ │ │ │ │ │ ├── duplicate-workflow.command.ts │ │ │ │ │ │ ├── duplicate-workflow.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── list-workflows/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── list-workflow.usecase.ts │ │ │ │ │ │ └── list-workflows.command.ts │ │ │ │ │ ├── patch-workflow/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── patch-workflow.command.ts │ │ │ │ │ │ └── patch-workflow.usecase.ts │ │ │ │ │ ├── sync-to-environment/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── sync-to-environment.command.ts │ │ │ │ │ │ └── sync-to-environment.usecase.ts │ │ │ │ │ └── test-http-endpoint/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── test-http-endpoint.command.ts │ │ │ │ │ └── test-http-endpoint.usecase.ts │ │ │ │ ├── workflow.controller.e2e.ts │ │ │ │ ├── workflow.controller.ts │ │ │ │ └── workflow.module.ts │ │ │ ├── app.module.ts │ │ │ ├── bootstrap.ts │ │ │ ├── config/ │ │ │ │ ├── cors.config.spec.ts │ │ │ │ ├── cors.config.ts │ │ │ │ ├── env.config.ts │ │ │ │ ├── env.validators.ts │ │ │ │ └── index.ts │ │ │ ├── error-dto.ts │ │ │ ├── exception-filter.ts │ │ │ ├── instrument.ts │ │ │ ├── main.ts │ │ │ ├── newrelic.ts │ │ │ ├── types/ │ │ │ │ └── env.d.ts │ │ │ └── utils/ │ │ │ └── payload-sanitizer.ts │ │ ├── swagger-spec.json │ │ ├── swc-register.js │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── webpack.config.js │ ├── dashboard/ │ │ ├── .example.env │ │ ├── .gitignore │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── README.md │ │ ├── components.json │ │ ├── docker-entrypoint.sh │ │ ├── dockerfile │ │ ├── index.html │ │ ├── netlify.toml │ │ ├── package.json │ │ ├── playwright.config.ts │ │ ├── postcss.config.js │ │ ├── public/ │ │ │ └── manifest.json │ │ ├── src/ │ │ │ ├── api/ │ │ │ │ ├── activity.ts │ │ │ │ ├── ai.ts │ │ │ │ ├── api.client.ts │ │ │ │ ├── billing.ts │ │ │ │ ├── bridge.ts │ │ │ │ ├── contexts.ts │ │ │ │ ├── environment-variables.ts │ │ │ │ ├── environments.ts │ │ │ │ ├── integrations.ts │ │ │ │ ├── layouts.ts │ │ │ │ ├── logs.ts │ │ │ │ ├── organization.ts │ │ │ │ ├── partner-integrations.ts │ │ │ │ ├── step-resolvers.ts │ │ │ │ ├── steps.ts │ │ │ │ ├── subscribers.ts │ │ │ │ ├── telemetry.ts │ │ │ │ ├── topics.ts │ │ │ │ ├── translations.ts │ │ │ │ ├── webhooks.ts │ │ │ │ └── workflows.ts │ │ │ ├── components/ │ │ │ │ ├── activity/ │ │ │ │ │ ├── activity-detail-card.tsx │ │ │ │ │ ├── activity-empty-state.tsx │ │ │ │ │ ├── activity-error.tsx │ │ │ │ │ ├── activity-feed-content.tsx │ │ │ │ │ ├── activity-filters.tsx │ │ │ │ │ ├── activity-header.tsx │ │ │ │ │ ├── activity-job-item.tsx │ │ │ │ │ ├── activity-logs.tsx │ │ │ │ │ ├── activity-panel.tsx │ │ │ │ │ ├── activity-skeleton.tsx │ │ │ │ │ ├── activity-table.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── activity-overview.tsx │ │ │ │ │ │ ├── activity-table-row.tsx │ │ │ │ │ │ ├── overview-item.tsx │ │ │ │ │ │ ├── status-badge.tsx │ │ │ │ │ │ ├── status-preview-card.tsx │ │ │ │ │ │ └── step-indicators.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── execution-detail-item.tsx │ │ │ │ │ └── helpers.ts │ │ │ │ ├── ai-drawer/ │ │ │ │ │ ├── ai-drawer-provider.tsx │ │ │ │ │ ├── ai-drawer.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── use-ai-drawer.ts │ │ │ │ ├── ai-elements/ │ │ │ │ │ ├── chain-of-thought.tsx │ │ │ │ │ ├── conversation.tsx │ │ │ │ │ ├── message.tsx │ │ │ │ │ ├── prompt-input.tsx │ │ │ │ │ └── shimmer.tsx │ │ │ │ ├── ai-sidekick/ │ │ │ │ │ ├── ai-chat-context.tsx │ │ │ │ │ ├── assistant-message.tsx │ │ │ │ │ ├── chat-body.tsx │ │ │ │ │ ├── chat-chain-of-thought.tsx │ │ │ │ │ ├── chat-message-actions.tsx │ │ │ │ │ ├── chat-message-response.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message-utils.ts │ │ │ │ │ ├── novu-copilot-panel.tsx │ │ │ │ │ ├── sidekick-toast.tsx │ │ │ │ │ └── user-message.tsx │ │ │ │ ├── amount-input.tsx │ │ │ │ ├── analytics/ │ │ │ │ │ ├── charts/ │ │ │ │ │ │ ├── active-subscribers-tooltip.tsx │ │ │ │ │ │ ├── active-subscribers-trend-chart.tsx │ │ │ │ │ │ ├── chart-dummy-data.tsx │ │ │ │ │ │ ├── chart-empty-state.tsx │ │ │ │ │ │ ├── chart-types.ts │ │ │ │ │ │ ├── chart-wrapper.tsx │ │ │ │ │ │ ├── delivery-trends-chart.tsx │ │ │ │ │ │ ├── flickering-grid.tsx │ │ │ │ │ │ ├── interaction-trend-chart.tsx │ │ │ │ │ │ ├── providers-by-volume.tsx │ │ │ │ │ │ ├── workflow-runs-trend-chart.tsx │ │ │ │ │ │ └── workflows-by-volume.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── analytics-page-skeleton.tsx │ │ │ │ │ │ ├── analytics-section.tsx │ │ │ │ │ │ ├── analytics-upgrade-cta-icon.tsx │ │ │ │ │ │ ├── charts-section.tsx │ │ │ │ │ │ └── flickering-grid-placeholder.tsx │ │ │ │ │ ├── constants/ │ │ │ │ │ │ ├── analytics-page.consts.ts │ │ │ │ │ │ └── analytics-tooltips.ts │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ └── use-analytics-page-date-filter.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── chart-validation.ts │ │ │ │ ├── animated-outlet.tsx │ │ │ │ ├── auth/ │ │ │ │ │ ├── auth-card.tsx │ │ │ │ │ ├── auth-feature-row.tsx │ │ │ │ │ ├── auth-side-banner.tsx │ │ │ │ │ ├── create-organization.tsx │ │ │ │ │ ├── inbox-playground.tsx │ │ │ │ │ ├── inbox-preview-content.tsx │ │ │ │ │ ├── mobile-message.tsx │ │ │ │ │ ├── questionnaire-form.tsx │ │ │ │ │ ├── region-picker.tsx │ │ │ │ │ ├── shared.tsx │ │ │ │ │ ├── trusted-companies.tsx │ │ │ │ │ ├── usecase-selector.tsx │ │ │ │ │ └── usecases-list.utils.tsx │ │ │ │ ├── auth-layout.tsx │ │ │ │ ├── billing/ │ │ │ │ │ ├── active-plan-banner.tsx │ │ │ │ │ ├── contact-sales-button.tsx │ │ │ │ │ ├── features-config.ts │ │ │ │ │ ├── features.tsx │ │ │ │ │ ├── plan-action-button.tsx │ │ │ │ │ ├── plan-switcher.tsx │ │ │ │ │ ├── plan.tsx │ │ │ │ │ ├── plans-row.tsx │ │ │ │ │ └── utils/ │ │ │ │ │ └── action.button.constants.ts │ │ │ │ ├── command-palette/ │ │ │ │ │ ├── command-menu.tsx │ │ │ │ │ ├── command-palette-provider.tsx │ │ │ │ │ ├── command-palette.tsx │ │ │ │ │ ├── command-types.ts │ │ │ │ │ ├── commands/ │ │ │ │ │ │ ├── action-commands.tsx │ │ │ │ │ │ ├── environment-commands.tsx │ │ │ │ │ │ ├── help-commands.tsx │ │ │ │ │ │ ├── navigation-commands.tsx │ │ │ │ │ │ ├── settings-commands.tsx │ │ │ │ │ │ ├── subscriber-commands.tsx │ │ │ │ │ │ ├── workflow-commands.tsx │ │ │ │ │ │ └── workflow-editor-commands.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── use-command-palette.ts │ │ │ │ │ │ ├── use-command-registry.ts │ │ │ │ │ │ └── use-workflow-editor-context.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── conditions-editor/ │ │ │ │ │ ├── add-condition-action.tsx │ │ │ │ │ ├── add-group-action.tsx │ │ │ │ │ ├── combinator-selector.tsx │ │ │ │ │ ├── conditions-editor-context.tsx │ │ │ │ │ ├── conditions-editor.tsx │ │ │ │ │ ├── field-selector.tsx │ │ │ │ │ ├── field-type-editors.ts │ │ │ │ │ ├── field-type-operators.ts │ │ │ │ │ ├── help-icon.tsx │ │ │ │ │ ├── operator-selector.tsx │ │ │ │ │ ├── rule-actions.tsx │ │ │ │ │ ├── select-option-utils.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── value-editor.tsx │ │ │ │ │ └── variable-select.tsx │ │ │ │ ├── confirmation-modal.tsx │ │ │ │ ├── context-search-editor.tsx │ │ │ │ ├── contexts/ │ │ │ │ │ ├── context-activity.tsx │ │ │ │ │ ├── context-drawer.tsx │ │ │ │ │ ├── context-filter.tsx │ │ │ │ │ ├── context-list-blank.tsx │ │ │ │ │ ├── context-list.tsx │ │ │ │ │ ├── context-overview.tsx │ │ │ │ │ ├── context-row.tsx │ │ │ │ │ ├── contexts-filters.tsx │ │ │ │ │ ├── create-context-drawer.tsx │ │ │ │ │ ├── create-context-form.tsx │ │ │ │ │ ├── empty-contexts-illustration.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── use-contexts-navigate.ts │ │ │ │ │ │ └── use-contexts-url-state.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── create-workflow-modal.tsx │ │ │ │ ├── dashboard-layout.tsx │ │ │ │ ├── default-pagination.tsx │ │ │ │ ├── delete-resource-confirmation-dialog.tsx │ │ │ │ ├── delete-workflow-dialog.tsx │ │ │ │ ├── editor-overlays.tsx │ │ │ │ ├── email-editor-select.tsx │ │ │ │ ├── environments/ │ │ │ │ │ ├── create-environment-button.tsx │ │ │ │ │ ├── delete-environment-dialog.tsx │ │ │ │ │ ├── edit-environment-sheet.tsx │ │ │ │ │ ├── environment-form.tsx │ │ │ │ │ ├── environments-free-state.tsx │ │ │ │ │ └── environments-list.tsx │ │ │ │ ├── flag-circle.tsx │ │ │ │ ├── full-page-layout.tsx │ │ │ │ ├── header-navigation/ │ │ │ │ │ ├── customer-support-button.tsx │ │ │ │ │ ├── edit-bridge-url-button.tsx │ │ │ │ │ ├── header-button.tsx │ │ │ │ │ ├── header-navigation.tsx │ │ │ │ │ ├── layout-usage-indicator.tsx │ │ │ │ │ ├── no-changes-modal.tsx │ │ │ │ │ ├── publish-button.tsx │ │ │ │ │ ├── publish-modal.tsx │ │ │ │ │ ├── publish-success-modal.tsx │ │ │ │ │ ├── support-drawer-components.tsx │ │ │ │ │ ├── support-drawer-constants.ts │ │ │ │ │ ├── support-drawer.tsx │ │ │ │ │ └── workflow-hover-card.tsx │ │ │ │ ├── html-editor.tsx │ │ │ │ ├── http-logs/ │ │ │ │ │ ├── api-traces-content.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ └── use-workflow-runs-url-state.ts │ │ │ │ │ ├── http-status-badge.tsx │ │ │ │ │ ├── logs-detail-content.tsx │ │ │ │ │ ├── logs-detail-empty.tsx │ │ │ │ │ ├── logs-detail-error.tsx │ │ │ │ │ ├── logs-detail-header.tsx │ │ │ │ │ ├── logs-detail-panel.tsx │ │ │ │ │ ├── logs-detail-skeleton.tsx │ │ │ │ │ ├── logs-empty-state.tsx │ │ │ │ │ ├── logs-filters.tsx │ │ │ │ │ ├── logs-table-row.tsx │ │ │ │ │ ├── logs-table-skeleton-row.tsx │ │ │ │ │ ├── logs-table.tsx │ │ │ │ │ ├── method-badge.tsx │ │ │ │ │ ├── transaction-id-display.tsx │ │ │ │ │ ├── workflow-run-activity-drawer.tsx │ │ │ │ │ ├── workflow-runs-content.tsx │ │ │ │ │ └── workflow-runs-filters.tsx │ │ │ │ ├── icons/ │ │ │ │ │ ├── add-subscriber-illustration.tsx │ │ │ │ │ ├── api.tsx │ │ │ │ │ ├── arrow-right.tsx │ │ │ │ │ ├── bell.tsx │ │ │ │ │ ├── broom-sparkle.tsx │ │ │ │ │ ├── broom.tsx │ │ │ │ │ ├── cards-blocks.tsx │ │ │ │ │ ├── circle-check.tsx │ │ │ │ │ ├── code-2.tsx │ │ │ │ │ ├── delete.tsx │ │ │ │ │ ├── digest-variable-icon.tsx │ │ │ │ │ ├── email-footer-logo-with-text-stacked.tsx │ │ │ │ │ ├── email-footer-plain-text.tsx │ │ │ │ │ ├── email-footer.tsx │ │ │ │ │ ├── email-header-centered-logo-with-border.tsx │ │ │ │ │ ├── email-header-logo-with-cover-image.tsx │ │ │ │ │ ├── email-header-logo-with-text.tsx │ │ │ │ │ ├── email-header.tsx │ │ │ │ │ ├── enter-line.tsx │ │ │ │ │ ├── flags/ │ │ │ │ │ │ ├── eu.tsx │ │ │ │ │ │ └── us.tsx │ │ │ │ │ ├── horizontal-card-with-image.tsx │ │ │ │ │ ├── inbox-arrow-down.tsx │ │ │ │ │ ├── inbox-bell-filled-dev.tsx │ │ │ │ │ ├── inbox-bell-filled.tsx │ │ │ │ │ ├── inbox-bell.tsx │ │ │ │ │ ├── inbox-ellipsis.tsx │ │ │ │ │ ├── inbox-settings.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── information-card-with-logo.tsx │ │ │ │ │ ├── logo-circle.tsx │ │ │ │ │ ├── mail-3-fill.tsx │ │ │ │ │ ├── notification-5-fill.tsx │ │ │ │ │ ├── novu-icon.tsx │ │ │ │ │ ├── onboarding-arrow-left.tsx │ │ │ │ │ ├── paragraph-with-image.tsx │ │ │ │ │ ├── plug.tsx │ │ │ │ │ ├── preferences-blank-illustration.tsx │ │ │ │ │ ├── refresh.tsx │ │ │ │ │ ├── repeat-play.tsx │ │ │ │ │ ├── repeat-variable.tsx │ │ │ │ │ ├── route-fill.tsx │ │ │ │ │ ├── shield-zap.tsx │ │ │ │ │ ├── sms.tsx │ │ │ │ │ ├── sparkling.tsx │ │ │ │ │ ├── square-two-stack.tsx │ │ │ │ │ ├── stacked-dots.tsx │ │ │ │ │ ├── stacked-plus-line.tsx │ │ │ │ │ ├── target-arrow.tsx │ │ │ │ │ ├── translate-variable.tsx │ │ │ │ │ ├── translated-layout-icon.tsx │ │ │ │ │ ├── translated-workflow.tsx │ │ │ │ │ ├── trend-line-down.tsx │ │ │ │ │ ├── trend-line-up.tsx │ │ │ │ │ ├── utils.ts │ │ │ │ │ ├── version-control-dev.tsx │ │ │ │ │ ├── version-control-prod.tsx │ │ │ │ │ └── workflow-trigger-inbox.tsx │ │ │ │ ├── in-app-action-dropdown.tsx │ │ │ │ ├── inbox-button.tsx │ │ │ │ ├── integrations/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── channel-tabs.tsx │ │ │ │ │ │ ├── configuration-group.tsx │ │ │ │ │ │ ├── create-integration-sidebar.tsx │ │ │ │ │ │ ├── credential-section.tsx │ │ │ │ │ │ ├── cross-channel-configs-group.tsx │ │ │ │ │ │ ├── description-with-links.tsx │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ ├── use-integration-list.ts │ │ │ │ │ │ │ ├── use-integration-primary-modal.tsx │ │ │ │ │ │ │ └── use-sidebar-navigation-manager.ts │ │ │ │ │ │ ├── inbound-webhook-group.tsx │ │ │ │ │ │ ├── inbound-webhook-url.tsx │ │ │ │ │ │ ├── integration-card.tsx │ │ │ │ │ │ ├── integration-channel-group.tsx │ │ │ │ │ │ ├── integration-general-settings.tsx │ │ │ │ │ │ ├── integration-list-item.tsx │ │ │ │ │ │ ├── integration-settings.tsx │ │ │ │ │ │ ├── integration-sheet-header.tsx │ │ │ │ │ │ ├── integration-sheet.tsx │ │ │ │ │ │ ├── integrations-list.tsx │ │ │ │ │ │ ├── modals/ │ │ │ │ │ │ │ ├── delete-integration-modal.tsx │ │ │ │ │ │ │ └── select-primary-integration-modal.tsx │ │ │ │ │ │ ├── provider-icon.tsx │ │ │ │ │ │ ├── update-integration-sidebar.tsx │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── handle-integration-error.ts │ │ │ │ │ │ └── helpers.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── channels.ts │ │ │ │ ├── issues-panel.tsx │ │ │ │ ├── layouts/ │ │ │ │ │ ├── component-utils.tsx │ │ │ │ │ ├── create-layout-btn.tsx │ │ │ │ │ ├── create-layout-form.tsx │ │ │ │ │ ├── delete-layout-dialog.tsx │ │ │ │ │ ├── empty-layouts-illustration.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ └── use-layouts-url-state.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── layout-breadcrumbs.tsx │ │ │ │ │ ├── layout-control-input.tsx │ │ │ │ │ ├── layout-editor-factory.tsx │ │ │ │ │ ├── layout-editor-provider.tsx │ │ │ │ │ ├── layout-editor-settings-drawer.tsx │ │ │ │ │ ├── layout-editor-skeleton.tsx │ │ │ │ │ ├── layout-editor.tsx │ │ │ │ │ ├── layout-email-body.tsx │ │ │ │ │ ├── layout-email-editor.tsx │ │ │ │ │ ├── layout-list-blank.tsx │ │ │ │ │ ├── layout-list.tsx │ │ │ │ │ ├── layout-preview-context-panel.tsx │ │ │ │ │ ├── layout-preview-factory.tsx │ │ │ │ │ ├── layout-row.tsx │ │ │ │ │ ├── layouts-filters.tsx │ │ │ │ │ ├── layouts-list-upgrade-cta.tsx │ │ │ │ │ └── schema.ts │ │ │ │ ├── list-no-results.tsx │ │ │ │ ├── maily/ │ │ │ │ │ ├── blocks/ │ │ │ │ │ │ ├── block-custom-preview.tsx │ │ │ │ │ │ ├── cards.tsx │ │ │ │ │ │ ├── digest.tsx │ │ │ │ │ │ ├── footers.tsx │ │ │ │ │ │ ├── headers.tsx │ │ │ │ │ │ └── html.tsx │ │ │ │ │ ├── maily-config.tsx │ │ │ │ │ ├── maily-utils.ts │ │ │ │ │ ├── maily.tsx │ │ │ │ │ ├── repeat-block-aliases.ts │ │ │ │ │ ├── repeat-menu-description.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── variables.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── for-view.tsx │ │ │ │ │ ├── html-view.tsx │ │ │ │ │ ├── maily-variables-list-view.tsx │ │ │ │ │ └── variable-view.tsx │ │ │ │ ├── mobile-desktop-prompt.tsx │ │ │ │ ├── onboarding/ │ │ │ │ │ ├── animated-page.tsx │ │ │ │ │ └── stepper.tsx │ │ │ │ ├── page-meta.tsx │ │ │ │ ├── pause-workflow-dialog.tsx │ │ │ │ ├── preview-context-section.tsx │ │ │ │ ├── preview-env-section.tsx │ │ │ │ ├── preview-subscriber-section.tsx │ │ │ │ ├── primitives/ │ │ │ │ │ ├── accordion.tsx │ │ │ │ │ ├── analytics-card.tsx │ │ │ │ │ ├── animated-number.tsx │ │ │ │ │ ├── autocomplete.tsx │ │ │ │ │ ├── avatar.tsx │ │ │ │ │ ├── badge.tsx │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ ├── button-compact.tsx │ │ │ │ │ ├── button-group.tsx │ │ │ │ │ ├── button-link.tsx │ │ │ │ │ ├── button.tsx │ │ │ │ │ ├── card.tsx │ │ │ │ │ ├── chart.tsx │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ ├── code-block.tsx │ │ │ │ │ ├── collapsible.tsx │ │ │ │ │ ├── color-picker.tsx │ │ │ │ │ ├── command.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── container.tsx │ │ │ │ │ ├── copy-button.tsx │ │ │ │ │ ├── copy-to-clipboard.tsx │ │ │ │ │ ├── dialog.tsx │ │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ │ ├── editor.tsx │ │ │ │ │ ├── environment-branch-icon.tsx │ │ │ │ │ ├── form/ │ │ │ │ │ │ ├── avatar-picker.tsx │ │ │ │ │ │ ├── faceted-filter/ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── base-filter-content.tsx │ │ │ │ │ │ │ │ ├── clear-button.tsx │ │ │ │ │ │ │ │ ├── filter-badge.tsx │ │ │ │ │ │ │ │ ├── filter-input.tsx │ │ │ │ │ │ │ │ ├── multi-filter-content.tsx │ │ │ │ │ │ │ │ ├── single-filter-content.tsx │ │ │ │ │ │ │ │ └── text-filter-content.tsx │ │ │ │ │ │ │ ├── facated-form-filter.tsx │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ └── use-keyboard-navigation.ts │ │ │ │ │ │ │ ├── styles.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── form-context.ts │ │ │ │ │ │ └── form.tsx │ │ │ │ │ ├── help-tooltip-indicator.tsx │ │ │ │ │ ├── hint.tsx │ │ │ │ │ ├── hover-card.tsx │ │ │ │ │ ├── inline-toast.tsx │ │ │ │ │ ├── input-group.tsx │ │ │ │ │ ├── input.tsx │ │ │ │ │ ├── kbd.tsx │ │ │ │ │ ├── label.tsx │ │ │ │ │ ├── loading-indicator.tsx │ │ │ │ │ ├── locale-select.tsx │ │ │ │ │ ├── multi-select.tsx │ │ │ │ │ ├── pagination.tsx │ │ │ │ │ ├── panel.tsx │ │ │ │ │ ├── permission-button.tsx │ │ │ │ │ ├── permission-switch.tsx │ │ │ │ │ ├── phone-input.tsx │ │ │ │ │ ├── popover.tsx │ │ │ │ │ ├── progress.tsx │ │ │ │ │ ├── radio-group.tsx │ │ │ │ │ ├── resizable.tsx │ │ │ │ │ ├── scroll-area.tsx │ │ │ │ │ ├── secret-input.tsx │ │ │ │ │ ├── segmented-control.tsx │ │ │ │ │ ├── select.tsx │ │ │ │ │ ├── separator.tsx │ │ │ │ │ ├── sheet.tsx │ │ │ │ │ ├── skeleton.tsx │ │ │ │ │ ├── sonner-helpers.tsx │ │ │ │ │ ├── sonner.tsx │ │ │ │ │ ├── status-badge.tsx │ │ │ │ │ ├── step.tsx │ │ │ │ │ ├── switch.tsx │ │ │ │ │ ├── table-pagination-footer.tsx │ │ │ │ │ ├── table.tsx │ │ │ │ │ ├── tabs.tsx │ │ │ │ │ ├── tag-input.tsx │ │ │ │ │ ├── tag.tsx │ │ │ │ │ ├── text-separator.tsx │ │ │ │ │ ├── textarea.tsx │ │ │ │ │ ├── timeline.tsx │ │ │ │ │ ├── toggle-group.tsx │ │ │ │ │ ├── toggle.tsx │ │ │ │ │ ├── tooltip.tsx │ │ │ │ │ ├── translation-plugin/ │ │ │ │ │ │ ├── autocomplete.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── pill-widget.ts │ │ │ │ │ │ ├── plugin-view.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── variable-editor.tsx │ │ │ │ │ ├── variable-plugin/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── plugin-view.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ ├── utils.ts │ │ │ │ │ │ ├── variable-pill-widget.ts │ │ │ │ │ │ └── variable-theme.ts │ │ │ │ │ └── visually-hidden.tsx │ │ │ │ ├── promotional/ │ │ │ │ │ └── coming-soon-banner.tsx │ │ │ │ ├── protected-drawer.tsx │ │ │ │ ├── regenerate-api-keys-dialog.tsx │ │ │ │ ├── schema-editor/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── array-section.tsx │ │ │ │ │ │ ├── enum-section.tsx │ │ │ │ │ │ ├── object-section.tsx │ │ │ │ │ │ ├── property-actions.tsx │ │ │ │ │ │ ├── property-name-input.tsx │ │ │ │ │ │ └── property-type-selector.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── use-property-paths.ts │ │ │ │ │ │ └── use-schema-property-type.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── json-schema.ts │ │ │ │ │ ├── schema-editor.tsx │ │ │ │ │ ├── schema-property-row.tsx │ │ │ │ │ ├── schema-property-settings-popover.tsx │ │ │ │ │ ├── types/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── schema-form.types.ts │ │ │ │ │ ├── use-schema-form.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── check-variable-usage.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── json-helpers.ts │ │ │ │ │ ├── property-manager.ts │ │ │ │ │ ├── schema-change-detection.ts │ │ │ │ │ ├── schema-converter.ts │ │ │ │ │ ├── ui-helpers.ts │ │ │ │ │ └── validation-schema.ts │ │ │ │ ├── settings/ │ │ │ │ │ ├── novu-branding-switch.tsx │ │ │ │ │ └── organization-settings.tsx │ │ │ │ ├── shared/ │ │ │ │ │ └── external-link.tsx │ │ │ │ ├── side-navigation/ │ │ │ │ │ ├── changelog-cards.tsx │ │ │ │ │ ├── environment-dropdown.tsx │ │ │ │ │ ├── free-trial-card.tsx │ │ │ │ │ ├── getting-started-menu-item.tsx │ │ │ │ │ ├── mobile-side-navigation.tsx │ │ │ │ │ ├── navigation-link.tsx │ │ │ │ │ ├── organization-dropdown-clerk.tsx │ │ │ │ │ ├── organization-dropdown.tsx │ │ │ │ │ ├── side-navigation.tsx │ │ │ │ │ ├── sidebar.tsx │ │ │ │ │ └── usage-card.tsx │ │ │ │ ├── step-preview-hover-card.tsx │ │ │ │ ├── subscribers/ │ │ │ │ │ ├── create-subscriber-form.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── use-delete-subscription.ts │ │ │ │ │ │ ├── use-get-subscription.ts │ │ │ │ │ │ ├── use-subscriber-search.ts │ │ │ │ │ │ ├── use-subscribers-navigate.ts │ │ │ │ │ │ └── use-subscribers-url-state.ts │ │ │ │ │ ├── preferences/ │ │ │ │ │ │ ├── day-schedule-copy.tsx │ │ │ │ │ │ ├── preferences-blank.tsx │ │ │ │ │ │ ├── preferences-item.tsx │ │ │ │ │ │ ├── preferences-skeleton.tsx │ │ │ │ │ │ ├── preferences.tsx │ │ │ │ │ │ ├── schedule-table.tsx │ │ │ │ │ │ ├── subscribers-schedule.tsx │ │ │ │ │ │ ├── utils.ts │ │ │ │ │ │ └── workflow-preferences.tsx │ │ │ │ │ ├── schema.ts │ │ │ │ │ ├── subscriber-activity-drawer.tsx │ │ │ │ │ ├── subscriber-activity-list.tsx │ │ │ │ │ ├── subscriber-activity.tsx │ │ │ │ │ ├── subscriber-autocomplete.tsx │ │ │ │ │ ├── subscriber-drawer.tsx │ │ │ │ │ ├── subscriber-list-blank.tsx │ │ │ │ │ ├── subscriber-list.tsx │ │ │ │ │ ├── subscriber-overview-form.tsx │ │ │ │ │ ├── subscriber-overview-skeleton.tsx │ │ │ │ │ ├── subscriber-row.tsx │ │ │ │ │ ├── subscriber-tabs.tsx │ │ │ │ │ ├── subscribers-filters.tsx │ │ │ │ │ ├── subscriptions/ │ │ │ │ │ │ ├── subscriber-subscriptions.tsx │ │ │ │ │ │ ├── subscription-item.tsx │ │ │ │ │ │ ├── subscription-preference-rule.tsx │ │ │ │ │ │ ├── subscription-preferences-drawer.tsx │ │ │ │ │ │ ├── subscription-preferences.tsx │ │ │ │ │ │ └── subscriptions-empty-state.tsx │ │ │ │ │ ├── timezone-select.tsx │ │ │ │ │ └── utils.ts │ │ │ │ ├── success-button-toast.tsx │ │ │ │ ├── template-store/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── workflow-results.tsx │ │ │ │ │ ├── featured.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── workflow-card.tsx │ │ │ │ │ ├── workflow-sidebar.tsx │ │ │ │ │ └── workflow-template-modal.tsx │ │ │ │ ├── time-display-hover-card.tsx │ │ │ │ ├── topics/ │ │ │ │ │ ├── add-subscriber-form.tsx │ │ │ │ │ ├── create-topic-drawer.tsx │ │ │ │ │ ├── create-topic-form.tsx │ │ │ │ │ ├── empty-topics-illustration.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── use-delete-topic.ts │ │ │ │ │ │ ├── use-topic-subscribers.ts │ │ │ │ │ │ ├── use-topic.ts │ │ │ │ │ │ ├── use-topics-navigate.ts │ │ │ │ │ │ └── use-topics-url-state.ts │ │ │ │ │ ├── subscription-count-badge.tsx │ │ │ │ │ ├── topic-activity.tsx │ │ │ │ │ ├── topic-drawer.tsx │ │ │ │ │ ├── topic-list-blank.tsx │ │ │ │ │ ├── topic-list.tsx │ │ │ │ │ ├── topic-overview-form.tsx │ │ │ │ │ ├── topic-row.tsx │ │ │ │ │ ├── topic-subscriber-filter.tsx │ │ │ │ │ ├── topic-subscriber-item.tsx │ │ │ │ │ ├── topics-filters.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── translations/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── delete-translation-modal.tsx │ │ │ │ │ ├── empty-translations-illustration.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── use-delete-translation-modal.ts │ │ │ │ │ │ ├── use-translation-list-logic.ts │ │ │ │ │ │ └── use-translations-url-state.tsx │ │ │ │ │ ├── translation-drawer/ │ │ │ │ │ │ ├── editor-actions.tsx │ │ │ │ │ │ ├── editor-panel.tsx │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── use-translation-editor.ts │ │ │ │ │ │ │ └── use-translation-file-operations.ts │ │ │ │ │ │ ├── locale-list.tsx │ │ │ │ │ │ ├── translation-drawer-content.tsx │ │ │ │ │ │ ├── translation-drawer.tsx │ │ │ │ │ │ ├── translation-header.tsx │ │ │ │ │ │ └── use-translation-drawer-logic.tsx │ │ │ │ │ ├── translation-import-trigger.tsx │ │ │ │ │ ├── translation-list-upgrade-cta.tsx │ │ │ │ │ ├── translation-list.tsx │ │ │ │ │ ├── translation-onboarding-page.tsx │ │ │ │ │ ├── translation-row.tsx │ │ │ │ │ ├── translation-settings-drawer.tsx │ │ │ │ │ ├── translation-status.tsx │ │ │ │ │ ├── translation-switch.tsx │ │ │ │ │ ├── translations-filters.tsx │ │ │ │ │ └── utils.ts │ │ │ │ ├── truncated-text.tsx │ │ │ │ ├── unsaved-changes-alert-dialog.tsx │ │ │ │ ├── updated-ago.tsx │ │ │ │ ├── upgrade-cta-tooltip.tsx │ │ │ │ ├── usecase-playground-header.tsx │ │ │ │ ├── user-profile.tsx │ │ │ │ ├── variable/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── digest-count-summary-preview.tsx │ │ │ │ │ │ ├── digest-sentence-summary-preview.tsx │ │ │ │ │ │ ├── filter-item.tsx │ │ │ │ │ │ ├── new-variable-preview.tsx │ │ │ │ │ │ ├── reorder-filter-item.tsx │ │ │ │ │ │ ├── reorder-filters-group.tsx │ │ │ │ │ │ ├── variable-icon.tsx │ │ │ │ │ │ └── variable-preview.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── edit-variable-popover.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── use-create-variable.tsx │ │ │ │ │ │ ├── use-filter-manager.ts │ │ │ │ │ │ ├── use-suggested-filters.ts │ │ │ │ │ │ ├── use-variable-parser.ts │ │ │ │ │ │ └── use-variable-validation.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils/ │ │ │ │ │ │ ├── digest-variables.tsx │ │ │ │ │ │ └── get-variable-error-message.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ ├── variable-list.tsx │ │ │ │ │ ├── variable-pill.tsx │ │ │ │ │ └── variable-tooltip.tsx │ │ │ │ ├── variables/ │ │ │ │ │ ├── delete-variable-dialog.tsx │ │ │ │ │ ├── system-variable-definitions.ts │ │ │ │ │ ├── system-variable-row.tsx │ │ │ │ │ ├── upsert-variable-drawer.tsx │ │ │ │ │ ├── upsert-variable-form.tsx │ │ │ │ │ ├── variable-list-upgrade-cta.tsx │ │ │ │ │ ├── variable-list.tsx │ │ │ │ │ └── variable-row.tsx │ │ │ │ ├── vercel-integration-form.tsx │ │ │ │ ├── webhooks/ │ │ │ │ │ ├── webhooks-empty-state-svg.tsx │ │ │ │ │ └── webhooks-paywall-state.tsx │ │ │ │ ├── welcome/ │ │ │ │ │ ├── ai-prompts/ │ │ │ │ │ │ ├── framework-prompts/ │ │ │ │ │ │ │ ├── angular-prompt.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── javascript-prompt.ts │ │ │ │ │ │ │ ├── nextjs-prompt.ts │ │ │ │ │ │ │ ├── react-native-prompt.ts │ │ │ │ │ │ │ ├── react-prompt.ts │ │ │ │ │ │ │ ├── remix-prompt.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── vue-prompt.ts │ │ │ │ │ │ └── simple-prompt-getter.ts │ │ │ │ │ ├── framework-guides.instructions.tsx │ │ │ │ │ ├── framework-guides.tsx │ │ │ │ │ ├── icons.tsx │ │ │ │ │ ├── inbox-connected-guide.tsx │ │ │ │ │ ├── inbox-embed.tsx │ │ │ │ │ ├── inbox-framework-guide/ │ │ │ │ │ │ ├── framework-card.tsx │ │ │ │ │ │ ├── framework-grid.tsx │ │ │ │ │ │ ├── header-section.tsx │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ ├── instructions-panel.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── inbox-framework-guide.tsx │ │ │ │ │ ├── progress-section.animations.ts │ │ │ │ │ ├── progress-section.tsx │ │ │ │ │ └── resources-list.tsx │ │ │ │ ├── workflow-editor/ │ │ │ │ │ ├── add-step-menu.tsx │ │ │ │ │ ├── animation-step-wrapper.tsx │ │ │ │ │ ├── base-node.tsx │ │ │ │ │ ├── channel-preferences-form.tsx │ │ │ │ │ ├── channel-preferences.tsx │ │ │ │ │ ├── condition-badge.tsx │ │ │ │ │ ├── configure-workflow-form.tsx │ │ │ │ │ ├── configure-workflow.tsx │ │ │ │ │ ├── control-input/ │ │ │ │ │ │ ├── control-input.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── create-workflow-form.tsx │ │ │ │ │ ├── drag-context.tsx │ │ │ │ │ ├── edges.tsx │ │ │ │ │ ├── editor-breadcrumbs.tsx │ │ │ │ │ ├── in-app-preview.tsx │ │ │ │ │ ├── node-utils.ts │ │ │ │ │ ├── nodes.tsx │ │ │ │ │ ├── payload-schema/ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── payload-import-editor.tsx │ │ │ │ │ │ │ └── payload-schema-empty-state.tsx │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── use-import-schema.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── generate-schema.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── payload-schema-drawer.tsx │ │ │ │ │ ├── saving-status-indicator.tsx │ │ │ │ │ ├── schema-change-confirmation-modal.tsx │ │ │ │ │ ├── schema.ts │ │ │ │ │ ├── severity-select-item.tsx │ │ │ │ │ ├── step-utils.ts │ │ │ │ │ ├── steps/ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ ├── base-body.tsx │ │ │ │ │ │ │ ├── base-subject.tsx │ │ │ │ │ │ │ └── data-object.tsx │ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ │ ├── chat-editor.tsx │ │ │ │ │ │ │ ├── chat-preview.tsx │ │ │ │ │ │ │ └── configure-chat-step-preview.tsx │ │ │ │ │ │ ├── component-utils.tsx │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── preview-payload-section.tsx │ │ │ │ │ │ │ └── preview-step-results-section.tsx │ │ │ │ │ │ ├── conditions/ │ │ │ │ │ │ │ ├── edit-step-conditions-form.tsx │ │ │ │ │ │ │ ├── edit-step-conditions-layout.tsx │ │ │ │ │ │ │ ├── edit-step-conditions-skeleton.tsx │ │ │ │ │ │ │ └── edit-step-conditions.tsx │ │ │ │ │ │ ├── configure-step-form.tsx │ │ │ │ │ │ ├── configure-step-template-issue-cta.tsx │ │ │ │ │ │ ├── configure-step.tsx │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ └── preview-context.constants.ts │ │ │ │ │ │ ├── context/ │ │ │ │ │ │ │ ├── preview-context-container.tsx │ │ │ │ │ │ │ └── step-editor-context.tsx │ │ │ │ │ │ ├── controls/ │ │ │ │ │ │ │ ├── array-field-item-template.tsx │ │ │ │ │ │ │ ├── array-field-template.tsx │ │ │ │ │ │ │ ├── array-field-title-template.tsx │ │ │ │ │ │ │ ├── button-templates.tsx │ │ │ │ │ │ │ ├── custom-step-controls.tsx │ │ │ │ │ │ │ ├── json-form.tsx │ │ │ │ │ │ │ ├── object-field-template.tsx │ │ │ │ │ │ │ ├── select-widget.tsx │ │ │ │ │ │ │ ├── switch-widget.tsx │ │ │ │ │ │ │ ├── template-utils.tsx │ │ │ │ │ │ │ └── text-widget.tsx │ │ │ │ │ │ ├── delay/ │ │ │ │ │ │ │ ├── delay-control-values.tsx │ │ │ │ │ │ │ ├── delay-window.tsx │ │ │ │ │ │ │ ├── dynamic-delay.tsx │ │ │ │ │ │ │ └── fixed-delay.tsx │ │ │ │ │ │ ├── digest-delay-tabs/ │ │ │ │ │ │ │ ├── days-of-week.tsx │ │ │ │ │ │ │ ├── digest-control-values.tsx │ │ │ │ │ │ │ ├── digest-delay-tabs.tsx │ │ │ │ │ │ │ ├── digest-key.tsx │ │ │ │ │ │ │ ├── keys.ts │ │ │ │ │ │ │ ├── lookback-window.tsx │ │ │ │ │ │ │ ├── numbers-picker.tsx │ │ │ │ │ │ │ ├── period.tsx │ │ │ │ │ │ │ ├── regular-type.tsx │ │ │ │ │ │ │ ├── scheduled-type.tsx │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── editor/ │ │ │ │ │ │ │ └── step-editor-factory.tsx │ │ │ │ │ │ ├── email/ │ │ │ │ │ │ │ ├── configure-email-step-preview.tsx │ │ │ │ │ │ │ ├── email-body-html.tsx │ │ │ │ │ │ │ ├── email-body-maily.tsx │ │ │ │ │ │ │ ├── email-body.tsx │ │ │ │ │ │ │ ├── email-editor.tsx │ │ │ │ │ │ │ ├── email-preview.tsx │ │ │ │ │ │ │ ├── email-subject.tsx │ │ │ │ │ │ │ ├── email-tabs-section.tsx │ │ │ │ │ │ │ ├── layout-select.tsx │ │ │ │ │ │ │ ├── novu-branding.tsx │ │ │ │ │ │ │ ├── sender-config-drawer.tsx │ │ │ │ │ │ │ └── translations/ │ │ │ │ │ │ │ ├── edit-translation-popover/ │ │ │ │ │ │ │ │ ├── edit-translation-popover.tsx │ │ │ │ │ │ │ │ ├── use-translation-editor.ts │ │ │ │ │ │ │ │ ├── use-translation-form.ts │ │ │ │ │ │ │ │ └── use-virtual-anchor.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── new-translation-key-preview.tsx │ │ │ │ │ │ │ ├── translation-decorator.tsx │ │ │ │ │ │ │ ├── translation-pill.tsx │ │ │ │ │ │ │ ├── translation-suggestions-list-view.tsx │ │ │ │ │ │ │ └── translation-tooltip.tsx │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ ├── use-persisted-preview-context.ts │ │ │ │ │ │ │ └── use-preview-data-initialization.ts │ │ │ │ │ │ ├── http-request/ │ │ │ │ │ │ │ ├── configure-http-request-step-preview.tsx │ │ │ │ │ │ │ ├── continue-on-failure.tsx │ │ │ │ │ │ │ ├── curl-display.tsx │ │ │ │ │ │ │ ├── curl-utils.ts │ │ │ │ │ │ │ ├── enforce-schema-validation.tsx │ │ │ │ │ │ │ ├── http-request-console-preview.tsx │ │ │ │ │ │ │ ├── http-request-editor.tsx │ │ │ │ │ │ │ ├── http-request-test-context.ts │ │ │ │ │ │ │ ├── http-request-test-provider.tsx │ │ │ │ │ │ │ ├── key-value-pair-list.tsx │ │ │ │ │ │ │ ├── novu-signature-header.tsx │ │ │ │ │ │ │ ├── request-endpoint.tsx │ │ │ │ │ │ │ ├── response-body-schema.tsx │ │ │ │ │ │ │ ├── section-header.tsx │ │ │ │ │ │ │ ├── use-copy-prompt.tsx │ │ │ │ │ │ │ └── use-http-request-test.ts │ │ │ │ │ │ ├── in-app/ │ │ │ │ │ │ │ ├── configure-in-app-step-preview.tsx │ │ │ │ │ │ │ ├── in-app-action.tsx │ │ │ │ │ │ │ ├── in-app-avatar.tsx │ │ │ │ │ │ │ ├── in-app-body.tsx │ │ │ │ │ │ │ ├── in-app-editor.tsx │ │ │ │ │ │ │ ├── in-app-redirect.tsx │ │ │ │ │ │ │ ├── in-app-subject.tsx │ │ │ │ │ │ │ ├── in-app-tabs-section.tsx │ │ │ │ │ │ │ └── inbox-preview.tsx │ │ │ │ │ │ ├── layout/ │ │ │ │ │ │ │ ├── copilot-sidebar.tsx │ │ │ │ │ │ │ ├── panel-header.tsx │ │ │ │ │ │ │ └── resizable-layout.tsx │ │ │ │ │ │ ├── preview/ │ │ │ │ │ │ │ ├── previews/ │ │ │ │ │ │ │ │ └── email-preview-wrapper.tsx │ │ │ │ │ │ │ ├── step-preview-factory.tsx │ │ │ │ │ │ │ └── step-resolver-preview-error.tsx │ │ │ │ │ │ ├── preview-context-panel.tsx │ │ │ │ │ │ ├── push/ │ │ │ │ │ │ │ ├── configure-push-step-preview.tsx │ │ │ │ │ │ │ ├── push-editor.tsx │ │ │ │ │ │ │ └── push-preview.tsx │ │ │ │ │ │ ├── save-form-context.ts │ │ │ │ │ │ ├── sdk-banner.tsx │ │ │ │ │ │ ├── shared/ │ │ │ │ │ │ │ ├── bypass-sanitization-switch.tsx │ │ │ │ │ │ │ ├── editable-json-viewer/ │ │ │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ │ │ ├── custom-text-editor.tsx │ │ │ │ │ │ │ │ ├── editable-json-viewer.tsx │ │ │ │ │ │ │ │ ├── icons.tsx │ │ │ │ │ │ │ │ ├── single-click-editable-value.tsx │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── use-hide-root-node.ts │ │ │ │ │ │ │ ├── extend-to-schedule.tsx │ │ │ │ │ │ │ ├── step-editor-mode-toggle.tsx │ │ │ │ │ │ │ ├── step-resolver-active-panel.tsx │ │ │ │ │ │ │ ├── step-resolver-empty-preview.tsx │ │ │ │ │ │ │ ├── step-resolver-not-published.tsx │ │ │ │ │ │ │ └── use-step-resolver-hint.tsx │ │ │ │ │ │ ├── skip-conditions-button.tsx │ │ │ │ │ │ ├── sms/ │ │ │ │ │ │ │ ├── configure-sms-step-preview.tsx │ │ │ │ │ │ │ ├── sms-editor.tsx │ │ │ │ │ │ │ ├── sms-phone.tsx │ │ │ │ │ │ │ └── sms-preview.tsx │ │ │ │ │ │ ├── step-drawer.tsx │ │ │ │ │ │ ├── step-editor-layout.tsx │ │ │ │ │ │ ├── step-editor-unavailable.tsx │ │ │ │ │ │ ├── tabs-section.tsx │ │ │ │ │ │ ├── throttle/ │ │ │ │ │ │ │ ├── dynamic-throttle.tsx │ │ │ │ │ │ │ ├── fixed-throttle.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── throttle-control-values.tsx │ │ │ │ │ │ │ ├── throttle-editor.tsx │ │ │ │ │ │ │ ├── throttle-key.tsx │ │ │ │ │ │ │ ├── throttle-threshold.tsx │ │ │ │ │ │ │ └── throttle-window.tsx │ │ │ │ │ │ ├── time-units.ts │ │ │ │ │ │ ├── types/ │ │ │ │ │ │ │ └── preview-context.types.ts │ │ │ │ │ │ ├── use-editor-preview.tsx │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── digest-sync.utils.ts │ │ │ │ │ │ ├── preview-context-storage.utils.ts │ │ │ │ │ │ ├── preview-context.utils.ts │ │ │ │ │ │ └── step-utils.tsx │ │ │ │ │ ├── test-workflow/ │ │ │ │ │ │ ├── snippet-editor.tsx │ │ │ │ │ │ ├── test-workflow-activity-drawer.tsx │ │ │ │ │ │ ├── test-workflow-content.tsx │ │ │ │ │ │ ├── test-workflow-drawer.tsx │ │ │ │ │ │ ├── test-workflow-form.tsx │ │ │ │ │ │ ├── test-workflow-instructions.tsx │ │ │ │ │ │ ├── test-workflow-logs-sidebar.tsx │ │ │ │ │ │ ├── test-workflow-tabs.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── toasts.tsx │ │ │ │ │ ├── translation-status.tsx │ │ │ │ │ ├── translation-toggle-section.tsx │ │ │ │ │ ├── url-input.tsx │ │ │ │ │ ├── use-animated-nodes.ts │ │ │ │ │ ├── use-canvas-nodes-edges.ts │ │ │ │ │ ├── use-workflow-schema-manager.ts │ │ │ │ │ ├── workflow-activity.tsx │ │ │ │ │ ├── workflow-canvas.tsx │ │ │ │ │ ├── workflow-checklist.tsx │ │ │ │ │ ├── workflow-node-action-bar.tsx │ │ │ │ │ ├── workflow-provider.tsx │ │ │ │ │ ├── workflow-schema-provider.tsx │ │ │ │ │ └── workflow-tabs.tsx │ │ │ │ ├── workflow-issues-popover.tsx │ │ │ │ ├── workflow-list-empty.tsx │ │ │ │ ├── workflow-list.tsx │ │ │ │ ├── workflow-row.tsx │ │ │ │ ├── workflow-status.tsx │ │ │ │ ├── workflow-step.tsx │ │ │ │ ├── workflow-steps.tsx │ │ │ │ └── workflow-tags.tsx │ │ │ ├── config/ │ │ │ │ └── index.ts │ │ │ ├── context/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── auth-context.tsx │ │ │ │ │ ├── auth-provider.tsx │ │ │ │ │ ├── hooks.ts │ │ │ │ │ ├── mappers.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── customer-io/ │ │ │ │ │ ├── customer-io-provider.tsx │ │ │ │ │ ├── hooks.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── ee-auth-provider.tsx │ │ │ │ ├── environment/ │ │ │ │ │ ├── environment-context.tsx │ │ │ │ │ ├── environment-provider.tsx │ │ │ │ │ └── hooks.ts │ │ │ │ ├── escape-key-manager/ │ │ │ │ │ ├── escape-key-context.tsx │ │ │ │ │ ├── escape-key-manager.tsx │ │ │ │ │ ├── hooks.ts │ │ │ │ │ └── priority.ts │ │ │ │ ├── feature-flags-provider.tsx │ │ │ │ ├── identity-provider.tsx │ │ │ │ ├── opt-in-provider.tsx │ │ │ │ ├── region/ │ │ │ │ │ ├── index.self-hosted.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── region-config.ts │ │ │ │ │ ├── region-context.self-hosted.tsx │ │ │ │ │ ├── region-context.tsx │ │ │ │ │ ├── region-modals.tsx │ │ │ │ │ ├── region-selector.tsx │ │ │ │ │ ├── region-types.ts │ │ │ │ │ └── region-utils.ts │ │ │ │ └── segment/ │ │ │ │ ├── hooks.ts │ │ │ │ ├── index.ts │ │ │ │ └── segment-provider.tsx │ │ │ ├── hooks/ │ │ │ │ ├── use-activity-url-state.ts │ │ │ │ ├── use-ai-chat-stream.ts │ │ │ │ ├── use-auto-configure-integration.ts │ │ │ │ ├── use-before-unload.ts │ │ │ │ ├── use-billing-portal.ts │ │ │ │ ├── use-checkout-session.ts │ │ │ │ ├── use-combined-refs.ts │ │ │ │ ├── use-conditions-count.ts │ │ │ │ ├── use-create-ai-chat.ts │ │ │ │ ├── use-create-context.ts │ │ │ │ ├── use-create-environment-variable.ts │ │ │ │ ├── use-create-integration.ts │ │ │ │ ├── use-create-layout.ts │ │ │ │ ├── use-create-subscriber.ts │ │ │ │ ├── use-create-topic.ts │ │ │ │ ├── use-create-translation-key.ts │ │ │ │ ├── use-create-vercel-integration.ts │ │ │ │ ├── use-create-workflow.ts │ │ │ │ ├── use-data-ref.ts │ │ │ │ ├── use-debounce.ts │ │ │ │ ├── use-debounced-form.ts │ │ │ │ ├── use-debounced-value.ts │ │ │ │ ├── use-default-subscriber-data.ts │ │ │ │ ├── use-delayed-loading.ts │ │ │ │ ├── use-delete-context.ts │ │ │ │ ├── use-delete-environment-variable.ts │ │ │ │ ├── use-delete-integration.ts │ │ │ │ ├── use-delete-layout.ts │ │ │ │ ├── use-delete-subscriber.ts │ │ │ │ ├── use-delete-translation-group.ts │ │ │ │ ├── use-delete-workflow.ts │ │ │ │ ├── use-disconnect-step-resolver.ts │ │ │ │ ├── use-duplicate-layout.ts │ │ │ │ ├── use-duplicate-workflow.ts │ │ │ │ ├── use-dynamic-preview-schema.ts │ │ │ │ ├── use-editor-translation-overlay.ts │ │ │ │ ├── use-enhanced-variable-validation.ts │ │ │ │ ├── use-environments.ts │ │ │ │ ├── use-export-master-json.ts │ │ │ │ ├── use-feature-flag.tsx │ │ │ │ ├── use-fetch-activities.ts │ │ │ │ ├── use-fetch-activity.ts │ │ │ │ ├── use-fetch-api-keys.ts │ │ │ │ ├── use-fetch-bridge-health-check.ts │ │ │ │ ├── use-fetch-charts.ts │ │ │ │ ├── use-fetch-context.ts │ │ │ │ ├── use-fetch-contexts.ts │ │ │ │ ├── use-fetch-environment-variable-usage.ts │ │ │ │ ├── use-fetch-environment-variables.ts │ │ │ │ ├── use-fetch-integrations.ts │ │ │ │ ├── use-fetch-latest-ai-chat.ts │ │ │ │ ├── use-fetch-layout-usage.ts │ │ │ │ ├── use-fetch-layout.ts │ │ │ │ ├── use-fetch-layouts.tsx │ │ │ │ ├── use-fetch-organization-settings.ts │ │ │ │ ├── use-fetch-request-logs.ts │ │ │ │ ├── use-fetch-request-traces.ts │ │ │ │ ├── use-fetch-subscriber-preferences.ts │ │ │ │ ├── use-fetch-subscriber-subscriptions.ts │ │ │ │ ├── use-fetch-subscriber.ts │ │ │ │ ├── use-fetch-subscribers.ts │ │ │ │ ├── use-fetch-subscription.ts │ │ │ │ ├── use-fetch-topics.ts │ │ │ │ ├── use-fetch-translation-group.ts │ │ │ │ ├── use-fetch-translation-keys.ts │ │ │ │ ├── use-fetch-translation-list.ts │ │ │ │ ├── use-fetch-translation.ts │ │ │ │ ├── use-fetch-vercel-integration-projects.tsx │ │ │ │ ├── use-fetch-vercel-integration.ts │ │ │ │ ├── use-fetch-workflow-runs-count.ts │ │ │ │ ├── use-fetch-workflow-test-data.ts │ │ │ │ ├── use-fetch-workflow.ts │ │ │ │ ├── use-fetch-workflows.ts │ │ │ │ ├── use-find-dirty-form.ts │ │ │ │ ├── use-first-trigger-detection.ts │ │ │ │ ├── use-form-autosave.ts │ │ │ │ ├── use-form-protection.tsx │ │ │ │ ├── use-has-permission.tsx │ │ │ │ ├── use-init-demo-workflow.ts │ │ │ │ ├── use-invocation-queue.ts │ │ │ │ ├── use-is-mobile.ts │ │ │ │ ├── use-is-payload-schema-enabled.ts │ │ │ │ ├── use-is-translation-enabled.ts │ │ │ │ ├── use-keep-ai-changes.ts │ │ │ │ ├── use-layout-preview.ts │ │ │ │ ├── use-logs-url-state.ts │ │ │ │ ├── use-metric-data.ts │ │ │ │ ├── use-mutation-observer.ts │ │ │ │ ├── use-new-dashboard-opt-in.ts │ │ │ │ ├── use-on-element-unmount.ts │ │ │ │ ├── use-onboarding-steps.ts │ │ │ │ ├── use-optimistic-channel-preferences.ts │ │ │ │ ├── use-optimistic-schedule-update.ts │ │ │ │ ├── use-page-visit-timestamp.ts │ │ │ │ ├── use-parse-variables.ts │ │ │ │ ├── use-patch-subscriber.ts │ │ │ │ ├── use-patch-workflow.ts │ │ │ │ ├── use-persisted-page-size.ts │ │ │ │ ├── use-plain-chat.ts │ │ │ │ ├── use-preview-context.ts │ │ │ │ ├── use-preview-step.ts │ │ │ │ ├── use-primary-email-integration.ts │ │ │ │ ├── use-pull-activity.ts │ │ │ │ ├── use-remove-grammarly.ts │ │ │ │ ├── use-resource-dependencies.ts │ │ │ │ ├── use-revert-message.ts │ │ │ │ ├── use-save-translation.ts │ │ │ │ ├── use-set-primary-integration.ts │ │ │ │ ├── use-step-resolver-polling.ts │ │ │ │ ├── use-step-resolvers-count.ts │ │ │ │ ├── use-sync-workflow.tsx │ │ │ │ ├── use-tab-observer.ts │ │ │ │ ├── use-tags.ts │ │ │ │ ├── use-telemetry.ts │ │ │ │ ├── use-template-store.ts │ │ │ │ ├── use-test-http-endpoint.ts │ │ │ │ ├── use-translation-completion-source.ts │ │ │ │ ├── use-translation-plugin-extension.ts │ │ │ │ ├── use-translation-validation.ts │ │ │ │ ├── use-translations.ts │ │ │ │ ├── use-trigger-workflow.ts │ │ │ │ ├── use-update-bridge-url.ts │ │ │ │ ├── use-update-context.ts │ │ │ │ ├── use-update-environment-variable.ts │ │ │ │ ├── use-update-integration.ts │ │ │ │ ├── use-update-layout.ts │ │ │ │ ├── use-update-organization-settings.ts │ │ │ │ ├── use-update-translation-value.ts │ │ │ │ ├── use-update-vercel-integration.ts │ │ │ │ ├── use-update-workflow.ts │ │ │ │ ├── use-upload-master-json.ts │ │ │ │ ├── use-upload-translations.ts │ │ │ │ ├── use-validate-bridge-url.ts │ │ │ │ ├── use-variables.ts │ │ │ │ ├── use-vercel-params.ts │ │ │ │ └── use-workflow-editor-page.ts │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ ├── pages/ │ │ │ │ ├── access-denied-page.tsx │ │ │ │ ├── activity-feed.tsx │ │ │ │ ├── analytics.tsx │ │ │ │ ├── api-keys.tsx │ │ │ │ ├── contexts.tsx │ │ │ │ ├── create-context.tsx │ │ │ │ ├── create-layout.tsx │ │ │ │ ├── create-subscriber.tsx │ │ │ │ ├── create-topic.tsx │ │ │ │ ├── create-workflow.tsx │ │ │ │ ├── duplicate-layout-page.tsx │ │ │ │ ├── duplicate-workflow.tsx │ │ │ │ ├── edit-context.tsx │ │ │ │ ├── edit-layout.tsx │ │ │ │ ├── edit-step-template-v2.tsx │ │ │ │ ├── edit-subscriber-page.tsx │ │ │ │ ├── edit-topic.tsx │ │ │ │ ├── edit-translation.tsx │ │ │ │ ├── edit-workflow.tsx │ │ │ │ ├── environments.tsx │ │ │ │ ├── error-page.tsx │ │ │ │ ├── forgot-password.tsx │ │ │ │ ├── inbox-embed-page.tsx │ │ │ │ ├── inbox-embed-success-page.tsx │ │ │ │ ├── inbox-usecase-page.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── integrations-list-page.tsx │ │ │ │ ├── invitation-accept.tsx │ │ │ │ ├── landing-1-signup.tsx │ │ │ │ ├── layouts.tsx │ │ │ │ ├── new-layout-drawer.tsx │ │ │ │ ├── new-workflow-drawer.tsx │ │ │ │ ├── organization-list.tsx │ │ │ │ ├── questionnaire-page.tsx │ │ │ │ ├── redirect-to-legacy-studio-auth.tsx │ │ │ │ ├── reset-password.tsx │ │ │ │ ├── server-error-page.tsx │ │ │ │ ├── settings.tsx │ │ │ │ ├── sign-in.tsx │ │ │ │ ├── sign-up.tsx │ │ │ │ ├── sso-sign-in.tsx │ │ │ │ ├── subscribers.tsx │ │ │ │ ├── test-workflow-drawer-page.tsx │ │ │ │ ├── test-workflow-route-handler.tsx │ │ │ │ ├── test-workflow.tsx │ │ │ │ ├── topics.tsx │ │ │ │ ├── translation-settings-page.tsx │ │ │ │ ├── translations.tsx │ │ │ │ ├── upsert-variable.tsx │ │ │ │ ├── usecase-select-page.tsx │ │ │ │ ├── variables.tsx │ │ │ │ ├── vercel-integration-page.tsx │ │ │ │ ├── verify-email.tsx │ │ │ │ ├── webhooks-page.tsx │ │ │ │ ├── welcome-page.tsx │ │ │ │ └── workflows.tsx │ │ │ ├── routes/ │ │ │ │ ├── auth.tsx │ │ │ │ ├── catch-all.tsx │ │ │ │ ├── dashboard.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── onboarding.tsx │ │ │ │ ├── permission-protected-route.tsx │ │ │ │ ├── protected-route.tsx │ │ │ │ └── root.tsx │ │ │ ├── types/ │ │ │ │ ├── activity.ts │ │ │ │ ├── global.ts │ │ │ │ ├── logs.ts │ │ │ │ └── translations.ts │ │ │ ├── utils/ │ │ │ │ ├── activityFilters.ts │ │ │ │ ├── analytics-mock-data.ts │ │ │ │ ├── animation.ts │ │ │ │ ├── api-hostname-manager.ts │ │ │ │ ├── api-response-normalizer.ts │ │ │ │ ├── arrays.ts │ │ │ │ ├── auth.ts │ │ │ │ ├── avatars.ts │ │ │ │ ├── better-auth/ │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── forgot-password.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── invitation-accept.tsx │ │ │ │ │ │ ├── organization-create.tsx │ │ │ │ │ │ ├── organization-dropdown.tsx │ │ │ │ │ │ ├── organization-list.tsx │ │ │ │ │ │ ├── organization-settings.tsx │ │ │ │ │ │ ├── organization-switcher.tsx │ │ │ │ │ │ ├── reset-password.tsx │ │ │ │ │ │ ├── sign-in.tsx │ │ │ │ │ │ ├── sign-up.tsx │ │ │ │ │ │ ├── sso-sign-in.tsx │ │ │ │ │ │ ├── team-members.tsx │ │ │ │ │ │ ├── user-button.tsx │ │ │ │ │ │ ├── user-profile.tsx │ │ │ │ │ │ └── verify-email.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── role-permissions.ts │ │ │ │ ├── channels.ts │ │ │ │ ├── clerk-appearance.ts │ │ │ │ ├── code-snippets.ts │ │ │ │ ├── color.ts │ │ │ │ ├── conditions.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── context-variable-utils.ts │ │ │ │ ├── context.ts │ │ │ │ ├── customer-io.ts │ │ │ │ ├── default-values.ts │ │ │ │ ├── enums.ts │ │ │ │ ├── format-count.ts │ │ │ │ ├── format-date.ts │ │ │ │ ├── formatter.ts │ │ │ │ ├── id-utils.ts │ │ │ │ ├── inbox.ts │ │ │ │ ├── json.ts │ │ │ │ ├── liquid-autocomplete.tsx │ │ │ │ ├── liquid-scope-analyzer.ts │ │ │ │ ├── liquid.ts │ │ │ │ ├── local-storage.ts │ │ │ │ ├── logs-filters.utils.ts │ │ │ │ ├── number-formatting.ts │ │ │ │ ├── parse-page-param.ts │ │ │ │ ├── parseStepVariables.ts │ │ │ │ ├── polymorphic.ts │ │ │ │ ├── protect.tsx │ │ │ │ ├── query-keys.ts │ │ │ │ ├── recursive-clone-children.tsx │ │ │ │ ├── routes.ts │ │ │ │ ├── schema.ts │ │ │ │ ├── segment.ts │ │ │ │ ├── self-hosted/ │ │ │ │ │ ├── api-interceptor.tsx │ │ │ │ │ ├── auth.resource.tsx │ │ │ │ │ ├── components.tsx │ │ │ │ │ ├── icons.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── jwt-manager.tsx │ │ │ │ │ ├── organization-switcher.tsx │ │ │ │ │ ├── organization.resource.tsx │ │ │ │ │ ├── user-button.tsx │ │ │ │ │ ├── user.resource.tsx │ │ │ │ │ └── user.types.ts │ │ │ │ ├── sentry.ts │ │ │ │ ├── string.ts │ │ │ │ ├── telemetry.ts │ │ │ │ ├── titleize.ts │ │ │ │ ├── tracking.ts │ │ │ │ ├── tv.ts │ │ │ │ ├── types.ts │ │ │ │ ├── ui.ts │ │ │ │ ├── url.ts │ │ │ │ ├── uuid/ │ │ │ │ │ └── index.ts │ │ │ │ ├── validation.ts │ │ │ │ └── workflow-trigger-ai-prompt.ts │ │ │ └── vite-env.d.ts │ │ ├── tailwind.config.ts │ │ ├── tests/ │ │ │ ├── manage-workflows.e2e.ts │ │ │ ├── package.json │ │ │ ├── page-object-models/ │ │ │ │ ├── create-workflow-sidebar.ts │ │ │ │ ├── in-app-step-editor.ts │ │ │ │ ├── step-config-sidebar.ts │ │ │ │ ├── trigger-workflow-page.ts │ │ │ │ ├── workflow-editor-page.ts │ │ │ │ └── workflows-page.ts │ │ │ ├── sync-workflow.e2e.ts │ │ │ ├── tsconfig.json │ │ │ └── utils/ │ │ │ ├── api.ts │ │ │ ├── environment-service.ts │ │ │ ├── fixtures.ts │ │ │ ├── integration-service.ts │ │ │ ├── organization-service.ts │ │ │ ├── session.ts │ │ │ ├── test-bridge-server.ts │ │ │ └── user-service.ts │ │ ├── tests-examples/ │ │ │ └── demo-todo-app.spec.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── inbound-mail/ │ │ ├── .example.env │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── e2e/ │ │ │ └── setup.ts │ │ ├── nodemon.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── config/ │ │ │ │ ├── env.config.ts │ │ │ │ ├── env.validators.ts │ │ │ │ └── index.ts │ │ │ ├── instrument.ts │ │ │ ├── main.ts │ │ │ ├── python/ │ │ │ │ ├── DNS/ │ │ │ │ │ ├── Base.py │ │ │ │ │ ├── Class.py │ │ │ │ │ ├── Lib.py │ │ │ │ │ ├── Opcode.py │ │ │ │ │ ├── Status.py │ │ │ │ │ ├── Type.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── lazy.py │ │ │ │ │ └── win32dns.py │ │ │ │ ├── dkim/ │ │ │ │ │ ├── .__init__.py.swo │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── __main__.py │ │ │ │ │ ├── asn1.py │ │ │ │ │ ├── canonicalization.py │ │ │ │ │ ├── crypto.py │ │ │ │ │ ├── dnsplug.py │ │ │ │ │ └── util.py │ │ │ │ ├── ipaddr.py │ │ │ │ ├── spf.py │ │ │ │ ├── verifydkim.py │ │ │ │ └── verifyspf.py │ │ │ ├── server/ │ │ │ │ ├── inbound-mail.service.spec.ts │ │ │ │ ├── inbound-mail.service.ts │ │ │ │ ├── index.ts │ │ │ │ ├── logger.ts │ │ │ │ └── mailUtilities.ts │ │ │ └── types/ │ │ │ └── env.d.ts │ │ └── tsconfig.json │ ├── webhook/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── e2e/ │ │ │ ├── mocha.e2e.opts │ │ │ └── setup.ts │ │ ├── nest-cli.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── .example.env │ │ │ ├── app.controller.ts │ │ │ ├── app.module.ts │ │ │ ├── app.service.ts │ │ │ ├── bootstrap.ts │ │ │ ├── config/ │ │ │ │ ├── env.config.ts │ │ │ │ └── env.validators.ts │ │ │ ├── health/ │ │ │ │ ├── health.controller.ts │ │ │ │ └── health.module.ts │ │ │ ├── instrument.ts │ │ │ ├── main.ts │ │ │ ├── shared/ │ │ │ │ ├── constants.ts │ │ │ │ ├── framework/ │ │ │ │ │ ├── response.interceptor.ts │ │ │ │ │ └── user.decorator.ts │ │ │ │ ├── helpers/ │ │ │ │ │ └── regex.service.ts │ │ │ │ └── shared.module.ts │ │ │ ├── types/ │ │ │ │ └── env.d.ts │ │ │ └── webhooks/ │ │ │ ├── dtos/ │ │ │ │ └── webhooks-response.dto.ts │ │ │ ├── e2e/ │ │ │ │ └── email-webhook.e2e.ts │ │ │ ├── interfaces/ │ │ │ │ └── webhook.interface.ts │ │ │ ├── usecases/ │ │ │ │ ├── execution-details/ │ │ │ │ │ ├── create-execution-details.command.ts │ │ │ │ │ └── create-execution-details.usecase.ts │ │ │ │ ├── index.ts │ │ │ │ └── webhook/ │ │ │ │ ├── webhook.command.ts │ │ │ │ └── webhook.usecase.ts │ │ │ ├── webhooks.controller.ts │ │ │ └── webhooks.module.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── worker/ │ │ ├── .gitignore │ │ ├── .mocharc.json │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── e2e/ │ │ │ └── setup.ts │ │ ├── nest-cli.json │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── .example.env │ │ │ ├── app/ │ │ │ │ ├── health/ │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ └── health-check.e2e.ts │ │ │ │ │ ├── health.controller.ts │ │ │ │ │ └── health.module.ts │ │ │ │ ├── shared/ │ │ │ │ │ ├── response.interceptor.ts │ │ │ │ │ ├── shared.module.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── exceptions.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── should-halt-on-step-failure.ts │ │ │ │ ├── telemetry/ │ │ │ │ │ ├── telemetry.module.ts │ │ │ │ │ ├── usecases/ │ │ │ │ │ │ ├── machineInfoService.usecase.ts │ │ │ │ │ │ └── userInfoService.usecase.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── machine.utils.ts │ │ │ │ │ └── sendDataToNovuTrace.utils.ts │ │ │ │ └── workflow/ │ │ │ │ ├── services/ │ │ │ │ │ ├── active-jobs-metric.service.ts │ │ │ │ │ ├── cold-start.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── standard.worker.spec.ts │ │ │ │ │ ├── standard.worker.ts │ │ │ │ │ ├── subscriber-process.worker.ts │ │ │ │ │ ├── workflow.worker.spec.ts │ │ │ │ │ └── workflow.worker.ts │ │ │ │ ├── specs/ │ │ │ │ │ ├── conditions-filter.usecase.spec.ts │ │ │ │ │ └── inbound-email-parse.spec.ts │ │ │ │ ├── usecases/ │ │ │ │ │ ├── add-job/ │ │ │ │ │ │ ├── add-job.command.ts │ │ │ │ │ │ ├── add-job.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── merge-or-create-digest.command.ts │ │ │ │ │ │ ├── merge-or-create-digest.usecase.ts │ │ │ │ │ │ └── validation.ts │ │ │ │ │ ├── execute-bridge-job/ │ │ │ │ │ │ ├── execute-bridge-job.command.ts │ │ │ │ │ │ ├── execute-bridge-job.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── handle-last-failed-job/ │ │ │ │ │ │ ├── handle-last-failed-job.command.ts │ │ │ │ │ │ ├── handle-last-failed-job.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── inbound-email-parse/ │ │ │ │ │ │ ├── inbound-email-parse.command.ts │ │ │ │ │ │ └── inbound-email-parse.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── noop-send-webhook-message.usecase.ts │ │ │ │ │ ├── process-unsnooze-job/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── process-unsnooze-job.command.ts │ │ │ │ │ │ └── process-unsnooze-job.usecase.ts │ │ │ │ │ ├── queue-next-job/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── queue-next-job.command.ts │ │ │ │ │ │ └── queue-next-job.usecase.ts │ │ │ │ │ ├── run-job/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── run-job.command.ts │ │ │ │ │ │ ├── run-job.usecase.ts │ │ │ │ │ │ ├── schedule-validator.spec.ts │ │ │ │ │ │ └── schedule-validator.ts │ │ │ │ │ ├── send-message/ │ │ │ │ │ │ ├── channel-endpoint-resolution/ │ │ │ │ │ │ │ ├── resolve-channel-endpoints.command.ts │ │ │ │ │ │ │ └── resolve-channel-endpoints.usecase.ts │ │ │ │ │ │ ├── digest/ │ │ │ │ │ │ │ ├── digest-events.command.ts │ │ │ │ │ │ │ ├── digest.usecase.ts │ │ │ │ │ │ │ ├── get-digest-events-backoff.usecase.ts │ │ │ │ │ │ │ ├── get-digest-events-regular.usecase.ts │ │ │ │ │ │ │ ├── get-digest-events.usecase.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── execute-code-first-custom-step.usecase.ts │ │ │ │ │ │ ├── execute-http-request-step.usecase.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── send-message-channel.command.ts │ │ │ │ │ │ ├── send-message-chat.usecase.ts │ │ │ │ │ │ ├── send-message-delay.usecase.ts │ │ │ │ │ │ ├── send-message-email.usecase.ts │ │ │ │ │ │ ├── send-message-in-app.usecase.ts │ │ │ │ │ │ ├── send-message-push.usecase.spec.ts │ │ │ │ │ │ ├── send-message-push.usecase.ts │ │ │ │ │ │ ├── send-message-sms.usecase.ts │ │ │ │ │ │ ├── send-message-type.usecase.ts │ │ │ │ │ │ ├── send-message.base.ts │ │ │ │ │ │ ├── send-message.command.ts │ │ │ │ │ │ ├── send-message.usecase.ts │ │ │ │ │ │ └── throttle/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── throttle.usecase.ts │ │ │ │ │ ├── store-subscriber-jobs/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── store-subscriber-jobs.command.ts │ │ │ │ │ │ └── store-subscriber-jobs.usecase.ts │ │ │ │ │ ├── subscriber-job-bound/ │ │ │ │ │ │ ├── subscriber-job-bound.command.ts │ │ │ │ │ │ └── subscriber-job-bound.usecase.ts │ │ │ │ │ ├── update-job-status/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── set-job-as-completed.usecase.ts │ │ │ │ │ │ ├── set-job-as-failed.usecase.ts │ │ │ │ │ │ ├── set-job-as.command.ts │ │ │ │ │ │ ├── update-job-status.command.ts │ │ │ │ │ │ └── update-job-status.usecase.ts │ │ │ │ │ └── webhook-filter-backoff-strategy/ │ │ │ │ │ ├── event-job.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── webhook-filter-backoff-strategy.command.ts │ │ │ │ │ └── webhook-filter-backoff-strategy.usecase.ts │ │ │ │ ├── workers/ │ │ │ │ │ └── inbound-parse.worker.service.ts │ │ │ │ └── workflow.module.ts │ │ │ ├── app.module.ts │ │ │ ├── bootstrap.ts │ │ │ ├── config/ │ │ │ │ ├── env.config.ts │ │ │ │ ├── env.validators.ts │ │ │ │ ├── index.ts │ │ │ │ └── worker-init.config.ts │ │ │ ├── instrument.ts │ │ │ ├── main.ts │ │ │ ├── newrelic.ts │ │ │ └── types/ │ │ │ └── env.d.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── webpack.config.js │ └── ws/ │ ├── .gitignore │ ├── Dockerfile │ ├── e2e/ │ │ └── setup.ts │ ├── nest-cli.json │ ├── package.json │ ├── src/ │ │ ├── .example.env │ │ ├── app.controller.ts │ │ ├── app.module.ts │ │ ├── app.service.ts │ │ ├── bootstrap.ts │ │ ├── config/ │ │ │ ├── env.config.ts │ │ │ ├── env.validators.ts │ │ │ └── index.ts │ │ ├── health/ │ │ │ ├── health.controller.ts │ │ │ └── health.module.ts │ │ ├── instrument.ts │ │ ├── main.ts │ │ ├── shared/ │ │ │ ├── framework/ │ │ │ │ └── in-memory-io.adapter.ts │ │ │ ├── shared.module.ts │ │ │ └── subscriber-online/ │ │ │ ├── index.ts │ │ │ └── subscriber-online.service.ts │ │ ├── socket/ │ │ │ ├── services/ │ │ │ │ ├── cold-start.service.ts │ │ │ │ ├── index.ts │ │ │ │ ├── web-socket.worker.spec.ts │ │ │ │ ├── web-socket.worker.ts │ │ │ │ └── ws-server-health-indicator.service.ts │ │ │ ├── socket.module.ts │ │ │ ├── usecases/ │ │ │ │ └── external-services-route/ │ │ │ │ ├── external-services-route.command.ts │ │ │ │ ├── external-services-route.spec.ts │ │ │ │ ├── external-services-route.usecase.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ └── ws.gateway.ts │ │ └── types/ │ │ └── env.d.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── biome-plugins/ │ ├── api-property-optionality-required-prop.grit │ ├── api-property-optionality.grit │ ├── api-property-record-type.grit │ ├── command-session-exclusion.grit │ └── pino-logger-arg-order.grit ├── biome.json ├── docker/ │ ├── Readme.md │ ├── community/ │ │ └── docker-compose.yml │ └── local/ │ ├── docker-compose.agent.yml │ ├── docker-compose.e2e.yml │ ├── docker-compose.local.yml │ └── docker-compose.yml ├── enterprise/ │ ├── packages/ │ │ ├── ai/ │ │ │ ├── .gitignore │ │ │ ├── check-ee.mjs │ │ │ ├── package.json │ │ │ ├── project.json │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── api/ │ │ │ ├── .gitignore │ │ │ ├── check-ee.mjs │ │ │ ├── package.json │ │ │ ├── project.json │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ ├── auth/ │ │ │ ├── .gitignore │ │ │ ├── check-ee.mjs │ │ │ ├── package.json │ │ │ ├── project.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── billing/ │ │ │ ├── .gitignore │ │ │ ├── check-ee.mjs │ │ │ ├── package.json │ │ │ ├── project.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── shared-services/ │ │ │ ├── .czrc │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── check-ee.mjs │ │ │ ├── package.json │ │ │ ├── project.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.module.json │ │ └── translation/ │ │ ├── .gitignore │ │ ├── check-ee.mjs │ │ ├── package.json │ │ ├── project.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ └── workers/ │ ├── scheduler/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── .prettierrc │ │ ├── package.json │ │ ├── src/ │ │ │ ├── auth.ts │ │ │ ├── env.d.ts │ │ │ ├── index.ts │ │ │ ├── scheduler.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── env.d.ts │ │ │ ├── index.spec.ts │ │ │ ├── scheduler.spec.ts │ │ │ └── tsconfig.json │ │ ├── tsconfig.json │ │ ├── vitest.config.mts │ │ ├── worker-configuration.d.ts │ │ ├── wrangler.jsonc │ │ └── wrangler.local.jsonc │ ├── socket/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── durable-objects/ │ │ │ │ └── websocket-room.ts │ │ │ ├── handlers/ │ │ │ │ └── websocket.ts │ │ │ ├── index.ts │ │ │ ├── middleware/ │ │ │ │ ├── auth.ts │ │ │ │ └── internal-auth.ts │ │ │ └── types/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ ├── worker-configuration.d.ts │ │ └── wrangler.jsonc │ └── step-resolver/ │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── auth/ │ │ │ └── hmac.ts │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils/ │ │ └── worker-id.ts │ ├── tsconfig.json │ ├── worker-configuration.d.ts │ └── wrangler.jsonc ├── jest.config.js ├── libs/ │ ├── application-generic/ │ │ ├── .czrc │ │ ├── .gitignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── jest.setup.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── commands/ │ │ │ │ ├── authenticated.command.ts │ │ │ │ ├── base.command.spec.ts │ │ │ │ ├── base.command.ts │ │ │ │ ├── index.ts │ │ │ │ ├── organization.command.ts │ │ │ │ └── project.command.ts │ │ │ ├── config/ │ │ │ │ ├── index.ts │ │ │ │ ├── workers.config.spec.ts │ │ │ │ └── workers.ts │ │ │ ├── custom-providers/ │ │ │ │ └── index.ts │ │ │ ├── decorators/ │ │ │ │ ├── context-payload.decorator.ts │ │ │ │ ├── external-api.decorator.ts │ │ │ │ ├── index.ts │ │ │ │ ├── is-valid-context-payload.decorator.ts │ │ │ │ ├── is-valid-locale.decorator.ts │ │ │ │ ├── json-schema.validator.ts │ │ │ │ ├── permissions.decorator.ts │ │ │ │ ├── product-feature.decorator.ts │ │ │ │ ├── resource-category.decorator.ts │ │ │ │ ├── retry-on-error-decorator.spec.ts │ │ │ │ ├── retry-on-error-decorator.ts │ │ │ │ ├── to-boolean.spec.ts │ │ │ │ ├── to-boolean.ts │ │ │ │ └── user-session.decorator.ts │ │ │ ├── dtos/ │ │ │ │ ├── base-issue.dto.ts │ │ │ │ ├── configurations.dto.ts │ │ │ │ ├── controls-metadata.dto.ts │ │ │ │ ├── credentials.dto.ts │ │ │ │ ├── get-environment-tags.dto.ts │ │ │ │ ├── get-workflow-with-preferences.dto.ts │ │ │ │ ├── inbound-parse-job.dto.ts │ │ │ │ ├── index.ts │ │ │ │ ├── integration-issue.dto.ts │ │ │ │ ├── integration-response.dto.ts │ │ │ │ ├── json-schema.dto.ts │ │ │ │ ├── layout/ │ │ │ │ │ ├── create-layout.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── layout-controls.dto.ts │ │ │ │ │ ├── layout-response.dto.ts │ │ │ │ │ ├── update-layout.dto.ts │ │ │ │ │ └── v0/ │ │ │ │ │ └── layout.dto.ts │ │ │ │ ├── process-subscriber-job.dto.ts │ │ │ │ ├── standard-job.dto.ts │ │ │ │ ├── step-content-issue.dto.ts │ │ │ │ ├── step-filter-dto.ts │ │ │ │ ├── step-issues.dto.ts │ │ │ │ ├── subscriber-topic-preference.dto.ts │ │ │ │ ├── subscribers/ │ │ │ │ │ ├── channelSettingsDto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── subscriber-channel.ts │ │ │ │ │ ├── subscriber-response.dto.ts │ │ │ │ │ └── update-subscriber-channel-request.dto.ts │ │ │ │ ├── ui-schema-property.dto.ts │ │ │ │ ├── ui-schema.dto.ts │ │ │ │ ├── user-response.dto.ts │ │ │ │ ├── web-sockets-job.dto.ts │ │ │ │ ├── workflow/ │ │ │ │ │ ├── channel-preference.dto.ts │ │ │ │ │ ├── chat-control.dto.ts │ │ │ │ │ ├── controls/ │ │ │ │ │ │ ├── custom-control.dto.ts │ │ │ │ │ │ ├── delay-control.dto.ts │ │ │ │ │ │ ├── digest-control.dto.ts │ │ │ │ │ │ ├── email-control.dto.ts │ │ │ │ │ │ ├── http-request-control.dto.ts │ │ │ │ │ │ ├── in-app-control.dto.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── look-back-window.dto.ts │ │ │ │ │ │ ├── push-control.dto.ts │ │ │ │ │ │ ├── sms-control.dto.ts │ │ │ │ │ │ └── throttle-control.dto.ts │ │ │ │ │ ├── generate-preview-request.dto.ts │ │ │ │ │ ├── generate-preview-response.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preferences.response.dto.ts │ │ │ │ │ ├── preview-payload.dto.ts │ │ │ │ │ ├── runtime-issue.dto.ts │ │ │ │ │ ├── skip.dto.ts │ │ │ │ │ ├── step-list-response.dto.ts │ │ │ │ │ ├── step-responses/ │ │ │ │ │ │ ├── chat-step.response.dto.ts │ │ │ │ │ │ ├── custom-step.response.dto.ts │ │ │ │ │ │ ├── delay-step.response.dto.ts │ │ │ │ │ │ ├── digest-step.response.dto.ts │ │ │ │ │ │ ├── email-step.response.dto.ts │ │ │ │ │ │ ├── http-request-step.response.dto.ts │ │ │ │ │ │ ├── in-app-step.response.dto.ts │ │ │ │ │ │ ├── push-step.response.dto.ts │ │ │ │ │ │ ├── sms-step.response.dto.ts │ │ │ │ │ │ └── throttle-step.response.dto.ts │ │ │ │ │ ├── step.response.dto.ts │ │ │ │ │ ├── workflow-commons.dto.ts │ │ │ │ │ ├── workflow-list-response.dto.ts │ │ │ │ │ ├── workflow-preference.dto.ts │ │ │ │ │ ├── workflow-preferences.dto.ts │ │ │ │ │ └── workflow-response.dto.ts │ │ │ │ └── workflow-job.dto.ts │ │ │ ├── encryption/ │ │ │ │ ├── cipher.spec.ts │ │ │ │ ├── cipher.ts │ │ │ │ ├── encrypt-environment-variable.ts │ │ │ │ ├── encrypt-provider.spec.ts │ │ │ │ ├── encrypt-provider.ts │ │ │ │ └── index.ts │ │ │ ├── factories/ │ │ │ │ ├── channel.factory.ts │ │ │ │ ├── chat/ │ │ │ │ │ ├── chat.factory.ts │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ ├── base.handler.ts │ │ │ │ │ │ ├── chat-webhook.handler.ts │ │ │ │ │ │ ├── discord.handler.ts │ │ │ │ │ │ ├── getstream.handler.ts │ │ │ │ │ │ ├── grafana-on-call.handler.ts │ │ │ │ │ │ ├── mattermost.handler.ts │ │ │ │ │ │ ├── msteams.handler.ts │ │ │ │ │ │ ├── novu-slack.handler.ts │ │ │ │ │ │ ├── rocket-chat.handler.ts │ │ │ │ │ │ ├── ryver.handler.ts │ │ │ │ │ │ ├── slack.handler.ts │ │ │ │ │ │ ├── whatsapp-business.handler.ts │ │ │ │ │ │ └── zulip.handler.ts │ │ │ │ │ └── interfaces/ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mail/ │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ ├── base.handler.ts │ │ │ │ │ │ ├── braze.handler.ts │ │ │ │ │ │ ├── email-webhook.handler.ts │ │ │ │ │ │ ├── emailjs.handler.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── infobip.handler.ts │ │ │ │ │ │ ├── mailersend.handler.ts │ │ │ │ │ │ ├── mailgun.handler.ts │ │ │ │ │ │ ├── mailjet.handler.ts │ │ │ │ │ │ ├── mailtrap.handler.ts │ │ │ │ │ │ ├── mandrill.handler.ts │ │ │ │ │ │ ├── netcore.handler.ts │ │ │ │ │ │ ├── nodemailer.handler.ts │ │ │ │ │ │ ├── novu.handler.ts │ │ │ │ │ │ ├── outlook365.handler.ts │ │ │ │ │ │ ├── plunk.handler.ts │ │ │ │ │ │ ├── postmark.handler.ts │ │ │ │ │ │ ├── resend.handler.ts │ │ │ │ │ │ ├── sendgrid.handler.ts │ │ │ │ │ │ ├── sendinblue.handler.ts │ │ │ │ │ │ ├── ses.handler.ts │ │ │ │ │ │ └── sparkpost.handler.ts │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── mail.factory.ts │ │ │ │ ├── push/ │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ ├── apns.handler.ts │ │ │ │ │ │ ├── appio.handler.ts │ │ │ │ │ │ ├── base.handler.ts │ │ │ │ │ │ ├── expo.handler.ts │ │ │ │ │ │ ├── fcm.handler.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── one-signal.handler.ts │ │ │ │ │ │ ├── push-webhook.handler.ts │ │ │ │ │ │ ├── pusher-beams.handler.ts │ │ │ │ │ │ └── pushpad.handler.ts │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── push.factory.interface.ts │ │ │ │ │ │ └── push.handler.interface.ts │ │ │ │ │ └── push.factory.ts │ │ │ │ ├── shared/ │ │ │ │ │ └── interfaces.ts │ │ │ │ └── sms/ │ │ │ │ ├── handlers/ │ │ │ │ │ ├── africas-talking.handler.ts │ │ │ │ │ ├── afro-sms.handler.ts │ │ │ │ │ ├── azure-sms.handler.ts │ │ │ │ │ ├── bandwidth.handler.ts │ │ │ │ │ ├── base.handler.ts │ │ │ │ │ ├── brevo-sms.handler.ts │ │ │ │ │ ├── bulk-sms.handler.ts │ │ │ │ │ ├── burst-sms.handler.ts │ │ │ │ │ ├── clickatell.handler.ts │ │ │ │ │ ├── clicksend.handler.ts │ │ │ │ │ ├── cm-telecom.handler.ts │ │ │ │ │ ├── eazy-sms.handler.ts │ │ │ │ │ ├── firetext.handler.ts │ │ │ │ │ ├── forty-six-elks.handler.ts │ │ │ │ │ ├── generic-sms.handler.ts │ │ │ │ │ ├── gupshup.handler.ts │ │ │ │ │ ├── imedia.handler.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── infobip.handler.ts │ │ │ │ │ ├── isend-sms.handler.ts │ │ │ │ │ ├── isendpro-sms.handler.ts │ │ │ │ │ ├── kannel.handler.ts │ │ │ │ │ ├── maqsam.handler.ts │ │ │ │ │ ├── messagebird.handler.ts │ │ │ │ │ ├── mobishastra.handler.ts │ │ │ │ │ ├── nexmo.handler.ts │ │ │ │ │ ├── novu.handler.ts │ │ │ │ │ ├── plivo.handler.ts │ │ │ │ │ ├── ring-central.handler.ts │ │ │ │ │ ├── sendchamp.handler.ts │ │ │ │ │ ├── simpletexting.handler.ts │ │ │ │ │ ├── sinch.handler.ts │ │ │ │ │ ├── sms-central.handler.ts │ │ │ │ │ ├── sms77.handler.ts │ │ │ │ │ ├── smsmode.handler.ts │ │ │ │ │ ├── sns.handler.ts │ │ │ │ │ ├── telnyx.handler.ts │ │ │ │ │ ├── termii.handler.ts │ │ │ │ │ ├── twilio.handler.ts │ │ │ │ │ └── unifonic.handler.ts │ │ │ │ ├── interfaces/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── sms.factory.interface.ts │ │ │ │ │ └── sms.handler.interface.ts │ │ │ │ └── sms.factory.ts │ │ │ ├── health/ │ │ │ │ ├── active-jobs-metric-queue.health-indicator.ts │ │ │ │ ├── cache.health-indicator.ts │ │ │ │ ├── dal.health-indicator.ts │ │ │ │ ├── health-indicator.interface.ts │ │ │ │ ├── inbound-parse-queue.health-indicator.ts │ │ │ │ ├── index.ts │ │ │ │ ├── queue-health-indicator.service.ts │ │ │ │ ├── standard-queue.health-indicator.ts │ │ │ │ ├── subscriber-process-queue.health-indicator.ts │ │ │ │ ├── web-sockets-queue.health-indicator.ts │ │ │ │ └── workflow-queue.health-indicator.ts │ │ │ ├── http/ │ │ │ │ ├── headers.types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── responses.types.ts │ │ │ │ ├── utils.types.spec.ts │ │ │ │ └── utils.types.ts │ │ │ ├── index.ts │ │ │ ├── instrumentation/ │ │ │ │ ├── index.ts │ │ │ │ └── instrumentation.decorator.ts │ │ │ ├── logging/ │ │ │ │ ├── LogDecorator.ts │ │ │ │ ├── error-util.ts │ │ │ │ ├── index.ts │ │ │ │ └── masking.ts │ │ │ ├── modules/ │ │ │ │ ├── cron.module.ts │ │ │ │ ├── index.ts │ │ │ │ ├── interfaces.ts │ │ │ │ ├── metrics.module.ts │ │ │ │ └── queues.module.ts │ │ │ ├── pipes/ │ │ │ │ ├── index.ts │ │ │ │ ├── parse-slug-env-id.pipe.spec.ts │ │ │ │ ├── parse-slug-env-id.pipe.ts │ │ │ │ ├── parse-slug-id.pipe.spec.ts │ │ │ │ ├── parse-slug-id.pipe.ts │ │ │ │ └── parse-slug-id.ts │ │ │ ├── resilience/ │ │ │ │ ├── delay.ts │ │ │ │ └── index.ts │ │ │ ├── schemas/ │ │ │ │ ├── channel-endpoint/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── channel-endpoint.schema.spec.ts │ │ │ │ │ ├── channel-endpoint.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ └── control/ │ │ │ │ ├── chat-control.schema.ts │ │ │ │ ├── delay-control.schema.ts │ │ │ │ ├── digest-control.schema.ts │ │ │ │ ├── email-control.schema.ts │ │ │ │ ├── in-app-control.schema.ts │ │ │ │ ├── index.ts │ │ │ │ ├── layout-control.schema.ts │ │ │ │ ├── push-control.schema.ts │ │ │ │ ├── shared.ts │ │ │ │ ├── sms-control.schema.ts │ │ │ │ └── throttle-control.schema.ts │ │ │ ├── services/ │ │ │ │ ├── analytic-logs/ │ │ │ │ │ ├── clickhouse-batch.service.spec.ts │ │ │ │ │ ├── clickhouse-batch.service.ts │ │ │ │ │ ├── clickhouse.service.ts │ │ │ │ │ ├── delivery-trend-counts/ │ │ │ │ │ │ ├── delivery-trend-counts.repository.ts │ │ │ │ │ │ ├── delivery-trend-counts.schema.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── log.repository.ts │ │ │ │ │ ├── request-log/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── request-log.repository.ts │ │ │ │ │ │ └── request-log.schema.ts │ │ │ │ │ ├── shared.ts │ │ │ │ │ ├── step-run/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── step-run.repository.ts │ │ │ │ │ │ └── step-run.schema.ts │ │ │ │ │ ├── trace-log/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── trace-log.repository.ts │ │ │ │ │ │ └── trace-log.schema.ts │ │ │ │ │ ├── trace-rollup/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── trace-rollup.repository.ts │ │ │ │ │ │ └── trace-rollup.schema.ts │ │ │ │ │ ├── types/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── workflow-run/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── workflow-run.repository.ts │ │ │ │ │ │ └── workflow-run.schema.ts │ │ │ │ │ └── workflow-run-count/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── workflow-run-count.repository.ts │ │ │ │ │ └── workflow-run-count.schema.ts │ │ │ │ ├── analytics.service.ts │ │ │ │ ├── auth/ │ │ │ │ │ ├── auth.service.interface.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── shared.ts │ │ │ │ ├── bull-mq/ │ │ │ │ │ ├── bull-mq.service.spec.ts │ │ │ │ │ ├── bull-mq.service.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── cache/ │ │ │ │ │ ├── cache-service.mock.ts │ │ │ │ │ ├── cache-service.spec.ts │ │ │ │ │ ├── cache.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── cached-query.interceptor.ts │ │ │ │ │ │ ├── cached-response.decorator.spec.ts │ │ │ │ │ │ ├── cached-response.decorator.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── shared-cache.spec.ts │ │ │ │ │ │ └── shared-cache.ts │ │ │ │ │ ├── invalidate-cache.service.ts │ │ │ │ │ └── key-builders/ │ │ │ │ │ ├── builder.base.ts │ │ │ │ │ ├── builder.scoped.ts │ │ │ │ │ ├── crypto.ts │ │ │ │ │ ├── entities.spec.ts │ │ │ │ │ ├── entities.ts │ │ │ │ │ ├── identifiers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── queries.spec.ts │ │ │ │ │ └── queries.ts │ │ │ │ ├── calculate-delay/ │ │ │ │ │ ├── compute-job-wait-duration.service.spec.ts │ │ │ │ │ ├── compute-job-wait-duration.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── timed-digest-delay.service.spec.ts │ │ │ │ │ └── timed-digest-delay.service.ts │ │ │ │ ├── cloudflare-scheduler/ │ │ │ │ │ ├── cloudflare-scheduler.service.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── content.service.ts │ │ │ │ ├── control-value-sanitizer.service.ts │ │ │ │ ├── cron/ │ │ │ │ │ ├── cron.constants.ts │ │ │ │ │ ├── cron.service.ts │ │ │ │ │ ├── cron.types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── pulse-cron.service.ts │ │ │ │ ├── feature-flags/ │ │ │ │ │ ├── feature-flags.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── launch-darkly.service.ts │ │ │ │ │ ├── process-env.service.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── helper-service/ │ │ │ │ │ ├── helper.service.spec.ts │ │ │ │ │ ├── helper.service.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── http-client/ │ │ │ │ │ ├── http-client.service.ts │ │ │ │ │ ├── http-client.types.ts │ │ │ │ │ ├── http-request.utils.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── in-memory-lru-cache/ │ │ │ │ │ ├── in-memory-lru-cache.service.spec.ts │ │ │ │ │ ├── in-memory-lru-cache.service.ts │ │ │ │ │ ├── in-memory-lru-cache.store.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── in-memory-provider/ │ │ │ │ │ ├── cache-in-memory-provider.service.ts │ │ │ │ │ ├── in-memory-provider.service.spec.ts │ │ │ │ │ ├── in-memory-provider.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── providers/ │ │ │ │ │ │ ├── azure-cache-for-redis-cluster-provider.ts │ │ │ │ │ │ ├── elasticache-cluster-provider.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── memory-db-cluster-provider.ts │ │ │ │ │ │ ├── providers.spec.ts │ │ │ │ │ │ ├── redis-cluster-provider.ts │ │ │ │ │ │ ├── redis-master-slave-provider.ts │ │ │ │ │ │ ├── redis-provider.ts │ │ │ │ │ │ └── variable-mappers.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ ├── web-sockets-in-memory-provider.service.ts │ │ │ │ │ └── workflow-in-memory-provider.service.ts │ │ │ │ ├── index.ts │ │ │ │ ├── message-interaction.service.ts │ │ │ │ ├── metrics/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── metrics.interface.ts │ │ │ │ │ ├── metrics.service.spec.ts │ │ │ │ │ └── metrics.service.ts │ │ │ │ ├── query-parser/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── query-parser.service.spec.ts │ │ │ │ │ ├── query-parser.service.ts │ │ │ │ │ ├── query-validator.service.spec.ts │ │ │ │ │ ├── query-validator.service.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── queues/ │ │ │ │ │ ├── active-jobs-metric-queue.service.spec.ts │ │ │ │ │ ├── active-jobs-metric-queue.service.ts │ │ │ │ │ ├── inbound-parse-queue.service.spec.ts │ │ │ │ │ ├── inbound-parse-queue.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── queue-base.service.ts │ │ │ │ │ ├── standard-queue.service.spec.ts │ │ │ │ │ ├── standard-queue.service.ts │ │ │ │ │ ├── subscriber-process-queue.service.ts │ │ │ │ │ ├── web-sockets-queue.service.spec.ts │ │ │ │ │ ├── web-sockets-queue.service.ts │ │ │ │ │ ├── workflow-queue.service.spec.ts │ │ │ │ │ └── workflow-queue.service.ts │ │ │ │ ├── readiness/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── readiness.service.spec.ts │ │ │ │ │ └── readiness.service.ts │ │ │ │ ├── resource-validator.service.ts │ │ │ │ ├── sanitize/ │ │ │ │ │ ├── sanitizer-v0.service.spec.ts │ │ │ │ │ ├── sanitizer-v0.service.ts │ │ │ │ │ ├── sanitizer.service.spec.ts │ │ │ │ │ └── sanitizer.service.ts │ │ │ │ ├── socket-worker/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── socket-worker.service.ts │ │ │ │ ├── sqs/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── sqs-consumer.service.ts │ │ │ │ │ ├── sqs-job-adapter.ts │ │ │ │ │ ├── sqs.service.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── storage/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── non-existing-file.error.ts │ │ │ │ │ ├── storage-helper.service.spec.ts │ │ │ │ │ ├── storage-helper.service.ts │ │ │ │ │ └── storage.service.ts │ │ │ │ ├── support.service.ts │ │ │ │ ├── throttle/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── redis-throttle.service.ts │ │ │ │ │ └── throttle.types.ts │ │ │ │ ├── verify-payload.service.ts │ │ │ │ ├── workers/ │ │ │ │ │ ├── active-jobs-metric-worker.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── standard-worker.service.ts │ │ │ │ │ ├── subscriber-process-worker.service.ts │ │ │ │ │ ├── web-sockets-worker.service.ts │ │ │ │ │ ├── worker-base.service.ts │ │ │ │ │ └── workflow-worker.service.ts │ │ │ │ ├── workflow-data.container.ts │ │ │ │ └── workflow-run.service.ts │ │ │ ├── tracing/ │ │ │ │ ├── index.ts │ │ │ │ ├── otel-init.ts │ │ │ │ ├── otel-wrapper.ts │ │ │ │ ├── tracing.module.ts │ │ │ │ └── tracing.service.ts │ │ │ ├── types/ │ │ │ │ ├── compile-context.ts │ │ │ │ ├── index.ts │ │ │ │ └── maily.types.ts │ │ │ ├── usecases/ │ │ │ │ ├── build-step-data/ │ │ │ │ │ ├── build-step-data.command.ts │ │ │ │ │ ├── build-step-data.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── build-step-issues/ │ │ │ │ │ ├── build-step-issues.command.ts │ │ │ │ │ ├── build-step-issues.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── build-variable-schema/ │ │ │ │ │ ├── build-available-variable-schema.command.ts │ │ │ │ │ ├── build-available-variable-schema.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── bulk-create-execution-details/ │ │ │ │ │ ├── bulk-create-execution-details.command.ts │ │ │ │ │ ├── bulk-create-execution-details.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── calculate-limit-novu-integration/ │ │ │ │ │ ├── calculate-limit-novu-integration.command.ts │ │ │ │ │ ├── calculate-limit-novu-integration.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── compile-email-template/ │ │ │ │ │ ├── compile-email-template.command.ts │ │ │ │ │ ├── compile-email-template.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── templates/ │ │ │ │ │ └── basic.handlebars │ │ │ │ ├── compile-in-app-template/ │ │ │ │ │ ├── compile-in-app-template.command.ts │ │ │ │ │ ├── compile-in-app-template.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── compile-step-template/ │ │ │ │ │ ├── compile-step-template.command.ts │ │ │ │ │ ├── compile-step-template.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── compile-template/ │ │ │ │ │ ├── compile-template.base.ts │ │ │ │ │ ├── compile-template.command.ts │ │ │ │ │ ├── compile-template.spec.ts │ │ │ │ │ ├── compile-template.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── conditions-filter/ │ │ │ │ │ ├── conditions-filter.command.ts │ │ │ │ │ ├── conditions-filter.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── create-change/ │ │ │ │ │ ├── create-change.command.ts │ │ │ │ │ ├── create-change.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── create-execution-details/ │ │ │ │ │ ├── create-execution-details.command.ts │ │ │ │ │ ├── create-execution-details.spec.ts │ │ │ │ │ ├── create-execution-details.usecase.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── execution-details-response.dto.ts │ │ │ │ │ │ ├── execution-details.dto.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types/ │ │ │ │ │ └── index.ts │ │ │ │ ├── create-notification-jobs/ │ │ │ │ │ ├── create-notification-jobs.command.ts │ │ │ │ │ ├── create-notification-jobs.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── create-or-update-subscriber/ │ │ │ │ │ ├── create-or-update-subscriber.command.ts │ │ │ │ │ ├── create-or-update-subscriber.spec.ts │ │ │ │ │ ├── create-or-update-subscriber.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── create-tenant/ │ │ │ │ │ ├── create-tenant.command.ts │ │ │ │ │ ├── create-tenant.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── create-variables-object/ │ │ │ │ │ ├── create-variables-object.command.ts │ │ │ │ │ ├── create-variables-object.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── create-workflow-v0/ │ │ │ │ │ ├── create-workflow.command.ts │ │ │ │ │ ├── create-workflow.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── delete-preferences/ │ │ │ │ │ ├── delete-preferences.command.ts │ │ │ │ │ ├── delete-preferences.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── digest-filter-steps/ │ │ │ │ │ ├── digest-filter-steps.command.ts │ │ │ │ │ ├── digest-filter-steps.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── disconnect-step-resolver/ │ │ │ │ │ ├── disconnect-step-resolver.command.ts │ │ │ │ │ ├── disconnect-step-resolver.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── execute-bridge-request/ │ │ │ │ │ ├── execute-bridge-request.command.ts │ │ │ │ │ ├── execute-bridge-request.usecase.ts │ │ │ │ │ ├── execute-framework-request.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── execute-step-resolver/ │ │ │ │ │ ├── execute-step-resolver-request.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-active-integration/ │ │ │ │ │ ├── get-active-integration.command.ts │ │ │ │ │ ├── get-active-integration.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-decrypted-integrations/ │ │ │ │ │ ├── get-decrypted-integrations.command.ts │ │ │ │ │ ├── get-decrypted-integrations.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-decrypted-secret-key/ │ │ │ │ │ ├── get-decrypted-secret-key.command.ts │ │ │ │ │ ├── get-decrypted-secret-key.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-environment-tags/ │ │ │ │ │ ├── get-environment-tags.command.ts │ │ │ │ │ ├── get-environment-tags.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-layout-v0/ │ │ │ │ │ ├── get-layout.command.ts │ │ │ │ │ ├── get-layout.use-case.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── layout.dto.ts │ │ │ │ ├── get-layout-v2/ │ │ │ │ │ ├── get-layout.command.ts │ │ │ │ │ ├── get-layout.use-case.spec.ts │ │ │ │ │ ├── get-layout.use-case.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── mapper.ts │ │ │ │ ├── get-novu-layout/ │ │ │ │ │ ├── get-novu-layout.command.ts │ │ │ │ │ ├── get-novu-layout.spec.ts │ │ │ │ │ ├── get-novu-layout.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── templates/ │ │ │ │ │ └── layout.handlebars │ │ │ │ ├── get-novu-provider-credentials/ │ │ │ │ │ ├── get-novu-provider-credentials.command.ts │ │ │ │ │ ├── get-novu-provider-credentials.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-preferences/ │ │ │ │ │ ├── get-preferences.command.ts │ │ │ │ │ ├── get-preferences.dto.ts │ │ │ │ │ ├── get-preferences.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-subscriber-schedule/ │ │ │ │ │ ├── get-subscriber-schedule.command.ts │ │ │ │ │ ├── get-subscriber-schedule.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-subscriber-template-preference/ │ │ │ │ │ ├── get-subscriber-template-preference.command.ts │ │ │ │ │ ├── get-subscriber-template-preference.usecase.spec.ts │ │ │ │ │ ├── get-subscriber-template-preference.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-tenant/ │ │ │ │ │ ├── get-tenant.command.ts │ │ │ │ │ ├── get-tenant.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-topic-subscribers/ │ │ │ │ │ ├── get-topic-subscribers.command.ts │ │ │ │ │ ├── get-topic-subscribers.use-case.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-workflow/ │ │ │ │ │ ├── get-workflow.command.ts │ │ │ │ │ ├── get-workflow.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── get-workflow-with-preferences/ │ │ │ │ │ ├── get-workflow-with-preferences.command.ts │ │ │ │ │ ├── get-workflow-with-preferences.usecase.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── layout-variables-schema/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── layout-variables-schema.command.ts │ │ │ │ │ └── layout-variables-schema.usecase.ts │ │ │ │ ├── merge-preferences/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── merge-preferences.command.ts │ │ │ │ │ ├── merge-preferences.spec.ts │ │ │ │ │ └── merge-preferences.usecase.ts │ │ │ │ ├── message-template/ │ │ │ │ │ ├── create-message-template/ │ │ │ │ │ │ ├── create-message-template.command.ts │ │ │ │ │ │ ├── create-message-template.spec.ts │ │ │ │ │ │ ├── create-message-template.usecase.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── delete-message-template/ │ │ │ │ │ │ ├── delete-message-template.command.ts │ │ │ │ │ │ └── delete-message-template.usecase.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── shared.ts │ │ │ │ │ └── update-message-template/ │ │ │ │ │ ├── update-message-template.command.ts │ │ │ │ │ └── update-message-template.usecase.ts │ │ │ │ ├── normalize-variables/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── normalize-variables.command.ts │ │ │ │ │ └── normalize-variables.usecase.ts │ │ │ │ ├── preview/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preview.command.ts │ │ │ │ │ ├── preview.constants.ts │ │ │ │ │ ├── preview.types.ts │ │ │ │ │ ├── preview.usecase.ts │ │ │ │ │ ├── services/ │ │ │ │ │ │ ├── mock-data-generator.service.ts │ │ │ │ │ │ ├── payload-merger.service.ts │ │ │ │ │ │ └── preview-payload-processor.service.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── preview-error-handler.ts │ │ │ │ │ └── variable-helpers.ts │ │ │ │ ├── preview-step/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preview-step.command.ts │ │ │ │ │ └── preview-step.usecase.ts │ │ │ │ ├── process-tenant/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── process-tenant.command.ts │ │ │ │ │ └── process-tenant.usecase.ts │ │ │ │ ├── promote-type-change.command.ts │ │ │ │ ├── select-integration/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── select-integration.command.ts │ │ │ │ │ ├── select-integration.spec.ts │ │ │ │ │ └── select-integration.usecase.ts │ │ │ │ ├── select-variant/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── select-variant.command.ts │ │ │ │ │ ├── select-variant.spec.ts │ │ │ │ │ └── select-variant.usecase.ts │ │ │ │ ├── subscribers/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── update-subscriber-channel/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-subscriber-channel.command.ts │ │ │ │ │ └── update-subscriber-channel.usecase.ts │ │ │ │ ├── tier-restrictions-validate/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tier-restrictions-validate.command.ts │ │ │ │ │ ├── tier-restrictions-validate.response.ts │ │ │ │ │ └── tier-restrictions-validate.usecase.ts │ │ │ │ ├── trigger-base/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── trigger-base.usecase.ts │ │ │ │ ├── trigger-broadcast/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── trigger-broadcast.command.ts │ │ │ │ │ └── trigger-broadcast.usecase.ts │ │ │ │ ├── trigger-event/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── trigger-event.command.ts │ │ │ │ │ └── trigger-event.usecase.ts │ │ │ │ ├── trigger-multicast/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── trigger-multicast.command.ts │ │ │ │ │ └── trigger-multicast.usecase.ts │ │ │ │ ├── update-change/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-change.command.ts │ │ │ │ │ └── update-change.usecase.ts │ │ │ │ ├── update-subscriber/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-subscriber.command.ts │ │ │ │ │ ├── update-subscriber.spec.ts │ │ │ │ │ └── update-subscriber.usecase.ts │ │ │ │ ├── update-tenant/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-tenant.command.ts │ │ │ │ │ └── update-tenant.usecase.ts │ │ │ │ ├── update-workflow-v0/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-workflow.command.ts │ │ │ │ │ └── update-workflow.usecase.ts │ │ │ │ ├── upsert-control-values/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── upsert-control-values.command.ts │ │ │ │ │ └── upsert-control-values.usecase.ts │ │ │ │ ├── upsert-preferences/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── upsert-preferences.command.ts │ │ │ │ │ ├── upsert-preferences.usecase.ts │ │ │ │ │ ├── upsert-subscriber-global-preferences.command.ts │ │ │ │ │ ├── upsert-subscriber-workflow-preferences.command.ts │ │ │ │ │ ├── upsert-user-workflow-preferences.command.ts │ │ │ │ │ └── upsert-workflow-preferences.command.ts │ │ │ │ ├── upsert-workflow/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── upsert-workflow.command.ts │ │ │ │ │ └── upsert-workflow.usecase.ts │ │ │ │ ├── verify-payload/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── verify-payload.command.ts │ │ │ │ │ ├── verify-payload.spec.ts │ │ │ │ │ └── verify-payload.usecase.ts │ │ │ │ └── workflow/ │ │ │ │ ├── get-workflow-by-ids/ │ │ │ │ │ ├── get-workflow-by-ids.command.ts │ │ │ │ │ └── get-workflow-by-ids.usecase.ts │ │ │ │ └── index.ts │ │ │ ├── utils/ │ │ │ │ ├── base62/ │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── base62-alphabet.const.ts │ │ │ │ │ ├── base62.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── bridge.ts │ │ │ │ ├── build-slug.ts │ │ │ │ ├── build-variables.ts │ │ │ │ ├── buildBridgeEndpointUrl.ts │ │ │ │ ├── compute-workflow-status.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── create-schema.ts │ │ │ │ ├── deepmerge.ts │ │ │ │ ├── digest.ts │ │ │ │ ├── duration-utils.spec.ts │ │ │ │ ├── duration-utils.ts │ │ │ │ ├── email-normalization.ts │ │ │ │ ├── exceptions.ts │ │ │ │ ├── filter-processing-details.ts │ │ │ │ ├── filter.ts │ │ │ │ ├── generate-id.ts │ │ │ │ ├── generate-payload-example.ts │ │ │ │ ├── hmac.ts │ │ │ │ ├── html.ts │ │ │ │ ├── index.ts │ │ │ │ ├── issues.ts │ │ │ │ ├── json-schema-mock.ts │ │ │ │ ├── json-schema-utils.spec.ts │ │ │ │ ├── json-schema-utils.ts │ │ │ │ ├── jsonToSchema.ts │ │ │ │ ├── maily-utils.ts │ │ │ │ ├── map-step-type-to-result.mapper.ts │ │ │ │ ├── notification-template-mapper.ts │ │ │ │ ├── novu-integrations.ts │ │ │ │ ├── object.ts │ │ │ │ ├── parse-payload-schema.ts │ │ │ │ ├── parse-step-variables.ts │ │ │ │ ├── prettify.type.ts │ │ │ │ ├── sanitize-control-values.ts │ │ │ │ ├── ssrf-url-validation.ts │ │ │ │ ├── step-resolver-control-state.ts │ │ │ │ ├── step-type-to-control.mapper.ts │ │ │ │ ├── subscriber.ts │ │ │ │ ├── subscribers.utils.ts │ │ │ │ ├── subscription.ts │ │ │ │ ├── template-parser/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── liquid-engine.ts │ │ │ │ │ ├── new-liquid-parser.spec.ts │ │ │ │ │ ├── new-liquid-parser.ts │ │ │ │ │ ├── parser-utils.spec.ts │ │ │ │ │ ├── parser-utils.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── timestamp-hex.ts │ │ │ │ └── variants/ │ │ │ │ ├── index.ts │ │ │ │ ├── isVariantEmpty.spec.ts │ │ │ │ ├── isVariantEmpty.ts │ │ │ │ └── normalizeVariantDefault.ts │ │ │ ├── value-objects/ │ │ │ │ ├── content.issue.ts │ │ │ │ ├── i-step.control.ts │ │ │ │ ├── index.ts │ │ │ │ ├── json-schema.ts │ │ │ │ ├── message.filter.ts │ │ │ │ ├── notification-step-variant.command.ts │ │ │ │ ├── notification.step.ts │ │ │ │ ├── step.issue.ts │ │ │ │ └── step.issues.ts │ │ │ └── webhooks/ │ │ │ ├── dtos/ │ │ │ │ ├── index.ts │ │ │ │ ├── message-webhook.response.dto.ts │ │ │ │ └── webhook-payload.dto.ts │ │ │ ├── index.ts │ │ │ ├── mappers/ │ │ │ │ ├── index.ts │ │ │ │ └── message.mapper.ts │ │ │ ├── services/ │ │ │ │ ├── index.ts │ │ │ │ └── svix-provider.service.ts │ │ │ ├── usecases/ │ │ │ │ ├── index.ts │ │ │ │ └── send-webhook-message/ │ │ │ │ ├── index.ts │ │ │ │ ├── send-webhook-message.command.ts │ │ │ │ └── send-webhook-message.usecase.ts │ │ │ └── utils/ │ │ │ ├── app-id.ts │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsconfig.module.json │ ├── automation/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── .verdaccio/ │ │ │ └── config.yml │ │ ├── .vscode/ │ │ │ └── extensions.json │ │ ├── README.md │ │ ├── generators.json │ │ ├── nx.json │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ └── generators/ │ │ │ └── provider/ │ │ │ ├── files/ │ │ │ │ ├── __name__.provider.ts.template │ │ │ │ └── __name__.test.provider.spec.ts.template │ │ │ ├── generator.ts │ │ │ ├── schema.json │ │ │ └── schema.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── dal/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── dal.service.ts │ │ │ ├── index.ts │ │ │ ├── repositories/ │ │ │ │ ├── ai-chat/ │ │ │ │ │ ├── ai-chat.entity.ts │ │ │ │ │ ├── ai-chat.repository.ts │ │ │ │ │ ├── ai-chat.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── base-repository-v2.ts │ │ │ │ ├── base-repository.ts │ │ │ │ ├── change/ │ │ │ │ │ ├── change.entity.ts │ │ │ │ │ ├── change.repository.ts │ │ │ │ │ ├── change.schema.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── channel-connection/ │ │ │ │ │ ├── channel-connection.entity.ts │ │ │ │ │ ├── channel-connection.repository.ts │ │ │ │ │ ├── channel-connection.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── channel-endpoint/ │ │ │ │ │ ├── channel-endpoint.entity.ts │ │ │ │ │ ├── channel-endpoint.repository.ts │ │ │ │ │ ├── channel-endpoint.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── context/ │ │ │ │ │ ├── context.entity.ts │ │ │ │ │ ├── context.repository.ts │ │ │ │ │ ├── context.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── control-values/ │ │ │ │ │ ├── control-values.entity.ts │ │ │ │ │ ├── control-values.repository.ts │ │ │ │ │ ├── control-values.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── environment/ │ │ │ │ │ ├── environment.entity.ts │ │ │ │ │ ├── environment.repository.ts │ │ │ │ │ ├── environment.schema.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── environment-variable/ │ │ │ │ │ ├── environment-variable.entity.ts │ │ │ │ │ ├── environment-variable.repository.ts │ │ │ │ │ ├── environment-variable.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── execution-details/ │ │ │ │ │ ├── execution-details.entity.ts │ │ │ │ │ ├── execution-details.repository.ts │ │ │ │ │ ├── execution-details.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── feed/ │ │ │ │ │ ├── feed.entity.ts │ │ │ │ │ ├── feed.repository.ts │ │ │ │ │ ├── feed.schema.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── integration/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── integration.entity.ts │ │ │ │ │ ├── integration.repository.ts │ │ │ │ │ └── integration.schema.ts │ │ │ │ ├── job/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── job.entity.ts │ │ │ │ │ ├── job.repository.ts │ │ │ │ │ └── job.schema.ts │ │ │ │ ├── layout/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── layout.entity.ts │ │ │ │ │ ├── layout.repository.ts │ │ │ │ │ ├── layout.schema.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── localization/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── localization.entity.ts │ │ │ │ │ ├── localization.repository.ts │ │ │ │ │ └── localization.schema.ts │ │ │ │ ├── localization-group/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── localization-group.entity.ts │ │ │ │ │ ├── localization-group.repository.ts │ │ │ │ │ └── localization-group.schema.ts │ │ │ │ ├── member/ │ │ │ │ │ ├── community.member.repository.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── member-repository.interface.ts │ │ │ │ │ ├── member.entity.ts │ │ │ │ │ ├── member.repository.ts │ │ │ │ │ └── member.schema.ts │ │ │ │ ├── message/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message.entity.ts │ │ │ │ │ ├── message.repository.ts │ │ │ │ │ └── message.schema.ts │ │ │ │ ├── message-template/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message-template.entity.ts │ │ │ │ │ ├── message-template.repository.ts │ │ │ │ │ ├── message-template.schema.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── notification/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification.entity.ts │ │ │ │ │ ├── notification.feed.Item.entity.ts │ │ │ │ │ ├── notification.repository.ts │ │ │ │ │ └── notification.schema.ts │ │ │ │ ├── notification-group/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification-group.entity.ts │ │ │ │ │ ├── notification-group.repository.ts │ │ │ │ │ └── notification-group.schema.ts │ │ │ │ ├── notification-template/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification-template.entity.ts │ │ │ │ │ ├── notification-template.repository.ts │ │ │ │ │ └── notification-template.schema.ts │ │ │ │ ├── organization/ │ │ │ │ │ ├── community.organization.repository.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── organization-repository.interface.ts │ │ │ │ │ ├── organization.entity.ts │ │ │ │ │ ├── organization.repository.ts │ │ │ │ │ ├── organization.schema.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── preferences/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preferences.entity.ts │ │ │ │ │ ├── preferences.repository.ts │ │ │ │ │ └── preferences.schema.ts │ │ │ │ ├── projection.types.ts │ │ │ │ ├── schema-default.options.ts │ │ │ │ ├── snapshot/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── snapshot.entity.ts │ │ │ │ │ ├── snapshot.repository.ts │ │ │ │ │ └── snapshot.schema.ts │ │ │ │ ├── subscriber/ │ │ │ │ │ ├── bulk.create.subscriber.entity.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── subscriber.entity.ts │ │ │ │ │ ├── subscriber.repository.ts │ │ │ │ │ ├── subscriber.schema.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── tenant/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tenant.entity.ts │ │ │ │ │ ├── tenant.repository.ts │ │ │ │ │ ├── tenant.schema.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── topic/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── topic-subscribers.entity.ts │ │ │ │ │ ├── topic-subscribers.repository.ts │ │ │ │ │ ├── topic-subscribers.schema.ts │ │ │ │ │ ├── topic.entity.ts │ │ │ │ │ ├── topic.repository.ts │ │ │ │ │ ├── topic.schema.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── translation-group/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── translation-group.entity.ts │ │ │ │ │ ├── translation-group.repository.ts │ │ │ │ │ └── translation-group.schema.ts │ │ │ │ ├── translations/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── translation.entity.ts │ │ │ │ │ ├── translation.repository.ts │ │ │ │ │ └── translation.schema.ts │ │ │ │ ├── user/ │ │ │ │ │ ├── community.user.repository.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── user-repository.interface.ts │ │ │ │ │ ├── user.entity.ts │ │ │ │ │ ├── user.repository.ts │ │ │ │ │ └── user.schema.ts │ │ │ │ └── workflow-override/ │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── workflow-override.entity.ts │ │ │ │ ├── workflow-override.repository.ts │ │ │ │ └── workflow-override.schema.ts │ │ │ ├── shared/ │ │ │ │ ├── consts/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ttl.ts │ │ │ │ ├── exceptions/ │ │ │ │ │ ├── dal.exception.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── types/ │ │ │ │ ├── index.ts │ │ │ │ └── index.type.ts │ │ │ └── types/ │ │ │ ├── auth.ts │ │ │ ├── enforce.ts │ │ │ ├── env.d.ts │ │ │ ├── error.enum.ts │ │ │ ├── helpers.ts │ │ │ ├── index.ts │ │ │ ├── results.ts │ │ │ └── sort-order.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── internal-sdk/ │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .speakeasy/ │ │ │ ├── gen.yaml │ │ │ ├── speakeasy-modifications-overlay.yaml │ │ │ └── workflow.yaml │ │ ├── CONTRIBUTING.md │ │ ├── RUNTIMES.md │ │ ├── eslint.config.mjs │ │ ├── examples/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── trigger.example.ts │ │ ├── jsr.json │ │ ├── package.json │ │ ├── postman/ │ │ │ ├── .gitignore │ │ │ └── novu_api_postman_collection.json │ │ ├── project.json │ │ ├── sources/ │ │ │ └── temp.json │ │ ├── src/ │ │ │ ├── core.ts │ │ │ ├── funcs/ │ │ │ │ ├── activityChartsRetrieve.ts │ │ │ │ ├── activityRequestsList.ts │ │ │ │ ├── activityRequestsRetrieve.ts │ │ │ │ ├── activityTrack.ts │ │ │ │ ├── activityWorkflowRunsList.ts │ │ │ │ ├── activityWorkflowRunsRetrieve.ts │ │ │ │ ├── cancel.ts │ │ │ │ ├── channelConnectionsCreate.ts │ │ │ │ ├── channelConnectionsDelete.ts │ │ │ │ ├── channelConnectionsList.ts │ │ │ │ ├── channelConnectionsRetrieve.ts │ │ │ │ ├── channelConnectionsUpdate.ts │ │ │ │ ├── channelEndpointsCreate.ts │ │ │ │ ├── channelEndpointsDelete.ts │ │ │ │ ├── channelEndpointsList.ts │ │ │ │ ├── channelEndpointsRetrieve.ts │ │ │ │ ├── channelEndpointsUpdate.ts │ │ │ │ ├── contextsCreate.ts │ │ │ │ ├── contextsDelete.ts │ │ │ │ ├── contextsList.ts │ │ │ │ ├── contextsRetrieve.ts │ │ │ │ ├── contextsUpdate.ts │ │ │ │ ├── environmentVariablesCreate.ts │ │ │ │ ├── environmentVariablesDelete.ts │ │ │ │ ├── environmentVariablesList.ts │ │ │ │ ├── environmentVariablesRetrieve.ts │ │ │ │ ├── environmentVariablesUpdate.ts │ │ │ │ ├── environmentVariablesUsage.ts │ │ │ │ ├── environmentsCreate.ts │ │ │ │ ├── environmentsDelete.ts │ │ │ │ ├── environmentsDiff.ts │ │ │ │ ├── environmentsGetTags.ts │ │ │ │ ├── environmentsList.ts │ │ │ │ ├── environmentsPublish.ts │ │ │ │ ├── environmentsUpdate.ts │ │ │ │ ├── integrationsCreate.ts │ │ │ │ ├── integrationsDelete.ts │ │ │ │ ├── integrationsGenerateChatOAuthUrl.ts │ │ │ │ ├── integrationsIntegrationsControllerAutoConfigureIntegration.ts │ │ │ │ ├── integrationsList.ts │ │ │ │ ├── integrationsListActive.ts │ │ │ │ ├── integrationsSetAsPrimary.ts │ │ │ │ ├── integrationsUpdate.ts │ │ │ │ ├── layoutsCreate.ts │ │ │ │ ├── layoutsDelete.ts │ │ │ │ ├── layoutsDuplicate.ts │ │ │ │ ├── layoutsGeneratePreview.ts │ │ │ │ ├── layoutsList.ts │ │ │ │ ├── layoutsRetrieve.ts │ │ │ │ ├── layoutsUpdate.ts │ │ │ │ ├── layoutsUsage.ts │ │ │ │ ├── messagesDelete.ts │ │ │ │ ├── messagesDeleteByTransactionId.ts │ │ │ │ ├── messagesRetrieve.ts │ │ │ │ ├── notificationsList.ts │ │ │ │ ├── notificationsRetrieve.ts │ │ │ │ ├── subscribersCreate.ts │ │ │ │ ├── subscribersCreateBulk.ts │ │ │ │ ├── subscribersCredentialsAppend.ts │ │ │ │ ├── subscribersCredentialsDelete.ts │ │ │ │ ├── subscribersCredentialsUpdate.ts │ │ │ │ ├── subscribersDelete.ts │ │ │ │ ├── subscribersMessagesMarkAll.ts │ │ │ │ ├── subscribersMessagesMarkAllAs.ts │ │ │ │ ├── subscribersMessagesUpdateAsSeen.ts │ │ │ │ ├── subscribersNotificationsArchive.ts │ │ │ │ ├── subscribersNotificationsArchiveAll.ts │ │ │ │ ├── subscribersNotificationsArchiveAllRead.ts │ │ │ │ ├── subscribersNotificationsCompleteAction.ts │ │ │ │ ├── subscribersNotificationsCount.ts │ │ │ │ ├── subscribersNotificationsDelete.ts │ │ │ │ ├── subscribersNotificationsDeleteAll.ts │ │ │ │ ├── subscribersNotificationsFeed.ts │ │ │ │ ├── subscribersNotificationsList.ts │ │ │ │ ├── subscribersNotificationsMarkAllAsRead.ts │ │ │ │ ├── subscribersNotificationsMarkAsRead.ts │ │ │ │ ├── subscribersNotificationsMarkAsSeen.ts │ │ │ │ ├── subscribersNotificationsMarkAsUnread.ts │ │ │ │ ├── subscribersNotificationsRevertAction.ts │ │ │ │ ├── subscribersNotificationsSnooze.ts │ │ │ │ ├── subscribersNotificationsUnarchive.ts │ │ │ │ ├── subscribersNotificationsUnseenCount.ts │ │ │ │ ├── subscribersNotificationsUnsnooze.ts │ │ │ │ ├── subscribersPatch.ts │ │ │ │ ├── subscribersPreferencesBulkUpdate.ts │ │ │ │ ├── subscribersPreferencesList.ts │ │ │ │ ├── subscribersPreferencesUpdate.ts │ │ │ │ ├── subscribersPropertiesUpdateOnlineFlag.ts │ │ │ │ ├── subscribersRetrieve.ts │ │ │ │ ├── subscribersSearch.ts │ │ │ │ ├── subscribersTopicsList.ts │ │ │ │ ├── topicsCreate.ts │ │ │ │ ├── topicsDelete.ts │ │ │ │ ├── topicsGet.ts │ │ │ │ ├── topicsList.ts │ │ │ │ ├── topicsSubscribersRetrieve.ts │ │ │ │ ├── topicsSubscriptionsCreate.ts │ │ │ │ ├── topicsSubscriptionsDelete.ts │ │ │ │ ├── topicsSubscriptionsGetSubscription.ts │ │ │ │ ├── topicsSubscriptionsList.ts │ │ │ │ ├── topicsSubscriptionsUpdate.ts │ │ │ │ ├── topicsUpdate.ts │ │ │ │ ├── translationsCreate.ts │ │ │ │ ├── translationsDelete.ts │ │ │ │ ├── translationsGroupsDelete.ts │ │ │ │ ├── translationsGroupsRetrieve.ts │ │ │ │ ├── translationsMasterImport.ts │ │ │ │ ├── translationsMasterRetrieve.ts │ │ │ │ ├── translationsMasterUpload.ts │ │ │ │ ├── translationsRetrieve.ts │ │ │ │ ├── translationsUpload.ts │ │ │ │ ├── trigger.ts │ │ │ │ ├── triggerBroadcast.ts │ │ │ │ ├── triggerBulk.ts │ │ │ │ ├── workflowsCreate.ts │ │ │ │ ├── workflowsDelete.ts │ │ │ │ ├── workflowsDuplicate.ts │ │ │ │ ├── workflowsGet.ts │ │ │ │ ├── workflowsList.ts │ │ │ │ ├── workflowsPatch.ts │ │ │ │ ├── workflowsStepsGeneratePreview.ts │ │ │ │ ├── workflowsStepsRetrieve.ts │ │ │ │ ├── workflowsSync.ts │ │ │ │ └── workflowsUpdate.ts │ │ │ ├── hooks/ │ │ │ │ ├── hooks.ts │ │ │ │ ├── index.ts │ │ │ │ ├── novu-custom-hook.ts │ │ │ │ ├── registration.ts │ │ │ │ └── types.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── base64.ts │ │ │ │ ├── config.ts │ │ │ │ ├── dlv.ts │ │ │ │ ├── encodings.ts │ │ │ │ ├── files.ts │ │ │ │ ├── http.ts │ │ │ │ ├── is-plain-object.ts │ │ │ │ ├── logger.ts │ │ │ │ ├── matchers.ts │ │ │ │ ├── primitives.ts │ │ │ │ ├── retries.ts │ │ │ │ ├── schemas.ts │ │ │ │ ├── sdks.ts │ │ │ │ ├── security.ts │ │ │ │ └── url.ts │ │ │ ├── models/ │ │ │ │ ├── components/ │ │ │ │ │ ├── actiondto.ts │ │ │ │ │ ├── activitiesresponsedto.ts │ │ │ │ │ ├── activitynotificationexecutiondetailresponsedto.ts │ │ │ │ │ ├── activitynotificationjobresponsedto.ts │ │ │ │ │ ├── activitynotificationresponsedto.ts │ │ │ │ │ ├── activitynotificationstepresponsedto.ts │ │ │ │ │ ├── activitynotificationsubscriberresponsedto.ts │ │ │ │ │ ├── activitynotificationtemplateresponsedto.ts │ │ │ │ │ ├── activitytopicdto.ts │ │ │ │ │ ├── actorfeeditemdto.ts │ │ │ │ │ ├── actortypeenum.ts │ │ │ │ │ ├── apikeydto.ts │ │ │ │ │ ├── authdto.ts │ │ │ │ │ ├── autoconfigureintegrationresponsedto.ts │ │ │ │ │ ├── bridgeconfigurationdto.ts │ │ │ │ │ ├── builderfieldtypeenum.ts │ │ │ │ │ ├── bulkcreatesubscriberresponsedto.ts │ │ │ │ │ ├── bulksubscribercreatedto.ts │ │ │ │ │ ├── bulktriggereventdto.ts │ │ │ │ │ ├── bulkupdatesubscriberpreferenceitemdto.ts │ │ │ │ │ ├── bulkupdatesubscriberpreferencesdto.ts │ │ │ │ │ ├── buttontypeenum.ts │ │ │ │ │ ├── channelcredentials.ts │ │ │ │ │ ├── channelcredentialsdto.ts │ │ │ │ │ ├── channelctatypeenum.ts │ │ │ │ │ ├── channelpreferencedto.ts │ │ │ │ │ ├── channelsettingsdto.ts │ │ │ │ │ ├── channeltypeenum.ts │ │ │ │ │ ├── chatcontroldto.ts │ │ │ │ │ ├── chatcontrolsmetadataresponsedto.ts │ │ │ │ │ ├── chatorpushproviderenum.ts │ │ │ │ │ ├── chatrenderoutput.ts │ │ │ │ │ ├── chatstepresponsedto.ts │ │ │ │ │ ├── chatstepupsertdto.ts │ │ │ │ │ ├── configurationsdto.ts │ │ │ │ │ ├── constraintvalidation.ts │ │ │ │ │ ├── contentissueenum.ts │ │ │ │ │ ├── controlsmetadatadto.ts │ │ │ │ │ ├── createchannelconnectionrequestdto.ts │ │ │ │ │ ├── createcontextrequestdto.ts │ │ │ │ │ ├── createdsubscriberdto.ts │ │ │ │ │ ├── createenvironmentrequestdto.ts │ │ │ │ │ ├── createenvironmentvariablerequestdto.ts │ │ │ │ │ ├── createintegrationrequestdto.ts │ │ │ │ │ ├── createlayoutdto.ts │ │ │ │ │ ├── createmsteamschannelendpointdto.ts │ │ │ │ │ ├── createmsteamsuserendpointdto.ts │ │ │ │ │ ├── createphoneendpointdto.ts │ │ │ │ │ ├── createslackchannelendpointdto.ts │ │ │ │ │ ├── createslackuserendpointdto.ts │ │ │ │ │ ├── createsubscriberrequestdto.ts │ │ │ │ │ ├── createsubscriptionsresponsedto.ts │ │ │ │ │ ├── createtopicsubscriptionsrequestdto.ts │ │ │ │ │ ├── createtranslationrequestdto.ts │ │ │ │ │ ├── createupdatetopicrequestdto.ts │ │ │ │ │ ├── createwebhookendpointdto.ts │ │ │ │ │ ├── createworkflowdto.ts │ │ │ │ │ ├── credentialsdto.ts │ │ │ │ │ ├── customcontroldto.ts │ │ │ │ │ ├── customcontrolsmetadataresponsedto.ts │ │ │ │ │ ├── customstepresponsedto.ts │ │ │ │ │ ├── customstepupsertdto.ts │ │ │ │ │ ├── delaycontroldto.ts │ │ │ │ │ ├── delaycontrolsmetadataresponsedto.ts │ │ │ │ │ ├── delayregularmetadata.ts │ │ │ │ │ ├── delayscheduledmetadata.ts │ │ │ │ │ ├── delaystepresponsedto.ts │ │ │ │ │ ├── delaystepupsertdto.ts │ │ │ │ │ ├── deletemessageresponsedto.ts │ │ │ │ │ ├── deletetopicresponsedto.ts │ │ │ │ │ ├── deletetopicsubscriberidentifierdto.ts │ │ │ │ │ ├── deletetopicsubscriptionsrequestdto.ts │ │ │ │ │ ├── deletetopicsubscriptionsresponsedto.ts │ │ │ │ │ ├── dependencyreasonenum.ts │ │ │ │ │ ├── diffactionenum.ts │ │ │ │ │ ├── diffenvironmentrequestdto.ts │ │ │ │ │ ├── diffenvironmentresponsedto.ts │ │ │ │ │ ├── diffsummarydto.ts │ │ │ │ │ ├── digestcontroldto.ts │ │ │ │ │ ├── digestcontrolsmetadataresponsedto.ts │ │ │ │ │ ├── digestmetadatadto.ts │ │ │ │ │ ├── digestregularmetadata.ts │ │ │ │ │ ├── digestregularoutput.ts │ │ │ │ │ ├── digeststepresponsedto.ts │ │ │ │ │ ├── digeststepupsertdto.ts │ │ │ │ │ ├── digesttimedconfigdto.ts │ │ │ │ │ ├── digesttimedmetadata.ts │ │ │ │ │ ├── digesttypeenum.ts │ │ │ │ │ ├── digestunitenum.ts │ │ │ │ │ ├── directionenum.ts │ │ │ │ │ ├── duplicatelayoutdto.ts │ │ │ │ │ ├── duplicateworkflowdto.ts │ │ │ │ │ ├── emailblock.ts │ │ │ │ │ ├── emailblockstyles.ts │ │ │ │ │ ├── emailblocktypeenum.ts │ │ │ │ │ ├── emailchanneloverrides.ts │ │ │ │ │ ├── emailcontroldto.ts │ │ │ │ │ ├── emailcontrolsdto.ts │ │ │ │ │ ├── emailcontrolsmetadataresponsedto.ts │ │ │ │ │ ├── emaillayoutrenderoutput.ts │ │ │ │ │ ├── emailrenderoutput.ts │ │ │ │ │ ├── emailstepresponsedto.ts │ │ │ │ │ ├── emailstepupsertdto.ts │ │ │ │ │ ├── environmentdiffsummarydto.ts │ │ │ │ │ ├── environmentresponsedto.ts │ │ │ │ │ ├── environmentvariableresponsedto.ts │ │ │ │ │ ├── environmentvariablevaluedto.ts │ │ │ │ │ ├── environmentvariablevalueresponsedto.ts │ │ │ │ │ ├── environmentvariableworkflowinfodto.ts │ │ │ │ │ ├── eventbody.ts │ │ │ │ │ ├── executiondetailssourceenum.ts │ │ │ │ │ ├── executiondetailsstatusenum.ts │ │ │ │ │ ├── failedoperationdto.ts │ │ │ │ │ ├── failedworkflowdto.ts │ │ │ │ │ ├── feedresponsedto.ts │ │ │ │ │ ├── fieldfilterpartdto.ts │ │ │ │ │ ├── generatechatoauthurlrequestdto.ts │ │ │ │ │ ├── generatechatoauthurlresponsedto.ts │ │ │ │ │ ├── generatelayoutpreviewresponsedto.ts │ │ │ │ │ ├── generatepreviewrequestdto.ts │ │ │ │ │ ├── generatepreviewresponsedto.ts │ │ │ │ │ ├── getchannelconnectionresponsedto.ts │ │ │ │ │ ├── getchannelendpointresponsedto.ts │ │ │ │ │ ├── getchartsresponsedto.ts │ │ │ │ │ ├── getcontextresponsedto.ts │ │ │ │ │ ├── getenvironmenttagsdto.ts │ │ │ │ │ ├── getenvironmentvariableusageresponsedto.ts │ │ │ │ │ ├── getlayoutusageresponsedto.ts │ │ │ │ │ ├── getmasterjsonresponsedto.ts │ │ │ │ │ ├── getpreferencesresponsedto.ts │ │ │ │ │ ├── getrequestresponsedto.ts │ │ │ │ │ ├── getrequestsresponsedto.ts │ │ │ │ │ ├── getsubscribernotificationscountresponsedto.ts │ │ │ │ │ ├── getsubscribernotificationsresponsedto.ts │ │ │ │ │ ├── getsubscriberpreferencesdto.ts │ │ │ │ │ ├── getworkflowrunresponsedto.ts │ │ │ │ │ ├── getworkflowrunsdto.ts │ │ │ │ │ ├── getworkflowrunsresponsedto.ts │ │ │ │ │ ├── grouppreferencefilterdetailsdto.ts │ │ │ │ │ ├── grouppreferencefilterdto.ts │ │ │ │ │ ├── httpmethodenum.ts │ │ │ │ │ ├── httprequestcontroldto.ts │ │ │ │ │ ├── httprequestcontrolsmetadataresponsedto.ts │ │ │ │ │ ├── httprequestkeyvaluepairdto.ts │ │ │ │ │ ├── httprequeststepresponsedto.ts │ │ │ │ │ ├── httprequeststepupsertdto.ts │ │ │ │ │ ├── importmasterjsonrequestdto.ts │ │ │ │ │ ├── importmasterjsonresponsedto.ts │ │ │ │ │ ├── inappcontroldto.ts │ │ │ │ │ ├── inappcontrolsmetadataresponsedto.ts │ │ │ │ │ ├── inapprenderoutput.ts │ │ │ │ │ ├── inappstepresponsedto.ts │ │ │ │ │ ├── inappstepupsertdto.ts │ │ │ │ │ ├── inboundparsedomaindto.ts │ │ │ │ │ ├── inboxactiondto.ts │ │ │ │ │ ├── inboxnotificationdto.ts │ │ │ │ │ ├── inboxsubscriberresponsedto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── integrationissueenum.ts │ │ │ │ │ ├── integrationresponsedto.ts │ │ │ │ │ ├── layoutcontrolsdto.ts │ │ │ │ │ ├── layoutcontrolvaluesdto.ts │ │ │ │ │ ├── layoutcreationsourceenum.ts │ │ │ │ │ ├── layoutpreviewpayloaddto.ts │ │ │ │ │ ├── layoutpreviewrequestdto.ts │ │ │ │ │ ├── layoutresponsedto.ts │ │ │ │ │ ├── layoutresponsedtosortfield.ts │ │ │ │ │ ├── listchannelconnectionsresponsedto.ts │ │ │ │ │ ├── listchannelendpointsresponsedto.ts │ │ │ │ │ ├── listcontextsresponsedto.ts │ │ │ │ │ ├── listlayoutresponsedto.ts │ │ │ │ │ ├── listsubscribersresponsedto.ts │ │ │ │ │ ├── listtopicsresponsedto.ts │ │ │ │ │ ├── listtopicsubscriptionsresponsedto.ts │ │ │ │ │ ├── listworkflowresponse.ts │ │ │ │ │ ├── lookbackwindowdto.ts │ │ │ │ │ ├── markallmessageasrequestdto.ts │ │ │ │ │ ├── markmessageactionasseendto.ts │ │ │ │ │ ├── marksubscribernotificationsasseendto.ts │ │ │ │ │ ├── messageaction.ts │ │ │ │ │ ├── messageactionresult.ts │ │ │ │ │ ├── messageactionstatusenum.ts │ │ │ │ │ ├── messagebutton.ts │ │ │ │ │ ├── messagecta.ts │ │ │ │ │ ├── messagectadata.ts │ │ │ │ │ ├── messagemarkasrequestdto.ts │ │ │ │ │ ├── messageresponsedto.ts │ │ │ │ │ ├── messagesresponsedto.ts │ │ │ │ │ ├── messagestatusenum.ts │ │ │ │ │ ├── messagetemplate.ts │ │ │ │ │ ├── messagetemplatedto.ts │ │ │ │ │ ├── metadto.ts │ │ │ │ │ ├── monthlytypeenum.ts │ │ │ │ │ ├── msteamschannelendpointdto.ts │ │ │ │ │ ├── msteamsuserendpointdto.ts │ │ │ │ │ ├── notificationfeeditemdto.ts │ │ │ │ │ ├── notificationgroup.ts │ │ │ │ │ ├── notificationstepdata.ts │ │ │ │ │ ├── notificationstepdto.ts │ │ │ │ │ ├── notificationtrigger.ts │ │ │ │ │ ├── notificationtriggerdto.ts │ │ │ │ │ ├── notificationtriggervariable.ts │ │ │ │ │ ├── notificationworkflowdto.ts │ │ │ │ │ ├── ordinalenum.ts │ │ │ │ │ ├── ordinalvalueenum.ts │ │ │ │ │ ├── patchpreferencechannelsdto.ts │ │ │ │ │ ├── patchsubscriberpreferencesdto.ts │ │ │ │ │ ├── patchsubscriberrequestdto.ts │ │ │ │ │ ├── patchworkflowdto.ts │ │ │ │ │ ├── payloadvalidationerrordto.ts │ │ │ │ │ ├── phoneendpointdto.ts │ │ │ │ │ ├── preferencelevelenum.ts │ │ │ │ │ ├── preferenceoverridesourceenum.ts │ │ │ │ │ ├── preferencesrequestdto.ts │ │ │ │ │ ├── previewerrordto.ts │ │ │ │ │ ├── previewpayloaddto.ts │ │ │ │ │ ├── providersidenum.ts │ │ │ │ │ ├── publishenvironmentrequestdto.ts │ │ │ │ │ ├── publishenvironmentresponsedto.ts │ │ │ │ │ ├── publishsummarydto.ts │ │ │ │ │ ├── pushcontroldto.ts │ │ │ │ │ ├── pushcontrolsmetadataresponsedto.ts │ │ │ │ │ ├── pushrenderoutput.ts │ │ │ │ │ ├── pushstepresponsedto.ts │ │ │ │ │ ├── pushstepupsertdto.ts │ │ │ │ │ ├── redirectdto.ts │ │ │ │ │ ├── removesubscriberresponsedto.ts │ │ │ │ │ ├── replycallback.ts │ │ │ │ │ ├── requestlogresponsedto.ts │ │ │ │ │ ├── resourcedependencydto.ts │ │ │ │ │ ├── resourcediffdto.ts │ │ │ │ │ ├── resourcediffresultdto.ts │ │ │ │ │ ├── resourceoriginenum.ts │ │ │ │ │ ├── resourcetopublishdto.ts │ │ │ │ │ ├── resourcetypeenum.ts │ │ │ │ │ ├── runtimeissuedto.ts │ │ │ │ │ ├── scheduledto.ts │ │ │ │ │ ├── security.ts │ │ │ │ │ ├── severitylevelenum.ts │ │ │ │ │ ├── skippedworkflowdto.ts │ │ │ │ │ ├── slackchannelendpointdto.ts │ │ │ │ │ ├── slackuserendpointdto.ts │ │ │ │ │ ├── smscontroldto.ts │ │ │ │ │ ├── smscontrolsmetadataresponsedto.ts │ │ │ │ │ ├── smsrenderoutput.ts │ │ │ │ │ ├── smsstepresponsedto.ts │ │ │ │ │ ├── smsstepupsertdto.ts │ │ │ │ │ ├── snoozesubscribernotificationdto.ts │ │ │ │ │ ├── stepcontentissuedto.ts │ │ │ │ │ ├── stepexecutiondetaildto.ts │ │ │ │ │ ├── stepfilterdto.ts │ │ │ │ │ ├── stepintegrationissue.ts │ │ │ │ │ ├── stepissuesdto.ts │ │ │ │ │ ├── steplistresponsedto.ts │ │ │ │ │ ├── stepresponsedto.ts │ │ │ │ │ ├── steprundto.ts │ │ │ │ │ ├── stepsoverrides.ts │ │ │ │ │ ├── subscriberchanneldto.ts │ │ │ │ │ ├── subscriberdto.ts │ │ │ │ │ ├── subscriberfeedresponsedto.ts │ │ │ │ │ ├── subscriberglobalpreferencedto.ts │ │ │ │ │ ├── subscriberpayloaddto.ts │ │ │ │ │ ├── subscriberpreferencechannels.ts │ │ │ │ │ ├── subscriberpreferenceoverridedto.ts │ │ │ │ │ ├── subscriberpreferencesworkflowinfodto.ts │ │ │ │ │ ├── subscriberresponsedto.ts │ │ │ │ │ ├── subscriberresponsedtooptional.ts │ │ │ │ │ ├── subscriberworkflowpreferencedto.ts │ │ │ │ │ ├── subscriptiondetailsresponsedto.ts │ │ │ │ │ ├── subscriptiondto.ts │ │ │ │ │ ├── subscriptionerrordto.ts │ │ │ │ │ ├── subscriptionpreferencedto.ts │ │ │ │ │ ├── subscriptionresponsedto.ts │ │ │ │ │ ├── subscriptionsdeleteerrordto.ts │ │ │ │ │ ├── syncactionenum.ts │ │ │ │ │ ├── syncedworkflowdto.ts │ │ │ │ │ ├── syncresultdto.ts │ │ │ │ │ ├── syncworkflowdto.ts │ │ │ │ │ ├── tenantpayloaddto.ts │ │ │ │ │ ├── textalignenum.ts │ │ │ │ │ ├── throttlecontroldto.ts │ │ │ │ │ ├── throttlecontrolsmetadataresponsedto.ts │ │ │ │ │ ├── throttlestepresponsedto.ts │ │ │ │ │ ├── throttlestepupsertdto.ts │ │ │ │ │ ├── timedconfig.ts │ │ │ │ │ ├── timerangedto.ts │ │ │ │ │ ├── timeunitenum.ts │ │ │ │ │ ├── topicdto.ts │ │ │ │ │ ├── topicpayloaddto.ts │ │ │ │ │ ├── topicresponsedto.ts │ │ │ │ │ ├── topicsubscriberdto.ts │ │ │ │ │ ├── topicsubscriberidentifierdto.ts │ │ │ │ │ ├── topicsubscriptionresponsedto.ts │ │ │ │ │ ├── traceresponsedto.ts │ │ │ │ │ ├── translationgroupdto.ts │ │ │ │ │ ├── translationresponsedto.ts │ │ │ │ │ ├── triggereventrequestdto.ts │ │ │ │ │ ├── triggereventresponsedto.ts │ │ │ │ │ ├── triggereventtoallrequestdto.ts │ │ │ │ │ ├── triggerrecipientstypeenum.ts │ │ │ │ │ ├── uicomponentenum.ts │ │ │ │ │ ├── uischema.ts │ │ │ │ │ ├── uischemagroupenum.ts │ │ │ │ │ ├── uischemaproperty.ts │ │ │ │ │ ├── unseencountresponse.ts │ │ │ │ │ ├── updateallsubscribernotificationsdto.ts │ │ │ │ │ ├── updatechannelconnectionrequestdto.ts │ │ │ │ │ ├── updatechannelendpointrequestdto.ts │ │ │ │ │ ├── updatecontextrequestdto.ts │ │ │ │ │ ├── updatedsubscriberdto.ts │ │ │ │ │ ├── updateenvironmentrequestdto.ts │ │ │ │ │ ├── updateenvironmentvariablerequestdto.ts │ │ │ │ │ ├── updateintegrationrequestdto.ts │ │ │ │ │ ├── updatelayoutdto.ts │ │ │ │ │ ├── updatesubscriberchannelrequestdto.ts │ │ │ │ │ ├── updatesubscriberonlineflagrequestdto.ts │ │ │ │ │ ├── updatetopicrequestdto.ts │ │ │ │ │ ├── updatetopicsubscriptionrequestdto.ts │ │ │ │ │ ├── updateworkflowdto.ts │ │ │ │ │ ├── uploadtranslationsresponsedto.ts │ │ │ │ │ ├── webhookendpointdto.ts │ │ │ │ │ ├── webhookresultdto.ts │ │ │ │ │ ├── workflowcreationsourceenum.ts │ │ │ │ │ ├── workflowinfodto.ts │ │ │ │ │ ├── workflowlistresponsedto.ts │ │ │ │ │ ├── workflowpreferencedto.ts │ │ │ │ │ ├── workflowpreferencerequestdto.ts │ │ │ │ │ ├── workflowpreferencesdto.ts │ │ │ │ │ ├── workflowpreferencesresponsedto.ts │ │ │ │ │ ├── workflowresponse.ts │ │ │ │ │ ├── workflowresponsedto.ts │ │ │ │ │ ├── workflowresponsedtosortfield.ts │ │ │ │ │ ├── workflowrunstepsdetailsdto.ts │ │ │ │ │ ├── workflowstatusenum.ts │ │ │ │ │ └── workspacedto.ts │ │ │ │ ├── errors/ │ │ │ │ │ ├── errordto.ts │ │ │ │ │ ├── httpclienterrors.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── novuerror.ts │ │ │ │ │ ├── payloadvalidationexceptiondto.ts │ │ │ │ │ ├── responsevalidationerror.ts │ │ │ │ │ ├── sdkerror.ts │ │ │ │ │ ├── sdkvalidationerror.ts │ │ │ │ │ ├── subscriberresponsedto.ts │ │ │ │ │ ├── topicresponsedto.ts │ │ │ │ │ └── validationerrordto.ts │ │ │ │ └── operations/ │ │ │ │ ├── activitycontrollergetcharts.ts │ │ │ │ ├── activitycontrollergetlogs.ts │ │ │ │ ├── activitycontrollergetrequesttraces.ts │ │ │ │ ├── activitycontrollergetworkflowrun.ts │ │ │ │ ├── activitycontrollergetworkflowruns.ts │ │ │ │ ├── channelconnectionscontrollercreatechannelconnection.ts │ │ │ │ ├── channelconnectionscontrollerdeletechannelconnection.ts │ │ │ │ ├── channelconnectionscontrollergetchannelconnectionbyidentifier.ts │ │ │ │ ├── channelconnectionscontrollerlistchannelconnections.ts │ │ │ │ ├── channelconnectionscontrollerupdatechannelconnection.ts │ │ │ │ ├── channelendpointscontrollercreatechannelendpoint.ts │ │ │ │ ├── channelendpointscontrollerdeletechannelendpoint.ts │ │ │ │ ├── channelendpointscontrollergetchannelendpoint.ts │ │ │ │ ├── channelendpointscontrollerlistchannelendpoints.ts │ │ │ │ ├── channelendpointscontrollerupdatechannelendpoint.ts │ │ │ │ ├── contextscontrollercreatecontext.ts │ │ │ │ ├── contextscontrollerdeletecontext.ts │ │ │ │ ├── contextscontrollergetcontext.ts │ │ │ │ ├── contextscontrollerlistcontexts.ts │ │ │ │ ├── contextscontrollerupdatecontext.ts │ │ │ │ ├── environmentscontrollerdiffenvironment.ts │ │ │ │ ├── environmentscontrollergetenvironmenttags.ts │ │ │ │ ├── environmentscontrollerpublishenvironment.ts │ │ │ │ ├── environmentscontrollerv1createenvironment.ts │ │ │ │ ├── environmentscontrollerv1deleteenvironment.ts │ │ │ │ ├── environmentscontrollerv1listmyenvironments.ts │ │ │ │ ├── environmentscontrollerv1updatemyenvironment.ts │ │ │ │ ├── environmentvariablescontrollercreateenvironmentvariable.ts │ │ │ │ ├── environmentvariablescontrollerdeleteenvironmentvariable.ts │ │ │ │ ├── environmentvariablescontrollergetenvironmentvariable.ts │ │ │ │ ├── environmentvariablescontrollergetenvironmentvariableusage.ts │ │ │ │ ├── environmentvariablescontrollerlistenvironmentvariables.ts │ │ │ │ ├── environmentvariablescontrollerupdateenvironmentvariable.ts │ │ │ │ ├── eventscontrollerbroadcasteventtoall.ts │ │ │ │ ├── eventscontrollercancel.ts │ │ │ │ ├── eventscontrollertrigger.ts │ │ │ │ ├── eventscontrollertriggerbulk.ts │ │ │ │ ├── inboundwebhookscontrollerhandlewebhook.ts │ │ │ │ ├── index.ts │ │ │ │ ├── integrationscontrollerautoconfigureintegration.ts │ │ │ │ ├── integrationscontrollercreateintegration.ts │ │ │ │ ├── integrationscontrollergetactiveintegrations.ts │ │ │ │ ├── integrationscontrollergetchatoauthurl.ts │ │ │ │ ├── integrationscontrollerlistintegrations.ts │ │ │ │ ├── integrationscontrollerremoveintegration.ts │ │ │ │ ├── integrationscontrollersetintegrationasprimary.ts │ │ │ │ ├── integrationscontrollerupdateintegrationbyid.ts │ │ │ │ ├── layoutscontrollercreate.ts │ │ │ │ ├── layoutscontrollerdelete.ts │ │ │ │ ├── layoutscontrollerduplicate.ts │ │ │ │ ├── layoutscontrollergeneratepreview.ts │ │ │ │ ├── layoutscontrollerget.ts │ │ │ │ ├── layoutscontrollergetusage.ts │ │ │ │ ├── layoutscontrollerlist.ts │ │ │ │ ├── layoutscontrollerupdate.ts │ │ │ │ ├── messagescontrollerdeletemessage.ts │ │ │ │ ├── messagescontrollerdeletemessagesbytransactionid.ts │ │ │ │ ├── messagescontrollergetmessages.ts │ │ │ │ ├── notificationscontrollergetnotification.ts │ │ │ │ ├── notificationscontrollerlistnotifications.ts │ │ │ │ ├── subscriberscontrollerarchiveallnotifications.ts │ │ │ │ ├── subscriberscontrollerarchiveallreadnotifications.ts │ │ │ │ ├── subscriberscontrollerarchivenotification.ts │ │ │ │ ├── subscriberscontrollerbulkupdatesubscriberpreferences.ts │ │ │ │ ├── subscriberscontrollercompletenotificationaction.ts │ │ │ │ ├── subscriberscontrollercreatesubscriber.ts │ │ │ │ ├── subscriberscontrollerdeleteallnotifications.ts │ │ │ │ ├── subscriberscontrollerdeletenotification.ts │ │ │ │ ├── subscriberscontrollergetsubscriber.ts │ │ │ │ ├── subscriberscontrollergetsubscribernotifications.ts │ │ │ │ ├── subscriberscontrollergetsubscribernotificationscount.ts │ │ │ │ ├── subscriberscontrollergetsubscriberpreferences.ts │ │ │ │ ├── subscriberscontrollerlistsubscribertopics.ts │ │ │ │ ├── subscriberscontrollermarkallnotificationsasread.ts │ │ │ │ ├── subscriberscontrollermarknotificationasread.ts │ │ │ │ ├── subscriberscontrollermarknotificationasunread.ts │ │ │ │ ├── subscriberscontrollermarknotificationsasseen.ts │ │ │ │ ├── subscriberscontrollerpatchsubscriber.ts │ │ │ │ ├── subscriberscontrollerremovesubscriber.ts │ │ │ │ ├── subscriberscontrollerrevertnotificationaction.ts │ │ │ │ ├── subscriberscontrollersearchsubscribers.ts │ │ │ │ ├── subscriberscontrollersnoozenotification.ts │ │ │ │ ├── subscriberscontrollerunarchivenotification.ts │ │ │ │ ├── subscriberscontrollerunsnoozenotification.ts │ │ │ │ ├── subscriberscontrollerupdatesubscriberpreferences.ts │ │ │ │ ├── subscribersv1controllerbulkcreatesubscribers.ts │ │ │ │ ├── subscribersv1controllerdeletesubscribercredentials.ts │ │ │ │ ├── subscribersv1controllergetnotificationsfeed.ts │ │ │ │ ├── subscribersv1controllergetunseencount.ts │ │ │ │ ├── subscribersv1controllermarkactionasseen.ts │ │ │ │ ├── subscribersv1controllermarkallunreadasread.ts │ │ │ │ ├── subscribersv1controllermarkmessagesas.ts │ │ │ │ ├── subscribersv1controllermodifysubscriberchannel.ts │ │ │ │ ├── subscribersv1controllerupdatesubscriberchannel.ts │ │ │ │ ├── subscribersv1controllerupdatesubscriberonlineflag.ts │ │ │ │ ├── topicscontrollercreatetopicsubscriptions.ts │ │ │ │ ├── topicscontrollerdeletetopic.ts │ │ │ │ ├── topicscontrollerdeletetopicsubscriptions.ts │ │ │ │ ├── topicscontrollergettopic.ts │ │ │ │ ├── topicscontrollergettopicsubscription.ts │ │ │ │ ├── topicscontrollerlisttopics.ts │ │ │ │ ├── topicscontrollerlisttopicsubscriptions.ts │ │ │ │ ├── topicscontrollerupdatetopic.ts │ │ │ │ ├── topicscontrollerupdatetopicsubscription.ts │ │ │ │ ├── topicscontrollerupserttopic.ts │ │ │ │ ├── topicsv1controllergettopicsubscriber.ts │ │ │ │ ├── translationcontrollercreatetranslationendpoint.ts │ │ │ │ ├── translationcontrollerdeletetranslationendpoint.ts │ │ │ │ ├── translationcontrollerdeletetranslationgroupendpoint.ts │ │ │ │ ├── translationcontrollergetmasterjsonendpoint.ts │ │ │ │ ├── translationcontrollergetsingletranslation.ts │ │ │ │ ├── translationcontrollergettranslationgroupendpoint.ts │ │ │ │ ├── translationcontrollerimportmasterjsonendpoint.ts │ │ │ │ ├── translationcontrolleruploadmasterjsonendpoint.ts │ │ │ │ ├── translationcontrolleruploadtranslationfiles.ts │ │ │ │ ├── workflowcontrollercreate.ts │ │ │ │ ├── workflowcontrollerduplicateworkflow.ts │ │ │ │ ├── workflowcontrollergeneratepreview.ts │ │ │ │ ├── workflowcontrollergetworkflow.ts │ │ │ │ ├── workflowcontrollergetworkflowstepdata.ts │ │ │ │ ├── workflowcontrollerpatchworkflow.ts │ │ │ │ ├── workflowcontrollerremoveworkflow.ts │ │ │ │ ├── workflowcontrollersearchworkflows.ts │ │ │ │ ├── workflowcontrollersync.ts │ │ │ │ └── workflowcontrollerupdate.ts │ │ │ ├── react-query/ │ │ │ │ ├── _context.tsx │ │ │ │ ├── _types.ts │ │ │ │ ├── activityChartsRetrieve.core.ts │ │ │ │ ├── activityChartsRetrieve.ts │ │ │ │ ├── activityRequestsList.core.ts │ │ │ │ ├── activityRequestsList.ts │ │ │ │ ├── activityRequestsRetrieve.core.ts │ │ │ │ ├── activityRequestsRetrieve.ts │ │ │ │ ├── activityTrack.ts │ │ │ │ ├── activityWorkflowRunsList.core.ts │ │ │ │ ├── activityWorkflowRunsList.ts │ │ │ │ ├── activityWorkflowRunsRetrieve.core.ts │ │ │ │ ├── activityWorkflowRunsRetrieve.ts │ │ │ │ ├── cancel.ts │ │ │ │ ├── channelConnectionsCreate.ts │ │ │ │ ├── channelConnectionsDelete.ts │ │ │ │ ├── channelConnectionsList.core.ts │ │ │ │ ├── channelConnectionsList.ts │ │ │ │ ├── channelConnectionsRetrieve.core.ts │ │ │ │ ├── channelConnectionsRetrieve.ts │ │ │ │ ├── channelConnectionsUpdate.ts │ │ │ │ ├── channelEndpointsCreate.ts │ │ │ │ ├── channelEndpointsDelete.ts │ │ │ │ ├── channelEndpointsList.core.ts │ │ │ │ ├── channelEndpointsList.ts │ │ │ │ ├── channelEndpointsRetrieve.core.ts │ │ │ │ ├── channelEndpointsRetrieve.ts │ │ │ │ ├── channelEndpointsUpdate.ts │ │ │ │ ├── contextsCreate.ts │ │ │ │ ├── contextsDelete.ts │ │ │ │ ├── contextsList.core.ts │ │ │ │ ├── contextsList.ts │ │ │ │ ├── contextsRetrieve.core.ts │ │ │ │ ├── contextsRetrieve.ts │ │ │ │ ├── contextsUpdate.ts │ │ │ │ ├── environmentVariablesCreate.ts │ │ │ │ ├── environmentVariablesDelete.ts │ │ │ │ ├── environmentVariablesList.core.ts │ │ │ │ ├── environmentVariablesList.ts │ │ │ │ ├── environmentVariablesRetrieve.core.ts │ │ │ │ ├── environmentVariablesRetrieve.ts │ │ │ │ ├── environmentVariablesUpdate.ts │ │ │ │ ├── environmentVariablesUsage.core.ts │ │ │ │ ├── environmentVariablesUsage.ts │ │ │ │ ├── environmentsCreate.ts │ │ │ │ ├── environmentsDelete.ts │ │ │ │ ├── environmentsDiff.ts │ │ │ │ ├── environmentsGetTags.core.ts │ │ │ │ ├── environmentsGetTags.ts │ │ │ │ ├── environmentsList.core.ts │ │ │ │ ├── environmentsList.ts │ │ │ │ ├── environmentsPublish.ts │ │ │ │ ├── environmentsUpdate.ts │ │ │ │ ├── index.ts │ │ │ │ ├── integrationsCreate.ts │ │ │ │ ├── integrationsDelete.ts │ │ │ │ ├── integrationsGenerateChatOAuthUrl.ts │ │ │ │ ├── integrationsIntegrationsControllerAutoConfigureIntegration.ts │ │ │ │ ├── integrationsList.core.ts │ │ │ │ ├── integrationsList.ts │ │ │ │ ├── integrationsListActive.core.ts │ │ │ │ ├── integrationsListActive.ts │ │ │ │ ├── integrationsSetAsPrimary.ts │ │ │ │ ├── integrationsUpdate.ts │ │ │ │ ├── layoutsCreate.ts │ │ │ │ ├── layoutsDelete.ts │ │ │ │ ├── layoutsDuplicate.ts │ │ │ │ ├── layoutsGeneratePreview.ts │ │ │ │ ├── layoutsList.core.ts │ │ │ │ ├── layoutsList.ts │ │ │ │ ├── layoutsRetrieve.core.ts │ │ │ │ ├── layoutsRetrieve.ts │ │ │ │ ├── layoutsUpdate.ts │ │ │ │ ├── layoutsUsage.core.ts │ │ │ │ ├── layoutsUsage.ts │ │ │ │ ├── messagesDelete.ts │ │ │ │ ├── messagesDeleteByTransactionId.ts │ │ │ │ ├── messagesRetrieve.core.ts │ │ │ │ ├── messagesRetrieve.ts │ │ │ │ ├── notificationsList.core.ts │ │ │ │ ├── notificationsList.ts │ │ │ │ ├── notificationsRetrieve.core.ts │ │ │ │ ├── notificationsRetrieve.ts │ │ │ │ ├── subscribersCreate.ts │ │ │ │ ├── subscribersCreateBulk.ts │ │ │ │ ├── subscribersCredentialsAppend.ts │ │ │ │ ├── subscribersCredentialsDelete.ts │ │ │ │ ├── subscribersCredentialsUpdate.ts │ │ │ │ ├── subscribersDelete.ts │ │ │ │ ├── subscribersMessagesMarkAll.ts │ │ │ │ ├── subscribersMessagesMarkAllAs.ts │ │ │ │ ├── subscribersMessagesUpdateAsSeen.ts │ │ │ │ ├── subscribersNotificationsArchive.ts │ │ │ │ ├── subscribersNotificationsArchiveAll.ts │ │ │ │ ├── subscribersNotificationsArchiveAllRead.ts │ │ │ │ ├── subscribersNotificationsCompleteAction.ts │ │ │ │ ├── subscribersNotificationsCount.core.ts │ │ │ │ ├── subscribersNotificationsCount.ts │ │ │ │ ├── subscribersNotificationsDelete.ts │ │ │ │ ├── subscribersNotificationsDeleteAll.ts │ │ │ │ ├── subscribersNotificationsFeed.core.ts │ │ │ │ ├── subscribersNotificationsFeed.ts │ │ │ │ ├── subscribersNotificationsList.core.ts │ │ │ │ ├── subscribersNotificationsList.ts │ │ │ │ ├── subscribersNotificationsMarkAllAsRead.ts │ │ │ │ ├── subscribersNotificationsMarkAsRead.ts │ │ │ │ ├── subscribersNotificationsMarkAsSeen.ts │ │ │ │ ├── subscribersNotificationsMarkAsUnread.ts │ │ │ │ ├── subscribersNotificationsRevertAction.ts │ │ │ │ ├── subscribersNotificationsSnooze.ts │ │ │ │ ├── subscribersNotificationsUnarchive.ts │ │ │ │ ├── subscribersNotificationsUnseenCount.core.ts │ │ │ │ ├── subscribersNotificationsUnseenCount.ts │ │ │ │ ├── subscribersNotificationsUnsnooze.ts │ │ │ │ ├── subscribersPatch.ts │ │ │ │ ├── subscribersPreferencesBulkUpdate.ts │ │ │ │ ├── subscribersPreferencesList.core.ts │ │ │ │ ├── subscribersPreferencesList.ts │ │ │ │ ├── subscribersPreferencesUpdate.ts │ │ │ │ ├── subscribersPropertiesUpdateOnlineFlag.ts │ │ │ │ ├── subscribersRetrieve.core.ts │ │ │ │ ├── subscribersRetrieve.ts │ │ │ │ ├── subscribersSearch.core.ts │ │ │ │ ├── subscribersSearch.ts │ │ │ │ ├── subscribersTopicsList.core.ts │ │ │ │ ├── subscribersTopicsList.ts │ │ │ │ ├── topicsCreate.ts │ │ │ │ ├── topicsDelete.ts │ │ │ │ ├── topicsGet.core.ts │ │ │ │ ├── topicsGet.ts │ │ │ │ ├── topicsList.core.ts │ │ │ │ ├── topicsList.ts │ │ │ │ ├── topicsSubscribersRetrieve.core.ts │ │ │ │ ├── topicsSubscribersRetrieve.ts │ │ │ │ ├── topicsSubscriptionsCreate.ts │ │ │ │ ├── topicsSubscriptionsDelete.ts │ │ │ │ ├── topicsSubscriptionsGetSubscription.core.ts │ │ │ │ ├── topicsSubscriptionsGetSubscription.ts │ │ │ │ ├── topicsSubscriptionsList.core.ts │ │ │ │ ├── topicsSubscriptionsList.ts │ │ │ │ ├── topicsSubscriptionsUpdate.ts │ │ │ │ ├── topicsUpdate.ts │ │ │ │ ├── translationsCreate.ts │ │ │ │ ├── translationsDelete.ts │ │ │ │ ├── translationsGroupsDelete.ts │ │ │ │ ├── translationsGroupsRetrieve.core.ts │ │ │ │ ├── translationsGroupsRetrieve.ts │ │ │ │ ├── translationsMasterImport.ts │ │ │ │ ├── translationsMasterRetrieve.core.ts │ │ │ │ ├── translationsMasterRetrieve.ts │ │ │ │ ├── translationsMasterUpload.ts │ │ │ │ ├── translationsRetrieve.core.ts │ │ │ │ ├── translationsRetrieve.ts │ │ │ │ ├── translationsUpload.ts │ │ │ │ ├── trigger.ts │ │ │ │ ├── triggerBroadcast.ts │ │ │ │ ├── triggerBulk.ts │ │ │ │ ├── workflowsCreate.ts │ │ │ │ ├── workflowsDelete.ts │ │ │ │ ├── workflowsDuplicate.ts │ │ │ │ ├── workflowsGet.core.ts │ │ │ │ ├── workflowsGet.ts │ │ │ │ ├── workflowsList.core.ts │ │ │ │ ├── workflowsList.ts │ │ │ │ ├── workflowsPatch.ts │ │ │ │ ├── workflowsStepsGeneratePreview.ts │ │ │ │ ├── workflowsStepsRetrieve.core.ts │ │ │ │ ├── workflowsStepsRetrieve.ts │ │ │ │ ├── workflowsSync.ts │ │ │ │ └── workflowsUpdate.ts │ │ │ ├── sdk/ │ │ │ │ ├── activity.ts │ │ │ │ ├── channelconnections.ts │ │ │ │ ├── channelendpoints.ts │ │ │ │ ├── charts.ts │ │ │ │ ├── contexts.ts │ │ │ │ ├── credentials.ts │ │ │ │ ├── environments.ts │ │ │ │ ├── environmentvariables.ts │ │ │ │ ├── groups.ts │ │ │ │ ├── index.ts │ │ │ │ ├── integrations.ts │ │ │ │ ├── layouts.ts │ │ │ │ ├── master.ts │ │ │ │ ├── messages.ts │ │ │ │ ├── notifications.ts │ │ │ │ ├── novumessages.ts │ │ │ │ ├── novunotifications.ts │ │ │ │ ├── novusubscribers.ts │ │ │ │ ├── novutopics.ts │ │ │ │ ├── preferences.ts │ │ │ │ ├── properties.ts │ │ │ │ ├── requests.ts │ │ │ │ ├── sdk.ts │ │ │ │ ├── steps.ts │ │ │ │ ├── subscribers.ts │ │ │ │ ├── subscriptions.ts │ │ │ │ ├── topics.ts │ │ │ │ ├── translations.ts │ │ │ │ ├── workflowruns.ts │ │ │ │ └── workflows.ts │ │ │ └── types/ │ │ │ ├── async.ts │ │ │ ├── blobs.ts │ │ │ ├── constdatetime.ts │ │ │ ├── discriminatedUnion.ts │ │ │ ├── enums.ts │ │ │ ├── fp.ts │ │ │ ├── index.ts │ │ │ ├── operations.ts │ │ │ ├── rfcdate.ts │ │ │ ├── streams.ts │ │ │ └── unrecognized.ts │ │ └── tsconfig.json │ ├── maily-core/ │ │ ├── package.json │ │ ├── postcss.config.cjs │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── blocks/ │ │ │ │ ├── button.tsx │ │ │ │ ├── code.tsx │ │ │ │ ├── footers.tsx │ │ │ │ ├── headers.tsx │ │ │ │ ├── image.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── list.tsx │ │ │ │ ├── types.ts │ │ │ │ └── typography.tsx │ │ │ ├── blocks.ts │ │ │ ├── editor/ │ │ │ │ ├── bubble-suggestions/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── providers/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── inline-decorator-provider.ts │ │ │ │ │ │ └── variable-provider.ts │ │ │ │ │ ├── suggestion-input.tsx │ │ │ │ │ ├── suggestion-provider.ts │ │ │ │ │ ├── suggestion-registry.ts │ │ │ │ │ └── use-suggestion-providers.ts │ │ │ │ ├── components/ │ │ │ │ │ ├── alignment-switch.tsx │ │ │ │ │ ├── base-button.tsx │ │ │ │ │ ├── bubble-menu-button.tsx │ │ │ │ │ ├── column-menu/ │ │ │ │ │ │ ├── columns-bubble-menu-content.tsx │ │ │ │ │ │ ├── columns-bubble-menu.tsx │ │ │ │ │ │ ├── columns-width-config.tsx │ │ │ │ │ │ ├── columns-width.tsx │ │ │ │ │ │ └── use-columns-state.tsx │ │ │ │ │ ├── content-menu.tsx │ │ │ │ │ ├── editor-menu-bar.tsx │ │ │ │ │ ├── html-menu/ │ │ │ │ │ │ ├── html-menu.tsx │ │ │ │ │ │ └── use-html-state.ts │ │ │ │ │ ├── icons/ │ │ │ │ │ │ ├── border-color.tsx │ │ │ │ │ │ ├── grid-lines.tsx │ │ │ │ │ │ ├── logo-with-cover-image.tsx │ │ │ │ │ │ ├── logo-with-text-horizon.tsx │ │ │ │ │ │ ├── logo-with-text-vertical.tsx │ │ │ │ │ │ ├── margin-icon.tsx │ │ │ │ │ │ └── padding-icon.tsx │ │ │ │ │ ├── image-menu/ │ │ │ │ │ │ ├── image-bubble-menu.tsx │ │ │ │ │ │ ├── image-size.tsx │ │ │ │ │ │ ├── lock-aspect-ratio-button.tsx │ │ │ │ │ │ └── use-image-state.tsx │ │ │ │ │ ├── inline-image-menu/ │ │ │ │ │ │ ├── inline-image-bubble-menu.tsx │ │ │ │ │ │ └── use-inline-image-state.tsx │ │ │ │ │ ├── input.tsx │ │ │ │ │ ├── popover.tsx │ │ │ │ │ ├── repeat-menu/ │ │ │ │ │ │ ├── repeat-bubble-menu.tsx │ │ │ │ │ │ └── use-repeat-state.ts │ │ │ │ │ ├── section-menu/ │ │ │ │ │ │ ├── section-bubble-menu.tsx │ │ │ │ │ │ └── use-section-state.tsx │ │ │ │ │ ├── show-popover.tsx │ │ │ │ │ ├── spacer-menu/ │ │ │ │ │ │ ├── spacer-bubble-menu.tsx │ │ │ │ │ │ └── use-spacer-state.ts │ │ │ │ │ ├── text-menu/ │ │ │ │ │ │ ├── text-bubble-content.tsx │ │ │ │ │ │ ├── text-bubble-menu.tsx │ │ │ │ │ │ ├── turn-into-block.tsx │ │ │ │ │ │ ├── use-text-menu-state.tsx │ │ │ │ │ │ └── use-turn-into-block-options.tsx │ │ │ │ │ ├── textarea.tsx │ │ │ │ │ ├── ui/ │ │ │ │ │ │ ├── color-picker.tsx │ │ │ │ │ │ ├── divider.tsx │ │ │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ │ │ ├── edge-spacing-controls.tsx │ │ │ │ │ │ ├── input-autocomplete.tsx │ │ │ │ │ │ ├── link-input-popover.tsx │ │ │ │ │ │ ├── number-input.tsx │ │ │ │ │ │ ├── select.tsx │ │ │ │ │ │ └── tooltip.tsx │ │ │ │ │ ├── variable-menu/ │ │ │ │ │ │ └── variable-bubble-menu.tsx │ │ │ │ │ └── vertical-alignment-switch.tsx │ │ │ │ ├── extensions/ │ │ │ │ │ ├── color.ts │ │ │ │ │ ├── horizontal-rule.tsx │ │ │ │ │ ├── image-upload/ │ │ │ │ │ │ └── image-upload.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── inline-decorator/ │ │ │ │ │ │ ├── default-decorator-component.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── inline-decorator-list.tsx │ │ │ │ │ │ └── inline-decorator.ts │ │ │ │ │ ├── link-card.ts │ │ │ │ │ ├── maily-kit.tsx │ │ │ │ │ ├── placeholder.ts │ │ │ │ │ ├── slash-command/ │ │ │ │ │ │ ├── default-slash-commands.tsx │ │ │ │ │ │ ├── slash-command-item.tsx │ │ │ │ │ │ ├── slash-command-search.tsx │ │ │ │ │ │ ├── slash-command-view.tsx │ │ │ │ │ │ └── slash-command.ts │ │ │ │ │ └── tailing-node/ │ │ │ │ │ └── tailing-node.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── nodes/ │ │ │ │ │ ├── button/ │ │ │ │ │ │ ├── button-label-input.tsx │ │ │ │ │ │ ├── button-view.tsx │ │ │ │ │ │ └── button.tsx │ │ │ │ │ ├── columns/ │ │ │ │ │ │ ├── column.ts │ │ │ │ │ │ └── columns.ts │ │ │ │ │ ├── footer.ts │ │ │ │ │ ├── heading/ │ │ │ │ │ │ └── heading.ts │ │ │ │ │ ├── html/ │ │ │ │ │ │ ├── html-view.tsx │ │ │ │ │ │ └── html.tsx │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── image-view.tsx │ │ │ │ │ │ └── image.ts │ │ │ │ │ ├── inline-image/ │ │ │ │ │ │ └── inline-image.tsx │ │ │ │ │ ├── link-card.tsx │ │ │ │ │ ├── link.ts │ │ │ │ │ ├── logo/ │ │ │ │ │ │ ├── logo-view.tsx │ │ │ │ │ │ └── logo.ts │ │ │ │ │ ├── paragraph/ │ │ │ │ │ │ └── paragraph.ts │ │ │ │ │ ├── repeat/ │ │ │ │ │ │ ├── repeat-view.tsx │ │ │ │ │ │ └── repeat.ts │ │ │ │ │ ├── section/ │ │ │ │ │ │ └── section.ts │ │ │ │ │ ├── spacer.ts │ │ │ │ │ └── variable/ │ │ │ │ │ ├── variable-suggestions-popover.tsx │ │ │ │ │ ├── variable-suggestions.tsx │ │ │ │ │ ├── variable-view.tsx │ │ │ │ │ └── variable.ts │ │ │ │ ├── plugins/ │ │ │ │ │ ├── drag-handle/ │ │ │ │ │ │ ├── drag-handle-plugin.ts │ │ │ │ │ │ └── drag-handle.tsx │ │ │ │ │ └── image-upload/ │ │ │ │ │ └── image-upload-plugin.ts │ │ │ │ ├── provider.tsx │ │ │ │ └── utils/ │ │ │ │ ├── aspect-ratio.ts │ │ │ │ ├── border-radius.ts │ │ │ │ ├── classname.ts │ │ │ │ ├── columns.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── delete-node.ts │ │ │ │ ├── get-render-container.ts │ │ │ │ ├── is-custom-node-selected.ts │ │ │ │ ├── is-text-selected.ts │ │ │ │ ├── node-options.ts │ │ │ │ ├── replace-deprecated.ts │ │ │ │ ├── spacing.ts │ │ │ │ ├── update-attribute.ts │ │ │ │ ├── update-scroll-view.ts │ │ │ │ ├── use-event.ts │ │ │ │ ├── use-outside-click.ts │ │ │ │ └── variable.ts │ │ │ ├── extensions.ts │ │ │ ├── index.ts │ │ │ └── styles/ │ │ │ ├── index.css │ │ │ ├── preflight.css │ │ │ └── tailwind.css │ │ ├── tailwind.config.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── maily-render/ │ │ ├── .babelrc │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── maily.tsx │ │ │ ├── meta.tsx │ │ │ ├── render.test.ts │ │ │ ├── render.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── vitest.config.ts │ ├── maily-tailwind-config/ │ │ ├── package.json │ │ └── tailwind.config.ts │ ├── maily-tsconfig/ │ │ ├── base.json │ │ ├── nextjs.json │ │ ├── package.json │ │ └── react-library.json │ ├── notifications/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── templates/ │ │ │ │ └── layout.tsx │ │ │ └── workflows/ │ │ │ ├── usage-limits/ │ │ │ │ ├── email.tsx │ │ │ │ └── usage-limits.workflow.ts │ │ │ └── usage-report/ │ │ │ ├── email.tsx │ │ │ ├── schemas.ts │ │ │ └── usage-report.workflow.ts │ │ ├── tsconfig.json │ │ └── tsconfig.module.json │ └── testing/ │ ├── .dockerignore │ ├── .gitignore │ ├── package.json │ ├── project.json │ ├── src/ │ │ ├── constants.ts │ │ ├── create-notification-template.interface.ts │ │ ├── ee/ │ │ │ ├── clerk-client.mock.ts │ │ │ ├── clerk-mock-data.ts │ │ │ ├── ee.organization.service.ts │ │ │ ├── ee.repository.factory.ts │ │ │ ├── ee.user.service.ts │ │ │ └── types.ts │ │ ├── environment.service.ts │ │ ├── index.ts │ │ ├── integration.service.ts │ │ ├── jobs.service.ts │ │ ├── notification-template.service.ts │ │ ├── notifications.service.ts │ │ ├── organization.service.ts │ │ ├── subscribers.service.ts │ │ ├── test-server.service.ts │ │ ├── testing-queue.service.ts │ │ ├── user.service.ts │ │ ├── user.session.ts │ │ ├── utils/ │ │ │ ├── index.ts │ │ │ └── processTestAgentExpectedStatusCode.ts │ │ └── workflow-override.service.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── novu.code-workspace ├── nx.json ├── package.json ├── packages/ │ ├── add-inbox/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── cli/ │ │ │ │ └── index.ts │ │ │ ├── config/ │ │ │ │ ├── framework.ts │ │ │ │ ├── package-manager.spec.ts │ │ │ │ └── package-manager.ts │ │ │ ├── constants/ │ │ │ │ └── index.ts │ │ │ ├── generators/ │ │ │ │ ├── component.ts │ │ │ │ ├── env.ts │ │ │ │ ├── frameworks/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── nextjs.ts │ │ │ │ │ └── react.ts │ │ │ │ └── react-version.ts │ │ │ └── utils/ │ │ │ ├── analytics.ts │ │ │ ├── file.ts │ │ │ └── logger.ts │ │ ├── tsconfig.json │ │ └── vitest.config.js │ ├── agent-toolkit/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── ai-sdk/ │ │ │ │ ├── index.ts │ │ │ │ └── tool-converter.ts │ │ │ ├── core/ │ │ │ │ ├── index.ts │ │ │ │ ├── novu-tool.ts │ │ │ │ ├── novu-toolkit.ts │ │ │ │ └── types.ts │ │ │ ├── human-in-the-loop/ │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── index.ts │ │ │ ├── langchain/ │ │ │ │ ├── index.ts │ │ │ │ └── tool-converter.ts │ │ │ ├── openai/ │ │ │ │ ├── index.ts │ │ │ │ └── tool-converter.ts │ │ │ └── tools/ │ │ │ ├── index.ts │ │ │ ├── preferences.ts │ │ │ ├── trigger-workflow.ts │ │ │ └── workflows-as-tools.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── framework/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── express/ │ │ │ └── package.json │ │ ├── h3/ │ │ │ └── package.json │ │ ├── internal/ │ │ │ └── package.json │ │ ├── lambda/ │ │ │ └── package.json │ │ ├── nest/ │ │ │ └── package.json │ │ ├── next/ │ │ │ └── package.json │ │ ├── nuxt/ │ │ │ └── package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── remix/ │ │ │ └── package.json │ │ ├── scripts/ │ │ │ ├── INSTRUCTIONS.md │ │ │ ├── devtool.ts │ │ │ ├── schema_input.json │ │ │ └── schema_output.json │ │ ├── src/ │ │ │ ├── client.test.ts │ │ │ ├── client.ts │ │ │ ├── client.validation.test.ts │ │ │ ├── constants/ │ │ │ │ ├── action.constants.ts │ │ │ │ ├── api.constants.ts │ │ │ │ ├── cron.constants.ts │ │ │ │ ├── error.constants.ts │ │ │ │ ├── http-headers.constants.ts │ │ │ │ ├── http-methods.constants.ts │ │ │ │ ├── http-query.constants.ts │ │ │ │ ├── http-status.constants.ts │ │ │ │ ├── index.ts │ │ │ │ ├── resource.constants.ts │ │ │ │ ├── step.constants.ts │ │ │ │ └── workflow.constants.ts │ │ │ ├── errors/ │ │ │ │ ├── base.errors.ts │ │ │ │ ├── bridge.errors.ts │ │ │ │ ├── execution.errors.ts │ │ │ │ ├── guard.errors.test.ts │ │ │ │ ├── guard.errors.ts │ │ │ │ ├── handler.errors.ts │ │ │ │ ├── import.errors.ts │ │ │ │ ├── index.ts │ │ │ │ ├── platform.errors.ts │ │ │ │ ├── provider.errors.ts │ │ │ │ ├── resource.errors.ts │ │ │ │ ├── signature.errors.ts │ │ │ │ ├── step.errors.ts │ │ │ │ └── workflow.errors.ts │ │ │ ├── filters/ │ │ │ │ ├── digest.ts │ │ │ │ ├── index.ts │ │ │ │ ├── pluralize.test.ts │ │ │ │ ├── pluralize.ts │ │ │ │ ├── to-sentence.test.ts │ │ │ │ ├── to-sentence.ts │ │ │ │ ├── types.ts │ │ │ │ └── validators.ts │ │ │ ├── globals.d.ts │ │ │ ├── handler.test.ts │ │ │ ├── handler.ts │ │ │ ├── index.ts │ │ │ ├── internal/ │ │ │ │ └── index.ts │ │ │ ├── jsonSchemaFaker.js │ │ │ ├── resources/ │ │ │ │ ├── index.ts │ │ │ │ ├── step-resolver/ │ │ │ │ │ └── step.ts │ │ │ │ └── workflow/ │ │ │ │ ├── discover-action-step-factory.ts │ │ │ │ ├── discover-channel-step-factory.ts │ │ │ │ ├── discover-custom-step-factory.ts │ │ │ │ ├── discover-providers.ts │ │ │ │ ├── discover-step.ts │ │ │ │ ├── index.ts │ │ │ │ ├── map-preferences.test.ts │ │ │ │ ├── map-preferences.ts │ │ │ │ ├── pretty-print-discovery.ts │ │ │ │ ├── workflow.resource.test-d.ts │ │ │ │ ├── workflow.resource.ts │ │ │ │ └── workflow.test.ts │ │ │ ├── schemas/ │ │ │ │ ├── index.ts │ │ │ │ ├── providers/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── slack.schema.ts │ │ │ │ │ ├── email/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── mailgun.schema.ts │ │ │ │ │ │ ├── mailjet.schema.ts │ │ │ │ │ │ ├── nodemailer.schema.ts │ │ │ │ │ │ ├── novu-email.schema.ts │ │ │ │ │ │ └── sendgrid.schema.ts │ │ │ │ │ ├── generic.schema.ts │ │ │ │ │ ├── inApp/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── novu-inapp.schema.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── push/ │ │ │ │ │ │ ├── apns.schema.ts │ │ │ │ │ │ ├── expo.schema.ts │ │ │ │ │ │ ├── fcm.schema.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── one-signal.schema.ts │ │ │ │ │ └── sms/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── novu-sms.schema.ts │ │ │ │ │ └── twilio.schema.ts │ │ │ │ └── steps/ │ │ │ │ ├── actions/ │ │ │ │ │ ├── delay.schema.ts │ │ │ │ │ ├── digest.schema.test.ts │ │ │ │ │ ├── digest.schema.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── throttle.schema.ts │ │ │ │ ├── channels/ │ │ │ │ │ ├── chat.schema.ts │ │ │ │ │ ├── email.schema.ts │ │ │ │ │ ├── in-app.schema.test.ts │ │ │ │ │ ├── in-app.schema.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── push.schema.ts │ │ │ │ │ └── sms.schema.ts │ │ │ │ ├── empty.schema.ts │ │ │ │ ├── index.ts │ │ │ │ └── trigger.schema.ts │ │ │ ├── servers/ │ │ │ │ ├── express.ts │ │ │ │ ├── h3.ts │ │ │ │ ├── lambda.ts │ │ │ │ ├── nest/ │ │ │ │ │ ├── nest.client.ts │ │ │ │ │ ├── nest.constants.ts │ │ │ │ │ ├── nest.controller.ts │ │ │ │ │ ├── nest.handler.ts │ │ │ │ │ ├── nest.interface.ts │ │ │ │ │ ├── nest.module-definition.ts │ │ │ │ │ ├── nest.module.ts │ │ │ │ │ ├── nest.register-api-path.ts │ │ │ │ │ └── nest.utils.ts │ │ │ │ ├── nest.ts │ │ │ │ ├── next.ts │ │ │ │ ├── nuxt.ts │ │ │ │ ├── remix.ts │ │ │ │ └── sveltekit.ts │ │ │ ├── shared.ts │ │ │ ├── step-resolver.ts │ │ │ ├── types/ │ │ │ │ ├── code.types.ts │ │ │ │ ├── config.types.ts │ │ │ │ ├── context.types.ts │ │ │ │ ├── discover.types.ts │ │ │ │ ├── environment.types.ts │ │ │ │ ├── error.types.ts │ │ │ │ ├── errors.types.test.ts │ │ │ │ ├── event.types.ts │ │ │ │ ├── execution.types.ts │ │ │ │ ├── health-check.types.ts │ │ │ │ ├── import.types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── provider.types.ts │ │ │ │ ├── schema.types/ │ │ │ │ │ ├── base.schema.types.test-d.ts │ │ │ │ │ ├── base.schema.types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── json.schema.types.test-d.ts │ │ │ │ │ ├── json.schema.types.ts │ │ │ │ │ ├── zod.schema.types.test-d.ts │ │ │ │ │ └── zod.schema.types.ts │ │ │ │ ├── server.types.ts │ │ │ │ ├── skip.types.ts │ │ │ │ ├── step.types.ts │ │ │ │ ├── subscriber.types.ts │ │ │ │ ├── util.types.test-d.ts │ │ │ │ ├── util.types.ts │ │ │ │ ├── validator.types.ts │ │ │ │ └── workflow.types.ts │ │ │ ├── utils/ │ │ │ │ ├── clone.utils.test.ts │ │ │ │ ├── clone.utils.ts │ │ │ │ ├── crypto.utils.test.ts │ │ │ │ ├── crypto.utils.ts │ │ │ │ ├── deepmerge.utils.test.ts │ │ │ │ ├── env.utils.test.ts │ │ │ │ ├── env.utils.ts │ │ │ │ ├── http.utils.ts │ │ │ │ ├── import.utils.test.ts │ │ │ │ ├── import.utils.ts │ │ │ │ ├── index.ts │ │ │ │ ├── liquid.utils.test.ts │ │ │ │ ├── liquid.utils.ts │ │ │ │ ├── log.utils.ts │ │ │ │ ├── normalize-controls.utils.test.ts │ │ │ │ ├── normalize-controls.utils.ts │ │ │ │ ├── object.utils.ts │ │ │ │ ├── options.utils.ts │ │ │ │ ├── platform.utils.ts │ │ │ │ ├── sanitize.utils.test.ts │ │ │ │ ├── sanitize.utils.ts │ │ │ │ ├── string.utils.test.ts │ │ │ │ └── string.utils.ts │ │ │ ├── validators/ │ │ │ │ ├── base.validator.ts │ │ │ │ ├── index.ts │ │ │ │ ├── json-schema.validator.ts │ │ │ │ ├── validator.test.ts │ │ │ │ └── zod.validator.ts │ │ │ └── validators.ts │ │ ├── step-resolver/ │ │ │ └── package.json │ │ ├── sveltekit/ │ │ │ └── package.json │ │ ├── tsconfig.json │ │ ├── tsup-debug.config.ts │ │ ├── tsup.config.ts │ │ ├── validators/ │ │ │ └── package.json │ │ └── vitest.config.ts │ ├── js/ │ │ ├── .gitignore │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── internal/ │ │ │ └── package.json │ │ ├── jest.config.cjs │ │ ├── jest.setup.ts │ │ ├── package.cjs.json │ │ ├── package.esm.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── project.json │ │ ├── scripts/ │ │ │ ├── copy-package-json.sh │ │ │ └── size-limit.mjs │ │ ├── src/ │ │ │ ├── api/ │ │ │ │ ├── http-client.test.ts │ │ │ │ ├── http-client.ts │ │ │ │ ├── inbox-service.ts │ │ │ │ └── index.ts │ │ │ ├── base-module.test.ts │ │ │ ├── base-module.ts │ │ │ ├── cache/ │ │ │ │ ├── in-memory-cache.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notifications-cache.test.ts │ │ │ │ ├── notifications-cache.ts │ │ │ │ ├── preferences-cache.ts │ │ │ │ ├── schedule-cache.ts │ │ │ │ ├── subscriptions-cache.ts │ │ │ │ └── types.ts │ │ │ ├── event-emitter/ │ │ │ │ ├── index.ts │ │ │ │ ├── novu-event-emitter.ts │ │ │ │ └── types.ts │ │ │ ├── global.d.ts │ │ │ ├── index.ts │ │ │ ├── notifications/ │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notification.ts │ │ │ │ ├── notifications.ts │ │ │ │ ├── types.ts │ │ │ │ └── visibility-tracker.ts │ │ │ ├── novu.test.ts │ │ │ ├── novu.ts │ │ │ ├── preferences/ │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── preference-schedule.ts │ │ │ │ ├── preference.ts │ │ │ │ ├── preferences.ts │ │ │ │ ├── schedule.ts │ │ │ │ └── types.ts │ │ │ ├── session/ │ │ │ │ ├── index.ts │ │ │ │ ├── session.ts │ │ │ │ └── types.ts │ │ │ ├── subscriptions/ │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── subscription-preference.ts │ │ │ │ ├── subscription.ts │ │ │ │ ├── subscriptions.ts │ │ │ │ └── types.ts │ │ │ ├── types.ts │ │ │ ├── ui/ │ │ │ │ ├── api/ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── useArchiveAll.ts │ │ │ │ │ │ ├── useArchiveAllRead.ts │ │ │ │ │ │ ├── useDeleteAll.ts │ │ │ │ │ │ ├── useNotifications.ts │ │ │ │ │ │ ├── usePreferences.ts │ │ │ │ │ │ ├── useReadAll.ts │ │ │ │ │ │ └── useSubscription.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── components/ │ │ │ │ │ ├── ExternalElementRenderer.tsx │ │ │ │ │ ├── Inbox.tsx │ │ │ │ │ ├── InboxTabs/ │ │ │ │ │ │ ├── InboxTab.tsx │ │ │ │ │ │ ├── InboxTabs.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── Notification/ │ │ │ │ │ │ ├── DefaultNotification.tsx │ │ │ │ │ │ ├── NewMessagesCta.tsx │ │ │ │ │ │ ├── Notification.tsx │ │ │ │ │ │ ├── NotificationActions.tsx │ │ │ │ │ │ ├── NotificationList.tsx │ │ │ │ │ │ ├── NotificationListSkeleton.tsx │ │ │ │ │ │ ├── SnoozeDateTimePicker.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── Renderer.tsx │ │ │ │ │ ├── elements/ │ │ │ │ │ │ ├── Bell/ │ │ │ │ │ │ │ ├── Bell.tsx │ │ │ │ │ │ │ ├── DefaultBellContainer.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── Footer.tsx │ │ │ │ │ │ ├── Header/ │ │ │ │ │ │ │ ├── ActionsContainer.tsx │ │ │ │ │ │ │ ├── Header.tsx │ │ │ │ │ │ │ ├── MoreActionsDropdown.tsx │ │ │ │ │ │ │ ├── MoreActionsOptions.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── InboxStatus/ │ │ │ │ │ │ │ ├── InboxStatusDropdown.tsx │ │ │ │ │ │ │ ├── InboxStatusOptions.tsx │ │ │ │ │ │ │ └── constants.ts │ │ │ │ │ │ ├── Markdown.tsx │ │ │ │ │ │ ├── Preferences/ │ │ │ │ │ │ │ ├── ChannelRow.tsx │ │ │ │ │ │ │ ├── DayScheduleCopy.tsx │ │ │ │ │ │ │ ├── DefaultPreferences.tsx │ │ │ │ │ │ │ ├── GroupedPreferences.tsx │ │ │ │ │ │ │ ├── GroupedPreferencesRow.tsx │ │ │ │ │ │ │ ├── Preferences.tsx │ │ │ │ │ │ │ ├── PreferencesHeader.tsx │ │ │ │ │ │ │ ├── PreferencesListSkeleton.tsx │ │ │ │ │ │ │ ├── PreferencesRow.tsx │ │ │ │ │ │ │ ├── ScheduleRow.tsx │ │ │ │ │ │ │ ├── ScheduleTable.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── Root.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── primitives/ │ │ │ │ │ │ ├── Badge.tsx │ │ │ │ │ │ ├── Button.tsx │ │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ │ ├── Collapsible.tsx │ │ │ │ │ │ ├── CopyToClipboard.tsx │ │ │ │ │ │ ├── DatePicker.tsx │ │ │ │ │ │ ├── Dropdown/ │ │ │ │ │ │ │ ├── DropdownContent.tsx │ │ │ │ │ │ │ ├── DropdownItem.tsx │ │ │ │ │ │ │ ├── DropdownRoot.tsx │ │ │ │ │ │ │ ├── DropdownTrigger.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── Input.tsx │ │ │ │ │ │ ├── Motion.tsx │ │ │ │ │ │ ├── Popover/ │ │ │ │ │ │ │ ├── PopoverClose.tsx │ │ │ │ │ │ │ ├── PopoverContent.tsx │ │ │ │ │ │ │ ├── PopoverRoot.tsx │ │ │ │ │ │ │ ├── PopoverTrigger.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── Portal.tsx │ │ │ │ │ │ ├── Skeleton.tsx │ │ │ │ │ │ ├── Switch.tsx │ │ │ │ │ │ ├── Tabs/ │ │ │ │ │ │ │ ├── TabsContent.tsx │ │ │ │ │ │ │ ├── TabsList.tsx │ │ │ │ │ │ │ ├── TabsRoot.tsx │ │ │ │ │ │ │ ├── TabsTrigger.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── useKeyboardNavigation.ts │ │ │ │ │ │ ├── TimePicker.tsx │ │ │ │ │ │ ├── TimeSelect.tsx │ │ │ │ │ │ ├── Tooltip/ │ │ │ │ │ │ │ ├── TooltipContent.tsx │ │ │ │ │ │ │ ├── TooltipRoot.tsx │ │ │ │ │ │ │ ├── TooltipTrigger.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── shared/ │ │ │ │ │ │ └── IconRendererWrapper.tsx │ │ │ │ │ └── subscription/ │ │ │ │ │ ├── EmptyState.tsx │ │ │ │ │ ├── NotSubscribedState.tsx │ │ │ │ │ ├── Subscription.tsx │ │ │ │ │ ├── SubscriptionButton.tsx │ │ │ │ │ ├── SubscriptionButtonWrapper.tsx │ │ │ │ │ ├── SubscriptionCog.tsx │ │ │ │ │ ├── SubscriptionPreferenceGroupRow.tsx │ │ │ │ │ ├── SubscriptionPreferenceRow.tsx │ │ │ │ │ ├── SubscriptionPreferences.tsx │ │ │ │ │ ├── SubscriptionPreferencesFallback.tsx │ │ │ │ │ ├── SubscriptionPreferencesListSkeleton.tsx │ │ │ │ │ └── SubscriptionPreferencesWrapper.tsx │ │ │ │ ├── config/ │ │ │ │ │ ├── appearanceKeys.ts │ │ │ │ │ ├── defaultLocalization.ts │ │ │ │ │ ├── defaultVariables.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── context/ │ │ │ │ │ ├── AppearanceContext.tsx │ │ │ │ │ ├── CountContext.tsx │ │ │ │ │ ├── FocusManagerContext.tsx │ │ │ │ │ ├── InboxContext.tsx │ │ │ │ │ ├── LocalizationContext.tsx │ │ │ │ │ ├── NovuContext.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── helpers/ │ │ │ │ │ ├── browser.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── createDelayedLoading.ts │ │ │ │ │ ├── createInfiniteScroll.ts │ │ │ │ │ ├── formatToRelativeTime.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mergeRefs.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── useBrowserTabsChannel.ts │ │ │ │ │ ├── useFocusTrap.ts │ │ │ │ │ ├── useNotificationVisibility.ts │ │ │ │ │ ├── useNovuEvent.ts │ │ │ │ │ ├── useStyle.ts │ │ │ │ │ ├── useTabsDropdown.ts │ │ │ │ │ ├── useUncontrolledState.ts │ │ │ │ │ ├── useWebSocketEvent.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── icons/ │ │ │ │ │ ├── ArrowDown.tsx │ │ │ │ │ ├── ArrowDropDown.tsx │ │ │ │ │ ├── ArrowLeft.tsx │ │ │ │ │ ├── ArrowRight.tsx │ │ │ │ │ ├── ArrowUpRight.tsx │ │ │ │ │ ├── Bell.tsx │ │ │ │ │ ├── BellCross.tsx │ │ │ │ │ ├── BellPlus.tsx │ │ │ │ │ ├── CalendarSchedule.tsx │ │ │ │ │ ├── Chat.tsx │ │ │ │ │ ├── Check.tsx │ │ │ │ │ ├── Clock.tsx │ │ │ │ │ ├── Cogs.tsx │ │ │ │ │ ├── Copy.tsx │ │ │ │ │ ├── Dots.tsx │ │ │ │ │ ├── Email.tsx │ │ │ │ │ ├── InApp.tsx │ │ │ │ │ ├── Info.tsx │ │ │ │ │ ├── Key.tsx │ │ │ │ │ ├── Loader.tsx │ │ │ │ │ ├── Lock.tsx │ │ │ │ │ ├── MarkAsArchived.tsx │ │ │ │ │ ├── MarkAsArchivedRead.tsx │ │ │ │ │ ├── MarkAsRead.tsx │ │ │ │ │ ├── MarkAsUnarchived.tsx │ │ │ │ │ ├── MarkAsUnread.tsx │ │ │ │ │ ├── NodeTree.tsx │ │ │ │ │ ├── Novu.tsx │ │ │ │ │ ├── Push.tsx │ │ │ │ │ ├── RouteFill.tsx │ │ │ │ │ ├── Sms.tsx │ │ │ │ │ ├── Unread.tsx │ │ │ │ │ ├── Unsnooze.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── index.css │ │ │ │ ├── index.ts │ │ │ │ ├── internal/ │ │ │ │ │ ├── buildContextKey.ts │ │ │ │ │ ├── buildSubscriber.ts │ │ │ │ │ ├── buildSubscriptionIdentifier.ts │ │ │ │ │ ├── createNotification.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── parseMarkdown.tsx │ │ │ │ ├── novuUI.tsx │ │ │ │ ├── themes/ │ │ │ │ │ ├── dark.ts │ │ │ │ │ └── index.ts │ │ │ │ └── types.ts │ │ │ ├── umd.ts │ │ │ ├── utils/ │ │ │ │ ├── arrays.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── is-browser.ts │ │ │ │ ├── notification-utils.ts │ │ │ │ └── strings.ts │ │ │ └── ws/ │ │ │ ├── base-socket.ts │ │ │ ├── index.ts │ │ │ ├── party-socket.ts │ │ │ ├── socket-factory.ts │ │ │ └── socket.ts │ │ ├── tailwind.config.js │ │ ├── test-sdk.ts │ │ ├── themes/ │ │ │ └── package.json │ │ ├── tsconfig.cjs.json │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ ├── ui/ │ │ │ └── package.json │ │ └── webpack.config.cjs │ ├── nextjs/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── hooks/ │ │ │ └── package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── server/ │ │ │ └── package.json │ │ ├── src/ │ │ │ ├── app-router/ │ │ │ │ ├── Inbox.tsx │ │ │ │ ├── Subscription.tsx │ │ │ │ └── index.ts │ │ │ ├── hooks/ │ │ │ │ └── index.ts │ │ │ ├── pages-router/ │ │ │ │ ├── Inbox.tsx │ │ │ │ ├── Subscription.tsx │ │ │ │ └── index.ts │ │ │ ├── server/ │ │ │ │ └── index.ts │ │ │ └── themes/ │ │ │ └── index.ts │ │ ├── themes/ │ │ │ └── package.json │ │ ├── tsconfig.declarations.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── novu/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.MD │ │ ├── nodemon-debug.json │ │ ├── nodemon.json │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── client/ │ │ │ │ ├── cli.client.ts │ │ │ │ └── index.ts │ │ │ ├── commands/ │ │ │ │ ├── animation.ts │ │ │ │ ├── dev/ │ │ │ │ │ ├── dev.ts │ │ │ │ │ ├── enums.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── index.ts │ │ │ │ ├── init/ │ │ │ │ │ ├── create-app.ts │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ ├── copy.ts │ │ │ │ │ │ ├── examples.ts │ │ │ │ │ │ ├── get-pkg-manager.ts │ │ │ │ │ │ ├── git.ts │ │ │ │ │ │ ├── install.ts │ │ │ │ │ │ ├── is-folder-empty.ts │ │ │ │ │ │ ├── is-online.ts │ │ │ │ │ │ ├── is-writeable.ts │ │ │ │ │ │ └── validate-pkg.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── templates/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── ts/ │ │ │ │ │ │ └── app/ │ │ │ │ │ │ └── page.module.css │ │ │ │ │ ├── app-react-email/ │ │ │ │ │ │ └── ts/ │ │ │ │ │ │ ├── README-template.md │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ │ ├── dev-studio-status/ │ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ │ ├── events/ │ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ │ ├── novu/ │ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ │ └── trigger/ │ │ │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── NotificationToast/ │ │ │ │ │ │ │ │ ├── Notifications.module.css │ │ │ │ │ │ │ │ └── Notifications.tsx │ │ │ │ │ │ │ ├── globals.css │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── novu/ │ │ │ │ │ │ │ │ ├── emails/ │ │ │ │ │ │ │ │ │ └── novu-onboarding-email.tsx │ │ │ │ │ │ │ │ └── workflows/ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── welcome-onboarding-email/ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ ├── schemas.ts │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── workflow.ts │ │ │ │ │ │ │ ├── page.module.css │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── eslintrc.json │ │ │ │ │ │ ├── gitignore │ │ │ │ │ │ ├── next-env.d.ts │ │ │ │ │ │ ├── next.config.mjs │ │ │ │ │ │ ├── postcss.config.cjs │ │ │ │ │ │ ├── tailwind.config.ts │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ ├── github/ │ │ │ │ │ │ └── workflows/ │ │ │ │ │ │ └── novu.yml │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── shared.ts │ │ │ │ ├── step/ │ │ │ │ │ ├── __fixtures__/ │ │ │ │ │ │ └── templates/ │ │ │ │ │ │ ├── no-default-export.tsx │ │ │ │ │ │ ├── no-react-email.tsx │ │ │ │ │ │ ├── should-be-ignored.test.tsx │ │ │ │ │ │ ├── test-file.test.tsx │ │ │ │ │ │ ├── test-template.tsx │ │ │ │ │ │ └── valid-template.tsx │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── client.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── bundler/ │ │ │ │ │ │ ├── bundler.spec.ts │ │ │ │ │ │ ├── bundler.ts │ │ │ │ │ │ ├── config.spec.ts │ │ │ │ │ │ ├── config.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── node-paths.ts │ │ │ │ │ │ └── schema-extractor.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── loader.ts │ │ │ │ │ │ ├── schema.spec.ts │ │ │ │ │ │ └── schema.ts │ │ │ │ │ ├── discovery/ │ │ │ │ │ │ ├── email-template-discovery.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── step-discovery.spec.ts │ │ │ │ │ │ └── step-discovery.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── publish.ts │ │ │ │ │ ├── templates/ │ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ │ ├── step-file.spec.ts.snap │ │ │ │ │ │ │ └── worker-wrapper.spec.ts.snap │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── step-file.spec.ts │ │ │ │ │ │ ├── step-file.ts │ │ │ │ │ │ ├── worker-wrapper.spec.ts │ │ │ │ │ │ └── worker-wrapper.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── environment.ts │ │ │ │ │ ├── file-paths.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── package-manager.ts │ │ │ │ │ ├── spinner.ts │ │ │ │ │ └── table.ts │ │ │ │ ├── sync.spec.ts │ │ │ │ ├── sync.ts │ │ │ │ └── translations/ │ │ │ │ ├── README.md │ │ │ │ ├── client.ts │ │ │ │ ├── index.ts │ │ │ │ ├── pull.ts │ │ │ │ ├── push.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── constants/ │ │ │ │ ├── constants.ts │ │ │ │ └── index.ts │ │ │ ├── dev-server/ │ │ │ │ ├── http-server.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── services/ │ │ │ ├── analytics.service.ts │ │ │ ├── config.service.ts │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── providers/ │ │ ├── .czrc │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── base.provider.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── chat/ │ │ │ │ │ ├── chat-webhook/ │ │ │ │ │ │ └── chat-webhook.provider.ts │ │ │ │ │ ├── discord/ │ │ │ │ │ │ ├── discord.provider.spec.ts │ │ │ │ │ │ └── discord.provider.ts │ │ │ │ │ ├── getstream/ │ │ │ │ │ │ ├── getstream.provider.spec.ts │ │ │ │ │ │ └── getstream.provider.ts │ │ │ │ │ ├── grafana-on-call/ │ │ │ │ │ │ ├── grafana-on-call.provider.spec.ts │ │ │ │ │ │ └── grafana-on-call.provider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mattermost/ │ │ │ │ │ │ ├── mattermost.provider.spec.ts │ │ │ │ │ │ └── mattermost.provider.ts │ │ │ │ │ ├── msTeams/ │ │ │ │ │ │ ├── msTeams.provider.spec.ts │ │ │ │ │ │ └── msTeams.provider.ts │ │ │ │ │ ├── rocket-chat/ │ │ │ │ │ │ ├── rocket-chat.provider.spec.ts │ │ │ │ │ │ └── rocket-chat.provider.ts │ │ │ │ │ ├── ryver/ │ │ │ │ │ │ ├── ryver.provider.spec.ts │ │ │ │ │ │ └── ryver.provider.ts │ │ │ │ │ ├── slack/ │ │ │ │ │ │ ├── slack.provider.spec.ts │ │ │ │ │ │ └── slack.provider.ts │ │ │ │ │ ├── whatsapp-business/ │ │ │ │ │ │ ├── consts/ │ │ │ │ │ │ │ └── whatsapp-business.enum.ts │ │ │ │ │ │ ├── types/ │ │ │ │ │ │ │ └── whatsapp-business.types.ts │ │ │ │ │ │ ├── whatsapp-business.provider.spec.ts │ │ │ │ │ │ └── whatsapp-business.provider.ts │ │ │ │ │ └── zulip/ │ │ │ │ │ ├── zulip.provider.spec.ts │ │ │ │ │ └── zulip.provider.ts │ │ │ │ ├── email/ │ │ │ │ │ ├── braze/ │ │ │ │ │ │ ├── braze.provider.spec.ts │ │ │ │ │ │ └── braze.provider.ts │ │ │ │ │ ├── brevo/ │ │ │ │ │ │ ├── brevo.provider.spec.ts │ │ │ │ │ │ └── brevo.provider.ts │ │ │ │ │ ├── email-webhook/ │ │ │ │ │ │ ├── email-webhook.provider.spec.ts │ │ │ │ │ │ └── email-webhook.provider.ts │ │ │ │ │ ├── emailjs/ │ │ │ │ │ │ ├── emailjs.config.ts │ │ │ │ │ │ ├── emailjs.provider.spec.ts │ │ │ │ │ │ └── emailjs.provider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── infobip/ │ │ │ │ │ │ ├── infobip.provider.spec.ts │ │ │ │ │ │ └── infobip.provider.ts │ │ │ │ │ ├── mailersend/ │ │ │ │ │ │ └── mailersend.provider.ts │ │ │ │ │ ├── mailgun/ │ │ │ │ │ │ ├── mailgun.provider.spec.ts │ │ │ │ │ │ └── mailgun.provider.ts │ │ │ │ │ ├── mailjet/ │ │ │ │ │ │ ├── mailjet.provider.spec.ts │ │ │ │ │ │ └── mailjet.provider.ts │ │ │ │ │ ├── mailtrap/ │ │ │ │ │ │ ├── mailtrap.provider.spec.ts │ │ │ │ │ │ └── mailtrap.provider.ts │ │ │ │ │ ├── mandrill/ │ │ │ │ │ │ ├── mandril.interface.ts │ │ │ │ │ │ ├── mandrill.provider.spec.ts │ │ │ │ │ │ └── mandrill.provider.ts │ │ │ │ │ ├── netcore/ │ │ │ │ │ │ ├── netcore-types.ts │ │ │ │ │ │ ├── netcore.provider.spec.ts │ │ │ │ │ │ └── netcore.provider.ts │ │ │ │ │ ├── nodemailer/ │ │ │ │ │ │ ├── nodemailer.provider.spec.ts │ │ │ │ │ │ └── nodemailer.provider.ts │ │ │ │ │ ├── outlook365/ │ │ │ │ │ │ ├── outlook365.provider.spec.ts │ │ │ │ │ │ └── outlook365.provider.ts │ │ │ │ │ ├── plunk/ │ │ │ │ │ │ ├── plunk.interface.ts │ │ │ │ │ │ ├── plunk.provider.spec.ts │ │ │ │ │ │ └── plunk.provider.ts │ │ │ │ │ ├── postmark/ │ │ │ │ │ │ ├── postmark.provider.spec.ts │ │ │ │ │ │ └── postmark.provider.ts │ │ │ │ │ ├── resend/ │ │ │ │ │ │ ├── resend.provider.spec.ts │ │ │ │ │ │ └── resend.provider.ts │ │ │ │ │ ├── sendgrid/ │ │ │ │ │ │ ├── sendgrid.provider.spec.ts │ │ │ │ │ │ └── sendgrid.provider.ts │ │ │ │ │ ├── ses/ │ │ │ │ │ │ ├── ses.config.ts │ │ │ │ │ │ ├── ses.provider.spec.ts │ │ │ │ │ │ └── ses.provider.ts │ │ │ │ │ └── sparkpost/ │ │ │ │ │ ├── sparkpost.error.ts │ │ │ │ │ ├── sparkpost.provider.spec.ts │ │ │ │ │ └── sparkpost.provider.ts │ │ │ │ ├── index.ts │ │ │ │ ├── push/ │ │ │ │ │ ├── apns/ │ │ │ │ │ │ ├── apns.provider.spec.ts │ │ │ │ │ │ └── apns.provider.ts │ │ │ │ │ ├── appio/ │ │ │ │ │ │ ├── appio.provider.spec.ts │ │ │ │ │ │ └── appio.provider.ts │ │ │ │ │ ├── expo/ │ │ │ │ │ │ ├── expo.provider.spec.ts │ │ │ │ │ │ └── expo.provider.ts │ │ │ │ │ ├── fcm/ │ │ │ │ │ │ ├── fcm.provider.spec.ts │ │ │ │ │ │ └── fcm.provider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── one-signal/ │ │ │ │ │ │ ├── one-signal.provider.spec.ts │ │ │ │ │ │ ├── one-signal.provider.ts │ │ │ │ │ │ └── one-signal.providerV2.spec.ts │ │ │ │ │ ├── push-webhook/ │ │ │ │ │ │ ├── push-webhook.provider.spec.ts │ │ │ │ │ │ └── push-webhook.provider.ts │ │ │ │ │ ├── push.base-provider.ts │ │ │ │ │ ├── pusher-beams/ │ │ │ │ │ │ ├── pusher-beams.provider.spec.ts │ │ │ │ │ │ └── pusher-beams.provider.ts │ │ │ │ │ └── pushpad/ │ │ │ │ │ ├── pushpad.provider.spec.ts │ │ │ │ │ └── pushpad.provider.ts │ │ │ │ └── sms/ │ │ │ │ ├── africas-talking/ │ │ │ │ │ ├── africas-talking.provider.spec.ts │ │ │ │ │ └── africas-talking.provider.ts │ │ │ │ ├── afro-sms/ │ │ │ │ │ └── afro-sms.provider.ts │ │ │ │ ├── azure-sms/ │ │ │ │ │ ├── azure-sms.provider.spec.ts │ │ │ │ │ └── azure-sms.provider.ts │ │ │ │ ├── bandwidth/ │ │ │ │ │ ├── bandwidth.provider.spec.ts │ │ │ │ │ └── bandwidth.provider.ts │ │ │ │ ├── brevo-sms/ │ │ │ │ │ ├── brevo-sms.provider.spec.ts │ │ │ │ │ └── brevo-sms.provider.ts │ │ │ │ ├── bulk-sms/ │ │ │ │ │ ├── bulk-sms.provider.spec.ts │ │ │ │ │ └── bulk-sms.provider.ts │ │ │ │ ├── burst-sms/ │ │ │ │ │ ├── burst-sms.provider.spec.ts │ │ │ │ │ └── burst-sms.provider.ts │ │ │ │ ├── clickatell/ │ │ │ │ │ ├── clickatell.provider.spec.ts │ │ │ │ │ └── clickatell.provider.ts │ │ │ │ ├── clicksend/ │ │ │ │ │ ├── clicksend.provider.spec.ts │ │ │ │ │ └── clicksend.provider.ts │ │ │ │ ├── cm-telecom/ │ │ │ │ │ ├── cm-telecom.provider.spec.ts │ │ │ │ │ └── cm-telecom.provider.ts │ │ │ │ ├── eazy-sms/ │ │ │ │ │ ├── eazy-sms.provider.spec.ts │ │ │ │ │ └── eazy-sms.provider.ts │ │ │ │ ├── firetext/ │ │ │ │ │ ├── firetext.provider.spec.ts │ │ │ │ │ └── firetext.provider.ts │ │ │ │ ├── forty-six-elks/ │ │ │ │ │ ├── forty-six-elks.provider.spec.ts │ │ │ │ │ └── forty-six-elks.provider.ts │ │ │ │ ├── generic-sms/ │ │ │ │ │ ├── generic-sms.provider.spec.ts │ │ │ │ │ └── generic-sms.provider.ts │ │ │ │ ├── gupshup/ │ │ │ │ │ ├── gupshup.provider.spec.ts │ │ │ │ │ └── gupshup.provider.ts │ │ │ │ ├── imedia/ │ │ │ │ │ ├── imedia.provider.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── infobip/ │ │ │ │ │ ├── infobip.provider.spec.ts │ │ │ │ │ └── infobip.provider.ts │ │ │ │ ├── isend-sms/ │ │ │ │ │ ├── isend-sms.provider.spec.ts │ │ │ │ │ └── isend-sms.provider.ts │ │ │ │ ├── isendpro-sms/ │ │ │ │ │ ├── isendpro-sms.provider.ts │ │ │ │ │ └── isendpro-sms.test.provider.spec.ts │ │ │ │ ├── kannel/ │ │ │ │ │ ├── kannel.provider.spec.ts │ │ │ │ │ └── kannel.provider.ts │ │ │ │ ├── maqsam/ │ │ │ │ │ ├── maqsam.provider.spec.ts │ │ │ │ │ └── maqsam.provider.ts │ │ │ │ ├── messagebird/ │ │ │ │ │ ├── messagebird.provider.spec.ts │ │ │ │ │ └── messagebird.provider.ts │ │ │ │ ├── mobishastra/ │ │ │ │ │ ├── mobishastra.provider.spec.ts │ │ │ │ │ └── mobishastra.provider.ts │ │ │ │ ├── nexmo/ │ │ │ │ │ ├── nexmo.provider.spec.ts │ │ │ │ │ └── nexmo.provider.ts │ │ │ │ ├── plivo/ │ │ │ │ │ ├── plivo.provider.spec.ts │ │ │ │ │ └── plivo.provider.ts │ │ │ │ ├── ring-central/ │ │ │ │ │ ├── ring-central.provider.spec.ts │ │ │ │ │ └── ring-central.provider.ts │ │ │ │ ├── sendchamp/ │ │ │ │ │ ├── sendchamp.provider.spec.ts │ │ │ │ │ └── sendchamp.provider.ts │ │ │ │ ├── simpletexting/ │ │ │ │ │ ├── simpletexting.provider.spec.ts │ │ │ │ │ └── simpletexting.provider.ts │ │ │ │ ├── sinch/ │ │ │ │ │ ├── sinch.provider.spec.ts │ │ │ │ │ └── sinch.provider.ts │ │ │ │ ├── sms-central/ │ │ │ │ │ ├── sms-central.provider.spec.ts │ │ │ │ │ └── sms-central.provider.ts │ │ │ │ ├── sms77/ │ │ │ │ │ ├── sms77.provider.spec.ts │ │ │ │ │ └── sms77.provider.ts │ │ │ │ ├── smsmode/ │ │ │ │ │ ├── smsmode.provider.ts │ │ │ │ │ └── smsmode.test.provider.spec.ts │ │ │ │ ├── sns/ │ │ │ │ │ ├── sns.config.ts │ │ │ │ │ ├── sns.provider.spec.ts │ │ │ │ │ └── sns.provider.ts │ │ │ │ ├── telnyx/ │ │ │ │ │ ├── telnyx.interface.ts │ │ │ │ │ ├── telnyx.provider.spec.ts │ │ │ │ │ └── telnyx.provider.ts │ │ │ │ ├── termii/ │ │ │ │ │ ├── sms.ts │ │ │ │ │ ├── termii.provider.spec.ts │ │ │ │ │ └── termii.provider.ts │ │ │ │ ├── twilio/ │ │ │ │ │ ├── twilio.provider.spec.ts │ │ │ │ │ └── twilio.provider.ts │ │ │ │ └── unifonic/ │ │ │ │ └── unifonic.provider.ts │ │ │ └── utils/ │ │ │ ├── change-case/ │ │ │ │ ├── change-case.spec.ts │ │ │ │ ├── functions.ts │ │ │ │ └── index.ts │ │ │ ├── deepmerge.utils.spec.ts │ │ │ ├── deepmerge.utils.ts │ │ │ ├── test/ │ │ │ │ └── spy-axios.ts │ │ │ └── types.ts │ │ ├── tsconfig.esm.json │ │ ├── tsconfig.json │ │ └── vitest.config.js │ ├── react/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── hooks/ │ │ │ └── package.json │ │ ├── internal/ │ │ │ └── package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── server/ │ │ │ └── package.json │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── Bell.tsx │ │ │ │ ├── Inbox.tsx │ │ │ │ ├── InboxContent.tsx │ │ │ │ ├── Mounter.tsx │ │ │ │ ├── Notifications.tsx │ │ │ │ ├── NovuUI.tsx │ │ │ │ ├── Preferences.tsx │ │ │ │ ├── Renderer.tsx │ │ │ │ ├── ShadowRootDetector.tsx │ │ │ │ ├── index.ts │ │ │ │ └── subscription/ │ │ │ │ ├── DefaultSubscription.tsx │ │ │ │ ├── Subscription.tsx │ │ │ │ ├── SubscriptionButton.tsx │ │ │ │ └── SubscriptionPreferences.tsx │ │ │ ├── context/ │ │ │ │ ├── NovuUIContext.tsx │ │ │ │ └── RendererContext.tsx │ │ │ ├── hooks/ │ │ │ │ ├── NovuProvider.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── internal/ │ │ │ │ │ ├── useBrowserTabsChannel.ts │ │ │ │ │ ├── useDataRef.ts │ │ │ │ │ └── useWebsocketEvent.ts │ │ │ │ ├── useCounts.ts │ │ │ │ ├── useCreateSubscription.ts │ │ │ │ ├── useNotifications.ts │ │ │ │ ├── usePreferences.ts │ │ │ │ ├── useRemoveSubscription.ts │ │ │ │ ├── useSchedule.ts │ │ │ │ ├── useSubscription.ts │ │ │ │ ├── useSubscriptions.ts │ │ │ │ └── useUpdateSubscription.ts │ │ │ ├── index.ts │ │ │ ├── internal/ │ │ │ │ └── index.ts │ │ │ ├── server/ │ │ │ │ └── index.tsx │ │ │ ├── themes/ │ │ │ │ └── index.ts │ │ │ └── utils/ │ │ │ ├── appearance.ts │ │ │ ├── createContextAndHook.ts │ │ │ ├── requestLock.ts │ │ │ └── types.ts │ │ ├── themes/ │ │ │ └── package.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── react-native/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── shared/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── config/ │ │ │ │ ├── contextPath.ts │ │ │ │ ├── index.ts │ │ │ │ ├── job-queue.ts │ │ │ │ ├── processEnv.ts │ │ │ │ └── redisPrefix.ts │ │ │ ├── consts/ │ │ │ │ ├── data-retention/ │ │ │ │ │ └── index.ts │ │ │ │ ├── feature-tiers-constants.ts │ │ │ │ ├── filters/ │ │ │ │ │ ├── filters.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── handlebar-helpers/ │ │ │ │ │ ├── getTemplateVariables.ts │ │ │ │ │ ├── handlebarHelpers.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── inviteTeamMemberNudge.ts │ │ │ │ ├── layouts.ts │ │ │ │ ├── notification-item-buttons/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notificationItemButton.ts │ │ │ │ ├── password-helper/ │ │ │ │ │ ├── PasswordResetFlowEnum.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── passwordHelper.ts │ │ │ │ ├── preferences/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── preferences.const.ts │ │ │ │ ├── productFeatureEnabledForServiceLevel.ts │ │ │ │ ├── providers/ │ │ │ │ │ ├── channels/ │ │ │ │ │ │ ├── chat.ts │ │ │ │ │ │ ├── email.ts │ │ │ │ │ │ ├── http-request.ts │ │ │ │ │ │ ├── in-app.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── push.ts │ │ │ │ │ │ └── sms.ts │ │ │ │ │ ├── configurations/ │ │ │ │ │ │ └── provider-configuration.ts │ │ │ │ │ ├── credentials/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── provider-credentials.ts │ │ │ │ │ │ └── secure-credentials.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── provider.interface.ts │ │ │ │ │ └── providers.ts │ │ │ │ ├── rate-limiting/ │ │ │ │ │ ├── apiRateLimits.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── severity.ts │ │ │ │ ├── template-store/ │ │ │ │ │ └── index.ts │ │ │ │ ├── translation/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── translation.constants.spec.ts │ │ │ │ │ └── translation.constants.ts │ │ │ │ ├── upsert-validation-constants.ts │ │ │ │ └── validIdRegex.ts │ │ │ ├── dto/ │ │ │ │ ├── bridge/ │ │ │ │ │ ├── bridge.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── environment-variable/ │ │ │ │ │ ├── environment-variable.dto.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── environments/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tags.interface.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── event.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── integration/ │ │ │ │ │ ├── construct-integration.interface.ts │ │ │ │ │ ├── create-integration.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── update-integration.dto.ts │ │ │ │ ├── layout/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── layout.dto.ts │ │ │ │ ├── message-template/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── message-template.dto.ts │ │ │ │ ├── notification-templates/ │ │ │ │ │ ├── create-template.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── update-template.dto.ts │ │ │ │ ├── organization/ │ │ │ │ │ ├── create-organization.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── members/ │ │ │ │ │ │ ├── bulk-invite-members.dto.ts │ │ │ │ │ │ └── get-invite.dto.ts │ │ │ │ │ └── update-external-organization.dto.ts │ │ │ │ ├── pagination/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── pagination.dto.ts │ │ │ │ ├── session/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── session.dto.ts │ │ │ │ ├── shared/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── shared.ts │ │ │ │ ├── stateless-control-values/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── stateless-controls.ts │ │ │ │ ├── subscriber/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── subscriber.dto.ts │ │ │ │ ├── subscription/ │ │ │ │ │ ├── get-subscription.dto.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── tenant/ │ │ │ │ │ ├── create-tenant.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tenant.dto.ts │ │ │ │ │ └── update-tenant.dto.ts │ │ │ │ ├── topic/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── topic-subscriber.interface.ts │ │ │ │ │ └── topic.dto.ts │ │ │ │ ├── widget/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification.dto.ts │ │ │ │ │ └── subscriber-preference/ │ │ │ │ │ └── update-subscriber-preference.dto.ts │ │ │ │ ├── workflow-override/ │ │ │ │ │ ├── create-workflow-override-request.dto.ts │ │ │ │ │ ├── create-workflow-override-response.dto.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── update-workflow-override-request.dto.ts │ │ │ │ │ ├── update-workflow-override-response.dto.ts │ │ │ │ │ └── workflow-override.dto.ts │ │ │ │ └── workflows/ │ │ │ │ ├── create-workflow-deprecated.dto.ts │ │ │ │ ├── generate-preview-request.dto.ts │ │ │ │ ├── get-list-query-params.ts │ │ │ │ ├── index.ts │ │ │ │ ├── json-schema-dto.ts │ │ │ │ ├── preview-step-response.dto.ts │ │ │ │ ├── promote-workflow-dto.ts │ │ │ │ ├── step.dto.ts │ │ │ │ ├── update-workflow-deprecated.dto.ts │ │ │ │ ├── workflow-deprecated.dto.ts │ │ │ │ ├── workflow-status-enum.ts │ │ │ │ ├── workflow-test-data-response-dto.ts │ │ │ │ └── workflow.dto.ts │ │ │ ├── entities/ │ │ │ │ ├── activity-feed/ │ │ │ │ │ ├── activity.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── actor/ │ │ │ │ │ ├── actor.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── apiKeys/ │ │ │ │ │ ├── apiKeys.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── change/ │ │ │ │ │ ├── change.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── environment/ │ │ │ │ │ ├── environment.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── environment-variable/ │ │ │ │ │ ├── environment-variable.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── execution-details/ │ │ │ │ │ ├── execution-details.interface.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── feed/ │ │ │ │ │ └── feed.interface.ts │ │ │ │ ├── integration/ │ │ │ │ │ ├── configuration.interface.ts │ │ │ │ │ ├── credential.interface.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── integration.interface.ts │ │ │ │ ├── job/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── job.interface.ts │ │ │ │ │ └── status.enum.ts │ │ │ │ ├── layout/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── layout.interface.ts │ │ │ │ ├── log/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── log.enums.ts │ │ │ │ ├── message-template/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── message-template.interface.ts │ │ │ │ ├── messages/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── messages.interface.ts │ │ │ │ ├── notification/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notification.interface.ts │ │ │ │ ├── notification-group/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notification-group.interface.ts │ │ │ │ ├── notification-template/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notification-template.interface.ts │ │ │ │ ├── notification-trigger/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notification-trigger.interface.ts │ │ │ │ ├── organization/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── member.enum.ts │ │ │ │ │ ├── member.interface.ts │ │ │ │ │ └── organization.interface.ts │ │ │ │ ├── step/ │ │ │ │ │ └── index.ts │ │ │ │ ├── subscriber-preference/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── subscriber-preference.interface.ts │ │ │ │ ├── tenant/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tenant.interface.ts │ │ │ │ ├── user/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── subscriber-user.interface.ts │ │ │ │ │ ├── user.enums.ts │ │ │ │ │ └── user.interface.ts │ │ │ │ ├── workflow-override/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── workflow-override.interface.ts │ │ │ │ └── workflow-run/ │ │ │ │ ├── delivery-lifecycle-detail.enum.ts │ │ │ │ ├── delivery-lifecycle-event-type.ts │ │ │ │ ├── delivery-lifecycle-status.enum.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── services/ │ │ │ │ ├── feature-flags/ │ │ │ │ │ ├── feature-flags.util.spec.ts │ │ │ │ │ ├── feature-flags.util.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── types/ │ │ │ │ ├── ai.ts │ │ │ │ ├── auth.ts │ │ │ │ ├── billing.ts │ │ │ │ ├── builder.ts │ │ │ │ ├── channel-connection.ts │ │ │ │ ├── channel-endpoint.ts │ │ │ │ ├── channel.ts │ │ │ │ ├── context.ts │ │ │ │ ├── controls.ts │ │ │ │ ├── cron.ts │ │ │ │ ├── environment-variable.ts │ │ │ │ ├── environment.ts │ │ │ │ ├── events.ts │ │ │ │ ├── feature-flags.spec.ts │ │ │ │ ├── feature-flags.ts │ │ │ │ ├── files.ts │ │ │ │ ├── general.ts │ │ │ │ ├── index.ts │ │ │ │ ├── jobs.ts │ │ │ │ ├── layout.ts │ │ │ │ ├── message-templates.ts │ │ │ │ ├── messages.ts │ │ │ │ ├── notification-templates.ts │ │ │ │ ├── organization.ts │ │ │ │ ├── providers.ts │ │ │ │ ├── rate-limiting.ts │ │ │ │ ├── resource-limiting.ts │ │ │ │ ├── response.ts │ │ │ │ ├── secrets.ts │ │ │ │ ├── storage.ts │ │ │ │ ├── subscriber.ts │ │ │ │ ├── tenant.ts │ │ │ │ ├── timezones.ts │ │ │ │ ├── topic.ts │ │ │ │ ├── user.ts │ │ │ │ ├── utils.ts │ │ │ │ ├── workflow-channel-preferences.ts │ │ │ │ ├── workflow-override.ts │ │ │ │ └── ws.ts │ │ │ ├── ui/ │ │ │ │ ├── index.ts │ │ │ │ └── marketing.ts │ │ │ ├── utils/ │ │ │ │ ├── bridge.utils.ts │ │ │ │ ├── buildWorkflowPreferences.spec.ts │ │ │ │ ├── buildWorkflowPreferences.ts │ │ │ │ ├── checkIsResponseError.spec.ts │ │ │ │ ├── checkIsResponseError.ts │ │ │ │ ├── env.ts │ │ │ │ ├── index.ts │ │ │ │ ├── issues.ts │ │ │ │ ├── locales/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── locale-registry.ts │ │ │ │ │ ├── locale-validator.ts │ │ │ │ │ └── locales.ts │ │ │ │ ├── normalizeEmail.ts │ │ │ │ ├── schema/ │ │ │ │ │ ├── create-mock-object-from-schema.spec.ts │ │ │ │ │ └── create-mock-object-from-schema.ts │ │ │ │ └── slugify/ │ │ │ │ ├── builtinReplacements.ts │ │ │ │ ├── index.ts │ │ │ │ ├── slugify.spec.ts │ │ │ │ ├── slugify.ts │ │ │ │ └── transliterate.ts │ │ │ └── webhooks/ │ │ │ ├── index.ts │ │ │ └── webhook-event.enum.ts │ │ ├── tsconfig.esm.json │ │ └── tsconfig.json │ └── stateless/ │ ├── .czrc │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── project.json │ ├── src/ │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── content/ │ │ │ │ ├── content.engine.spec.ts │ │ │ │ └── content.engine.ts │ │ │ ├── events/ │ │ │ │ └── types.d.ts │ │ │ ├── handler/ │ │ │ │ ├── chat.handler.spec.ts │ │ │ │ ├── chat.handler.ts │ │ │ │ ├── email.handler.spec.ts │ │ │ │ ├── email.handler.ts │ │ │ │ ├── sms.handler.spec.ts │ │ │ │ └── sms.handler.ts │ │ │ ├── novu.interface.ts │ │ │ ├── novu.spec.ts │ │ │ ├── novu.ts │ │ │ ├── provider/ │ │ │ │ ├── channel-data.type.ts │ │ │ │ ├── provider.enum.ts │ │ │ │ ├── provider.interface.ts │ │ │ │ ├── provider.store.spec.ts │ │ │ │ └── provider.store.ts │ │ │ ├── template/ │ │ │ │ ├── template.interface.ts │ │ │ │ ├── template.store.spec.ts │ │ │ │ └── template.store.ts │ │ │ ├── theme/ │ │ │ │ ├── theme.interface.ts │ │ │ │ ├── theme.store.spec.ts │ │ │ │ └── theme.store.ts │ │ │ └── trigger/ │ │ │ ├── trigger.engine.spec.ts │ │ │ └── trigger.engine.ts │ │ └── types/ │ │ └── example.d.ts │ ├── tsconfig.esm.json │ └── tsconfig.json ├── playground/ │ ├── nestjs/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── nest-cli.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.controller.ts │ │ │ ├── app.module.ts │ │ │ ├── app.service.ts │ │ │ ├── app.spec.ts │ │ │ ├── main.ts │ │ │ ├── notification.service.ts │ │ │ └── user.service.ts │ │ ├── tsconfig.json │ │ └── vitest.config.mts │ └── nextjs/ │ ├── .gitignore │ ├── components.json │ ├── next.config.mjs │ ├── package.json │ ├── postcss.config.mjs │ ├── src/ │ │ ├── app/ │ │ │ ├── agent-toolkit/ │ │ │ │ ├── app-sidenav.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── api/ │ │ │ │ └── agent-toolkit/ │ │ │ │ ├── chat/ │ │ │ │ │ └── route.ts │ │ │ │ ├── lib/ │ │ │ │ │ └── toolkit.ts │ │ │ │ ├── result/ │ │ │ │ │ └── route.ts │ │ │ │ └── webhook/ │ │ │ │ └── route.ts │ │ │ ├── app-router/ │ │ │ │ └── inbox/ │ │ │ │ └── page.tsx │ │ │ ├── inbox-client/ │ │ │ │ └── page.tsx │ │ │ └── layout.tsx │ │ ├── components/ │ │ │ ├── Header.tsx │ │ │ ├── SideNav.tsx │ │ │ ├── Title.tsx │ │ │ ├── ai-elements/ │ │ │ │ ├── agent.tsx │ │ │ │ ├── artifact.tsx │ │ │ │ ├── attachments.tsx │ │ │ │ ├── audio-player.tsx │ │ │ │ ├── canvas.tsx │ │ │ │ ├── chain-of-thought.tsx │ │ │ │ ├── checkpoint.tsx │ │ │ │ ├── code-block.tsx │ │ │ │ ├── commit.tsx │ │ │ │ ├── confirmation.tsx │ │ │ │ ├── connection.tsx │ │ │ │ ├── context.tsx │ │ │ │ ├── controls.tsx │ │ │ │ ├── conversation.tsx │ │ │ │ ├── edge.tsx │ │ │ │ ├── environment-variables.tsx │ │ │ │ ├── file-tree.tsx │ │ │ │ ├── image.tsx │ │ │ │ ├── inline-citation.tsx │ │ │ │ ├── jsx-preview.tsx │ │ │ │ ├── message.tsx │ │ │ │ ├── mic-selector.tsx │ │ │ │ ├── model-selector.tsx │ │ │ │ ├── node.tsx │ │ │ │ ├── open-in-chat.tsx │ │ │ │ ├── package-info.tsx │ │ │ │ ├── panel.tsx │ │ │ │ ├── persona.tsx │ │ │ │ ├── plan.tsx │ │ │ │ ├── prompt-input.tsx │ │ │ │ ├── queue.tsx │ │ │ │ ├── reasoning.tsx │ │ │ │ ├── sandbox.tsx │ │ │ │ ├── schema-display.tsx │ │ │ │ ├── shimmer.tsx │ │ │ │ ├── snippet.tsx │ │ │ │ ├── sources.tsx │ │ │ │ ├── speech-input.tsx │ │ │ │ ├── stack-trace.tsx │ │ │ │ ├── suggestion.tsx │ │ │ │ ├── task.tsx │ │ │ │ ├── terminal.tsx │ │ │ │ ├── test-results.tsx │ │ │ │ ├── tool.tsx │ │ │ │ ├── toolbar.tsx │ │ │ │ ├── transcription.tsx │ │ │ │ ├── voice-selector.tsx │ │ │ │ └── web-preview.tsx │ │ │ ├── hooks/ │ │ │ │ ├── demo/ │ │ │ │ │ ├── inbox-item.tsx │ │ │ │ │ ├── more-actions-dropdown.tsx │ │ │ │ │ ├── notion-theme.tsx │ │ │ │ │ ├── show.tsx │ │ │ │ │ ├── sidebar-item.tsx │ │ │ │ │ ├── status-context.tsx │ │ │ │ │ └── status-dropdown.tsx │ │ │ │ └── icons.tsx │ │ │ └── ui/ │ │ │ ├── accordion.tsx │ │ │ ├── alert.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button-group.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── carousel.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── input-group.tsx │ │ │ ├── input.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── spinner.tsx │ │ │ ├── switch.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ └── tooltip.tsx │ │ ├── lib/ │ │ │ └── utils.ts │ │ ├── pages/ │ │ │ ├── _app.tsx │ │ │ ├── _document.tsx │ │ │ ├── api/ │ │ │ │ └── hello.ts │ │ │ ├── custom-icons/ │ │ │ │ └── index.tsx │ │ │ ├── custom-popover/ │ │ │ │ └── index.tsx │ │ │ ├── custom-subject-body/ │ │ │ │ └── index.tsx │ │ │ ├── hooks/ │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── layout.tsx │ │ │ ├── notifications/ │ │ │ │ └── index.tsx │ │ │ ├── novu-theme/ │ │ │ │ ├── index.tsx │ │ │ │ └── novu-theme.module.css │ │ │ ├── preferences/ │ │ │ │ └── index.tsx │ │ │ ├── render-bell/ │ │ │ │ └── index.tsx │ │ │ ├── render-notification/ │ │ │ │ └── index.tsx │ │ │ ├── subscription/ │ │ │ │ └── index.tsx │ │ │ ├── subscription-components/ │ │ │ │ └── index.tsx │ │ │ └── subscription-hooks/ │ │ │ └── index.tsx │ │ ├── styles/ │ │ │ └── globals.css │ │ └── utils/ │ │ ├── config.ts │ │ └── tw.ts │ └── tsconfig.json ├── pnpm-workspace.yaml ├── renovate.json ├── scripts/ │ ├── clean-build.sh │ ├── dev-environment-setup.sh │ ├── dotenvcreate.mjs │ ├── get-affected-batch.mjs │ ├── get-packages-folder.mjs │ ├── jarvis.js │ ├── pnpm-context.mjs │ ├── print-affected-array.mjs │ ├── publish-preview-packages.mjs │ ├── release.mjs │ ├── seed-agent-data.mjs │ ├── set-package-dependencies.mjs │ ├── setup-agent.sh │ ├── setup-env-files.js │ └── symlink-ee.mjs └── tsconfig.json