@geekmidas/events 0.0.2 → 0.2.0
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.
- package/dist/{BasicConnection-C4_Y0nIj.d.mts → BasicConnection-BTRsXiuH.d.cts} +3 -2
- package/dist/BasicConnection-BTRsXiuH.d.cts.map +1 -0
- package/dist/BasicConnection-C-Cg2FJT.cjs.map +1 -1
- package/dist/BasicConnection-CpwybcC9.mjs.map +1 -1
- package/dist/{BasicConnection-CddnULuT.d.cts → BasicConnection-DIxtA7jK.d.mts} +3 -2
- package/dist/BasicConnection-DIxtA7jK.d.mts.map +1 -0
- package/dist/BasicPublisher-CXAVKxgq.cjs.map +1 -1
- package/dist/{BasicPublisher-DCBxaTwC.d.mts → BasicPublisher-CpJFK2oS.d.mts} +5 -3
- package/dist/BasicPublisher-CpJFK2oS.d.mts.map +1 -0
- package/dist/{BasicPublisher-V5hELHG9.d.cts → BasicPublisher-D1q0a2xp.d.cts} +5 -3
- package/dist/BasicPublisher-D1q0a2xp.d.cts.map +1 -0
- package/dist/BasicPublisher-DogbeHAH.mjs.map +1 -1
- package/dist/{BasicSubscriber-BB3aKeph.d.mts → BasicSubscriber-6w0Af4DD.d.mts} +5 -3
- package/dist/BasicSubscriber-6w0Af4DD.d.mts.map +1 -0
- package/dist/{BasicSubscriber-CCKfbRMo.mjs → BasicSubscriber-BJSZN22M.mjs} +2 -4
- package/dist/BasicSubscriber-BJSZN22M.mjs.map +1 -0
- package/dist/{BasicSubscriber-DOwgFw5j.d.cts → BasicSubscriber-DXxQewjc.d.cts} +5 -3
- package/dist/BasicSubscriber-DXxQewjc.d.cts.map +1 -0
- package/dist/{BasicSubscriber-BGqv3c8x.cjs → BasicSubscriber-mVJRMXhZ.cjs} +2 -4
- package/dist/BasicSubscriber-mVJRMXhZ.cjs.map +1 -0
- package/dist/{EventConnection-DZhn1Msl.d.cts → EventConnection-BaJRXdg7.d.cts} +2 -2
- package/dist/EventConnection-BaJRXdg7.d.cts.map +1 -0
- package/dist/EventConnection-ClLMoIUU.mjs.map +1 -1
- package/dist/EventConnection-F_N81SXu.cjs.map +1 -1
- package/dist/{EventConnection-DeXfLGom.d.mts → EventConnection-SOhtmxib.d.mts} +2 -2
- package/dist/EventConnection-SOhtmxib.d.mts.map +1 -0
- package/dist/EventConnection.d.cts +2 -2
- package/dist/EventConnection.d.mts +2 -2
- package/dist/{Publisher-C3m8JFXm.d.mts → Publisher-1CfcYRnm.d.mts} +4 -2
- package/dist/Publisher-1CfcYRnm.d.mts.map +1 -0
- package/dist/{Publisher-nXNVjL0e.d.cts → Publisher-BfNgvHwQ.d.cts} +4 -2
- package/dist/Publisher-BfNgvHwQ.d.cts.map +1 -0
- package/dist/Publisher-DS0aOh8r.mjs.map +1 -1
- package/dist/Publisher-ceu6OxCj.cjs.map +1 -1
- package/dist/Publisher.d.cts +2 -2
- package/dist/Publisher.d.mts +2 -2
- package/dist/{RabbitMQConnection-ungB0Zl6.cjs → RabbitMQConnection-Blj9Lo05.cjs} +2 -2
- package/dist/RabbitMQConnection-Blj9Lo05.cjs.map +1 -0
- package/dist/{RabbitMQConnection-7cWp_-_Q.d.cts → RabbitMQConnection-Bm8VCI2R.d.cts} +3 -2
- package/dist/RabbitMQConnection-Bm8VCI2R.d.cts.map +1 -0
- package/dist/{RabbitMQConnection-C2HC7J7K.d.mts → RabbitMQConnection-Ck-ktCp_.d.mts} +3 -2
- package/dist/RabbitMQConnection-Ck-ktCp_.d.mts.map +1 -0
- package/dist/{RabbitMQConnection-kU3MvN5P.mjs → RabbitMQConnection-Co7f5Xsx.mjs} +2 -2
- package/dist/RabbitMQConnection-Co7f5Xsx.mjs.map +1 -0
- package/dist/RabbitMQPublisher--DL6GM6g.cjs.map +1 -1
- package/dist/{RabbitMQPublisher-CpcbgrXj.d.cts → RabbitMQPublisher-COnxcWEZ.d.mts} +5 -3
- package/dist/RabbitMQPublisher-COnxcWEZ.d.mts.map +1 -0
- package/dist/RabbitMQPublisher-o_oVI3wr.mjs.map +1 -1
- package/dist/{RabbitMQPublisher-DDZi15Ro.d.mts → RabbitMQPublisher-qQT7-1-p.d.cts} +5 -3
- package/dist/RabbitMQPublisher-qQT7-1-p.d.cts.map +1 -0
- package/dist/{RabbitMQSubscriber-BplEJEk8.cjs → RabbitMQSubscriber-C8MYAihn.cjs} +2 -3
- package/dist/RabbitMQSubscriber-C8MYAihn.cjs.map +1 -0
- package/dist/{RabbitMQSubscriber-BJ9PTGny.d.cts → RabbitMQSubscriber-C_sZjDPU.d.mts} +5 -3
- package/dist/RabbitMQSubscriber-C_sZjDPU.d.mts.map +1 -0
- package/dist/{RabbitMQSubscriber-CIvIw8MG.d.mts → RabbitMQSubscriber-D12sssMb.d.cts} +5 -3
- package/dist/RabbitMQSubscriber-D12sssMb.d.cts.map +1 -0
- package/dist/{RabbitMQSubscriber-BaXqs5nO.mjs → RabbitMQSubscriber-DlGL0pC2.mjs} +2 -3
- package/dist/RabbitMQSubscriber-DlGL0pC2.mjs.map +1 -0
- package/dist/{SNSConnection-CAImaMM2.d.mts → SNSConnection-BDfQrVBO.d.cts} +3 -2
- package/dist/SNSConnection-BDfQrVBO.d.cts.map +1 -0
- package/dist/SNSConnection-D7wCf9Si.mjs.map +1 -1
- package/dist/SNSConnection-DVsC_pbB.cjs.map +1 -1
- package/dist/{SNSConnection-Cqbr7-Ho.d.cts → SNSConnection-mHb10nQ6.d.mts} +3 -2
- package/dist/SNSConnection-mHb10nQ6.d.mts.map +1 -0
- package/dist/{SNSPublisher-BZ6N3JI9.cjs → SNSPublisher-BoA8uLnw.cjs} +2 -3
- package/dist/SNSPublisher-BoA8uLnw.cjs.map +1 -0
- package/dist/{SNSPublisher-Dkhb4LU-.d.mts → SNSPublisher-CM7UAWtf.d.mts} +7 -6
- package/dist/SNSPublisher-CM7UAWtf.d.mts.map +1 -0
- package/dist/{SNSPublisher-BfWjzNiB.mjs → SNSPublisher-Drr4kHn6.mjs} +2 -3
- package/dist/SNSPublisher-Drr4kHn6.mjs.map +1 -0
- package/dist/{SNSPublisher-RVZFa7kL.d.cts → SNSPublisher-kpsSlGDn.d.cts} +7 -6
- package/dist/SNSPublisher-kpsSlGDn.d.cts.map +1 -0
- package/dist/{SNSSubscriber-C9YJWa7m.mjs → SNSSubscriber-CBIvQpqK.mjs} +4 -8
- package/dist/SNSSubscriber-CBIvQpqK.mjs.map +1 -0
- package/dist/{SNSSubscriber-UE0ia4XM.cjs → SNSSubscriber-CWiAJjpU.cjs} +4 -8
- package/dist/SNSSubscriber-CWiAJjpU.cjs.map +1 -0
- package/dist/{SNSSubscriber-B31JmkAE.d.mts → SNSSubscriber-DDB3--pm.d.cts} +4 -3
- package/dist/SNSSubscriber-DDB3--pm.d.cts.map +1 -0
- package/dist/{SNSSubscriber-k2UwKUxu.d.cts → SNSSubscriber-Dwo8391f.d.mts} +4 -3
- package/dist/SNSSubscriber-Dwo8391f.d.mts.map +1 -0
- package/dist/{SQSConnection-C5WFqZW7.d.mts → SQSConnection-B5Ep9Tma.d.cts} +3 -2
- package/dist/SQSConnection-B5Ep9Tma.d.cts.map +1 -0
- package/dist/{SQSConnection-geav2Rsn.d.cts → SQSConnection-BI_xOzyJ.d.mts} +3 -2
- package/dist/SQSConnection-BI_xOzyJ.d.mts.map +1 -0
- package/dist/SQSConnection-BwNjUPr4.cjs.map +1 -1
- package/dist/SQSConnection-Eleqqre3.mjs.map +1 -1
- package/dist/{SQSPublisher-CdsayOLV.d.mts → SQSPublisher-BN1ds6SN.d.mts} +5 -3
- package/dist/SQSPublisher-BN1ds6SN.d.mts.map +1 -0
- package/dist/{SQSPublisher-Utb_FTe5.d.cts → SQSPublisher-DFTqwzRW.d.cts} +5 -3
- package/dist/SQSPublisher-DFTqwzRW.d.cts.map +1 -0
- package/dist/SQSPublisher-DG9o4ME3.mjs.map +1 -1
- package/dist/SQSPublisher-Dq5353oZ.cjs.map +1 -1
- package/dist/{SQSSubscriber-DZDNgLE5.cjs → SQSSubscriber-B4sRXVl6.cjs} +5 -12
- package/dist/SQSSubscriber-B4sRXVl6.cjs.map +1 -0
- package/dist/{SQSSubscriber-B6iL1EnX.d.cts → SQSSubscriber-BO2me_gs.d.cts} +4 -3
- package/dist/SQSSubscriber-BO2me_gs.d.cts.map +1 -0
- package/dist/{SQSSubscriber-CD66P7hH.mjs → SQSSubscriber-CVGhZ8Nr.mjs} +5 -12
- package/dist/SQSSubscriber-CVGhZ8Nr.mjs.map +1 -0
- package/dist/{SQSSubscriber-DBeE4XAR.d.mts → SQSSubscriber-FyZFfr2-.d.mts} +4 -3
- package/dist/SQSSubscriber-FyZFfr2-.d.mts.map +1 -0
- package/dist/Subscriber-Bd9hb_jp.mjs.map +1 -1
- package/dist/{Subscriber-Cff9EIpv.d.mts → Subscriber-BxT-KzFJ.d.mts} +4 -2
- package/dist/Subscriber-BxT-KzFJ.d.mts.map +1 -0
- package/dist/{Subscriber-CpAwcUzb.d.cts → Subscriber-DDD_4Nlx.d.cts} +4 -2
- package/dist/Subscriber-DDD_4Nlx.d.cts.map +1 -0
- package/dist/Subscriber-saVOWuMq.cjs.map +1 -1
- package/dist/Subscriber.d.cts +2 -2
- package/dist/Subscriber.d.mts +2 -2
- package/dist/basic/BasicConnection.d.cts +2 -2
- package/dist/basic/BasicConnection.d.mts +2 -2
- package/dist/basic/BasicPublisher.d.cts +3 -3
- package/dist/basic/BasicPublisher.d.mts +3 -3
- package/dist/basic/BasicSubscriber.cjs +1 -1
- package/dist/basic/BasicSubscriber.d.cts +3 -3
- package/dist/basic/BasicSubscriber.d.mts +3 -3
- package/dist/basic/BasicSubscriber.mjs +1 -1
- package/dist/basic/index.cjs +1 -1
- package/dist/basic/index.d.cts +4 -4
- package/dist/basic/index.d.mts +4 -4
- package/dist/basic/index.mjs +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.mts +4 -4
- package/dist/rabbitmq/RabbitMQConnection.cjs +1 -1
- package/dist/rabbitmq/RabbitMQConnection.d.cts +2 -2
- package/dist/rabbitmq/RabbitMQConnection.d.mts +2 -2
- package/dist/rabbitmq/RabbitMQConnection.mjs +1 -1
- package/dist/rabbitmq/RabbitMQPublisher.d.cts +3 -3
- package/dist/rabbitmq/RabbitMQPublisher.d.mts +3 -3
- package/dist/rabbitmq/RabbitMQSubscriber.cjs +1 -1
- package/dist/rabbitmq/RabbitMQSubscriber.d.cts +3 -3
- package/dist/rabbitmq/RabbitMQSubscriber.d.mts +3 -3
- package/dist/rabbitmq/RabbitMQSubscriber.mjs +1 -1
- package/dist/rabbitmq/index.cjs +2 -2
- package/dist/rabbitmq/index.d.cts +4 -4
- package/dist/rabbitmq/index.d.mts +4 -4
- package/dist/rabbitmq/index.mjs +2 -2
- package/dist/sns/SNSConnection.d.cts +2 -2
- package/dist/sns/SNSConnection.d.mts +2 -2
- package/dist/sns/SNSPublisher.cjs +1 -1
- package/dist/sns/SNSPublisher.d.cts +3 -3
- package/dist/sns/SNSPublisher.d.mts +3 -3
- package/dist/sns/SNSPublisher.mjs +1 -1
- package/dist/sns/SNSSubscriber.cjs +2 -2
- package/dist/sns/SNSSubscriber.d.cts +3 -3
- package/dist/sns/SNSSubscriber.d.mts +3 -3
- package/dist/sns/SNSSubscriber.mjs +2 -2
- package/dist/sns/index.cjs +3 -3
- package/dist/sns/index.d.cts +4 -4
- package/dist/sns/index.d.mts +4 -4
- package/dist/sns/index.mjs +3 -3
- package/dist/sqs/SQSConnection.d.cts +2 -2
- package/dist/sqs/SQSConnection.d.mts +2 -2
- package/dist/sqs/SQSPublisher.d.cts +3 -3
- package/dist/sqs/SQSPublisher.d.mts +3 -3
- package/dist/sqs/SQSSubscriber.cjs +1 -1
- package/dist/sqs/SQSSubscriber.d.cts +3 -3
- package/dist/sqs/SQSSubscriber.d.mts +3 -3
- package/dist/sqs/SQSSubscriber.mjs +1 -1
- package/dist/sqs/index.cjs +1 -1
- package/dist/sqs/index.d.cts +4 -4
- package/dist/sqs/index.d.mts +4 -4
- package/dist/sqs/index.mjs +1 -1
- package/dist/types-B63qHVOG.mjs.map +1 -1
- package/dist/types-CvSMEO5z.cjs.map +1 -1
- package/dist/{types-D0g-o6wX.d.mts → types-DSVsPgKd.d.mts} +2 -1
- package/dist/types-DSVsPgKd.d.mts.map +1 -0
- package/dist/{types-DEGUg5BA.d.cts → types-Dmbp1U-6.d.cts} +2 -1
- package/dist/types-Dmbp1U-6.d.cts.map +1 -0
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +24 -5
- package/src/EventConnection.ts +31 -31
- package/src/Publisher.ts +78 -78
- package/src/Subscriber.ts +91 -91
- package/src/__tests__/EventConnection.spec.ts +42 -0
- package/src/__tests__/Publisher.spec.ts +96 -0
- package/src/__tests__/Subscriber.spec.ts +91 -23
- package/src/basic/BasicConnection.ts +35 -35
- package/src/basic/BasicPublisher.ts +8 -8
- package/src/basic/BasicSubscriber.ts +13 -16
- package/src/basic/__tests__/BasicSubscriber.spec.ts +116 -116
- package/src/index.ts +13 -13
- package/src/rabbitmq/RabbitMQConnection.ts +139 -139
- package/src/rabbitmq/RabbitMQPublisher.ts +48 -48
- package/src/rabbitmq/RabbitMQSubscriber.ts +100 -102
- package/src/rabbitmq/__tests__/RabbitMQPublisher.spec.ts +364 -364
- package/src/rabbitmq/__tests__/RabbitMQSubscriber.spec.ts +204 -204
- package/src/rabbitmq/index.ts +3 -3
- package/src/sns/SNSConnection.ts +76 -76
- package/src/sns/SNSPublisher.ts +54 -56
- package/src/sns/SNSSubscriber.ts +187 -191
- package/src/sns/__tests__/SNS-SQS-Integration.spec.ts +321 -321
- package/src/sns/__tests__/SNSPublisher.spec.ts +449 -0
- package/src/sns/__tests__/SNSSubscriber.spec.ts +527 -0
- package/src/sns/index.ts +3 -3
- package/src/sqs/SQSConnection.ts +75 -75
- package/src/sqs/SQSPublisher.ts +93 -93
- package/src/sqs/SQSSubscriber.ts +157 -165
- package/src/sqs/__tests__/SQSPublisher.spec.ts +178 -178
- package/src/sqs/index.ts +3 -3
- package/src/types.ts +28 -29
- package/tsconfig.json +9 -0
- package/tsdown.config.ts +1 -1
- package/dist/BasicSubscriber-BGqv3c8x.cjs.map +0 -1
- package/dist/BasicSubscriber-CCKfbRMo.mjs.map +0 -1
- package/dist/RabbitMQConnection-kU3MvN5P.mjs.map +0 -1
- package/dist/RabbitMQConnection-ungB0Zl6.cjs.map +0 -1
- package/dist/RabbitMQSubscriber-BaXqs5nO.mjs.map +0 -1
- package/dist/RabbitMQSubscriber-BplEJEk8.cjs.map +0 -1
- package/dist/SNSPublisher-BZ6N3JI9.cjs.map +0 -1
- package/dist/SNSPublisher-BfWjzNiB.mjs.map +0 -1
- package/dist/SNSSubscriber-C9YJWa7m.mjs.map +0 -1
- package/dist/SNSSubscriber-UE0ia4XM.cjs.map +0 -1
- package/dist/SQSSubscriber-CD66P7hH.mjs.map +0 -1
- package/dist/SQSSubscriber-DZDNgLE5.cjs.map +0 -1
package/src/sns/SNSConnection.ts
CHANGED
|
@@ -3,96 +3,96 @@ import type { EventConnection } from '../types';
|
|
|
3
3
|
import { EventPublisherType } from '../types';
|
|
4
4
|
|
|
5
5
|
export interface SNSConnectionConfig {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
topicArn: string;
|
|
7
|
+
region?: string;
|
|
8
|
+
endpoint?: string; // Custom endpoint (e.g., for LocalStack)
|
|
9
|
+
credentials?: {
|
|
10
|
+
accessKeyId: string;
|
|
11
|
+
secretAccessKey: string;
|
|
12
|
+
sessionToken?: string;
|
|
13
|
+
};
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export class SNSConnection implements EventConnection {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
readonly type = EventPublisherType.SNS;
|
|
18
|
+
private client: SNSClient;
|
|
19
|
+
private connected = false;
|
|
20
|
+
private config: SNSConnectionConfig;
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
constructor(config: SNSConnectionConfig) {
|
|
23
|
+
this.config = config;
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
const clientConfig: SNSClientConfig = {
|
|
26
|
+
region: config.region,
|
|
27
|
+
endpoint: config.endpoint,
|
|
28
|
+
credentials: config.credentials,
|
|
29
|
+
};
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
this.client = new SNSClient(clientConfig);
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Create an SNSConnection from a connection string
|
|
36
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
37
|
+
*/
|
|
38
|
+
static async fromConnectionString(
|
|
39
|
+
connectionString: string,
|
|
40
|
+
): Promise<SNSConnection> {
|
|
41
|
+
const url = new URL(connectionString);
|
|
42
|
+
const params = url.searchParams;
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
const topicArn = params.get('topicArn');
|
|
45
|
+
if (!topicArn) {
|
|
46
|
+
throw new Error('topicArn parameter is required in connection string');
|
|
47
|
+
}
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
const config: SNSConnectionConfig = {
|
|
50
|
+
topicArn,
|
|
51
|
+
region: params.get('region') || undefined,
|
|
52
|
+
endpoint: params.get('endpoint') || undefined,
|
|
53
|
+
};
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
55
|
+
// Parse credentials if provided
|
|
56
|
+
const accessKeyId = params.get('accessKeyId');
|
|
57
|
+
const secretAccessKey = params.get('secretAccessKey');
|
|
58
|
+
if (accessKeyId && secretAccessKey) {
|
|
59
|
+
config.credentials = {
|
|
60
|
+
accessKeyId,
|
|
61
|
+
secretAccessKey,
|
|
62
|
+
sessionToken: params.get('sessionToken') || undefined,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
const connection = new SNSConnection(config);
|
|
67
|
+
await connection.connect();
|
|
68
|
+
return connection;
|
|
69
|
+
}
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
async connect(): Promise<void> {
|
|
72
|
+
// SNS doesn't have a traditional connection, but we mark as connected
|
|
73
|
+
this.connected = true;
|
|
74
|
+
}
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
async close(): Promise<void> {
|
|
77
|
+
this.client.destroy();
|
|
78
|
+
this.connected = false;
|
|
79
|
+
}
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
isConnected(): boolean {
|
|
82
|
+
return this.connected;
|
|
83
|
+
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Get the underlying SNS client
|
|
87
|
+
*/
|
|
88
|
+
get snsClient(): SNSClient {
|
|
89
|
+
return this.client;
|
|
90
|
+
}
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Get the topic ARN for this connection
|
|
94
|
+
*/
|
|
95
|
+
get topicArn(): string {
|
|
96
|
+
return this.config.topicArn;
|
|
97
|
+
}
|
|
98
98
|
}
|
package/src/sns/SNSPublisher.ts
CHANGED
|
@@ -2,63 +2,61 @@ import { PublishCommand } from '@aws-sdk/client-sns';
|
|
|
2
2
|
import type { EventPublisher, PublishableMessage } from '../types';
|
|
3
3
|
import type { SNSConnection } from './SNSConnection';
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
// Optional publisher-specific options
|
|
7
|
-
}
|
|
5
|
+
export type SNSPublisherOptions = {};
|
|
8
6
|
|
|
9
7
|
export class SNSPublisher<TMessage extends PublishableMessage<string, any>>
|
|
10
|
-
|
|
8
|
+
implements EventPublisher<TMessage>
|
|
11
9
|
{
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
10
|
+
constructor(
|
|
11
|
+
private connection: SNSConnection,
|
|
12
|
+
_options: SNSPublisherOptions = {},
|
|
13
|
+
) {}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Create an SNSPublisher from a connection string
|
|
17
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
18
|
+
*/
|
|
19
|
+
static async fromConnectionString<
|
|
20
|
+
TMessage extends PublishableMessage<string, any>,
|
|
21
|
+
>(connectionString: string): Promise<SNSPublisher<TMessage>> {
|
|
22
|
+
const { SNSConnection } = await import('./SNSConnection');
|
|
23
|
+
const connection =
|
|
24
|
+
await SNSConnection.fromConnectionString(connectionString);
|
|
25
|
+
|
|
26
|
+
return new SNSPublisher<TMessage>(connection);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async publish(messages: TMessage[]): Promise<void> {
|
|
30
|
+
if (messages.length === 0) return;
|
|
31
|
+
|
|
32
|
+
if (!this.connection.isConnected()) {
|
|
33
|
+
await this.connection.connect();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Publish all messages
|
|
37
|
+
await Promise.all(messages.map((message) => this.publishMessage(message)));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private async publishMessage(message: TMessage): Promise<void> {
|
|
41
|
+
const command = new PublishCommand({
|
|
42
|
+
TopicArn: this.connection.topicArn,
|
|
43
|
+
Message: JSON.stringify({
|
|
44
|
+
type: message.type,
|
|
45
|
+
payload: message.payload,
|
|
46
|
+
}),
|
|
47
|
+
MessageAttributes: {
|
|
48
|
+
type: {
|
|
49
|
+
DataType: 'String',
|
|
50
|
+
StringValue: message.type,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
await this.connection.snsClient.send(command);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async close(): Promise<void> {
|
|
59
|
+
// Publisher doesn't own the connection
|
|
60
|
+
// Connection should be closed by whoever created it
|
|
61
|
+
}
|
|
64
62
|
}
|