@rudderstack/integrations-lib 0.1.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/LICENSE +21 -0
- package/README.md +1 -0
- package/build/constants.d.ts +96 -0
- package/build/constants.d.ts.map +1 -0
- package/build/constants.js +180 -0
- package/build/errors/aborted_error.d.ts +5 -0
- package/build/errors/aborted_error.d.ts.map +1 -0
- package/build/errors/aborted_error.js +16 -0
- package/build/errors/base.d.ts +8 -0
- package/build/errors/base.d.ts.map +1 -0
- package/build/errors/base.js +14 -0
- package/build/errors/configuration_error.d.ts +5 -0
- package/build/errors/configuration_error.d.ts.map +1 -0
- package/build/errors/configuration_error.js +17 -0
- package/build/errors/index.d.ts +17 -0
- package/build/errors/index.d.ts.map +1 -0
- package/build/errors/index.js +33 -0
- package/build/errors/instrumentation_error.d.ts +5 -0
- package/build/errors/instrumentation_error.d.ts.map +1 -0
- package/build/errors/instrumentation_error.js +16 -0
- package/build/errors/invalid_auth_token_error.d.ts +5 -0
- package/build/errors/invalid_auth_token_error.d.ts.map +1 -0
- package/build/errors/invalid_auth_token_error.js +17 -0
- package/build/errors/network_error.d.ts +7 -0
- package/build/errors/network_error.d.ts.map +1 -0
- package/build/errors/network_error.js +28 -0
- package/build/errors/network_instrumentation_error.d.ts +5 -0
- package/build/errors/network_instrumentation_error.d.ts.map +1 -0
- package/build/errors/network_instrumentation_error.js +17 -0
- package/build/errors/oauth_secret_error.d.ts +5 -0
- package/build/errors/oauth_secret_error.d.ts.map +1 -0
- package/build/errors/oauth_secret_error.js +16 -0
- package/build/errors/platform_error.d.ts +5 -0
- package/build/errors/platform_error.d.ts.map +1 -0
- package/build/errors/platform_error.js +15 -0
- package/build/errors/redis_error.d.ts +5 -0
- package/build/errors/redis_error.d.ts.map +1 -0
- package/build/errors/redis_error.js +16 -0
- package/build/errors/retryable_error.d.ts +5 -0
- package/build/errors/retryable_error.d.ts.map +1 -0
- package/build/errors/retryable_error.js +16 -0
- package/build/errors/throttled_error.d.ts +5 -0
- package/build/errors/throttled_error.d.ts.map +1 -0
- package/build/errors/throttled_error.js +16 -0
- package/build/errors/transformation_error.d.ts +5 -0
- package/build/errors/transformation_error.d.ts.map +1 -0
- package/build/errors/transformation_error.js +15 -0
- package/build/errors/unauthorized_error.d.ts +5 -0
- package/build/errors/unauthorized_error.d.ts.map +1 -0
- package/build/errors/unauthorized_error.js +17 -0
- package/build/errors/unhandled_status_code_error.d.ts +5 -0
- package/build/errors/unhandled_status_code_error.d.ts.map +1 -0
- package/build/errors/unhandled_status_code_error.js +17 -0
- package/build/errors/unsupported_event_error.d.ts +5 -0
- package/build/errors/unsupported_event_error.d.ts.map +1 -0
- package/build/errors/unsupported_event_error.js +16 -0
- package/build/index.d.ts +7 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +23 -0
- package/build/logger.d.ts +7 -0
- package/build/logger.d.ts.map +1 -0
- package/build/logger.js +39 -0
- package/build/network/clients/axios.d.ts +38 -0
- package/build/network/clients/axios.d.ts.map +1 -0
- package/build/network/clients/axios.js +197 -0
- package/build/network/clients/axios.test.d.ts +2 -0
- package/build/network/clients/axios.test.d.ts.map +1 -0
- package/build/network/clients/axios.test.js +231 -0
- package/build/network/clients/types.d.ts +32 -0
- package/build/network/clients/types.d.ts.map +1 -0
- package/build/network/clients/types.js +3 -0
- package/build/network/factory.d.ts +30 -0
- package/build/network/factory.d.ts.map +1 -0
- package/build/network/factory.js +46 -0
- package/build/network/factory.test.d.ts +2 -0
- package/build/network/factory.test.d.ts.map +1 -0
- package/build/network/factory.test.js +50 -0
- package/build/network/index.d.ts +2 -0
- package/build/network/index.d.ts.map +1 -0
- package/build/network/index.js +18 -0
- package/build/tags.d.ts +56 -0
- package/build/tags.d.ts.map +1 -0
- package/build/tags.js +59 -0
- package/build/types.d.ts +275 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +34 -0
- package/build/utils/index.d.ts +4 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +20 -0
- package/build/utils/json.d.ts +51 -0
- package/build/utils/json.d.ts.map +1 -0
- package/build/utils/json.js +507 -0
- package/build/utils/json.test.d.ts +2 -0
- package/build/utils/json.test.d.ts.map +1 -0
- package/build/utils/json.test.js +588 -0
- package/build/utils/misc.d.ts +129 -0
- package/build/utils/misc.d.ts.map +1 -0
- package/build/utils/misc.js +362 -0
- package/build/utils/misc.test.d.ts +2 -0
- package/build/utils/misc.test.d.ts.map +1 -0
- package/build/utils/misc.test.js +2059 -0
- package/build/utils/sem.d.ts +29 -0
- package/build/utils/sem.d.ts.map +1 -0
- package/build/utils/sem.js +196 -0
- package/build/utils/sem.test.d.ts +2 -0
- package/build/utils/sem.test.d.ts.map +1 -0
- package/build/utils/sem.test.js +237 -0
- package/package.json +69 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { RudderStackEvent } from '../types';
|
|
2
|
+
export declare class SemanticUtil {
|
|
3
|
+
/**
|
|
4
|
+
* Retrieves the `integrations` object for a specific destination in a given `RudderStackEvent` message.
|
|
5
|
+
* @param message - The RudderStackEvent message object.
|
|
6
|
+
* @param intgName - The destination name.
|
|
7
|
+
* @returns The `integrations` object for the specified destination, or null if not found.
|
|
8
|
+
*/
|
|
9
|
+
static getIntegrationsObj(message: RudderStackEvent, intgName?: string): null;
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves a destination-specific external ID from a given *message object.
|
|
12
|
+
* {
|
|
13
|
+
* "context": {
|
|
14
|
+
* "externalId": [
|
|
15
|
+
* {
|
|
16
|
+
* "type": "kustomerId",
|
|
17
|
+
* "id": "12345678"
|
|
18
|
+
* }
|
|
19
|
+
* ]
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* @param {RudderStackEvent} message - The message object containing the external ID.
|
|
24
|
+
* @param {string} type - The type of the external ID to retrieve.
|
|
25
|
+
* @returns {unknown} - The destination-specific external ID, or null if not found.
|
|
26
|
+
*/
|
|
27
|
+
static getDestinationExternalID(message: RudderStackEvent, type: string): unknown;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=sem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sem.d.ts","sourceRoot":"","sources":["../../src/utils/sem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAwIxD,qBAAa,YAAY;IACvB;;;;;OAKG;WACW,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,GAAE,MAAW;IAoBjF;;;;;;;;;;;;;;;;OAgBG;WACW,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;CAYzF"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SemanticUtil = void 0;
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
8
|
+
const get_value_1 = __importDefault(require("get-value"));
|
|
9
|
+
const INTEGRATION_CANONICAL_NAMES = {
|
|
10
|
+
fb_pixel: [
|
|
11
|
+
'fb_pixel',
|
|
12
|
+
'fb pixel',
|
|
13
|
+
'FacebookPixel',
|
|
14
|
+
'Facebook Pixel',
|
|
15
|
+
'FB Pixel',
|
|
16
|
+
'Facebook_Pixel',
|
|
17
|
+
],
|
|
18
|
+
ometria: ['Ometria', 'ometria', 'OMETRIA'],
|
|
19
|
+
sendgrid: ['sendgrid', 'Sendgrid', 'SENDGRID'],
|
|
20
|
+
dcm_floodlight: [
|
|
21
|
+
'dcm floodlight',
|
|
22
|
+
'dcm_floodlight',
|
|
23
|
+
'DCM Floodlight',
|
|
24
|
+
'DCM_Floodlight',
|
|
25
|
+
'DCMFloodlight',
|
|
26
|
+
'dcmfloodlight',
|
|
27
|
+
],
|
|
28
|
+
new_relic: ['new relic', 'new_relic', 'New Relic', 'New_Relic', 'NewRelic', 'newrelic'],
|
|
29
|
+
attentive_tag: [
|
|
30
|
+
'attentive tag',
|
|
31
|
+
'attentive_tag',
|
|
32
|
+
'Attentive Tag',
|
|
33
|
+
'Attentive_Tag',
|
|
34
|
+
'AttentiveTag',
|
|
35
|
+
'attentivetag',
|
|
36
|
+
],
|
|
37
|
+
webhook: ['webhook', 'Webhook', 'WebHook', 'WEBHOOK'],
|
|
38
|
+
mailchimp: ['mailchimp', 'MailChimp', 'MAILCHIMP'],
|
|
39
|
+
mautic: ['MAUTIC', 'mautic', 'Mautic'],
|
|
40
|
+
mailjet: ['MAILJET', 'MailJet', 'mailjet', 'Mailjet'],
|
|
41
|
+
kafka: ['KAFKA', 'kafka', 'Kafka'],
|
|
42
|
+
azure_event_hub: ['AZURE_EVENT_HUB', 'azure_event_hub', 'AzureEventHub'],
|
|
43
|
+
confluent_cloud: ['CONFLUENT_CLOUD', 'confluent_cloud', 'ConfluentCloud'],
|
|
44
|
+
vero: ['vero', 'Vero', 'VERO'],
|
|
45
|
+
pinterest: ['pinterest', 'Pinterest', 'PINTEREST', 'pinterestConversion'],
|
|
46
|
+
rockerbox: ['rockerbox', 'ROCKERBOX', 'Rockerbox', 'RockerBox', 'rockerBox'],
|
|
47
|
+
canny: ['canny', 'Canny', 'CANNY'],
|
|
48
|
+
one_signal: ['one signal', 'one_signal', 'One Signal', 'One_Signal', 'OneSignal', 'onesignal'],
|
|
49
|
+
wootric: ['wootric', 'Wootric', 'WOOTRIC'],
|
|
50
|
+
clickup: ['ClickUp', 'clickup', 'CLICKUP', 'clickUp', 'Clickup'],
|
|
51
|
+
zapier: ['zapier', 'Zapier', 'ZAPIER'],
|
|
52
|
+
shynet: ['shynet', 'SHYNET', 'shyNet', 'ShyNet'],
|
|
53
|
+
woopra: ['WOOPRA', 'Woopra', 'woopra'],
|
|
54
|
+
monday: ['monday', 'MONDAY', 'monDay', 'MonDay'],
|
|
55
|
+
mailmodo: [
|
|
56
|
+
'mail modo',
|
|
57
|
+
'mail_modo',
|
|
58
|
+
'Mail Modo',
|
|
59
|
+
'Mail_Modo',
|
|
60
|
+
'MailModo',
|
|
61
|
+
'mailmodo',
|
|
62
|
+
'MAILMODO',
|
|
63
|
+
'mailModo',
|
|
64
|
+
],
|
|
65
|
+
user: ['user', 'USER', 'User', 'User.com', 'user.com', 'USER.com'],
|
|
66
|
+
engage: ['engage', 'Engage', 'ENGAGE'],
|
|
67
|
+
june: ['june', 'JUNE', 'June'],
|
|
68
|
+
factorsai: ['FACTORSAI', 'factorsAI', 'FactorsAi', 'factorsAi'],
|
|
69
|
+
snapchat_custom_audience: [
|
|
70
|
+
'snapchat custom audience',
|
|
71
|
+
'snap chat custom audience',
|
|
72
|
+
'snapchat_custom_audience',
|
|
73
|
+
'snapchatCustomAudience',
|
|
74
|
+
'Snapchat Custom Audience',
|
|
75
|
+
'snapchatcustomaudience',
|
|
76
|
+
'SNAPCHAT CUSTOM AUDIENCE',
|
|
77
|
+
'SNAPCHAT_CUSTOM_AUDIENCE',
|
|
78
|
+
'SNAPCHATCUSTOMAUDIENCE',
|
|
79
|
+
],
|
|
80
|
+
CAMPAIGN_MANAGER: [
|
|
81
|
+
'campaign manager',
|
|
82
|
+
'campain Manager',
|
|
83
|
+
'CAMPAIGN MANAGER',
|
|
84
|
+
'campaignManager',
|
|
85
|
+
'campaign_manager',
|
|
86
|
+
'CAMPAIGN_MANAGER',
|
|
87
|
+
],
|
|
88
|
+
gainsight_px: [
|
|
89
|
+
'GAINSIGHT_PX',
|
|
90
|
+
'GAINSIGHTPX',
|
|
91
|
+
'gainsightPx',
|
|
92
|
+
'Gainsight PX',
|
|
93
|
+
'gainsight px',
|
|
94
|
+
'Gainsight Px',
|
|
95
|
+
],
|
|
96
|
+
awin: ['awin', 'Awin', 'AWIN'],
|
|
97
|
+
sendinblue: ['sendinblue', 'SENDINBLUE', 'Sendinblue', 'SendinBlue'],
|
|
98
|
+
ga4: ['GA4', 'ga4', 'Ga4', 'Google Analytics 4', 'googleAnalytics4'],
|
|
99
|
+
pipedream: ['Pipedream', 'PipeDream', 'pipedream', 'PIPEDREAM'],
|
|
100
|
+
pagerduty: ['pagerduty', 'PAGERDUTY', 'PagerDuty', 'Pagerduty', 'pagerDuty'],
|
|
101
|
+
adobe_analytics: [
|
|
102
|
+
'adobe_analytics',
|
|
103
|
+
'ADOBE_ANALYTICS',
|
|
104
|
+
'adobe analytics',
|
|
105
|
+
'adobeAnalytics',
|
|
106
|
+
'Adobe Analytics',
|
|
107
|
+
'adobeanalytics',
|
|
108
|
+
'ADOBE ANALYTICS',
|
|
109
|
+
'ADOBEANALYTICS',
|
|
110
|
+
],
|
|
111
|
+
criteo_audience: [
|
|
112
|
+
'criteo audience',
|
|
113
|
+
'criteoAudience',
|
|
114
|
+
'Criteo Audience',
|
|
115
|
+
'criteoaudience',
|
|
116
|
+
'CRITEO AUDIENCE',
|
|
117
|
+
'CRITEO_AUDIENCE',
|
|
118
|
+
'CRITEOAUDIENCE',
|
|
119
|
+
],
|
|
120
|
+
optimizely_fullstack: [
|
|
121
|
+
'Optimizely Fullstack',
|
|
122
|
+
'OPTIMIZELY FULLSTACK',
|
|
123
|
+
'optimizely fullstack',
|
|
124
|
+
'OptimizelyFullstack',
|
|
125
|
+
'Optimizely_Fullstack',
|
|
126
|
+
'optimizely_fullstack',
|
|
127
|
+
],
|
|
128
|
+
vitally: ['vitally', 'Vitally', 'VITALLY'],
|
|
129
|
+
courier: ['Courier', 'courier', 'COURIER'],
|
|
130
|
+
TWITTER_ADS: [
|
|
131
|
+
'twitter ads',
|
|
132
|
+
'twitter Manager',
|
|
133
|
+
'TWITTER ADS',
|
|
134
|
+
'twitterADS',
|
|
135
|
+
'twitter_ads',
|
|
136
|
+
'TWITTER_ADS',
|
|
137
|
+
],
|
|
138
|
+
BRAZE: ['BRAZE', 'Braze', 'braze'],
|
|
139
|
+
};
|
|
140
|
+
class SemanticUtil {
|
|
141
|
+
/**
|
|
142
|
+
* Retrieves the `integrations` object for a specific destination in a given `RudderStackEvent` message.
|
|
143
|
+
* @param message - The RudderStackEvent message object.
|
|
144
|
+
* @param intgName - The destination name.
|
|
145
|
+
* @returns The `integrations` object for the specified destination, or null if not found.
|
|
146
|
+
*/
|
|
147
|
+
static getIntegrationsObj(message, intgName = '') {
|
|
148
|
+
if (!(0, lodash_1.isEmpty)(intgName)) {
|
|
149
|
+
const intgCanonicalNames = INTEGRATION_CANONICAL_NAMES[intgName];
|
|
150
|
+
if (!intgCanonicalNames) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const intgObj = intgCanonicalNames.reduce((acc, canonicalName) => {
|
|
154
|
+
if ((0, get_value_1.default)(message, `integrations.${canonicalName}`)) {
|
|
155
|
+
return (0, get_value_1.default)(message, `integrations.${canonicalName}`);
|
|
156
|
+
}
|
|
157
|
+
return acc;
|
|
158
|
+
}, null);
|
|
159
|
+
if (intgObj) {
|
|
160
|
+
return intgObj;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Retrieves a destination-specific external ID from a given *message object.
|
|
167
|
+
* {
|
|
168
|
+
* "context": {
|
|
169
|
+
* "externalId": [
|
|
170
|
+
* {
|
|
171
|
+
* "type": "kustomerId",
|
|
172
|
+
* "id": "12345678"
|
|
173
|
+
* }
|
|
174
|
+
* ]
|
|
175
|
+
* }
|
|
176
|
+
* }
|
|
177
|
+
*
|
|
178
|
+
* @param {RudderStackEvent} message - The message object containing the external ID.
|
|
179
|
+
* @param {string} type - The type of the external ID to retrieve.
|
|
180
|
+
* @returns {unknown} - The destination-specific external ID, or null if not found.
|
|
181
|
+
*/
|
|
182
|
+
static getDestinationExternalID(message, type) {
|
|
183
|
+
const { context } = message;
|
|
184
|
+
const externalIdArray = context?.externalId ?? [];
|
|
185
|
+
let externalIdObj;
|
|
186
|
+
if (Array.isArray(externalIdArray)) {
|
|
187
|
+
externalIdObj = externalIdArray.find((extIdObj) => extIdObj?.type === type);
|
|
188
|
+
}
|
|
189
|
+
if (!externalIdObj) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
return externalIdObj.id;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
exports.SemanticUtil = SemanticUtil;
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxtQ0FBaUM7QUFDakMsMERBQTRCO0FBRTVCLE1BQU0sMkJBQTJCLEdBQWdDO0lBQy9ELFFBQVEsRUFBRTtRQUNSLFVBQVU7UUFDVixVQUFVO1FBQ1YsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixVQUFVO1FBQ1YsZ0JBQWdCO0tBQ2pCO0lBQ0QsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDMUMsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDOUMsY0FBYyxFQUFFO1FBQ2QsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixlQUFlO0tBQ2hCO0lBQ0QsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkYsYUFBYSxFQUFFO1FBQ2IsZUFBZTtRQUNmLGVBQWU7UUFDZixlQUFlO1FBQ2YsZUFBZTtRQUNmLGNBQWM7UUFDZCxjQUFjO0tBQ2Y7SUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDckQsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDbEQsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDdEMsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JELEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2xDLGVBQWUsRUFBRSxDQUFDLGlC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QUFBLG1CQUFHLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixhQUFhLEVBQUUsQ0FBQyxDQUFDO2lCQUN0RDtnQkFDRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVULElBQUksT0FBTyxFQUFFO2dCQUNYLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxPQUF5QixFQUFFLElBQVk7UUFDNUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM1QixNQUFNLGVBQWUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNsRCxJQUFJLGFBQXFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2xDLGFBQWEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQzdFO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxhQUFhLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQXhERCxvQ0F3REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeHRlcm5hbElkLCBSdWRkZXJTdGFja0V2ZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2dldC12YWx1ZSc7XG5cbmNvbnN0IElOVEVHUkFUSU9OX0NBTk9OSUNBTF9OQU1FUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xuICBmYl9waXhlbDogW1xuICAgICdmYl9waXhlbCcsXG4gICAgJ2ZiIHBpeGVsJyxcbiAgICAnRmFjZWJvb2tQaXhlbCcsXG4gICAgJ0ZhY2Vib29rIFBpeGVsJyxcbiAgICAnRkIgUGl4ZWwnLFxuICAgICdGYWNlYm9va19QaXhlbCcsXG4gIF0sXG4gIG9tZXRyaWE6IFsnT21ldHJpYScsICdvbWV0cmlhJywgJ09NRVRSSUEnXSxcbiAgc2VuZGdyaWQ6IFsnc2VuZGdyaWQnLCAnU2VuZGdyaWQnLCAnU0VOREdSSUQnXSxcbiAgZGNtX2Zsb29kbGlnaHQ6IFtcbiAgICAnZGNtIGZsb29kbGlnaHQnLFxuICAgICdkY21fZmxvb2RsaWdodCcsXG4gICAgJ0RDTSBGbG9vZGxpZ2h0JyxcbiAgICAnRENNX0Zsb29kbGlnaHQnLFxuICAgICdEQ01GbG9vZGxpZ2h0JyxcbiAgICAnZGNtZmxvb2RsaWdodCcsXG4gIF0sXG4gIG5ld19yZWxpYzogWyduZXcgcmVsaWMnLCAnbmV3X3JlbGljJywgJ05ldyBSZWxpYycsICdOZXdfUmVsaWMnLCAnTmV3UmVsaWMnLCAnbmV3cmVsaWMnXSxcbiAgYXR0ZW50aXZlX3RhZzogW1xuICAgICdhdHRlbnRpdmUgdGFnJyxcbiAgICAnYXR0ZW50aXZlX3RhZycsXG4gICAgJ0F0dGVudGl2ZSBUYWcnLFxuICAgICdBdHRlbnRpdmVfVGFnJyxcbiAgICAnQXR0ZW50aXZlVGFnJyxcbiAgICAnYXR0ZW50aXZldGFnJyxcbiAgXSxcbiAgd2ViaG9vazogWyd3ZWJob29rJywgJ1dlYmhvb2snLCAnV2ViSG9vaycsICdXRUJIT09LJ10sXG4gIG1haWxjaGltcDogWydtYWlsY2hpbXAnLCAnTWFpbENoaW1wJywgJ01BSUxDSElNUCddLFxuICBtYXV0aWM6IFsnTUFVVElDJywgJ21hdXRpYycsICdNYXV0aWMnXSxcbiAgbWFpbGpldDogWydNQUlMSkVUJywgJ01haWxKZXQnLCAnbWFpbGpldCcsICdNYWlsamV0J10sXG4gIGthZmthOiBbJ0tBRktBJywgJ2thZmthJywgJ0thZmthJ10sXG4gIGF6dXJlX2V2ZW50X2h1YjogWydBWlVSRV9FVkVOVF9IVUInLCAnYXp1cmVfZXZlbnRfaHViJywgJ0F6dXJlRXZlbnRIdWInXSxcbiAgY29uZmx1ZW50X2Nsb3VkOiBbJ0NPTkZMVUVOVF9DTE9VRCcsICdjb25mbHVlbnRfY2xvdWQnLCAnQ29uZmx1ZW50Q2xvdWQnXSxcbiAgdmVybzogWyd2ZXJvJywgJ1Zlcm8nLCAnVkVSTyddLFxuICBwaW50ZXJlc3Q6IFsncGludGVyZXN0JywgJ1BpbnRlcmVzdCcsICdQSU5URVJFU1QnLCAncGludGVyZXN0Q29udmVyc2lvbiddLFxuICByb2NrZXJib3g6IFsncm9ja2VyYm94JywgJ1JPQ0tFUkJPWCcsICdSb2NrZXJib3gnLCAnUm9ja2VyQm94JywgJ3JvY2tlckJveCddLFxuICBjYW5ueTogWydjYW5ueScsICdDYW5ueScsICdDQU5OWSddLFxuICBvbmVfc2lnbmFsOiBbJ29uZSBzaWduYWwnLCAnb25lX3NpZ25hbCcsICdPbmUgU2lnbmFsJywgJ09uZV9TaWduYWwnLCAnT25lU2lnbmFsJywgJ29uZXNpZ25hbCddLFxuICB3b290cmljOiBbJ3dvb3RyaWMnLCAnV29vdHJpYycsICdXT09UUklDJ10sXG4gIGNsaWNrdXA6IFsnQ2xpY2tVcCcsICdjbGlja3VwJywgJ0NMSUNLVVAnLCAnY2xpY2tVcCcsICdDbGlja3VwJ10sXG4gIHphcGllcjogWyd6YXBpZXInLCAnWmFwaWVyJywgJ1pBUElFUiddLFxuICBzaHluZXQ6IFsnc2h5bmV0JywgJ1NIWU5FVCcsICdzaHlOZXQnLCAnU2h5TmV0J10sXG4gIHdvb3ByYTogWydXT09QUkEnLCAnV29vcHJhJywgJ3dvb3ByYSddLFxuICBtb25kYXk6IFsnbW9uZGF5JywgJ01PTkRBWScsICdtb25EYXknLCAnTW9uRGF5J10sXG4gIG1haWxtb2RvOiBbXG4gICAgJ21haWwgbW9kbycsXG4gICAgJ21haWxfbW9kbycsXG4gICAgJ01haWwgTW9kbycsXG4gICAgJ01haWxfTW9kbycsXG4gICAgJ01haWxNb2RvJyxcbiAgICAnbWFpbG1vZG8nLFxuICAgICdNQUlMTU9ETycsXG4gICAgJ21haWxNb2RvJyxcbiAgXSxcbiAgdXNlcjogWyd1c2VyJywgJ1VTRVInLCAnVXNlcicsICdVc2VyLmNvbScsICd1c2VyLmNvbScsICdVU0VSLmNvbSddLFxuICBlbmdhZ2U6IFsnZW5nYWdlJywgJ0VuZ2FnZScsICdFTkdBR0UnXSxcbiAganVuZTogWydqdW5lJywgJ0pVTkUnLCAnSnVuZSddLFxuICBmYWN0b3JzYWk6IFsnRkFDVE9SU0FJJywgJ2ZhY3RvcnNBSScsICdGYWN0b3JzQWknLCAnZmFjdG9yc0FpJ10sXG4gIHNuYXBjaGF0X2N1c3RvbV9hdWRpZW5jZTogW1xuICAgICdzbmFwY2hhdCBjdXN0b20gYXVkaWVuY2UnLFxuICAgICdzbmFwIGNoYXQgY3VzdG9tIGF1ZGllbmNlJyxcbiAgICAnc25hcGNoYXRfY3VzdG9tX2F1ZGllbmNlJyxcbiAgICAnc25hcGNoYXRDdXN0b21BdWRpZW5jZScsXG4gICAgJ1NuYXBjaGF0IEN1c3RvbSBBdWRpZW5jZScsXG4gICAgJ3NuYXBjaGF0Y3VzdG9tYXVkaWVuY2UnLFxuICAgICdTTkFQQ0hBVCBDVVNUT00gQVVESUVOQ0UnLFxuICAgICdTTkFQQ0hBVF9DVVNUT01fQVVESUVOQ0UnLFxuICAgICdTTkFQQ0hBVENVU1RPTUFVRElFTkNFJyxcbiAgXSxcbiAgQ0FNUEFJR05fTUFOQUdFUjogW1xuICAgICdjYW1wYWlnbiBtYW5hZ2VyJyxcbiAgICAnY2FtcGFpbiBNYW5hZ2VyJyxcbiAgICAnQ0FNUEFJR04gTUFOQUdFUicsXG4gICAgJ2NhbXBhaWduTWFuYWdlcicsXG4gICAgJ2NhbXBhaWduX21hbmFnZXInLFxuICAgICdDQU1QQUlHTl9NQU5BR0VSJyxcbiAgXSxcbiAgZ2FpbnNpZ2h0X3B4OiBbXG4gICAgJ0dBSU5TSUdIVF9QWCcsXG4gICAgJ0dBSU5TSUdIVFBYJyxcbiAgICAnZ2FpbnNpZ2h0UHgnLFxuICAgICdHYWluc2lnaHQgUFgnLFxuICAgICdnYWluc2lnaHQgcHgnLFxuICAgICdHYWluc2lnaHQgUHgnLFxuICBdLFxuICBhd2luOiBbJ2F3aW4nLCAnQXdpbicsICdBV0lOJ10sXG4gIHNlbmRpbmJsdWU6IFsnc2VuZGluYmx1ZScsICdTRU5ESU5CTFVFJywgJ1NlbmRpbmJsdWUnLCAnU2VuZGluQmx1ZSddLFxuICBnYTQ6IFsnR0E0JywgJ2dhNCcsICdHYTQnLCAnR29vZ2xlIEFuYWx5dGljcyA0JywgJ2dvb2dsZUFuYWx5dGljczQnXSxcbiAgcGlwZWRyZWFtOiBbJ1BpcGVkcmVhbScsICdQaXBlRHJlYW0nLCAncGlwZWRyZWFtJywgJ1BJUEVEUkVBTSddLFxuICBwYWdlcmR1dHk6IFsncGFnZXJkdXR5JywgJ1BBR0VSRFVUWScsICdQYWdlckR1dHknLCAnUGFnZXJkdXR5JywgJ3BhZ2VyRHV0eSddLFxuICBhZG9iZV9hbmFseXRpY3M6IFtcbiAgICAnYWRvYmVfYW5hbHl0aWNzJyxcbiAgICAnQURPQkVfQU5BTFlUSUNTJyxcbiAgICAnYWRvYmUgYW5hbHl0aWNzJyxcbiAgICAnYWRvYmVBbmFseXRpY3MnLFxuICAgICdBZG9iZSBBbmFseXRpY3MnLFxuICAgICdhZG9iZWFuYWx5dGljcycsXG4gICAgJ0FET0JFIEFOQUxZVElDUycsXG4gICAgJ0FET0JFQU5BTFlUSUNTJyxcbiAgXSxcbiAgY3JpdGVvX2F1ZGllbmNlOiBbXG4gICAgJ2NyaXRlbyBhdWRpZW5jZScsXG4gICAgJ2NyaXRlb0F1ZGllbmNlJyxcbiAgICAnQ3JpdGVvIEF1ZGllbmNlJyxcbiAgICAnY3JpdGVvYXVkaWVuY2UnLFxuICAgICdDUklURU8gQVVESUVOQ0UnLFxuICAgICdDUklURU9fQVVESUVOQ0UnLFxuICAgICdDUklURU9BVURJRU5DRScsXG4gIF0sXG4gIG9wdGltaXplbHlfZnVsbHN0YWNrOiBbXG4gICAgJ09wdGltaXplbHkgRnVsbHN0YWNrJyxcbiAgICAnT1BUSU1JWkVMWSBGVUxMU1RBQ0snLFxuICAgICdvcHRpbWl6ZWx5IGZ1bGxzdGFjaycsXG4gICAgJ09wdGltaXplbHlGdWxsc3RhY2snLFxuICAgICdPcHRpbWl6ZWx5X0Z1bGxzdGFjaycsXG4gICAgJ29wdGltaXplbHlfZnVsbHN0YWNrJyxcbiAgXSxcbiAgdml0YWxseTogWyd2aXRhbGx5JywgJ1ZpdGFsbHknLCAnVklUQUxMWSddLFxuICBjb3VyaWVyOiBbJ0NvdXJpZXInLCAnY291cmllcicsICdDT1VSSUVSJ10sXG4gIFRXSVRURVJfQURTOiBbXG4gICAgJ3R3aXR0ZXIgYWRzJyxcbiAgICAndHdpdHRlciBNYW5hZ2VyJyxcbiAgICAnVFdJVFRFUiBBRFMnLFxuICAgICd0d2l0dGVyQURTJyxcbiAgICAndHdpdHRlcl9hZHMnLFxuICAgICdUV0lUVEVSX0FEUycsXG4gIF0sXG4gIEJSQVpFOiBbJ0JSQVpFJywgJ0JyYXplJywgJ2JyYXplJ10sXG59O1xuXG5leHBvcnQgY2xhc3MgU2VtYW50aWNVdGlsIHtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYGludGVncmF0aW9uc2Agb2JqZWN0IGZvciBhIHNwZWNpZmljIGRlc3RpbmF0aW9uIGluIGEgZ2l2ZW4gYFJ1ZGRlclN0YWNrRXZlbnRgIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIFJ1ZGRlclN0YWNrRXZlbnQgbWVzc2FnZSBvYmplY3QuXG4gICAqIEBwYXJhbSBpbnRnTmFtZSAtIFRoZSBkZXN0aW5hdGlvbiBuYW1lLlxuICAgKiBAcmV0dXJucyBUaGUgYGludGVncmF0aW9uc2Agb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2U6IFJ1ZGRlclN0YWNrRXZlbnQsIGludGdOYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGlmICghaXNFbXB0eShpbnRnTmFtZSkpIHtcbiAgICAgIGNvbnN0IGludGdDYW5vbmljYWxOYW1lcyA9IElOVEVHUkFUSU9OX0NBTk9OSUNBTF9OQU1FU1tpbnRnTmFtZV07XG4gICAgICBpZiAoIWludGdDYW5vbmljYWxOYW1lcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGludGdPYmogPSBpbnRnQ2Fub25pY2FsTmFtZXMucmVkdWNlKChhY2MsIGNhbm9uaWNhbE5hbWUpID0+IHtcbiAgICAgICAgaWYgKGdldChtZXNzYWdlLCBgaW50ZWdyYXRpb25zLiR7Y2Fub25pY2FsTmFtZX1gKSkge1xuICAgICAgICAgIHJldHVybiBnZXQobWVzc2FnZSwgYGludGVncmF0aW9ucy4ke2Nhbm9uaWNhbE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIG51bGwpO1xuXG4gICAgICBpZiAoaW50Z09iaikge1xuICAgICAgICByZXR1cm4gaW50Z09iajtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgZnJvbSBhIGdpdmVuICptZXNzYWdlIG9iamVjdC5cbiAgICoge1xuICAgKiAgICBcImNvbnRleHRcIjoge1xuICAgKiAgICAgIFwiZXh0ZXJuYWxJZFwiOiBbXG4gICAqICAgICAgICB7XG4gICAqICAgICAgICAgIFwidHlwZVwiOiBcImt1c3RvbWVySWRcIixcbiAgICogICAgICAgICAgXCJpZFwiOiBcIjEyMzQ1Njc4XCJcbiAgICogICAgICAgIH1cbiAgICogICAgICBdXG4gICAqICAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge1J1ZGRlclN0YWNrRXZlbnR9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyB0aGUgZXh0ZXJuYWwgSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGV4dGVybmFsIElEIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn0gLSBUaGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZTogUnVkZGVyU3RhY2tFdmVudCwgdHlwZTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgY29uc3QgeyBjb250ZXh0IH0gPSBtZXNzYWdlO1xuICAgIGNvbnN0IGV4dGVybmFsSWRBcnJheSA9IGNvbnRleHQ/LmV4dGVybmFsSWQgPz8gW107XG4gICAgbGV0IGV4dGVybmFsSWRPYmo6IEV4dGVybmFsSWQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXh0ZXJuYWxJZEFycmF5KSkge1xuICAgICAgZXh0ZXJuYWxJZE9iaiA9IGV4dGVybmFsSWRBcnJheS5maW5kKChleHRJZE9iaikgPT4gZXh0SWRPYmo/LnR5cGUgPT09IHR5cGUpO1xuICAgIH1cbiAgICBpZiAoIWV4dGVybmFsSWRPYmopIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZXJuYWxJZE9iai5pZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sem.test.d.ts","sourceRoot":"","sources":["../../src/utils/sem.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Generated by CodiumAI
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const sem_1 = require("./sem");
|
|
5
|
+
describe('SemanticUtil', () => {
|
|
6
|
+
describe('getIntegrationsObj', () => {
|
|
7
|
+
// Tests that 'getIntegrationsObj' returns the integrations object for a valid integration name
|
|
8
|
+
it('should return the integrations object for a valid integration name', () => {
|
|
9
|
+
const message = {
|
|
10
|
+
integrations: {
|
|
11
|
+
fb_pixel: {
|
|
12
|
+
key: 'value',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
const intgName = 'fb_pixel';
|
|
17
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
18
|
+
expect(result).toEqual({ key: 'value' });
|
|
19
|
+
});
|
|
20
|
+
// Tests that 'getIntegrationsObj' returns null for an empty integration name
|
|
21
|
+
it('should return null for an empty integration name', () => {
|
|
22
|
+
const message = {
|
|
23
|
+
integrations: {
|
|
24
|
+
fb_pixel: {
|
|
25
|
+
key: 'value',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
const intgName = '';
|
|
30
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
31
|
+
expect(result).toBeNull();
|
|
32
|
+
});
|
|
33
|
+
// Tests that 'getIntegrationsObj' returns null for an invalid integration name
|
|
34
|
+
it('should return null for an invalid integration name', () => {
|
|
35
|
+
const message = {
|
|
36
|
+
integrations: {
|
|
37
|
+
fb_pixel: {
|
|
38
|
+
key: 'value',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
const intgName = 'invalid_integration';
|
|
43
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
44
|
+
expect(result).toBeNull();
|
|
45
|
+
});
|
|
46
|
+
// Tests that 'getIntegrationsObj' returns null when the integration name has multiple canonical names but none of them exist in the message.integrations object
|
|
47
|
+
it('should return null when the integration name has multiple canonical names but none of them exist in the message.integrations object', () => {
|
|
48
|
+
const message = {
|
|
49
|
+
integrations: {
|
|
50
|
+
fb_pixel: {
|
|
51
|
+
key: 'value',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
const intgName = 'invalid_integration';
|
|
56
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
57
|
+
expect(result).toBeNull();
|
|
58
|
+
});
|
|
59
|
+
// Tests that 'getIntegrationsObj' returns null when the message object has no integrations object
|
|
60
|
+
it('should return null when the message object has no integrations object', () => {
|
|
61
|
+
const message = {};
|
|
62
|
+
const intgName = 'fb_pixel';
|
|
63
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
64
|
+
expect(result).toBeNull();
|
|
65
|
+
});
|
|
66
|
+
// Tests that 'getIntegrationsObj' returns null when none of the canonical names for the integration name exist in the integrations object
|
|
67
|
+
it('should return null when none of the canonical names for the integration name exist in the integrations object', () => {
|
|
68
|
+
const message = {
|
|
69
|
+
integrations: {
|
|
70
|
+
some_integration: {
|
|
71
|
+
key: 'value',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
const intgName = 'fb_pixel';
|
|
76
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
77
|
+
expect(result).toBeNull();
|
|
78
|
+
});
|
|
79
|
+
// Tests that 'getIntegrationsObj' returns null when the canonical name for the integration name exists in the integrations object but its value is null
|
|
80
|
+
it('should return null when the canonical name for the integration name exists in the integrations object but its value is null', () => {
|
|
81
|
+
const message = {
|
|
82
|
+
integrations: {
|
|
83
|
+
fb_pixel: null,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
const intgName = 'fb_pixel';
|
|
87
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
88
|
+
expect(result).toBeNull();
|
|
89
|
+
});
|
|
90
|
+
// Tests that 'getIntegrationsObj' returns the integrations object for a valid integration name when the value is a number
|
|
91
|
+
it('should return the integrations object for a valid integration name when the value is a number', () => {
|
|
92
|
+
const message = {
|
|
93
|
+
integrations: {
|
|
94
|
+
fb_pixel: 123,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
const intgName = 'fb_pixel';
|
|
98
|
+
const result = sem_1.SemanticUtil.getIntegrationsObj(message, intgName);
|
|
99
|
+
expect(result).toEqual(123);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('getDestinationExternalID', () => {
|
|
103
|
+
// Returns the destination-specific external ID when it exists in the message context.
|
|
104
|
+
it('should return the destination-specific external ID when it exists in the message context', () => {
|
|
105
|
+
const message = {
|
|
106
|
+
context: {
|
|
107
|
+
externalId: [
|
|
108
|
+
{
|
|
109
|
+
type: 'kustomerId',
|
|
110
|
+
id: '12345678',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
const type = 'kustomerId';
|
|
116
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
117
|
+
expect(result).toBe('12345678');
|
|
118
|
+
});
|
|
119
|
+
// Returns null when the destination-specific external ID does not exist in the message context.
|
|
120
|
+
it('should return null when the destination-specific external ID does not exist in the message context', () => {
|
|
121
|
+
const message = {
|
|
122
|
+
context: {
|
|
123
|
+
externalId: [
|
|
124
|
+
{
|
|
125
|
+
type: 'kustomerId',
|
|
126
|
+
id: '12345678',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
const type = 'otherId';
|
|
132
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
133
|
+
expect(result).toBeNull();
|
|
134
|
+
});
|
|
135
|
+
// Returns null when the message context is undefined.
|
|
136
|
+
it('should return null when the message context is undefined', () => {
|
|
137
|
+
const message = {};
|
|
138
|
+
const type = 'kustomerId';
|
|
139
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
140
|
+
expect(result).toBeNull();
|
|
141
|
+
});
|
|
142
|
+
// Returns null when the externalId array is not an array.
|
|
143
|
+
it('should return null when the externalId array is not an array', () => {
|
|
144
|
+
const message = {
|
|
145
|
+
context: {
|
|
146
|
+
externalId: '12345678',
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
const type = 'kustomerId';
|
|
150
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
151
|
+
expect(result).toBeNull();
|
|
152
|
+
});
|
|
153
|
+
// Returns null when the externalId array is an empty array.
|
|
154
|
+
it('should return null when the externalId array is an empty array', () => {
|
|
155
|
+
const message = {
|
|
156
|
+
context: {
|
|
157
|
+
externalId: [],
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
const type = 'kustomerId';
|
|
161
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
162
|
+
expect(result).toBeNull();
|
|
163
|
+
});
|
|
164
|
+
// Returns null when the externalId array does not contain an object with the specified type.
|
|
165
|
+
it('should return null when the externalId array does not contain an object with the specified type', () => {
|
|
166
|
+
const message = {
|
|
167
|
+
context: {
|
|
168
|
+
externalId: [
|
|
169
|
+
{
|
|
170
|
+
type: 'kustomerId',
|
|
171
|
+
id: '12345678',
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
const type = 'nonExistentType';
|
|
177
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
178
|
+
expect(result).toBeNull();
|
|
179
|
+
});
|
|
180
|
+
// Returns the first destination-specific external ID object with the specified type when multiple objects with the same type exist in the externalId array.
|
|
181
|
+
it('should return the destination-specific external ID when multiple objects with the same type exist in the externalId array', () => {
|
|
182
|
+
const message = {
|
|
183
|
+
context: {
|
|
184
|
+
externalId: [
|
|
185
|
+
{
|
|
186
|
+
type: 'kustomerId',
|
|
187
|
+
id: '12345678',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'kustomerId',
|
|
191
|
+
id: '87654321',
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
const type = 'kustomerId';
|
|
197
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
198
|
+
expect(result).toBe('12345678');
|
|
199
|
+
});
|
|
200
|
+
// Returns null when the destination-specific external ID object does not have an id property.
|
|
201
|
+
it('should return null when the destination-specific external ID object does not have an id property', () => {
|
|
202
|
+
const message = {
|
|
203
|
+
context: {
|
|
204
|
+
externalId: [
|
|
205
|
+
{
|
|
206
|
+
type: 'kustomerId',
|
|
207
|
+
id: '12345678',
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
type: 'otherId',
|
|
211
|
+
// id property is missing
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
const type = 'otherId';
|
|
217
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
218
|
+
expect(result).toBeUndefined();
|
|
219
|
+
});
|
|
220
|
+
// Returns null when the destination-specific external ID object does not have a type property.
|
|
221
|
+
it('should return null when the destination-specific external ID object does not have a type property', () => {
|
|
222
|
+
const message = {
|
|
223
|
+
context: {
|
|
224
|
+
externalId: [
|
|
225
|
+
{
|
|
226
|
+
id: '12345678',
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
const type = 'kustomerId';
|
|
232
|
+
const result = sem_1.SemanticUtil.getDestinationExternalID(message, type);
|
|
233
|
+
expect(result).toBeNull();
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VtLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUF3Qjs7QUFFeEIsK0JBQXFDO0FBRXJDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsK0ZBQStGO1FBQy9GLEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7WUFDNUUsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixHQUFHLEVBQUUsT0FBTztxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsa0JBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkVBQTZFO1FBQzdFLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsWUFBWSxFQUFFO29CQUNaLFFBQVEsRUFBRTt3QkFDUixHQUFHLEVBQUUsT0FBTztxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsTUFBTSxNQUFNLEdBQUcsa0JBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLEVBQUUsQ0FBQyxv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QUErRjtRQUMvRixFQUFFLENBQUMsbUdBQW1HLEVBQUUsR0FBRyxFQUFFO1lBQzNHLE1BQU0sT0FBTyxHQUFHO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsRUFBRSxFQUFFLFVBQVU7eUJBQ2Y7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFHLGtCQUFZLENBQUMsd0JBQXdCLENBQUMsT0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgQ29kaXVtQUlcblxuaW1wb3J0IHsgU2VtYW50aWNVdGlsIH0gZnJvbSAnLi9zZW0nO1xuXG5kZXNjcmliZSgnU2VtYW50aWNVdGlsJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0SW50ZWdyYXRpb25zT2JqJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgJ2dldEludGVncmF0aW9uc09iaicgcmV0dXJucyB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBmb3IgYSB2YWxpZCBpbnRlZ3JhdGlvbiBuYW1lXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGludGVncmF0aW9ucyBvYmplY3QgZm9yIGEgdmFsaWQgaW50ZWdyYXRpb24gbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIGZiX3BpeGVsOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsga2V5OiAndmFsdWUnIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIG51bGwgZm9yIGFuIGVtcHR5IGludGVncmF0aW9uIG5hbWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIGZvciBhbiBlbXB0eSBpbnRlZ3JhdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIG51bGwgZm9yIGFuIGludmFsaWQgaW50ZWdyYXRpb24gbmFtZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgZm9yIGFuIGludmFsaWQgaW50ZWdyYXRpb24gbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIGZiX3BpeGVsOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdpbnZhbGlkX2ludGVncmF0aW9uJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGhhcyBtdWx0aXBsZSBjYW5vbmljYWwgbmFtZXMgYnV0IG5vbmUgb2YgdGhlbSBleGlzdCBpbiB0aGUgbWVzc2FnZS5pbnRlZ3JhdGlvbnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGhhcyBtdWx0aXBsZSBjYW5vbmljYWwgbmFtZXMgYnV0IG5vbmUgb2YgdGhlbSBleGlzdCBpbiB0aGUgbWVzc2FnZS5pbnRlZ3JhdGlvbnMgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ludmFsaWRfaW50ZWdyYXRpb24nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldEludGVncmF0aW9uc09iaihtZXNzYWdlIGFzIGFueSwgaW50Z05hbWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgJ2dldEludGVncmF0aW9uc09iaicgcmV0dXJucyBudWxsIHdoZW4gdGhlIG1lc3NhZ2Ugb2JqZWN0IGhhcyBubyBpbnRlZ3JhdGlvbnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBtZXNzYWdlIG9iamVjdCBoYXMgbm8gaW50ZWdyYXRpb25zIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ZiX3BpeGVsJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIG5vbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBmb3IgdGhlIGludGVncmF0aW9uIG5hbWUgZXhpc3QgaW4gdGhlIGludGVncmF0aW9ucyBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gbm9uZSBvZiB0aGUgY2Fub25pY2FsIG5hbWVzIGZvciB0aGUgaW50ZWdyYXRpb24gbmFtZSBleGlzdCBpbiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIHNvbWVfaW50ZWdyYXRpb246IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGdOYW1lID0gJ2ZiX3BpeGVsJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXRJbnRlZ3JhdGlvbnNPYmoobWVzc2FnZSBhcyBhbnksIGludGdOYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0ICdnZXRJbnRlZ3JhdGlvbnNPYmonIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGludGVncmF0aW9uIG5hbWUgZXhpc3RzIGluIHRoZSBpbnRlZ3JhdGlvbnMgb2JqZWN0IGJ1dCBpdHMgdmFsdWUgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBpbnRlZ3JhdGlvbiBuYW1lIGV4aXN0cyBpbiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBidXQgaXRzIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbnM6IHtcbiAgICAgICAgICBmYl9waXhlbDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCAnZ2V0SW50ZWdyYXRpb25zT2JqJyByZXR1cm5zIHRoZSBpbnRlZ3JhdGlvbnMgb2JqZWN0IGZvciBhIHZhbGlkIGludGVncmF0aW9uIG5hbWUgd2hlbiB0aGUgdmFsdWUgaXMgYSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgaW50ZWdyYXRpb25zIG9iamVjdCBmb3IgYSB2YWxpZCBpbnRlZ3JhdGlvbiBuYW1lIHdoZW4gdGhlIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgICAgZmJfcGl4ZWw6IDEyMyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRnTmFtZSA9ICdmYl9waXhlbCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2UgYXMgYW55LCBpbnRnTmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKDEyMyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXREZXN0aW5hdGlvbkV4dGVybmFsSUQnLCAoKSA9PiB7XG4gICAgLy8gUmV0dXJucyB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgd2hlbiBpdCBleGlzdHMgaW4gdGhlIG1lc3NhZ2UgY29udGV4dC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgd2hlbiBpdCBleGlzdHMgaW4gdGhlIG1lc3NhZ2UgY29udGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdrdXN0b21lcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnMTIzNDU2NzgnKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBkZXN0aW5hdGlvbi1zcGVjaWZpYyBleHRlcm5hbCBJRCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWVzc2FnZSBjb250ZXh0LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1lc3NhZ2UgY29udGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdvdGhlcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBtZXNzYWdlIGNvbnRleHQgaXMgdW5kZWZpbmVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgbWVzc2FnZSBjb250ZXh0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXR1cm5zIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBpcyBub3QgYW4gYXJyYXkuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBleHRlcm5hbElkIGFycmF5IGlzIG5vdCBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiAnMTIzNDU2NzgnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXR1cm5zIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBpcyBhbiBlbXB0eSBhcnJheS5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGV4dGVybmFsSWQgYXJyYXkgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW10sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdrdXN0b21lcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFJldHVybnMgbnVsbCB3aGVuIHRoZSBleHRlcm5hbElkIGFycmF5IGRvZXMgbm90IGNvbnRhaW4gYW4gb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZXh0ZXJuYWxJZCBhcnJheSBkb2VzIG5vdCBjb250YWluIGFuIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdrdXN0b21lcklkJyxcbiAgICAgICAgICAgICAgaWQ6ICcxMjM0NTY3OCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdub25FeGlzdGVudFR5cGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRChtZXNzYWdlIGFzIGFueSwgdHlwZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB0eXBlIHdoZW4gbXVsdGlwbGUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHR5cGUgZXhpc3QgaW4gdGhlIGV4dGVybmFsSWQgYXJyYXkuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIHdoZW4gbXVsdGlwbGUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHR5cGUgZXhpc3QgaW4gdGhlIGV4dGVybmFsSWQgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAna3VzdG9tZXJJZCcsXG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2t1c3RvbWVySWQnLFxuICAgICAgICAgICAgICBpZDogJzg3NjU0MzIxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlID0gJ2t1c3RvbWVySWQnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gU2VtYW50aWNVdGlsLmdldERlc3RpbmF0aW9uRXh0ZXJuYWxJRChtZXNzYWdlIGFzIGFueSwgdHlwZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcxMjM0NTY3OCcpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGFuIGlkIHByb3BlcnR5LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgb2JqZWN0IGRvZXMgbm90IGhhdmUgYW4gaWQgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXh0ZXJuYWxJZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAna3VzdG9tZXJJZCcsXG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ290aGVySWQnLFxuICAgICAgICAgICAgICAvLyBpZCBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZSA9ICdvdGhlcklkJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFNlbWFudGljVXRpbC5nZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZSBhcyBhbnksIHR5cGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJucyBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eS5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGRlc3RpbmF0aW9uLXNwZWNpZmljIGV4dGVybmFsIElEIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBleHRlcm5hbElkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnMTIzNDU2NzgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR5cGUgPSAna3VzdG9tZXJJZCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBTZW1hbnRpY1V0aWwuZ2V0RGVzdGluYXRpb25FeHRlcm5hbElEKG1lc3NhZ2UgYXMgYW55LCB0eXBlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rudderstack/integrations-lib",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "build/index.js",
|
|
6
|
+
"module": "build/index.js",
|
|
7
|
+
"types": "build/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"copy": "find ./src -name '*.yaml' -o -name '*.csv' | cpio -pdm ./build",
|
|
10
|
+
"build:ci": "tsc -p tsconfig.json",
|
|
11
|
+
"build": "npm run build:ci && npm run copy",
|
|
12
|
+
"clean": "rm -rf ./build",
|
|
13
|
+
"clean:build": "npm run clean && npm run build",
|
|
14
|
+
"test": "jest --coverage --verbose"
|
|
15
|
+
},
|
|
16
|
+
"pre-commit": [
|
|
17
|
+
"clean:build",
|
|
18
|
+
"test"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/rudderlabs/rudder-integrations-lib"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"rudder",
|
|
29
|
+
"rudderstack",
|
|
30
|
+
"cdp",
|
|
31
|
+
"workflow",
|
|
32
|
+
"engine"
|
|
33
|
+
],
|
|
34
|
+
"author": "RudderStack",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"axios": "^1.4.0",
|
|
38
|
+
"crypto": "^1.0.1",
|
|
39
|
+
"get-value": "^3.0.1",
|
|
40
|
+
"handlebars": "^4.7.8",
|
|
41
|
+
"lodash": "^4.17.21",
|
|
42
|
+
"moment": "^2.29.4",
|
|
43
|
+
"moment-timezone": "^0.5.43",
|
|
44
|
+
"rudder-workflow-engine": "file:../rudder-workflow-engine",
|
|
45
|
+
"set-value": "^4.1.0",
|
|
46
|
+
"sha256": "^0.2.0",
|
|
47
|
+
"tslib": "^2.4.0"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/get-value": "^3.0.3",
|
|
51
|
+
"@types/jest": "^29.5.4",
|
|
52
|
+
"@types/lodash": "^4.14.195",
|
|
53
|
+
"@types/node": "^20.3.3",
|
|
54
|
+
"@types/set-value": "^4.0.1",
|
|
55
|
+
"@types/sha256": "^0.2.0",
|
|
56
|
+
"axios-mock-adapter": "^1.21.5",
|
|
57
|
+
"jest": "^29.4.3",
|
|
58
|
+
"pre-commit": "^1.2.2",
|
|
59
|
+
"prettier": "^2.8.4",
|
|
60
|
+
"ts-jest": "^29.0.5",
|
|
61
|
+
"ts-node": "^10.9.1",
|
|
62
|
+
"typescript": "^5.1.6"
|
|
63
|
+
},
|
|
64
|
+
"files": [
|
|
65
|
+
"build",
|
|
66
|
+
"LICENSE",
|
|
67
|
+
"README.md"
|
|
68
|
+
]
|
|
69
|
+
}
|