@message-queue-toolkit/sns 19.1.0 → 21.0.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.
@@ -1,5 +1,5 @@
1
1
  import type { Either } from '@lokalise/node-core';
2
- import type { AsyncPublisher, BarrierResult, MessageInvalidFormatError, MessageValidationError, OffloadedPayloadPointerPayload, QueuePublisherOptions, ResolvedMessage } from '@message-queue-toolkit/core';
2
+ import { type AsyncPublisher, type BarrierResult, type MessageInvalidFormatError, type MessageValidationError, type OffloadedPayloadPointerPayload, type QueuePublisherOptions, type ResolvedMessage } from '@message-queue-toolkit/core';
3
3
  import type { SNSCreationConfig, SNSDependencies, SNSTopicLocatorType } from './AbstractSnsService';
4
4
  import { AbstractSnsService } from './AbstractSnsService';
5
5
  export type SNSMessageOptions = {
@@ -9,6 +9,7 @@ export type SNSMessageOptions = {
9
9
  export type SNSPublisherOptions<MessagePayloadType extends object> = QueuePublisherOptions<SNSCreationConfig, SNSTopicLocatorType, MessagePayloadType>;
10
10
  export declare abstract class AbstractSnsPublisher<MessagePayloadType extends object> extends AbstractSnsService<MessagePayloadType, MessagePayloadType> implements AsyncPublisher<MessagePayloadType, SNSMessageOptions> {
11
11
  private readonly messageSchemaContainer;
12
+ private readonly isDeduplicationEnabled;
12
13
  private initPromise?;
13
14
  constructor(dependencies: SNSDependencies, options: SNSPublisherOptions<MessagePayloadType>);
14
15
  publish(message: MessagePayloadType, options?: SNSMessageOptions): Promise<void>;
@@ -18,5 +19,6 @@ export declare abstract class AbstractSnsPublisher<MessagePayloadType extends ob
18
19
  protected processPrehandlers(): Promise<undefined>;
19
20
  protected preHandlerBarrier<BarrierOutput>(): Promise<BarrierResult<BarrierOutput>>;
20
21
  processMessage(): Promise<Either<'retryLater', 'success'>>;
22
+ protected isDeduplicationEnabledForMessage(message: MessagePayloadType): boolean;
21
23
  protected sendMessage(payload: MessagePayloadType | OffloadedPayloadPointerPayload, options: SNSMessageOptions): Promise<void>;
22
24
  }
@@ -3,15 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractSnsPublisher = void 0;
4
4
  const client_sns_1 = require("@aws-sdk/client-sns");
5
5
  const node_core_1 = require("@lokalise/node-core");
6
+ const core_1 = require("@message-queue-toolkit/core");
6
7
  const sqs_1 = require("@message-queue-toolkit/sqs");
7
8
  const snsUtils_1 = require("../utils/snsUtils");
8
9
  const AbstractSnsService_1 = require("./AbstractSnsService");
9
10
  class AbstractSnsPublisher extends AbstractSnsService_1.AbstractSnsService {
10
11
  messageSchemaContainer;
12
+ isDeduplicationEnabled;
11
13
  initPromise;
12
14
  constructor(dependencies, options) {
13
15
  super(dependencies, options);
14
16
  this.messageSchemaContainer = this.resolvePublisherMessageSchemaContainer(options);
17
+ this.isDeduplicationEnabled = !!options.enablePublisherDeduplication;
15
18
  }
16
19
  async publish(message, options = {}) {
17
20
  const messageSchemaResult = this.resolveSchema(message);
@@ -28,7 +31,9 @@ class AbstractSnsPublisher extends AbstractSnsService_1.AbstractSnsService {
28
31
  this.initPromise = undefined;
29
32
  }
30
33
  try {
34
+ const messageProcessingStartTimestamp = Date.now();
31
35
  const parsedMessage = messageSchemaResult.result.parse(message);
36
+ const topicName = this.locatorConfig?.topicName ?? this.creationConfig?.topic?.Name ?? 'unknown';
32
37
  if (this.logMessages) {
33
38
  // @ts-ignore
34
39
  const resolvedLogMessage = this.resolveMessageLog(message, message[this.messageTypeField]);
@@ -36,8 +41,24 @@ class AbstractSnsPublisher extends AbstractSnsService_1.AbstractSnsService {
36
41
  }
37
42
  const updatedMessage = this.updateInternalProperties(message);
38
43
  const maybeOffloadedPayloadMessage = await this.offloadMessagePayloadIfNeeded(updatedMessage, () => (0, snsUtils_1.calculateOutgoingMessageSize)(updatedMessage));
44
+ if (this.isDeduplicationEnabledForMessage(parsedMessage) &&
45
+ (await this.deduplicateMessage(parsedMessage, core_1.DeduplicationRequester.Publisher))
46
+ .isDuplicated) {
47
+ this.handleMessageProcessed({
48
+ message: parsedMessage,
49
+ processingResult: { status: 'published', skippedAsDuplicate: true },
50
+ messageProcessingStartTimestamp,
51
+ queueName: topicName,
52
+ });
53
+ return;
54
+ }
39
55
  await this.sendMessage(maybeOffloadedPayloadMessage, options);
40
- this.handleMessageProcessed(parsedMessage, 'published');
56
+ this.handleMessageProcessed({
57
+ message: parsedMessage,
58
+ processingResult: { status: 'published' },
59
+ messageProcessingStartTimestamp,
60
+ queueName: topicName,
61
+ });
41
62
  }
42
63
  catch (error) {
43
64
  const err = error;
@@ -74,6 +95,9 @@ class AbstractSnsPublisher extends AbstractSnsService_1.AbstractSnsService {
74
95
  processMessage() {
75
96
  throw new Error('Not implemented for publisher');
76
97
  }
98
+ isDeduplicationEnabledForMessage(message) {
99
+ return this.isDeduplicationEnabled && super.isDeduplicationEnabledForMessage(message);
100
+ }
77
101
  async sendMessage(payload, options) {
78
102
  const attributes = (0, sqs_1.resolveOutgoingMessageAttributes)(payload);
79
103
  const command = new client_sns_1.PublishCommand({
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractSnsPublisher.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsPublisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractSnsPublisher.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsPublisher.ts"],"names":[],"mappings":";;;AACA,oDAAoD;AAEpD,mDAAmD;AACnD,sDAUoC;AACpC,oDAA6E;AAE7E,gDAAgE;AAGhE,6DAAyD;AAazD,MAAsB,oBACpB,SAAQ,uCAA0D;IAGjD,sBAAsB,CAA4C;IAClE,sBAAsB,CAAS;IAExC,WAAW,CAAgB;IAEnC,YAAY,YAA6B,EAAE,OAAgD;QACzF,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAE5B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAA;QAClF,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA2B,EAAE,UAA6B,EAAE;QACxE,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACvD,IAAI,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,mBAAmB,CAAC,KAAK,CAAA;QACjC,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,kCAAkC;YAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;YAChC,CAAC;YACD,MAAM,IAAI,CAAC,WAAW,CAAA;YACtB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAC9B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,+BAA+B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAClD,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC/D,MAAM,SAAS,GACb,IAAI,CAAC,aAAa,EAAE,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS,CAAA;YAEhF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,aAAa;gBACb,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;gBAC1F,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;YACrC,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAA;YAC7D,MAAM,4BAA4B,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAC3E,cAAc,EACd,GAAG,EAAE,CAAC,IAAA,uCAA4B,EAAC,cAAc,CAAC,CACnD,CAAA;YAED,IACE,IAAI,CAAC,gCAAgC,CAAC,aAAa,CAAC;gBACpD,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,6BAAsB,CAAC,SAAS,CAAC,CAAC;qBAC7E,YAAY,EACf,CAAC;gBACD,IAAI,CAAC,sBAAsB,CAAC;oBAC1B,OAAO,EAAE,aAAa;oBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE;oBACnE,+BAA+B;oBAC/B,SAAS,EAAE,SAAS;iBACrB,CAAC,CAAA;gBACF,OAAM;YACR,CAAC;YAED,MAAM,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAA;YAE7D,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,OAAO,EAAE,aAAa;gBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;gBACzC,+BAA+B;gBAC/B,SAAS,EAAE,SAAS;aACrB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAc,CAAA;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YACrB,MAAM,IAAI,yBAAa,CAAC;gBACtB,OAAO,EAAE,kCAAkC,GAAG,CAAC,OAAO,EAAE;gBACxD,SAAS,EAAE,mBAAmB;gBAC9B,OAAO,EAAE;oBACP,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;oBAChC,KAAK,EAAE,IAAI,CAAC,QAAQ;oBACpB,aAAa;oBACb,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,SAAS;iBACzD;gBACD,KAAK,EAAE,GAAG;aACX,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEkB,cAAc;QAI/B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAEkB,aAAa,CAAC,OAA2B;QAC1D,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC3D,CAAC;IAED,qBAAqB;IACF,mBAAmB;QACpC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAEkB,kBAAkB;QACnC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAEkB,iBAAiB;QAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAEQ,cAAc;QACrB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAEkB,gCAAgC,CAAC,OAA2B;QAC7E,OAAO,IAAI,CAAC,sBAAsB,IAAI,KAAK,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAA;IACvF,CAAC;IAES,KAAK,CAAC,WAAW,CACzB,OAA4D,EAC5D,OAA0B;QAE1B,MAAM,UAAU,GAAG,IAAA,sCAAgC,EAAwB,OAAO,CAAC,CAAA;QACnF,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAChC,iBAAiB,EAAE,UAAU;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,OAAO;SACX,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;CAEF;AAvID,oDAuIC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/sns",
3
- "version": "19.1.0",
3
+ "version": "21.0.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "SNS adapter for message-queue-toolkit",
@@ -33,9 +33,9 @@
33
33
  "@aws-sdk/client-sns": "^3.632.0",
34
34
  "@aws-sdk/client-sqs": "^3.632.0",
35
35
  "@aws-sdk/client-sts": "^3.632.0",
36
- "@message-queue-toolkit/core": ">=18.1.0",
36
+ "@message-queue-toolkit/core": ">=20.0.0",
37
37
  "@message-queue-toolkit/schemas": ">=2.0.0",
38
- "@message-queue-toolkit/sqs": "^18.1.0"
38
+ "@message-queue-toolkit/sqs": ">=20.0.0"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@aws-sdk/client-s3": "^3.670.0",
@@ -44,15 +44,17 @@
44
44
  "@biomejs/biome": "1.9.4",
45
45
  "@kibertoad/biome-config": "^1.2.1",
46
46
  "@message-queue-toolkit/core": "*",
47
+ "@message-queue-toolkit/redis-message-deduplication-store": "*",
47
48
  "@message-queue-toolkit/s3-payload-store": "*",
48
49
  "@message-queue-toolkit/sqs": "*",
49
50
  "@types/node": "^22.7.5",
50
- "@vitest/coverage-v8": "^2.1.5",
51
+ "@vitest/coverage-v8": "^3.0.7",
51
52
  "awilix": "^12.0.1",
52
- "awilix-manager": "^5.1.0",
53
+ "awilix-manager": "^6.0.0",
53
54
  "del-cli": "^6.0.0",
55
+ "ioredis": "^5.3.2",
54
56
  "typescript": "^5.7.2",
55
- "vitest": "^2.1.5"
57
+ "vitest": "^3.0.7"
56
58
  },
57
59
  "homepage": "https://github.com/kibertoad/message-queue-toolkit",
58
60
  "repository": {