diff --git a/SECURITY.md b/SECURITY.md
index b8340555d38..9b94c6ade88 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -1,14 +1,18 @@
# Security
-Contact: security@novu.co
+**Contact:** security@novu.co
-Based on [https://supabase.com/.well-known/security.txt](https://supabase.com/.well-known/security.txt)
+Safeguarding our Novu systems is a top concern for us. Nevertheless, despite our best efforts to fortify them, vulnerabilities may still be present.
-We place a high priority on the security of our systems at Novu. However, no matter how hard we try to make our systems secure, vulnerabilities can still exist.
+If you come across a vulnerability, please inform us promptly so we can promptly resolve it. We kindly request your assistance in enhancing the security of both our clients and our systems.
-In the event that you discover a vulnerability, please let us know so we can address it as soon as possible. We would like to ask you to help us better protect our clients and our systems.
+## Reporting a Vulnerability
-## Out of scope vulnerabilities:
+**In Scope Vulnerabilities:**
+
+- Any security issues that might put at risk the confidentiality, integrity, or accessibility of our systems or data.
+
+**Out of Scope Vulnerabilities:**
- Clickjacking on pages with no sensitive actions.
@@ -18,41 +22,42 @@ In the event that you discover a vulnerability, please let us know so we can add
- Any activity that could lead to the disruption of our service (DoS).
-- Content spoofing and text injection issues without showing an attack vector/without being able to modify HTML/CSS.
+- Content spoofing and text injection issues without showing an attack vector or the ability to modify HTML/CSS.
-- Email spoofing
+- Email spoofing.
-- Missing DNSSEC, CAA, CSP headers
+- Missing DNSSEC, CAA, CSP headers.
-- Lack of Secure or HTTP only flag on non-sensitive cookies
+- Lack of Secure or HTTP-only flags on non-sensitive cookies.
-- Deadlinks
+- Deadlinks.
-## Please do the following:
+**Reporting Instructions:**
-- E-mail your findings to [security@novu.co](mailto:security@novu.co).
+1. Email your findings to **security@novu.co**.
-- Do not run automated scanners on our infrastructure or dashboard. If you wish to do this, contact us and we will set up a sandbox for you.
+2. Automated scanning tools should not be used on our infrastructure or dashboard. If you have a need for this, please reach out to us, and we'll assist you in setting up a secure sandbox environment.
-- Do not take advantage of the vulnerability or problem you have discovered, for example by downloading more data than necessary to demonstrate the vulnerability or deleting or modifying other people's data,
+3. Please do not exploit the vulnerability or issue you've found, such as downloading excessive data or tampering with others' data.
-- Do not reveal the problem to others until it has been resolved,
+4. Please keep the issue confidential until we've fixed it.
-- Do not use attacks on physical security, social engineering, distributed denial of service, spam or applications of third parties,
+5. Do not use attacks on physical security, social engineering, distributed denial of service, spam, or third-party applications.
-- Do provide sufficient information to reproduce the problem, so we will be able to resolve it as quickly as possible. Usually, the IP address or the URL of the affected system and a description of the vulnerability will be sufficient, but complex vulnerabilities may require further explanation.
+6. Please share enough details for us to understand and fix the issue as fast as we can. Typically, providing the IP address or the URL of the affected system along with a description of the problem should be enough, though more intricate issues might need additional clarification.
-## What we promise:
+## What *We* Promise
-- We will respond to your report within 3 business days with our evaluation of the report and an expected resolution date,
+1. We'll get back to you within 3 business days with our assessment of the report and an estimated date when we expect to resolve it.
-- If you have followed the instructions above, we will not take any legal action against you in regard to the report,
+2. We will not take any legal action against you related to the report, if you have adhered to the reporting instructions above.
-- We will handle your report with strict confidentiality, and not pass on your personal details to third parties without your permission,
+3. We'll treat your report with utmost confidentiality and won't share your personal information with third parties without your consent.
-- We will keep you informed of the progress towards resolving the problem,
+4. We'll be keeping you updated of the progress toward fixing the issue.
-- In the public information concerning the problem reported, we will give your name as the discoverer of the problem (unless you desire otherwise), and
+5. We'll credit you as the discoverer of the issue (unless you request otherwise), in public disclosures of the reported issue.
-- We strive to resolve all problems as quickly as possible, and we would like to play an active role in the ultimate publication on the problem after it is resolved.
+6. We aim to resolve all issues promptly and are eager to actively contribute to the ultimate publication on the problem, once the problem has been resolved.
+We truly value your contributions in strengthening our security.
diff --git a/apps/api/e2e/idempotency.e2e.ts b/apps/api/e2e/idempotency.e2e.ts
new file mode 100644
index 00000000000..ced5688bcec
--- /dev/null
+++ b/apps/api/e2e/idempotency.e2e.ts
@@ -0,0 +1,307 @@
+import { UserSession } from '@novu/testing';
+import { CacheService } from '@novu/application-generic';
+import { expect } from 'chai';
+describe('Idempotency Test', async () => {
+ let session: UserSession;
+ const path = '/v1/testing/idempotency';
+ const HEADER_KEYS = {
+ IDEMPOTENCY_KEY: 'idempotency-key',
+ RETRY_AFTER: 'retry-after',
+ IDEMPOTENCY_REPLAY: 'idempotency-replay',
+ LINK: 'link',
+ };
+ const DOCS_LINK = 'docs.novu.co/idempotency';
+
+ let cacheService: CacheService | null = null;
+
+ describe('when enabled', () => {
+ before(async () => {
+ session = new UserSession();
+ await session.initialize();
+ cacheService = session.testServer?.getService(CacheService);
+ process.env.IS_API_IDEMPOTENCY_ENABLED = 'true';
+ });
+
+ it('should return cached same response for duplicate requests', async () => {
+ const key = `1`;
+ const { body, headers } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+ const { body: bodyDupe, headers: headerDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(body.data.number).to.equal(bodyDupe.data.number);
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_REPLAY]).to.eq('true');
+ });
+ it('should return cached and use correct cache key when apiKey is used', async () => {
+ const key = `2`;
+ const { body, headers } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+ const cacheKey = `test-${session.organization._id}-${key}`;
+ session.testServer?.getHttpServer();
+ // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
+ const cacheVal = JSON.stringify(JSON.parse(await cacheService?.get(cacheKey)!).data);
+ expect(JSON.stringify(body)).to.eq(cacheVal);
+ const { body: bodyDupe, headers: headerDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(body.data.number).to.equal(bodyDupe.data.number);
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_REPLAY]).to.eq('true');
+ });
+ it('should return cached and use correct cache key when authToken and apiKey combination is used', async () => {
+ const key = `3`;
+ const { body, headers } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', session.token)
+ .send({ data: 201 })
+ .expect(201);
+ const cacheKey = `test-${session.organization._id}-${key}`;
+ session.testServer?.getHttpServer();
+ // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
+ const cacheVal = JSON.stringify(JSON.parse(await cacheService?.get(cacheKey)!).data);
+ expect(JSON.stringify(body)).to.eq(cacheVal);
+ const { body: bodyDupe, headers: headerDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(body.data.number).to.equal(bodyDupe.data.number);
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_REPLAY]).to.eq('true');
+ });
+ it('should return conflict when concurrent requests are made', async () => {
+ const key = `4`;
+ const [{ headers, body, status }, { headers: headerDupe, body: bodyDupe, status: statusDupe }] =
+ await Promise.all([
+ session.testAgent.post(path).set(HEADER_KEYS.IDEMPOTENCY_KEY, key).send({ data: 250 }),
+ session.testAgent.post(path).set(HEADER_KEYS.IDEMPOTENCY_KEY, key).send({ data: 250 }),
+ ]);
+ const oneSuccess = status === 201 || statusDupe === 201;
+ const oneConflict = status === 409 || statusDupe === 409;
+ const conflictBody = status === 201 ? bodyDupe : body;
+ const retryHeader = headers[HEADER_KEYS.RETRY_AFTER] || headerDupe[HEADER_KEYS.RETRY_AFTER];
+ expect(oneSuccess).to.be.true;
+ expect(oneConflict).to.be.true;
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.LINK]).to.eq(DOCS_LINK);
+ expect(retryHeader).to.eq(`1`);
+ expect(JSON.stringify(conflictBody)).to.eq(
+ JSON.stringify({
+ message: `Request with key "${key}" is currently being processed. Please retry after 1 second`,
+ error: 'Conflict',
+ statusCode: 409,
+ })
+ );
+ });
+ it('should return conflict when different body is sent for same key', async () => {
+ const key = '5';
+ const { headers, body, status } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 250 });
+ const {
+ headers: headerDupe,
+ body: bodyDupe,
+ status: statusDupe,
+ } = await session.testAgent.post(path).set(HEADER_KEYS.IDEMPOTENCY_KEY, key).send({ data: 251 });
+
+ const oneSuccess = status === 201 || statusDupe === 201;
+ const oneConflict = status === 422 || statusDupe === 422;
+ const conflictBody = status === 201 ? bodyDupe : body;
+ expect(oneSuccess).to.be.true;
+ expect(oneConflict).to.be.true;
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.LINK]).to.eq(DOCS_LINK);
+ expect(JSON.stringify(conflictBody)).to.eq(
+ JSON.stringify({
+ message: `Request with key "${key}" is being reused for a different body`,
+ error: 'Unprocessable Entity',
+ statusCode: 422,
+ })
+ );
+ });
+ it('should return non cached response for unique requests', async () => {
+ const key = '6';
+ const key1 = '7';
+ const { body, headers } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+
+ const { body: bodyDupe, headers: headerDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key1)
+ .send({ data: 201 })
+ .expect(201);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(typeof bodyDupe.data.number === 'number').to.be.true;
+ expect(body.data.number).not.to.equal(bodyDupe.data.number);
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key1);
+ });
+ it('should return non cached response for GET requests', async () => {
+ const key = '8';
+ const { body, headers } = await session.testAgent
+ .get(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({})
+ .expect(200);
+
+ const { body: bodyDupe } = await session.testAgent
+ .get(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({})
+ .expect(200);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(typeof bodyDupe.data.number === 'number').to.be.true;
+ expect(body.data.number).not.to.equal(bodyDupe.data.number);
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(undefined);
+ });
+ it('should return cached error response for duplicate requests', async () => {
+ const key = '9';
+ const { body, headers } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 422 })
+ .expect(422);
+
+ const { body: bodyDupe, headers: headerDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 422 })
+ .expect(422);
+ expect(JSON.stringify(body)).to.equal(JSON.stringify(bodyDupe));
+
+ expect(headers[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ expect(headerDupe[HEADER_KEYS.IDEMPOTENCY_KEY]).to.eq(key);
+ });
+ it('should return 400 when key bigger than allowed limit', async () => {
+ const key = Array.from({ length: 256 })
+ .fill(0)
+ .map((i) => i)
+ .join('');
+ const { body } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 250 })
+ .expect(400);
+ expect(JSON.stringify(body)).to.eq(
+ JSON.stringify({
+ message: `idempotencyKey "${key}" has exceeded the maximum allowed length of 255 characters`,
+ error: 'Bad Request',
+ statusCode: 400,
+ })
+ );
+ });
+ });
+
+ describe('when disabled', () => {
+ before(async () => {
+ session = new UserSession();
+ await session.initialize();
+ process.env.IS_API_IDEMPOTENCY_ENABLED = 'false';
+ });
+
+ it('should not return cached same response for duplicate requests', async () => {
+ const key = '10';
+ const { body } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+
+ const { body: bodyDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(body.data.number).not.to.equal(bodyDupe.data.number);
+ });
+ it('should return non cached response for unique requests', async () => {
+ const key = '11';
+ const key1 = '12';
+ const { body } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: 201 })
+ .expect(201);
+
+ const { body: bodyDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key1)
+ .send({ data: 201 })
+ .expect(201);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(typeof bodyDupe.data.number === 'number').to.be.true;
+ expect(body.data.number).not.to.equal(bodyDupe.data.number);
+ });
+ it('should return non cached response for GET requests', async () => {
+ const key = '13';
+ const { body } = await session.testAgent.get(path).set(HEADER_KEYS.IDEMPOTENCY_KEY, key).send({}).expect(200);
+
+ const { body: bodyDupe } = await session.testAgent
+ .get(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({})
+ .expect(200);
+ expect(typeof body.data.number === 'number').to.be.true;
+ expect(typeof bodyDupe.data.number === 'number').to.be.true;
+ expect(body.data.number).not.to.equal(bodyDupe.data.number);
+ });
+ it('should not return cached error response for duplicate requests', async () => {
+ const key = '14';
+ const { body } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: '500' })
+ .expect(500);
+
+ const { body: bodyDupe } = await session.testAgent
+ .post(path)
+ .set(HEADER_KEYS.IDEMPOTENCY_KEY, key)
+ .set('authorization', `ApiKey ${session.apiKey}`)
+ .send({ data: '500' })
+ .expect(500);
+ expect(JSON.stringify(body)).not.to.equal(JSON.stringify(bodyDupe));
+ });
+ });
+});
diff --git a/apps/api/package.json b/apps/api/package.json
index 312579eb9b9..b1caa9f7f7d 100644
--- a/apps/api/package.json
+++ b/apps/api/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/api",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "description",
"author": "",
"private": "true",
@@ -38,12 +38,12 @@
"@nestjs/platform-express": "^10.2.2",
"@nestjs/swagger": "^7.1.8",
"@nestjs/terminus": "^10.0.1",
- "@novu/application-generic": "^0.20.0",
- "@novu/dal": "^0.20.0",
- "@novu/node": "^0.20.0",
- "@novu/shared": "^0.20.0",
- "@novu/stateless": "^0.20.0",
- "@novu/testing": "^0.20.0",
+ "@novu/application-generic": "^0.21.0",
+ "@novu/dal": "^0.21.0",
+ "@novu/node": "^0.21.0",
+ "@novu/shared": "^0.21.0",
+ "@novu/stateless": "^0.21.0",
+ "@novu/testing": "^0.21.0",
"@sendgrid/mail": "^7.6.0",
"@sentry/hub": "^7.40.0",
"@sentry/node": "^7.40.0",
diff --git a/apps/api/src/.env.development b/apps/api/src/.env.development
index 8af859ce673..410ba4c291a 100644
--- a/apps/api/src/.env.development
+++ b/apps/api/src/.env.development
@@ -64,3 +64,5 @@ NOVU_SMS_INTEGRATION_SENDER=
INTERCOM_IDENTITY_VERIFICATION_SECRET_KEY=
LAUNCH_DARKLY_SDK_KEY=
+
+IS_API_IDEMPOTENCY_ENABLED=false
diff --git a/apps/api/src/.env.production b/apps/api/src/.env.production
index 988ff2d4d9a..cb1a23d72a7 100644
--- a/apps/api/src/.env.production
+++ b/apps/api/src/.env.production
@@ -53,3 +53,5 @@ NOVU_SMS_INTEGRATION_SENDER=
INTERCOM_IDENTITY_VERIFICATION_SECRET_KEY=
LAUNCH_DARKLY_SDK_KEY=
+
+IS_API_IDEMPOTENCY_ENABLED=false
diff --git a/apps/api/src/.env.test b/apps/api/src/.env.test
index f8cc72206e5..070251b2084 100644
--- a/apps/api/src/.env.test
+++ b/apps/api/src/.env.test
@@ -89,3 +89,5 @@ MAX_NOVU_INTEGRATION_SMS_REQUESTS=20
NOVU_SMS_INTEGRATION_ACCOUNT_SID=test
NOVU_SMS_INTEGRATION_TOKEN=test
NOVU_SMS_INTEGRATION_SENDER=1234567890
+
+IS_API_IDEMPOTENCY_ENABLED=true
diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts
index 00418026038..05373ac753e 100644
--- a/apps/api/src/app.module.ts
+++ b/apps/api/src/app.module.ts
@@ -31,6 +31,7 @@ import { TopicsModule } from './app/topics/topics.module';
import { InboundParseModule } from './app/inbound-parse/inbound-parse.module';
import { BlueprintModule } from './app/blueprint/blueprint.module';
import { TenantModule } from './app/tenant/tenant.module';
+import { IdempotencyInterceptor } from './app/shared/framework/idempotency.interceptor';
const enterpriseImports = (): Array
| ForwardReference> => {
const modules: Array | ForwardReference> = [];
@@ -78,7 +79,12 @@ const enterpriseModules = enterpriseImports();
const modules = baseModules.concat(enterpriseModules);
-const providers: Provider[] = [];
+const providers: Provider[] = [
+ {
+ provide: APP_INTERCEPTOR,
+ useClass: IdempotencyInterceptor,
+ },
+];
if (process.env.SENTRY_DSN) {
modules.push(RavenModule);
diff --git a/apps/api/src/app/blueprint/e2e/get-grouped-blueprints.e2e.ts b/apps/api/src/app/blueprint/e2e/get-grouped-blueprints.e2e.ts
index cf619d79b55..67e4a5893f3 100644
--- a/apps/api/src/app/blueprint/e2e/get-grouped-blueprints.e2e.ts
+++ b/apps/api/src/app/blueprint/e2e/get-grouped-blueprints.e2e.ts
@@ -3,7 +3,14 @@ import * as sinon from 'sinon';
import { UserSession } from '@novu/testing';
import { NotificationTemplateRepository, EnvironmentRepository } from '@novu/dal';
-import { EmailBlockTypeEnum, FilterPartTypeEnum, INotificationTemplate, StepTypeEnum } from '@novu/shared';
+import {
+ EmailBlockTypeEnum,
+ FieldLogicalOperatorEnum,
+ FieldOperatorEnum,
+ FilterPartTypeEnum,
+ INotificationTemplate,
+ StepTypeEnum,
+} from '@novu/shared';
import {
buildGroupedBlueprintsKey,
CacheService,
@@ -177,13 +184,13 @@ export async function createTemplateFromBlueprint({
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
diff --git a/apps/api/src/app/change/e2e/get-changes.e2e.ts b/apps/api/src/app/change/e2e/get-changes.e2e.ts
index 5ac9ea173fa..7406192ba12 100644
--- a/apps/api/src/app/change/e2e/get-changes.e2e.ts
+++ b/apps/api/src/app/change/e2e/get-changes.e2e.ts
@@ -1,6 +1,12 @@
import { expect } from 'chai';
import { ChangeRepository } from '@novu/dal';
-import { EmailBlockTypeEnum, StepTypeEnum, FilterPartTypeEnum } from '@novu/shared';
+import {
+ EmailBlockTypeEnum,
+ StepTypeEnum,
+ FilterPartTypeEnum,
+ FieldLogicalOperatorEnum,
+ FieldOperatorEnum,
+} from '@novu/shared';
import { UserSession } from '@novu/testing';
import { CreateWorkflowRequestDto, UpdateWorkflowRequestDto } from '../../workflows/dto';
@@ -32,13 +38,13 @@ describe('Get changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
diff --git a/apps/api/src/app/change/e2e/promote-changes.e2e.ts b/apps/api/src/app/change/e2e/promote-changes.e2e.ts
index 05ac9b983ca..0c7f5b029b8 100644
--- a/apps/api/src/app/change/e2e/promote-changes.e2e.ts
+++ b/apps/api/src/app/change/e2e/promote-changes.e2e.ts
@@ -13,6 +13,8 @@ import {
ChangeEntityTypeEnum,
ChannelCTATypeEnum,
EmailBlockTypeEnum,
+ FieldLogicalOperatorEnum,
+ FieldOperatorEnum,
StepTypeEnum,
FilterPartTypeEnum,
TemplateVariableTypeEnum,
@@ -69,13 +71,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -96,7 +98,7 @@ describe('Promote changes', () => {
_parentId: notificationTemplateId,
});
- expect(prodVersion._notificationGroupId).to.eq(prodGroup._id);
+ expect(prodVersion?._notificationGroupId).to.eq(prodGroup._id);
});
it('should promote step variables default values', async () => {
@@ -204,13 +206,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -242,7 +244,7 @@ describe('Promote changes', () => {
_parentId: notificationTemplateId,
} as any);
- expect(prodVersion.steps.length).to.eq(0);
+ expect(prodVersion?.steps.length).to.eq(0);
});
it('update active flag on notification template', async () => {
@@ -274,7 +276,7 @@ describe('Promote changes', () => {
_parentId: notificationTemplateId,
});
- expect(prodVersion.active).to.eq(true);
+ expect(prodVersion?.active).to.eq(true);
});
it('update existing message', async () => {
@@ -295,13 +297,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -352,7 +354,7 @@ describe('Promote changes', () => {
_parentId: step._templateId,
});
- expect(prodVersion.name).to.eq('test');
+ expect(prodVersion?.name).to.eq('test');
});
it('add one more message', async () => {
@@ -373,13 +375,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -431,13 +433,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'secondName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -479,13 +481,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -521,13 +523,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -632,13 +634,13 @@ describe('Promote changes', () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -659,7 +661,7 @@ describe('Promote changes', () => {
_parentId: notificationTemplateId,
});
- expect(prodVersion.isBlueprint).to.equal(true);
+ expect(prodVersion?.isBlueprint).to.equal(true);
});
it('should merge creation, and status changes to one change', async () => {
@@ -724,9 +726,15 @@ describe('Promote changes', () => {
});
});
- async function getProductionEnvironment() {
- return await environmentRepository.findOne({
+ async function getProductionEnvironment(): Promise {
+ const production = await environmentRepository.findOne({
_parentId: session.environment._id,
});
+
+ if (!production) {
+ throw new Error('No production environment');
+ }
+
+ return production;
}
});
diff --git a/apps/api/src/app/events/e2e/send-message-push.e2e.ts b/apps/api/src/app/events/e2e/send-message-push.e2e.ts
index e9cafbbea4b..18e5b0869b7 100644
--- a/apps/api/src/app/events/e2e/send-message-push.e2e.ts
+++ b/apps/api/src/app/events/e2e/send-message-push.e2e.ts
@@ -12,6 +12,8 @@ import { UserSession } from '@novu/testing';
const axiosInstance = axios.create();
+const ORIGINAL_IS_MULTI_PROVIDER_CONFIGURATION_ENABLED = process.env.IS_MULTI_PROVIDER_CONFIGURATION_ENABLED;
+
describe('Trigger event - Send Push Notification - /v1/events/trigger (POST)', () => {
let session: UserSession;
let template: NotificationTemplateEntity;
@@ -39,7 +41,7 @@ describe('Trigger event - Send Push Notification - /v1/events/trigger (POST)', (
});
after(() => {
- process.env.IS_MULTI_PROVIDER_CONFIGURATION_ENABLED = 'false';
+ process.env.IS_MULTI_PROVIDER_CONFIGURATION_ENABLED = ORIGINAL_IS_MULTI_PROVIDER_CONFIGURATION_ENABLED;
});
describe('Multiple providers active', () => {
diff --git a/apps/api/src/app/events/e2e/trigger-event.e2e.ts b/apps/api/src/app/events/e2e/trigger-event.e2e.ts
index 8d1eb8a7d2b..66474841a14 100644
--- a/apps/api/src/app/events/e2e/trigger-event.e2e.ts
+++ b/apps/api/src/app/events/e2e/trigger-event.e2e.ts
@@ -19,13 +19,15 @@ import { UserSession, SubscribersService } from '@novu/testing';
import {
ChannelTypeEnum,
EmailBlockTypeEnum,
+ FieldLogicalOperatorEnum,
+ FieldOperatorEnum,
+ FilterPartTypeEnum,
StepTypeEnum,
IEmailBlock,
ISubscribersDefine,
TemplateVariableTypeEnum,
EmailProviderIdEnum,
SmsProviderIdEnum,
- FilterPartTypeEnum,
DigestUnitEnum,
DelayTypeEnum,
PreviousStepTypeEnum,
@@ -60,6 +62,7 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
describe(`Trigger Event - ${eventTriggerPath} (POST)`, function () {
beforeEach(async () => {
+ process.env.LAUNCH_DARKLY_SDK_KEY = '';
session = new UserSession();
await session.initialize();
template = await session.createTemplate();
@@ -90,11 +93,11 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.PAYLOAD,
- operator: 'IS_DEFINED',
+ operator: FieldOperatorEnum.IS_DEFINED,
field: 'exclude',
value: '',
},
@@ -170,11 +173,11 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.PAYLOAD,
- operator: 'IS_DEFINED',
+ operator: FieldOperatorEnum.IS_DEFINED,
field: 'exclude',
value: '',
},
@@ -250,11 +253,11 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.PAYLOAD,
- operator: 'IS_DEFINED',
+ operator: FieldOperatorEnum.IS_DEFINED,
field: 'exclude',
value: '',
},
@@ -331,11 +334,11 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.PAYLOAD,
- operator: 'IS_DEFINED',
+ operator: FieldOperatorEnum.IS_DEFINED,
field: 'exclude',
value: '',
},
@@ -397,7 +400,7 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
_environmentId: session.environment._id,
conditions: [
{
- children: [{ field: 'identifier', value: 'test', operator: 'EQUAL', on: 'tenant' }],
+ children: [{ field: 'identifier', value: 'test', operator: FieldOperatorEnum.EQUAL, on: 'tenant' }],
},
],
active: true,
@@ -436,10 +439,10 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
_environmentId: session.environment._id,
conditions: [
{
- value: 'OR',
+ value: FieldLogicalOperatorEnum.OR,
children: [
- { field: 'identifier', value: 'test3', operator: 'EQUAL', on: 'tenant' },
- { field: 'identifier', value: 'test2', operator: 'EQUAL', on: 'tenant' },
+ { field: 'identifier', value: 'test3', operator: FieldOperatorEnum.EQUAL, on: 'tenant' },
+ { field: 'identifier', value: 'test2', operator: FieldOperatorEnum.EQUAL, on: 'tenant' },
],
},
],
@@ -496,7 +499,7 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
_environmentId: session.environment._id,
conditions: [
{
- children: [{ field: 'identifier', value: 'test1', operator: 'EQUAL', on: 'tenant' }],
+ children: [{ field: 'identifier', value: 'test1', operator: FieldOperatorEnum.EQUAL, on: 'tenant' }],
},
],
active: true,
@@ -1701,13 +1704,13 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
field: 'run',
value: 'true',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
on: FilterPartTypeEnum.PAYLOAD,
},
],
@@ -1734,13 +1737,13 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
field: 'subscriberId',
value: subscriber.subscriberId,
- operator: 'NOT_EQUAL',
+ operator: FieldOperatorEnum.NOT_EQUAL,
on: FilterPartTypeEnum.SUBSCRIBER,
},
],
@@ -1799,12 +1802,12 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
field: 'isOnline',
value: 'true',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
on: FilterPartTypeEnum.WEBHOOK,
webhookUrl: 'www.user.com/webhook',
},
@@ -1901,12 +1904,12 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
field: 'isOnline',
value: 'true',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
on: FilterPartTypeEnum.WEBHOOK,
webhookUrl: 'www.user.com/webhook',
},
@@ -1966,12 +1969,12 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
field: 'isOnline',
value: 'true',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
on: FilterPartTypeEnum.WEBHOOK,
webhookUrl: 'www.user.com/webhook',
},
@@ -2228,7 +2231,7 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.PREVIOUS_STEP,
@@ -2320,7 +2323,7 @@ describe(`Trigger event - ${eventTriggerPath} (POST)`, function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.PREVIOUS_STEP,
diff --git a/apps/api/src/app/integrations/dtos/credentials.dto.ts b/apps/api/src/app/integrations/dtos/credentials.dto.ts
index 5701d25fbc2..eaed4cdc65f 100644
--- a/apps/api/src/app/integrations/dtos/credentials.dto.ts
+++ b/apps/api/src/app/integrations/dtos/credentials.dto.ts
@@ -136,4 +136,34 @@ export class CredentialsDto implements ICredentials {
@IsString()
@IsOptional()
ipPoolName?: string;
+
+ @ApiPropertyOptional()
+ @IsString()
+ @IsOptional()
+ apiKeyRequestHeader?: string;
+
+ @ApiPropertyOptional()
+ @IsString()
+ @IsOptional()
+ secretKeyRequestHeader?: string;
+
+ @ApiPropertyOptional()
+ @IsString()
+ @IsOptional()
+ idPath?: string;
+
+ @ApiPropertyOptional()
+ @IsString()
+ @IsOptional()
+ datePath?: string;
+
+ @ApiPropertyOptional()
+ @IsBoolean()
+ @IsOptional()
+ authenticateByToken?: boolean;
+
+ @ApiPropertyOptional()
+ @IsString()
+ @IsOptional()
+ authenticationTokenKey?: string;
}
diff --git a/apps/api/src/app/integrations/e2e/create-integration.e2e.ts b/apps/api/src/app/integrations/e2e/create-integration.e2e.ts
index 8d99417548d..6fb6813fffa 100644
--- a/apps/api/src/app/integrations/e2e/create-integration.e2e.ts
+++ b/apps/api/src/app/integrations/e2e/create-integration.e2e.ts
@@ -4,6 +4,7 @@ import {
ChannelTypeEnum,
ChatProviderIdEnum,
EmailProviderIdEnum,
+ FieldOperatorEnum,
InAppProviderIdEnum,
PushProviderIdEnum,
SmsProviderIdEnum,
@@ -106,7 +107,7 @@ describe('Create Integration - /integration (POST)', function () {
check: false,
conditions: [
{
- children: [{ field: 'identifier', value: 'test', operator: 'EQUAL', on: 'tenant' }],
+ children: [{ field: 'identifier', value: 'test', operator: FieldOperatorEnum.EQUAL, on: 'tenant' }],
},
],
};
diff --git a/apps/api/src/app/shared/framework/idempotency.interceptor.ts b/apps/api/src/app/shared/framework/idempotency.interceptor.ts
new file mode 100644
index 00000000000..566824c0cd0
--- /dev/null
+++ b/apps/api/src/app/shared/framework/idempotency.interceptor.ts
@@ -0,0 +1,247 @@
+import {
+ Injectable,
+ NestInterceptor,
+ ExecutionContext,
+ CallHandler,
+ Logger,
+ HttpException,
+ InternalServerErrorException,
+ ServiceUnavailableException,
+ UnprocessableEntityException,
+ BadRequestException,
+ ConflictException,
+} from '@nestjs/common';
+import { CacheService } from '@novu/application-generic';
+import { Observable, of, throwError } from 'rxjs';
+import { catchError, map } from 'rxjs/operators';
+import { createHash } from 'crypto';
+import * as jwt from 'jsonwebtoken';
+import { IJwtPayload } from '@novu/shared';
+
+const LOG_CONTEXT = 'IdempotencyInterceptor';
+const IDEMPOTENCY_CACHE_TTL = 60 * 60 * 24; //24h
+const IDEMPOTENCY_PROGRESS_TTL = 60 * 5; //5min
+
+const HEADER_KEYS = {
+ IDEMPOTENCY_KEY: 'Idempotency-Key',
+ RETRY_AFTER: 'Retry-After',
+ IDEMPOTENCY_REPLAY: 'Idempotency-Replay',
+ LINK: 'Link',
+};
+
+const DOCS_LINK = 'docs.novu.co/idempotency';
+
+enum ReqStatusEnum {
+ PROGRESS = 'in-progress',
+ SUCCESS = 'success',
+ ERROR = 'error',
+}
+
+@Injectable()
+export class IdempotencyInterceptor implements NestInterceptor {
+ constructor(private readonly cacheService: CacheService) {}
+
+ async intercept(context: ExecutionContext, next: CallHandler): Promise> {
+ const request = context.switchToHttp().getRequest();
+ const idempotencyKey = this.getIdempotencyKey(context);
+ const isEnabled = process.env.IS_API_IDEMPOTENCY_ENABLED == 'true';
+ if (!isEnabled || !idempotencyKey || !['post', 'patch'].includes(request.method.toLowerCase())) {
+ return next.handle();
+ }
+ if (idempotencyKey?.length > 255) {
+ return throwError(
+ () =>
+ new BadRequestException(
+ `idempotencyKey "${idempotencyKey}" has exceeded the maximum allowed length of 255 characters`
+ )
+ );
+ }
+ const cacheKey = this.getCacheKey(context);
+
+ try {
+ const bodyHash = this.hashRequestBody(request.body);
+ //if 1st time we are seeing the request, marks the request as in-progress if not, does nothing
+ const isNewReq = await this.setCache(
+ cacheKey,
+ { status: ReqStatusEnum.PROGRESS, bodyHash },
+ IDEMPOTENCY_PROGRESS_TTL,
+ true
+ );
+ // Check if the idempotency key is in the cache
+ if (isNewReq) {
+ return await this.handleNewRequest(context, next, bodyHash);
+ } else {
+ return await this.handlerDuplicateRequest(context, bodyHash);
+ }
+ } catch (err) {
+ Logger.warn(
+ `An error occurred while making idempotency check, key:${idempotencyKey}. error: ${err.message}`,
+ LOG_CONTEXT
+ );
+ if (err instanceof HttpException) {
+ return throwError(() => err);
+ }
+ }
+
+ //something unexpected happened, both cached response and handler did not execute as expected
+ return throwError(() => new ServiceUnavailableException());
+ }
+
+ private getIdempotencyKey(context: ExecutionContext): string | undefined {
+ const request = context.switchToHttp().getRequest();
+
+ return request.headers[HEADER_KEYS.IDEMPOTENCY_KEY.toLocaleLowerCase()];
+ }
+
+ private getReqUser(context: ExecutionContext): IJwtPayload | null {
+ const req = context.switchToHttp().getRequest();
+ if (req?.user?.organizationId) {
+ return req.user;
+ }
+ if (req.headers?.authorization?.length) {
+ const token = req.headers.authorization.split(' ')[1];
+ if (token) {
+ return jwt.decode(token);
+ }
+ }
+
+ return null;
+ }
+
+ private getCacheKey(context: ExecutionContext): string {
+ const { organizationId } = this.getReqUser(context) || {};
+ const env = process.env.NODE_ENV;
+
+ return `${env}-${organizationId}-${this.getIdempotencyKey(context)}`;
+ }
+
+ async setCache(
+ key: string,
+ val: { status: ReqStatusEnum; bodyHash: string; data?: any; statusCode?: number },
+ ttl: number,
+ ifNotExists?: boolean
+ ): Promise {
+ try {
+ if (ifNotExists) {
+ return await this.cacheService.setIfNotExist(key, JSON.stringify(val), { ttl });
+ }
+ await this.cacheService.set(key, JSON.stringify(val), { ttl });
+ } catch (err) {
+ Logger.warn(`An error occurred while setting idempotency cache, key:${key} error: ${err.message}`, LOG_CONTEXT);
+ }
+
+ return null;
+ }
+
+ private buildError(error: any): HttpException {
+ const statusCode = error.status || error.response?.statusCode || 500;
+ if (statusCode == 500 && !error.response) {
+ //some unhandled exception occurred
+ return new InternalServerErrorException();
+ }
+
+ return new HttpException(error.response || error.message, statusCode, error.response?.options);
+ }
+
+ private setHeaders(response: any, headers: Record) {
+ Object.keys(headers).map((key) => {
+ if (headers[key]) {
+ response.set(key, headers[key]);
+ }
+ });
+ }
+
+ private hashRequestBody(body: object): string {
+ const hash = createHash('blake2s256');
+ hash.update(Buffer.from(JSON.stringify(body)));
+
+ return hash.digest('hex');
+ }
+
+ private async handlerDuplicateRequest(context: ExecutionContext, bodyHash: string): Promise> {
+ const cacheKey = this.getCacheKey(context);
+ const idempotencyKey = this.getIdempotencyKey(context)!;
+ const data = await this.cacheService.get(cacheKey);
+ this.setHeaders(context.switchToHttp().getResponse(), { [HEADER_KEYS.IDEMPOTENCY_KEY]: idempotencyKey });
+ const parsed = JSON.parse(data);
+ if (parsed.status === ReqStatusEnum.PROGRESS) {
+ // api call is in progress, so client need to handle this case
+ Logger.error(`previous api call in progress rejecting the request. key:${idempotencyKey}`, LOG_CONTEXT);
+ this.setHeaders(context.switchToHttp().getResponse(), {
+ [HEADER_KEYS.RETRY_AFTER]: `1`,
+ [HEADER_KEYS.LINK]: DOCS_LINK,
+ });
+
+ throw new ConflictException(
+ `Request with key "${idempotencyKey}" is currently being processed. Please retry after 1 second`
+ );
+ }
+ if (bodyHash !== parsed.bodyHash) {
+ //different body sent than before
+ Logger.error(`idempotency key is being reused for different bodies. key:${idempotencyKey}`, LOG_CONTEXT);
+ this.setHeaders(context.switchToHttp().getResponse(), {
+ [HEADER_KEYS.LINK]: DOCS_LINK,
+ });
+
+ throw new UnprocessableEntityException(
+ `Request with key "${idempotencyKey}" is being reused for a different body`
+ );
+ }
+ this.setHeaders(context.switchToHttp().getResponse(), { [HEADER_KEYS.IDEMPOTENCY_REPLAY]: 'true' });
+
+ //already seen the request return cached response
+ if (parsed.status === ReqStatusEnum.ERROR) {
+ Logger.error(`returning cached error response. key:${idempotencyKey}`, LOG_CONTEXT);
+
+ throw this.buildError(parsed.data);
+ }
+
+ return of(parsed.data);
+ }
+
+ private async handleNewRequest(
+ context: ExecutionContext,
+ next: CallHandler,
+ bodyHash: string
+ ): Promise> {
+ const cacheKey = this.getCacheKey(context);
+ const idempotencyKey = this.getIdempotencyKey(context)!;
+
+ return next.handle().pipe(
+ map(async (response) => {
+ const httpResponse = context.switchToHttp().getResponse();
+ const statusCode = httpResponse.statusCode;
+
+ // Cache the success response and return it
+ await this.setCache(
+ cacheKey,
+ { status: ReqStatusEnum.SUCCESS, bodyHash, statusCode: statusCode, data: response },
+ IDEMPOTENCY_CACHE_TTL
+ );
+ Logger.verbose(`cached the success response for idempotency key:${idempotencyKey}`, LOG_CONTEXT);
+ this.setHeaders(httpResponse, { [HEADER_KEYS.IDEMPOTENCY_KEY]: idempotencyKey });
+
+ return response;
+ }),
+ catchError((err) => {
+ const httpException = this.buildError(err);
+ // Cache the error response and return it
+ const error = err instanceof HttpException ? err : httpException;
+ this.setCache(
+ cacheKey,
+ {
+ status: ReqStatusEnum.ERROR,
+ statusCode: httpException.getStatus(),
+ bodyHash,
+ data: error,
+ },
+ IDEMPOTENCY_CACHE_TTL
+ ).catch(() => {});
+ Logger.verbose(`cached the error response for idempotency key:${idempotencyKey}`, LOG_CONTEXT);
+ this.setHeaders(context.switchToHttp().getResponse(), { [HEADER_KEYS.IDEMPOTENCY_KEY]: idempotencyKey });
+
+ throw err;
+ })
+ );
+ }
+}
diff --git a/apps/api/src/app/shared/helpers/content.service.spec.ts b/apps/api/src/app/shared/helpers/content.service.spec.ts
index 70f80455447..32984c527b1 100644
--- a/apps/api/src/app/shared/helpers/content.service.spec.ts
+++ b/apps/api/src/app/shared/helpers/content.service.spec.ts
@@ -3,6 +3,8 @@ import {
DelayTypeEnum,
DigestTypeEnum,
DigestUnitEnum,
+ FieldLogicalOperatorEnum,
+ FieldOperatorEnum,
FilterPartTypeEnum,
StepTypeEnum,
TriggerContextTypeEnum,
@@ -292,13 +294,13 @@ describe('ContentService', function () {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.PAYLOAD,
field: 'counter',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
diff --git a/apps/api/src/app/testing/dtos/idempotency.dto.ts b/apps/api/src/app/testing/dtos/idempotency.dto.ts
new file mode 100644
index 00000000000..6f885116da1
--- /dev/null
+++ b/apps/api/src/app/testing/dtos/idempotency.dto.ts
@@ -0,0 +1,3 @@
+export class IdempotencyBodyDto {
+ data: number;
+}
diff --git a/apps/api/src/app/testing/testing.controller.ts b/apps/api/src/app/testing/testing.controller.ts
index f23c67f0e76..1939ca49148 100644
--- a/apps/api/src/app/testing/testing.controller.ts
+++ b/apps/api/src/app/testing/testing.controller.ts
@@ -1,12 +1,16 @@
-import { Body, Controller, NotFoundException, Post } from '@nestjs/common';
+import { Body, Controller, Get, HttpException, NotFoundException, Post, UseGuards } from '@nestjs/common';
import { DalService } from '@novu/dal';
import { IUserEntity } from '@novu/shared';
import { ISeedDataResponseDto, SeedDataBodyDto } from './dtos/seed-data.dto';
+import { IdempotencyBodyDto } from './dtos/idempotency.dto';
+
import { SeedData } from './usecases/seed-data/seed-data.usecase';
import { SeedDataCommand } from './usecases/seed-data/seed-data.command';
import { CreateSession } from './usecases/create-session/create-session.usecase';
import { CreateSessionCommand } from './usecases/create-session/create-session.command';
import { ApiExcludeController } from '@nestjs/swagger';
+import { JwtAuthGuard } from '../auth/framework/auth.guard';
+import { ExternalApiAccessible } from '../auth/framework/external-api.decorator';
@Controller('/testing')
@ApiExcludeController()
@@ -47,4 +51,28 @@ export class TestingController {
return await this.seedDataUsecase.execute(command);
}
+
+ @ExternalApiAccessible()
+ @UseGuards(JwtAuthGuard)
+ @Post('/idempotency')
+ async idempotency(@Body() body: IdempotencyBodyDto): Promise<{ number: number }> {
+ if (process.env.NODE_ENV !== 'test') throw new NotFoundException();
+
+ if (body.data > 300) {
+ throw new HttpException(`` + Math.random(), body.data);
+ }
+ if (body.data === 250) {
+ //for testing conflict
+ await new Promise((resolve) => setTimeout(resolve, 500));
+ }
+
+ return { number: Math.random() };
+ }
+
+ @Get('/idempotency')
+ async idempotencyGet(): Promise<{ number: number }> {
+ if (process.env.NODE_ENV !== 'test') throw new NotFoundException();
+
+ return { number: Math.random() };
+ }
}
diff --git a/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts b/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts
index 0f404d73e90..68cb6190a25 100644
--- a/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts
+++ b/apps/api/src/app/workflows/e2e/create-notification-templates.e2e.ts
@@ -4,6 +4,8 @@ import {
ChannelCTATypeEnum,
ChannelTypeEnum,
EmailBlockTypeEnum,
+ FieldLogicalOperatorEnum,
+ FieldOperatorEnum,
StepTypeEnum,
INotificationTemplate,
TriggerTypeEnum,
@@ -80,13 +82,13 @@ describe('Create Workflow - /workflows (POST)', async () => {
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
@@ -504,13 +506,13 @@ export async function createTemplateFromBlueprint({
{
isNegated: false,
type: 'GROUP',
- value: 'AND',
+ value: FieldLogicalOperatorEnum.AND,
children: [
{
on: FilterPartTypeEnum.SUBSCRIBER,
field: 'firstName',
value: 'test value',
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
},
],
},
diff --git a/apps/api/src/types/env.d.ts b/apps/api/src/types/env.d.ts
index d5650e5ab3c..7f30bd31b6a 100644
--- a/apps/api/src/types/env.d.ts
+++ b/apps/api/src/types/env.d.ts
@@ -11,6 +11,7 @@ declare namespace NodeJS {
NODE_ENV: 'test' | 'production' | 'dev' | 'ci' | 'local';
PORT: string;
DISABLE_USER_REGISTRATION: 'true' | 'false';
+ IS_API_IDEMPOTENCY_ENABLED: 'true' | 'false';
FRONT_BASE_URL: string;
SENTRY_DSN: string;
}
diff --git a/apps/inbound-mail/package.json b/apps/inbound-mail/package.json
index 6bed05dc73b..787391a1d27 100644
--- a/apps/inbound-mail/package.json
+++ b/apps/inbound-mail/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/inbound-mail",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "",
"author": "",
"private": true,
@@ -19,8 +19,8 @@
"test": "cross-env TS_NODE_COMPILER_OPTIONS='{\"strictNullChecks\": false}' TZ=UTC NODE_ENV=test E2E_RUNNER=true mocha --trace-warnings --timeout 10000 --require ts-node/register --exit --file e2e/setup.ts src/**/**/*.spec.ts"
},
"dependencies": {
- "@novu/application-generic": "^0.20.0",
- "@novu/shared": "^0.20.0",
+ "@novu/application-generic": "^0.21.0",
+ "@novu/shared": "^0.21.0",
"@sentry/node": "^7.12.1",
"bluebird": "^2.9.30",
"dotenv": "^8.6.0",
@@ -39,7 +39,7 @@
"winston": "^3.9.0"
},
"devDependencies": {
- "@novu/testing": "^0.20.0",
+ "@novu/testing": "^0.21.0",
"@types/chai": "^4.2.11",
"@types/express": "^4.17.8",
"@types/html-to-text": "^9.0.1",
diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile
index bc8805a7a98..7572dff8472 100644
--- a/apps/web/Dockerfile
+++ b/apps/web/Dockerfile
@@ -15,6 +15,7 @@ COPY libs/dal ./libs/dal
COPY libs/testing ./libs/testing
COPY packages/client ./packages/client
COPY libs/shared ./libs/shared
+COPY libs/design-system ./libs/design-system
COPY packages/notification-center ./packages/notification-center
COPY packages/stateless ./packages/stateless
COPY packages/node ./packages/node
@@ -27,7 +28,7 @@ COPY pnpm-workspace.yaml .
COPY pnpm-lock.yaml .
RUN --mount=type=cache,id=pnpm-store-web,target=/root/.pnpm-store\
- pnpm install --reporter=silent
+ pnpm install --frozen-lockfile
RUN pnpm add @babel/core -w
diff --git a/apps/web/package.json b/apps/web/package.json
index 4bbdb3e9208..c777753e62f 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/web",
- "version": "0.20.0",
+ "version": "0.21.0",
"private": true,
"scripts": {
"start": "cross-env PORT=4200 react-app-rewired start",
@@ -49,9 +49,9 @@
"@mantine/notifications": "^5.7.1",
"@mantine/prism": "^5.7.1",
"@mantine/spotlight": "^5.7.1",
- "@novu/design-system": "^0.20.0",
- "@novu/notification-center": "^0.20.0",
- "@novu/shared": "^0.20.0",
+ "@novu/design-system": "^0.21.0",
+ "@novu/notification-center": "^0.21.0",
+ "@novu/shared": "^0.21.0",
"@segment/analytics-next": "^1.48.0",
"@sentry/react": "^7.40.0",
"@sentry/tracing": "^7.40.0",
@@ -125,8 +125,8 @@
"@babel/preset-react": "^7.13.13",
"@babel/preset-typescript": "^7.13.0",
"@babel/runtime": "^7.20.13",
- "@novu/dal": "^0.20.0",
- "@novu/testing": "^0.20.0",
+ "@novu/dal": "^0.21.0",
+ "@novu/testing": "^0.21.0",
"@storybook/addon-actions": "^7.4.2",
"@storybook/addon-essentials": "^7.4.2",
"@storybook/addon-links": "^7.4.2",
@@ -147,10 +147,10 @@
"http-server": "^0.13.0",
"less-loader": "4.1.0",
"nodemon": "^3.0.1",
- "react-scripts": "^5.0.1",
"react-app-rewired": "^2.2.1",
"react-error-overlay": "6.0.11",
"react-joyride": "^2.5.3",
+ "react-scripts": "^5.0.1",
"storybook": "^7.4.2",
"typescript": "4.9.5",
"webpack": "^5.74.0",
@@ -185,4 +185,4 @@
}
]
}
-}
\ No newline at end of file
+}
diff --git a/apps/web/public/static/images/providers/dark/generic-sms.svg b/apps/web/public/static/images/providers/dark/generic-sms.svg
new file mode 100644
index 00000000000..87e11a06f5d
--- /dev/null
+++ b/apps/web/public/static/images/providers/dark/generic-sms.svg
@@ -0,0 +1 @@
+
diff --git a/apps/web/public/static/images/providers/dark/square/generic-sms.svg b/apps/web/public/static/images/providers/dark/square/generic-sms.svg
new file mode 100644
index 00000000000..87e11a06f5d
--- /dev/null
+++ b/apps/web/public/static/images/providers/dark/square/generic-sms.svg
@@ -0,0 +1 @@
+
diff --git a/apps/web/public/static/images/providers/light/generic-sms.svg b/apps/web/public/static/images/providers/light/generic-sms.svg
new file mode 100644
index 00000000000..f22ac13d527
--- /dev/null
+++ b/apps/web/public/static/images/providers/light/generic-sms.svg
@@ -0,0 +1 @@
+
diff --git a/apps/web/public/static/images/providers/light/square/generic-sms.svg b/apps/web/public/static/images/providers/light/square/generic-sms.svg
new file mode 100644
index 00000000000..f22ac13d527
--- /dev/null
+++ b/apps/web/public/static/images/providers/light/square/generic-sms.svg
@@ -0,0 +1 @@
+
diff --git a/apps/web/src/components/conditions/Conditions.tsx b/apps/web/src/components/conditions/Conditions.tsx
index 12486d47273..cc1e3167cb8 100644
--- a/apps/web/src/components/conditions/Conditions.tsx
+++ b/apps/web/src/components/conditions/Conditions.tsx
@@ -3,7 +3,7 @@ import styled from '@emotion/styled';
import { useMemo } from 'react';
import { Control, Controller, useFieldArray, useForm, useWatch } from 'react-hook-form';
-import { FILTER_TO_LABEL, FilterPartTypeEnum } from '@novu/shared';
+import { FILTER_TO_LABEL, FilterPartTypeEnum, FieldLogicalOperatorEnum, FieldOperatorEnum } from '@novu/shared';
import {
Button,
@@ -135,13 +135,13 @@ export function Conditions({
{
return (
{
append({
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
on: FilterPartTypeEnum.TENANT,
field: 'identifier',
value: '',
@@ -255,17 +255,17 @@ function EqualityForm({ control, index }: { control: Control; i
{
return (
; i
- {operator !== 'IS_DEFINED' && (
+ {operator !== FieldOperatorEnum.IS_DEFINED && (
{
append({
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
on: 'payload',
});
}}
@@ -332,28 +332,28 @@ function EqualityForm({
{
return (
{
field.onChange(value);
- if (value === 'IS_DEFINED') {
+ if (value === FieldOperatorEnum.IS_DEFINED) {
setValue(`steps.${stepIndex}.filters.0.children.${index}.value`, '');
}
}}
@@ -364,7 +364,7 @@ function EqualityForm({
- {operator !== 'IS_DEFINED' && (
+ {operator !== FieldOperatorEnum.IS_DEFINED && (
{
- expect(translateOperator('EQUAL')).to.equal('equal');
- expect(translateOperator('NOT_EQUAL')).to.equal('not equal');
- expect(translateOperator('LARGER')).to.equal('larger');
- expect(translateOperator('SMALLER')).to.equal('smaller');
- expect(translateOperator('LARGER_EQUAL')).to.equal('larger or equal');
- expect(translateOperator('SMALLER_EQUAL')).to.equal('smaller or equal');
- expect(translateOperator('NOT_IN')).to.equal('do not include');
- expect(translateOperator('IN')).to.equal('includes');
+ expect(translateOperator(FieldOperatorEnum.EQUAL)).to.equal('equal');
+ expect(translateOperator(FieldOperatorEnum.NOT_EQUAL)).to.equal('not equal');
+ expect(translateOperator(FieldOperatorEnum.LARGER)).to.equal('larger');
+ expect(translateOperator(FieldOperatorEnum.SMALLER)).to.equal('smaller');
+ expect(translateOperator(FieldOperatorEnum.LARGER_EQUAL)).to.equal('larger or equal');
+ expect(translateOperator(FieldOperatorEnum.SMALLER_EQUAL)).to.equal('smaller or equal');
+ expect(translateOperator(FieldOperatorEnum.NOT_IN)).to.equal('do not include');
+ expect(translateOperator(FieldOperatorEnum.IN)).to.equal('includes');
});
it('should print correct filter description value according to the filter type', () => {
@@ -141,14 +142,14 @@ describe('Filters Component', function () {
const webhookFilter: IWebhookFilterPart = {
field: 'test-field',
on: FilterPartTypeEnum.WEBHOOK,
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
value: 'test',
webhookUrl: 'test-url',
};
const fieldFilters: IFieldFilterPart = {
field: 'test-field',
on: FilterPartTypeEnum.PAYLOAD,
- operator: 'IN',
+ operator: FieldOperatorEnum.IN,
value: 'test-value',
};
diff --git a/apps/web/src/pages/templates/filter/Filters.tsx b/apps/web/src/pages/templates/filter/Filters.tsx
index 62755afb1f9..73e6c357973 100644
--- a/apps/web/src/pages/templates/filter/Filters.tsx
+++ b/apps/web/src/pages/templates/filter/Filters.tsx
@@ -1,6 +1,6 @@
import styled from '@emotion/styled';
import { useMantineColorScheme } from '@mantine/core';
-import { BuilderFieldOperator, FilterParts, FilterPartTypeEnum } from '@novu/shared';
+import { BuilderFieldOperator, FieldOperatorEnum, FilterParts, FilterPartTypeEnum } from '@novu/shared';
import type { IFormStep } from '../components/formTypes';
import { colors } from '@novu/design-system';
@@ -46,25 +46,25 @@ export const Filter = ({ filter }: { filter: FilterParts }) => {
};
export const translateOperator = (operator?: BuilderFieldOperator) => {
- if (operator === 'NOT_EQUAL') {
+ if (operator === FieldOperatorEnum.NOT_EQUAL) {
return 'not equal';
}
- if (operator === 'LARGER') {
+ if (operator === FieldOperatorEnum.LARGER) {
return 'larger';
}
- if (operator === 'SMALLER') {
+ if (operator === FieldOperatorEnum.SMALLER) {
return 'smaller';
}
- if (operator === 'LARGER_EQUAL') {
+ if (operator === FieldOperatorEnum.LARGER_EQUAL) {
return 'larger or equal';
}
- if (operator === 'SMALLER_EQUAL') {
+ if (operator === FieldOperatorEnum.SMALLER_EQUAL) {
return 'smaller or equal';
}
- if (operator === 'NOT_IN') {
+ if (operator === FieldOperatorEnum.NOT_IN) {
return 'do not include';
}
- if (operator === 'IN') {
+ if (operator === FieldOperatorEnum.IN) {
return 'includes';
}
@@ -73,7 +73,7 @@ export const translateOperator = (operator?: BuilderFieldOperator) => {
export const getFilterLabel = (filter: FilterParts, steps: IFormStep[]): string => {
if (filter.on === FilterPartTypeEnum.IS_ONLINE) {
- return `is online right now ${translateOperator('EQUAL')}`;
+ return `is online right now ${translateOperator(FieldOperatorEnum.EQUAL)}`;
}
if (filter.on === FilterPartTypeEnum.IS_ONLINE_IN_LAST) {
return `online in the last "X" ${filter.timeOperator}`;
diff --git a/apps/web/src/pages/templates/filter/OnlineFiltersForms.tsx b/apps/web/src/pages/templates/filter/OnlineFiltersForms.tsx
index f31bb6a72b7..c50b0267e7d 100644
--- a/apps/web/src/pages/templates/filter/OnlineFiltersForms.tsx
+++ b/apps/web/src/pages/templates/filter/OnlineFiltersForms.tsx
@@ -1,5 +1,5 @@
import { Grid } from '@mantine/core';
-import { TimeOperatorEnum } from '@novu/shared';
+import { FieldOperatorEnum, TimeOperatorEnum } from '@novu/shared';
import { Controller } from 'react-hook-form';
import { DeleteStepButton } from './FilterModal.styles';
@@ -61,7 +61,12 @@ function OnlineRightNowForm({
return (
<>
-
+
{
- if (filter.value === 'OR') {
+ if (filter.value === FieldLogicalOperatorEnum.OR) {
return await this.handleOrFilters(filter, variables, command, filterProcessingDetails);
}
@@ -270,7 +272,7 @@ export class MessageMatcher extends Filter {
const label = FILTER_TO_LABEL[filter.on];
const field = filter.stepType;
const expected = 'true';
- const operator = 'EQUAL';
+ const operator = FieldOperatorEnum.EQUAL;
if (message?.channel === ChannelTypeEnum.EMAIL) {
const count = await this.executionDetailsRepository.count({
@@ -337,7 +339,7 @@ export class MessageMatcher extends Filter {
field: 'isOnline',
expected: `${filter.value}`,
actual: `${filter.on === FilterPartTypeEnum.IS_ONLINE ? isOnlineString : lastOnlineAtString}`,
- operator: filter.on === FilterPartTypeEnum.IS_ONLINE ? 'EQUAL' : filter.timeOperator,
+ operator: filter.on === FilterPartTypeEnum.IS_ONLINE ? FieldOperatorEnum.EQUAL : filter.timeOperator,
passed: false,
});
@@ -351,7 +353,7 @@ export class MessageMatcher extends Filter {
field: 'isOnline',
expected: `${filter.value}`,
actual: isOnlineString,
- operator: 'EQUAL',
+ operator: FieldOperatorEnum.EQUAL,
passed: isOnlineMatch,
});
diff --git a/apps/ws/package.json b/apps/ws/package.json
index dce1fc1ead6..792fb1a993b 100644
--- a/apps/ws/package.json
+++ b/apps/ws/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/ws",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "",
"author": "",
"private": true,
@@ -28,10 +28,10 @@
"@nestjs/swagger": "^7.1.9",
"@nestjs/terminus": "^10.0.1",
"@nestjs/websockets": "^10.2.2",
- "@novu/application-generic": "^0.20.0",
- "@novu/dal": "^0.20.0",
- "@novu/shared": "^0.20.0",
- "@novu/testing": "^0.20.0",
+ "@novu/application-generic": "^0.21.0",
+ "@novu/dal": "^0.21.0",
+ "@novu/shared": "^0.21.0",
+ "@novu/testing": "^0.21.0",
"@sentry/node": "^7.30.0",
"@socket.io/redis-adapter": "^7.2.0",
"class-transformer": "^0.5.1",
diff --git a/docker/kubernetes/helm/values.yaml b/docker/kubernetes/helm/values.yaml
index 409e3db8983..b3ebf762278 100644
--- a/docker/kubernetes/helm/values.yaml
+++ b/docker/kubernetes/helm/values.yaml
@@ -1563,6 +1563,11 @@ web:
##
port: 4200
+ env:
+ ## @param web.env.NODE_ENV The environment of the app.
+ ##
+ NODE_ENV: production
+
## @param web.apiExternalEndpoint The external endpoint of the API
##
apiExternalEndpoint: http://localhost:3000
diff --git a/docker/kubernetes/kustomize/api-deployment.yaml b/docker/kubernetes/kustomize/api-deployment.yaml
index 692f24304de..d9e6d9b4fbf 100644
--- a/docker/kubernetes/kustomize/api-deployment.yaml
+++ b/docker/kubernetes/kustomize/api-deployment.yaml
@@ -24,7 +24,7 @@ spec:
- envFrom:
- configMapRef:
name: novu-env
- image: ghcr.io/novuhq/novu/api:0.20.0
+ image: ghcr.io/novuhq/novu/api:0.21.0
name: api
ports:
- containerPort: 3000
diff --git a/docker/kubernetes/kustomize/embed-deployment.yaml b/docker/kubernetes/kustomize/embed-deployment.yaml
index 3b4ba27077c..0dcede1cfac 100644
--- a/docker/kubernetes/kustomize/embed-deployment.yaml
+++ b/docker/kubernetes/kustomize/embed-deployment.yaml
@@ -24,7 +24,7 @@ spec:
- envFrom:
- configMapRef:
name: novu-env
- image: ghcr.io/novuhq/novu/embed:0.20.0
+ image: ghcr.io/novuhq/novu/embed:0.21.0
name: embed
ports:
- containerPort: 4701
diff --git a/docker/kubernetes/kustomize/web-deployment.yaml b/docker/kubernetes/kustomize/web-deployment.yaml
index 7cb4fcbdc02..ca7fd827e78 100644
--- a/docker/kubernetes/kustomize/web-deployment.yaml
+++ b/docker/kubernetes/kustomize/web-deployment.yaml
@@ -24,7 +24,7 @@ spec:
- envFrom:
- configMapRef:
name: novu-env
- image: ghcr.io/novuhq/novu/web:0.20.0
+ image: ghcr.io/novuhq/novu/web:0.21.0
name: web
ports:
- containerPort: 4200
diff --git a/docker/kubernetes/kustomize/widget-deployment.yaml b/docker/kubernetes/kustomize/widget-deployment.yaml
index 1367288bd93..8ac4d89a006 100644
--- a/docker/kubernetes/kustomize/widget-deployment.yaml
+++ b/docker/kubernetes/kustomize/widget-deployment.yaml
@@ -24,7 +24,7 @@ spec:
- envFrom:
- configMapRef:
name: novu-env
- image: ghcr.io/novuhq/novu/widget:0.20.0
+ image: ghcr.io/novuhq/novu/widget:0.21.0
name: widget
ports:
- containerPort: 4500
diff --git a/docker/kubernetes/kustomize/worker-deployment.yaml b/docker/kubernetes/kustomize/worker-deployment.yaml
index bb7c7ece3e9..59a5bf1de2f 100644
--- a/docker/kubernetes/kustomize/worker-deployment.yaml
+++ b/docker/kubernetes/kustomize/worker-deployment.yaml
@@ -24,7 +24,7 @@ spec:
- envFrom:
- configMapRef:
name: novu-env
- image: ghcr.io/novuhq/novu/worker:0.20.0
+ image: ghcr.io/novuhq/novu/worker:0.21.0
name: worker
ports:
- containerPort: 3004
diff --git a/docker/kubernetes/kustomize/ws-deployment.yaml b/docker/kubernetes/kustomize/ws-deployment.yaml
index 8b11e860aca..a1c99514009 100644
--- a/docker/kubernetes/kustomize/ws-deployment.yaml
+++ b/docker/kubernetes/kustomize/ws-deployment.yaml
@@ -24,7 +24,7 @@ spec:
- envFrom:
- configMapRef:
name: novu-env
- image: ghcr.io/novuhq/novu/ws:0.20.0
+ image: ghcr.io/novuhq/novu/ws:0.21.0
name: ws
ports:
- containerPort: 3002
diff --git a/docker/local/deployment/docker-compose.yml b/docker/local/deployment/docker-compose.yml
index 0b2f8f64598..91f7f643dcb 100644
--- a/docker/local/deployment/docker-compose.yml
+++ b/docker/local/deployment/docker-compose.yml
@@ -23,7 +23,7 @@ services:
ports:
- 27017:27017
api:
- image: 'ghcr.io/novuhq/novu/api:0.20.0'
+ image: 'ghcr.io/novuhq/novu/api:0.21.0'
depends_on:
- mongodb
- redis
@@ -63,7 +63,7 @@ services:
ports:
- '3000:3000'
worker:
- image: 'ghcr.io/novuhq/novu/worker:0.20.0'
+ image: 'ghcr.io/novuhq/novu/worker:0.21.0'
depends_on:
- mongodb
- redis
@@ -94,7 +94,7 @@ services:
NEW_RELIC_APP_NAME: ${NEW_RELIC_APP_NAME}
NEW_RELIC_LICENSE_KEY: ${NEW_RELIC_LICENSE_KEY}
ws:
- image: 'ghcr.io/novuhq/novu/ws:0.20.0'
+ image: 'ghcr.io/novuhq/novu/ws:0.21.0'
depends_on:
- mongodb
- redis
@@ -118,7 +118,7 @@ services:
ports:
- '3002:3002'
web:
- image: 'ghcr.io/novuhq/novu/web:0.20.0'
+ image: 'ghcr.io/novuhq/novu/web:0.21.0'
depends_on:
- api
- worker
@@ -138,7 +138,7 @@ services:
ports:
- 4200:4200
widget:
- image: 'ghcr.io/novuhq/novu/widget:0.20.0'
+ image: 'ghcr.io/novuhq/novu/widget:0.21.0'
depends_on:
- api
- worker
@@ -160,7 +160,7 @@ services:
embed:
depends_on:
- widget
- image: 'ghcr.io/novuhq/novu/embed:0.20.0'
+ image: 'ghcr.io/novuhq/novu/embed:0.21.0'
container_name: embed
restart: unless-stopped
logging:
diff --git a/docs/docs/channels/sms/generic-sms.md b/docs/docs/channels/sms/generic-sms.md
new file mode 100644
index 00000000000..fb2764d536e
--- /dev/null
+++ b/docs/docs/channels/sms/generic-sms.md
@@ -0,0 +1,36 @@
+# Generic SMS
+
+The Custom SMS provider allows you to send transactional SMS messages through your own SMS service using the Novu Platform.
+
+## Getting Started
+
+To use the Custom SMS provider within the SMS channel, you'll need to have your own SMS service or access to a service provider that supports sending SMS messages using an API endpoint. You will also need to configure the following parameters in the Custom SMS integration on the Novu platform:
+
+- `BaseUrl`: The endpoint URL of your SMS service provider.
+- `API Key Request Header`: The request header used for authenticating with the SMS service ex. `x-api-key`.
+- `API Key`: Your API key for authenticating with the SMS service.
+- `Secret Key Request Header` (optional): If your SMS service requires a secret key for authentication, specify the request header used for authenticating with the SMS service.
+- `Secret Key` (optional): If your SMS service requires a secret key for authentication.
+- `Id Path`: The path to the message ID in the response from the SMS service.
+- `Date Path`: The path to the message date in the response from the SMS service.
+- `From`: The sender information you want to appear on the SMS (e.g., your company name or phone number).
+- `Authenticate by token` (optional): If your SMS service requires authentication by token, set this to `true` this option will use the `API key` and `Secret key` to get the access token.
+- `Auth URL` (optional): The endpoint URL of your SMS service provider for authentication.
+- `Authentication Token Key` (optional): The key of the authentication token in the response from the SMS service.
+
+## Setting Up Custom SMS Integration with Novu
+
+Follow these steps to create a Custom SMS integration with Novu:
+
+- **Visit the Integrations Store Page on Novu:** Log in to your Novu account and navigate to the "Integrations Store" page.
+- **Locate Custom SMS Provider:** You will find "Custom SMS" under SMS Section and click on it to open the integration setup.
+- **Enter Your SMS Service Credentials:** In the integration setup, provide the following information:
+ - `BaseUrl`: Fill in the endpoint URL of your SMS service provider.
+ - `API Key Request Header`: Specify the request header used for authenticating with the SMS service.
+ - `API Key`: Enter your API key for authentication.
+ - `Secret Key Request Header` (optional): If your SMS service requires a secret key, specify the request header used for authenticating with the SMS service.
+ - `Secret Key` (optional): If your SMS service requires a secret key, enter it here.
+ - `From`: Specify the sender information you want to display on the SMS messages.
+- **Activate the Integration:** Click on the "Disabled" button to switch it to "Active."
+
+Once you've completed these steps, you can send notifications using the Custom SMS provider through Novu's platform.
diff --git a/lerna.json b/lerna.json
index 5abe7c244c5..a99d0554aa1 100644
--- a/lerna.json
+++ b/lerna.json
@@ -8,5 +8,5 @@
"message": "chore(release): publish - ci skip"
}
},
- "version": "0.20.0"
+ "version": "0.21.0"
}
diff --git a/libs/dal/package.json b/libs/dal/package.json
index 6bf5728d3f7..f25c32fbe7b 100644
--- a/libs/dal/package.json
+++ b/libs/dal/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/dal",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "",
"private": true,
"scripts": {
@@ -24,7 +24,7 @@
"@aws-sdk/client-s3": "^3.382.0",
"@aws-sdk/s3-request-presigner": "^3.382.0",
"@faker-js/faker": "^6.0.0",
- "@novu/shared": "^0.20.0",
+ "@novu/shared": "^0.21.0",
"@sendgrid/mail": "^7.4.2",
"JSONStream": "^1.3.5",
"archiver": "^5.0.0",
diff --git a/libs/dal/src/repositories/integration/integration.schema.ts b/libs/dal/src/repositories/integration/integration.schema.ts
index 2789b1d21a9..206dbfe0705 100644
--- a/libs/dal/src/repositories/integration/integration.schema.ts
+++ b/libs/dal/src/repositories/integration/integration.schema.ts
@@ -46,6 +46,12 @@ const integrationSchema = new Schema(
redirectUrl: Schema.Types.String,
hmac: Schema.Types.Boolean,
ipPoolName: Schema.Types.String,
+ apiKeyRequestHeader: Schema.Types.String,
+ secretKeyRequestHeader: Schema.Types.String,
+ idPath: Schema.Types.String,
+ datePath: Schema.Types.String,
+ authenticateByToken: Schema.Types.Boolean,
+ authenticationTokenKey: Schema.Types.String,
},
active: {
type: Schema.Types.Boolean,
diff --git a/libs/design-system/package.json b/libs/design-system/package.json
index 7bac93cbe3c..fbe92bfdb9d 100644
--- a/libs/design-system/package.json
+++ b/libs/design-system/package.json
@@ -1,8 +1,9 @@
{
"name": "@novu/design-system",
- "version": "0.20.0",
+ "version": "0.21.0",
"repository": "https://github.com/novuhq/novu",
"description": "",
+ "private": true,
"scripts": {
"start": "npm run build:watch",
"prebuild": "rimraf dist",
@@ -31,9 +32,9 @@
"devDependencies": {
"@storybook/addon-actions": "^7.5.0",
"@storybook/addon-docs": "^7.4.2",
- "@storybook/theming": "^7.4.2",
"@storybook/react": "^7.4.2",
"@storybook/react-webpack5": "^7.4.2",
+ "@storybook/theming": "^7.4.2",
"@types/node": "^18.11.12",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
@@ -68,10 +69,10 @@
"@mantine/core": "^5.7.1",
"@mantine/hooks": "^5.7.1",
"@mantine/notifications": "^5.7.1",
- "@novu/client": "^0.20.0",
- "@novu/shared": "^0.20.0",
+ "@novu/client": "^0.21.0",
+ "@novu/shared": "^0.21.0",
"react-hook-form": "7.43.9",
"react-table": "^7.8.0",
"tslib": "^2.3.1"
}
-}
\ No newline at end of file
+}
diff --git a/libs/embed/package.json b/libs/embed/package.json
index 76da34f3563..06e84ebf91b 100644
--- a/libs/embed/package.json
+++ b/libs/embed/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/embed",
- "version": "0.20.0",
+ "version": "0.21.0",
"private": true,
"description": "",
"keywords": [],
@@ -116,7 +116,7 @@
"typescript": "4.9.5"
},
"dependencies": {
- "@novu/notification-center": "^0.20.0",
+ "@novu/notification-center": "^0.21.0",
"@types/iframe-resizer": "^3.5.8",
"iframe-resizer": "^4.3.1"
}
diff --git a/libs/shared/package.json b/libs/shared/package.json
index 1c702d2c1e3..75fb637d433 100644
--- a/libs/shared/package.json
+++ b/libs/shared/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/shared",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "",
"scripts": {
"start": "npm run start:dev",
diff --git a/libs/shared/src/consts/providers/channels/sms.ts b/libs/shared/src/consts/providers/channels/sms.ts
index 3d52abf6849..8fc63159d51 100644
--- a/libs/shared/src/consts/providers/channels/sms.ts
+++ b/libs/shared/src/consts/providers/channels/sms.ts
@@ -18,6 +18,7 @@ import {
termiiConfig,
africasTalkingConfig,
sendchampConfig,
+ genericSmsConfig,
clickSendConfig,
bandwidthConfig,
} from '../credentials';
@@ -181,6 +182,14 @@ export const smsProviders: IProviderConfig[] = [
docReference: 'https://docs.novu.co/channels-and-providers/sms/sendchamp',
logoFileName: { light: 'sendchamp.svg', dark: 'sendchamp.svg' },
},
+ {
+ id: SmsProviderIdEnum.GenericSms,
+ displayName: `Generic SMS`,
+ channel: ChannelTypeEnum.SMS,
+ credentials: genericSmsConfig,
+ docReference: 'https://docs.novu.co/channels/sms/generic-sms',
+ logoFileName: { light: 'generic-sms.svg', dark: 'generic-sms.svg' },
+ },
{
id: SmsProviderIdEnum.Clicksend,
displayName: `Clicksend`,
diff --git a/libs/shared/src/consts/providers/credentials/provider-credentials.ts b/libs/shared/src/consts/providers/credentials/provider-credentials.ts
index 9d2f1343127..d66af1290c0 100644
--- a/libs/shared/src/consts/providers/credentials/provider-credentials.ts
+++ b/libs/shared/src/consts/providers/credentials/provider-credentials.ts
@@ -806,3 +806,83 @@ export const bandwidthConfig: IConfigCredentials[] = [
},
...smsConfigBase,
];
+
+export const genericSmsConfig: IConfigCredentials[] = [
+ {
+ key: CredentialsKeyEnum.BaseUrl,
+ displayName: 'Base URL',
+ type: 'string',
+ required: true,
+ },
+ {
+ key: CredentialsKeyEnum.ApiKeyRequestHeader,
+ displayName: 'API Key Request Header',
+ type: 'string',
+ description: 'The name of the header attribute to use for the API key ex. (X-API-KEY, apiKey, ...)',
+ required: true,
+ },
+ {
+ key: CredentialsKeyEnum.ApiKey,
+ displayName: 'API Key',
+ type: 'string',
+ description: 'The value of the header attribute to use for the API key.',
+ required: true,
+ },
+ {
+ key: CredentialsKeyEnum.SecretKeyRequestHeader,
+ displayName: 'Secret Key Request Header',
+ type: 'string',
+ description: 'The name of the header attribute to use for the secret key ex. (X-SECRET-KEY, secretKey, ...)',
+ required: false,
+ },
+ {
+ key: CredentialsKeyEnum.SecretKey,
+ displayName: 'Secret Key',
+ type: 'string',
+ description: 'The value of the header attribute to use for the secret key',
+ required: false,
+ },
+ {
+ key: CredentialsKeyEnum.IdPath,
+ displayName: 'Id Path',
+ type: 'string',
+ value: 'data.id',
+ description: 'The path to the id field in the response data ex. (id, message.id, ...)',
+ required: true,
+ },
+ {
+ key: CredentialsKeyEnum.DatePath,
+ displayName: 'Date Path',
+ type: 'string',
+ value: 'data.date',
+ description: 'The path to the date field in the response data ex. (date, message.date, ...)',
+ required: true,
+ },
+ {
+ key: CredentialsKeyEnum.AuthenticateByToken,
+ displayName: 'Authenticate by token',
+ type: 'switch',
+ description: 'If enabled, the API key and secret key will be sent as a token in the Authorization header',
+ required: true,
+ },
+ {
+ key: CredentialsKeyEnum.Domain,
+ displayName: 'Auth URL',
+ type: 'string',
+ description: 'The URL to use for authentication in case the Authenticate by token option is enabled',
+ required: false,
+ tooltip: {
+ text: 'The URL to use for authentication in case the Authenticate by token option is enabled',
+ when: true,
+ },
+ },
+ {
+ key: CredentialsKeyEnum.AuthenticationTokenKey,
+ displayName: 'Authentication Token Key',
+ type: 'string',
+ description:
+ 'The name of the header attribute to use for the authentication token ex. (X-AUTH-TOKEN, auth-token, ...)',
+ required: false,
+ },
+ ...smsConfigBase,
+];
diff --git a/libs/shared/src/consts/providers/provider.enum.ts b/libs/shared/src/consts/providers/provider.enum.ts
index e2beb38afd0..b056688ff7e 100644
--- a/libs/shared/src/consts/providers/provider.enum.ts
+++ b/libs/shared/src/consts/providers/provider.enum.ts
@@ -27,6 +27,12 @@ export enum CredentialsKeyEnum {
RedirectUrl = 'redirectUrl',
Hmac = 'hmac',
IpPoolName = 'ipPoolName',
+ ApiKeyRequestHeader = 'apiKeyRequestHeader',
+ SecretKeyRequestHeader = 'secretKeyRequestHeader',
+ IdPath = 'idPath',
+ DatePath = 'datePath',
+ AuthenticateByToken = 'authenticateByToken',
+ AuthenticationTokenKey = 'authenticationTokenKey',
}
export enum EmailProviderIdEnum {
@@ -72,6 +78,7 @@ export enum SmsProviderIdEnum {
AfricasTalking = 'africas-talking',
Novu = 'novu-sms',
Sendchamp = 'sendchamp',
+ GenericSms = 'generic-sms',
Clicksend = 'clicksend',
Bandwidth = 'bandwidth',
}
diff --git a/libs/shared/src/entities/integration/credential.interface.ts b/libs/shared/src/entities/integration/credential.interface.ts
index 2991c1d3ce9..bf87a26f38b 100644
--- a/libs/shared/src/entities/integration/credential.interface.ts
+++ b/libs/shared/src/entities/integration/credential.interface.ts
@@ -25,4 +25,10 @@ export interface ICredentials {
redirectUrl?: string;
hmac?: boolean;
ipPoolName?: string;
+ apiKeyRequestHeader?: string;
+ secretKeyRequestHeader?: string;
+ idPath?: string;
+ datePath?: string;
+ authenticateByToken?: boolean;
+ authenticationTokenKey?: string;
}
diff --git a/libs/shared/src/types/builder/builder.types.ts b/libs/shared/src/types/builder/builder.types.ts
index 460c3a016f3..0c0168492a8 100644
--- a/libs/shared/src/types/builder/builder.types.ts
+++ b/libs/shared/src/types/builder/builder.types.ts
@@ -1,20 +1,43 @@
-export type BuilderGroupValues = 'AND' | 'OR';
+export enum FieldOperatorEnum {
+ ALL_IN = 'ALL_IN',
+ ANY_IN = 'ANY_IN',
+ BETWEEN = 'BETWEEN',
+ EQUAL = 'EQUAL',
+ IN = 'IN',
+ IS_DEFINED = 'IS_DEFINED',
+ LARGER = 'LARGER',
+ LARGER_EQUAL = 'LARGER_EQUAL',
+ LIKE = 'LIKE',
+ NOT_BETWEEN = 'NOT_BETWEEN',
+ NOT_EQUAL = 'NOT_EQUAL',
+ NOT_IN = 'NOT_IN',
+ NOT_LIKE = 'NOT_LIKE',
+ SMALLER = 'SMALLER',
+ SMALLER_EQUAL = 'SMALLER_EQUAL',
+}
+
+export enum FieldLogicalOperatorEnum {
+ AND = 'AND',
+ OR = 'OR',
+}
+
+export type BuilderGroupValues = FieldLogicalOperatorEnum.AND | FieldLogicalOperatorEnum.OR;
export type BuilderFieldType = 'BOOLEAN' | 'TEXT' | 'DATE' | 'NUMBER' | 'STATEMENT' | 'LIST' | 'MULTI_LIST' | 'GROUP';
export type BuilderFieldOperator =
- | 'LARGER'
- | 'SMALLER'
- | 'LARGER_EQUAL'
- | 'SMALLER_EQUAL'
- | 'EQUAL'
- | 'NOT_EQUAL'
- | 'ALL_IN'
- | 'ANY_IN'
- | 'NOT_IN'
- | 'BETWEEN'
- | 'NOT_BETWEEN'
- | 'LIKE'
- | 'NOT_LIKE'
- | 'IN'
- | 'IS_DEFINED';
+ | FieldOperatorEnum.LARGER
+ | FieldOperatorEnum.SMALLER
+ | FieldOperatorEnum.LARGER_EQUAL
+ | FieldOperatorEnum.SMALLER_EQUAL
+ | FieldOperatorEnum.EQUAL
+ | FieldOperatorEnum.NOT_EQUAL
+ | FieldOperatorEnum.ALL_IN
+ | FieldOperatorEnum.ANY_IN
+ | FieldOperatorEnum.NOT_IN
+ | FieldOperatorEnum.BETWEEN
+ | FieldOperatorEnum.NOT_BETWEEN
+ | FieldOperatorEnum.LIKE
+ | FieldOperatorEnum.NOT_LIKE
+ | FieldOperatorEnum.IN
+ | FieldOperatorEnum.IS_DEFINED;
diff --git a/libs/testing/package.json b/libs/testing/package.json
index d48a30317ec..533e9e93ad7 100644
--- a/libs/testing/package.json
+++ b/libs/testing/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/testing",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "",
"private": true,
"scripts": {
@@ -22,8 +22,8 @@
"types": "dist/index.d.ts",
"dependencies": {
"@faker-js/faker": "^6.0.0",
- "@novu/dal": "^0.20.0",
- "@novu/shared": "^0.20.0",
+ "@novu/dal": "^0.21.0",
+ "@novu/shared": "^0.21.0",
"JSONStream": "^1.3.5",
"async": "^3.2.0",
"axios": "^1.3.3",
diff --git a/novu.code-workspace b/novu.code-workspace
index 72ce371bf45..bf8cbb0630e 100644
--- a/novu.code-workspace
+++ b/novu.code-workspace
@@ -179,6 +179,10 @@
{
"name": "🔔 @novu/maqsam",
"path": "providers/maqsam"
+ },
+ {
+ "name": "🔔 @novu/generic-sms",
+ "path": "providers/generic-sms"
}
],
"settings": {
diff --git a/packages/application-generic/package.json b/packages/application-generic/package.json
index 085b6ec3b53..82b33f97729 100644
--- a/packages/application-generic/package.json
+++ b/packages/application-generic/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/application-generic",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "Generic backend code used inside of Novu's different services",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -47,57 +47,58 @@
"@aws-sdk/s3-request-presigner": "^3.382.0",
"@azure/storage-blob": "^12.11.0",
"@google-cloud/storage": "^6.2.3",
- "@novu/africas-talking": "^0.20.0",
- "@novu/apns": "^0.20.0",
- "@novu/bandwidth": "^0.20.0",
- "@novu/burst-sms": "^0.20.0",
- "@novu/clickatell": "^0.20.0",
- "@novu/clicksend": "^0.20.0",
- "@novu/dal": "^0.20.0",
- "@novu/discord": "^0.20.0",
- "@novu/email-webhook": "^0.20.0",
- "@novu/emailjs": "^0.20.0",
- "@novu/expo": "^0.20.0",
- "@novu/fcm": "^0.20.0",
- "@novu/firetext": "^0.20.0",
- "@novu/forty-six-elks": "^0.20.0",
- "@novu/gupshup": "^0.20.0",
- "@novu/infobip": "^0.20.0",
- "@novu/kannel": "^0.20.0",
- "@novu/mailersend": "^0.20.0",
- "@novu/mailgun": "^0.20.0",
- "@novu/mailjet": "^0.20.0",
- "@novu/mailtrap": "^0.20.0",
- "@novu/mandrill": "^0.20.0",
- "@novu/maqsam": "^0.20.0",
- "@novu/mattermost": "^0.20.0",
- "@novu/ms-teams": "^0.20.0",
- "@novu/netcore": "^0.20.0",
- "@novu/nodemailer": "^0.20.0",
- "@novu/one-signal": "^0.20.0",
- "@novu/outlook365": "^0.20.0",
- "@novu/plivo": "^0.20.0",
- "@novu/plunk": "^0.20.0",
- "@novu/postmark": "^0.20.0",
- "@novu/push-webhook": "^0.20.0",
- "@novu/pushpad": "^0.20.0",
- "@novu/resend": "^0.20.0",
- "@novu/ryver": "^0.20.0-alpha.0",
- "@novu/sendchamp": "^0.20.0",
- "@novu/sendgrid": "^0.20.0",
- "@novu/sendinblue": "^0.20.0",
- "@novu/ses": "^0.20.0",
- "@novu/shared": "^0.20.0",
- "@novu/slack": "^0.20.0",
- "@novu/sms-central": "^0.20.0",
- "@novu/sms77": "^0.20.0",
- "@novu/sns": "^0.20.0",
- "@novu/sparkpost": "^0.20.0",
- "@novu/stateless": "^0.20.0",
- "@novu/telnyx": "^0.20.0",
- "@novu/termii": "^0.20.0",
- "@novu/testing": "^0.20.0",
- "@novu/twilio": "^0.20.0",
+ "@novu/africas-talking": "^0.21.0",
+ "@novu/apns": "^0.21.0",
+ "@novu/bandwidth": "^0.21.0",
+ "@novu/burst-sms": "^0.21.0",
+ "@novu/clickatell": "^0.21.0",
+ "@novu/clicksend": "^0.21.0",
+ "@novu/dal": "^0.21.0",
+ "@novu/discord": "^0.21.0",
+ "@novu/email-webhook": "^0.21.0",
+ "@novu/emailjs": "^0.21.0",
+ "@novu/expo": "^0.21.0",
+ "@novu/fcm": "^0.21.0",
+ "@novu/firetext": "^0.21.0",
+ "@novu/forty-six-elks": "^0.21.0",
+ "@novu/generic-sms": "^0.21.0",
+ "@novu/gupshup": "^0.21.0",
+ "@novu/infobip": "^0.21.0",
+ "@novu/kannel": "^0.21.0",
+ "@novu/mailersend": "^0.21.0",
+ "@novu/mailgun": "^0.21.0",
+ "@novu/mailjet": "^0.21.0",
+ "@novu/mailtrap": "^0.21.0",
+ "@novu/mandrill": "^0.21.0",
+ "@novu/maqsam": "^0.21.0",
+ "@novu/mattermost": "^0.21.0",
+ "@novu/ms-teams": "^0.21.0",
+ "@novu/netcore": "^0.21.0",
+ "@novu/nodemailer": "^0.21.0",
+ "@novu/one-signal": "^0.21.0",
+ "@novu/outlook365": "^0.21.0",
+ "@novu/plivo": "^0.21.0",
+ "@novu/plunk": "^0.21.0",
+ "@novu/postmark": "^0.21.0",
+ "@novu/push-webhook": "^0.21.0",
+ "@novu/pushpad": "^0.21.0",
+ "@novu/resend": "^0.21.0",
+ "@novu/ryver": "^0.21.0",
+ "@novu/sendchamp": "^0.21.0",
+ "@novu/sendgrid": "^0.21.0",
+ "@novu/sendinblue": "^0.21.0",
+ "@novu/ses": "^0.21.0",
+ "@novu/shared": "^0.21.0",
+ "@novu/slack": "^0.21.0",
+ "@novu/sms-central": "^0.21.0",
+ "@novu/sms77": "^0.21.0",
+ "@novu/sns": "^0.21.0",
+ "@novu/sparkpost": "^0.21.0",
+ "@novu/stateless": "^0.21.0",
+ "@novu/telnyx": "^0.21.0",
+ "@novu/termii": "^0.21.0",
+ "@novu/testing": "^0.21.0",
+ "@novu/twilio": "^0.21.0",
"@sentry/node": "^7.12.1",
"analytics-node": "^6.2.0",
"bullmq": "^3.10.2",
diff --git a/packages/application-generic/src/factories/sms/handlers/generic-sms.handler.ts b/packages/application-generic/src/factories/sms/handlers/generic-sms.handler.ts
new file mode 100644
index 00000000000..9975b30f81e
--- /dev/null
+++ b/packages/application-generic/src/factories/sms/handlers/generic-sms.handler.ts
@@ -0,0 +1,25 @@
+import { GenericSmsProvider } from '@novu/generic-sms';
+import { ChannelTypeEnum, ICredentials } from '@novu/shared';
+import { BaseSmsHandler } from './base.handler';
+
+export class GenericSmsHandler extends BaseSmsHandler {
+ constructor() {
+ super('generic-sms', ChannelTypeEnum.SMS);
+ }
+
+ buildProvider(credentials: ICredentials) {
+ this.provider = new GenericSmsProvider({
+ baseUrl: credentials.baseUrl,
+ apiKey: credentials.apiKey,
+ secretKey: credentials.secretKey,
+ from: credentials.from,
+ apiKeyRequestHeader: credentials.apiKeyRequestHeader,
+ secretKeyRequestHeader: credentials.secretKeyRequestHeader,
+ idPath: credentials.idPath,
+ datePath: credentials.datePath,
+ domain: credentials.domain,
+ authenticateByToken: credentials.authenticateByToken,
+ authenticationTokenKey: credentials.authenticationTokenKey,
+ });
+ }
+}
diff --git a/packages/application-generic/src/factories/sms/handlers/index.ts b/packages/application-generic/src/factories/sms/handlers/index.ts
index 4011305f1b3..bb4ed6ea201 100644
--- a/packages/application-generic/src/factories/sms/handlers/index.ts
+++ b/packages/application-generic/src/factories/sms/handlers/index.ts
@@ -18,3 +18,4 @@ export * from './sendchamp.handler';
export * from './clicksend.handler';
export * from './bandwidth.handler';
export * from './novu.handler';
+export * from './generic-sms.handler';
diff --git a/packages/application-generic/src/factories/sms/sms.factory.ts b/packages/application-generic/src/factories/sms/sms.factory.ts
index fd2bbe55245..9eccf5f2028 100644
--- a/packages/application-generic/src/factories/sms/sms.factory.ts
+++ b/packages/application-generic/src/factories/sms/sms.factory.ts
@@ -21,6 +21,7 @@ import {
ClicksendSmsHandler,
BandwidthHandler,
NovuSmsHandler,
+ GenericSmsHandler,
} from './handlers';
export class SmsFactory implements ISmsFactory {
@@ -45,6 +46,7 @@ export class SmsFactory implements ISmsFactory {
new ClicksendSmsHandler(),
new BandwidthHandler(),
new NovuSmsHandler(),
+ new GenericSmsHandler(),
];
getHandler(integration: IntegrationEntity) {
diff --git a/packages/application-generic/src/services/cache/cache-service.spec.ts b/packages/application-generic/src/services/cache/cache-service.spec.ts
index 573f9a57452..545bf45b548 100644
--- a/packages/application-generic/src/services/cache/cache-service.spec.ts
+++ b/packages/application-generic/src/services/cache/cache-service.spec.ts
@@ -113,6 +113,16 @@ describe('Cache Service - Cluster Mode', () => {
expect(value).toBe('value1');
});
+ it('should be able to add a key / value in the Redis Cluster if key not exist', async () => {
+ const result = await cacheService.setIfNotExist('key1-not-exist', 'value1');
+ expect(result).toBeDefined();
+ const result1 = await cacheService.setIfNotExist(
+ 'key1-not-exist',
+ 'value1'
+ );
+ expect(result1).toBeFalsy();
+ });
+
it('should be able to delete a key / value in the Redis Cluster', async () => {
const result = await cacheService.del('key1');
expect(result).toBe(1);
diff --git a/packages/application-generic/src/services/cache/cache.service.ts b/packages/application-generic/src/services/cache/cache.service.ts
index 03fa14518bf..3623d420bde 100644
--- a/packages/application-generic/src/services/cache/cache.service.ts
+++ b/packages/application-generic/src/services/cache/cache.service.ts
@@ -84,6 +84,22 @@ export class CacheService implements ICacheService {
return result;
}
+ public async setIfNotExist(
+ key: string,
+ value: string,
+ options?: CachingConfig
+ ): Promise {
+ const result = await this.client?.set(
+ key,
+ value,
+ 'EX',
+ this.getTtlInSeconds(options),
+ 'NX'
+ );
+
+ return result;
+ }
+
public async setQuery(
key: string,
value: string,
diff --git a/packages/application-generic/src/utils/filter.ts b/packages/application-generic/src/utils/filter.ts
index 066df2643e9..2f0c952eed9 100644
--- a/packages/application-generic/src/utils/filter.ts
+++ b/packages/application-generic/src/utils/filter.ts
@@ -1,6 +1,7 @@
import * as _ from 'lodash';
import {
IBaseFieldFilterPart,
+ FieldOperatorEnum,
FILTER_TO_LABEL,
ICondition,
} from '@novu/shared';
@@ -23,31 +24,31 @@ export abstract class Filter {
const filterValue = this.parseValue(actualValue, fieldFilter.value);
let result = false;
- if (fieldFilter.operator === 'EQUAL') {
+ if (fieldFilter.operator === FieldOperatorEnum.EQUAL) {
result = actualValue === filterValue;
}
- if (fieldFilter.operator === 'NOT_EQUAL') {
+ if (fieldFilter.operator === FieldOperatorEnum.NOT_EQUAL) {
result = actualValue !== filterValue;
}
- if (fieldFilter.operator === 'LARGER') {
+ if (fieldFilter.operator === FieldOperatorEnum.LARGER) {
result = actualValue > filterValue;
}
- if (fieldFilter.operator === 'SMALLER') {
+ if (fieldFilter.operator === FieldOperatorEnum.SMALLER) {
result = actualValue < filterValue;
}
- if (fieldFilter.operator === 'LARGER_EQUAL') {
+ if (fieldFilter.operator === FieldOperatorEnum.LARGER_EQUAL) {
result = actualValue >= filterValue;
}
- if (fieldFilter.operator === 'SMALLER_EQUAL') {
+ if (fieldFilter.operator === FieldOperatorEnum.SMALLER_EQUAL) {
result = actualValue <= filterValue;
}
- if (fieldFilter.operator === 'NOT_IN') {
+ if (fieldFilter.operator === FieldOperatorEnum.NOT_IN) {
result = !actualValue.includes(filterValue);
}
- if (fieldFilter.operator === 'IN') {
+ if (fieldFilter.operator === FieldOperatorEnum.IN) {
result = actualValue.includes(filterValue);
}
- if (fieldFilter.operator === 'IS_DEFINED') {
+ if (fieldFilter.operator === FieldOperatorEnum.IS_DEFINED) {
result = actualValue !== undefined;
}
const actualValueString: string = Array.isArray(actualValue)
@@ -59,7 +60,7 @@ export abstract class Filter {
field: fieldFilter.field,
expected: `${filterValue}`,
actual: `${actualValueString}`,
- operator: `${fieldFilter.operator}`,
+ operator: fieldFilter.operator,
passed: result,
});
diff --git a/packages/cli/README.MD b/packages/cli/README.MD
index 8d0a2246e89..1569c96be55 100644
--- a/packages/cli/README.MD
+++ b/packages/cli/README.MD
@@ -30,7 +30,7 @@ The ultimate service for managing multi-channel notifications with a single API.
·
Roadmap
·
- Twitter
+ X
## ⭐️ Why
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 8e11559583b..20f9fe6adaa 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "novu",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "On-Boarding Cli",
"main": "index.js",
"scripts": {
@@ -31,7 +31,7 @@
"typescript": "4.9.5"
},
"dependencies": {
- "@novu/shared": "^0.20.0",
+ "@novu/shared": "^0.21.0",
"analytics-node": "^6.2.0",
"axios": "^1.3.3",
"chalk": "4.1.2",
diff --git a/packages/client/package.json b/packages/client/package.json
index 6007da9b40a..9145abc46b0 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/client",
- "version": "0.20.0",
+ "version": "0.21.0",
"repository": "https://github.com/novuhq/novu",
"description": "API client to be used in end user environments",
"main": "dist/cjs/index.js",
@@ -44,7 +44,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/shared": "^0.20.0"
+ "@novu/shared": "^0.21.0"
},
"devDependencies": {
"@types/jest": "29.5.2",
diff --git a/packages/headless/package.json b/packages/headless/package.json
index 627002df67a..7e4545a0316 100644
--- a/packages/headless/package.json
+++ b/packages/headless/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/headless",
- "version": "0.20.0",
+ "version": "0.21.0",
"repository": "https://github.com/novuhq/novu",
"description": "Headless client package that is a thin abstraction layer over the API client + state and socket management",
"keywords": [],
@@ -28,8 +28,8 @@
"node": ">=10"
},
"dependencies": {
- "@novu/client": "^0.20.0",
- "@novu/shared": "^0.20.0",
+ "@novu/client": "^0.21.0",
+ "@novu/shared": "^0.21.0",
"@tanstack/query-core": "^4.15.1",
"socket.io-client": "4.7.2"
},
@@ -47,4 +47,4 @@
"prettier": {
"singleQuote": true
}
-}
\ No newline at end of file
+}
diff --git a/packages/nest/package.json b/packages/nest/package.json
index 08026e9fc96..4787a20965f 100644
--- a/packages/nest/package.json
+++ b/packages/nest/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/nest",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A nestjs wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -36,7 +36,7 @@
},
"dependencies": {
"@nestjs/common": "^8.2.0",
- "@novu/stateless": "^0.20.0"
+ "@novu/stateless": "^0.21.0"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^1.0.1",
diff --git a/packages/node/README.md b/packages/node/README.md
index 1cf9b61e242..59b643315dc 100644
--- a/packages/node/README.md
+++ b/packages/node/README.md
@@ -27,7 +27,7 @@ The ultimate service for managing multi-channel notifications with a single API.
·
Roadmap
·
- Twitter
+ X
·
Notifications Directory .
Read our blog
diff --git a/packages/node/package.json b/packages/node/package.json
index 7e2d8e9181b..45b76671a4e 100644
--- a/packages/node/package.json
+++ b/packages/node/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/node",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "Notification Management Framework",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -42,7 +42,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/shared": "^0.20.0",
+ "@novu/shared": "^0.21.0",
"handlebars": "^4.7.7",
"lodash.get": "^4.4.2",
"lodash.merge": "^4.6.2"
diff --git a/packages/node/src/lib/integrations/integrations.spec.ts b/packages/node/src/lib/integrations/integrations.spec.ts
index 052be65ed21..306d16bf57b 100644
--- a/packages/node/src/lib/integrations/integrations.spec.ts
+++ b/packages/node/src/lib/integrations/integrations.spec.ts
@@ -1,6 +1,6 @@
import { Novu } from '../novu';
import axios from 'axios';
-import { ChannelTypeEnum } from '@novu/shared';
+import { ChannelTypeEnum, FieldLogicalOperatorEnum } from '@novu/shared';
const mockConfig = {
apiKey: '1234',
@@ -38,7 +38,12 @@ describe('test use of novus node package - Integrations class', () => {
channel: ChannelTypeEnum.EMAIL,
check: true,
conditions: [
- { isNegated: false, type: 'GROUP', value: 'AND', children: [] },
+ {
+ isNegated: false,
+ type: 'GROUP',
+ value: FieldLogicalOperatorEnum.AND,
+ children: [],
+ },
],
});
@@ -53,7 +58,12 @@ describe('test use of novus node package - Integrations class', () => {
channel: ChannelTypeEnum.EMAIL,
check: true,
conditions: [
- { isNegated: false, type: 'GROUP', value: 'AND', children: [] },
+ {
+ isNegated: false,
+ type: 'GROUP',
+ value: FieldLogicalOperatorEnum.AND,
+ children: [],
+ },
],
});
});
@@ -89,7 +99,12 @@ describe('test use of novus node package - Integrations class', () => {
secretKey: 'newApiSecret',
},
conditions: [
- { isNegated: false, type: 'GROUP', value: 'AND', children: [] },
+ {
+ isNegated: false,
+ type: 'GROUP',
+ value: FieldLogicalOperatorEnum.AND,
+ children: [],
+ },
],
});
@@ -104,7 +119,12 @@ describe('test use of novus node package - Integrations class', () => {
secretKey: 'newApiSecret',
},
conditions: [
- { isNegated: false, type: 'GROUP', value: 'AND', children: [] },
+ {
+ isNegated: false,
+ type: 'GROUP',
+ value: FieldLogicalOperatorEnum.AND,
+ children: [],
+ },
],
}
);
diff --git a/packages/notification-center-angular/package.json b/packages/notification-center-angular/package.json
index 51ade0ef60b..933b04e5b9a 100644
--- a/packages/notification-center-angular/package.json
+++ b/packages/notification-center-angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/angular-workspace",
- "version": "0.0.0",
+ "version": "0.21.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
@@ -19,7 +19,7 @@
"@angular/platform-browser": "^16.2.0",
"@angular/platform-browser-dynamic": "^16.2.0",
"@angular/router": "^16.2.0",
- "@novu/notification-center": "^0.20.0",
+ "@novu/notification-center": "^0.21.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"zone.js": "~0.13.0"
diff --git a/packages/notification-center-angular/projects/notification-center-angular/package.json b/packages/notification-center-angular/projects/notification-center-angular/package.json
index 0d64cb4dddc..8631d3e0ca2 100644
--- a/packages/notification-center-angular/projects/notification-center-angular/package.json
+++ b/packages/notification-center-angular/projects/notification-center-angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/notification-center-angular",
- "version": "0.20.0",
+ "version": "0.21.0",
"peerDependencies": {
"@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0",
"@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0",
@@ -8,7 +8,7 @@
"@angular/platform-browser-dynamic": "^15.0.0 || ^16.0.0 || ^17.0.0"
},
"dependencies": {
- "@novu/notification-center": "^0.20.0",
+ "@novu/notification-center": "^0.21.0",
"@types/react": "^17.0.1",
"react": "^17.0.1",
"react-dom": "^17.0.1",
diff --git a/packages/notification-center-vue/package.json b/packages/notification-center-vue/package.json
index 475cb8e16cf..e45738f6939 100644
--- a/packages/notification-center-vue/package.json
+++ b/packages/notification-center-vue/package.json
@@ -1,7 +1,7 @@
{
"name": "@novu/notification-center-vue",
"sideEffects": false,
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "Vue specific wrapper for notification-center",
"repository": {
"type": "git",
@@ -22,7 +22,7 @@
"dependencies": {
"@emotion/css": "^11.10.5",
"@novu/floating-vue": "^2.0.3",
- "@novu/notification-center": "^0.20.0",
+ "@novu/notification-center": "^0.21.0",
"react": "^17.0.1",
"react-dom": "^17.0.1"
},
diff --git a/packages/notification-center/package.json b/packages/notification-center/package.json
index 54c73362634..c140c7b9fe6 100644
--- a/packages/notification-center/package.json
+++ b/packages/notification-center/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/notification-center",
- "version": "0.20.0",
+ "version": "0.21.0",
"repository": "https://github.com/novuhq/novu",
"description": "",
"scripts": {
@@ -80,8 +80,8 @@
"@emotion/styled": "^11.6.0",
"@mantine/core": "^5.7.1",
"@mantine/hooks": "^5.7.1",
- "@novu/client": "^0.20.0",
- "@novu/shared": "^0.20.0",
+ "@novu/client": "^0.21.0",
+ "@novu/shared": "^0.21.0",
"@tanstack/react-query": "^4.20.4",
"acorn-jsx": "^5.3.2",
"axios": "^1.4.0",
@@ -93,4 +93,4 @@
"tslib": "^2.3.1",
"webfontloader": "^1.6.28"
}
-}
\ No newline at end of file
+}
diff --git a/packages/notification-center/src/i18n/lang.ts b/packages/notification-center/src/i18n/lang.ts
index 98b89259625..9c0e4f62dcd 100644
--- a/packages/notification-center/src/i18n/lang.ts
+++ b/packages/notification-center/src/i18n/lang.ts
@@ -31,9 +31,10 @@ import { ID } from './languages/id';
import { IG } from './languages/ig';
import { IT } from './languages/it';
import { JA } from './languages/ja';
-import { KN } from './languages/kn';
+import { KA } from './languages/ka';
import { KK } from './languages/kk';
import { KM } from './languages/km';
+import { KN } from './languages/kn';
import { KO } from './languages/ko';
import { KU } from './languages/ku';
import { LO } from './languages/lo';
@@ -120,6 +121,7 @@ export const TRANSLATIONS: Record = {
ig: IG,
it: IT,
ja: JA,
+ ka: KA,
kk: KK,
km: KM,
kn: KN,
@@ -206,6 +208,7 @@ export type I18NLanguage =
| 'ig'
| 'it'
| 'ja'
+ | 'ka'
| 'kk'
| 'km'
| 'kn'
diff --git a/packages/notification-center/src/i18n/languages/ka.ts b/packages/notification-center/src/i18n/languages/ka.ts
new file mode 100644
index 00000000000..1864b3be313
--- /dev/null
+++ b/packages/notification-center/src/i18n/languages/ka.ts
@@ -0,0 +1,15 @@
+import { ITranslationEntry } from '../lang';
+
+export const KA: ITranslationEntry = {
+ translations: {
+ notifications: 'ნოტიფიკაციები',
+ markAllAsRead: 'მონიშნე ყველა როგორც წაკითხული',
+ poweredBy: 'იკვებება ბყ',
+ settings: 'პარამეტრები',
+ removeMessage: 'შეტყობინების წაშლა',
+ markAsRead: 'წაკითხულად მონიშვნა',
+ markAsUnRead: 'წაუკითხავად მონიშვნა',
+ noNewNotification: 'აქ სანახავი ჯერ არაფერია ახალი',
+ },
+ lang: 'ka',
+};
diff --git a/packages/stateless/package.json b/packages/stateless/package.json
index 366c73d78c9..c66d58b7334 100644
--- a/packages/stateless/package.json
+++ b/packages/stateless/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/stateless",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "Notification Management Framework",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7db83cc83a5..d6f00528d6f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -277,22 +277,22 @@ importers:
specifier: ^10.0.1
version: 10.0.1(@nestjs/axios@2.0.0)(@nestjs/common@10.2.2)(@nestjs/core@10.2.2)(reflect-metadata@0.1.13)(rxjs@7.8.1)
'@novu/application-generic':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/application-generic
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/dal
'@novu/node':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/node
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@sendgrid/mail':
specifier: ^7.6.0
@@ -489,10 +489,10 @@ importers:
apps/inbound-mail:
dependencies:
'@novu/application-generic':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/application-generic
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@sentry/node':
specifier: ^7.12.1
@@ -544,7 +544,7 @@ importers:
version: 3.10.0
devDependencies:
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@types/chai':
specifier: ^4.2.11
@@ -626,7 +626,7 @@ importers:
version: 2.9.0
'@emotion/babel-plugin':
specifier: ^11.7.2
- version: 11.11.0
+ version: 11.10.6
'@emotion/react':
specifier: ^11.7.1
version: 11.10.6(@types/react@17.0.53)(react@17.0.2)
@@ -676,13 +676,13 @@ importers:
specifier: ^5.7.1
version: 5.10.5(@mantine/core@5.10.5)(@mantine/hooks@5.10.5)(react-dom@17.0.2)(react@17.0.2)
'@novu/design-system':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/design-system
'@novu/notification-center':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/notification-center
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@segment/analytics-next':
specifier: ^1.48.0
@@ -899,10 +899,10 @@ importers:
specifier: ^7.20.13
version: 7.21.0
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/dal
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@storybook/addon-actions':
specifier: ^7.4.2
@@ -1001,19 +1001,19 @@ importers:
specifier: ^10.0.1
version: 10.0.1(@nestjs/axios@2.0.0)(@nestjs/common@10.2.2)(@nestjs/core@10.2.2)(reflect-metadata@0.1.13)(rxjs@7.8.1)
'@novu/application-generic':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/application-generic
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/dal
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@sentry/node':
specifier: ^7.66.0
@@ -1143,10 +1143,10 @@ importers:
specifier: 4.2.12
version: 4.2.12(react@17.0.2)
'@novu/notification-center':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/notification-center
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
antd:
specifier: ^4.10.0
@@ -1234,10 +1234,10 @@ importers:
specifier: ^6.0.0
version: 6.3.1
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/dal
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@types/jest':
specifier: ^29.5.0
@@ -1321,19 +1321,19 @@ importers:
specifier: ^10.0.1
version: 10.0.1(@nestjs/axios@2.0.0)(@nestjs/common@10.2.2)(@nestjs/core@10.2.2)(reflect-metadata@0.1.13)(rxjs@7.8.1)
'@novu/application-generic':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/application-generic
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/dal
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@sentry/node':
specifier: ^7.40.0
@@ -1499,16 +1499,16 @@ importers:
specifier: ^10.2.2
version: 10.2.2(@nestjs/common@10.2.2)(@nestjs/core@10.2.2)(@nestjs/platform-socket.io@10.2.2)(reflect-metadata@0.1.13)(rxjs@7.8.1)
'@novu/application-generic':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/application-generic
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/dal
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@sentry/node':
specifier: ^7.30.0
@@ -1635,7 +1635,7 @@ importers:
specifier: ^6.0.0
version: 6.3.1
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../shared
'@sendgrid/mail':
specifier: ^7.4.2
@@ -1756,10 +1756,10 @@ importers:
specifier: ^5.7.1
version: 5.10.5(@mantine/core@5.10.5)(@mantine/hooks@5.10.5)(react-dom@17.0.2)(react@17.0.2)
'@novu/client':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/client
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../shared
react-hook-form:
specifier: 7.43.9
@@ -1844,7 +1844,7 @@ importers:
libs/embed:
dependencies:
'@novu/notification-center':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/notification-center
'@types/iframe-resizer':
specifier: ^3.5.8
@@ -1972,10 +1972,10 @@ importers:
specifier: ^6.0.0
version: 6.3.1
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../dal
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../shared
JSONStream:
specifier: ^1.3.5
@@ -2096,157 +2096,160 @@ importers:
specifier: '>=10'
version: 10.2.2(@nestjs/common@10.2.2)(@nestjs/core@10.2.2)(@nestjs/platform-express@10.2.2)
'@novu/africas-talking':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/africas-talking
'@novu/apns':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/apns
'@novu/bandwidth':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/bandwidth
'@novu/burst-sms':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/burst-sms
'@novu/clickatell':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/clickatell
'@novu/clicksend':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/clicksend
'@novu/dal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/dal
'@novu/discord':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/discord
'@novu/email-webhook':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/email-webhook
'@novu/emailjs':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/emailjs
'@novu/expo':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/expo
'@novu/fcm':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/fcm
'@novu/firetext':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/firetext
'@novu/forty-six-elks':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/forty-six-elks
+ '@novu/generic-sms':
+ specifier: ^0.21.0
+ version: link:../../providers/generic-sms
'@novu/gupshup':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/gupshup
'@novu/infobip':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/infobip
'@novu/kannel':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/kannel
'@novu/mailersend':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/mailersend
'@novu/mailgun':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/mailgun
'@novu/mailjet':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/mailjet
'@novu/mailtrap':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/mailtrap
'@novu/mandrill':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/mandrill
'@novu/maqsam':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/maqsam
'@novu/mattermost':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/mattermost
'@novu/ms-teams':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/ms-teams
'@novu/netcore':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/netcore
'@novu/nodemailer':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/nodemailer
'@novu/one-signal':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/one-signal
'@novu/outlook365':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/outlook365
'@novu/plivo':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/plivo
'@novu/plunk':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/plunk
'@novu/postmark':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/postmark
'@novu/push-webhook':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/push-webhook
'@novu/pushpad':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/pushpad
'@novu/resend':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/resend
'@novu/ryver':
- specifier: ^0.20.0-alpha.0
+ specifier: ^0.21.0
version: link:../../providers/ryver
'@novu/sendchamp':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/sendchamp
'@novu/sendgrid':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/sendgrid
'@novu/sendinblue':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/sendinblue
'@novu/ses':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/ses
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@novu/slack':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/slack
'@novu/sms-central':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/sms-central
'@novu/sms77':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/sms77
'@novu/sns':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/sns
'@novu/sparkpost':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/sparkpost
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../stateless
'@novu/telnyx':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/telnyx
'@novu/termii':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/termii
'@novu/testing':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/testing
'@novu/twilio':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../providers/twilio
'@sentry/node':
specifier: ^7.12.1
@@ -2362,7 +2365,7 @@ importers:
packages/cli:
dependencies:
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
analytics-node:
specifier: ^6.2.0
@@ -2432,7 +2435,7 @@ importers:
packages/client:
dependencies:
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
devDependencies:
'@types/jest':
@@ -2466,10 +2469,10 @@ importers:
packages/headless:
dependencies:
'@novu/client':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../client
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@tanstack/query-core':
specifier: ^4.15.1
@@ -2512,7 +2515,7 @@ importers:
specifier: ^8.2.0
version: 8.4.7(reflect-metadata@0.1.13)(rxjs@7.8.1)
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../stateless
devDependencies:
'@istanbuljs/nyc-config-typescript':
@@ -2564,7 +2567,7 @@ importers:
packages/node:
dependencies:
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
handlebars:
specifier: ^4.7.7
@@ -2640,10 +2643,10 @@ importers:
specifier: ^5.7.1
version: 5.10.5(react@17.0.2)
'@novu/client':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../client
'@novu/shared':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../libs/shared
'@tanstack/react-query':
specifier: ^4.20.4
@@ -2818,7 +2821,7 @@ importers:
specifier: ^16.2.0
version: 16.2.10(@angular/common@16.2.10)(@angular/core@16.2.10)(@angular/platform-browser@16.2.10)(rxjs@7.8.1)
'@novu/notification-center':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../notification-center
rxjs:
specifier: ~7.8.0
@@ -2882,7 +2885,7 @@ importers:
specifier: ^15.0.0 || ^16.0.0 || ^17.0.0
version: 16.2.10(@angular/common@16.2.10)(@angular/compiler@16.2.10)(@angular/core@16.2.10)(@angular/platform-browser@16.2.10)
'@novu/notification-center':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../../notification-center
'@types/react':
specifier: ^17.0.1
@@ -2906,7 +2909,7 @@ importers:
specifier: ^2.0.3
version: 2.0.3(vue@3.2.47)
'@novu/notification-center':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../notification-center
react:
specifier: ^17.0.1
@@ -3019,7 +3022,7 @@ importers:
providers/africas-talking:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
africastalking:
specifier: ^0.6.2
@@ -3062,7 +3065,7 @@ importers:
providers/apns:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@parse/node-apn':
specifier: ^5.2.3
@@ -3117,7 +3120,7 @@ importers:
specifier: ^4.1.1
version: 4.1.2
'@novu/stateless':
- specifier: 0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
devDependencies:
'@istanbuljs/nyc-config-typescript':
@@ -3157,7 +3160,7 @@ importers:
providers/burst-sms:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.3
@@ -3218,7 +3221,7 @@ importers:
providers/clickatell:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.3
@@ -3313,7 +3316,7 @@ importers:
providers/discord:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.3
@@ -3411,7 +3414,7 @@ importers:
providers/emailjs:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
emailjs:
specifier: ^3.6.0
@@ -3466,7 +3469,7 @@ importers:
providers/expo:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
expo-server-sdk:
specifier: ^3.6.0
@@ -3521,7 +3524,7 @@ importers:
providers/fcm:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
firebase-admin:
specifier: ^11.10.1
@@ -3585,7 +3588,7 @@ importers:
providers/firetext:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
node-fetch:
specifier: ^3.2.10
@@ -3649,7 +3652,7 @@ importers:
providers/forty-six-elks:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.4
@@ -3689,10 +3692,53 @@ importers:
specifier: 4.9.5
version: 4.9.5
+ providers/generic-sms:
+ dependencies:
+ '@novu/stateless':
+ specifier: 0.16.3
+ version: 0.16.3
+ axios:
+ specifier: ^1.5.0
+ version: 1.5.1
+ devDependencies:
+ '@istanbuljs/nyc-config-typescript':
+ specifier: ~1.0.1
+ version: 1.0.2(nyc@15.1.0)
+ '@types/jest':
+ specifier: ~29.5.0
+ version: 29.5.2
+ cspell:
+ specifier: ~6.19.2
+ version: 6.19.2
+ jest:
+ specifier: ~27.5.1
+ version: 27.5.1(ts-node@10.9.1)
+ npm-run-all:
+ specifier: ^4.1.5
+ version: 4.1.5
+ nyc:
+ specifier: ~15.1.0
+ version: 15.1.0
+ prettier:
+ specifier: ~2.8.0
+ version: 2.8.7
+ rimraf:
+ specifier: ~3.0.2
+ version: 3.0.2
+ ts-jest:
+ specifier: ~27.1.5
+ version: 27.1.5(@babel/core@7.23.2)(@types/jest@29.5.2)(jest@27.5.1)(typescript@4.9.5)
+ ts-node:
+ specifier: ~10.9.1
+ version: 10.9.1(@types/node@14.18.42)(typescript@4.9.5)
+ typescript:
+ specifier: 4.9.5
+ version: 4.9.5
+
providers/gupshup:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
node-fetch:
specifier: ^3.2.10
@@ -3753,7 +3799,7 @@ importers:
specifier: ^0.2.0
version: 0.2.0
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
devDependencies:
'@istanbuljs/nyc-config-typescript':
@@ -3805,7 +3851,7 @@ importers:
providers/kannel:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^0.27.2
@@ -3860,7 +3906,7 @@ importers:
providers/mailersend:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
mailersend:
specifier: ^1.3.1
@@ -3915,7 +3961,7 @@ importers:
providers/mailgun:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
form-data:
specifier: ^4.0.0
@@ -3976,7 +4022,7 @@ importers:
providers/mailjet:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
node-mailjet:
specifier: ^6.0.4
@@ -4034,7 +4080,7 @@ importers:
providers/mailtrap:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
mailtrap:
specifier: ^3.1.1
@@ -4080,7 +4126,7 @@ importers:
specifier: ^1.0.46
version: 1.0.50
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
devDependencies:
'@istanbuljs/nyc-config-typescript':
@@ -4138,7 +4184,7 @@ importers:
providers/maqsam:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.4
@@ -4187,7 +4233,7 @@ importers:
providers/mattermost:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.3
@@ -4288,7 +4334,7 @@ importers:
providers/netcore:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
pepipost:
specifier: ^5.0.0
@@ -4343,7 +4389,7 @@ importers:
providers/nexmo:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@vonage/server-sdk':
specifier: ^2.10.10
@@ -4398,7 +4444,7 @@ importers:
providers/nodemailer:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
nodemailer:
specifier: ^6.6.5
@@ -4456,7 +4502,7 @@ importers:
providers/one-signal:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
onesignal-node:
specifier: ^3.4.0
@@ -4499,7 +4545,7 @@ importers:
providers/outlook365:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
nodemailer:
specifier: ^6.6.5
@@ -4557,7 +4603,7 @@ importers:
providers/plivo:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
plivo:
specifier: ^4.22.4
@@ -4612,7 +4658,7 @@ importers:
providers/plunk:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@plunk/node':
specifier: 2.0.0
@@ -4655,7 +4701,7 @@ importers:
providers/postmark:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.6
@@ -4713,7 +4759,7 @@ importers:
providers/push-webhook:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.5
@@ -4756,7 +4802,7 @@ importers:
providers/pushpad:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
pushpad:
specifier: 1.0.0
@@ -4799,7 +4845,7 @@ importers:
providers/resend:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
resend:
specifier: ^0.11.0
@@ -4854,7 +4900,7 @@ importers:
providers/ryver:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.3
@@ -4897,7 +4943,7 @@ importers:
providers/sendchamp:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.4.0
@@ -4940,7 +4986,7 @@ importers:
providers/sendgrid:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@sendgrid/mail':
specifier: ^7.4.6
@@ -4995,7 +5041,7 @@ importers:
providers/sendinblue:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
'@sendinblue/client':
specifier: ^3.0.1
@@ -5053,7 +5099,7 @@ importers:
specifier: 3.382.0
version: 3.382.0
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
nodemailer:
specifier: ^6.6.5
@@ -5108,7 +5154,7 @@ importers:
providers/slack:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
axios:
specifier: ^1.3.3
@@ -5206,7 +5252,7 @@ importers:
providers/sms77:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
node-fetch:
specifier: ^2.6.7
@@ -5270,7 +5316,7 @@ importers:
specifier: ^3.382.0
version: 3.388.0
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
devDependencies:
'@istanbuljs/nyc-config-typescript':
@@ -5322,7 +5368,7 @@ importers:
providers/sparkpost:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
sparkpost:
specifier: ^2.1.4
@@ -5380,7 +5426,7 @@ importers:
providers/telnyx:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
telnyx:
specifier: ^1.23.0
@@ -5435,7 +5481,7 @@ importers:
providers/termii:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
node-fetch:
specifier: ^3.2.10
@@ -5493,7 +5539,7 @@ importers:
providers/twilio:
dependencies:
'@novu/stateless':
- specifier: ^0.20.0
+ specifier: ^0.21.0
version: link:../../packages/stateless
twilio:
specifier: ^4.14.1
@@ -7300,11 +7346,11 @@ packages:
'@babel/generator': 7.23.0
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-module-transforms': 7.22.20(@babel/core@7.21.4)
- '@babel/helpers': 7.22.11
+ '@babel/helpers': 7.21.0
'@babel/parser': 7.22.16
'@babel/template': 7.22.15
- '@babel/traverse': 7.23.2
- '@babel/types': 7.23.0
+ '@babel/traverse': 7.21.4
+ '@babel/types': 7.22.19
convert-source-map: 1.9.0
debug: 4.3.4(supports-color@8.1.1)
gensync: 1.0.0-beta.2
@@ -7324,10 +7370,10 @@ packages:
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11)
'@babel/helpers': 7.22.11
- '@babel/parser': 7.23.0
+ '@babel/parser': 7.22.16
'@babel/template': 7.22.15
- '@babel/traverse': 7.23.2
- '@babel/types': 7.23.0
+ '@babel/traverse': 7.22.11
+ '@babel/types': 7.22.19
convert-source-map: 1.9.0
debug: 4.3.4(supports-color@8.1.1)
gensync: 1.0.0-beta.2
@@ -7335,6 +7381,7 @@ packages:
semver: 6.3.1
transitivePeerDependencies:
- supports-color
+ dev: true
/@babel/core@7.22.9:
resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==}
@@ -7395,6 +7442,15 @@ packages:
semver: 6.3.1
dev: true
+ /@babel/generator@7.22.10:
+ resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.0
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.19
+ jsesc: 2.5.2
+
/@babel/generator@7.22.9:
resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==}
engines: {node: '>=6.9.0'}
@@ -7418,7 +7474,7 @@ packages:
resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
dev: true
/@babel/helper-annotate-as-pure@7.22.5:
@@ -7461,24 +7517,6 @@ packages:
semver: 6.3.1
dev: true
- /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-member-expression-to-functions': 7.22.15
- '@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.11)
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- semver: 6.3.1
- dev: true
-
/@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
engines: {node: '>=6.9.0'}
@@ -7514,18 +7552,6 @@ packages:
'@babel/helper-split-export-declaration': 7.22.6
semver: 6.3.1
- /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-annotate-as-pure': 7.22.5
- regexpu-core: 5.3.2
- semver: 6.3.1
- dev: true
-
/@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
engines: {node: '>=6.9.0'}
@@ -7549,21 +7575,6 @@ packages:
regexpu-core: 5.3.2
semver: 6.3.1
- /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.22.11):
- resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-plugin-utils': 7.22.5
- debug: 4.3.4(supports-color@8.1.1)
- lodash.debounce: 4.0.8
- resolve: 1.22.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.22.9):
resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==}
peerDependencies:
@@ -7597,6 +7608,13 @@ packages:
resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
engines: {node: '>=6.9.0'}
+ /@babel/helper-function-name@7.22.5:
+ resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/types': 7.23.0
+
/@babel/helper-function-name@7.23.0:
resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
engines: {node: '>=6.9.0'}
@@ -7620,13 +7638,13 @@ packages:
resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
/@babel/helper-module-imports@7.22.15:
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
/@babel/helper-module-transforms@7.22.20(@babel/core@7.21.4):
resolution: {integrity: sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==}
@@ -7668,6 +7686,7 @@ packages:
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
+ dev: true
/@babel/helper-module-transforms@7.23.0(@babel/core@7.22.9):
resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==}
@@ -7710,18 +7729,6 @@ packages:
resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
engines: {node: '>=6.9.0'}
- /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.22.11):
- resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-wrap-function': 7.22.20
- dev: true
-
/@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.22.9):
resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
engines: {node: '>=6.9.0'}
@@ -7757,18 +7764,6 @@ packages:
'@babel/helper-optimise-call-expression': 7.22.5
dev: true
- /@babel/helper-replace-supers@7.22.20(@babel/core@7.22.11):
- resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-member-expression-to-functions': 7.22.15
- '@babel/helper-optimise-call-expression': 7.22.5
- dev: true
-
/@babel/helper-replace-supers@7.22.20(@babel/core@7.22.9):
resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
engines: {node: '>=6.9.0'}
@@ -7802,7 +7797,7 @@ packages:
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
/@babel/helper-split-export-declaration@7.22.6:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
@@ -7831,10 +7826,21 @@ packages:
resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-function-name': 7.23.0
+ '@babel/helper-function-name': 7.22.5
'@babel/template': 7.22.15
'@babel/types': 7.23.0
+ /@babel/helpers@7.21.0:
+ resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.2
+ '@babel/types': 7.23.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@babel/helpers@7.22.11:
resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==}
engines: {node: '>=6.9.0'}
@@ -7844,6 +7850,7 @@ packages:
'@babel/types': 7.23.0
transitivePeerDependencies:
- supports-color
+ dev: true
/@babel/helpers@7.23.2:
resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==}
@@ -7868,7 +7875,7 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
/@babel/parser@7.23.0:
resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==}
@@ -7877,16 +7884,6 @@ packages:
dependencies:
'@babel/types': 7.23.0
- /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==}
engines: {node: '>=6.9.0'}
@@ -7906,18 +7903,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.13.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==}
engines: {node: '>=6.9.0'}
@@ -7966,6 +7951,20 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
+ /@babel/plugin-proposal-decorators@7.21.0(@babel/core@7.23.2):
+ resolution: {integrity: sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.2
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.2)
+ dev: true
+
/@babel/plugin-proposal-decorators@7.23.2(@babel/core@7.23.2):
resolution: {integrity: sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg==}
engines: {node: '>=6.9.0'}
@@ -8038,15 +8037,6 @@ packages:
'@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
dev: true
- /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.11):
- resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- dev: true
-
/@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9):
resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
engines: {node: '>=6.9.0'}
@@ -8076,12 +8066,12 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.11):
+ /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4):
resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8102,12 +8092,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.11):
+ /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.4):
resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8120,12 +8110,12 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.11):
+ /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4):
resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8146,16 +8136,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.9):
resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
engines: {node: '>=6.9.0'}
@@ -8185,15 +8165,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.11):
- resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.9):
resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
peerDependencies:
@@ -8211,15 +8182,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.11):
- resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.9):
resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
peerDependencies:
@@ -8247,16 +8209,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==}
engines: {node: '>=6.9.0'}
@@ -8276,16 +8228,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==}
engines: {node: '>=6.9.0'}
@@ -8305,12 +8247,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.11):
+ /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.4):
resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8331,12 +8273,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.11):
+ /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4):
resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8377,12 +8319,12 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.11):
+ /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4):
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8403,12 +8345,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.11):
+ /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4):
resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8429,12 +8371,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.11):
+ /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4):
resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8455,12 +8397,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.11):
+ /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4):
resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8481,12 +8423,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.11):
+ /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4):
resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8507,12 +8449,12 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.11):
+ /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4):
resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8533,16 +8475,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.9):
resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
engines: {node: '>=6.9.0'}
@@ -8562,13 +8494,13 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.11):
+ /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4):
resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -8621,17 +8553,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.11):
- resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.9):
resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
engines: {node: '>=6.9.0'}
@@ -8653,16 +8574,6 @@ packages:
'@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==}
engines: {node: '>=6.9.0'}
@@ -8682,19 +8593,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.22.11):
- resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.11)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.22.9):
resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==}
engines: {node: '>=6.9.0'}
@@ -8720,18 +8618,6 @@ packages:
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2)
'@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2)
- /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-module-imports': 7.22.15
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==}
engines: {node: '>=6.9.0'}
@@ -8755,16 +8641,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2)
- /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==}
engines: {node: '>=6.9.0'}
@@ -8784,16 +8660,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.22.11):
- resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.22.9):
resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==}
engines: {node: '>=6.9.0'}
@@ -8813,17 +8679,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==}
engines: {node: '>=6.9.0'}
@@ -8845,18 +8700,6 @@ packages:
'@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==}
engines: {node: '>=6.9.0'}
@@ -8880,24 +8723,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2)
- /@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.11)
- '@babel/helper-split-export-declaration': 7.22.6
- globals: 11.12.0
- dev: true
-
/@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==}
engines: {node: '>=6.9.0'}
@@ -8908,7 +8733,7 @@ packages:
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
+ '@babel/helper-function-name': 7.22.5
'@babel/helper-optimise-call-expression': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.9)
@@ -8926,24 +8751,13 @@ packages:
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
+ '@babel/helper-function-name': 7.22.5
'@babel/helper-optimise-call-expression': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
'@babel/helper-split-export-declaration': 7.22.6
globals: 11.12.0
- /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/template': 7.22.15
- dev: true
-
/@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==}
engines: {node: '>=6.9.0'}
@@ -8965,16 +8779,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/template': 7.22.15
- /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.22.11):
- resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.22.9):
resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==}
engines: {node: '>=6.9.0'}
@@ -8994,17 +8798,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==}
engines: {node: '>=6.9.0'}
@@ -9026,16 +8819,6 @@ packages:
'@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==}
engines: {node: '>=6.9.0'}
@@ -9055,17 +8838,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==}
engines: {node: '>=6.9.0'}
@@ -9087,17 +8859,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
- /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==}
engines: {node: '>=6.9.0'}
@@ -9119,17 +8880,6 @@ packages:
'@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==}
engines: {node: '>=6.9.0'}
@@ -9162,16 +8912,6 @@ packages:
'@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.2)
dev: true
- /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==}
engines: {node: '>=6.9.0'}
@@ -9191,18 +8931,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==}
engines: {node: '>=6.9.0'}
@@ -9211,7 +8939,7 @@ packages:
dependencies:
'@babel/core': 7.22.9
'@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-function-name': 7.23.0
+ '@babel/helper-function-name': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -9223,19 +8951,8 @@ packages:
dependencies:
'@babel/core': 7.23.2
'@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-plugin-utils': 7.22.5
-
- /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
+ '@babel/helper-function-name': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.11)
- dev: true
/@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==}
@@ -9258,16 +8975,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2)
- /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==}
engines: {node: '>=6.9.0'}
@@ -9287,17 +8994,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==}
engines: {node: '>=6.9.0'}
@@ -9319,16 +9015,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2)
- /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==}
engines: {node: '>=6.9.0'}
@@ -9348,17 +9034,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.22.11):
- resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.22.9):
resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==}
engines: {node: '>=6.9.0'}
@@ -9392,18 +9067,6 @@ packages:
'@babel/helper-simple-access': 7.22.5
dev: true
- /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.11):
- resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-simple-access': 7.22.5
- dev: true
-
/@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.9):
resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==}
engines: {node: '>=6.9.0'}
@@ -9427,19 +9090,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-simple-access': 7.22.5
- /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.22.11):
- resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-validator-identifier': 7.22.20
- dev: true
-
/@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.22.9):
resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==}
engines: {node: '>=6.9.0'}
@@ -9465,17 +9115,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-validator-identifier': 7.22.20
- /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
engines: {node: '>=6.9.0'}
@@ -9497,17 +9136,6 @@ packages:
'@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
engines: {node: '>=6.9.0'}
@@ -9529,16 +9157,6 @@ packages:
'@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==}
engines: {node: '>=6.9.0'}
@@ -9558,17 +9176,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==}
engines: {node: '>=6.9.0'}
@@ -9590,17 +9197,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
- /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==}
engines: {node: '>=6.9.0'}
@@ -9622,20 +9218,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
- /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/compat-data': 7.23.2
- '@babel/core': 7.22.11
- '@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==}
engines: {node: '>=6.9.0'}
@@ -9663,17 +9245,6 @@ packages:
'@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2)
'@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2)
- /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==}
engines: {node: '>=6.9.0'}
@@ -9695,17 +9266,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
- /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==}
engines: {node: '>=6.9.0'}
@@ -9727,18 +9287,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2)
- /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.22.11):
- resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.22.9):
resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==}
engines: {node: '>=6.9.0'}
@@ -9762,16 +9310,6 @@ packages:
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
- /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.11):
- resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.9):
resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==}
engines: {node: '>=6.9.0'}
@@ -9791,17 +9329,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==}
engines: {node: '>=6.9.0'}
@@ -9823,19 +9350,6 @@ packages:
'@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.11):
- resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.11)
- dev: true
-
/@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.9):
resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==}
engines: {node: '>=6.9.0'}
@@ -9861,16 +9375,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
- /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==}
engines: {node: '>=6.9.0'}
@@ -9984,29 +9488,29 @@ packages:
'@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
dev: true
- /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.23.2):
- resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==}
+ /@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.23.2):
+ resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
- '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-annotate-as-pure': 7.18.6
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.11):
- resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==}
+ /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.23.2):
+ resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.23.2
+ '@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
- regenerator-transform: 0.15.2
dev: true
/@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.9):
@@ -10030,16 +9534,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
regenerator-transform: 0.15.2
- /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==}
engines: {node: '>=6.9.0'}
@@ -10092,16 +9586,6 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==}
engines: {node: '>=6.9.0'}
@@ -10121,17 +9605,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- dev: true
-
/@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==}
engines: {node: '>=6.9.0'}
@@ -10153,16 +9626,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==}
engines: {node: '>=6.9.0'}
@@ -10182,16 +9645,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==}
engines: {node: '>=6.9.0'}
@@ -10211,16 +9664,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==}
engines: {node: '>=6.9.0'}
@@ -10279,16 +9722,6 @@ packages:
'@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
dev: true
- /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.11):
- resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.9):
resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==}
engines: {node: '>=6.9.0'}
@@ -10308,17 +9741,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==}
engines: {node: '>=6.9.0'}
@@ -10340,17 +9762,6 @@ packages:
'@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==}
engines: {node: '>=6.9.0'}
@@ -10372,17 +9783,6 @@ packages:
'@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
'@babel/helper-plugin-utils': 7.22.5
- /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.11)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.9):
resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==}
engines: {node: '>=6.9.0'}
@@ -10503,97 +9903,6 @@ packages:
- supports-color
dev: true
- /@babel/preset-env@7.23.2(@babel/core@7.22.11):
- resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/compat-data': 7.23.2
- '@babel/core': 7.22.11
- '@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-validator-option': 7.22.15
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.22.11)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.22.11)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.11)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.11)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.11)
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.11)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.11)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.11)
- '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.22.11)
- '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.22.11)
- '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.22.11)
- '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.22.11)
- '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.22.11)
- '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.22.11)
- '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.22.11)
- '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.22.11)
- '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.22.11)
- '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.22.11)
- '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.11)
- '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.22.11)
- '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.22.11)
- '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.22.11)
- '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.11)
- '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.11)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.11)
- '@babel/types': 7.23.0
- babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.22.11)
- babel-plugin-polyfill-corejs3: 0.8.5(@babel/core@7.22.11)
- babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.22.11)
- core-js-compat: 3.32.2
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@babel/preset-env@7.23.2(@babel/core@7.23.2):
resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==}
engines: {node: '>=6.9.0'}
@@ -10709,17 +10018,6 @@ packages:
esutils: 2.0.3
dev: true
- /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.11):
- resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/types': 7.23.0
- esutils: 2.0.3
- dev: true
-
/@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.2):
resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
peerDependencies:
@@ -10742,7 +10040,7 @@ packages:
'@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.23.2)
'@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.23.2)
'@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.23.2)
- '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.23.2)
+ '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.23.2)
dev: true
/@babel/preset-react@7.22.15(@babel/core@7.23.2):
@@ -10836,7 +10134,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.22.13
- '@babel/parser': 7.23.0
+ '@babel/parser': 7.22.16
'@babel/types': 7.23.0
/@babel/template@7.22.5:
@@ -10848,6 +10146,41 @@ packages:
'@babel/types': 7.23.0
dev: true
+ /@babel/traverse@7.21.4:
+ resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.22.13
+ '@babel/generator': 7.23.0
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.22.5
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/parser': 7.23.0
+ '@babel/types': 7.23.0
+ debug: 4.3.4(supports-color@8.1.1)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/traverse@7.22.11:
+ resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.22.13
+ '@babel/generator': 7.23.0
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.22.5
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/parser': 7.22.16
+ '@babel/types': 7.23.0
+ debug: 4.3.4(supports-color@8.1.1)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
/@babel/traverse@7.23.2:
resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
engines: {node: '>=6.9.0'}
@@ -10872,7 +10205,6 @@ packages:
'@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
- dev: true
/@babel/types@7.23.0:
resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
@@ -12007,30 +11339,13 @@ packages:
find-root: 1.1.0
source-map: 0.5.7
stylis: 4.1.3
- dev: true
-
- /@emotion/babel-plugin@11.11.0:
- resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==}
- dependencies:
- '@babel/helper-module-imports': 7.22.15
- '@babel/runtime': 7.23.2
- '@emotion/hash': 0.9.1
- '@emotion/memoize': 0.8.1
- '@emotion/serialize': 1.1.2
- babel-plugin-macros: 3.1.0
- convert-source-map: 1.9.0
- escape-string-regexp: 4.0.0
- find-root: 1.1.0
- source-map: 0.5.7
- stylis: 4.2.0
- dev: false
/@emotion/cache@11.10.7:
resolution: {integrity: sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==}
dependencies:
- '@emotion/memoize': 0.8.1
+ '@emotion/memoize': 0.8.0
'@emotion/sheet': 1.2.1
- '@emotion/utils': 1.2.1
+ '@emotion/utils': 1.2.0
'@emotion/weak-memoize': 0.3.0
stylis: 4.1.3
dev: false
@@ -12040,7 +11355,7 @@ packages:
dependencies:
'@emotion/memoize': 0.7.5
'@emotion/sheet': 1.2.1
- '@emotion/utils': 1.2.1
+ '@emotion/utils': 1.2.0
'@emotion/weak-memoize': 0.2.5
stylis: 4.0.13
dev: false
@@ -12048,7 +11363,7 @@ packages:
/@emotion/css@11.10.6:
resolution: {integrity: sha512-88Sr+3heKAKpj9PCqq5A1hAmAkoSIvwEq1O2TwDij7fUtsJpdkV4jMTISSTouFeRvsGvXIpuSuDQ4C1YdfNGXw==}
dependencies:
- '@emotion/babel-plugin': 11.11.0
+ '@emotion/babel-plugin': 11.10.6
'@emotion/cache': 11.10.7
'@emotion/serialize': 1.1.1
'@emotion/sheet': 1.2.1
@@ -12061,15 +11376,11 @@ packages:
/@emotion/hash@0.9.0:
resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==}
- dev: true
-
- /@emotion/hash@0.9.1:
- resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
/@emotion/is-prop-valid@1.2.0:
resolution: {integrity: sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==}
dependencies:
- '@emotion/memoize': 0.8.1
+ '@emotion/memoize': 0.8.0
dev: false
/@emotion/memoize@0.7.5:
@@ -12078,10 +11389,6 @@ packages:
/@emotion/memoize@0.8.0:
resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==}
- dev: true
-
- /@emotion/memoize@0.8.1:
- resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
/@emotion/react@11.10.6(@types/react@17.0.53)(react@17.0.2):
resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==}
@@ -12093,7 +11400,7 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.21.0
- '@emotion/babel-plugin': 11.11.0
+ '@emotion/babel-plugin': 11.10.6
'@emotion/cache': 11.10.7
'@emotion/serialize': 1.1.1
'@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@17.0.2)
@@ -12114,11 +11421,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@emotion/babel-plugin': 11.11.0
+ '@emotion/babel-plugin': 11.10.6
'@emotion/cache': 11.10.7
- '@emotion/serialize': 1.1.2
+ '@emotion/serialize': 1.1.1
'@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@17.0.2)
- '@emotion/utils': 1.2.1
+ '@emotion/utils': 1.2.0
'@emotion/weak-memoize': 0.3.0
'@types/react': 17.0.62
hoist-non-react-statics: 3.3.2
@@ -12140,9 +11447,9 @@ packages:
'@babel/core': 7.23.2
'@babel/runtime': 7.23.2
'@emotion/cache': 11.10.7
- '@emotion/serialize': 1.1.2
+ '@emotion/serialize': 1.1.1
'@emotion/sheet': 1.2.1
- '@emotion/utils': 1.2.1
+ '@emotion/utils': 1.2.0
'@emotion/weak-memoize': 0.2.5
'@types/react': 17.0.62
hoist-non-react-statics: 3.3.2
@@ -12155,28 +11462,18 @@ packages:
'@emotion/hash': 0.8.0
'@emotion/memoize': 0.7.5
'@emotion/unitless': 0.7.5
- '@emotion/utils': 1.2.1
+ '@emotion/utils': 1.2.0
csstype: 3.1.2
dev: false
/@emotion/serialize@1.1.1:
resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==}
dependencies:
- '@emotion/hash': 0.9.1
- '@emotion/memoize': 0.8.1
- '@emotion/unitless': 0.8.1
- '@emotion/utils': 1.2.1
- csstype: 3.1.2
-
- /@emotion/serialize@1.1.2:
- resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==}
- dependencies:
- '@emotion/hash': 0.9.1
- '@emotion/memoize': 0.8.1
+ '@emotion/hash': 0.9.0
+ '@emotion/memoize': 0.8.0
'@emotion/unitless': 0.8.1
- '@emotion/utils': 1.2.1
+ '@emotion/utils': 1.2.0
csstype: 3.1.2
- dev: false
/@emotion/sheet@1.2.1:
resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==}
@@ -12193,7 +11490,7 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.21.0
- '@emotion/babel-plugin': 11.11.0
+ '@emotion/babel-plugin': 11.10.6
'@emotion/is-prop-valid': 1.2.0
'@emotion/react': 11.10.6(@types/react@17.0.53)(react@17.0.2)
'@emotion/serialize': 1.1.1
@@ -12213,8 +11510,8 @@ packages:
'@types/react':
optional: true
dependencies:
- '@babel/runtime': 7.21.0
- '@emotion/babel-plugin': 11.11.0
+ '@babel/runtime': 7.23.2
+ '@emotion/babel-plugin': 11.10.6
'@emotion/is-prop-valid': 1.2.0
'@emotion/react': 11.10.6(@types/react@17.0.62)(react@17.0.2)
'@emotion/serialize': 1.1.1
@@ -12244,10 +11541,6 @@ packages:
/@emotion/utils@1.2.0:
resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==}
- dev: false
-
- /@emotion/utils@1.2.1:
- resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
/@emotion/weak-memoize@0.2.5:
resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==}
@@ -13857,7 +13150,7 @@ packages:
resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.23.2
'@jest/types': 29.5.0
'@jridgewell/trace-mapping': 0.3.19
babel-plugin-istanbul: 6.1.1
@@ -17266,22 +16559,27 @@ packages:
/@protobufjs/aspromise@1.1.2:
resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+ requiresBuild: true
dev: false
/@protobufjs/base64@1.1.2:
resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+ requiresBuild: true
dev: false
/@protobufjs/codegen@2.0.4:
resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+ requiresBuild: true
dev: false
/@protobufjs/eventemitter@1.1.0:
resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+ requiresBuild: true
dev: false
/@protobufjs/fetch@1.1.0:
resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+ requiresBuild: true
dependencies:
'@protobufjs/aspromise': 1.1.2
'@protobufjs/inquire': 1.1.0
@@ -17289,22 +16587,27 @@ packages:
/@protobufjs/float@1.0.2:
resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+ requiresBuild: true
dev: false
/@protobufjs/inquire@1.1.0:
resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+ requiresBuild: true
dev: false
/@protobufjs/path@1.1.2:
resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+ requiresBuild: true
dev: false
/@protobufjs/pool@1.1.0:
resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+ requiresBuild: true
dev: false
/@protobufjs/utf8@1.1.0:
resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+ requiresBuild: true
dev: false
/@radix-ui/number@0.1.0:
@@ -17973,7 +17276,7 @@ packages:
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
dependencies:
- '@babel/runtime': 7.23.2
+ '@babel/runtime': 7.21.0
'@radix-ui/number': 1.0.0
'@radix-ui/primitive': 1.0.0
'@radix-ui/react-compose-refs': 1.0.0(react@17.0.2)
@@ -21472,9 +20775,9 @@ packages:
resolution: {integrity: sha512-WleObtC7OU2lT+pI2vTdXZPFMKDGbg3bkUJ+PG8+yqGg53ea5ZkwKWg9qHpXuiMkYDztqhbA8kYrny1GqFuVdg==}
hasBin: true
dependencies:
- '@babel/core': 7.22.11
- '@babel/preset-env': 7.23.2(@babel/core@7.22.11)
- '@babel/types': 7.23.0
+ '@babel/core': 7.23.2
+ '@babel/preset-env': 7.23.2(@babel/core@7.23.2)
+ '@babel/types': 7.22.19
'@ndelangen/get-tarball': 3.0.9
'@storybook/codemod': 7.4.2
'@storybook/core-common': 7.4.2
@@ -21543,7 +20846,7 @@ packages:
dependencies:
'@babel/core': 7.23.2
'@babel/preset-env': 7.23.2(@babel/core@7.23.2)
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
'@storybook/csf': 0.1.1
'@storybook/csf-tools': 7.4.2
'@storybook/node-logger': 7.4.2
@@ -21751,9 +21054,9 @@ packages:
/@storybook/csf-tools@7.4.2:
resolution: {integrity: sha512-5AvF2YRcYHIqQqskb3R8JvsmSWnNwkP0CGmP8Zq7zIfK/C+npKb/onv5YQlbSgh+2UrVxVdIDLc9AepBeXC3uQ==}
dependencies:
- '@babel/generator': 7.23.0
- '@babel/parser': 7.23.0
- '@babel/traverse': 7.23.2
+ '@babel/generator': 7.22.10
+ '@babel/parser': 7.22.16
+ '@babel/traverse': 7.22.11
'@babel/types': 7.23.0
'@storybook/csf': 0.1.1
'@storybook/types': 7.4.2
@@ -22596,7 +21899,7 @@ packages:
engines: {node: '>=10'}
dependencies:
'@babel/code-frame': 7.22.13
- '@babel/runtime': 7.23.2
+ '@babel/runtime': 7.21.0
'@types/aria-query': 4.2.2
aria-query: 4.2.2
chalk: 4.1.2
@@ -22771,7 +22074,7 @@ packages:
resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==}
dependencies:
'@babel/parser': 7.22.16
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
'@types/babel__generator': 7.6.4
'@types/babel__template': 7.4.1
'@types/babel__traverse': 7.18.3
@@ -22779,7 +22082,7 @@ packages:
/@types/babel__core@7.20.3:
resolution: {integrity: sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==}
dependencies:
- '@babel/parser': 7.23.0
+ '@babel/parser': 7.22.16
'@babel/types': 7.23.0
'@types/babel__generator': 7.6.4
'@types/babel__template': 7.4.1
@@ -22789,18 +22092,18 @@ packages:
/@types/babel__generator@7.6.4:
resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
dependencies:
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
/@types/babel__template@7.4.1:
resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
dependencies:
- '@babel/parser': 7.23.0
- '@babel/types': 7.23.0
+ '@babel/parser': 7.22.16
+ '@babel/types': 7.22.19
/@types/babel__traverse@7.18.3:
resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
dependencies:
- '@babel/types': 7.23.0
+ '@babel/types': 7.22.19
/@types/bcrypt@3.0.1:
resolution: {integrity: sha512-SwBrq5wb6jXP0o3O3jStdPWbKpimTImfdFD/OZE3uW+jhGpds/l5wMX9lfYOTDOa5Bod2QmOgo9ln+tMp2XP/w==}
@@ -24343,8 +23646,8 @@ packages:
'@babel/helper-module-imports': 7.22.15
'@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.21.4)
'@babel/template': 7.22.15
- '@babel/traverse': 7.23.2
- '@babel/types': 7.23.0
+ '@babel/traverse': 7.21.4
+ '@babel/types': 7.22.19
'@vue/babel-helper-vue-transform-on': 1.0.2
camelcase: 6.3.0
html-tags: 3.3.1
@@ -24357,7 +23660,7 @@ packages:
/@vue/compiler-core@3.2.47:
resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
dependencies:
- '@babel/parser': 7.23.0
+ '@babel/parser': 7.22.16
'@vue/shared': 3.2.47
estree-walker: 2.0.2
source-map: 0.6.1
@@ -24969,7 +24272,7 @@ packages:
engines: {node: '>=6'}
dependencies:
'@hapi/joi': 16.1.8
- axios: 1.5.1
+ axios: 1.4.0
body-parser: 1.20.2
lodash: 4.17.21
phone: 3.1.37
@@ -25992,18 +25295,18 @@ packages:
'@babel/core': 7.23.2
dev: true
- /babel-jest@27.5.1(@babel/core@7.22.11):
+ /babel-jest@27.5.1(@babel/core@7.21.4):
resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
peerDependencies:
'@babel/core': ^7.8.0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/babel__core': 7.20.0
+ '@types/babel__core': 7.20.3
babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 27.5.1(@babel/core@7.22.11)
+ babel-preset-jest: 27.5.1(@babel/core@7.21.4)
chalk: 4.1.2
graceful-fs: 4.2.11
slash: 3.0.0
@@ -26020,7 +25323,7 @@ packages:
'@babel/core': 7.23.2
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/babel__core': 7.20.0
+ '@types/babel__core': 7.20.3
babel-plugin-istanbul: 6.1.1
babel-preset-jest: 27.5.1(@babel/core@7.23.2)
chalk: 4.1.2
@@ -26048,14 +25351,14 @@ packages:
- supports-color
dev: true
- /babel-loader@8.3.0(@babel/core@7.22.11)(webpack@5.78.0):
+ /babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.78.0):
resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==}
engines: {node: '>= 8.9'}
peerDependencies:
'@babel/core': ^7.0.0
webpack: '>=2'
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
find-cache-dir: 3.3.2
loader-utils: 2.0.4
make-dir: 3.1.0
@@ -26186,35 +25489,22 @@ packages:
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
engines: {node: '>=10', npm: '>=6'}
dependencies:
- '@babel/runtime': 7.23.2
+ '@babel/runtime': 7.21.0
cosmiconfig: 7.1.0
resolve: 1.22.2
- /babel-plugin-named-asset-import@0.3.8(@babel/core@7.22.11):
+ /babel-plugin-named-asset-import@0.3.8(@babel/core@7.21.4):
resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==}
peerDependencies:
'@babel/core': ^7.1.0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
dev: true
/babel-plugin-named-exports-order@0.0.2:
resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==}
dev: true
- /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.22.11):
- resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- dependencies:
- '@babel/compat-data': 7.23.2
- '@babel/core': 7.22.11
- '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.22.11)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.22.9):
resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==}
peerDependencies:
@@ -26240,18 +25530,6 @@ packages:
transitivePeerDependencies:
- supports-color
- /babel-plugin-polyfill-corejs3@0.8.5(@babel/core@7.22.11):
- resolution: {integrity: sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.22.11)
- core-js-compat: 3.32.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/babel-plugin-polyfill-corejs3@0.8.5(@babel/core@7.22.9):
resolution: {integrity: sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==}
peerDependencies:
@@ -26275,17 +25553,6 @@ packages:
transitivePeerDependencies:
- supports-color
- /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.22.11):
- resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- dependencies:
- '@babel/core': 7.22.11
- '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.22.11)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.22.9):
resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==}
peerDependencies:
@@ -26334,24 +25601,24 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.11):
+ /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.4):
resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.11
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.11)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.11)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.11)
+ '@babel/core': 7.21.4
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.4)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.4)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4)
dev: true
/babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.2):
@@ -26374,15 +25641,15 @@ packages:
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2)
dev: true
- /babel-preset-jest@27.5.1(@babel/core@7.22.11):
+ /babel-preset-jest@27.5.1(@babel/core@7.21.4):
resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
babel-plugin-jest-hoist: 27.5.1
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.11)
+ babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4)
dev: true
/babel-preset-jest@27.5.1(@babel/core@7.23.2):
@@ -26412,7 +25679,7 @@ packages:
dependencies:
'@babel/core': 7.23.2
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2)
- '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2)
+ '@babel/plugin-proposal-decorators': 7.21.0(@babel/core@7.23.2)
'@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.2)
'@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.2)
'@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.2)
@@ -26423,7 +25690,7 @@ packages:
'@babel/plugin-transform-runtime': 7.23.2(@babel/core@7.23.2)
'@babel/preset-env': 7.23.2(@babel/core@7.23.2)
'@babel/preset-react': 7.22.15(@babel/core@7.23.2)
- '@babel/preset-typescript': 7.23.2(@babel/core@7.23.2)
+ '@babel/preset-typescript': 7.21.4(@babel/core@7.23.2)
'@babel/runtime': 7.23.2
babel-plugin-macros: 3.1.0
babel-plugin-transform-react-remove-prop-types: 0.4.24
@@ -27731,11 +26998,6 @@ packages:
typical: 5.2.0
dev: true
- /commander@10.0.0:
- resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==}
- engines: {node: '>=14'}
- dev: true
-
/commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
@@ -28659,14 +27921,14 @@ packages:
dependencies:
'@cspell/cspell-pipe': 6.19.2
chalk: 4.1.2
- commander: 10.0.0
+ commander: 10.0.1
cspell-gitignore: 6.19.2
cspell-glob: 6.19.2
cspell-lib: 6.19.2
- fast-glob: 3.2.12
+ fast-glob: 3.3.0
fast-json-stable-stringify: 2.1.0
file-entry-cache: 6.0.1
- fs-extra: 11.1.0
+ fs-extra: 11.1.1
get-stdin: 8.0.0
imurmurhash: 0.1.4
semver: 7.5.4
@@ -29288,6 +28550,10 @@ packages:
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
dev: false
+ /dayjs@1.11.7:
+ resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
+ dev: false
+
/dayjs@1.11.9:
resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==}
@@ -30164,7 +29430,7 @@ packages:
get-symbol-description: 1.0.0
globalthis: 1.0.3
gopd: 1.0.1
- has: 1.0.4
+ has: 1.0.3
has-property-descriptors: 1.0.0
has-proto: 1.0.1
has-symbols: 1.0.3
@@ -30220,13 +29486,13 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.1
- has: 1.0.4
+ has: 1.0.3
has-tostringtag: 1.0.0
/es-shim-unscopables@1.0.0:
resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
dependencies:
- has: 1.0.4
+ has: 1.0.3
dev: true
/es-to-primitive@1.2.1:
@@ -32256,15 +31522,6 @@ packages:
universalify: 2.0.0
dev: true
- /fs-extra@11.1.0:
- resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
- engines: {node: '>=14.14'}
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.0
- dev: true
-
/fs-extra@11.1.1:
resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
engines: {node: '>=14.14'}
@@ -32496,7 +31753,7 @@ packages:
resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
dependencies:
function-bind: 1.1.1
- has: 1.0.4
+ has: 1.0.3
has-proto: 1.0.1
has-symbols: 1.0.3
@@ -33347,11 +32604,6 @@ packages:
engines: {node: '>= 0.4.0'}
dependencies:
function-bind: 1.1.1
- dev: true
-
- /has@1.0.4:
- resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==}
- engines: {node: '>= 0.4.0'}
/hasha@5.2.2:
resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==}
@@ -34185,7 +33437,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.1
- has: 1.0.4
+ has: 1.0.3
side-channel: 1.0.4
/interpret@1.4.0:
@@ -34376,10 +33628,16 @@ packages:
dependencies:
ci-info: 3.8.0
+ /is-core-module@2.12.0:
+ resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==}
+ dependencies:
+ has: 1.0.3
+ dev: true
+
/is-core-module@2.13.0:
resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
dependencies:
- has: 1.0.4
+ has: 1.0.3
/is-data-descriptor@0.1.4:
resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==}
@@ -36197,12 +35455,12 @@ packages:
'@babel/preset-env': ^7.1.6
dependencies:
'@babel/core': 7.23.2
- '@babel/parser': 7.23.0
+ '@babel/parser': 7.22.16
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2)
'@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.2)
'@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.2)
'@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2)
- '@babel/preset-env': 7.23.2(@babel/core@7.22.11)
+ '@babel/preset-env': 7.23.2(@babel/core@7.23.2)
'@babel/preset-flow': 7.22.15(@babel/core@7.23.2)
'@babel/preset-typescript': 7.23.2(@babel/core@7.23.2)
'@babel/register': 7.21.0(@babel/core@7.23.2)
@@ -38462,6 +37720,13 @@ packages:
brace-expansion: 2.0.1
dev: true
+ /minimatch@9.0.0:
+ resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
/minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -39342,7 +38607,7 @@ packages:
engines: {node: '>=10'}
dependencies:
hosted-git-info: 4.1.0
- is-core-module: 2.13.0
+ is-core-module: 2.12.0
semver: 7.5.4
validate-npm-package-license: 3.0.4
dev: true
@@ -39740,7 +39005,7 @@ packages:
'@nrwl/tao': 15.9.3
'@parcel/watcher': 2.0.4
'@yarnpkg/lockfile': 1.1.0
- '@yarnpkg/parsers': 3.0.0-rc.46
+ '@yarnpkg/parsers': 3.0.0-rc.42
'@zkochan/js-yaml': 0.0.6
axios: 1.5.1
chalk: 4.1.2
@@ -41170,14 +40435,14 @@ packages:
postcss-selector-parser: 6.0.13
dev: true
- /postcss-browser-comments@4.0.0(browserslist@4.21.10)(postcss@8.4.31):
+ /postcss-browser-comments@4.0.0(browserslist@4.21.5)(postcss@8.4.31):
resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==}
engines: {node: '>=8'}
peerDependencies:
browserslist: '>=4'
postcss: ^8.4.31
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.5
postcss: 8.4.31
dev: true
@@ -41745,7 +41010,7 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize@10.0.1(browserslist@4.21.10)(postcss@8.4.31):
+ /postcss-normalize@10.0.1(browserslist@4.21.5)(postcss@8.4.31):
resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==}
engines: {node: '>= 12'}
peerDependencies:
@@ -41753,9 +41018,9 @@ packages:
postcss: ^8.4.31
dependencies:
'@csstools/normalize.css': 12.0.0
- browserslist: 4.21.10
+ browserslist: 4.21.5
postcss: 8.4.31
- postcss-browser-comments: 4.0.0(browserslist@4.21.10)(postcss@8.4.31)
+ postcss-browser-comments: 4.0.0(browserslist@4.21.5)(postcss@8.4.31)
sanitize.css: 13.0.0
dev: true
@@ -42778,7 +42043,7 @@ packages:
'@babel/runtime': 7.23.2
classnames: 2.3.2
date-fns: 2.29.3
- dayjs: 1.11.9
+ dayjs: 1.11.7
moment: 2.29.4
rc-trigger: 5.3.4(react-dom@17.0.2)(react@17.0.2)
rc-util: 5.29.3(react-dom@17.0.2)(react@17.0.2)
@@ -43563,15 +42828,15 @@ packages:
typescript:
optional: true
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.11.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)
'@svgr/webpack': 5.5.0
- babel-jest: 27.5.1(@babel/core@7.22.11)
- babel-loader: 8.3.0(@babel/core@7.22.11)(webpack@5.78.0)
- babel-plugin-named-asset-import: 0.3.8(@babel/core@7.22.11)
+ babel-jest: 27.5.1(@babel/core@7.21.4)
+ babel-loader: 8.3.0(@babel/core@7.21.4)(webpack@5.78.0)
+ babel-plugin-named-asset-import: 0.3.8(@babel/core@7.21.4)
babel-preset-react-app: 10.0.1
bfj: 7.0.2
- browserslist: 4.21.10
+ browserslist: 4.21.5
camelcase: 6.3.0
case-sensitive-paths-webpack-plugin: 2.4.0
css-loader: 6.7.3(webpack@5.78.0)
@@ -43592,7 +42857,7 @@ packages:
postcss: 8.4.31
postcss-flexbugs-fixes: 5.0.2(postcss@8.4.31)
postcss-loader: 6.2.1(postcss@8.4.31)(webpack@5.78.0)
- postcss-normalize: 10.0.1(browserslist@4.21.10)(postcss@8.4.31)
+ postcss-normalize: 10.0.1(browserslist@4.21.5)(postcss@8.4.31)
postcss-preset-env: 7.8.3(postcss@8.4.31)
prompts: 2.4.2
react: 17.0.2
@@ -43606,7 +42871,7 @@ packages:
source-map-loader: 3.0.2(webpack@5.78.0)
style-loader: 3.3.2(webpack@5.78.0)
tailwindcss: 3.3.1(postcss@8.4.31)(ts-node@10.9.1)
- terser-webpack-plugin: 5.3.9(@swc/core@1.3.49)(esbuild@0.18.20)(webpack@5.78.0)
+ terser-webpack-plugin: 5.3.7(@swc/core@1.3.49)(esbuild@0.18.20)(webpack@5.78.0)
typescript: 4.9.5
webpack: 5.78.0(@swc/core@1.3.49)(esbuild@0.18.20)(webpack-cli@5.1.4)
webpack-dev-server: 4.11.1(webpack@5.78.0)
@@ -43660,15 +42925,15 @@ packages:
typescript:
optional: true
dependencies:
- '@babel/core': 7.22.11
+ '@babel/core': 7.21.4
'@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.11.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)
'@svgr/webpack': 5.5.0
- babel-jest: 27.5.1(@babel/core@7.22.11)
- babel-loader: 8.3.0(@babel/core@7.22.11)(webpack@5.78.0)
- babel-plugin-named-asset-import: 0.3.8(@babel/core@7.22.11)
+ babel-jest: 27.5.1(@babel/core@7.21.4)
+ babel-loader: 8.3.0(@babel/core@7.21.4)(webpack@5.78.0)
+ babel-plugin-named-asset-import: 0.3.8(@babel/core@7.21.4)
babel-preset-react-app: 10.0.1
bfj: 7.0.2
- browserslist: 4.21.10
+ browserslist: 4.21.5
camelcase: 6.3.0
case-sensitive-paths-webpack-plugin: 2.4.0
css-loader: 6.7.3(webpack@5.78.0)
@@ -43689,7 +42954,7 @@ packages:
postcss: 8.4.31
postcss-flexbugs-fixes: 5.0.2(postcss@8.4.31)
postcss-loader: 6.2.1(postcss@8.4.31)(webpack@5.78.0)
- postcss-normalize: 10.0.1(browserslist@4.21.10)(postcss@8.4.31)
+ postcss-normalize: 10.0.1(browserslist@4.21.5)(postcss@8.4.31)
postcss-preset-env: 7.8.3(postcss@8.4.31)
prompts: 2.4.2
react: 17.0.2
@@ -43703,7 +42968,7 @@ packages:
source-map-loader: 3.0.2(webpack@5.78.0)
style-loader: 3.3.2(webpack@5.78.0)
tailwindcss: 3.3.1(postcss@8.4.31)(ts-node@10.9.1)
- terser-webpack-plugin: 5.3.9(webpack@5.78.0)
+ terser-webpack-plugin: 5.3.7(webpack@5.78.0)
typescript: 4.9.5
webpack: 5.78.0
webpack-dev-server: 4.11.1(webpack@5.78.0)
@@ -43813,7 +43078,7 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
- '@babel/runtime': 7.23.2
+ '@babel/runtime': 7.21.0
react: 17.0.2
use-composed-ref: 1.3.0(react@17.0.2)
use-latest: 1.2.1(@types/react@17.0.53)(react@17.0.2)
@@ -43827,7 +43092,7 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
- '@babel/runtime': 7.23.2
+ '@babel/runtime': 7.21.0
react: 17.0.2
use-composed-ref: 1.3.0(react@17.0.2)
use-latest: 1.2.1(@types/react@17.0.62)(react@17.0.2)
@@ -43855,7 +43120,7 @@ packages:
react: '>=16.6.0'
react-dom: '>=16.6.0'
dependencies:
- '@babel/runtime': 7.23.2
+ '@babel/runtime': 7.21.0
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
@@ -44620,7 +43885,7 @@ packages:
resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
hasBin: true
dependencies:
- is-core-module: 2.13.0
+ is-core-module: 2.12.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
@@ -46402,10 +45667,6 @@ packages:
/stylis@4.1.3:
resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==}
- /stylis@4.2.0:
- resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
- dev: false
-
/subarg@1.0.0:
resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==}
dependencies:
@@ -46709,7 +45970,7 @@ packages:
color-name: 1.1.4
didyoumean: 1.2.2
dlv: 1.1.3
- fast-glob: 3.3.1
+ fast-glob: 3.3.0
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.18.2
@@ -46888,6 +46149,56 @@ packages:
supports-hyperlinks: 2.3.0
dev: true
+ /terser-webpack-plugin@5.3.7(@swc/core@1.3.49)(esbuild@0.18.20)(webpack@5.78.0):
+ resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.19
+ '@swc/core': 1.3.49
+ esbuild: 0.18.20
+ jest-worker: 27.5.1
+ schema-utils: 3.3.0
+ serialize-javascript: 6.0.1
+ terser: 5.22.0
+ webpack: 5.78.0(@swc/core@1.3.49)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ dev: true
+
+ /terser-webpack-plugin@5.3.7(webpack@5.78.0):
+ resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.19
+ jest-worker: 27.5.1
+ schema-utils: 3.3.0
+ serialize-javascript: 6.0.1
+ terser: 5.22.0
+ webpack: 5.78.0
+ dev: true
+
/terser-webpack-plugin@5.3.9(@swc/core@1.3.49)(esbuild@0.18.20)(webpack@5.78.0):
resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==}
engines: {node: '>= 10.13.0'}
@@ -47952,7 +47263,7 @@ packages:
dependencies:
lunr: 2.3.9
marked: 4.3.0
- minimatch: 9.0.3
+ minimatch: 9.0.0
shiki: 0.14.1
typescript: 4.9.5
dev: true
@@ -48388,7 +47699,7 @@ packages:
peerDependencies:
react: '>=16.13'
dependencies:
- '@babel/runtime': 7.23.2
+ '@babel/runtime': 7.21.0
dequal: 2.0.3
react: 17.0.2
dev: false
@@ -50008,7 +49319,7 @@ packages:
resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==}
engines: {node: '>=4.0.0'}
dependencies:
- sax: 1.2.4
+ sax: 1.2.1
xmlbuilder: 11.0.1
dev: false
diff --git a/providers/africas-talking/package.json b/providers/africas-talking/package.json
index 907c21a2ad6..2d6453416b6 100644
--- a/providers/africas-talking/package.json
+++ b/providers/africas-talking/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/africas-talking",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "An Africa's Talking wrapper for Novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -30,7 +30,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"africastalking": "^0.6.2"
},
"devDependencies": {
diff --git a/providers/apns/package.json b/providers/apns/package.json
index b0fc9235a01..ef64e50a60d 100644
--- a/providers/apns/package.json
+++ b/providers/apns/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/apns",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A apns wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -36,7 +36,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"@parse/node-apn": "^5.2.3"
},
"devDependencies": {
diff --git a/providers/bandwidth/package.json b/providers/bandwidth/package.json
index d1a72f6b78a..f9b3d4868cd 100644
--- a/providers/bandwidth/package.json
+++ b/providers/bandwidth/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/bandwidth",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A bandwidth wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -30,7 +30,7 @@
},
"dependencies": {
"@bandwidth/messaging": "^4.1.1",
- "@novu/stateless": "0.20.0"
+ "@novu/stateless": "^0.21.0"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "~1.0.1",
diff --git a/providers/burst-sms/package.json b/providers/burst-sms/package.json
index 39fb77f432e..dcef3ad9400 100644
--- a/providers/burst-sms/package.json
+++ b/providers/burst-sms/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/burst-sms",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A burstSms wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -37,7 +37,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.3",
"qs": "^6.11.0"
},
diff --git a/providers/clickatell/package.json b/providers/clickatell/package.json
index 6f18b0579ef..e227a272cd7 100644
--- a/providers/clickatell/package.json
+++ b/providers/clickatell/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/clickatell",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A clickatell SMS provider wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -31,7 +31,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.3"
},
"devDependencies": {
diff --git a/providers/clicksend/package.json b/providers/clicksend/package.json
index 7dc76116e50..fc00257afef 100644
--- a/providers/clicksend/package.json
+++ b/providers/clicksend/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/clicksend",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A clicksend wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
diff --git a/providers/discord/package.json b/providers/discord/package.json
index b3670f86cac..7a8f3d75572 100644
--- a/providers/discord/package.json
+++ b/providers/discord/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/discord",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A discord wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.3"
},
"devDependencies": {
diff --git a/providers/email-webhook/package.json b/providers/email-webhook/package.json
index d796c65a554..9a054a4189e 100644
--- a/providers/email-webhook/package.json
+++ b/providers/email-webhook/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/email-webhook",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "An email channel webhook provider wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
diff --git a/providers/emailjs/package.json b/providers/emailjs/package.json
index 10df1cce9de..13d5bd16585 100644
--- a/providers/emailjs/package.json
+++ b/providers/emailjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/emailjs",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "An emailjs provider for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -45,7 +45,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"emailjs": "^3.6.0"
},
"devDependencies": {
diff --git a/providers/expo/package.json b/providers/expo/package.json
index f12a7b9a484..c1552e7f641 100644
--- a/providers/expo/package.json
+++ b/providers/expo/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/expo",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A expo wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"expo-server-sdk": "^3.6.0"
},
"devDependencies": {
diff --git a/providers/fcm/package.json b/providers/fcm/package.json
index 6cd525f369d..15f872e014f 100644
--- a/providers/fcm/package.json
+++ b/providers/fcm/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/fcm",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A fcm wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"firebase-admin": "^11.10.1"
},
"devDependencies": {
diff --git a/providers/fcm/src/lib/fcm.provider.spec.ts b/providers/fcm/src/lib/fcm.provider.spec.ts
index 08321f545d2..3d56abe40a0 100644
--- a/providers/fcm/src/lib/fcm.provider.spec.ts
+++ b/providers/fcm/src/lib/fcm.provider.spec.ts
@@ -237,6 +237,7 @@ test('should trigger fcm data for ios with headers options', async () => {
key_2: 'val_2',
title: 'Test',
body: 'Test push',
+ message: 'Test push',
},
});
});
@@ -278,6 +279,7 @@ test('should trigger fcm data for android with priority option', async () => {
key_2: 'val_2',
title: 'Test',
body: 'Test push',
+ message: 'Test push',
},
});
});
@@ -296,6 +298,7 @@ test('should clean the payload for the FCM data message', async () => {
object: '{"asd":"asd"}',
title: 'Test',
body: 'Test push',
+ message: 'Test push',
};
await provider.sendMessage({
diff --git a/providers/fcm/src/lib/fcm.provider.ts b/providers/fcm/src/lib/fcm.provider.ts
index f7274f84da4..2c036491cd7 100644
--- a/providers/fcm/src/lib/fcm.provider.ts
+++ b/providers/fcm/src/lib/fcm.provider.ts
@@ -66,7 +66,12 @@ export class FcmPushProvider implements IPushProvider {
delete (options.overrides as { type?: string })?.type;
res = await this.messaging.sendMulticast({
tokens: options.target,
- data: { ...payload, title: options.title, body: options.content },
+ data: {
+ ...payload,
+ title: options.title,
+ body: options.content,
+ message: options.content,
+ },
...(androidData ? { android: androidData } : {}),
...(apnsData ? { apns: apnsData } : {}),
...(fcmOptionsData ? { fcmOptions: fcmOptionsData } : {}),
diff --git a/providers/firetext/package.json b/providers/firetext/package.json
index 8e2ab684e9b..633f23d85a8 100644
--- a/providers/firetext/package.json
+++ b/providers/firetext/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/firetext",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A firetext wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"node-fetch": "^3.2.10"
},
"devDependencies": {
diff --git a/providers/forty-six-elks/package.json b/providers/forty-six-elks/package.json
index e0857092c2e..4684452eb33 100644
--- a/providers/forty-six-elks/package.json
+++ b/providers/forty-six-elks/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/forty-six-elks",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A 46elks wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -29,7 +29,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.4"
},
"devDependencies": {
diff --git a/providers/generic-sms/.czrc b/providers/generic-sms/.czrc
new file mode 100644
index 00000000000..d1bcc209ca1
--- /dev/null
+++ b/providers/generic-sms/.czrc
@@ -0,0 +1,3 @@
+{
+ "path": "cz-conventional-changelog"
+}
diff --git a/providers/generic-sms/.eslintrc.json b/providers/generic-sms/.eslintrc.json
new file mode 100644
index 00000000000..ec40100be69
--- /dev/null
+++ b/providers/generic-sms/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../../.eslintrc.js"
+}
diff --git a/providers/generic-sms/.gitignore b/providers/generic-sms/.gitignore
new file mode 100644
index 00000000000..963d5292865
--- /dev/null
+++ b/providers/generic-sms/.gitignore
@@ -0,0 +1,9 @@
+.idea/*
+.nyc_output
+build
+node_modules
+test
+src/**.js
+coverage
+*.log
+package-lock.json
diff --git a/providers/generic-sms/README.md b/providers/generic-sms/README.md
new file mode 100644
index 00000000000..4c2330e6019
--- /dev/null
+++ b/providers/generic-sms/README.md
@@ -0,0 +1,43 @@
+# Novu GenericSms Provider
+
+A Generic sms provider library for [@novu/node](https://github.com/novuhq/novu)
+
+## Usage
+
+```javascript
+
+import { GenericSmsProvider } from './generic-sms.provider';
+
+const provider = new GenericSmsProvider({
+ baseUrl: 'https://api.generic-sms-provider.com',
+ apiKeyRequestHeader: 'apiKey',
+ apiKey: '123456',
+ from: 'sender-id',
+ idPath: 'message.id',
+ datePath: 'message.date',
+});
+
+await provider.sendMessage({
+ to: '+1234567890',
+ content: 'SMS Content form Generic SMS Provider',
+});
+```
+
+## Options
+```typescript
+
+interface GenericSmsProviderOptions {
+ baseUrl: string;
+ apiKeyRequestHeader: string;
+ apiKey: string;
+ secretKeyRequestHeader?: string;
+ secretKey?: string;
+ from: string;
+ idPath?: string;
+ datePath?: string;
+ domain?: string;
+ authenticateByToken?: boolean;
+ authenticationTokenKey?: string;
+}
+
+```
diff --git a/providers/generic-sms/jest.config.js b/providers/generic-sms/jest.config.js
new file mode 100644
index 00000000000..61faa20934a
--- /dev/null
+++ b/providers/generic-sms/jest.config.js
@@ -0,0 +1,8 @@
+/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
+module.exports = {
+ preset: 'ts-jest',
+ testEnvironment: 'node',
+ moduleNameMapper: {
+ axios: 'axios/dist/node/axios.cjs',
+ },
+};
diff --git a/providers/generic-sms/package.json b/providers/generic-sms/package.json
new file mode 100644
index 00000000000..d334d5bc004
--- /dev/null
+++ b/providers/generic-sms/package.json
@@ -0,0 +1,78 @@
+{
+ "name": "@novu/generic-sms",
+ "version": "0.21.0",
+ "description": "A generic-sms wrapper for novu",
+ "main": "build/main/index.js",
+ "typings": "build/main/index.d.ts",
+ "module": "build/module/index.js",
+ "private": false,
+ "repository": "https://github.com/novuhq/novu",
+ "license": "MIT",
+ "keywords": [],
+ "scripts": {
+ "prebuild": "rimraf build",
+ "build": "run-p build:*",
+ "build:main": "tsc -p tsconfig.json",
+ "build:module": "tsc -p tsconfig.module.json",
+ "fix": "run-s fix:*",
+ "fix:prettier": "prettier \"src/**/*.ts\" --write",
+ "fix:lint": "eslint src --ext .ts --fix",
+ "test": "run-s test:*",
+ "lint": "eslint src --ext .ts",
+ "test:unit": "jest src",
+ "watch:build": "tsc -p tsconfig.json -w",
+ "watch:test": "jest src --watch",
+ "reset-hard": "git clean -dfx && git reset --hard && yarn",
+ "prepare-release": "run-s reset-hard test"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "dependencies": {
+ "@novu/stateless": "0.16.3",
+ "axios": "^1.5.0"
+ },
+ "devDependencies": {
+ "@istanbuljs/nyc-config-typescript": "~1.0.1",
+ "@types/jest": "~29.5.0",
+ "cspell": "~6.19.2",
+ "jest": "~27.5.1",
+ "npm-run-all": "^4.1.5",
+ "nyc": "~15.1.0",
+ "prettier": "~2.8.0",
+ "rimraf": "~3.0.2",
+ "ts-jest": "~27.1.5",
+ "ts-node": "~10.9.1",
+ "typescript": "4.9.5"
+ },
+ "files": [
+ "build/main",
+ "build/module",
+ "!**/*.spec.*",
+ "!**/*.json",
+ "CHANGELOG.md",
+ "LICENSE",
+ "README.md"
+ ],
+ "ava": {
+ "failFast": true,
+ "timeout": "60s",
+ "typescript": {
+ "rewritePaths": {
+ "src/": "build/main/"
+ }
+ },
+ "files": [
+ "!build/module/**"
+ ]
+ },
+ "prettier": {
+ "singleQuote": true
+ },
+ "nyc": {
+ "extends": "@istanbuljs/nyc-config-typescript",
+ "exclude": [
+ "**/*.spec.js"
+ ]
+ }
+}
diff --git a/providers/generic-sms/src/index.ts b/providers/generic-sms/src/index.ts
new file mode 100644
index 00000000000..4ad14734a05
--- /dev/null
+++ b/providers/generic-sms/src/index.ts
@@ -0,0 +1 @@
+export * from './lib/generic-sms.provider';
diff --git a/providers/generic-sms/src/lib/generic-sms.provider.spec.ts b/providers/generic-sms/src/lib/generic-sms.provider.spec.ts
new file mode 100644
index 00000000000..9a94b39d34f
--- /dev/null
+++ b/providers/generic-sms/src/lib/generic-sms.provider.spec.ts
@@ -0,0 +1,41 @@
+import { GenericSmsProvider } from './generic-sms.provider';
+import crypto from 'crypto';
+
+test('should trigger generic-sms library correctly', async () => {
+ const provider = new GenericSmsProvider({
+ baseUrl: 'https://api.generic-sms-provider.com',
+ apiKeyRequestHeader: 'apiKey',
+ apiKey: '123456',
+ from: 'sender-id',
+ idPath: 'message.id',
+ datePath: 'message.date',
+ });
+
+ const spy = jest
+ .spyOn(provider.axiosInstance, 'request')
+ .mockImplementation(async () => {
+ return {
+ data: {
+ message: {
+ id: crypto.randomUUID(),
+ date: new Date().toISOString(),
+ },
+ },
+ } as any;
+ });
+
+ await provider.sendMessage({
+ to: '+1234567890',
+ content: 'SMS Content form Generic SMS Provider',
+ });
+
+ expect(spy).toHaveBeenCalled();
+ expect(spy).toHaveBeenCalledWith({
+ method: 'POST',
+ data: {
+ to: '+1234567890',
+ content: 'SMS Content form Generic SMS Provider',
+ sender: 'sender-id',
+ },
+ });
+});
diff --git a/providers/generic-sms/src/lib/generic-sms.provider.ts b/providers/generic-sms/src/lib/generic-sms.provider.ts
new file mode 100644
index 00000000000..4694008e403
--- /dev/null
+++ b/providers/generic-sms/src/lib/generic-sms.provider.ts
@@ -0,0 +1,89 @@
+import {
+ ChannelTypeEnum,
+ ISendMessageSuccessResponse,
+ ISmsOptions,
+ ISmsProvider,
+} from '@novu/stateless';
+
+import axios, { AxiosInstance } from 'axios';
+
+export class GenericSmsProvider implements ISmsProvider {
+ id = 'generic-sms';
+ channelType = ChannelTypeEnum.SMS as ChannelTypeEnum.SMS;
+ axiosInstance: AxiosInstance;
+ headers: Record;
+
+ constructor(
+ private config: {
+ baseUrl: string;
+ apiKeyRequestHeader: string;
+ apiKey: string;
+ secretKeyRequestHeader?: string;
+ secretKey?: string;
+ from: string;
+ idPath?: string;
+ datePath?: string;
+ authenticateByToken?: boolean;
+ domain?: string;
+ authenticationTokenKey?: string;
+ }
+ ) {
+ this.headers = {
+ [this.config?.apiKeyRequestHeader]: config.apiKey,
+ };
+
+ if (this.config?.secretKeyRequestHeader && this.config?.secretKey) {
+ this.headers[this.config?.secretKeyRequestHeader] = config.secretKey;
+ }
+
+ if (!this.config?.authenticateByToken) {
+ this.axiosInstance = axios.create({
+ baseURL: config.baseUrl,
+ headers: this.headers,
+ });
+ }
+ }
+
+ async sendMessage(
+ options: ISmsOptions
+ ): Promise {
+ if (this.config?.authenticateByToken) {
+ const tokenAxiosInstance = await axios.request({
+ method: 'POST',
+ baseURL: this.config.domain,
+ headers: this.headers,
+ });
+
+ const token =
+ tokenAxiosInstance.data.data[this.config.authenticationTokenKey];
+
+ this.axiosInstance = axios.create({
+ baseURL: this.config.baseUrl,
+ headers: {
+ [this.config.authenticationTokenKey]: token,
+ },
+ });
+ }
+
+ const response = await this.axiosInstance.request({
+ method: 'POST',
+ data: {
+ ...options,
+ sender: this.config.from,
+ },
+ });
+
+ const responseData = response.data;
+
+ return {
+ id: this.getResponseValue(this.config.idPath || 'id', responseData),
+ date: this.getResponseValue(this.config.datePath || 'date', responseData),
+ };
+ }
+
+ private getResponseValue(path: string, data: any) {
+ const pathArray = path.split('.');
+
+ return pathArray.reduce((acc, curr) => acc[curr], data);
+ }
+}
diff --git a/providers/generic-sms/tsconfig.json b/providers/generic-sms/tsconfig.json
new file mode 100644
index 00000000000..5b8120fea36
--- /dev/null
+++ b/providers/generic-sms/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "build/main",
+ "rootDir": "src",
+ "types": ["node", "jest"]
+ },
+ "include": ["src/**/*.ts"],
+ "exclude": ["node_modules/**"]
+}
diff --git a/providers/generic-sms/tsconfig.module.json b/providers/generic-sms/tsconfig.module.json
new file mode 100644
index 00000000000..79be3a5c40b
--- /dev/null
+++ b/providers/generic-sms/tsconfig.module.json
@@ -0,0 +1,9 @@
+{
+ "extends": "./tsconfig",
+ "compilerOptions": {
+ "target": "esnext",
+ "outDir": "build/module",
+ "module": "esnext"
+ },
+ "exclude": ["node_modules/**"]
+}
diff --git a/providers/gupshup/package.json b/providers/gupshup/package.json
index 9545e8edf31..b565530bbc4 100644
--- a/providers/gupshup/package.json
+++ b/providers/gupshup/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/gupshup",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A gupshup wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"node-fetch": "^3.2.10"
},
"devDependencies": {
@@ -83,4 +83,4 @@
"**/*.spec.js"
]
}
-}
\ No newline at end of file
+}
diff --git a/providers/infobip/package.json b/providers/infobip/package.json
index 1bc40b50156..57c12b8e7a1 100644
--- a/providers/infobip/package.json
+++ b/providers/infobip/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/infobip",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A infobip wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -33,7 +33,7 @@
},
"dependencies": {
"@infobip-api/sdk": "^0.2.0",
- "@novu/stateless": "^0.20.0"
+ "@novu/stateless": "^0.21.0"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^1.0.1",
diff --git a/providers/kannel/package.json b/providers/kannel/package.json
index 48edce9c242..6d4474bdaad 100644
--- a/providers/kannel/package.json
+++ b/providers/kannel/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/kannel",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A kannel wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^0.27.2"
},
"devDependencies": {
diff --git a/providers/mailersend/package.json b/providers/mailersend/package.json
index 430d0b9cc40..a5c786935b9 100644
--- a/providers/mailersend/package.json
+++ b/providers/mailersend/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/mailersend",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A mailersend wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"mailersend": "^1.3.1"
},
"devDependencies": {
diff --git a/providers/mailgun/package.json b/providers/mailgun/package.json
index 6f0045a114a..aaee649d45b 100644
--- a/providers/mailgun/package.json
+++ b/providers/mailgun/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/mailgun",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A mailgun wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -44,7 +44,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"form-data": "^4.0.0",
"mailgun.js": "^8.0.1",
"nock": "^13.1.3"
diff --git a/providers/mailjet/package.json b/providers/mailjet/package.json
index af8d9e05cab..efcce10f377 100644
--- a/providers/mailjet/package.json
+++ b/providers/mailjet/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/mailjet",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A mailjet wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"node-mailjet": "^6.0.4"
},
"devDependencies": {
diff --git a/providers/mailtrap/package.json b/providers/mailtrap/package.json
index 0c10d2cd520..0419cecbd07 100644
--- a/providers/mailtrap/package.json
+++ b/providers/mailtrap/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/mailtrap",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A mailtrap wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -29,7 +29,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"mailtrap": "^3.1.1"
},
"devDependencies": {
diff --git a/providers/mandrill/package.json b/providers/mandrill/package.json
index f3fbab84b8a..d87de3ce294 100644
--- a/providers/mandrill/package.json
+++ b/providers/mandrill/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/mandrill",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A mandrill wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -42,7 +42,7 @@
},
"dependencies": {
"@mailchimp/mailchimp_transactional": "^1.0.46",
- "@novu/stateless": "^0.20.0"
+ "@novu/stateless": "^0.21.0"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "1.0.2",
diff --git a/providers/maqsam/package.json b/providers/maqsam/package.json
index 1e2590ece44..44284b98942 100644
--- a/providers/maqsam/package.json
+++ b/providers/maqsam/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/maqsam",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A maqsam wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -29,7 +29,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.4",
"date-fns": "2.29.3",
"moment": "^2.29.4"
diff --git a/providers/mattermost/package.json b/providers/mattermost/package.json
index e0237d6400b..8b0cda80825 100644
--- a/providers/mattermost/package.json
+++ b/providers/mattermost/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/mattermost",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A mattermost wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -29,7 +29,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.3"
},
"devDependencies": {
diff --git a/providers/ms-teams/package.json b/providers/ms-teams/package.json
index c2f9bbb55ff..c320765b861 100644
--- a/providers/ms-teams/package.json
+++ b/providers/ms-teams/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/ms-teams",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A MS-Teams wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
diff --git a/providers/netcore/package.json b/providers/netcore/package.json
index c00fb5fb618..ecdcd72f98e 100644
--- a/providers/netcore/package.json
+++ b/providers/netcore/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/netcore",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A netcore wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -45,7 +45,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"pepipost": "^5.0.0"
},
"devDependencies": {
diff --git a/providers/nexmo/package.json b/providers/nexmo/package.json
index 603aed63b83..7bd95a44029 100644
--- a/providers/nexmo/package.json
+++ b/providers/nexmo/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/nexmo",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A nexmo wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"@vonage/server-sdk": "^2.10.10"
},
"devDependencies": {
diff --git a/providers/nodemailer/package.json b/providers/nodemailer/package.json
index df881c51e52..d6e398c6891 100644
--- a/providers/nodemailer/package.json
+++ b/providers/nodemailer/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/nodemailer",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A nodemailer wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -45,7 +45,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"nodemailer": "^6.6.5"
},
"devDependencies": {
diff --git a/providers/one-signal/package.json b/providers/one-signal/package.json
index 7443b8df3e4..d88b62727c1 100644
--- a/providers/one-signal/package.json
+++ b/providers/one-signal/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/one-signal",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A OneSignal wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -30,7 +30,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"onesignal-node": "^3.4.0"
},
"devDependencies": {
diff --git a/providers/outlook365/package.json b/providers/outlook365/package.json
index ebd94917adc..c7dc8eeeeeb 100644
--- a/providers/outlook365/package.json
+++ b/providers/outlook365/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/outlook365",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A outlook365 wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"nodemailer": "^6.6.5"
},
"devDependencies": {
diff --git a/providers/plivo/package.json b/providers/plivo/package.json
index 6242d1cc80b..d27557cd66d 100644
--- a/providers/plivo/package.json
+++ b/providers/plivo/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/plivo",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A plivo wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -44,7 +44,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"plivo": "^4.22.4"
},
"devDependencies": {
diff --git a/providers/plunk/package.json b/providers/plunk/package.json
index 2f70f69e5a9..7ca6fa3caf0 100644
--- a/providers/plunk/package.json
+++ b/providers/plunk/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/plunk",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A plunk wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -29,7 +29,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"@plunk/node": "2.0.0"
},
"devDependencies": {
diff --git a/providers/postmark/package.json b/providers/postmark/package.json
index d123288328b..a7ad2c3704b 100644
--- a/providers/postmark/package.json
+++ b/providers/postmark/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/postmark",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A postmark wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -45,7 +45,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.6",
"postmark": "^2.7.8"
},
diff --git a/providers/push-webhook/package.json b/providers/push-webhook/package.json
index 899a4f36a01..31cff6fba42 100644
--- a/providers/push-webhook/package.json
+++ b/providers/push-webhook/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/push-webhook",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A push-webhook wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -30,7 +30,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.5"
},
"devDependencies": {
diff --git a/providers/pushpad/package.json b/providers/pushpad/package.json
index a4cedd36fa7..460aa7b22e5 100644
--- a/providers/pushpad/package.json
+++ b/providers/pushpad/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/pushpad",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A pushpad wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"pushpad": "1.0.0"
},
"devDependencies": {
diff --git a/providers/resend/package.json b/providers/resend/package.json
index f08bc4f1293..c4ccb562b88 100644
--- a/providers/resend/package.json
+++ b/providers/resend/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/resend",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A resend wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"resend": "^0.11.0"
},
"devDependencies": {
diff --git a/providers/ryver/package.json b/providers/ryver/package.json
index ec062d3e9a7..20dfc2ec025 100644
--- a/providers/ryver/package.json
+++ b/providers/ryver/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/ryver",
- "version": "0.20.0-alpha.0",
+ "version": "0.21.0",
"description": "A ryver wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.3"
},
"devDependencies": {
diff --git a/providers/sendchamp/package.json b/providers/sendchamp/package.json
index 8696aaf99c2..937cec77bf3 100644
--- a/providers/sendchamp/package.json
+++ b/providers/sendchamp/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/sendchamp",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A sendchamp wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -29,7 +29,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.4.0"
},
"devDependencies": {
diff --git a/providers/sendgrid/package.json b/providers/sendgrid/package.json
index 375e90699cf..8e01ac9c466 100644
--- a/providers/sendgrid/package.json
+++ b/providers/sendgrid/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/sendgrid",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A sendgrid wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -45,7 +45,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"@sendgrid/mail": "^7.4.6"
},
"devDependencies": {
diff --git a/providers/sendinblue/package.json b/providers/sendinblue/package.json
index 048a64ce2e3..ed0d449f995 100644
--- a/providers/sendinblue/package.json
+++ b/providers/sendinblue/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/sendinblue",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A sendinblue wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"@sendinblue/client": "^3.0.1"
},
"devDependencies": {
diff --git a/providers/ses/package.json b/providers/ses/package.json
index fccf69537eb..14fd9bbd2ee 100644
--- a/providers/ses/package.json
+++ b/providers/ses/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/ses",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A ses wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -33,7 +33,7 @@
},
"dependencies": {
"@aws-sdk/client-ses": "3.382.0",
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"nodemailer": "^6.6.5"
},
"devDependencies": {
diff --git a/providers/slack/package.json b/providers/slack/package.json
index f012fddf55a..7ec2e1b3b26 100644
--- a/providers/slack/package.json
+++ b/providers/slack/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/slack",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A slack wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"axios": "^1.3.3"
},
"devDependencies": {
diff --git a/providers/sms-central/package.json b/providers/sms-central/package.json
index c508408f277..c1db9a7264d 100644
--- a/providers/sms-central/package.json
+++ b/providers/sms-central/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/sms-central",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A sms-central wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
diff --git a/providers/sms77/package.json b/providers/sms77/package.json
index 8312a5dec67..c54d2f1f4da 100644
--- a/providers/sms77/package.json
+++ b/providers/sms77/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/sms77",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A sms77 wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"node-fetch": "^2.6.7",
"sms77-client": "^2.14.0"
},
@@ -84,4 +84,4 @@
"**/*.spec.js"
]
}
-}
\ No newline at end of file
+}
diff --git a/providers/sns/package.json b/providers/sns/package.json
index b41453807bd..0c05cc6200a 100644
--- a/providers/sns/package.json
+++ b/providers/sns/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/sns",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A sns wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -33,7 +33,7 @@
},
"dependencies": {
"@aws-sdk/client-sns": "^3.382.0",
- "@novu/stateless": "^0.20.0"
+ "@novu/stateless": "^0.21.0"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^1.0.1",
diff --git a/providers/sparkpost/package.json b/providers/sparkpost/package.json
index ebfb71367d3..dc8ad4e652d 100644
--- a/providers/sparkpost/package.json
+++ b/providers/sparkpost/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/sparkpost",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A sparkpost wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"sparkpost": "^2.1.4"
},
"devDependencies": {
diff --git a/providers/telnyx/package.json b/providers/telnyx/package.json
index 2c56600c080..58ee90be368 100644
--- a/providers/telnyx/package.json
+++ b/providers/telnyx/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/telnyx",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A telnyx wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"telnyx": "^1.23.0"
},
"devDependencies": {
diff --git a/providers/termii/package.json b/providers/termii/package.json
index 779924658e9..d0e30c72187 100644
--- a/providers/termii/package.json
+++ b/providers/termii/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/termii",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A termii wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -32,7 +32,7 @@
"node": ">=10"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"node-fetch": "^3.2.10"
},
"devDependencies": {
@@ -83,4 +83,4 @@
"**/*.spec.js"
]
}
-}
\ No newline at end of file
+}
diff --git a/providers/twilio/package.json b/providers/twilio/package.json
index faf78f51461..08d46318153 100644
--- a/providers/twilio/package.json
+++ b/providers/twilio/package.json
@@ -1,6 +1,6 @@
{
"name": "@novu/twilio",
- "version": "0.20.0",
+ "version": "0.21.0",
"description": "A twilio wrapper for novu",
"main": "build/main/index.js",
"typings": "build/main/index.d.ts",
@@ -44,7 +44,7 @@
"access": "public"
},
"dependencies": {
- "@novu/stateless": "^0.20.0",
+ "@novu/stateless": "^0.21.0",
"twilio": "^4.14.1"
},
"devDependencies": {