prime-sdk 3.0.6 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/dist/external/aws/sns/sns.provider.d.ts +1 -0
  3. package/dist/external/aws/sns/sns.provider.js +8 -2
  4. package/dist/external/aws/sns/sns.provider.js.map +1 -1
  5. package/dist/external/aws/sns/sns.service.d.ts +4 -1
  6. package/dist/external/aws/sns/sns.service.js +21 -2
  7. package/dist/external/aws/sns/sns.service.js.map +1 -1
  8. package/dist/external/redis/interfaces/redis.interface.d.ts +1 -0
  9. package/dist/external/redis/interfaces/redis.interface.js.map +1 -1
  10. package/dist/external/redis/redis.service.d.ts +1 -0
  11. package/dist/external/redis/redis.service.js +13 -0
  12. package/dist/external/redis/redis.service.js.map +1 -1
  13. package/dist/index.d.ts +2 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/cache/cache.d.ts +1 -0
  16. package/dist/lib/cache/cache.js +3 -0
  17. package/dist/lib/cache/cache.js.map +1 -1
  18. package/dist/lib/cache/interfaces/cache.interface.d.ts +1 -0
  19. package/dist/lib/cache/interfaces/cache.interface.js.map +1 -1
  20. package/dist/lib/events/types/event.type.d.ts +2 -0
  21. package/dist/tsconfig.build.tsbuildinfo +1 -1
  22. package/package.json +1 -1
  23. package/src/external/aws/sns/sns.provider.ts +9 -2
  24. package/src/external/aws/sns/sns.service.ts +26 -2
  25. package/src/external/redis/interfaces/redis.interface.ts +6 -0
  26. package/src/external/redis/redis.service.ts +17 -0
  27. package/src/index.ts +3 -0
  28. package/src/lib/cache/cache.ts +8 -0
  29. package/src/lib/cache/interfaces/cache.interface.ts +6 -0
  30. package/src/lib/events/types/event.type.ts +3 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prime-sdk",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "swiss army knife",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -12,6 +12,7 @@ export type SNSSetup = {
12
12
  endpoint?: string;
13
13
  credentials: AwsCredentialIdentityProvider | AwsCredentialIdentity;
14
14
  keepAlive?: boolean;
15
+ messageAttributes?: boolean;
15
16
  };
16
17
 
17
18
  const SNSProvider = (params: SNSSetup) => {
@@ -36,8 +37,14 @@ export class SNSModule {
36
37
 
37
38
  return {
38
39
  module: SNSModule,
39
- providers: [snsProvider],
40
- exports: [snsProvider],
40
+ providers: [
41
+ snsProvider,
42
+ {
43
+ provide: 'SNS_OPTIONS',
44
+ useValue: params,
45
+ },
46
+ ],
47
+ exports: [snsProvider, 'SNS_OPTIONS'],
41
48
  };
42
49
  }
43
50
  }
@@ -3,23 +3,47 @@ import {
3
3
  PublishCommandOutput,
4
4
  SNSClient,
5
5
  } from '@aws-sdk/client-sns';
6
- import { Inject, Injectable } from '@nestjs/common';
6
+ import { Inject, Injectable, Optional } from '@nestjs/common';
7
7
  import { IEvent } from 'src/lib/events/interfaces/event.interface';
8
8
  import { EventData, EventSmsData } from 'src/lib/events/types/event.type';
9
+ import { SNSSetup } from './sns.provider';
9
10
 
10
11
  @Injectable()
11
12
  export class Sns implements IEvent {
12
- constructor(@Inject('CONNECTION_SNS') private readonly client: SNSClient) {}
13
+ constructor(
14
+ @Inject('CONNECTION_SNS') private readonly client: SNSClient,
15
+ @Optional() @Inject('SNS_OPTIONS') private readonly options?: SNSSetup,
16
+ ) {}
13
17
 
14
18
  async publishSns(event: EventData): Promise<PublishCommandOutput> {
19
+ const messageAttributes = this.getMessageAttributes(event);
20
+
15
21
  const command = new PublishCommand({
16
22
  TopicArn: event.topic,
17
23
  Message: event.message,
24
+ ...(messageAttributes && { MessageAttributes: messageAttributes }),
18
25
  });
19
26
 
20
27
  return await this.client.send(command);
21
28
  }
22
29
 
30
+ private getMessageAttributes(event: EventData) {
31
+ if (event.messageAttributes) {
32
+ return event.messageAttributes;
33
+ }
34
+
35
+ if (this.options?.messageAttributes) {
36
+ return {
37
+ enqueuedAt: {
38
+ DataType: 'Number',
39
+ StringValue: String(Date.now()),
40
+ },
41
+ };
42
+ }
43
+
44
+ return undefined;
45
+ }
46
+
23
47
  async publishSms(event: EventSmsData): Promise<PublishCommandOutput> {
24
48
  const command = new PublishCommand({
25
49
  PhoneNumber: event.phoneNumber,
@@ -12,6 +12,12 @@ export interface IRedisService {
12
12
  deleteRedisKey(key: string): Promise<void>;
13
13
 
14
14
  createPubSubClient(): Promise<PubSubRedis>;
15
+
16
+ setRedisKeyIfNotExists(
17
+ key: string,
18
+ value: Date | number | Buffer | string,
19
+ ttl?: number,
20
+ ): Promise<boolean>;
15
21
  }
16
22
 
17
23
  export const IRedisService = Symbol('IRedisService');
@@ -37,4 +37,21 @@ export class RedisService implements IRedisService {
37
37
  sub: this.client.duplicate(),
38
38
  };
39
39
  }
40
+
41
+ async setRedisKeyIfNotExists(
42
+ key: string,
43
+ value: Date | number | Buffer | string,
44
+ ttl?: number,
45
+ ): Promise<boolean> {
46
+ if (value instanceof Date) {
47
+ value = value.toISOString();
48
+ }
49
+ let result: string;
50
+ if (ttl) {
51
+ result = await this.client.set(key, value, 'EX', ttl, 'NX');
52
+ } else {
53
+ result = await this.client.set(key, value, 'NX');
54
+ }
55
+ return result === 'OK';
56
+ }
40
57
  }
package/src/index.ts CHANGED
@@ -34,6 +34,8 @@ import {
34
34
  PubSubRedis,
35
35
  } from './external/redis/types/ioredis.types';
36
36
 
37
+ import { SNSSetup } from './external/aws/sns/sns.provider';
38
+
37
39
  export {
38
40
  QueueModule,
39
41
  Queue,
@@ -44,6 +46,7 @@ export {
44
46
  EventModule,
45
47
  Events,
46
48
  IEvent,
49
+ SNSSetup,
47
50
  EmailModule,
48
51
  Email,
49
52
  IEmail,
@@ -24,4 +24,12 @@ export class Cache implements ICache {
24
24
  async createPubSubClient(): Promise<PubSubRedis> {
25
25
  return await this.client.createPubSubClient();
26
26
  }
27
+
28
+ async setIfNotExists(
29
+ key: string,
30
+ value: Date | number | Buffer | string,
31
+ ttl?: number,
32
+ ): Promise<boolean> {
33
+ return await this.client.setRedisKeyIfNotExists(key, value, ttl);
34
+ }
27
35
  }
@@ -12,6 +12,12 @@ export interface ICache {
12
12
  delete(key: string): Promise<void>;
13
13
 
14
14
  createPubSubClient(): Promise<PubSubRedis>;
15
+
16
+ setIfNotExists(
17
+ key: string,
18
+ value: Date | number | Buffer | string,
19
+ ttl?: number,
20
+ ): Promise<boolean>;
15
21
  }
16
22
 
17
23
  export const ICache = Symbol('ICache');
@@ -1,6 +1,9 @@
1
+ import { MessageAttributeValue } from '@aws-sdk/client-sns';
2
+
1
3
  export type EventData = {
2
4
  topic: string;
3
5
  message: string;
6
+ messageAttributes?: Record<string, MessageAttributeValue>;
4
7
  };
5
8
 
6
9
  export type EventSmsData = {