diff --git a/.cspell.json b/.cspell.json index 5a48c6b144d..c87d2634367 100644 --- a/.cspell.json +++ b/.cspell.json @@ -100,6 +100,8 @@ "Consolas", "consts", "containerd", + "Mobishastra", + "mobishastra", "cpack", "Craco", "crossorigin", diff --git a/apps/web/src/components/docs/docs.const.ts b/apps/web/src/components/docs/docs.const.ts index e9a6c060f05..b99bd2a58f7 100644 --- a/apps/web/src/components/docs/docs.const.ts +++ b/apps/web/src/components/docs/docs.const.ts @@ -1,20 +1,14 @@ import { ROUTES } from '../../constants/routes'; export const PATHS: { [key in ROUTES]?: string } = { - [ROUTES.ACTIVITIES]: 'activity-feed/introduction', - [ROUTES.LAYOUT]: 'content-creation-design/layouts', - [ROUTES.CHANGES]: 'platform/environments', - [ROUTES.INTEGRATIONS]: 'channels-and-providers/integration-store', - [ROUTES.SUBSCRIBERS]: 'subscribers/subscribers', - [ROUTES.WORKFLOWS]: 'workflows/notification-workflows', - [ROUTES.TENANTS]: 'tenants/introduction', - [ROUTES.TRANSLATIONS]: 'content-creation-design/translations', - [ROUTES.STUDIO_ONBOARDING]: 'framework/quickstart', - [ROUTES.STUDIO_ONBOARDING_PREVIEW]: 'framework/concepts/workflows', - [ROUTES.STUDIO_FLOWS]: 'framework/concepts/workflows', - [ROUTES.STUDIO_FLOWS_VIEW]: 'framework/concepts/workflows', - [ROUTES.STUDIO_FLOWS_STEP_EDITOR]: 'framework/concepts/workflows', - [ROUTES.STUDIO_FLOWS_TEST]: 'framework/concepts/workflows', + // [ROUTES.INTEGRATIONS]: 'integrations/providers/introduction', + [ROUTES.SUBSCRIBERS]: 'concepts/subscribers', + [ROUTES.WORKFLOWS]: 'concepts/workflows', + [ROUTES.TENANTS]: 'concepts/tenants', + [ROUTES.STUDIO_ONBOARDING]: 'quickstart/nextjs', + [ROUTES.STUDIO_ONBOARDING_PREVIEW]: 'concepts/controls', + [ROUTES.STUDIO_FLOWS]: 'workflow/introduction', + [ROUTES.STUDIO_FLOWS_VIEW]: 'workflow/introduction', }; export const DOCS_URL = 'https://docs.novu.co'; diff --git a/apps/web/src/components/layout/components/LocalStudioSidebar/LocalStudioSidebarContent.tsx b/apps/web/src/components/layout/components/LocalStudioSidebar/LocalStudioSidebarContent.tsx index e4e56c1c837..fd8e585c4a6 100644 --- a/apps/web/src/components/layout/components/LocalStudioSidebar/LocalStudioSidebarContent.tsx +++ b/apps/web/src/components/layout/components/LocalStudioSidebar/LocalStudioSidebarContent.tsx @@ -8,11 +8,11 @@ import { NavMenuSection } from '../../../nav/NavMenuSection'; import { LocalStudioSidebarOrganizationDisplay } from './LocalStudioSidebarOrganizationDisplay'; import { LocalStudioSidebarToggleButton } from './LocalStudioSidebarToggleButtonProps'; import { token } from '@novu/novui/tokens'; -import { DocsButton } from '../../../docs/DocsButton'; import { css, cx } from '@novu/novui/css'; import { useStudioState } from '../../../../studio/StudioStateProvider'; import { WithLoadingSkeleton } from '@novu/novui'; import { NavMenuButtonInner, rawButtonBaseStyles } from '../../../nav/NavMenuButton/NavMenuButton.shared'; +import { useDocsModal } from '../../../docs/useDocsModal'; type LocalStudioSidebarContentProps = { workflows: IBridgeWorkflow[]; @@ -24,33 +24,43 @@ export const LocalStudioSidebarContent: WithLoadingSkeleton { const { organizationName } = useStudioState(); + const { Component, toggle, setPath } = useDocsModal(); if (isLoading) { return ; } return ( - - - - ( - - )} + <> + + - {workflows?.map((workflow) => ( - - ))} - - + + + + {workflows?.map((workflow) => ( + + ))} + + + + ); }; diff --git a/apps/web/src/components/layout/components/v2/BridgeUpdateModal.tsx b/apps/web/src/components/layout/components/v2/BridgeUpdateModal.tsx index f58d6ddc3f7..31205cf77ab 100644 --- a/apps/web/src/components/layout/components/v2/BridgeUpdateModal.tsx +++ b/apps/web/src/components/layout/components/v2/BridgeUpdateModal.tsx @@ -1,23 +1,25 @@ import { Modal, successMessage } from '@novu/design-system'; import { css } from '@novu/novui/css'; -import { Button, Input, Title, Text } from '@novu/novui'; +import { text } from '@novu/novui/recipes'; +import { Button, Input, Title } from '@novu/novui'; import { IconOutlineMenuBook } from '@novu/novui/icons'; -import { HStack, Box } from '@novu/novui/jsx'; +import { HStack, Box, styled } from '@novu/novui/jsx'; import { FC, useEffect, useState } from 'react'; import { validateBridgeUrl } from '../../../../api/bridge'; -import { updateBridgeUrl } from '../../../../api/environment'; -import { useEnvironment } from '../../../../hooks/useEnvironment'; -import { DocsButton } from '../../../docs/DocsButton'; -import { hstack } from '@novu/novui/patterns'; -import { validateURL } from '../../../../utils/url'; +import { updateBridgeUrl } from '../../../../api'; +import { useEnvironment } from '../../../../hooks'; +import { validateURL } from '../../../../utils'; import { useStudioState } from '../../../../studio/StudioStateProvider'; import { buildBridgeHTTPClient } from '../../../../bridgeApi/bridgeApi.client'; import { useTelemetry } from '../../../../hooks/useNovuAPI'; +import { useDocsModal } from '../../../docs/useDocsModal'; +import { DOCS_URL } from '../../../docs/docs.const'; export type BridgeUpdateModalProps = { isOpen: boolean; toggleOpen: () => void; }; +const LinkText = styled('a', text); export const BridgeUpdateModal: FC = ({ isOpen, toggleOpen }) => { const track = useTelemetry(); @@ -25,6 +27,7 @@ export const BridgeUpdateModal: FC = ({ isOpen, toggleOp const [urlError, setUrlError] = useState(''); const [url, setUrl] = useState(bridgeURL); const [isUpdating, setIsUpdating] = useState(false); + const { Component, toggle, setPath } = useDocsModal(); const { environment, isLoading: isLoadingEnvironment } = useEnvironment(); @@ -99,34 +102,43 @@ export const BridgeUpdateModal: FC = ({ isOpen, toggleOp const isLoading = isLoadingEnvironment || isUpdating; return ( - Update Novu Endpoint URL} onClose={toggleOpen}> - - - - ( - - )} + <> + Update Novu Endpoint URL} onClose={toggleOpen}> + + - - - - + +
+ + + { + e.preventDefault(); + window.open(`${DOCS_URL}/concepts/endpoint`, '_blank'); + }} + href="" + > + Learn more in our docs + + +
+ +
+ + + + ); }; diff --git a/apps/web/src/pages/settings/WebhookPage/WebhookAdditionalInformationLink.tsx b/apps/web/src/pages/settings/WebhookPage/WebhookAdditionalInformationLink.tsx index 74575b35afe..52149d0e539 100644 --- a/apps/web/src/pages/settings/WebhookPage/WebhookAdditionalInformationLink.tsx +++ b/apps/web/src/pages/settings/WebhookPage/WebhookAdditionalInformationLink.tsx @@ -12,7 +12,7 @@ export const WebhookAdditionalInformationLink: FC = () => { justifyContent: 'flex-start', gap: '50', })} - href="https://docs.novu.co/platform/inbound-parse-webhook" + href="https://v0.x-docs.novu.co/platform/inbound-parse-webhook" target="_blank" rel="noopener noreferrer" > diff --git a/apps/web/src/pages/studio-onboarding/components/Footer.tsx b/apps/web/src/pages/studio-onboarding/components/Footer.tsx index 87ad6e20aa7..3929946b812 100644 --- a/apps/web/src/pages/studio-onboarding/components/Footer.tsx +++ b/apps/web/src/pages/studio-onboarding/components/Footer.tsx @@ -8,6 +8,7 @@ import { When } from '../../../components/utils/When'; import { DocsButton } from '../../../components/docs/DocsButton'; import { Button } from '@novu/novui'; import { useTelemetry } from '../../../hooks/useNovuAPI'; +import { DOCS_URL, PATHS } from '../../../components/docs/docs.const'; const Text = styled('a', text); @@ -61,7 +62,7 @@ export const Footer = ({ track('Documentation linked clicked - [Onboarding - Signup]', { step: pathname, }); - onDocsClick(); + window.open(`${DOCS_URL}/${PATHS[pathname]}`, '_blank'); }} href="" > diff --git a/apps/web/src/studio/components/GetStartedPageV2/index.tsx b/apps/web/src/studio/components/GetStartedPageV2/index.tsx index df1632e8761..6acc0f16e78 100644 --- a/apps/web/src/studio/components/GetStartedPageV2/index.tsx +++ b/apps/web/src/studio/components/GetStartedPageV2/index.tsx @@ -49,6 +49,7 @@ const BadgeButton = ({ paddingRight: '50', fontSize: '75', borderRadius: 's', + cursor: 'pointer', }), className )} @@ -192,7 +193,7 @@ export const GetStartedPageV2 = () => { { track('Examples link clicked - [Workflows empty state]'); - window.open('http://docs.novu.co/how-to/introduction', '_blank'); + window.open('https://docs.novu.co/guides/workflows/introduction', '_blank'); }} className={css({ marginBottom: '150', diff --git a/apps/web/src/studio/components/workflows/node-view/WorkflowFloatingMenu.tsx b/apps/web/src/studio/components/workflows/node-view/WorkflowFloatingMenu.tsx index b3b025774ee..ec910c6677a 100644 --- a/apps/web/src/studio/components/workflows/node-view/WorkflowFloatingMenu.tsx +++ b/apps/web/src/studio/components/workflows/node-view/WorkflowFloatingMenu.tsx @@ -16,6 +16,7 @@ import { VStack } from '@novu/novui/jsx'; import { vstack } from '@novu/novui/patterns'; import { FC, PropsWithChildren } from 'react'; import { useDocsModal } from '../../../../components/docs/useDocsModal'; +import { DOCS_URL } from '../../../../components/docs/docs.const'; type IWorkflowFloatingMenuProps = CoreProps; @@ -23,8 +24,7 @@ export const WorkflowFloatingMenu: FC = ({ className const { Component: DocsModal, setPath, toggle } = useDocsModal(); const handleClick = (pathToSet: string) => () => { - setPath('framework/steps/' + pathToSet); - toggle(); + window.open(`${DOCS_URL}/sdks/framework/typescript/steps/${pathToSet}`, '_blank'); }; return ( @@ -41,12 +41,17 @@ export const WorkflowFloatingMenu: FC = ({ className tooltipLabel="Guide of how to add a Delay step for embedding in code" onClick={handleClick('delay')} /> + = ({ className tooltipLabel="Guide of how to add a Chat step for embedding in code" onClick={handleClick('chat')} /> - diff --git a/apps/web/src/studio/components/workflows/step-editor/WorkflowStepEditorControlsPanel.tsx b/apps/web/src/studio/components/workflows/step-editor/WorkflowStepEditorControlsPanel.tsx index 4d2f3103904..616b2efc356 100644 --- a/apps/web/src/studio/components/workflows/step-editor/WorkflowStepEditorControlsPanel.tsx +++ b/apps/web/src/studio/components/workflows/step-editor/WorkflowStepEditorControlsPanel.tsx @@ -34,8 +34,12 @@ export const WorkflowStepEditorControlsPanel: FC { return ( - Object.keys(workflow?.payload?.schema || workflow?.options?.payloadSchema || workflow?.payloadSchema || {}) - .length > 0 + Object.keys( + workflow?.payload?.schema?.properties || + workflow?.options?.payloadSchema?.properties || + workflow?.payloadSchema?.properties || + {} + ).length > 0 ); }, [workflow?.payload?.schema, workflow?.options?.payloadSchema, workflow?.payloadSchema]); @@ -88,7 +92,7 @@ export const WorkflowStepEditorControlsPanel: FC { - setPath('framework/concepts/controls'); + setPath('concepts/controls'); toggle(); }} /> @@ -115,7 +119,7 @@ export const WorkflowStepEditorControlsPanel: FC { - setPath('framework/concepts/payload'); + setPath('workflow/introduction#payload-schema'); toggle(); }} /> diff --git a/apps/web/src/studio/components/workflows/test-workflow/WorkflowTestControlsPanel.tsx b/apps/web/src/studio/components/workflows/test-workflow/WorkflowTestControlsPanel.tsx index f9ff132ac13..c9f29f0d249 100644 --- a/apps/web/src/studio/components/workflows/test-workflow/WorkflowTestControlsPanel.tsx +++ b/apps/web/src/studio/components/workflows/test-workflow/WorkflowTestControlsPanel.tsx @@ -6,6 +6,7 @@ import { ChannelTypeEnum } from '@novu/shared'; import { FC, useEffect } from 'react'; import { Controller, useForm } from 'react-hook-form'; import { When } from '../../../../components/utils/When'; +import { formContainerClassName } from '../step-editor/WorkflowStepEditorControlsPanel'; export type ToSubscriber = { subscriberId: string; @@ -43,7 +44,7 @@ export const WorkflowTestControlsPanel: FC = ({ }, [watch]); return ( - + diff --git a/libs/shared/src/consts/providers/channels/email.ts b/libs/shared/src/consts/providers/channels/email.ts index 5b7f35098d6..c089b4a8f75 100644 --- a/libs/shared/src/consts/providers/channels/email.ts +++ b/libs/shared/src/consts/providers/channels/email.ts @@ -29,7 +29,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Novu Email', channel: ChannelTypeEnum.EMAIL, credentials: [], - docReference: `https://docs.novu.co/channels-and-providers/default-providers${UTM_CAMPAIGN_QUERY_PARAM}#novu-email-provider`, + docReference: `https://docs.novu.co/integrations/providers/default-providers${UTM_CAMPAIGN_QUERY_PARAM}#novu-email-provider`, logoFileName: { light: 'novu.png', dark: 'novu.png' }, }, { @@ -37,7 +37,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Mailgun', channel: ChannelTypeEnum.EMAIL, credentials: mailgunConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/mailgun${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/mailgun${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'mailgun.svg', dark: 'mailgun.svg' }, }, { @@ -45,7 +45,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Mailjet', channel: ChannelTypeEnum.EMAIL, credentials: mailjetConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/mailjet${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/mailjet${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'mailjet.png', dark: 'mailjet.png' }, }, { @@ -53,7 +53,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Mailtrap', channel: ChannelTypeEnum.EMAIL, credentials: mailtrapConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/mailtrap${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/mailtrap${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'mailtrap.svg', dark: 'mailtrap.svg' }, }, { @@ -61,7 +61,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Mandrill', channel: ChannelTypeEnum.EMAIL, credentials: mandrillConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/mandrill${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/mandrill${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'mandrill.svg', dark: 'mandrill.svg' }, }, { @@ -69,7 +69,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Postmark', channel: ChannelTypeEnum.EMAIL, credentials: postmarkConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/postmark${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/postmark${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'postmark.png', dark: 'postmark.png' }, }, { @@ -77,7 +77,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'SendGrid', channel: ChannelTypeEnum.EMAIL, credentials: sendgridConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/sendgrid${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/sendgrid${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'sendgrid.png', dark: 'sendgrid.png' }, }, { @@ -85,7 +85,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Sendinblue', channel: ChannelTypeEnum.EMAIL, credentials: sendinblueConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/sendinblue${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/sendinblue${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'sendinblue.png', dark: 'sendinblue.png' }, }, { @@ -93,7 +93,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'SES', channel: ChannelTypeEnum.EMAIL, credentials: sesConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/amazonses${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/amazon-ses${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'ses.svg', dark: 'ses.svg' }, }, { @@ -101,7 +101,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Netcore', channel: ChannelTypeEnum.EMAIL, credentials: netCoreConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/netcore${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/netcore${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'netcore.png', dark: 'netcore.png' }, }, { @@ -109,7 +109,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Custom SMTP', channel: ChannelTypeEnum.EMAIL, credentials: nodemailerConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/custom-smtp${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/custom-smtp${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'custom_smtp.svg', dark: 'custom_smtp.svg' }, }, { @@ -117,7 +117,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'MailerSend', channel: ChannelTypeEnum.EMAIL, credentials: mailerSendConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/mailersend${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/mailersend${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'mailersend.svg', dark: 'mailersend.svg' }, }, { @@ -125,7 +125,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Microsoft Outlook365', channel: ChannelTypeEnum.EMAIL, credentials: outlook365Config, - docReference: `https://docs.novu.co/channels-and-providers/email/outlook365${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/outlook365${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'outlook365.png', dark: 'outlook365.png' }, }, { @@ -133,7 +133,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Infobip', channel: ChannelTypeEnum.EMAIL, credentials: infobipEmailConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/infobip${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/infobip${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'infobip.png', dark: 'infobip.png' }, }, { @@ -149,7 +149,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Resend', channel: ChannelTypeEnum.EMAIL, credentials: resendConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/resend${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/resend${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'resend.svg', dark: 'resend.svg' }, }, { @@ -157,7 +157,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'Plunk', channel: ChannelTypeEnum.EMAIL, credentials: plunkConfig, - docReference: `https://docs.novu.co/channels/email/plunk${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/plunk${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'plunk.png', dark: 'plunk.png' }, }, { @@ -165,7 +165,7 @@ export const emailProviders: IProviderConfig[] = [ displayName: 'SparkPost', channel: ChannelTypeEnum.EMAIL, credentials: sparkpostConfig, - docReference: `https://docs.novu.co/channels-and-providers/email/sparkpost${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/email/sparkpost${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'sparkpost.svg', dark: 'sparkpost.svg' }, }, { diff --git a/libs/shared/src/consts/providers/channels/sms.ts b/libs/shared/src/consts/providers/channels/sms.ts index 2452328ebc6..9a86ed08d12 100644 --- a/libs/shared/src/consts/providers/channels/sms.ts +++ b/libs/shared/src/consts/providers/channels/sms.ts @@ -43,7 +43,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'Novu SMS', channel: ChannelTypeEnum.SMS, credentials: [], - docReference: `https://docs.novu.co/channels-and-providers/default-providers${UTM_CAMPAIGN_QUERY_PARAM}#novu-sms-provider`, + docReference: `https://docs.novu.co/integrations/providers/default-providers${UTM_CAMPAIGN_QUERY_PARAM}#novu-sms-provider`, logoFileName: { light: 'novu.png', dark: 'novu.png' }, }, { @@ -51,7 +51,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'Nexmo', channel: ChannelTypeEnum.SMS, credentials: nexmoConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/nexmo${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/nexmo${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'nexmo.png', dark: 'nexmo.png' }, }, { @@ -59,7 +59,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'Plivo', channel: ChannelTypeEnum.SMS, credentials: plivoConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/plivo${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/plivo${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'plivo.png', dark: 'plivo.png' }, }, @@ -68,7 +68,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'sms77', channel: ChannelTypeEnum.SMS, credentials: sms77Config, - docReference: `https://docs.novu.co/channels-and-providers/sms/sms77${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/sms77${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'sms77.svg', dark: 'sms77.svg' }, }, { @@ -76,7 +76,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'SNS', channel: ChannelTypeEnum.SMS, credentials: snsConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/aws-sns${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/aws-sns${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'sns.svg', dark: 'sns.svg' }, }, { @@ -84,7 +84,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'Telnyx', channel: ChannelTypeEnum.SMS, credentials: telnyxConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/telnyx${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/telnyx${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'telnyx.png', dark: 'telnyx.png' }, }, { @@ -92,7 +92,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'MessageBird', channel: ChannelTypeEnum.SMS, credentials: messagebirdConfig, - docReference: 'https://developers.messagebird.com/quickstarts/sms-overview/', + docReference: `https://docs.novu.co/integrations/providers/sms/messagebird${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'messagebird.png', dark: 'messagebird.png' }, }, { @@ -100,7 +100,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'Twilio', channel: ChannelTypeEnum.SMS, credentials: twilioConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/twilio${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/twilio${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'twilio.png', dark: 'twilio.png' }, }, { @@ -124,7 +124,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'Infobip', channel: ChannelTypeEnum.SMS, credentials: infobipSMSConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/infobip${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/infobip${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'infobip.png', dark: 'infobip.png' }, }, { @@ -157,7 +157,7 @@ export const smsProviders: IProviderConfig[] = [ channel: ChannelTypeEnum.SMS, credentials: clickatellConfig, betaVersion: true, - docReference: 'https://docs.clickatell.com/', + docReference: `https://docs.novu.co/integrations/providers/sms/clickatell${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'clickatell.png', dark: 'clickatell.png' }, }, { @@ -198,7 +198,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: 'Termii', channel: ChannelTypeEnum.SMS, credentials: termiiConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/termii${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/termii${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'termii.png', dark: 'termii.png' }, }, { @@ -206,7 +206,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: `Africa's Talking`, channel: ChannelTypeEnum.SMS, credentials: africasTalkingConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/africas-talking${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/africas-talking${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'africas-talking.svg', dark: 'africas-talking.svg' }, }, { @@ -214,7 +214,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: `Sendchamp`, channel: ChannelTypeEnum.SMS, credentials: sendchampConfig, - docReference: `https://docs.novu.co/channels-and-providers/sms/sendchamp${UTM_CAMPAIGN_QUERY_PARAM}`, + docReference: `https://docs.novu.co/integrations/providers/sms/sendchamp${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'sendchamp.svg', dark: 'sendchamp.svg' }, }, { @@ -238,7 +238,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: `SimpleTexting`, channel: ChannelTypeEnum.SMS, credentials: simpleTextingConfig, - docReference: 'https://simpletexting.com/api/docs/v2/', + docReference: `https://docs.novu.co/channels/sms/simpletexting${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'simpletexting.png', dark: 'simpletexting.png' }, }, { @@ -255,7 +255,7 @@ export const smsProviders: IProviderConfig[] = [ displayName: `Azure Sms`, channel: ChannelTypeEnum.SMS, credentials: azureSmsConfig, - docReference: 'https://learn.microsoft.com/en-us/azure/communication-services/quickstarts/sms/receive-sms', + docReference: `https://docs.novu.co/channels/sms/azure${UTM_CAMPAIGN_QUERY_PARAM}`, logoFileName: { light: 'azure-sms.png', dark: 'azure-sms.png' }, }, {