From 15292ed07a134a5d177ba3b890f796efce008576 Mon Sep 17 00:00:00 2001 From: kshitij-k-osmosys Date: Sun, 20 Jul 2025 19:54:00 +0530 Subject: [PATCH 1/5] feat: remove portal code --- apps/portal/src/assets/icons/kaps.png | Bin 39274 -> 0 bytes .../portal/src/common/constants/notification.ts | 9 +-------- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 apps/portal/src/assets/icons/kaps.png diff --git a/apps/portal/src/assets/icons/kaps.png b/apps/portal/src/assets/icons/kaps.png deleted file mode 100644 index d51e83f0bdedd5990bff1e2f1c5a96991982d7b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39274 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 diff --git a/apps/portal/src/common/constants/notification.ts b/apps/portal/src/common/constants/notification.ts index cba963da..3dde5941 100644 --- a/apps/portal/src/common/constants/notification.ts +++ b/apps/portal/src/common/constants/notification.ts @@ -16,7 +16,7 @@ export const ChannelType = { SMS_TWILIO: 5, SMS_PLIVO: 6, WA_TWILIO_BUSINESS: 7, - SMS_KAPSYSTEM: 8, + // We no longer support SMS_KAPSYSTEM: 8, PUSH_SNS: 9, VC_TWILIO: 10, AWS_SES: 11, @@ -73,13 +73,6 @@ export const ChannelTypeMap = { providerIcon: 'assets/icons/twilio.svg', style: 'whatsapp', }, - [ChannelType.SMS_KAPSYSTEM]: { - serviceIcon: 'assets/icons/sms.svg', - altText: 'SMS', - providerName: 'KAP System', - providerIcon: 'assets/icons/kaps.png', - style: 'sms', - }, [ChannelType.PUSH_SNS]: { serviceIcon: 'assets/icons/pushnotification.svg', altText: 'Push Notification', From 0dcd405ab660708e1e9fba0588d7755da8e80bb9 Mon Sep 17 00:00:00 2001 From: kshitij-k-osmosys Date: Sun, 20 Jul 2025 19:55:38 +0530 Subject: [PATCH 2/5] refactor: remove api code --- .../api/src/common/constants/notifications.ts | 8 +- .../decorators/is-data-valid.decorator.ts | 8 -- ...smsKapsystem-notifications.job.consumer.ts | 50 ------------ .../dtos/providers/smsKapsystem-data.dto.ts | 15 ---- .../notifications/notifications.module.ts | 4 - .../notifications/queues/queue.service.ts | 9 --- .../sms-kapsystem/sms-kapsystem.module.ts | 13 ---- .../sms-kapsystem.service.spec.ts | 18 ----- .../sms-kapsystem/sms-kapsystem.service.ts | 77 ------------------- 9 files changed, 1 insertion(+), 201 deletions(-) delete mode 100644 apps/api/src/jobs/consumers/notifications/smsKapsystem-notifications.job.consumer.ts delete mode 100644 apps/api/src/modules/notifications/dtos/providers/smsKapsystem-data.dto.ts delete mode 100644 apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.module.ts delete mode 100644 apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.spec.ts delete mode 100644 apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts diff --git a/apps/api/src/common/constants/notifications.ts b/apps/api/src/common/constants/notifications.ts index cc30c0c5..92749228 100644 --- a/apps/api/src/common/constants/notifications.ts +++ b/apps/api/src/common/constants/notifications.ts @@ -15,7 +15,7 @@ export const ChannelType = { SMS_TWILIO: 5, SMS_PLIVO: 6, WA_TWILIO_BUSINESS: 7, - SMS_KAPSYSTEM: 8, + // We no longer support SMS_KAPSYSTEM: 8, PUSH_SNS: 9, VC_TWILIO: 10, AWS_SES: 11, @@ -53,10 +53,6 @@ export const ProviderDeliveryStatus = { SUCCESS_STATES: ['sent', 'delivered', 'read'], FAILURE_STATES: ['failed'], }, - SMS_KAPSYSTEM: { - SUCCESS_STATES: ['DELIVRD'], - FAILURE_STATES: ['EXPIRED', 'UNDELIV', 'FAILED'], - }, VC_TWILIO: { SUCCESS_STATES: ['completed'], FAILURE_STATES: ['canceled', 'busy', 'no-answer', 'failed'], @@ -64,7 +60,6 @@ export const ProviderDeliveryStatus = { }; export const SkipProviderConfirmationChannels = [ - ChannelType.SMS_KAPSYSTEM, ChannelType.WA_360_DAILOG, ChannelType.PUSH_SNS, ChannelType.SMTP, @@ -80,7 +75,6 @@ export const RecipientKeyForChannelType = { [ChannelType.SMS_TWILIO]: 'to', [ChannelType.SMS_PLIVO]: 'to', [ChannelType.WA_TWILIO_BUSINESS]: 'to', - [ChannelType.SMS_KAPSYSTEM]: 'to', [ChannelType.PUSH_SNS]: 'target', [ChannelType.VC_TWILIO]: 'to', [ChannelType.AWS_SES]: 'to', diff --git a/apps/api/src/common/decorators/is-data-valid.decorator.ts b/apps/api/src/common/decorators/is-data-valid.decorator.ts index 5848fe6b..e8e72c07 100644 --- a/apps/api/src/common/decorators/is-data-valid.decorator.ts +++ b/apps/api/src/common/decorators/is-data-valid.decorator.ts @@ -19,7 +19,6 @@ import { SmsPlivoDataDto } from 'src/modules/notifications/dtos/providers/plivo- import { WaTwilioBusinessDataDto } from 'src/modules/notifications/dtos/providers/waTwilioBusiness-data.dto'; import { Injectable } from '@nestjs/common'; import { ProvidersService } from 'src/modules/providers/providers.service'; -import { SmsKapsystemDataDto } from 'src/modules/notifications/dtos/providers/smsKapsystem-data.dto'; import { PushSnsDataDto } from 'src/modules/notifications/dtos/providers/pushSns-data.dto'; import { VcTwilioDataDto } from 'src/modules/notifications/dtos/providers/vcTwilio-data.dto'; import { AwsSesDataDto } from 'src/modules/notifications/dtos/providers/awsSes-data.dto'; @@ -108,13 +107,6 @@ export class IsDataValidConstraint implements ValidatorConstraintInterface { return true; } - case ChannelType.SMS_KAPSYSTEM: { - const kapsystemData = new SmsKapsystemDataDto(); - Object.assign(kapsystemData, value); - await validateAndThrowError(kapsystemData); - return true; - } - case ChannelType.PUSH_SNS: { const pushSnsData = new PushSnsDataDto(); Object.assign(pushSnsData, value); diff --git a/apps/api/src/jobs/consumers/notifications/smsKapsystem-notifications.job.consumer.ts b/apps/api/src/jobs/consumers/notifications/smsKapsystem-notifications.job.consumer.ts deleted file mode 100644 index 051affc3..00000000 --- a/apps/api/src/jobs/consumers/notifications/smsKapsystem-notifications.job.consumer.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { NotificationConsumer } from './notification.consumer'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { - KapsystemData, - SmsKapsystemService, -} from 'src/modules/providers/sms-kapsystem/sms-kapsystem.service'; -import { NotificationsService } from 'src/modules/notifications/notifications.service'; -import { Notification } from 'src/modules/notifications/entities/notification.entity'; -import { Inject, Injectable, forwardRef } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { WebhookService } from 'src/modules/webhook/webhook.service'; -import { RetryNotification } from 'src/modules/notifications/entities/retry-notification.entity'; -import { NotificationQueueProducer } from 'src/jobs/producers/notifications/notifications.job.producer'; - -@Injectable() -export class SmsKapsystemNotificationsConsumer extends NotificationConsumer { - constructor( - @InjectRepository(Notification) - protected readonly notificationRepository: Repository, - @InjectRepository(RetryNotification) - protected readonly notificationRetryRepository: Repository, - private readonly kapsystemService: SmsKapsystemService, - @Inject(forwardRef(() => NotificationsService)) - notificationsService: NotificationsService, - @Inject(forwardRef(() => NotificationQueueProducer)) - notificationsQueueService: NotificationQueueProducer, - webhookService: WebhookService, - configService: ConfigService, - ) { - super( - notificationRepository, - notificationRetryRepository, - notificationsService, - notificationsQueueService, - webhookService, - configService, - ); - } - - async processSmsKapsystemNotificationQueue(id: number): Promise { - return super.processNotificationQueue(id, async () => { - const notification = (await this.notificationsService.getNotificationById(id))[0]; - return this.kapsystemService.sendMessage( - notification.data as unknown as KapsystemData, - notification.providerId, - ); - }); - } -} diff --git a/apps/api/src/modules/notifications/dtos/providers/smsKapsystem-data.dto.ts b/apps/api/src/modules/notifications/dtos/providers/smsKapsystem-data.dto.ts deleted file mode 100644 index 7453766c..00000000 --- a/apps/api/src/modules/notifications/dtos/providers/smsKapsystem-data.dto.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IsNotEmpty } from 'class-validator'; - -export class SmsKapsystemDataDto { - @IsNotEmpty() - indiaDltContentTemplateId: string; - - @IsNotEmpty() - indiaDltPrincipalEntityId: string; - - @IsNotEmpty() - text: string; - - @IsNotEmpty() - to: string; -} diff --git a/apps/api/src/modules/notifications/notifications.module.ts b/apps/api/src/modules/notifications/notifications.module.ts index ed6ae329..06a788d2 100644 --- a/apps/api/src/modules/notifications/notifications.module.ts +++ b/apps/api/src/modules/notifications/notifications.module.ts @@ -30,8 +30,6 @@ import { ProvidersService } from '../providers/providers.service'; import { SmsPlivoModule } from '../providers/sms-plivo/sms-plivo.module'; import { SmsPlivoNotificationsConsumer } from 'src/jobs/consumers/notifications/smsPlivo-notifications.job.consumer'; import { WaTwilioBusinessModule } from '../providers/wa-twilio-business/wa-twilio-business.module'; -import { SmsKapsystemModule } from '../providers/sms-kapsystem/sms-kapsystem.module'; -import { SmsKapsystemNotificationsConsumer } from 'src/jobs/consumers/notifications/smsKapsystem-notifications.job.consumer'; import { QueueService } from './queues/queue.service'; import { WaTwilioBusinessNotificationsConsumer } from 'src/jobs/consumers/notifications/waTwilioBusiness-notifications.job.consumer'; import { PushSnsNotificationConsumer } from 'src/jobs/consumers/notifications/pushSns-notifications.job.consumer'; @@ -58,7 +56,6 @@ const providerModules = [ SmsTwilioModule, SmsPlivoModule, WaTwilioBusinessModule, - SmsKapsystemModule, PushSnsModule, VcTwilioModule, AwsSesModule, @@ -79,7 +76,6 @@ const consumers = [ SmsTwilioNotificationsConsumer, SmsPlivoNotificationsConsumer, WaTwilioBusinessNotificationsConsumer, - SmsKapsystemNotificationsConsumer, PushSnsNotificationConsumer, VcTwilioNotificationsConsumer, AwsSesNotificationConsumer, diff --git a/apps/api/src/modules/notifications/queues/queue.service.ts b/apps/api/src/modules/notifications/queues/queue.service.ts index fdf4ed7d..a8405343 100644 --- a/apps/api/src/modules/notifications/queues/queue.service.ts +++ b/apps/api/src/modules/notifications/queues/queue.service.ts @@ -6,7 +6,6 @@ import { ChannelType, QueueAction } from 'src/common/constants/notifications'; import { AwsSesNotificationConsumer } from 'src/jobs/consumers/notifications/awsSes-notifications.job.consumer'; import { MailgunNotificationConsumer } from 'src/jobs/consumers/notifications/mailgun-notifications.job.consumer'; import { PushSnsNotificationConsumer } from 'src/jobs/consumers/notifications/pushSns-notifications.job.consumer'; -import { SmsKapsystemNotificationsConsumer } from 'src/jobs/consumers/notifications/smsKapsystem-notifications.job.consumer'; import { SmsPlivoNotificationsConsumer } from 'src/jobs/consumers/notifications/smsPlivo-notifications.job.consumer'; import { SmsSnsNotificationConsumer } from 'src/jobs/consumers/notifications/smsSns-notifications.job.consumer'; import { SmsTwilioNotificationsConsumer } from 'src/jobs/consumers/notifications/smsTwilio-notifications.job.consumer'; @@ -37,7 +36,6 @@ export class QueueService { private readonly smsTwilioNotificationConsumer: SmsTwilioNotificationsConsumer, private readonly smsPlivoNotificationConsumer: SmsPlivoNotificationsConsumer, private readonly waTwilioBusinessNotificationConsumer: WaTwilioBusinessNotificationsConsumer, - private readonly smsKapsystemNotificationConsumer: SmsKapsystemNotificationsConsumer, private readonly pushSnsNotificationConsumer: PushSnsNotificationConsumer, private readonly vcTwilioNotificationsConsumer: VcTwilioNotificationsConsumer, private readonly awsSesNotificationConsumer: AwsSesNotificationConsumer, @@ -166,12 +164,6 @@ export class QueueService { job.data.id, ); break; - // SMS_KAPSYSTEM cases - case `${QueueAction.SEND}-${ChannelType.SMS_KAPSYSTEM}`: - await this.smsKapsystemNotificationConsumer.processSmsKapsystemNotificationQueue( - job.data.id, - ); - break; // PUSH_SNS cases case `${QueueAction.SEND}-${ChannelType.PUSH_SNS}`: await this.pushSnsNotificationConsumer.processPushSnsNotificationQueue(job.data.id); @@ -201,7 +193,6 @@ export class QueueService { case `${QueueAction.WEBHOOK}-${ChannelType.SMS_TWILIO}`: case `${QueueAction.WEBHOOK}-${ChannelType.SMS_PLIVO}`: case `${QueueAction.WEBHOOK}-${ChannelType.WA_TWILIO_BUSINESS}`: - case `${QueueAction.WEBHOOK}-${ChannelType.SMS_KAPSYSTEM}`: case `${QueueAction.WEBHOOK}-${ChannelType.PUSH_SNS}`: case `${QueueAction.WEBHOOK}-${ChannelType.VC_TWILIO}`: case `${QueueAction.WEBHOOK}-${ChannelType.AWS_SES}`: diff --git a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.module.ts b/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.module.ts deleted file mode 100644 index 8dcbbb13..00000000 --- a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Logger, Module } from '@nestjs/common'; -import { SmsKapsystemService } from './sms-kapsystem.service'; -import { ConfigModule } from '@nestjs/config'; -import { ProvidersModule } from '../providers.module'; -import { ProvidersService } from '../providers.service'; -import { HttpModule } from '@nestjs/axios'; - -@Module({ - imports: [HttpModule, ConfigModule, ProvidersModule], - providers: [SmsKapsystemService, ProvidersService, Logger], - exports: [SmsKapsystemService], -}) -export class SmsKapsystemModule {} diff --git a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.spec.ts b/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.spec.ts deleted file mode 100644 index 71d56602..00000000 --- a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { SmsKapsystemService } from './sms-kapsystem.service'; - -describe('SmsKapsystemService', () => { - let service: SmsKapsystemService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [SmsKapsystemService], - }).compile(); - - service = module.get(SmsKapsystemService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts b/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts deleted file mode 100644 index a86845e7..00000000 --- a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { HttpService } from '@nestjs/axios'; -import { Injectable, Logger } from '@nestjs/common'; -import { ProvidersService } from '../providers.service'; -import { firstValueFrom } from 'rxjs'; - -export interface KapsystemData { - indiaDltContentTemplateId: string; - indiaDltPrincipalEntityId: string; - text: string; - to: string; -} - -export interface KapsystemResponse { - results: Results; -} - -export interface Results { - result: Result; -} - -export interface Result { - status: string; - messageid: string; - destination: string; -} - -@Injectable() -export class SmsKapsystemService { - private apiUrl; - private username; - private password; - private from; - - constructor( - private httpService: HttpService, - private readonly providersService: ProvidersService, - private logger: Logger = new Logger(SmsKapsystemService.name), - ) {} - - async assignKAPSystemValues(providerId: number): Promise { - this.logger.debug('Started assigning KAPSystem SMS values'); - const smsKapsystemConfig = await this.providersService.getConfigById(providerId); - this.apiUrl = smsKapsystemConfig.KAP_SMS_BASE_API_URL as string; - this.username = smsKapsystemConfig.KAP_SMS_ACCOUNT_USERNAME as string; - this.password = smsKapsystemConfig.KAP_SMS_ACCOUNT_PASSWORD as string; - this.from = smsKapsystemConfig.KAP_SMS_FROM as string; - } - - async sendMessage(body: KapsystemData, providerId: number): Promise { - await this.assignKAPSystemValues(providerId); - - function objToQueryString(obj: KapsystemData): string { - let queryString = ''; - - for (const key in obj) { - if (queryString != '') { - queryString += '&'; - } - - queryString += key + '=' + encodeURIComponent(obj[key]); - } - - return queryString; - } - - this.apiUrl = - this.apiUrl + - `?username=${this.username}&password=${this.password}&from=${this.from}&` + - objToQueryString(body); - - this.logger.debug('Sending KAPSystem SMS'); - const response = await this.httpService.get(this.apiUrl); - const res = await firstValueFrom(response); - - return res.data; - } -} From 4a93d9d36b8df2c4d182a1698349f4c0f03e9376 Mon Sep 17 00:00:00 2001 From: kshitij-k-osmosys Date: Sun, 20 Jul 2025 20:18:35 +0530 Subject: [PATCH 3/5] docs: remove kapsystem --- apps/api/docs/api-documentation.md | 17 ++------ apps/api/docs/channels/sms-kapsystem.md | 57 ------------------------- apps/api/docs/usage-guide.md | 2 +- 3 files changed, 4 insertions(+), 72 deletions(-) delete mode 100644 apps/api/docs/channels/sms-kapsystem.md diff --git a/apps/api/docs/api-documentation.md b/apps/api/docs/api-documentation.md index 30d7fa0b..a77f69b4 100644 --- a/apps/api/docs/api-documentation.md +++ b/apps/api/docs/api-documentation.md @@ -934,8 +934,8 @@ curl --location 'http://localhost:3000/graphql' \ "providers": [ { "providerId": 4, - "name": "KAPS Pinestem", - "channelType": 8, + "name": "Twilio WhatsApp Business Pinestem", + "channelType": 7, "configuration": {}, "isEnabled": 1, "userId": 1, @@ -953,20 +953,9 @@ curl --location 'http://localhost:3000/graphql' \ "createdOn": "2024-06-21T09:46:27.000Z", "updatedOn": "2024-06-21T09:46:27.000Z", "status": 1 - }, - { - "providerId": 7, - "name": "Mailgun PineStem", - "channelType": 2, - "configuration": {}, - "isEnabled": 1, - "userId": 1, - "createdOn": "2024-06-23T09:30:39.000Z", - "updatedOn": "2024-06-23T09:30:39.000Z", - "status": 1 } ], - "total": 3, + "total": 2, "offset": 0, "limit": 5 } diff --git a/apps/api/docs/channels/sms-kapsystem.md b/apps/api/docs/channels/sms-kapsystem.md deleted file mode 100644 index 1b7ab2c2..00000000 --- a/apps/api/docs/channels/sms-kapsystem.md +++ /dev/null @@ -1,57 +0,0 @@ -# KAPSystem SMS - -KAPSystem enables sending SMS through its API, allowing developers to programmatically send and receive text messages worldwide. Users integrate KAPSystem's API into their applications, triggering automated SMS messages for various purposes such as notifications, alerts, and customer communications. - -Refer to the messaging documentation to dive deeper into the features KAPSystem offers and understand how it all works. - -### Values to Update in Database - -When using KAPSystem to send SMS messages via their API/Client, you need to provide certain variables that hold the KAPSystem configuration details. Here are the values you need to update in table `notify_providers`: - -Create a new entry in table `notify_providers` and set the fields - `name`, `application_id`, `user_id` - -- Set field `channel_type` = 8 (for KAPSystem SMS) -- Set field `is_enabled` = 1 (to enable the newly created provider) - -Then set the following configurations in the `configuration` field - -| Key | Description | -| ------------------------ | ------------------------ | -| KAP_SMS_BASE_API_URL | KAP SMS base API URL | -| KAP_SMS_ACCOUNT_USERNAME | KAP SMS account username | -| KAP_SMS_ACCOUNT_PASSWORD | KAP SMS account password | -| KAP_SMS_FROM | KAP SMS from | - -```jsonc -// Sample json to set in configuration field -{ - "KAP_SMS_BASE_API_URL":"http:///api/v3/sendsms/plain", - "KAP_SMS_ACCOUNT_USERNAME": "your-username", - "KAP_SMS_ACCOUNT_PASSWORD": "your-password", - "KAP_SMS_FROM": "KAPMSG" -} -``` - -### Sample Request Body - -Here's a sample request body: - -```jsonc -{ - // Set your respective providerId. ChannelType associated with providerId should be 8 (KAPSystem SMS) - "providerId": 2, - "data": { - "indiaDltContentTemplateId": "1707160146562806652", - "indiaDltPrincipalEntityId":"1601100000000005964", - "to": "+911234567890,+914578126395", - "text": "Hello Ayush, your order #234K3J4 has been Shipped.\nThank you for using our service." - } -} -``` - -### Dependencies - -| Package Name | Version | Description | -| ------------- | ------- | ----------------------------------------------------------------------------------------------------- | -| @nestjs/axios | ^3.1.1 | Integration of Axios with NestJS for making HTTP requests. | -| rxjs | ^7.8.2 | Reactive extensions library for JavaScript, used for composing asynchronous and event-based programs. | diff --git a/apps/api/docs/usage-guide.md b/apps/api/docs/usage-guide.md index 91a4aca7..004e1088 100644 --- a/apps/api/docs/usage-guide.md +++ b/apps/api/docs/usage-guide.md @@ -130,7 +130,7 @@ OsmoX supports multiple channel types, allowing you to choose the most suitable | SMS - Twilio | 5 | [SMS - Twilio](channels/sms-Twilio.md) | | SMS - Plivo | 6 | [SMS - Plivo](channels/sms-Plivo.md) | | WhatsApp - Twilio (Business) | 7 | [WhatsApp - Twilio (Business)](channels/wa-Twilio-Business.md) | -| SMS - KAPSystem | 8 | [SMS - KAPSystem](channels/sms-kapsystem.md) | +| SMS - KAPSystem | 8 | We no longer support SMS - KAPSystem | | PushNotification - SNS | 9 | [Push Notification - SNS](channels/push-sns.md) | | Voice Call - Twilio | 10 | [Voice Call - Twilio](channels/vc-twilio.md) | | Email - AWS SES | 11 | [Email - AWS SES](channels/aws-ses.md) | From 09d2b6cbc3cc8d607056056617acc000bd6cdb06 Mon Sep 17 00:00:00 2001 From: kshitij-k-osmosys Date: Sun, 20 Jul 2025 20:19:04 +0530 Subject: [PATCH 4/5] fix: newman commands --- apps/api/docs/api-test-cases.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/api/docs/api-test-cases.md b/apps/api/docs/api-test-cases.md index a4160137..098551d7 100644 --- a/apps/api/docs/api-test-cases.md +++ b/apps/api/docs/api-test-cases.md @@ -52,13 +52,13 @@ Before running the test cases, make sure you have the following prerequisites in 1. For console output ```bash - newman run OsmoX.postman_collection.json -e OsmoX.postman_environment.json + newman run OsmoX.postman_collection.json -e OsmoX-API.postman_environment.json ``` 2. For HTML report ```bash - newman run OsmoX.postman_collection.json -e OsmoX.postman_environment.json -r html + newman run OsmoX.postman_collection.json -e OsmoX-API.postman_environment.json -r html ``` Specify the path to the collection and environment file as required. From 2b32a2b75659f732f5373e59f4f9117b308094f9 Mon Sep 17 00:00:00 2001 From: kshitij-k-osmosys Date: Sun, 20 Jul 2025 20:19:43 +0530 Subject: [PATCH 5/5] docs: update postman json files --- apps/api/OsmoX-API.postman_collection.json | 137 ----------- apps/api/OsmoX-API.postman_environment.json | 20 -- apps/api/OsmoX.postman_collection.json | 240 -------------------- 3 files changed, 397 deletions(-) diff --git a/apps/api/OsmoX-API.postman_collection.json b/apps/api/OsmoX-API.postman_collection.json index 794260c0..873759e5 100644 --- a/apps/api/OsmoX-API.postman_collection.json +++ b/apps/api/OsmoX-API.postman_collection.json @@ -325,51 +325,6 @@ }, "response": [] }, - { - "name": "KAPS - SMS", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - }, - { - "key": "x-api-key", - "value": "{{x-api-key}}", - "type": "text" - } - ], - "body": { - "mode": "raw", - "raw": "{\n // Assuming providerId 8 also has channelType 8\n \"providerId\": 8,\n \"data\": {\n \"indiaDltContentTemplateId\": \"1707160146562806652\",\n \"indiaDltPrincipalEntityId\":\"1601100000000005964\",\n \"to\": \"+918900100002,+918900100003\",\n \"text\": \"This is a test message from OsmoX.\\nThank you for using our service.\"\n }\n}" - }, - "url": { - "raw": "{{base_url}}/notifications", - "host": [ - "{{base_url}}" - ], - "path": [ - "notifications" - ] - }, - "description": "Allows successfully creating new notification for the KAPS SMS channel type." - }, - "response": [] - }, { "name": "AWS - PushNotification - Android", "event": [ @@ -1429,54 +1384,6 @@ }, "response": [] }, - { - "name": "Create KAPSystem SMS Provider", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Authorization", - "value": "Bearer {{auth-token}}", - "type": "text" - }, - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "body": { - "mode": "graphql", - "graphql": { - "query": "mutation CreateProvider($applicationId: Float!) {\n provider(createProviderInput: {\n applicationId: $applicationId,\n channelType: 8\n configuration: {\n KAP_SMS_BASE_API_URL:\"http:///api/v3/sendsms/plain\",\n KAP_SMS_ACCOUNT_USERNAME: \"\", \n KAP_SMS_ACCOUNT_PASSWORD: \"\", \n KAP_SMS_FROM: \"KAPMSG\" \n },\n isEnabled: 1,\n name: \"\",\n userId: 1,\n }) {\n providerId\n applicationId\n channelType\n configuration\n isEnabled\n name\n userId\n createdOn\n updatedOn\n status\n }\n}", - "variables": "{\n \"applicationId\": {{applicationId}}\n}" - } - }, - "url": { - "raw": "{{base_url}}/graphql", - "host": [ - "{{base_url}}" - ], - "path": [ - "graphql" - ] - }, - "description": "Allows successfully creating a provider based on the options passed." - }, - "response": [] - }, { "name": "Create AWS SNS Push Notification Provider", "event": [ @@ -2122,50 +2029,6 @@ }, "response": [] }, - { - "name": "KAPS SMS cURL", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{KAP_SMS_BASE_API_URL}}?username={{KAP_SMS_ACCOUNT_USERNAME}}&password={{KAP_SMS_ACCOUNT_PASSWORD}}&from={{KAP_SMS_FROM}}&indiaDltContentTemplateId=1707160146562806652&indiaDltPrincipalEntityId=1601100000000005964&to=+918900100002&text=This is a test message from OsmoX.", - "host": [ - "{{KAP_SMS_BASE_API_URL}}" - ], - "query": [ - { - "key": "username", - "value": "{{KAP_SMS_ACCOUNT_USERNAME}}" - }, - { - "key": "password", - "value": "{{KAP_SMS_ACCOUNT_PASSWORD}}" - }, - { - "key": "from", - "value": "{{KAP_SMS_FROM}}" - }, - { - "key": "indiaDltContentTemplateId", - "value": "1707160146562806652" - }, - { - "key": "indiaDltPrincipalEntityId", - "value": "1601100000000005964" - }, - { - "key": "to", - "value": "+918900100002" - }, - { - "key": "text", - "value": "This is a test message from OsmoX." - } - ] - } - }, - "response": [] - }, { "name": "Twilio Voice Call cURL", "request": { diff --git a/apps/api/OsmoX-API.postman_environment.json b/apps/api/OsmoX-API.postman_environment.json index 67aa3a19..a63642d7 100644 --- a/apps/api/OsmoX-API.postman_environment.json +++ b/apps/api/OsmoX-API.postman_environment.json @@ -78,26 +78,6 @@ "value": "some-plivo-auth-token", "enabled": true }, - { - "key": "KAP_SMS_ACCOUNT_USERNAME", - "value": "kaps-username", - "enabled": true - }, - { - "key": "KAP_SMS_BASE_API_URL", - "value": "http:///api/v3/sendsms/plain", - "enabled": true - }, - { - "key": "KAP_SMS_ACCOUNT_PASSWORD", - "value": "kaps-password", - "enabled": true - }, - { - "key": "KAP_SMS_FROM", - "value": "KAPMSG", - "enabled": true - }, { "key": "AWS_REGION", "value": "aws-region", diff --git a/apps/api/OsmoX.postman_collection.json b/apps/api/OsmoX.postman_collection.json index a0248a06..b15c6c7b 100644 --- a/apps/api/OsmoX.postman_collection.json +++ b/apps/api/OsmoX.postman_collection.json @@ -1691,246 +1691,6 @@ ], "description": "Collection of requests pertaining to creating notifications for the Twilio WhatsApp channel type using templates." }, - { - "name": "KAPS SMS Notifications", - "item": [ - { - "name": "Send KAPS SMS Notification - Success", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Response is valid JSON\", function () {", - " pm.response.to.be.json;", - "});", - "pm.test(\"Response has valid 'status' and 'data' properties\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData).to.have.property(\"status\", \"success\");", - " pm.expect(jsonData).to.have.property(\"data\").to.be.an(\"object\");", - "});", - "pm.test(\"Response contains a valid 'notification' object\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData.data).to.have.property(\"notification\").to.be.an(\"object\");", - "});", - "pm.test(\"Response 'channelType' is 8\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData.data.notification).to.have.property(\"channelType\", 8);", - "});", - "pm.test(\"Response 'deliveryStatus' is 1\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData.data.notification).to.have.property(\"deliveryStatus\", 1);", - "});", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - }, - { - "key": "x-api-key", - "value": "{{x-api-key}}", - "type": "text" - } - ], - "body": { - "mode": "raw", - "raw": "{\n // Assuming providerId 8 also has channelType 8\n \"providerId\": 8,\n \"data\": {\n \"indiaDltContentTemplateId\": \"1707160146562806652\",\n \"indiaDltPrincipalEntityId\":\"1601100000000005964\",\n \"to\": \"+918900100002,+918900100003\",\n \"text\": \"This is a test message from OsmoX.\\nThank you for using our service.\"\n }\n}" - }, - "url": { - "raw": "localhost:3000/notifications", - "host": [ - "localhost" - ], - "port": "3000", - "path": [ - "notifications" - ] - }, - "description": "Allows successfully creating new notification for the KAPS SMS channel type." - }, - "response": [] - }, - { - "name": "Send KAPS SMS Notification - Mismatch in ChannelType", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Response is valid JSON\", function () {", - " pm.response.to.be.json;", - "});", - "pm.test(\"Response code is 400 Bad Request\", function () {", - " pm.expect(pm.response.code).to.equal(400);", - "});", - "pm.test(\"Response has valid 'status' and 'data' properties\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData).to.have.property(\"status\", \"fail\");", - " pm.expect(jsonData).to.have.property(\"data\");", - "});", - "pm.test(\"Response does not contain a valid 'notification' object\", function () {", - " var jsonData = pm.response.json();", - " pm.expect(jsonData.data).to.not.have.property(\"notification\").to.be.an(\"object\");", - "});", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - }, - { - "key": "x-api-key", - "value": "{{x-api-key}}", - "type": "text" - } - ], - "body": { - "mode": "raw", - "raw": "{\n // Assuming providerId 100 does not have channelType 8\n \"providerId\": 100,\n \"data\": {\n \"indiaDltContentTemplateId\": \"1707160146562806652\",\n \"indiaDltPrincipalEntityId\":\"1601100000000005964\",\n \"to\": \"+918900100002,+918900100003\",\n \"text\": \"This is a test message from OsmoX.\\nThank you for using our service.\"\n }\n}" - }, - "url": { - "raw": "localhost:3000/notifications", - "host": [ - "localhost" - ], - "port": "3000", - "path": [ - "notifications" - ] - }, - "description": "Allows successfully creating new notification for the KAPS SMS channel type." - }, - "response": [] - }, - { - "name": "Send KAPS SMS Notification - Missing To Field", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Response is valid JSON\", function () {", - " pm.response.to.be.json;", - "});", - "pm.test(\"Response for Invalid Data (Missing 'to' Value)\", function () {", - " pm.expect(pm.response.code).to.equal(400);", - " pm.expect(pm.response.json().status).to.equal(\"fail\");", - " pm.expect(pm.response.json().data[0]).to.equal(\"to should not be empty\");", - "});" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - }, - { - "key": "x-api-key", - "value": "{{x-api-key}}", - "type": "text" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"providerId\": 8,\n \"data\": {\n \"indiaDltContentTemplateId\": \"1707160146562806652\",\n \"indiaDltPrincipalEntityId\":\"1601100000000005964\",\n \"text\": \"This is a test message from OsmoX.\\nThank you for using our service.\"\n }\n}" - }, - "url": { - "raw": "localhost:3000/notifications", - "host": [ - "localhost" - ], - "port": "3000", - "path": [ - "notifications" - ] - }, - "description": "Allows representing failure in creating new notification for the KAPS SMS channel type when missing the `to` field." - }, - "response": [] - }, - { - "name": "Send KAPS SMS Notification - Invalid API Key", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "pm.test(\"Response is valid JSON\", function () {", - " pm.response.to.be.json;", - "});", - "pm.test(\"Failed request with invalid x-api-key\", function () {", - " pm.expect(pm.response.code).to.equal(401);", - " pm.expect(pm.response.json().status).to.equal(\"fail\");", - " pm.expect(pm.response.json().data).to.equal(\"Invalid x-api-key\");", - "});", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - }, - { - "key": "x-api-key", - "value": "bad-api-key", - "type": "text" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"providerId\": 8,\n \"data\": {\n \"indiaDltContentTemplateId\": \"1707160146562806652\",\n \"indiaDltPrincipalEntityId\": \"1601100000000005964\",\n \"to\": \"+918900100002,+918900100003\",\n \"text\": \"This is a test message from OsmoX.\\nThank you for using our service.\"\n }\n}" - }, - "url": { - "raw": "localhost:3000/notifications", - "host": [ - "localhost" - ], - "port": "3000", - "path": [ - "notifications" - ] - }, - "description": "Allows representing failure in creating new notification for the KAPS SMS channel type when passing invalid API key." - }, - "response": [] - } - ], - "description": "Collection of requests pertaining to creating notifications for the KAPS SMS channel type." - }, { "name": "Push Notification", "item": [