@segment/actions-shared 1.97.1-channels-1094.21 → 1.98.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.
Files changed (79) hide show
  1. package/dist/engage/utils/AggregateError.d.ts +14 -0
  2. package/dist/engage/utils/AggregateError.js +26 -0
  3. package/dist/engage/utils/AggregateError.js.map +1 -0
  4. package/dist/engage/utils/EngageActionPerformer.d.ts +42 -0
  5. package/dist/engage/utils/EngageActionPerformer.js +148 -0
  6. package/dist/engage/utils/EngageActionPerformer.js.map +1 -0
  7. package/dist/engage/utils/EngageLogger.d.ts +18 -0
  8. package/dist/engage/utils/EngageLogger.js +52 -0
  9. package/dist/engage/utils/EngageLogger.js.map +1 -0
  10. package/dist/engage/utils/EngageStats.d.ts +18 -0
  11. package/dist/engage/utils/EngageStats.js +95 -0
  12. package/dist/engage/utils/EngageStats.js.map +1 -0
  13. package/dist/engage/utils/IntegrationErrorWrapper.d.ts +12 -0
  14. package/dist/engage/utils/IntegrationErrorWrapper.js +31 -0
  15. package/dist/engage/utils/IntegrationErrorWrapper.js.map +1 -0
  16. package/dist/engage/utils/MessageSendPerformer.d.ts +65 -0
  17. package/dist/engage/utils/MessageSendPerformer.js +211 -0
  18. package/dist/engage/utils/MessageSendPerformer.js.map +1 -0
  19. package/dist/engage/utils/Profile.d.ts +6 -0
  20. package/dist/engage/utils/Profile.js +3 -0
  21. package/dist/engage/utils/Profile.js.map +1 -0
  22. package/dist/engage/utils/ResponseError.d.ts +25 -0
  23. package/dist/engage/utils/ResponseError.js +22 -0
  24. package/dist/engage/utils/ResponseError.js.map +1 -0
  25. package/dist/engage/utils/getProfileApiEndpoint.d.ts +2 -0
  26. package/dist/engage/utils/getProfileApiEndpoint.js +10 -0
  27. package/dist/engage/utils/getProfileApiEndpoint.js.map +1 -0
  28. package/dist/engage/utils/index.d.ts +14 -0
  29. package/dist/engage/utils/index.js +27 -0
  30. package/dist/engage/utils/index.js.map +1 -0
  31. package/dist/engage/utils/isDestinationActionService.d.ts +1 -0
  32. package/dist/engage/utils/isDestinationActionService.js +8 -0
  33. package/dist/engage/utils/isDestinationActionService.js.map +1 -0
  34. package/dist/engage/utils/isRetryableError.d.ts +2 -0
  35. package/dist/engage/utils/isRetryableError.js +33 -0
  36. package/dist/engage/utils/isRetryableError.js.map +1 -0
  37. package/dist/engage/utils/operationTracking/GenericMethodDecorator.d.ts +1 -0
  38. package/dist/engage/utils/operationTracking/GenericMethodDecorator.js +3 -0
  39. package/dist/engage/utils/operationTracking/GenericMethodDecorator.js.map +1 -0
  40. package/dist/engage/utils/operationTracking/OperationDecorator.d.ts +46 -0
  41. package/dist/engage/utils/operationTracking/OperationDecorator.js +46 -0
  42. package/dist/engage/utils/operationTracking/OperationDecorator.js.map +1 -0
  43. package/dist/engage/utils/operationTracking/OperationDuration.d.ts +12 -0
  44. package/dist/engage/utils/operationTracking/OperationDuration.js +23 -0
  45. package/dist/engage/utils/operationTracking/OperationDuration.js.map +1 -0
  46. package/dist/engage/utils/operationTracking/OperationErrorHandler.d.ts +12 -0
  47. package/dist/engage/utils/operationTracking/OperationErrorHandler.js +35 -0
  48. package/dist/engage/utils/operationTracking/OperationErrorHandler.js.map +1 -0
  49. package/dist/engage/utils/operationTracking/OperationFinallyHooks.d.ts +14 -0
  50. package/dist/engage/utils/operationTracking/OperationFinallyHooks.js +31 -0
  51. package/dist/engage/utils/operationTracking/OperationFinallyHooks.js.map +1 -0
  52. package/dist/engage/utils/operationTracking/OperationLogger.d.ts +31 -0
  53. package/dist/engage/utils/operationTracking/OperationLogger.js +104 -0
  54. package/dist/engage/utils/operationTracking/OperationLogger.js.map +1 -0
  55. package/dist/engage/utils/operationTracking/OperationStats.d.ts +39 -0
  56. package/dist/engage/utils/operationTracking/OperationStats.js +130 -0
  57. package/dist/engage/utils/operationTracking/OperationStats.js.map +1 -0
  58. package/dist/engage/utils/operationTracking/OperationTree.d.ts +23 -0
  59. package/dist/engage/utils/operationTracking/OperationTree.js +49 -0
  60. package/dist/engage/utils/operationTracking/OperationTree.js.map +1 -0
  61. package/dist/engage/utils/operationTracking/TrackedError.d.ts +6 -0
  62. package/dist/engage/utils/operationTracking/TrackedError.js +3 -0
  63. package/dist/engage/utils/operationTracking/TrackedError.js.map +1 -0
  64. package/dist/engage/utils/operationTracking/index.d.ts +10 -0
  65. package/dist/engage/utils/operationTracking/index.js +23 -0
  66. package/dist/engage/utils/operationTracking/index.js.map +1 -0
  67. package/dist/engage/utils/operationTracking/wrapTryCatchFinallyPromisable.d.ts +21 -0
  68. package/dist/engage/utils/operationTracking/wrapTryCatchFinallyPromisable.js +99 -0
  69. package/dist/engage/utils/operationTracking/wrapTryCatchFinallyPromisable.js.map +1 -0
  70. package/dist/engage/utils/testUtils.d.ts +6 -0
  71. package/dist/engage/utils/testUtils.js +27 -0
  72. package/dist/engage/utils/testUtils.js.map +1 -0
  73. package/dist/engage/utils/track.d.ts +52 -0
  74. package/dist/engage/utils/track.js +9 -0
  75. package/dist/engage/utils/track.js.map +1 -0
  76. package/dist/index.d.ts +1 -0
  77. package/dist/index.js +1 -0
  78. package/dist/index.js.map +1 -1
  79. package/package.json +3 -3
@@ -0,0 +1,14 @@
1
+ import { IntegrationError } from '@segment/actions-core';
2
+ export declare class AggregateError extends IntegrationError {
3
+ errors: any[];
4
+ data?: any;
5
+ static create(args: {
6
+ errors: any[];
7
+ code?: string;
8
+ status?: number;
9
+ takeCodeAndStatusFromError?: any;
10
+ message?: (msg: string) => string;
11
+ }): AggregateError;
12
+ constructor(errors: any[], code?: string, status?: number, data?: any, message?: string);
13
+ [key: string]: any;
14
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AggregateError = void 0;
4
+ const actions_core_1 = require("@segment/actions-core");
5
+ const ResponseError_1 = require("./ResponseError");
6
+ class AggregateError extends actions_core_1.IntegrationError {
7
+ constructor(errors, code, status, data, message) {
8
+ super(message || 'Multiple errors', code, status);
9
+ this.errors = errors;
10
+ this.data = data;
11
+ }
12
+ static create(args) {
13
+ const firstErrorInfo = ResponseError_1.getErrorDetails(args.takeCodeAndStatusFromError ? args.takeCodeAndStatusFromError : args.errors[0]);
14
+ if (!args.code)
15
+ args.code = firstErrorInfo.code;
16
+ if (!args.status)
17
+ args.status = firstErrorInfo.status;
18
+ let message = `Multiple errors (${args.errors.length}): ${args.errors
19
+ .map((e) => ResponseError_1.getErrorDetails(e).message)
20
+ .join(', ')}`;
21
+ message = args.message?.(message) || message;
22
+ return new AggregateError(args.errors, args.code, args.status, undefined, message);
23
+ }
24
+ }
25
+ exports.AggregateError = AggregateError;
26
+ //# sourceMappingURL=AggregateError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AggregateError.js","sourceRoot":"","sources":["../../../src/engage/utils/AggregateError.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,mDAAiD;AAEjD,MAAa,cAAe,SAAQ,+BAAgB;IAqBlD,YAAmB,MAAa,EAAE,IAAa,EAAE,MAAe,EAAS,IAAU,EAAE,OAAgB;QACnG,KAAK,CAAC,OAAO,IAAI,iBAAiB,EAAE,IAAK,EAAE,MAAO,CAAC,CAAA;QADlC,WAAM,GAAN,MAAM,CAAO;QAAyC,SAAI,GAAJ,IAAI,CAAM;IAEnF,CAAC;IAtBD,MAAM,CAAC,MAAM,CAAC,IAMb;QACC,MAAM,cAAc,GAAG,+BAAe,CACpC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACnF,CAAA;QAED,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAA;QACrD,IAAI,OAAO,GAAG,oBAAoB,IAAI,CAAC,MAAM,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM;aAClE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,+BAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;aACtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;QACf,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA;QAC5C,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACpF,CAAC;CAOF;AA1BD,wCA0BC"}
@@ -0,0 +1,42 @@
1
+ import { RequestClient } from '@segment/actions-core/create-request-client';
2
+ import { ExecuteInput } from '@segment/actions-core/destination-kit';
3
+ import { MaybePromise } from '@segment/actions-core/destination-kit/types';
4
+ import { EngageLogger } from './EngageLogger';
5
+ import { EngageStats } from './EngageStats';
6
+ import { OperationContext } from './track';
7
+ import { RequestOptions } from '@segment/actions-core/request-client';
8
+ import { IntegrationError } from '@segment/actions-core';
9
+ import { Awaited } from './operationTracking';
10
+ export declare abstract class EngageActionPerformer<TSettings = any, TPayload = any, TReturn = any> {
11
+ readonly requestClient: RequestClient;
12
+ readonly executeInput: ExecuteInput<TSettings, TPayload>;
13
+ readonly logger: EngageLogger;
14
+ readonly statsClient: EngageStats;
15
+ readonly dataFeedCache: import("@segment/actions-core/destination-kit").DataFeedCache | undefined;
16
+ readonly currentOperation: OperationContext | undefined;
17
+ readonly payload: TPayload;
18
+ readonly settings: TSettings;
19
+ constructor(requestClient: RequestClient, executeInput: ExecuteInput<TSettings, TPayload>);
20
+ beforePerform?(): void | Promise<void>;
21
+ perform(): Promise<TReturn>;
22
+ abstract doPerform(): MaybePromise<TReturn>;
23
+ abstract getIntegrationStatsName(): string;
24
+ abstract getChannelType(): string;
25
+ request<Data = unknown>(url: string, options?: RequestOptions): Promise<import("@segment/actions-core/create-request-client").ModifiedResponse<Data>>;
26
+ onResponse?(args: {
27
+ response?: Awaited<ReturnType<RequestClient>>;
28
+ error?: any;
29
+ operation: OperationContext;
30
+ }): void;
31
+ redactPii(pii: string | undefined): string | undefined;
32
+ isFeatureActive(featureName: string, getDefault?: () => boolean): boolean | undefined;
33
+ logInfo(msg: string, metadata?: object): void;
34
+ logError(msg: string, metadata?: object): void;
35
+ logOnError(logMessage: string | ((ctx: OperationContext) => string)): void;
36
+ statsIncr(metric: string, value?: number, tags?: string[]): void;
37
+ statsHistogram(metric: string, value: number, tags?: string[]): void;
38
+ statsSet(metric: string, value: number, tags?: string[]): void;
39
+ get logDetails(): Record<string, unknown>;
40
+ get tags(): string[];
41
+ rethrowIntegrationError(error: unknown, getWrapper: () => IntegrationError | ConstructorParameters<typeof IntegrationError>): never;
42
+ }
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EngageActionPerformer = void 0;
13
+ const EngageLogger_1 = require("./EngageLogger");
14
+ const EngageStats_1 = require("./EngageStats");
15
+ const track_1 = require("./track");
16
+ const isDestinationActionService_1 = require("./isDestinationActionService");
17
+ const ResponseError_1 = require("./ResponseError");
18
+ const IntegrationErrorWrapper_1 = require("./IntegrationErrorWrapper");
19
+ const truncate_1 = __importDefault(require("lodash/truncate"));
20
+ class EngageActionPerformer {
21
+ constructor(requestClient, executeInput) {
22
+ this.requestClient = requestClient;
23
+ this.executeInput = executeInput;
24
+ this.logger = new EngageLogger_1.EngageLogger(this);
25
+ this.statsClient = new EngageStats_1.EngageStats(this);
26
+ this.dataFeedCache = this.executeInput.dataFeedCache;
27
+ this.payload = executeInput.payload;
28
+ this.settings = executeInput.settings;
29
+ }
30
+ async perform() {
31
+ await this.beforePerform?.();
32
+ return this.doPerform();
33
+ }
34
+ async request(url, options) {
35
+ const op = this.currentOperation;
36
+ op?.onFinally.push(() => {
37
+ const respError = op?.error;
38
+ if (respError) {
39
+ const errorDetails = ResponseError_1.getErrorDetails(respError);
40
+ const msgLowercare = errorDetails?.message?.toLowerCase();
41
+ const isTimeoutError = msgLowercare?.includes('timeout') ||
42
+ msgLowercare?.includes('timedout') ||
43
+ msgLowercare?.includes('exceeded the deadline') ||
44
+ errorDetails.code?.toLowerCase().includes('etimedout');
45
+ if (isTimeoutError) {
46
+ const status = errorDetails.status ?? respError.status ?? 408;
47
+ respError.status = status;
48
+ errorDetails.status = status;
49
+ const errorCode = errorDetails.code ?? respError.code ?? 'etimedout';
50
+ respError.code = errorCode;
51
+ errorDetails.code = errorCode;
52
+ respError.retry = true;
53
+ }
54
+ if (errorDetails.code)
55
+ op.tags.push(`response_code:${errorDetails.code}`);
56
+ if (errorDetails.status)
57
+ op.tags.push(`response_status:${errorDetails.status}`);
58
+ if (this.onResponse)
59
+ try {
60
+ this.onResponse({ error: respError, operation: op });
61
+ }
62
+ catch (e) {
63
+ op.logs.push(`Error in onResponse: ${e}`);
64
+ }
65
+ }
66
+ else {
67
+ const resp = op?.result;
68
+ if (resp && resp.status)
69
+ op.tags.push(`response_status:${resp.status}`);
70
+ if (this.onResponse)
71
+ try {
72
+ this.onResponse({ response: resp, operation: op });
73
+ }
74
+ catch (e) {
75
+ op.logs.push(`Error in onResponse: ${e}`);
76
+ }
77
+ }
78
+ });
79
+ return await this.requestClient(url, options);
80
+ }
81
+ redactPii(pii) {
82
+ if (!pii) {
83
+ return pii;
84
+ }
85
+ if (pii.length <= 8) {
86
+ return '***';
87
+ }
88
+ return pii.substring(0, 3) + '***' + pii.substring(pii.length - 3);
89
+ }
90
+ isFeatureActive(featureName, getDefault) {
91
+ if (isDestinationActionService_1.isDestinationActionService())
92
+ return true;
93
+ if (!this.executeInput.features || !(featureName in this.executeInput.features))
94
+ return getDefault?.();
95
+ return this.executeInput.features[featureName];
96
+ }
97
+ logInfo(msg, metadata) {
98
+ this.logger.logInfo(msg, metadata);
99
+ }
100
+ logError(msg, metadata) {
101
+ this.logger.logError(msg, metadata);
102
+ }
103
+ logOnError(logMessage) {
104
+ const op = this.currentOperation;
105
+ op?.onFinally.push(() => {
106
+ if (op.error) {
107
+ const msg = typeof logMessage === 'function' ? logMessage(op) : logMessage;
108
+ op.logs.push(msg);
109
+ }
110
+ });
111
+ }
112
+ statsIncr(metric, value, tags) {
113
+ this.statsClient.stats({ method: 'incr', metric, value, tags });
114
+ }
115
+ statsHistogram(metric, value, tags) {
116
+ this.statsClient.stats({ method: 'histogram', metric, value, tags });
117
+ }
118
+ statsSet(metric, value, tags) {
119
+ this.statsClient.stats({ method: 'set', metric, value, tags });
120
+ }
121
+ get logDetails() {
122
+ return this.logger.logDetails;
123
+ }
124
+ get tags() {
125
+ return this.statsClient.tags;
126
+ }
127
+ rethrowIntegrationError(error, getWrapper) {
128
+ throw IntegrationErrorWrapper_1.IntegrationErrorWrapper.wrap(error, getWrapper, this.currentOperation);
129
+ }
130
+ }
131
+ __decorate([
132
+ track_1.track()
133
+ ], EngageActionPerformer.prototype, "perform", null);
134
+ __decorate([
135
+ track_1.track({
136
+ onTry: addUrlToLog,
137
+ onFinally: addUrlToLog
138
+ })
139
+ ], EngageActionPerformer.prototype, "request", null);
140
+ exports.EngageActionPerformer = EngageActionPerformer;
141
+ function addUrlToLog(ctx) {
142
+ const ctxFull = ctx;
143
+ const argUrl = ctx.funcArgs?.[0];
144
+ if (ctxFull.logs && argUrl) {
145
+ ctxFull.logs.push(truncate_1.default(argUrl, { length: 70 }));
146
+ }
147
+ }
148
+ //# sourceMappingURL=EngageActionPerformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EngageActionPerformer.js","sourceRoot":"","sources":["../../../src/engage/utils/EngageActionPerformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Logger } from '@segment/actions-core/destination-kit';
2
+ import { OperationLogger, OperationLoggerContext, TryCatchFinallyHook } from './operationTracking';
3
+ import { EngageActionPerformer } from './EngageActionPerformer';
4
+ export declare const FLAGON_NAME_LOG_INFO = "engage-messaging-log-info";
5
+ export declare const FLAGON_NAME_LOG_ERROR = "engage-messaging-log-error";
6
+ export declare class EngageLogger extends OperationLogger {
7
+ actionPerformer: EngageActionPerformer;
8
+ static getTryCatchFinallyHook(_ctx: OperationLoggerContext): TryCatchFinallyHook<OperationLoggerContext>;
9
+ constructor(actionPerformer: EngageActionPerformer);
10
+ readonly channelType: string;
11
+ get loggerClient(): Logger | undefined;
12
+ readonly logDetails: Record<string, unknown>;
13
+ logInfo(msg: string, metadata?: object): void;
14
+ logError(msg: string, metadata?: object): void;
15
+ error(msg: string, metadata?: object): void;
16
+ info(msg: string, metadata?: object): void;
17
+ getErrorMessage(error: unknown): string;
18
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EngageLogger = exports.FLAGON_NAME_LOG_ERROR = exports.FLAGON_NAME_LOG_INFO = void 0;
4
+ const operationTracking_1 = require("./operationTracking");
5
+ const ResponseError_1 = require("./ResponseError");
6
+ exports.FLAGON_NAME_LOG_INFO = 'engage-messaging-log-info';
7
+ exports.FLAGON_NAME_LOG_ERROR = 'engage-messaging-log-error';
8
+ class EngageLogger extends operationTracking_1.OperationLogger {
9
+ constructor(actionPerformer) {
10
+ super();
11
+ this.actionPerformer = actionPerformer;
12
+ this.logDetails = {};
13
+ this.channelType = this.actionPerformer.getChannelType().toUpperCase();
14
+ }
15
+ static getTryCatchFinallyHook(_ctx) {
16
+ const msgSender = _ctx.funcThis;
17
+ return msgSender?.logger;
18
+ }
19
+ get loggerClient() {
20
+ return this.actionPerformer.executeInput.logger;
21
+ }
22
+ logInfo(msg, metadata) {
23
+ const msgs = [msg, ...(metadata ? [JSON.stringify(metadata)] : [])];
24
+ if (!this.actionPerformer.isFeatureActive(exports.FLAGON_NAME_LOG_INFO, () => false))
25
+ return;
26
+ const [firstMsg, ...rest] = msgs;
27
+ this.loggerClient?.info(`TE Messaging: ${this.channelType} ${firstMsg}`, ...rest, JSON.stringify({ ...this.logDetails, ...metadata }));
28
+ }
29
+ logError(msg, metadata) {
30
+ if (!this.actionPerformer.isFeatureActive(exports.FLAGON_NAME_LOG_ERROR, () => false))
31
+ return;
32
+ const msgPrefix = `⛔ TE Messaging: ${this.channelType}`;
33
+ this.loggerClient?.error(`${msgPrefix} ${msg}`, JSON.stringify({ ...this.logDetails, ...metadata }));
34
+ }
35
+ error(msg, metadata) {
36
+ return this.logError(msg, metadata);
37
+ }
38
+ info(msg, metadata) {
39
+ return this.logInfo(msg, metadata);
40
+ }
41
+ getErrorMessage(error) {
42
+ const errorDetails = ResponseError_1.getErrorDetails(error);
43
+ let res = `${errorDetails.message}`;
44
+ if (errorDetails.code)
45
+ res += `. Code: ${errorDetails.code}`;
46
+ if (errorDetails.status)
47
+ res += `. Status: ${errorDetails.status}`;
48
+ return res;
49
+ }
50
+ }
51
+ exports.EngageLogger = EngageLogger;
52
+ //# sourceMappingURL=EngageLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EngageLogger.js","sourceRoot":"","sources":["../../../src/engage/utils/EngageLogger.ts"],"names":[],"mappings":";;;AAGA,2DAAkG;AAElG,mDAAiD;AAEpC,QAAA,oBAAoB,GAAG,2BAA2B,CAAA;AAClD,QAAA,qBAAqB,GAAG,4BAA4B,CAAA;AAEjE,MAAa,YAAa,SAAQ,mCAAe;IAM/C,YAAmB,eAAsC;QACvD,KAAK,EAAE,CAAA;QADU,oBAAe,GAAf,eAAe,CAAuB;QAQhD,eAAU,GAA4B,EAAE,CAAA;QAN/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,WAAW,EAAE,CAAA;IACxE,CAAC;IARD,MAAM,CAAC,sBAAsB,CAAC,IAA4B;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAiC,CAAA;QACxD,OAAO,SAAS,EAAE,MAAM,CAAA;IAC1B,CAAC;IAOD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAA;IACjD,CAAC;IAGD,OAAO,CAAC,GAAW,EAAE,QAAiB;QACpC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,4BAAoB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;YAAE,OAAM;QACpF,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;QAChC,IAAI,CAAC,YAAY,EAAE,IAAI,CACrB,iBAAiB,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE,EAC/C,GAAG,IAAI,EACP,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC,CACpD,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,QAAiB;QACrC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,6BAAqB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;YAAE,OAAM;QACrF,MAAM,SAAS,GAAG,mBAAmB,IAAI,CAAC,WAAW,EAAE,CAAA;QACvD,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAA;IACtG,CAAC;IACD,KAAK,CAAC,GAAW,EAAE,QAAiB;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACrC,CAAC;IACD,IAAI,CAAC,GAAW,EAAE,QAAiB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC;IAED,eAAe,CAAC,KAAc;QAC5B,MAAM,YAAY,GAAG,+BAAe,CAAC,KAAK,CAAC,CAAA;QAC3C,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QACnC,IAAI,YAAY,CAAC,IAAI;YAAE,GAAG,IAAI,WAAW,YAAY,CAAC,IAAI,EAAE,CAAA;QAC5D,IAAI,YAAY,CAAC,MAAM;YAAE,GAAG,IAAI,aAAa,YAAY,CAAC,MAAM,EAAE,CAAA;QAClE,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AA9CD,oCA8CC"}
@@ -0,0 +1,18 @@
1
+ import { StatsClient } from '@segment/actions-core/destination-kit';
2
+ import { StatsArgs, OperationStats, OperationStatsContext, TryCatchFinallyHook, TrackedError } from './operationTracking';
3
+ import { EngageActionPerformer } from './EngageActionPerformer';
4
+ export declare class EngageStats extends OperationStats {
5
+ actionPerformer: EngageActionPerformer;
6
+ static getTryCatchFinallyHook(_ctx: OperationStatsContext): TryCatchFinallyHook<OperationStatsContext>;
7
+ constructor(actionPerformer: EngageActionPerformer);
8
+ onTry(ctx: OperationStatsContext): () => void;
9
+ get statsClient(): StatsClient | undefined;
10
+ get tags(): string[];
11
+ _tags: string[];
12
+ stats(statsArgs: StatsArgs): void;
13
+ incr(metric: string, value?: number, tags?: string[]): void;
14
+ histogram(metric: string, value?: number, tags?: string[]): void;
15
+ set(metric: string, value?: number, tags?: string[]): void;
16
+ extractTagsFromError(error: TrackedError, ctx: OperationStatsContext): string[];
17
+ getOperationNameTag(ctx: OperationStatsContext): string | undefined;
18
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EngageStats = void 0;
4
+ const operationTracking_1 = require("./operationTracking");
5
+ const ResponseError_1 = require("./ResponseError");
6
+ class EngageStats extends operationTracking_1.OperationStats {
7
+ constructor(actionPerformer) {
8
+ super();
9
+ this.actionPerformer = actionPerformer;
10
+ this._tags = [];
11
+ }
12
+ static getTryCatchFinallyHook(_ctx) {
13
+ const msgSender = _ctx.funcThis;
14
+ return msgSender?.statsClient;
15
+ }
16
+ onTry(ctx) {
17
+ const res = super.onTry(ctx);
18
+ ctx.sharedContext.tags.push(`space_id:${this.actionPerformer.settings.spaceId}`, `projectid:${this.actionPerformer.settings.sourceId}`, `computation_id:${this.actionPerformer.payload.segmentComputationId}`, `settings_region:${this.actionPerformer.settings.region}`, `channel:${this.actionPerformer.getChannelType()}`);
19
+ const correlation_id = this.actionPerformer.payload.customArgs?.correlation_id ||
20
+ this.actionPerformer.payload.customArgs?.__segment_internal_correlation_id__;
21
+ if (correlation_id)
22
+ ctx.sharedContext.tags.push(`correlation_id:${correlation_id}`);
23
+ const parentOperation = ctx.parent;
24
+ if (parentOperation) {
25
+ const operation_path = this.getOperationNameTag(parentOperation);
26
+ if (operation_path)
27
+ ctx.tags.push('operation_path:' + operation_path);
28
+ }
29
+ return res;
30
+ }
31
+ get statsClient() {
32
+ return this.actionPerformer.executeInput.statsContext?.statsClient;
33
+ }
34
+ get tags() {
35
+ if (this.actionPerformer.currentOperation?.tags)
36
+ return this.actionPerformer.currentOperation.tags;
37
+ if (this.actionPerformer.executeInput.statsContext?.tags)
38
+ return this.actionPerformer.executeInput.statsContext?.tags;
39
+ return this._tags;
40
+ }
41
+ stats(statsArgs) {
42
+ if (!this.statsClient)
43
+ return;
44
+ const { method: statsMethod, metric, value, tags } = statsArgs;
45
+ let statsFunc = this.statsClient?.[statsMethod || 'incr'].bind(this.statsClient);
46
+ if (!statsFunc)
47
+ switch (statsMethod ||
48
+ 'incr') {
49
+ case 'incr':
50
+ statsFunc = this.statsClient?.incr.bind(this.statsClient);
51
+ break;
52
+ break;
53
+ case 'histogram':
54
+ statsFunc = this.statsClient?.histogram.bind(this.statsClient);
55
+ break;
56
+ break;
57
+ case 'set':
58
+ statsFunc = this.statsClient?.set.bind(this.statsClient);
59
+ break;
60
+ break;
61
+ default:
62
+ break;
63
+ }
64
+ statsFunc?.(`${this.actionPerformer.getIntegrationStatsName()}.${metric}`, typeof value === 'undefined' ? 1 : value, [...(this.actionPerformer.executeInput.statsContext?.tags || []), ...(tags ?? [])]);
65
+ }
66
+ incr(metric, value, tags) {
67
+ this.stats({ metric, value, tags, method: 'incr' });
68
+ }
69
+ histogram(metric, value, tags) {
70
+ this.stats({ metric, value, tags, method: 'histogram' });
71
+ }
72
+ set(metric, value, tags) {
73
+ this.stats({ metric, value, tags, method: 'set' });
74
+ }
75
+ extractTagsFromError(error, ctx) {
76
+ const res = super.extractTagsFromError(error, ctx);
77
+ const errDetails = ResponseError_1.getErrorDetails(error);
78
+ if (errDetails?.code)
79
+ res.push(`error_code:${errDetails.code}`);
80
+ if (errDetails?.status)
81
+ res.push(`error_status:${errDetails.status}`);
82
+ if (error.underlyingError) {
83
+ const underlyingErrorTags = this.extractTagsFromError(error.underlyingError, ctx);
84
+ res.push(...underlyingErrorTags.map((t) => `underlying_${t}`));
85
+ }
86
+ return res;
87
+ }
88
+ getOperationNameTag(ctx) {
89
+ if (!ctx)
90
+ return undefined;
91
+ return this.actionPerformer.logger.getOperationName(ctx, true, '::');
92
+ }
93
+ }
94
+ exports.EngageStats = EngageStats;
95
+ //# sourceMappingURL=EngageStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EngageStats.js","sourceRoot":"","sources":["../../../src/engage/utils/EngageStats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { IntegrationError } from '@segment/actions-core';
2
+ import { TryCatchFinallyContext, TryCatchFinallyHook } from './operationTracking';
3
+ export declare type IntegrationErrorWrapperContext<TContext extends TryCatchFinallyContext = TryCatchFinallyContext> = TContext & {
4
+ decoratorArgs?: {
5
+ wrapIntegrationError?: (ctx: TContext) => IntegrationError | ConstructorParameters<typeof IntegrationError>;
6
+ };
7
+ };
8
+ export declare class IntegrationErrorWrapper {
9
+ static getTryCatchFinallyHook(_ctx: IntegrationErrorWrapperContext): TryCatchFinallyHook<IntegrationErrorWrapperContext>;
10
+ static onCatch(ctx: IntegrationErrorWrapperContext): void;
11
+ static wrap<TContext extends TryCatchFinallyContext>(error: unknown, getWrapper: () => IntegrationError | ConstructorParameters<typeof IntegrationError>, ctx?: TContext): import("./operationTracking").TrackedError<TryCatchFinallyContext<(this: any, ...args: any[]) => any>> | undefined;
12
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntegrationErrorWrapper = void 0;
4
+ const actions_core_1 = require("@segment/actions-core");
5
+ const operationTracking_1 = require("./operationTracking");
6
+ class IntegrationErrorWrapper {
7
+ static getTryCatchFinallyHook(_ctx) {
8
+ return this;
9
+ }
10
+ static onCatch(ctx) {
11
+ const getWrapper = ctx.decoratorArgs?.wrapIntegrationError;
12
+ if (!getWrapper)
13
+ return;
14
+ ctx.error = this.wrap(ctx.error, () => getWrapper(ctx), ctx);
15
+ }
16
+ static wrap(error, getWrapper, ctx) {
17
+ return operationTracking_1.OperationErrorHandler.wrap(error, () => {
18
+ if (error instanceof actions_core_1.IntegrationError)
19
+ return error;
20
+ const wrapper = getWrapper();
21
+ const resultError = (Array.isArray(wrapper) ? new actions_core_1.IntegrationError(...wrapper) : wrapper);
22
+ const responseErrorStatus = resultError.response?.data?.status;
23
+ if (responseErrorStatus) {
24
+ resultError.status = responseErrorStatus;
25
+ }
26
+ return resultError;
27
+ }, ctx);
28
+ }
29
+ }
30
+ exports.IntegrationErrorWrapper = IntegrationErrorWrapper;
31
+ //# sourceMappingURL=IntegrationErrorWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegrationErrorWrapper.js","sourceRoot":"","sources":["../../../src/engage/utils/IntegrationErrorWrapper.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,2DAAwG;AAcxG,MAAa,uBAAuB;IAClC,MAAM,CAAC,sBAAsB,CAC3B,IAAoC;QAEpC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,GAAmC;QAChD,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,oBAAoB,CAAA;QAC1D,IAAI,CAAC,UAAU;YAAE,OAAM;QACvB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9D,CAAC;IAED,MAAM,CAAC,IAAI,CACT,KAAc,EACd,UAAmF,EACnF,GAAc;QAEd,OAAO,yCAAqB,CAAC,IAAI,CAC/B,KAAK,EACL,GAAG,EAAE;YACH,IAAI,KAAK,YAAY,+BAAgB;gBAAE,OAAO,KAAK,CAAA;YACnD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;YAC5B,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,+BAAgB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAkB,CAAA;YAG1G,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAA;YAC9D,IAAI,mBAAmB,EAAE;gBACvB,WAAW,CAAC,MAAM,GAAG,mBAAmB,CAAA;aACzC;YACD,OAAO,WAAW,CAAA;QACpB,CAAC,EACD,GAAG,CACJ,CAAA;IACH,CAAC;CACF;AAlCD,0DAkCC"}
@@ -0,0 +1,65 @@
1
+ import { EngageActionPerformer } from './EngageActionPerformer';
2
+ import { MaybePromise } from '@segment/actions-core/destination-kit/types';
3
+ export declare enum SendabilityStatus {
4
+ ShouldSend = "should_send",
5
+ NotSubscribed = "not_subscribed",
6
+ NoSupportedExternalIds = "no_supported_ids",
7
+ InvalidSubscriptionStatus = "invalid_subscription_status",
8
+ SendDisabled = "send_disabled"
9
+ }
10
+ export interface MessagePayloadBase {
11
+ sendBasedOnOptOut?: boolean;
12
+ send?: boolean;
13
+ userId?: string;
14
+ customArgs?: {
15
+ [k: string]: unknown;
16
+ };
17
+ externalIds?: {
18
+ id?: string;
19
+ type?: string;
20
+ channelType?: string;
21
+ subscriptionStatus?: string;
22
+ }[];
23
+ traitEnrichment?: boolean;
24
+ traits?: {
25
+ [k: string]: unknown;
26
+ };
27
+ }
28
+ export interface MessageSettingsBase {
29
+ region?: string;
30
+ sourceId?: string;
31
+ spaceId?: string;
32
+ profileApiEnvironment: string;
33
+ profileApiAccessToken: string;
34
+ }
35
+ export declare type ExtId<TPayload extends MessagePayloadBase> = NonNullable<TPayload['externalIds']>[number];
36
+ export interface SendabilityPayload<TPayload extends MessagePayloadBase> {
37
+ sendabilityStatus: SendabilityStatus | string;
38
+ recepients?: ExtId<TPayload>[];
39
+ invalid?: ExtId<TPayload>[];
40
+ }
41
+ export declare type RecepientSendResult<TPayload extends MessagePayloadBase, TResult = any> = {
42
+ recepient: ExtId<TPayload>;
43
+ status: 'fulfilled' | 'rejected';
44
+ result?: TResult;
45
+ error?: any;
46
+ };
47
+ export declare abstract class MessageSendPerformer<TSettings extends MessageSettingsBase, TPayload extends MessagePayloadBase> extends EngageActionPerformer<TSettings, TPayload> {
48
+ doPerform(): Promise<RecepientSendResult<TPayload, any>[]>;
49
+ abstract isSupportedExternalId(externalId: NonNullable<TPayload['externalIds']>[number]): boolean;
50
+ static readonly nonSendableStatuses: string[];
51
+ static readonly sendableStatuses: string[];
52
+ getStaticMembersOfThisClass<ThisStaticClass extends typeof MessageSendPerformer = typeof MessageSendPerformer>(): ThisStaticClass;
53
+ isExternalIdSubscribed(extId: ExtId<TPayload>): boolean | undefined;
54
+ convertSubscriptionStatusText(subVal: string | undefined): string;
55
+ getSendabilityPayload(): SendabilityPayload<TPayload>;
56
+ getRecepients(): ExtId<TPayload>[];
57
+ abstract sendToRecepient(recepient: ExtId<TPayload>): any;
58
+ beforePerform(): void;
59
+ getDefaultSettingsRegion?(): string;
60
+ statsEventDeliveryTs(): void;
61
+ beforeSend?(recepients: ExtId<TPayload>[]): MaybePromise<void>;
62
+ forAllRecepients<TResult = any>(sendToRecepient: (recepient: ExtId<TPayload>) => TResult): Promise<RecepientSendResult<TPayload, TResult>[]>;
63
+ aggregateSendResults(sendResults: RecepientSendResult<TPayload>[]): any;
64
+ getProfileTraits(): Promise<Record<string, string>>;
65
+ }