diff --git a/.env.example b/.env.example index 870011b17e6..d35578adab9 100644 --- a/.env.example +++ b/.env.example @@ -109,6 +109,11 @@ PUBLIC_LOGODEV_KEY= # ---- Connect UI NANGO_PUBLIC_CONNECT_URL= + # Only relevant for self-hosted NANGO_CONNECT_UI_PORT=3009 FLAG_SERVE_CONNECT_UI=true +# Slack Notification +NANGO_SLACK_INTEGRATION_KEY= +NANGO_ADMIN_UUID= +NANGO_ADMIN_PROD_ENV=prod diff --git a/packages/server/lib/controllers/connection.controller.ts b/packages/server/lib/controllers/connection.controller.ts index 76ea9a271a1..b656e452e2a 100644 --- a/packages/server/lib/controllers/connection.controller.ts +++ b/packages/server/lib/controllers/connection.controller.ts @@ -1,19 +1,21 @@ -import type { Request, Response, NextFunction } from 'express'; -import type { OAuth2Credentials, AuthCredentials, ConnectionUpsertResponse } from '@nangohq/shared'; import db from '@nangohq/database'; -import type { TbaCredentials, ApiKeyCredentials, BasicApiCredentials, ConnectionConfig, OAuth1Credentials, OAuth2ClientCredentials } from '@nangohq/types'; -import { configService, connectionService, errorManager, NangoError, accountService, getProvider } from '@nangohq/shared'; -import { NANGO_ADMIN_UUID } from './account.controller.js'; import { logContextGetter } from '@nangohq/logs'; -import type { RequestLocals } from '../utils/express.js'; +import { NangoError, accountService, configService, connectionService, errorManager, getProvider } from '@nangohq/shared'; + +import { NANGO_ADMIN_UUID } from './account.controller.js'; +import { preConnectionDeletion } from '../hooks/connection/on/connection-deleted.js'; import { connectionCreated as connectionCreatedHook, connectionCreationStartCapCheck as connectionCreationStartCapCheckHook, connectionRefreshSuccess } from '../hooks/hooks.js'; -import { getOrchestrator } from '../utils/utils.js'; -import { preConnectionDeletion } from '../hooks/connection/on/connection-deleted.js'; import { slackService } from '../services/slack.js'; +import { getOrchestrator } from '../utils/utils.js'; + +import type { RequestLocals } from '../utils/express.js'; +import type { AuthCredentials, ConnectionUpsertResponse, OAuth2Credentials } from '@nangohq/shared'; +import type { ApiKeyCredentials, BasicApiCredentials, ConnectionConfig, OAuth1Credentials, OAuth2ClientCredentials, TbaCredentials } from '@nangohq/types'; +import type { NextFunction, Request, Response } from 'express'; const orchestrator = getOrchestrator(); @@ -30,7 +32,7 @@ class ConnectionController { const integration_key = process.env['NANGO_SLACK_INTEGRATION_KEY'] || 'slack'; const nangoAdminUUID = NANGO_ADMIN_UUID; - const env = 'prod'; + const env = process.env['NANGO_ADMIN_PROD_ENV'] || 'prod'; const info = await accountService.getAccountAndEnvironmentIdByUUID(nangoAdminUUID as string, env); const { diff --git a/packages/server/lib/controllers/environment.controller.ts b/packages/server/lib/controllers/environment.controller.ts index 47e57e21175..209f20ce721 100644 --- a/packages/server/lib/controllers/environment.controller.ts +++ b/packages/server/lib/controllers/environment.controller.ts @@ -43,7 +43,7 @@ class EnvironmentController { const integration_key = process.env['NANGO_SLACK_INTEGRATION_KEY'] || 'slack'; const nangoAdminUUID = NANGO_ADMIN_UUID; - const env = 'prod'; + const env = process.env['NANGO_ADMIN_PROD_ENV'] || 'prod'; const info = await accountService.getAccountAndEnvironmentIdByUUID(nangoAdminUUID as string, env); if (!info) { diff --git a/packages/server/lib/controllers/v1/environment/getEnvironment.ts b/packages/server/lib/controllers/v1/environment/getEnvironment.ts index 39847ec07de..e542590afd9 100644 --- a/packages/server/lib/controllers/v1/environment/getEnvironment.ts +++ b/packages/server/lib/controllers/v1/environment/getEnvironment.ts @@ -47,7 +47,7 @@ export const getEnvironment = asyncWrapper(async (req, res) => { const connectionId = generateSlackConnectionId(account.uuid, environment.name); const integration_key = process.env['NANGO_SLACK_INTEGRATION_KEY'] || 'slack'; const nangoAdminUUID = NANGO_ADMIN_UUID; - const env = 'prod'; + const env = process.env['NANGO_ADMIN_PROD_ENV'] || 'prod'; const info = await accountService.getAccountAndEnvironmentIdByUUID(nangoAdminUUID as string, env); if (info) { const connectionConfig = await connectionService.getConnectionConfig({ diff --git a/packages/shared/lib/services/notification/slack.service.ts b/packages/shared/lib/services/notification/slack.service.ts index 9466df01674..47ce96f0a08 100644 --- a/packages/shared/lib/services/notification/slack.service.ts +++ b/packages/shared/lib/services/notification/slack.service.ts @@ -1,18 +1,20 @@ -import db, { schema, dbNamespace } from '@nangohq/database'; -import type { ServiceResponse } from '../../models/Generic.js'; -import environmentService from '../environment.service.js'; -import type { Result } from '@nangohq/utils'; -import { basePublicUrl, Err, getLogger, Ok, stringToHash, truncateJson } from '@nangohq/utils'; +import db, { dbNamespace, schema } from '@nangohq/database'; +import { Err, Ok, basePublicUrl, getLogger, stringToHash, truncateJson } from '@nangohq/utils'; + +import configService from '../config.service.js'; import connectionService from '../connection.service.js'; -import type { LogContextGetter } from '@nangohq/logs'; -import type { ConnectionJobs, DBConnection, DBConnectionDecrypted, DBEnvironment, DBSlackNotification, DBTeam } from '@nangohq/types'; -import type { NangoError } from '../../utils/error.js'; import { refreshOrTestCredentials } from '../connections/credentials/refresh.js'; -import configService from '../config.service.js'; +import environmentService from '../environment.service.js'; import { ProxyRequest } from '../proxy/request.js'; import { getProxyConfiguration } from '../proxy/utils.js'; + +import type { ServiceResponse } from '../../models/Generic.js'; import type { Config } from '../../models/Provider.js'; +import type { NangoError } from '../../utils/error.js'; import type { FeatureFlags } from '@nangohq/kvstore'; +import type { LogContextGetter } from '@nangohq/logs'; +import type { ConnectionJobs, DBConnection, DBConnectionDecrypted, DBEnvironment, DBSlackNotification, DBTeam } from '@nangohq/types'; +import type { Result } from '@nangohq/utils'; const logger = getLogger('SlackService'); const TABLE = dbNamespace + 'slack_notifications'; @@ -85,7 +87,7 @@ export class SlackService { private integrationKey = process.env['NANGO_SLACK_INTEGRATION_KEY'] || 'slack'; private nangoAdminUUID = process.env['NANGO_ADMIN_UUID']; - private env = 'prod'; + private env = process.env['NANGO_ADMIN_PROD_ENV'] || 'prod'; constructor({ logContextGetter, featureFlags }: { logContextGetter: LogContextGetter; featureFlags: FeatureFlags }) { this.logContextGetter = logContextGetter;