From 8f6cbc4f6bdd3dcbd1117bc86889136074aa42e1 Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Fri, 22 Dec 2023 00:56:53 +0530 Subject: [PATCH 01/19] feat(api): added workflow-override api support for node sdk --- .../workflow-override.interface.ts | 31 ++++++++ .../workflow-override/workflow-override.ts | 77 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 packages/node/src/lib/workflow-override/workflow-override.interface.ts create mode 100644 packages/node/src/lib/workflow-override/workflow-override.ts diff --git a/packages/node/src/lib/workflow-override/workflow-override.interface.ts b/packages/node/src/lib/workflow-override/workflow-override.interface.ts new file mode 100644 index 00000000000..c1baf31b889 --- /dev/null +++ b/packages/node/src/lib/workflow-override/workflow-override.interface.ts @@ -0,0 +1,31 @@ +import { IPreferenceChannels, WorkflowOverrideId } from '@novu/shared'; + +export interface IWorkflowOverrides { + // createWorkflowOverride(data : IWorkflowOverridePayload); + create(data: IWorkflowOverridePayload); + getWorkflowOverrides(page?: number, limit?: number); // get operation + getworkflowOverrideById(overrideId: string); // get wokflow override by Id + getWorkflowOverride(workflowId: string, tenantId: string); // get workflow override by tennat + updateWorkflowOverrideById( + overrideId: string, + data: IWorkflowOverrideUpdatePayload + ); // + updateWorkflowOverride( + overrideId: string, + tenantId: string, + data: IWorkflowOverrideUpdatePayload + ); + delete(overrideId: string); +} + +export interface IWorkflowOverridePayload { + workflowId: WorkflowOverrideId; + tenantId: string; + active?: boolean; + preferenceSettings?: IPreferenceChannels; +} + +export interface IWorkflowOverrideUpdatePayload { + active?: boolean; + preferenceSettings?: IPreferenceChannels; +} diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts new file mode 100644 index 00000000000..e7194b62932 --- /dev/null +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -0,0 +1,77 @@ +import { + IWorkflowOverridePayload, + IWorkflowOverrides, + IWorkflowOverrideUpdatePayload, +} from './workflow-override.interface'; +import { WithHttp } from '../novu.interface'; + +export class WorkflowGroups extends WithHttp implements IWorkflowOverrides { + /** + * @param {string} overrideId - overrideId of the workflow-override to update + * @param {IWorkflowOverrideUpdatePayload} data - All the additional parameters to update a worflow-override + */ + async updateWorkflowOverrideById( + overrideId: string, + data: IWorkflowOverrideUpdatePayload + ) { + return await this.http.put(`/workflow-overrides/${overrideId}`, { + ...data, + }); + } + + /** + * @param {IWorkflowOverridePayload} data - All the additional parameters to create a workflow-override + */ + async create(data: IWorkflowOverridePayload) { + return await this.http.post(`/workflow-overrides`, { + ...data, + }); + } + + /** + * @param {string} overrideId - overrideId of the workflow + */ + async getworkflowOverrideById(overrideId: string) { + return await this.http.get(`/workflow-overrides/${overrideId}`); + } + + /** + * @param {number} page - Page number to fetch + * @param {number} limit - Number of results to fetch in one page + */ + async getWorkflowOverrides(page = 0, limit = 10) { + return await this.http.get(`/workflow-overrides`, { + params: { page, limit }, + }); + } + + /** + * @param {string} workflowId - workflowId + * @param {string} tenantId - tenantId + */ + async getWorkflowOverride(workflowId: string, tenantId: string) { + return await this.http.get( + `/workflow-overrides/workflows/${workflowId}/tenants/${tenantId}`, + { + params: { workflowId, tenantId }, + } + ); + } + + async updateWorkflowOverride( + overrideId: string, + tenantId: string, + data: IWorkflowOverrideUpdatePayload + ) { + return await this.http.put( + `/workflow-overrides/workflows/${overrideId}/tenants/${tenantId}`, + { + ...data, + } + ); + } + + async delete(overrideId: string) { + return await this.http.delete(`/workflow-overrides/${overrideId}`); + } +} From 364bd087eb036f0d9074cebacdb9614d78bf40c5 Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Fri, 22 Dec 2023 03:29:03 +0530 Subject: [PATCH 02/19] fix(api): fixed the name of the class as per the api --- packages/node/src/lib/workflow-override/workflow-override.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index e7194b62932..dba771001c6 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -5,7 +5,7 @@ import { } from './workflow-override.interface'; import { WithHttp } from '../novu.interface'; -export class WorkflowGroups extends WithHttp implements IWorkflowOverrides { +export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { /** * @param {string} overrideId - overrideId of the workflow-override to update * @param {IWorkflowOverrideUpdatePayload} data - All the additional parameters to update a worflow-override From 5d12c8cc4ef334d3407bb43ee5c4a4acc6dbbecb Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Fri, 22 Dec 2023 04:45:10 +0530 Subject: [PATCH 03/19] feat(api): added the test cases for node sdk test for workflow-override api,updated the novu.ts file --- packages/node/src/index.ts | 1 + packages/node/src/lib/novu.ts | 3 + .../workflow-overrride.spec.ts | 161 ++++++++++++++++++ 3 files changed, 165 insertions(+) create mode 100644 packages/node/src/lib/workflow-override/workflow-overrride.spec.ts diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index 905e4099928..e3ed1c34de3 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -31,4 +31,5 @@ export * from './lib/topics/topic.interface'; export * from './lib/integrations/integrations.interface'; export * from './lib/messages/messages.interface'; export * from './lib/organizations/organizations.interface'; +export * from './lib/workflow-override/workflow-override.interface'; export { defaultRetryCondition } from './lib/retry'; diff --git a/packages/node/src/lib/novu.ts b/packages/node/src/lib/novu.ts index 3df82573fc4..92921bc2ac5 100644 --- a/packages/node/src/lib/novu.ts +++ b/packages/node/src/lib/novu.ts @@ -16,6 +16,7 @@ import { Tenants } from './tenants/tenants'; import { ExecutionDetails } from './execution-details/execution-details'; import { InboundParse } from './inbound-parse/inbound-parse'; import { Organizations } from './organizations/organizations'; +import { WorkflowOverrides } from './workflow-override/workflow-override'; import { makeRetryable } from './retry'; @@ -37,6 +38,7 @@ export class Novu extends EventEmitter { readonly executionDetails: ExecutionDetails; readonly inboundParse: InboundParse; readonly organizations: Organizations; + readonly workflowoverrides: WorkflowOverrides; constructor(apiKey: string, config?: INovuConfiguration) { super(); @@ -69,6 +71,7 @@ export class Novu extends EventEmitter { this.executionDetails = new ExecutionDetails(this.http); this.inboundParse = new InboundParse(this.http); this.organizations = new Organizations(this.http); + this.workflowoverrides = new WorkflowOverrides(this.http); this.trigger = this.events.trigger; this.bulkTrigger = this.events.bulkTrigger; diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts new file mode 100644 index 00000000000..e895665f203 --- /dev/null +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -0,0 +1,161 @@ +import { Novu } from '../novu'; +import axios from 'axios'; + +const mockConfig = { + apiKey: '1234', +}; + +jest.mock('axios'); + +describe('test use of novus node package - Workflow overrride class', () => { + const mockedAxios = axios as jest.Mocked; + let novu: Novu; + + beforeEach(() => { + mockedAxios.create.mockReturnThis(); + novu = new Novu(mockConfig.apiKey); + }); + + test('should fetch all the worker-overrides correctly', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.getWorkflowOverrides(); + + expect(mockedAxios.get).toHaveBeenCalled(); + expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { + params: { + page: 0, + limit: 10, + }, + }); + }); + + test('should fetch all the workflow-overrides correctly of 2nd page', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.getWorkflowOverrides(2); + + expect(mockedAxios.get).toHaveBeenCalled(); + expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { + params: { + page: 2, + limit: 10, + }, + }); + }); + + test('should fetch all the workflow-overrides correctly with limit of 15', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.getWorkflowOverrides(0, 15); + + expect(mockedAxios.get).toHaveBeenCalled(); + expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { + params: { + page: 0, + limit: 15, + }, + }); + }); + + test('should fetch all the workflow-overrides correctly of page 3 with limit of 20', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.getWorkflowOverrides(3, 20); + + expect(mockedAxios.get).toHaveBeenCalled(); + expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { + params: { + page: 3, + limit: 20, + }, + }); + }); + + test('should create a workflow override with the given parameters', async () => { + mockedAxios.post.mockResolvedValue({}); + + const result = await novu.workflowoverrides.create({ + workflowId: '8329rufivdsnvs9u334', + tenantId: 'wvnq340i2jfwqv392', + }); + + expect(mockedAxios.post).toHaveBeenCalled(); + expect(mockedAxios.post).toHaveBeenCalledWith('/workflow-overrides', { + workflowId: '8329rufivdsnvs9u334', + tenantId: 'wvnq340i2jfwqv392', + }); + }); + + test('should update the given workflow override', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.updateWorkflowOverride( + 'OVERRIDE_ID', + 'TENANT_ID', + { + active: false, + } + ); + + expect(mockedAxios.put).toHaveBeenCalled(); + expect(mockedAxios.put).toHaveBeenCalledWith( + '/workflow-overrides/workflows/OVERRIDE_ID/tenants/TENANT_ID', + { + active: false, + } + ); + }); + + test('should delete the specified override id', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.delete('OVERRIDE_ID1'); + + expect(mockedAxios.delete).toHaveBeenCalled(); + expect(mockedAxios.delete).toHaveBeenCalledWith( + '/workflow-overrides/OVERRIDE_ID1' + ); + }); + + test('should fetch the workflow-overide with the given override id', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.getworkflowOverrideById('OVERRIDE_ID'); + + expect(mockedAxios.get).toHaveBeenCalled(); + expect(mockedAxios.get).toHaveBeenCalledWith( + '/workflow-overrides/OVERRIDE_ID' + ); + }); + + test('should fetch the workflow-overide with the given tenant id', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.getWorkflowOverride( + 'WORKFLOW_ID', + 'TENANT_ID' + ); + + expect(mockedAxios.get).toHaveBeenCalled(); + expect(mockedAxios.get).toHaveBeenCalledWith( + '/workflow-overrides/workflows/WORKFLOW_ID/tenants/TENANT_ID' + ); + }); + + test('should update the workflow override by id', async () => { + mockedAxios.post.mockResolvedValue({}); + + await novu.workflowoverrides.updateWorkflowOverrideById('OVERRIDE_ID', { + active: false, + }); + + expect(mockedAxios.put).toHaveBeenCalled(); + expect(mockedAxios.put).toHaveBeenCalledWith( + '/workflow-overrides/OVERRIDE_ID', + { + active: false, + } + ); + }); +}); From 3c4f8dc46a8a86b3d943053d359266e6c0778dde Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Fri, 22 Dec 2023 04:49:12 +0530 Subject: [PATCH 04/19] feat(api): updated the file to fix the proper call of getworkflowoverride by tenant --- packages/node/src/lib/workflow-override/workflow-override.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index dba771001c6..8dd32ba596d 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -51,10 +51,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { */ async getWorkflowOverride(workflowId: string, tenantId: string) { return await this.http.get( - `/workflow-overrides/workflows/${workflowId}/tenants/${tenantId}`, - { - params: { workflowId, tenantId }, - } + `/workflow-overrides/workflows/${workflowId}/tenants/${tenantId}` ); } From 5bb7552c5190ffc9b241a6f432abfd18b61b089b Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Sat, 23 Dec 2023 02:35:14 +0530 Subject: [PATCH 05/19] feat(api): cleanup step --- .../workflow-override/workflow-override.interface.ts | 9 ++++----- .../src/lib/workflow-override/workflow-override.ts | 11 ++++++++++- .../lib/workflow-override/workflow-overrride.spec.ts | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/node/src/lib/workflow-override/workflow-override.interface.ts b/packages/node/src/lib/workflow-override/workflow-override.interface.ts index c1baf31b889..dd0510ab46a 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.interface.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.interface.ts @@ -1,15 +1,14 @@ import { IPreferenceChannels, WorkflowOverrideId } from '@novu/shared'; export interface IWorkflowOverrides { - // createWorkflowOverride(data : IWorkflowOverridePayload); create(data: IWorkflowOverridePayload); - getWorkflowOverrides(page?: number, limit?: number); // get operation - getworkflowOverrideById(overrideId: string); // get wokflow override by Id - getWorkflowOverride(workflowId: string, tenantId: string); // get workflow override by tennat + getWorkflowOverrides(page?: number, limit?: number); + getworkflowOverrideById(overrideId: string); + getWorkflowOverrideByTenant(workflowId: string, tenantId: string); updateWorkflowOverrideById( overrideId: string, data: IWorkflowOverrideUpdatePayload - ); // + ); updateWorkflowOverride( overrideId: string, tenantId: string, diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index 8dd32ba596d..0bb41f2e2b1 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -49,12 +49,17 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { * @param {string} workflowId - workflowId * @param {string} tenantId - tenantId */ - async getWorkflowOverride(workflowId: string, tenantId: string) { + async getWorkflowOverrideByTenant(workflowId: string, tenantId: string) { return await this.http.get( `/workflow-overrides/workflows/${workflowId}/tenants/${tenantId}` ); } + /** + * @param {string} overrideId - workflowId + * @param {string} tenantId - tenantId + * @param {IWorkflowOverrideUpdatePayload} data - All the additional paramters to update workflow override + */ async updateWorkflowOverride( overrideId: string, tenantId: string, @@ -68,6 +73,10 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { ); } + /** + * + * @param {string} overrideId - overrideID of the workflow + */ async delete(overrideId: string) { return await this.http.delete(`/workflow-overrides/${overrideId}`); } diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts index e895665f203..6e17879b9be 100644 --- a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -132,7 +132,7 @@ describe('test use of novus node package - Workflow overrride class', () => { test('should fetch the workflow-overide with the given tenant id', async () => { mockedAxios.post.mockResolvedValue({}); - await novu.workflowoverrides.getWorkflowOverride( + await novu.workflowoverrides.getWorkflowOverrideByTenant( 'WORKFLOW_ID', 'TENANT_ID' ); From 14e744526653cb0a7cf984e8114122dd79e3c873 Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Sat, 23 Dec 2023 03:06:32 +0530 Subject: [PATCH 06/19] feat(api): added the readme.md file --- packages/node/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node/package.json b/packages/node/package.json index a702498edf1..0826267cc6f 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -23,6 +23,7 @@ "lint": "eslint src --ext .ts", "test:prettier": "prettier \"src/**/*.ts\"", "test:unit": "jest src", + "test:unit:wo": "jest src/lib/workflow-override/", "check-cli": "run-s test diff-integration-tests check-integration-tests", "check-integration-tests": "run-s check-integration-test:*", "diff-integration-tests": "mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'", From 7f046e7abdba91ecfdb4b3e2514c3372ac6bdedc Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Sat, 23 Dec 2023 03:14:43 +0530 Subject: [PATCH 07/19] feat(api): wrong file pushed, adding readme.md --- packages/node/README.md | 90 ++++++++++++++++++++++++++++++++++++++ packages/node/package.json | 1 - 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/packages/node/README.md b/packages/node/README.md index 53c67c8db96..c84d1072919 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -155,6 +155,7 @@ Novu provides a single API to manage providers across multiple channels with a s - [Organizations](#organizations) - [Inbound Parse](#inbound-parse) - [Execution Details](#execution-details) +- [Workflow Overrides](#workflow-override) ### Subscribers @@ -1267,3 +1268,92 @@ const executionDetailsParams = { // get execution details await novu.executionDetails.get(executionDetailsParams) ``` + +### Workflow Overrides + +- #### create new workflow override +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.create({ + workflowId: 'workdflowId_123', + tenantId: 'tenantID_123', + active: false, +}) +``` + +- #### get all workflow overrides +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.getWorkflowOverrides(); +``` + +- #### get all workflow overrides from the 3rd page and with a limit of 20 +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.getWorkflowOverrides(3,20) +``` + +- #### get workflow override by overrideId +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.getworkflowOverrideById('overrideId_123'); +``` + +- #### get workflow override by tenant +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.getWorkflowOverrideByTenant( + 'workflowId_123', + 'tenantId_123' + ); +``` + +- #### Update workflow override +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.updateWorkflowOverride( + 'overrideId_123', + 'tenantId_123', + { + active: false, + } + ); +``` + +- #### Update workflow override by tenantId +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.updateWorkflowOverrideById('OVERRIDE_ID', { + active: false, + }); +``` + +- #### Delete workflow override +```ts +import { Novu } from '@novu/node'; + +const novu = new Novu(''); + +await novu.workflowoverrides.delete('overrideId_123'); +``` diff --git a/packages/node/package.json b/packages/node/package.json index 0826267cc6f..a702498edf1 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -23,7 +23,6 @@ "lint": "eslint src --ext .ts", "test:prettier": "prettier \"src/**/*.ts\"", "test:unit": "jest src", - "test:unit:wo": "jest src/lib/workflow-override/", "check-cli": "run-s test diff-integration-tests check-integration-tests", "check-integration-tests": "run-s check-integration-test:*", "diff-integration-tests": "mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'", From 0d6111e5a035724fca442a6bd7a75d401e8e8be4 Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Wed, 3 Jan 2024 16:37:15 +0530 Subject: [PATCH 08/19] Update packages/node/src/lib/workflow-override/workflow-override.ts overrideID -> workflowId Co-authored-by: Pawan Jain --- packages/node/src/lib/workflow-override/workflow-override.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index 0bb41f2e2b1..a1c7f2ae794 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -61,7 +61,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { * @param {IWorkflowOverrideUpdatePayload} data - All the additional paramters to update workflow override */ async updateWorkflowOverride( - overrideId: string, + workflowId: string, tenantId: string, data: IWorkflowOverrideUpdatePayload ) { From e9351515108933158441edf30322f6c7e70beff3 Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Wed, 3 Jan 2024 16:39:43 +0530 Subject: [PATCH 09/19] Update packages/node/src/lib/workflow-override/workflow-override.ts overrideID -> workflowId Co-authored-by: Pawan Jain --- packages/node/src/lib/workflow-override/workflow-override.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index a1c7f2ae794..3cb6f1f8164 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -66,7 +66,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { data: IWorkflowOverrideUpdatePayload ) { return await this.http.put( - `/workflow-overrides/workflows/${overrideId}/tenants/${tenantId}`, + `/workflow-overrides/workflows/${workflowId}/tenants/${tenantId}`, { ...data, } From d0cd7cf4e59a57f415e6809d8e6bc7da5ff7f23d Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Wed, 3 Jan 2024 16:40:21 +0530 Subject: [PATCH 10/19] Update packages/node/src/lib/workflow-override/workflow-overrride.spec.ts overrideID -> workflowId Co-authored-by: Pawan Jain --- .../node/src/lib/workflow-override/workflow-overrride.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts index 6e17879b9be..c12cabca67b 100644 --- a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -91,7 +91,7 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.post.mockResolvedValue({}); await novu.workflowoverrides.updateWorkflowOverride( - 'OVERRIDE_ID', + 'WORKFLOW_ID', 'TENANT_ID', { active: false, From 31cdc2e3fded4c6d0b8e6a186b0fb16fade19c0f Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Wed, 3 Jan 2024 16:43:40 +0530 Subject: [PATCH 11/19] Update packages/node/src/lib/workflow-override/workflow-overrride.spec.ts overrideID -> workflowId Co-authored-by: Pawan Jain --- .../node/src/lib/workflow-override/workflow-overrride.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts index c12cabca67b..b0311cd6beb 100644 --- a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -100,7 +100,7 @@ describe('test use of novus node package - Workflow overrride class', () => { expect(mockedAxios.put).toHaveBeenCalled(); expect(mockedAxios.put).toHaveBeenCalledWith( - '/workflow-overrides/workflows/OVERRIDE_ID/tenants/TENANT_ID', + '/workflow-overrides/workflows/WORKFLOW_ID/tenants/TENANT_ID', { active: false, } From fe4712c4ccc87bfadb5192ce2ff633ebddfc963c Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Wed, 3 Jan 2024 16:44:09 +0530 Subject: [PATCH 12/19] Update packages/node/src/lib/workflow-override/workflow-overrride.spec.ts overrideID -> workflowId Co-authored-by: Pawan Jain --- .../node/src/lib/workflow-override/workflow-overrride.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts index b0311cd6beb..2085573b807 100644 --- a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -107,7 +107,7 @@ describe('test use of novus node package - Workflow overrride class', () => { ); }); - test('should delete the specified override id', async () => { + test('should delete the workflow override by specified override id', async () => { mockedAxios.post.mockResolvedValue({}); await novu.workflowoverrides.delete('OVERRIDE_ID1'); From 5743963b06852b472ffd20a1d8af1d1ebe494aa2 Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Thu, 4 Jan 2024 01:47:39 +0530 Subject: [PATCH 13/19] fix(api): updated the files with fix of all the review comments --- packages/node/README.md | 12 +- .../workflow-override.interface.ts | 13 +- .../workflow-override/workflow-override.ts | 10 +- .../workflow-overrride.spec.ts | 190 +++++++++++++++--- 4 files changed, 178 insertions(+), 47 deletions(-) diff --git a/packages/node/README.md b/packages/node/README.md index c84d1072919..228cc793fa2 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -1290,7 +1290,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.getWorkflowOverrides(); +await novu.workflowoverrides.list(); ``` - #### get all workflow overrides from the 3rd page and with a limit of 20 @@ -1299,7 +1299,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.getWorkflowOverrides(3,20) +await novu.workflowoverrides.list(3,20) ``` - #### get workflow override by overrideId @@ -1308,7 +1308,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.getworkflowOverrideById('overrideId_123'); +await novu.workflowoverrides.getOneById('overrideId_123'); ``` - #### get workflow override by tenant @@ -1317,7 +1317,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.getWorkflowOverrideByTenant( +await novu.workflowoverrides.getOneByTenantIdandWorkflowId( 'workflowId_123', 'tenantId_123' ); @@ -1329,7 +1329,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.updateWorkflowOverride( +await novu.workflowoverrides.updateOneByTenantIdandWorkflowId( 'overrideId_123', 'tenantId_123', { @@ -1344,7 +1344,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.updateWorkflowOverrideById('OVERRIDE_ID', { +await novu.workflowoverrides.updateOneById('OVERRIDE_ID', { active: false, }); ``` diff --git a/packages/node/src/lib/workflow-override/workflow-override.interface.ts b/packages/node/src/lib/workflow-override/workflow-override.interface.ts index dd0510ab46a..a492a038cb3 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.interface.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.interface.ts @@ -2,14 +2,11 @@ import { IPreferenceChannels, WorkflowOverrideId } from '@novu/shared'; export interface IWorkflowOverrides { create(data: IWorkflowOverridePayload); - getWorkflowOverrides(page?: number, limit?: number); - getworkflowOverrideById(overrideId: string); - getWorkflowOverrideByTenant(workflowId: string, tenantId: string); - updateWorkflowOverrideById( - overrideId: string, - data: IWorkflowOverrideUpdatePayload - ); - updateWorkflowOverride( + list(page?: number, limit?: number); + getOneById(overrideId: string); + getOneByTenantIdandWorkflowId(workflowId: string, tenantId: string); + updateOneById(overrideId: string, data: IWorkflowOverrideUpdatePayload); + updateOneByTenantIdandWorkflowId( overrideId: string, tenantId: string, data: IWorkflowOverrideUpdatePayload diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index 3cb6f1f8164..a2fa18b80ea 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -10,7 +10,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { * @param {string} overrideId - overrideId of the workflow-override to update * @param {IWorkflowOverrideUpdatePayload} data - All the additional parameters to update a worflow-override */ - async updateWorkflowOverrideById( + async updateOneById( overrideId: string, data: IWorkflowOverrideUpdatePayload ) { @@ -31,7 +31,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { /** * @param {string} overrideId - overrideId of the workflow */ - async getworkflowOverrideById(overrideId: string) { + async getOneById(overrideId: string) { return await this.http.get(`/workflow-overrides/${overrideId}`); } @@ -39,7 +39,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { * @param {number} page - Page number to fetch * @param {number} limit - Number of results to fetch in one page */ - async getWorkflowOverrides(page = 0, limit = 10) { + async list(page = 0, limit = 10) { return await this.http.get(`/workflow-overrides`, { params: { page, limit }, }); @@ -49,7 +49,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { * @param {string} workflowId - workflowId * @param {string} tenantId - tenantId */ - async getWorkflowOverrideByTenant(workflowId: string, tenantId: string) { + async getOneByTenantIdandWorkflowId(workflowId: string, tenantId: string) { return await this.http.get( `/workflow-overrides/workflows/${workflowId}/tenants/${tenantId}` ); @@ -60,7 +60,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { * @param {string} tenantId - tenantId * @param {IWorkflowOverrideUpdatePayload} data - All the additional paramters to update workflow override */ - async updateWorkflowOverride( + async updateOneByTenantIdandWorkflowId( workflowId: string, tenantId: string, data: IWorkflowOverrideUpdatePayload diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts index 2085573b807..a837e8efa30 100644 --- a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -17,10 +17,18 @@ describe('test use of novus node package - Workflow overrride class', () => { }); test('should fetch all the worker-overrides correctly', async () => { - mockedAxios.post.mockResolvedValue({}); + const mockedResponse = { + data: { + hasMore: false, + data: [], + pageSize: 10, + page: 0, + }, + }; - await novu.workflowoverrides.getWorkflowOverrides(); + mockedAxios.get.mockResolvedValue(mockedResponse); + const result = await novu.workflowoverrides.list(); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { params: { @@ -28,12 +36,22 @@ describe('test use of novus node package - Workflow overrride class', () => { limit: 10, }, }); + expect(result).toBe(mockedResponse); }); test('should fetch all the workflow-overrides correctly of 2nd page', async () => { - mockedAxios.post.mockResolvedValue({}); + const mockedResponse = { + data: { + hasMore: false, + data: [], + pageSize: 10, + page: 2, + }, + }; - await novu.workflowoverrides.getWorkflowOverrides(2); + mockedAxios.get.mockResolvedValue(mockedResponse); + + const result = await novu.workflowoverrides.list(2); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { @@ -42,12 +60,22 @@ describe('test use of novus node package - Workflow overrride class', () => { limit: 10, }, }); + expect(result).toBe(mockedResponse); }); test('should fetch all the workflow-overrides correctly with limit of 15', async () => { - mockedAxios.post.mockResolvedValue({}); + const mockedResponse = { + data: { + hasMore: false, + data: [], + pageSize: 15, + page: 0, + }, + }; + + mockedAxios.get.mockResolvedValue(mockedResponse); - await novu.workflowoverrides.getWorkflowOverrides(0, 15); + const result = await novu.workflowoverrides.list(0, 15); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { @@ -56,12 +84,22 @@ describe('test use of novus node package - Workflow overrride class', () => { limit: 15, }, }); + expect(result).toBe(mockedResponse); }); test('should fetch all the workflow-overrides correctly of page 3 with limit of 20', async () => { - mockedAxios.post.mockResolvedValue({}); + const mockedResponse = { + data: { + hasMore: false, + data: [], + pageSize: 20, + page: 3, + }, + }; - await novu.workflowoverrides.getWorkflowOverrides(3, 20); + mockedAxios.get.mockResolvedValue(mockedResponse); + + const result = await novu.workflowoverrides.list(3, 20); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { @@ -70,33 +108,80 @@ describe('test use of novus node package - Workflow overrride class', () => { limit: 20, }, }); + expect(result).toBe(mockedResponse); }); test('should create a workflow override with the given parameters', async () => { - mockedAxios.post.mockResolvedValue({}); + const mockedResponse = { + _id: '_id', + _organizationId: '_organizationId', + _environmentId: '_environmentId', + _workflowId: '8329rufivdsnvs9u334', + _tenantId: 'wvnq340i2jfwqv392', + active: false, + preferenceSettings: {}, + deleted: true, + deletedAt: 'deletedAt', + deletedBy: 'deletedBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + }; + mockedAxios.post.mockResolvedValue(mockedResponse); const result = await novu.workflowoverrides.create({ workflowId: '8329rufivdsnvs9u334', tenantId: 'wvnq340i2jfwqv392', + active: false, + preferenceSettings: { + email: false, + sms: false, + in_app: false, + chat: true, + push: false, + }, }); expect(mockedAxios.post).toHaveBeenCalled(); expect(mockedAxios.post).toHaveBeenCalledWith('/workflow-overrides', { workflowId: '8329rufivdsnvs9u334', tenantId: 'wvnq340i2jfwqv392', + active: false, + preferenceSettings: { + email: false, + sms: false, + in_app: false, + chat: true, + push: false, + }, }); + expect(result).toBe(mockedResponse); }); test('should update the given workflow override', async () => { - mockedAxios.post.mockResolvedValue({}); - - await novu.workflowoverrides.updateWorkflowOverride( - 'WORKFLOW_ID', - 'TENANT_ID', - { - active: false, - } - ); + const mockedResponse = { + _id: '_id', + _organizationId: '_organizationId', + _environmentId: '_environmentId', + _workflowId: 'WORKFLOW_ID', + _tenantId: 'TENANT_ID', + active: false, + preferenceSettings: {}, + deleted: true, + deletedAt: 'deletedAt', + deletedBy: 'deletedBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + }; + mockedAxios.put.mockResolvedValue(mockedResponse); + + const result = + await novu.workflowoverrides.updateOneByTenantIdandWorkflowId( + 'WORKFLOW_ID', + 'TENANT_ID', + { + active: false, + } + ); expect(mockedAxios.put).toHaveBeenCalled(); expect(mockedAxios.put).toHaveBeenCalledWith( @@ -105,34 +190,67 @@ describe('test use of novus node package - Workflow overrride class', () => { active: false, } ); + expect(result).toBe(mockedResponse); }); test('should delete the workflow override by specified override id', async () => { - mockedAxios.post.mockResolvedValue({}); + const mockedResponse = false; + mockedAxios.delete.mockResolvedValue(mockedResponse); - await novu.workflowoverrides.delete('OVERRIDE_ID1'); + const result = await novu.workflowoverrides.delete('OVERRIDE_ID1'); expect(mockedAxios.delete).toHaveBeenCalled(); expect(mockedAxios.delete).toHaveBeenCalledWith( '/workflow-overrides/OVERRIDE_ID1' ); + + expect(result).toBe(mockedResponse); }); test('should fetch the workflow-overide with the given override id', async () => { - mockedAxios.post.mockResolvedValue({}); + const mockedResponse = { + _id: '_id', + _organizationId: '_organizationId', + _environmentId: '_environmentId', + _workflowId: 'WORKFLOW_ID', + _tenantId: 'TENANT_ID', + active: false, + preferenceSettings: {}, + deleted: true, + deletedAt: 'deletedAt', + deletedBy: 'deletedBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + }; + mockedAxios.get.mockResolvedValue(mockedResponse); - await novu.workflowoverrides.getworkflowOverrideById('OVERRIDE_ID'); + const result = await novu.workflowoverrides.getOneById('OVERRIDE_ID'); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith( '/workflow-overrides/OVERRIDE_ID' ); + expect(result).toBe(mockedResponse); }); test('should fetch the workflow-overide with the given tenant id', async () => { - mockedAxios.post.mockResolvedValue({}); - - await novu.workflowoverrides.getWorkflowOverrideByTenant( + const mockedResponse = { + _id: '_id', + _organizationId: '_organizationId', + _environmentId: '_environmentId', + _workflowId: 'WORKFLOW_ID', + _tenantId: 'TENANT_ID', + active: false, + preferenceSettings: {}, + deleted: true, + deletedAt: 'deletedAt', + deletedBy: 'deletedBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + }; + mockedAxios.get.mockResolvedValue(mockedResponse); + + const result = await novu.workflowoverrides.getOneByTenantIdandWorkflowId( 'WORKFLOW_ID', 'TENANT_ID' ); @@ -141,12 +259,27 @@ describe('test use of novus node package - Workflow overrride class', () => { expect(mockedAxios.get).toHaveBeenCalledWith( '/workflow-overrides/workflows/WORKFLOW_ID/tenants/TENANT_ID' ); + expect(result).toBe(mockedResponse); }); test('should update the workflow override by id', async () => { - mockedAxios.post.mockResolvedValue({}); - - await novu.workflowoverrides.updateWorkflowOverrideById('OVERRIDE_ID', { + const mockedResponse = { + _id: '_id', + _organizationId: '_organizationId', + _environmentId: '_environmentId', + _workflowId: 'WORKFLOW_ID', + _tenantId: 'TENANT_ID', + active: false, + preferenceSettings: {}, + deleted: true, + deletedAt: 'deletedAt', + deletedBy: 'deletedBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + }; + mockedAxios.put.mockResolvedValue(mockedResponse); + + const result = await novu.workflowoverrides.updateOneById('OVERRIDE_ID', { active: false, }); @@ -157,5 +290,6 @@ describe('test use of novus node package - Workflow overrride class', () => { active: false, } ); + expect(result).toBe(mockedResponse); }); }); From af5ff371daa734293161673a34f988280fd8c88b Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Mon, 8 Jan 2024 09:36:22 +0530 Subject: [PATCH 14/19] Update packages/node/README.md Co-authored-by: Pawan Jain --- packages/node/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/README.md b/packages/node/README.md index 5a995e0672c..68d8b442b31 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -155,7 +155,7 @@ Novu provides a single API to manage providers across multiple channels with a s - [Organizations](#organizations) - [Inbound Parse](#inbound-parse) - [Execution Details](#execution-details) -- [Workflow Overrides](#workflow-override) +- [Workflow Overrides](#workflow-overrides) ### Subscribers From 3c92c9bc3347be31bf8b8498ec596c98c199f0d9 Mon Sep 17 00:00:00 2001 From: Prashant Puri Date: Mon, 8 Jan 2024 09:37:53 +0530 Subject: [PATCH 15/19] Update packages/node/src/lib/workflow-override/workflow-override.interface.ts overrideId -> workflowID Co-authored-by: Pawan Jain --- .../src/lib/workflow-override/workflow-override.interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/lib/workflow-override/workflow-override.interface.ts b/packages/node/src/lib/workflow-override/workflow-override.interface.ts index a492a038cb3..33acc5562a6 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.interface.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.interface.ts @@ -7,7 +7,7 @@ export interface IWorkflowOverrides { getOneByTenantIdandWorkflowId(workflowId: string, tenantId: string); updateOneById(overrideId: string, data: IWorkflowOverrideUpdatePayload); updateOneByTenantIdandWorkflowId( - overrideId: string, + workflowId: string, tenantId: string, data: IWorkflowOverrideUpdatePayload ); From 7bd7c1e26dadc882b7162b00b7a00f4118b9d77f Mon Sep 17 00:00:00 2001 From: Prashant-dot1 Date: Mon, 8 Jan 2024 10:07:59 +0530 Subject: [PATCH 16/19] fix(api): updated the readme for workflow override --- packages/node/README.md | 53 +++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/packages/node/README.md b/packages/node/README.md index 68d8b442b31..3e6c621909d 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -1284,31 +1284,29 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); await novu.workflowoverrides.create({ - workflowId: 'workdflowId_123', - tenantId: 'tenantID_123', + workflowId: '8329rufivdsnvs9u334', + tenantId: 'wvnq340i2jfwqv392', active: false, + preferenceSettings: { + email: false, + sms: false, + in_app: false, + chat: true, + push: false, + } }) ``` -- #### get all workflow overrides +- #### List all workflow overrides ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.list(); +await novu.workflowoverrides.list(3,10); ``` -- #### get all workflow overrides from the 3rd page and with a limit of 20 -```ts -import { Novu } from '@novu/node'; - -const novu = new Novu(''); - -await novu.workflowoverrides.list(3,20) -``` - -- #### get workflow override by overrideId +- #### Get workflow override by id ```ts import { Novu } from '@novu/node'; @@ -1317,42 +1315,35 @@ const novu = new Novu(''); await novu.workflowoverrides.getOneById('overrideId_123'); ``` -- #### get workflow override by tenant +- #### Get workflow override by tenant and workflow ids ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.getOneByTenantIdandWorkflowId( - 'workflowId_123', - 'tenantId_123' - ); +await novu.workflowoverrides.getOneByTenantIdandWorkflowId('workflowId_123','tenantId_123'); ``` -- #### Update workflow override +- #### Update workflow override by tenant and workflow ids ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.updateOneByTenantIdandWorkflowId( - 'overrideId_123', - 'tenantId_123', - { - active: false, - } - ); +await novu.workflowoverrides.updateOneByTenantIdandWorkflowId('overrideId_123','tenantId_123',{ + active: false, +}); ``` -- #### Update workflow override by tenantId +- #### Update workflow override by id ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.updateOneById('OVERRIDE_ID', { - active: false, - }); +await novu.workflowoverrides.updateOneById('OVERRIDE_ID',{ + active: false, +}); ``` - #### Delete workflow override From 341beacbd29c40ed028723835cb6a804dc78b6af Mon Sep 17 00:00:00 2001 From: Pawan Jain Date: Tue, 9 Jan 2024 15:20:13 +0530 Subject: [PATCH 17/19] Update packages/node/README.md --- packages/node/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/README.md b/packages/node/README.md index 3e6c621909d..8f1d17a2faa 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -1277,7 +1277,7 @@ await novu.executionDetails.get(executionDetailsParams) ### Workflow Overrides -- #### create new workflow override +- #### Create new workflow override ```ts import { Novu } from '@novu/node'; From d152b78ff0ae16c297d41c84c6627112dedf4b55 Mon Sep 17 00:00:00 2001 From: Pawan Jain Date: Tue, 9 Jan 2024 19:15:36 +0530 Subject: [PATCH 18/19] fix: some issues --- packages/node/README.md | 466 ++++++++++-------- packages/node/src/lib/novu.ts | 4 +- .../workflow-override/workflow-override.ts | 2 +- .../workflow-overrride.spec.ts | 41 +- 4 files changed, 292 insertions(+), 221 deletions(-) diff --git a/packages/node/README.md b/packages/node/README.md index 8f1d17a2faa..579dafad275 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -137,7 +137,6 @@ Novu provides a single API to manage providers across multiple channels with a s - [Home page](https://novu.co/) - ## SDK Methods - [Subscribers](#subscribers) @@ -169,7 +168,7 @@ const novu = new Novu(''); const page = 0; const limit = 20; -await novu.subscribers.list(page,limit) +await novu.subscribers.list(page, limit); ``` - #### Identify (create) a new subscriber @@ -179,21 +178,21 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.subscribers.identify("subscriberId", { - firstName: "Pawan", - lastName: "Jain", - email: "pawan.jain@domain.com", - phone: "+1234567890", - avatar: "https://gravatar.com/avatar/553b157d82ac2880237566d5a644e5fe?s=400&d=robohash&r=x", - locale: "en-US", +await novu.subscribers.identify('subscriberId', { + firstName: 'Pawan', + lastName: 'Jain', + email: 'pawan.jain@domain.com', + phone: '+1234567890', + avatar: + 'https://gravatar.com/avatar/553b157d82ac2880237566d5a644e5fe?s=400&d=robohash&r=x', + locale: 'en-US', data: { isDeveloper: true, - customKey: "customValue" - } + customKey: 'customValue', + }, }); ``` - - #### Bulk create subscribers ```ts @@ -232,7 +231,6 @@ await novu.subscribers.identify([ ]) ``` - - #### Get a single subscriber ```ts @@ -240,7 +238,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.subscribers.get("subscriberId") +await novu.subscribers.get('subscriberId'); ``` - #### Update a subscriber @@ -273,19 +271,24 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // update fcm token -await novu.subscribers.setCredentials("subscriberId", "fcm", { - deviceTokens: ["token1", "token2"] -}) +await novu.subscribers.setCredentials('subscriberId', 'fcm', { + deviceTokens: ['token1', 'token2'], +}); // update slack webhookurl -await novu.subscribers.setCredentials("subscriberId", "slack", { - webhookUrl: ["webhookUrl"] -}) +await novu.subscribers.setCredentials('subscriberId', 'slack', { + webhookUrl: ['webhookUrl'], +}); // update slack weebhook for a subscriberId with selected integration -await novu.subscribers.setCredentials("subscriberId", "slack", { - webhookUrl: ["webhookUrl"] - }, "slack_identifier" ) +await novu.subscribers.setCredentials( + 'subscriberId', + 'slack', + { + webhookUrl: ['webhookUrl'], + }, + 'slack_identifier' +); ``` - #### Delete provider credentials @@ -296,10 +299,10 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // delete fcm token -await novu.subscribers.deleteCredentials("subscriberId", "fcm") +await novu.subscribers.deleteCredentials('subscriberId', 'fcm'); // delete slack webhookurl -await novu.subscribers.deleteCredentials("subscriberId", "slack") +await novu.subscribers.deleteCredentials('subscriberId', 'slack'); ``` - #### Delete a subscriber @@ -309,10 +312,10 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.subscribers.delete("subscriberId") +await novu.subscribers.delete('subscriberId'); ``` -- #### Update online status +- #### Update online status ```ts import { Novu } from '@novu/node'; @@ -320,7 +323,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // mark subscriber as offline -await novu.subscribers.updateOnlineStatus("subscriberId", false) +await novu.subscribers.updateOnlineStatus('subscriberId', false); ``` - #### Get subscriber preference for all workflows @@ -330,7 +333,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.subscribers.getPreference("subscriberId") +await novu.subscribers.getPreference('subscriberId'); ``` - #### Get subscriber global preference @@ -340,10 +343,9 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.subscribers.getGlobalPreference("subscriberId" ) +await novu.subscribers.getGlobalPreference('subscriberId'); ``` - - #### Get subscriber preference by level ```ts @@ -351,10 +353,16 @@ import { Novu, PreferenceLevelEnum } from '@novu/node'; const novu = new Novu(''); // Get global level preference -await novu.subscribers.getPreferenceByLevel("subscriberId", PreferenceLevelEnum.GLOBAL) +await novu.subscribers.getPreferenceByLevel( + 'subscriberId', + PreferenceLevelEnum.GLOBAL +); // Get template level preference -await novu.subscribers.getPreferenceByLevel("subscriberId", PreferenceLevelEnum.TEMPLATE) +await novu.subscribers.getPreferenceByLevel( + 'subscriberId', + PreferenceLevelEnum.TEMPLATE +); ``` - #### Update subscriber preference for a workflow @@ -365,21 +373,20 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // enable in-app channel -await novu.subscribers.updatePreference("subscriberId", "workflowId", { +await novu.subscribers.updatePreference('subscriberId', 'workflowId', { channel: { - type: "in_app", - enabled: true - } -}) - + type: 'in_app', + enabled: true, + }, +}); // disable email channel -await novu.subscribers.updatePreference("subscriberId", "workflowId", { +await novu.subscribers.updatePreference('subscriberId', 'workflowId', { channel: { - type: "email", - enabled: false - } -}) + type: 'email', + enabled: false, + }, +}); ``` - #### Update subscriber preference globally @@ -390,16 +397,19 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // enable in-app channel and disable email channel -await novu.subscribers.updateGlobalPreference("subscriberId", { +await novu.subscribers.updateGlobalPreference('subscriberId', { enabled: true, - preferences: [{ - type: "in_app", - enabled: true - }, { - type: "email", - enabled: false - }] -}) + preferences: [ + { + type: 'in_app', + enabled: true, + }, + { + type: 'email', + enabled: false, + }, + ], +}); ``` - #### Get in-app messages (notifications) feed for a subscriber @@ -432,10 +442,10 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // get seen count -await novu.subscribers.getUnseenCount("subscriberId", true); +await novu.subscribers.getUnseenCount('subscriberId', true); // get unseen count -await novu.subscribers.getUnseenCount("subscriberId", false); +await novu.subscribers.getUnseenCount('subscriberId', false); ``` - #### Mark an in-app message (notification) as seen/unseen/read/unread @@ -446,14 +456,14 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // mark unseen -await novu.subscribers.markMessageAs("subscriberId", "messageId", { - seen: false +await novu.subscribers.markMessageAs('subscriberId', 'messageId', { + seen: false, }); // mark seen and unread -await novu.subscribers.markMessageAs("subscriberId", "messageId", { +await novu.subscribers.markMessageAs('subscriberId', 'messageId', { seen: true, - read: false + read: false, }); ``` @@ -465,10 +475,18 @@ import { Novu, MarkMessagesAsEnum } from '@novu/node'; const novu = new Novu(''); // mark all messages as seen -await novu.subscribers.markAllMessagesAs("subscriberId", MarkMessageAsEnum.SEEN, "feedId"); +await novu.subscribers.markAllMessagesAs( + 'subscriberId', + MarkMessageAsEnum.SEEN, + 'feedId' +); // mark all messages as read -await novu.subscribers.markAllMessagesAs("subscriberId", MarkMessageAsEnum.READ, "feedId"); +await novu.subscribers.markAllMessagesAs( + 'subscriberId', + MarkMessageAsEnum.READ, + 'feedId' +); ``` - #### Mark in-app message (notification) action as seen @@ -479,14 +497,24 @@ import { Novu, ButtonTypeEnum, MessageActionStatusEnum } from '@novu/node'; const novu = new Novu(''); // mark a message's primary action button as pending -await novu.subscribers.markMessageActionSeen("subscriberId", "messageId", ButtonTypeEnum.PRIMARY, { - status: MessageActionStatusEnum.PENDING -}); +await novu.subscribers.markMessageActionSeen( + 'subscriberId', + 'messageId', + ButtonTypeEnum.PRIMARY, + { + status: MessageActionStatusEnum.PENDING, + } +); // mark a message's secondary action button as done -await novu.subscribers.markMessageActionSeen("subscriberId", "messageId", ButtonTypeEnum.SECONDARY, { - status: MessageActionStatusEnum.DONE -}); +await novu.subscribers.markMessageActionSeen( + 'subscriberId', + 'messageId', + ButtonTypeEnum.SECONDARY, + { + status: MessageActionStatusEnum.DONE, + } +); ``` ### Events @@ -603,12 +631,12 @@ import { Novu, TriggerRecipientsTypeEnum } from '@novu/node'; const novu = new Novu(''); -await novu.events.trigger("workflowIdentifier", { +await novu.events.trigger('workflowIdentifier', { to: { type: TriggerRecipientsTypeEnum.TOPIC, - topicKey: TopicKey - } -}) + topicKey: TopicKey, + }, +}); ``` - #### Bulk trigger multiple workflows to multiple subscribers @@ -622,42 +650,42 @@ const novu = new Novu(''); await novu.events.bulkTrigger([ { - name: "workflowIdentifier_1", - to: "subscriberId_1", + name: 'workflowIdentifier_1', + to: 'subscriberId_1', payload: { - customKey: "customValue", + customKey: 'customValue', customKey1: { - nestedkey1: "nestedValue1" - } + nestedkey1: 'nestedValue1', + }, }, overrides: { email: { - from: "support@novu.co" - } + from: 'support@novu.co', + }, }, // actorId is subscriberId of actor - actor: "actorId", - tenant: "tenantIdentifier" + actor: 'actorId', + tenant: 'tenantIdentifier', }, { - name: "workflowIdentifier_2", - to: "subscriberId_2", + name: 'workflowIdentifier_2', + to: 'subscriberId_2', payload: { - customKey: "customValue", + customKey: 'customValue', customKey1: { - nestedkey1: "nestedValue1" - } + nestedkey1: 'nestedValue1', + }, }, overrides: { email: { - from: "support@novu.co" - } + from: 'support@novu.co', + }, }, // actorId is subscriberId of actor - actor: "actorId", - tenant: "tenantIdentifier" - } -]) + actor: 'actorId', + tenant: 'tenantIdentifier', + }, +]); ``` - #### Broadcast to all subscribers @@ -667,20 +695,20 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.events.broadcast("workflowIdentifier", { +await novu.events.broadcast('workflowIdentifier', { payload: { - customKey: "customValue", + customKey: 'customValue', customKey1: { - nestedkey1: "nestedValue1" - } + nestedkey1: 'nestedValue1', + }, }, overrides: { email: { - from: "support@novu.co" - } + from: 'support@novu.co', + }, }, - tenant: "tenantIdentifier" -}) + tenant: 'tenantIdentifier', +}); ``` - #### Cancel the triggered workflow @@ -690,12 +718,12 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.events.cancel("transactionId"); +await novu.events.cancel('transactionId'); ``` ### Messages -- #### List all messages +- #### List all messages ```ts import { Novu, ChannelTypeEnum } from '@novu/node'; @@ -705,12 +733,12 @@ const novu = new Novu(''); const params = { page: 0, // optional limit: 20, // optional - subscriberId: "subscriberId", //optional + subscriberId: 'subscriberId', //optional channel: ChannelTypeEnum.EMAIL, //optional - transactionIds : ["txnId1","txnId2"] //optional -} + transactionIds: ['txnId1', 'txnId2'], //optional +}; -await novu.messages.list(params) +await novu.messages.list(params); ``` - #### Delete a message by `messageId` @@ -720,7 +748,7 @@ import { Novu, ChannelTypeEnum } from '@novu/node'; const novu = new Novu(''); -await novu.messages.deleteById("messageId"); +await novu.messages.deleteById('messageId'); ``` ### Layouts @@ -782,7 +810,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.layouts.setDefault("layoutId"); +await novu.layouts.setDefault('layoutId'); ``` - #### Get a layout by `layoutId` @@ -792,7 +820,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.layouts.get("layoutId"); +await novu.layouts.get('layoutId'); ``` - #### Delete a layout by `layoutId` @@ -802,7 +830,7 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.layouts.delete("layoutId"); +await novu.layouts.delete('layoutId'); ``` - #### List all layouts @@ -815,9 +843,9 @@ const novu = new Novu(''); const params = { page: 0, // optional pageSize: 20, // optional - sortBy: "_id", - orderBy: -1 //optional -} + sortBy: '_id', + orderBy: -1, //optional +}; await novu.layouts.list(params); ``` @@ -830,19 +858,21 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // create a new notification group -await novu.notificationGroups.create("Product Updates") +await novu.notificationGroups.create('Product Updates'); // update an existing notification group -await novu.notificationGroups.update("notificationGroupId", { name: "Changelog Updates"}) +await novu.notificationGroups.update('notificationGroupId', { + name: 'Changelog Updates', +}); // list all notification groups -await novu.notificationGroups.get() +await novu.notificationGroups.get(); // get one existing notification group -await novu.notificationGroups.getOne("notificationGroupId") +await novu.notificationGroups.getOne('notificationGroupId'); // delete an existing notification group -await novu.notificationGroups.delete("notificationGroupId") +await novu.notificationGroups.delete('notificationGroupId'); ``` ### Topics @@ -853,39 +883,43 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); const payloadToCreate = { - key: "first-topic", - name: "First Topic" -} + key: 'first-topic', + name: 'First Topic', +}; // create new topic -await novu.topics.create(payloadToCreate) +await novu.topics.create(payloadToCreate); // add subscribers -await novu.topics.addSubscribers("topicKey", { subscribers: ["subscriberId1", "subscriberId2"] }) +await novu.topics.addSubscribers('topicKey', { + subscribers: ['subscriberId1', 'subscriberId2'], +}); // check if subscriber is present in topic -await novu.topics.checkSubscriber("topicKey", "subscriberId") +await novu.topics.checkSubscriber('topicKey', 'subscriberId'); // remove subscribers from topic -await novu.topics.removeSubscribers("topicKey", { subscribers: ["subscriberId1", "subscriberId2"] } ) +await novu.topics.removeSubscribers('topicKey', { + subscribers: ['subscriberId1', 'subscriberId2'], +}); const topicsListParams = { page: 0, //optional pageSize: 20, - key: "topicKey" -} + key: 'topicKey', +}; // list all topics -await novu.topics.list(topicsListParams) +await novu.topics.list(topicsListParams); // get a topic -await novu.topics.get("topicKey") +await novu.topics.get('topicKey'); // delete a topic -await novu.topics.delete("topicKey") +await novu.topics.delete('topicKey'); // get a topic -await novu.topics.rename("topicKey", "New Topic Name") +await novu.topics.rename('topicKey', 'New Topic Name'); ``` ### Integrations @@ -946,17 +980,17 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // create new in-app feed -await novu.feeds.create("Product Updates") +await novu.feeds.create('Product Updates'); /** - * get all in-app feeds + * get all in-app feeds * feeds methods returns only feed information * use subscriber.notificationsFeed() for in-app messages */ -await novu.feeds.get() +await novu.feeds.get(); // delete a feed -await novu.feeds.delete("feedId") +await novu.feeds.delete('feedId'); ``` ### Changes @@ -969,20 +1003,20 @@ const novu = new Novu(''); const changesParams = { page: 1, //optional limit: 20, // optional - promoted: false // required -} + promoted: false, // required +}; // get all changes -await novu.changes.get(changesParams) +await novu.changes.get(changesParams); // get changes count -await novu.changes.getCount() +await novu.changes.getCount(); // apply only one change -await novu.changes.applyOne("changeId") +await novu.changes.applyOne('changeId'); // apply many changes -await novu.changes.applyMany(["changeId1", "changeId2"]) +await novu.changes.applyMany(['changeId1', 'changeId2']); ``` ### Environments @@ -993,29 +1027,29 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // get current environment -await novu.environments.getCurrent() +await novu.environments.getCurrent(); // create new environment await novu.environments.create({ - name: "Stagging", - parentId: "parentEnvironmentId" -}) + name: 'Stagging', + parentId: 'parentEnvironmentId', +}); // get all environmemts -await novu.environments.getAll() +await novu.environments.getAll(); // update one environment -await novu.environments.updateOne("environmentId", { - name: "Stagging", // optional - parentId: "parentEnvironmentId", // optional - identifier: "environmentIdentifier" // optional -}) +await novu.environments.updateOne('environmentId', { + name: 'Stagging', // optional + parentId: 'parentEnvironmentId', // optional + identifier: 'environmentIdentifier', // optional +}); // get api keys of environment -await novu.environments.getApiKeys() +await novu.environments.getApiKeys(); // regenrate api keys -await novu.environments.regenerateApiKeys() +await novu.environments.regenerateApiKeys(); ``` ### Tenants @@ -1026,43 +1060,43 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); // create new tenat -await novu.tenants.create("tenantIdentifier", { - name: "First Tenant", +await novu.tenants.create('tenantIdentifier', { + name: 'First Tenant', // optional data: { - country: "US", - tokens: ["token1", "token2"], - isDeveloperTenant : true, + country: 'US', + tokens: ['token1', 'token2'], + isDeveloperTenant: true, numberOfMembers: 2, - isSales : undefined - } -}) + isSales: undefined, + }, +}); // update existing tenant -await novu.tenants.update("tenantIdentifier", { - identifier: "tenantIdentifier1", - name: "Second Tenant", +await novu.tenants.update('tenantIdentifier', { + identifier: 'tenantIdentifier1', + name: 'Second Tenant', // optional data: { - country: "India", - tokens: ["token1", "token2"], - isDeveloperTenant : true, + country: 'India', + tokens: ['token1', 'token2'], + isDeveloperTenant: true, numberOfMembers: 2, - isSales : undefined - } -}) + isSales: undefined, + }, +}); // list all tenants await novu.tenants.list({ page: 0, // optional - limit: 20 // optional -}) + limit: 20, // optional +}); // delete a tenant -await novu.tenants.delete("tenantIdentifier") +await novu.tenants.delete('tenantIdentifier'); // get one tenant -await novu.tenants.get("tenantIdentifier") +await novu.tenants.get('tenantIdentifier'); ``` ### Workflows @@ -1070,7 +1104,12 @@ await novu.tenants.get("tenantIdentifier") - #### Create a new workflow ```ts -import { Novu, TemplateVariableTypeEnum, FilterPartTypeEnum, StepTypeEnum } from '@novu/node'; +import { + Novu, + TemplateVariableTypeEnum, + FilterPartTypeEnum, + StepTypeEnum, +} from '@novu/node'; const novu = new Novu(''); @@ -1099,7 +1138,7 @@ await novu.notificationTemplates.create({ value: 'flag', operator: 'NOT_IN', // 'payload' - on: FilterPartTypeEnum.PAYLOAD + on: FilterPartTypeEnum.PAYLOAD, }, ], }, @@ -1114,7 +1153,7 @@ await novu.notificationTemplates.create({ name: 'chatContent', // 'String' type: TemplateVariableTypeEnum.STRING, - required: true + required: true, }, ], content: '{{chatContent}}', @@ -1125,39 +1164,44 @@ await novu.notificationTemplates.create({ description: 'Onboarding workflow to trigger after user sign up', active: true, draft: false, - critical: false + critical: false, }); ``` - #### Other Methods ```ts -import { Novu, TemplateVariableTypeEnum, FilterPartTypeEnum, StepTypeEnum } from '@novu/node'; +import { + Novu, + TemplateVariableTypeEnum, + FilterPartTypeEnum, + StepTypeEnum, +} from '@novu/node'; // update a workflow -await novu.notificationTemplates.update("workflowId", { - name: "Send daily digest email update", - description: "This workflow will send daily digest email to user at 9:00 AM" +await novu.notificationTemplates.update('workflowId', { + name: 'Send daily digest email update', + description: 'This workflow will send daily digest email to user at 9:00 AM', /** * all other fields from create workflow payload */ -}) +}); // get one workflow -await novu.notificationTemplates.getOne("workflowId") +await novu.notificationTemplates.getOne('workflowId'); // delete one workflow -await novu.notificationTemplates.delete("workflowId") +await novu.notificationTemplates.delete('workflowId'); // update status of one workflow -await novu.notificationTemplates.updateStatus("workflowId", false) +await novu.notificationTemplates.updateStatus('workflowId', false); // list all workflows await novu.notificationTemplates.getAll({ page: 0, // optional - limit: 20 // optional -}) + limit: 20, // optional +}); ``` ### Organizations @@ -1248,15 +1292,15 @@ await novu.organizations.updateBranding({ }); ``` - ### Inbound Parse + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -// Validate the mx record setup for the inbound parse functionality -await novu.inboundParse.getMxStatus() +// Validate the mx record setup for the inbound parse functionality +await novu.inboundParse.getMxStatus(); ``` ### Execution Details @@ -1268,22 +1312,23 @@ const novu = new Novu(''); const executionDetailsParams = { subscriberId: 'subscriberId_123', - notificationId: 'notificationid_abcd' -} + notificationId: 'notificationid_abcd', +}; // get execution details -await novu.executionDetails.get(executionDetailsParams) +await novu.executionDetails.get(executionDetailsParams); ``` ### Workflow Overrides - #### Create new workflow override + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.create({ +await novu.workflowOverrides.create({ workflowId: '8329rufivdsnvs9u334', tenantId: 'wvnq340i2jfwqv392', active: false, @@ -1293,64 +1338,77 @@ await novu.workflowoverrides.create({ in_app: false, chat: true, push: false, - } -}) + }, +}); ``` - #### List all workflow overrides + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.list(3,10); +await novu.workflowOverrides.list(3, 10); ``` - #### Get workflow override by id + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.getOneById('overrideId_123'); +await novu.workflowOverrides.getOneById('overrideId_123'); ``` - #### Get workflow override by tenant and workflow ids + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.getOneByTenantIdandWorkflowId('workflowId_123','tenantId_123'); +await novu.workflowOverrides.getOneByTenantIdandWorkflowId( + 'workflowId_123', + 'tenantId_123' +); ``` - #### Update workflow override by tenant and workflow ids + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.updateOneByTenantIdandWorkflowId('overrideId_123','tenantId_123',{ - active: false, -}); +await novu.workflowOverrides.updateOneByTenantIdandWorkflowId( + 'workflowId_123', + 'tenantId_123', + { + active: false, + } +); ``` - #### Update workflow override by id + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.updateOneById('OVERRIDE_ID',{ +await novu.workflowOverrides.updateOneById('OVERRIDE_ID', { active: false, }); ``` - #### Delete workflow override + ```ts import { Novu } from '@novu/node'; const novu = new Novu(''); -await novu.workflowoverrides.delete('overrideId_123'); +await novu.workflowOverrides.delete('overrideId_123'); ``` diff --git a/packages/node/src/lib/novu.ts b/packages/node/src/lib/novu.ts index 92921bc2ac5..250e92388de 100644 --- a/packages/node/src/lib/novu.ts +++ b/packages/node/src/lib/novu.ts @@ -38,7 +38,7 @@ export class Novu extends EventEmitter { readonly executionDetails: ExecutionDetails; readonly inboundParse: InboundParse; readonly organizations: Organizations; - readonly workflowoverrides: WorkflowOverrides; + readonly workflowOverrides: WorkflowOverrides; constructor(apiKey: string, config?: INovuConfiguration) { super(); @@ -71,7 +71,7 @@ export class Novu extends EventEmitter { this.executionDetails = new ExecutionDetails(this.http); this.inboundParse = new InboundParse(this.http); this.organizations = new Organizations(this.http); - this.workflowoverrides = new WorkflowOverrides(this.http); + this.workflowOverrides = new WorkflowOverrides(this.http); this.trigger = this.events.trigger; this.bulkTrigger = this.events.bulkTrigger; diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index a2fa18b80ea..34d7f52c1d8 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -56,7 +56,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { } /** - * @param {string} overrideId - workflowId + * @param {string} workflowId - workflowId * @param {string} tenantId - tenantId * @param {IWorkflowOverrideUpdatePayload} data - All the additional paramters to update workflow override */ diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts index a837e8efa30..457b3c3da25 100644 --- a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -28,7 +28,7 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.get.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.list(); + const result = await novu.workflowOverrides.list(); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { params: { @@ -51,7 +51,7 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.get.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.list(2); + const result = await novu.workflowOverrides.list(2); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { @@ -75,7 +75,7 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.get.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.list(0, 15); + const result = await novu.workflowOverrides.list(0, 15); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { @@ -99,7 +99,7 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.get.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.list(3, 20); + const result = await novu.workflowOverrides.list(3, 20); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith('/workflow-overrides', { @@ -128,7 +128,7 @@ describe('test use of novus node package - Workflow overrride class', () => { }; mockedAxios.post.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.create({ + const result = await novu.workflowOverrides.create({ workflowId: '8329rufivdsnvs9u334', tenantId: 'wvnq340i2jfwqv392', active: false, @@ -175,11 +175,11 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.put.mockResolvedValue(mockedResponse); const result = - await novu.workflowoverrides.updateOneByTenantIdandWorkflowId( + await novu.workflowOverrides.updateOneByTenantIdandWorkflowId( 'WORKFLOW_ID', 'TENANT_ID', { - active: false, + active: true, } ); @@ -187,21 +187,34 @@ describe('test use of novus node package - Workflow overrride class', () => { expect(mockedAxios.put).toHaveBeenCalledWith( '/workflow-overrides/workflows/WORKFLOW_ID/tenants/TENANT_ID', { - active: false, + active: true, } ); expect(result).toBe(mockedResponse); }); test('should delete the workflow override by specified override id', async () => { - const mockedResponse = false; + const mockedResponse = true; mockedAxios.delete.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.delete('OVERRIDE_ID1'); + await novu.workflowOverrides.create({ + workflowId: '8329rufivdsnvs9u334', + tenantId: 'wvnq340i2jfwqv392', + active: false, + preferenceSettings: { + email: false, + sms: false, + in_app: false, + chat: true, + push: false, + }, + }); + + const result = await novu.workflowOverrides.delete('8329rufivdsnvs9u334'); expect(mockedAxios.delete).toHaveBeenCalled(); expect(mockedAxios.delete).toHaveBeenCalledWith( - '/workflow-overrides/OVERRIDE_ID1' + `/workflow-overrides/8329rufivdsnvs9u334` ); expect(result).toBe(mockedResponse); @@ -224,7 +237,7 @@ describe('test use of novus node package - Workflow overrride class', () => { }; mockedAxios.get.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.getOneById('OVERRIDE_ID'); + const result = await novu.workflowOverrides.getOneById('OVERRIDE_ID'); expect(mockedAxios.get).toHaveBeenCalled(); expect(mockedAxios.get).toHaveBeenCalledWith( @@ -250,7 +263,7 @@ describe('test use of novus node package - Workflow overrride class', () => { }; mockedAxios.get.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.getOneByTenantIdandWorkflowId( + const result = await novu.workflowOverrides.getOneByTenantIdandWorkflowId( 'WORKFLOW_ID', 'TENANT_ID' ); @@ -279,7 +292,7 @@ describe('test use of novus node package - Workflow overrride class', () => { }; mockedAxios.put.mockResolvedValue(mockedResponse); - const result = await novu.workflowoverrides.updateOneById('OVERRIDE_ID', { + const result = await novu.workflowOverrides.updateOneById('OVERRIDE_ID', { active: false, }); From fe3230945b485e9d1a14b5acec01f16cb17fc47b Mon Sep 17 00:00:00 2001 From: Pawan Jain Date: Wed, 10 Jan 2024 17:15:03 +0530 Subject: [PATCH 19/19] fix: spell errors --- .cspell.json | 3 ++- packages/node/README.md | 4 ++-- .../workflow-override/workflow-override.ts | 4 ++-- .../workflow-overrride.spec.ts | 20 +++++++++---------- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.cspell.json b/.cspell.json index 9eec24bff49..d0c489a1f70 100644 --- a/.cspell.json +++ b/.cspell.json @@ -545,7 +545,8 @@ "Stdev", "openapi", "headerapikey", - "isend" + "isend", + "Idand" ], "flagWords": [], "patterns": [ diff --git a/packages/node/README.md b/packages/node/README.md index 579dafad275..ba07fb028fa 100644 --- a/packages/node/README.md +++ b/packages/node/README.md @@ -1329,8 +1329,8 @@ import { Novu } from '@novu/node'; const novu = new Novu(''); await novu.workflowOverrides.create({ - workflowId: '8329rufivdsnvs9u334', - tenantId: 'wvnq340i2jfwqv392', + workflowId: 'workflow_id_123', + tenantId: 'tenant_id_abc', active: false, preferenceSettings: { email: false, diff --git a/packages/node/src/lib/workflow-override/workflow-override.ts b/packages/node/src/lib/workflow-override/workflow-override.ts index 34d7f52c1d8..150b1a53517 100644 --- a/packages/node/src/lib/workflow-override/workflow-override.ts +++ b/packages/node/src/lib/workflow-override/workflow-override.ts @@ -8,7 +8,7 @@ import { WithHttp } from '../novu.interface'; export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { /** * @param {string} overrideId - overrideId of the workflow-override to update - * @param {IWorkflowOverrideUpdatePayload} data - All the additional parameters to update a worflow-override + * @param {IWorkflowOverrideUpdatePayload} data - All the additional parameters to update a workflow-override */ async updateOneById( overrideId: string, @@ -58,7 +58,7 @@ export class WorkflowOverrides extends WithHttp implements IWorkflowOverrides { /** * @param {string} workflowId - workflowId * @param {string} tenantId - tenantId - * @param {IWorkflowOverrideUpdatePayload} data - All the additional paramters to update workflow override + * @param {IWorkflowOverrideUpdatePayload} data - All the additional parameters to update workflow override */ async updateOneByTenantIdandWorkflowId( workflowId: string, diff --git a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts index 457b3c3da25..da9702cfd10 100644 --- a/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts +++ b/packages/node/src/lib/workflow-override/workflow-overrride.spec.ts @@ -116,8 +116,8 @@ describe('test use of novus node package - Workflow overrride class', () => { _id: '_id', _organizationId: '_organizationId', _environmentId: '_environmentId', - _workflowId: '8329rufivdsnvs9u334', - _tenantId: 'wvnq340i2jfwqv392', + _workflowId: 'workflow_id_123', + _tenantId: 'tenant_id_abc', active: false, preferenceSettings: {}, deleted: true, @@ -129,8 +129,8 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.post.mockResolvedValue(mockedResponse); const result = await novu.workflowOverrides.create({ - workflowId: '8329rufivdsnvs9u334', - tenantId: 'wvnq340i2jfwqv392', + workflowId: 'workflow_id_123', + tenantId: 'tenant_id_abc', active: false, preferenceSettings: { email: false, @@ -143,8 +143,8 @@ describe('test use of novus node package - Workflow overrride class', () => { expect(mockedAxios.post).toHaveBeenCalled(); expect(mockedAxios.post).toHaveBeenCalledWith('/workflow-overrides', { - workflowId: '8329rufivdsnvs9u334', - tenantId: 'wvnq340i2jfwqv392', + workflowId: 'workflow_id_123', + tenantId: 'tenant_id_abc', active: false, preferenceSettings: { email: false, @@ -198,8 +198,8 @@ describe('test use of novus node package - Workflow overrride class', () => { mockedAxios.delete.mockResolvedValue(mockedResponse); await novu.workflowOverrides.create({ - workflowId: '8329rufivdsnvs9u334', - tenantId: 'wvnq340i2jfwqv392', + workflowId: 'workflow_id_123', + tenantId: 'tenant_id_abc', active: false, preferenceSettings: { email: false, @@ -210,11 +210,11 @@ describe('test use of novus node package - Workflow overrride class', () => { }, }); - const result = await novu.workflowOverrides.delete('8329rufivdsnvs9u334'); + const result = await novu.workflowOverrides.delete('workflow_id_123'); expect(mockedAxios.delete).toHaveBeenCalled(); expect(mockedAxios.delete).toHaveBeenCalledWith( - `/workflow-overrides/8329rufivdsnvs9u334` + `/workflow-overrides/workflow_id_123` ); expect(result).toBe(mockedResponse);