@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.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/build/constants.d.ts +96 -0
  4. package/build/constants.d.ts.map +1 -0
  5. package/build/constants.js +180 -0
  6. package/build/errors/aborted_error.d.ts +5 -0
  7. package/build/errors/aborted_error.d.ts.map +1 -0
  8. package/build/errors/aborted_error.js +16 -0
  9. package/build/errors/base.d.ts +8 -0
  10. package/build/errors/base.d.ts.map +1 -0
  11. package/build/errors/base.js +14 -0
  12. package/build/errors/configuration_error.d.ts +5 -0
  13. package/build/errors/configuration_error.d.ts.map +1 -0
  14. package/build/errors/configuration_error.js +17 -0
  15. package/build/errors/index.d.ts +17 -0
  16. package/build/errors/index.d.ts.map +1 -0
  17. package/build/errors/index.js +33 -0
  18. package/build/errors/instrumentation_error.d.ts +5 -0
  19. package/build/errors/instrumentation_error.d.ts.map +1 -0
  20. package/build/errors/instrumentation_error.js +16 -0
  21. package/build/errors/invalid_auth_token_error.d.ts +5 -0
  22. package/build/errors/invalid_auth_token_error.d.ts.map +1 -0
  23. package/build/errors/invalid_auth_token_error.js +17 -0
  24. package/build/errors/network_error.d.ts +7 -0
  25. package/build/errors/network_error.d.ts.map +1 -0
  26. package/build/errors/network_error.js +28 -0
  27. package/build/errors/network_instrumentation_error.d.ts +5 -0
  28. package/build/errors/network_instrumentation_error.d.ts.map +1 -0
  29. package/build/errors/network_instrumentation_error.js +17 -0
  30. package/build/errors/oauth_secret_error.d.ts +5 -0
  31. package/build/errors/oauth_secret_error.d.ts.map +1 -0
  32. package/build/errors/oauth_secret_error.js +16 -0
  33. package/build/errors/platform_error.d.ts +5 -0
  34. package/build/errors/platform_error.d.ts.map +1 -0
  35. package/build/errors/platform_error.js +15 -0
  36. package/build/errors/redis_error.d.ts +5 -0
  37. package/build/errors/redis_error.d.ts.map +1 -0
  38. package/build/errors/redis_error.js +16 -0
  39. package/build/errors/retryable_error.d.ts +5 -0
  40. package/build/errors/retryable_error.d.ts.map +1 -0
  41. package/build/errors/retryable_error.js +16 -0
  42. package/build/errors/throttled_error.d.ts +5 -0
  43. package/build/errors/throttled_error.d.ts.map +1 -0
  44. package/build/errors/throttled_error.js +16 -0
  45. package/build/errors/transformation_error.d.ts +5 -0
  46. package/build/errors/transformation_error.d.ts.map +1 -0
  47. package/build/errors/transformation_error.js +15 -0
  48. package/build/errors/unauthorized_error.d.ts +5 -0
  49. package/build/errors/unauthorized_error.d.ts.map +1 -0
  50. package/build/errors/unauthorized_error.js +17 -0
  51. package/build/errors/unhandled_status_code_error.d.ts +5 -0
  52. package/build/errors/unhandled_status_code_error.d.ts.map +1 -0
  53. package/build/errors/unhandled_status_code_error.js +17 -0
  54. package/build/errors/unsupported_event_error.d.ts +5 -0
  55. package/build/errors/unsupported_event_error.d.ts.map +1 -0
  56. package/build/errors/unsupported_event_error.js +16 -0
  57. package/build/index.d.ts +7 -0
  58. package/build/index.d.ts.map +1 -0
  59. package/build/index.js +23 -0
  60. package/build/logger.d.ts +7 -0
  61. package/build/logger.d.ts.map +1 -0
  62. package/build/logger.js +39 -0
  63. package/build/network/clients/axios.d.ts +38 -0
  64. package/build/network/clients/axios.d.ts.map +1 -0
  65. package/build/network/clients/axios.js +197 -0
  66. package/build/network/clients/axios.test.d.ts +2 -0
  67. package/build/network/clients/axios.test.d.ts.map +1 -0
  68. package/build/network/clients/axios.test.js +231 -0
  69. package/build/network/clients/types.d.ts +32 -0
  70. package/build/network/clients/types.d.ts.map +1 -0
  71. package/build/network/clients/types.js +3 -0
  72. package/build/network/factory.d.ts +30 -0
  73. package/build/network/factory.d.ts.map +1 -0
  74. package/build/network/factory.js +46 -0
  75. package/build/network/factory.test.d.ts +2 -0
  76. package/build/network/factory.test.d.ts.map +1 -0
  77. package/build/network/factory.test.js +50 -0
  78. package/build/network/index.d.ts +2 -0
  79. package/build/network/index.d.ts.map +1 -0
  80. package/build/network/index.js +18 -0
  81. package/build/tags.d.ts +56 -0
  82. package/build/tags.d.ts.map +1 -0
  83. package/build/tags.js +59 -0
  84. package/build/types.d.ts +275 -0
  85. package/build/types.d.ts.map +1 -0
  86. package/build/types.js +34 -0
  87. package/build/utils/index.d.ts +4 -0
  88. package/build/utils/index.d.ts.map +1 -0
  89. package/build/utils/index.js +20 -0
  90. package/build/utils/json.d.ts +51 -0
  91. package/build/utils/json.d.ts.map +1 -0
  92. package/build/utils/json.js +507 -0
  93. package/build/utils/json.test.d.ts +2 -0
  94. package/build/utils/json.test.d.ts.map +1 -0
  95. package/build/utils/json.test.js +588 -0
  96. package/build/utils/misc.d.ts +129 -0
  97. package/build/utils/misc.d.ts.map +1 -0
  98. package/build/utils/misc.js +362 -0
  99. package/build/utils/misc.test.d.ts +2 -0
  100. package/build/utils/misc.test.d.ts.map +1 -0
  101. package/build/utils/misc.test.js +2059 -0
  102. package/build/utils/sem.d.ts +29 -0
  103. package/build/utils/sem.d.ts.map +1 -0
  104. package/build/utils/sem.js +196 -0
  105. package/build/utils/sem.test.d.ts +2 -0
  106. package/build/utils/sem.test.d.ts.map +1 -0
  107. package/build/utils/sem.test.js +237 -0
  108. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxtQ0FBaUM7QUFDakMsMERBQTRCO0FBRTVCLE1BQU0sMkJBQTJCLEdBQWdDO0lBQy9ELFFBQVEsRUFBRTtRQUNSLFVBQVU7UUFDVixVQUFVO1FBQ1YsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixVQUFVO1FBQ1YsZ0JBQWdCO0tBQ2pCO0lBQ0QsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDMUMsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDOUMsY0FBYyxFQUFFO1FBQ2QsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixlQUFlO0tBQ2hCO0lBQ0QsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkYsYUFBYSxFQUFFO1FBQ2IsZUFBZTtRQUNmLGVBQWU7UUFDZixlQUFlO1FBQ2YsZUFBZTtRQUNmLGNBQWM7UUFDZCxjQUFjO0tBQ2Y7SUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDckQsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDbEQsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDdEMsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JELEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2xDLGVBQWUsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQztJQUN4RSxlQUFlLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQztJQUN6RSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUM5QixTQUFTLEVBQUUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztJQUN6RSxTQUFTLEVBQUUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQzVFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2xDLFVBQVUsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQzlGLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQzFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDaEUsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDdEMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ2hELE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNoRCxRQUFRLEVBQUU7UUFDUixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsVUFBVTtRQUNWLFVBQVU7UUFDVixVQUFVO1FBQ1YsVUFBVTtLQUNYO0lBQ0QsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDbEUsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDdEMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDOUIsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQy9ELHdCQUF3QixFQUFFO1FBQ3hCLDBCQUEwQjtRQUMxQiwyQkFBMkI7UUFDM0IsMEJBQTBCO1FBQzFCLHdCQUF3QjtRQUN4QiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLDBCQUEwQjtRQUMxQiwwQkFBMEI7UUFDMUIsd0JBQXdCO0tBQ3pCO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixrQkFBa0I7S0FDbkI7SUFDRCxZQUFZLEVBQUU7UUFDWixjQUFjO1FBQ2QsYUFBYTtRQUNiLGFBQWE7UUFDYixjQUFjO1FBQ2QsY0FBYztRQUNkLGNBQWM7S0FDZjtJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQzlCLFVBQVUsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUNwRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQztJQUNwRSxTQUFTLEVBQUUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDL0QsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUM1RSxlQUFlLEVBQUU7UUFDZixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsZ0JBQWdCO0tBQ2pCO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsZ0JBQWdCO0tBQ2pCO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEIsc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFDdEIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QixzQkFBc0I7S0FDdkI7SUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUMxQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUMxQyxXQUFXLEVBQUU7UUFDWCxhQUFhO1FBQ2IsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixZQUFZO1FBQ1osYUFBYTtRQUNiLGFBQWE7S0FDZDtJQUNELEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO0NBQ25DLENBQUM7QUFFRixNQUFhLFlBQVk7SUFDdkI7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBeUIsRUFBRSxXQUFtQixFQUFFO1FBQy9FLElBQUksQ0FBQyxJQUFBLGdCQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEIsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUU7Z0JBQy9ELElBQUksSUFBQSxtQkFBRyxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsYUFBYSxFQUFFLENBQUMsRUFBRTtvQkFDakQsT0FBTyxJQUFBLG1CQUFHLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixhQUFhLEVBQUUsQ0FBQyxDQUFDO2lCQUN0RDtnQkFDRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVULElBQUksT0FBTyxFQUFFO2dCQUNYLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxPQUF5QixFQUFFLElBQVk7UUFDNUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM1QixNQUFNLGVBQWUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNsRCxJQUFJLGFBQXFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2xDLGFBQWEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQzdFO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxhQUFhLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQXhERCxvQ0F3REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeHRlcm5hbElkLCBSdWRkZXJTdGFja0V2ZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2dldC12YWx1ZSc7XG5cbmNvbnN0IElOVEVHUkFUSU9OX0NBTk9OSUNBTF9OQU1FUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xuICBmYl9waXhlbDogW1xuICAgICdmYl9waXhlbCcsXG4gICAgJ2ZiIHBpeGVsJyxcbiAgICAnRmFjZWJvb2tQaXhlbCcsXG4gICAgJ0ZhY2Vib29rIFBpeGVsJyxcbiAgICAnRkIgUGl4ZWwnLFxuICAgICdGYWNlYm9va19QaXhlbCcsXG4gIF0sXG4gIG9tZXRyaWE6IFsnT21ldHJpYScsICdvbWV0cmlhJywgJ09NRVRSSUEnXSxcbiAgc2VuZGdyaWQ6IFsnc2VuZGdyaWQnLCAnU2VuZGdyaWQnLCAnU0VOREdSSUQnXSxcbiAgZGNtX2Zsb29kbGlnaHQ6IFtcbiAgICAnZGNtIGZsb29kbGlnaHQnLFxuICAgICdkY21fZmxvb2RsaWdodCcsXG4gICAgJ0RDTSBGbG9vZGxpZ2h0JyxcbiAgICAnRENNX0Zsb29kbGlnaHQnLFxuICAgICdEQ01GbG9vZGxpZ2h0JyxcbiAgICAnZGNtZmxvb2RsaWdodCcsXG4gIF0sXG4gIG5ld19yZWxpYzogWyduZXcgcmVsaWMnLCAnbmV3X3JlbGljJywgJ05ldyBSZWxpYycsICdOZXdfUmVsaWMnLCAnTmV3UmVsaWMnLCAnbmV3cmVsaWMnXSxcbiAgYXR0ZW50aXZlX3RhZzogW1xuICAgICdhdHRlbnRpdmUgdGFnJyxcbiAgICAnYXR0ZW50aXZlX3RhZycsXG4gICAgJ0F0dGVudGl2ZSBUYWcnLFxuICAgICdBdHRlbnRpdmVfVGFnJyxcbiAgICAnQXR0ZW50aXZlVGFnJyxcbiAgICAnYXR0ZW50aXZldGFnJyxcbiAgXSxcbiAgd2ViaG9vazogWyd3ZWJob29rJywgJ1dlYmhvb2snLCAnV2ViSG9vaycsICdXRUJIT09LJ10sXG4gIG1haWxjaGltcDogWydtYWlsY2hpbXAnLCAnTWFpbENoaW1wJywgJ01BSUxDSElNUCddLFxuICBtYXV0aWM6IFsnTUFVVElDJywgJ21hdXRpYycsICdNYXV0aWMnXSxcbiAgbWFpbGpldDogWydNQUlMSkVUJywgJ01haWxKZXQnLCAnbWFpbGpldCcsICdNYWlsamV0J10sXG4gIGthZmthOiBbJ0tBRktBJywgJ2thZmthJywgJ0thZmthJ10sXG4gIGF6dXJlX2V2ZW50X2h1YjogWydBWlVSRV9FVkVOVF9IVUInLCAnYXp1cmVfZXZlbnRfaHViJywgJ0F6dXJlRXZlbnRIdWInXSxcbiAgY29uZmx1ZW50X2Nsb3VkOiBbJ0NPTkZMVUVOVF9DTE9VRCcsICdjb25mbHVlbnRfY2xvdWQnLCAnQ29uZmx1ZW50Q2xvdWQnXSxcbiAgdmVybzogWyd2ZXJvJywgJ1Zlcm8nLCAnVkVSTyddLFxuICBwaW50ZXJlc3Q6IFsncGludGVyZXN0JywgJ1BpbnRlcmVzdCcsICdQSU5URVJFU1QnLCAncGludGVyZXN0Q29udmVyc2lvbiddLFxuICByb2NrZXJib3g6IFsncm9ja2VyYm94JywgJ1JPQ0tFUkJPWCcsICdSb2NrZXJib3gnLCAnUm9ja2VyQm94JywgJ3JvY2tlckJveCddLFxuICBjYW5ueTogWydjYW5ueScsICdDYW5ueScsICdDQU5OWSddLFxuICBvbmVfc2lnbmFsOiBbJ29uZSBzaWduYWwnLCAnb25lX3NpZ25hbCcsICdPbmUgU2lnbmFsJywgJ09uZV9TaWduYWwnLCAnT25lU2lnbmFsJywgJ29uZXNpZ25hbCddLFxuICB3b290cmljOiBbJ3dvb3RyaWMnLCAnV29vdHJpYycsICdXT09UUklDJ10sXG4gIGNsaWNrdXA6IFsnQ2xpY2tVcCcsICdjbGlja3VwJywgJ0NMSUNLVVAnLCAnY2xpY2tVcCcsICdDbGlja3VwJ10sXG4gIHphcGllcjogWyd6YXBpZXInLCAnWmFwaWVyJywgJ1pBUElFUiddLFxuICBzaHluZXQ6IFsnc2h5bmV0JywgJ1NIWU5FVCcsICdzaHlOZXQnLCAnU2h5TmV0J10sXG4gIHdvb3ByYTogWydXT09QUkEnLCAnV29vcHJhJywgJ3dvb3ByYSddLFxuICBtb25kYXk6IFsnbW9uZGF5JywgJ01PTkRBWScsICdtb25EYXknLCAnTW9uRGF5J10sXG4gIG1haWxtb2RvOiBbXG4gICAgJ21haWwgbW9kbycsXG4gICAgJ21haWxfbW9kbycsXG4gICAgJ01haWwgTW9kbycsXG4gICAgJ01haWxfTW9kbycsXG4gICAgJ01haWxNb2RvJyxcbiAgICAnbWFpbG1vZG8nLFxuICAgICdNQUlMTU9ETycsXG4gICAgJ21haWxNb2RvJyxcbiAgXSxcbiAgdXNlcjogWyd1c2VyJywgJ1VTRVInLCAnVXNlcicsICdVc2VyLmNvbScsICd1c2VyLmNvbScsICdVU0VSLmNvbSddLFxuICBlbmdhZ2U6IFsnZW5nYWdlJywgJ0VuZ2FnZScsICdFTkdBR0UnXSxcbiAganVuZTogWydqdW5lJywgJ0pVTkUnLCAnSnVuZSddLFxuICBmYWN0b3JzYWk6IFsnRkFDVE9SU0FJJywgJ2ZhY3RvcnNBSScsICdGYWN0b3JzQWknLCAnZmFjdG9yc0FpJ10sXG4gIHNuYXBjaGF0X2N1c3RvbV9hdWRpZW5jZTogW1xuICAgICdzbmFwY2hhdCBjdXN0b20gYXVkaWVuY2UnLFxuICAgICdzbmFwIGNoYXQgY3VzdG9tIGF1ZGllbmNlJyxcbiAgICAnc25hcGNoYXRfY3VzdG9tX2F1ZGllbmNlJyxcbiAgICAnc25hcGNoYXRDdXN0b21BdWRpZW5jZScsXG4gICAgJ1NuYXBjaGF0IEN1c3RvbSBBdWRpZW5jZScsXG4gICAgJ3NuYXBjaGF0Y3VzdG9tYXVkaWVuY2UnLFxuICAgICdTTkFQQ0hBVCBDVVNUT00gQVVESUVOQ0UnLFxuICAgICdTTkFQQ0hBVF9DVVNUT01fQVVESUVOQ0UnLFxuICAgICdTTkFQQ0hBVENVU1RPTUFVRElFTkNFJyxcbiAgXSxcbiAgQ0FNUEFJR05fTUFOQUdFUjogW1xuICAgICdjYW1wYWlnbiBtYW5hZ2VyJyxcbiAgICAnY2FtcGFpbiBNYW5hZ2VyJyxcbiAgICAnQ0FNUEFJR04gTUFOQUdFUicsXG4gICAgJ2NhbXBhaWduTWFuYWdlcicsXG4gICAgJ2NhbXBhaWduX21hbmFnZXInLFxuICAgICdDQU1QQUlHTl9NQU5BR0VSJyxcbiAgXSxcbiAgZ2FpbnNpZ2h0X3B4OiBbXG4gICAgJ0dBSU5TSUdIVF9QWCcsXG4gICAgJ0dBSU5TSUdIVFBYJyxcbiAgICAnZ2FpbnNpZ2h0UHgnLFxuICAgICdHYWluc2lnaHQgUFgnLFxuICAgICdnYWluc2lnaHQgcHgnLFxuICAgICdHYWluc2lnaHQgUHgnLFxuICBdLFxuICBhd2luOiBbJ2F3aW4nLCAnQXdpbicsICdBV0lOJ10sXG4gIHNlbmRpbmJsdWU6IFsnc2VuZGluYmx1ZScsICdTRU5ESU5CTFVFJywgJ1NlbmRpbmJsdWUnLCAnU2VuZGluQmx1ZSddLFxuICBnYTQ6IFsnR0E0JywgJ2dhNCcsICdHYTQnLCAnR29vZ2xlIEFuYWx5dGljcyA0JywgJ2dvb2dsZUFuYWx5dGljczQnXSxcbiAgcGlwZWRyZWFtOiBbJ1BpcGVkcmVhbScsICdQaXBlRHJlYW0nLCAncGlwZWRyZWFtJywgJ1BJUEVEUkVBTSddLFxuICBwYWdlcmR1dHk6IFsncGFnZXJkdXR5JywgJ1BBR0VSRFVUWScsICdQYWdlckR1dHknLCAnUGFnZXJkdXR5JywgJ3BhZ2VyRHV0eSddLFxuICBhZG9iZV9hbmFseXRpY3M6IFtcbiAgICAnYWRvYmVfYW5hbHl0aWNzJyxcbiAgICAnQURPQkVfQU5BTFlUSUNTJyxcbiAgICAnYWRvYmUgYW5hbHl0aWNzJyxcbiAgICAnYWRvYmVBbmFseXRpY3MnLFxuICAgICdBZG9iZSBBbmFseXRpY3MnLFxuICAgICdhZG9iZWFuYWx5dGljcycsXG4gICAgJ0FET0JFIEFOQUxZVElDUycsXG4gICAgJ0FET0JFQU5BTFlUSUNTJyxcbiAgXSxcbiAgY3JpdGVvX2F1ZGllbmNlOiBbXG4gICAgJ2NyaXRlbyBhdWRpZW5jZScsXG4gICAgJ2NyaXRlb0F1ZGllbmNlJyxcbiAgICAnQ3JpdGVvIEF1ZGllbmNlJyxcbiAgICAnY3JpdGVvYXVkaWVuY2UnLFxuICAgICdDUklURU8gQVVESUVOQ0UnLFxuICAgICdDUklURU9fQVVESUVOQ0UnLFxuICAgICdDUklURU9BVURJRU5DRScsXG4gIF0sXG4gIG9wdGltaXplbHlfZnVsbHN0YWNrOiBbXG4gICAgJ09wdGltaXplbHkgRnVsbHN0YWNrJyxcbiAgICAnT1BUSU1JWkVMWSBGVUxMU1RBQ0snLFxuICAgICdvcHRpbWl6ZWx5IGZ1bGxzdGFjaycsXG4gICAgJ09wdGltaXplbHlGdWxsc3RhY2snLFxuICAgICdPcHRpbWl6ZWx5X0Z1bGxzdGFjaycsXG4gICAgJ29wdGltaXplbHlfZnVsbHN0YWNrJyxcbiAgXSxcbiAgdml0YWxseTogWyd2aXRhbGx5JywgJ1ZpdGFsbHknLCAnVklUQUxMWSddLFxuICBjb3VyaWVyOiBbJ0NvdXJpZXInLCAnY291cmllcicsICdDT1VSSUVSJ10sXG4gIFRXSVRURVJfQURTOiBbXG4gICAgJ3R3aXR0ZXIgYWRzJyxcbiAgICAndHdpdHRlciBNYW5hZ2VyJyxcbiAgICAnVFdJVFRFUiBBRFMnLFxuICAgICd0d2l0dGVyQURTJyxcbiAgICAndHdpdHRlcl9hZHMnLFxuICAgICdUV0lUVEVSX0FEUycsXG4gIF0sXG4gIEJSQVpFOiBbJ0JSQVpFJywgJ0JyYXplJywgJ2JyYXplJ10sXG59O1xuXG5leHBvcnQgY2xhc3MgU2VtYW50aWNVdGlsIHtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYGludGVncmF0aW9uc2Agb2JqZWN0IGZvciBhIHNwZWNpZmljIGRlc3RpbmF0aW9uIGluIGEgZ2l2ZW4gYFJ1ZGRlclN0YWNrRXZlbnRgIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIFJ1ZGRlclN0YWNrRXZlbnQgbWVzc2FnZSBvYmplY3QuXG4gICAqIEBwYXJhbSBpbnRnTmFtZSAtIFRoZSBkZXN0aW5hdGlvbiBuYW1lLlxuICAgKiBAcmV0dXJucyBUaGUgYGludGVncmF0aW9uc2Agb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW50ZWdyYXRpb25zT2JqKG1lc3NhZ2U6IFJ1ZGRlclN0YWNrRXZlbnQsIGludGdOYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGlmICghaXNFbXB0eShpbnRnTmFtZSkpIHtcbiAgICAgIGNvbnN0IGludGdDYW5vbmljYWxOYW1lcyA9IElOVEVHUkFUSU9OX0NBTk9OSUNBTF9OQU1FU1tpbnRnTmFtZV07XG4gICAgICBpZiAoIWludGdDYW5vbmljYWxOYW1lcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGludGdPYmogPSBpbnRnQ2Fub25pY2FsTmFtZXMucmVkdWNlKChhY2MsIGNhbm9uaWNhbE5hbWUpID0+IHtcbiAgICAgICAgaWYgKGdldChtZXNzYWdlLCBgaW50ZWdyYXRpb25zLiR7Y2Fub25pY2FsTmFtZX1gKSkge1xuICAgICAgICAgIHJldHVybiBnZXQobWVzc2FnZSwgYGludGVncmF0aW9ucy4ke2Nhbm9uaWNhbE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIG51bGwpO1xuXG4gICAgICBpZiAoaW50Z09iaikge1xuICAgICAgICByZXR1cm4gaW50Z09iajtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQgZnJvbSBhIGdpdmVuICptZXNzYWdlIG9iamVjdC5cbiAgICoge1xuICAgKiAgICBcImNvbnRleHRcIjoge1xuICAgKiAgICAgIFwiZXh0ZXJuYWxJZFwiOiBbXG4gICAqICAgICAgICB7XG4gICAqICAgICAgICAgIFwidHlwZVwiOiBcImt1c3RvbWVySWRcIixcbiAgICogICAgICAgICAgXCJpZFwiOiBcIjEyMzQ1Njc4XCJcbiAgICogICAgICAgIH1cbiAgICogICAgICBdXG4gICAqICAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge1J1ZGRlclN0YWNrRXZlbnR9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyB0aGUgZXh0ZXJuYWwgSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGV4dGVybmFsIElEIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn0gLSBUaGUgZGVzdGluYXRpb24tc3BlY2lmaWMgZXh0ZXJuYWwgSUQsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXREZXN0aW5hdGlvbkV4dGVybmFsSUQobWVzc2FnZTogUnVkZGVyU3RhY2tFdmVudCwgdHlwZTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgY29uc3QgeyBjb250ZXh0IH0gPSBtZXNzYWdlO1xuICAgIGNvbnN0IGV4dGVybmFsSWRBcnJheSA9IGNvbnRleHQ/LmV4dGVybmFsSWQgPz8gW107XG4gICAgbGV0IGV4dGVybmFsSWRPYmo6IEV4dGVybmFsSWQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXh0ZXJuYWxJZEFycmF5KSkge1xuICAgICAgZXh0ZXJuYWxJZE9iaiA9IGV4dGVybmFsSWRBcnJheS5maW5kKChleHRJZE9iaikgPT4gZXh0SWRPYmo/LnR5cGUgPT09IHR5cGUpO1xuICAgIH1cbiAgICBpZiAoIWV4dGVybmFsSWRPYmopIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZXJuYWxJZE9iai5pZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sem.test.d.ts.map
@@ -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
+ }