@segment/action-destinations 3.462.0 → 3.462.1-staging-4cec9e0a5.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 (188) hide show
  1. package/dist/destinations/airship/utilities.js.map +1 -1
  2. package/dist/destinations/altertable/event/index.js.map +1 -1
  3. package/dist/destinations/altertable/fields.js.map +1 -1
  4. package/dist/destinations/altertable/identify/index.js +1 -3
  5. package/dist/destinations/altertable/identify/index.js.map +1 -1
  6. package/dist/destinations/altertable/index.js +1 -1
  7. package/dist/destinations/altertable/utils.js +3 -7
  8. package/dist/destinations/altertable/utils.js.map +1 -1
  9. package/dist/destinations/amazon-amc/constants.d.ts +17 -0
  10. package/dist/destinations/amazon-amc/constants.js +25 -0
  11. package/dist/destinations/amazon-amc/constants.js.map +1 -0
  12. package/dist/destinations/amazon-amc/function.d.ts +4 -2
  13. package/dist/destinations/amazon-amc/function.js +44 -18
  14. package/dist/destinations/amazon-amc/function.js.map +1 -1
  15. package/dist/destinations/amazon-amc/generated-types.d.ts +5 -1
  16. package/dist/destinations/amazon-amc/index.js +89 -34
  17. package/dist/destinations/amazon-amc/index.js.map +1 -1
  18. package/dist/destinations/amazon-amc/syncAudiencesToDSP/index.js +1 -1
  19. package/dist/destinations/amazon-amc/syncAudiencesToDSP/index.js.map +1 -1
  20. package/dist/destinations/amazon-amc/types.d.ts +44 -0
  21. package/dist/destinations/amazon-amc/types.js +4 -1
  22. package/dist/destinations/amazon-amc/types.js.map +1 -1
  23. package/dist/destinations/amazon-amc/utils.d.ts +3 -49
  24. package/dist/destinations/amazon-amc/utils.js +10 -24
  25. package/dist/destinations/amazon-amc/utils.js.map +1 -1
  26. package/dist/destinations/amplitude/event-schema.js +30 -3
  27. package/dist/destinations/amplitude/event-schema.js.map +1 -1
  28. package/dist/destinations/amplitude/logEvent/generated-types.d.ts +4 -0
  29. package/dist/destinations/amplitude/logEvent/index.js +11 -3
  30. package/dist/destinations/amplitude/logEvent/index.js.map +1 -1
  31. package/dist/destinations/amplitude/logEventV2/generated-types.d.ts +4 -0
  32. package/dist/destinations/amplitude/logEventV2/index.js +10 -5
  33. package/dist/destinations/amplitude/logEventV2/index.js.map +1 -1
  34. package/dist/destinations/amplitude/logPurchase/generated-types.d.ts +4 -0
  35. package/dist/destinations/amplitude/logPurchase/index.js +10 -5
  36. package/dist/destinations/amplitude/logPurchase/index.js.map +1 -1
  37. package/dist/destinations/aws-kinesis/utils.js +3 -0
  38. package/dist/destinations/aws-kinesis/utils.js.map +1 -1
  39. package/dist/destinations/braze/index.js +5 -65
  40. package/dist/destinations/braze/index.js.map +1 -1
  41. package/dist/destinations/braze/trackPurchase/index.js +1 -1
  42. package/dist/destinations/braze/trackPurchase/index.js.map +1 -1
  43. package/dist/destinations/braze/trackPurchase2/index.js +1 -1
  44. package/dist/destinations/braze/trackPurchase2/index.js.map +1 -1
  45. package/dist/destinations/braze/updateUserProfile/generated-types.d.ts +4 -0
  46. package/dist/destinations/braze/updateUserProfile/index.js +25 -0
  47. package/dist/destinations/braze/updateUserProfile/index.js.map +1 -1
  48. package/dist/destinations/braze/updateUserProfile2/generated-types.d.ts +4 -0
  49. package/dist/destinations/braze/updateUserProfile2/index.js +25 -0
  50. package/dist/destinations/braze/updateUserProfile2/index.js.map +1 -1
  51. package/dist/destinations/braze/utils.js +2 -0
  52. package/dist/destinations/braze/utils.js.map +1 -1
  53. package/dist/destinations/collab-travel-crm/identifyUser/index.d.ts +1 -1
  54. package/dist/destinations/collab-travel-crm/identifyUser/index.js.map +1 -1
  55. package/dist/destinations/customerio/index.js +1 -1
  56. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.js +1 -1
  57. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.js.map +1 -1
  58. package/dist/destinations/google-enhanced-conversions/uploadClickConversion2/index.js +1 -1
  59. package/dist/destinations/google-enhanced-conversions/uploadClickConversion2/index.js.map +1 -1
  60. package/dist/destinations/hubspot/customEvent/functions/cache-functions.d.ts +2 -0
  61. package/dist/destinations/hubspot/customEvent/functions/cache-functions.js +19 -2
  62. package/dist/destinations/hubspot/customEvent/functions/cache-functions.js.map +1 -1
  63. package/dist/destinations/hubspot/customEvent/functions/hubspot-event-schema-functions.d.ts +2 -1
  64. package/dist/destinations/hubspot/customEvent/functions/hubspot-event-schema-functions.js +14 -3
  65. package/dist/destinations/hubspot/customEvent/functions/hubspot-event-schema-functions.js.map +1 -1
  66. package/dist/destinations/hubspot/customEvent/index.js +2 -1
  67. package/dist/destinations/hubspot/customEvent/index.js.map +1 -1
  68. package/dist/destinations/hubspot/customEvent/types.d.ts +1 -0
  69. package/dist/destinations/index.js +1 -0
  70. package/dist/destinations/index.js.map +1 -1
  71. package/dist/destinations/kafka/generated-types.d.ts +0 -3
  72. package/dist/destinations/kafka/index.js +0 -21
  73. package/dist/destinations/kafka/index.js.map +1 -1
  74. package/dist/destinations/kafka/send/generated-types.d.ts +1 -0
  75. package/dist/destinations/kafka/send/index.js +7 -0
  76. package/dist/destinations/kafka/send/index.js.map +1 -1
  77. package/dist/destinations/kafka/utils.js +0 -13
  78. package/dist/destinations/kafka/utils.js.map +1 -1
  79. package/dist/destinations/linkedin-audiences/updateAudience/fields.js.map +1 -1
  80. package/dist/destinations/linkedin-conversions/api/index.js +6 -2
  81. package/dist/destinations/linkedin-conversions/api/index.js.map +1 -1
  82. package/dist/destinations/linkedin-conversions/streamConversion/index.js.map +1 -1
  83. package/dist/destinations/liveramp-audiences/audienceEnteredS3/index.js +59 -17
  84. package/dist/destinations/liveramp-audiences/audienceEnteredS3/index.js.map +1 -1
  85. package/dist/destinations/liveramp-audiences/audienceEnteredSftp/index.js +57 -17
  86. package/dist/destinations/liveramp-audiences/audienceEnteredSftp/index.js.map +1 -1
  87. package/dist/destinations/memora/index.d.ts +1 -1
  88. package/dist/destinations/memora/index.js +1 -7
  89. package/dist/destinations/memora/index.js.map +1 -1
  90. package/dist/destinations/memora/upsertProfile/generated-types.d.ts +3 -3
  91. package/dist/destinations/memora/upsertProfile/index.js +159 -79
  92. package/dist/destinations/memora/upsertProfile/index.js.map +1 -1
  93. package/dist/destinations/optimizely-advanced-audience-targeting/syncAudience/index.js +4 -1
  94. package/dist/destinations/optimizely-advanced-audience-targeting/syncAudience/index.js.map +1 -1
  95. package/dist/destinations/optimizely-advanced-audience-targeting/syncAudience/optimizely-client.js +4 -3
  96. package/dist/destinations/optimizely-advanced-audience-targeting/syncAudience/optimizely-client.js.map +1 -1
  97. package/dist/destinations/qualified/dynamic-functions.d.ts +1 -1
  98. package/dist/destinations/qualified/dynamic-functions.js +1 -1
  99. package/dist/destinations/qualified/dynamic-functions.js.map +1 -1
  100. package/dist/destinations/qualified/index.js.map +1 -1
  101. package/dist/destinations/qualified/updateCompany/index.js.map +1 -1
  102. package/dist/destinations/qualified/upsertLead/index.js.map +1 -1
  103. package/dist/destinations/rokt-capi/index.js.map +1 -1
  104. package/dist/destinations/rokt-capi/send/constants.js +2 -2
  105. package/dist/destinations/rokt-capi/send/fields.js +3 -3
  106. package/dist/destinations/rokt-capi/send/fields.js.map +1 -1
  107. package/dist/destinations/rokt-capi/send/functions.js +19 -16
  108. package/dist/destinations/rokt-capi/send/functions.js.map +1 -1
  109. package/dist/destinations/rokt-capi/send/types.d.ts +8 -8
  110. package/dist/destinations/salesforce-marketing-cloud/_tests_/asyncDataExtension.test.d.ts +1 -0
  111. package/dist/destinations/salesforce-marketing-cloud/_tests_/asyncDataExtension.test.js +144 -0
  112. package/dist/destinations/salesforce-marketing-cloud/_tests_/asyncDataExtension.test.js.map +1 -0
  113. package/dist/destinations/salesforce-marketing-cloud/asyncDataExtension/generated-types.d.ts +59 -0
  114. package/dist/destinations/salesforce-marketing-cloud/asyncDataExtension/generated-types.js.map +1 -0
  115. package/dist/destinations/{braze/ecommerce → salesforce-marketing-cloud/asyncDataExtension}/index.d.ts +1 -1
  116. package/dist/destinations/salesforce-marketing-cloud/asyncDataExtension/index.js +76 -0
  117. package/dist/destinations/salesforce-marketing-cloud/asyncDataExtension/index.js.map +1 -0
  118. package/dist/destinations/salesforce-marketing-cloud/index.d.ts +1 -1
  119. package/dist/destinations/salesforce-marketing-cloud/index.js +3 -1
  120. package/dist/destinations/salesforce-marketing-cloud/index.js.map +1 -1
  121. package/dist/destinations/salesforce-marketing-cloud/sfmc-operations.d.ts +1 -0
  122. package/dist/destinations/salesforce-marketing-cloud/sfmc-operations.js +23 -0
  123. package/dist/destinations/salesforce-marketing-cloud/sfmc-operations.js.map +1 -1
  124. package/dist/destinations/snap-audiences/index.js.map +1 -1
  125. package/dist/destinations/snap-audiences/syncAudience/fields.js +2 -2
  126. package/dist/destinations/snap-audiences/syncAudience/fields.js.map +1 -1
  127. package/dist/destinations/snap-audiences/syncAudience/functions.js +27 -6
  128. package/dist/destinations/snap-audiences/syncAudience/functions.js.map +1 -1
  129. package/dist/destinations/snap-audiences/syncAudience/types.d.ts +1 -1
  130. package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/constants.js +11 -11
  131. package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/fields.js +9 -3
  132. package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/fields.js.map +1 -1
  133. package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/functions.js +2 -2
  134. package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/functions.js.map +1 -1
  135. package/dist/destinations/taguchi/syncUserProfile/utils.js.map +1 -1
  136. package/dist/destinations/the-trade-desk-crm/functions.d.ts +2 -2
  137. package/dist/destinations/the-trade-desk-crm/functions.js +74 -22
  138. package/dist/destinations/the-trade-desk-crm/functions.js.map +1 -1
  139. package/dist/destinations/the-trade-desk-crm/syncAudience/index.js +2 -2
  140. package/dist/destinations/the-trade-desk-crm/syncAudience/index.js.map +1 -1
  141. package/dist/destinations/tiktok-app-events/index.js +1 -1
  142. package/dist/destinations/tiktok-app-events/index.js.map +1 -1
  143. package/dist/destinations/tiktok-app-events/reportAppEvent/constants.js.map +1 -1
  144. package/dist/destinations/tiktok-app-events/reportAppEvent/fields/common_fields.js +29 -29
  145. package/dist/destinations/tiktok-app-events/reportAppEvent/fields/common_fields.js.map +1 -1
  146. package/dist/destinations/tiktok-app-events/reportAppEvent/utils.js +4 -3
  147. package/dist/destinations/tiktok-app-events/reportAppEvent/utils.js.map +1 -1
  148. package/dist/destinations/twilio-messaging/sendMessage/constants.d.ts +3 -3
  149. package/dist/destinations/twilio-messaging/sendMessage/constants.js +3 -3
  150. package/dist/destinations/twilio-messaging/sendMessage/constants.js.map +1 -1
  151. package/dist/destinations/twilio-messaging/sendMessage/fields.js.map +1 -1
  152. package/dist/destinations/twilio-messaging/sendMessage/utils.js.map +1 -1
  153. package/dist/destinations/yahoo-audiences/index.js +8 -4
  154. package/dist/destinations/yahoo-audiences/index.js.map +1 -1
  155. package/dist/destinations/yahoo-audiences/utils-rt.js +2 -2
  156. package/dist/destinations/yahoo-audiences/utils-rt.js.map +1 -1
  157. package/dist/destinations/yonoma/trackEvent/index.js +1 -1
  158. package/dist/destinations/yonoma/trackEvent/index.js.map +1 -1
  159. package/dist/destinations/yonoma/trackPageView/index.js +1 -1
  160. package/dist/destinations/yonoma/trackPageView/index.js.map +1 -1
  161. package/dist/destinations/yonoma/upsertContact/index.js +3 -3
  162. package/dist/destinations/yonoma/upsertContact/index.js.map +1 -1
  163. package/dist/destinations/zapier/index.js.map +1 -1
  164. package/dist/destinations/zapier/send/index.js.map +1 -1
  165. package/package.json +4 -4
  166. package/dist/destinations/braze/ecommerce/constants.d.ts +0 -7
  167. package/dist/destinations/braze/ecommerce/constants.js +0 -11
  168. package/dist/destinations/braze/ecommerce/constants.js.map +0 -1
  169. package/dist/destinations/braze/ecommerce/fields.d.ts +0 -24
  170. package/dist/destinations/braze/ecommerce/fields.js +0 -523
  171. package/dist/destinations/braze/ecommerce/fields.js.map +0 -1
  172. package/dist/destinations/braze/ecommerce/functions.d.ts +0 -11
  173. package/dist/destinations/braze/ecommerce/functions.js +0 -261
  174. package/dist/destinations/braze/ecommerce/functions.js.map +0 -1
  175. package/dist/destinations/braze/ecommerce/generated-types.d.ts +0 -39
  176. package/dist/destinations/braze/ecommerce/generated-types.js.map +0 -1
  177. package/dist/destinations/braze/ecommerce/index.js +0 -29
  178. package/dist/destinations/braze/ecommerce/index.js.map +0 -1
  179. package/dist/destinations/braze/ecommerce/types.d.ts +0 -117
  180. package/dist/destinations/braze/ecommerce/types.js +0 -3
  181. package/dist/destinations/braze/ecommerce/types.js.map +0 -1
  182. package/dist/destinations/braze/ecommerceSingleProduct/generated-types.d.ts +0 -37
  183. package/dist/destinations/braze/ecommerceSingleProduct/generated-types.js +0 -3
  184. package/dist/destinations/braze/ecommerceSingleProduct/generated-types.js.map +0 -1
  185. package/dist/destinations/braze/ecommerceSingleProduct/index.d.ts +0 -5
  186. package/dist/destinations/braze/ecommerceSingleProduct/index.js +0 -29
  187. package/dist/destinations/braze/ecommerceSingleProduct/index.js.map +0 -1
  188. /package/dist/destinations/{braze/ecommerce → salesforce-marketing-cloud/asyncDataExtension}/generated-types.js +0 -0
@@ -117,29 +117,71 @@ async function processData(input, subscriptionMetadata) {
117
117
  if (input.payloads[0].s3_aws_bucket_path && !(0, s3_1.isValidS3Path)(input.payloads[0].s3_aws_bucket_path)) {
118
118
  throw new actions_core_1.PayloadValidationError(`Invalid S3 bucket path. It must be a valid S3 object key, avoid leading/trailing slashes and forbidden characters (e.g., \\ { } ^ [ ] % \` " < > # | ~). Use a relative path like "folder1/folder2".`);
119
119
  }
120
+ const multiStatusResponse = new actions_core_1.MultiStatusResponse();
121
+ input.payloads.forEach((_payload, index) => {
122
+ multiStatusResponse.setSuccessResponseAtIndex(index, {
123
+ status: 200,
124
+ sent: JSON.parse(JSON.stringify(_payload)),
125
+ body: 'Successfully uploaded to S3'
126
+ });
127
+ });
120
128
  const { filename, fileContents } = (0, operations_1.generateFile)(input.payloads);
121
129
  if (input.features && input.features[properties_1.LIVERAMP_LEGACY_FLOW_FLAG_NAME] === true) {
122
- return (0, s3_1.uploadS3)(input.payloads[0], filename, fileContents, input.request);
130
+ try {
131
+ await (0, s3_1.uploadS3)(input.payloads[0], filename, fileContents, input.request);
132
+ return multiStatusResponse;
133
+ }
134
+ catch (error) {
135
+ input.payloads.forEach((_payload, index) => {
136
+ if (multiStatusResponse.isSuccessResponseAtIndex(index)) {
137
+ multiStatusResponse.setErrorResponseAtIndex(index, {
138
+ status: 500,
139
+ errortype: 'RETRYABLE_ERROR',
140
+ errormessage: `Failed to upload to LiveRamp Endpoint: ${error.message}`
141
+ });
142
+ }
143
+ });
144
+ return multiStatusResponse;
145
+ }
123
146
  }
124
147
  else {
125
148
  const shouldEnableGzipCompression = input.features && input.features[properties_1.LIVERAMP_ENABLE_COMPRESSION_FLAG_NAME] === true;
126
- return (0, awsClient_1.sendEventToAWS)({
127
- audienceComputeId: input.rawData?.[0].context?.personas?.computation_id,
128
- uploadType: 's3',
129
- filename: filename,
130
- destinationInstanceID: subscriptionMetadata?.destinationConfigId,
131
- subscriptionId: subscriptionMetadata?.actionConfigId,
132
- fileContents,
133
- rowCount: input.payloads.length,
134
- gzipCompressFile: shouldEnableGzipCompression,
135
- s3Info: {
136
- s3BucketName: input.payloads[0].s3_aws_bucket_name,
137
- s3Region: input.payloads[0].s3_aws_region,
138
- s3AccessKeyId: input.payloads[0].s3_aws_access_key,
139
- s3SecretAccessKey: input.payloads[0].s3_aws_secret_key,
140
- s3BucketPath: input.payloads[0].s3_aws_bucket_path
149
+ try {
150
+ await (0, awsClient_1.sendEventToAWS)({
151
+ audienceComputeId: input.rawData?.[0].context?.personas?.computation_id,
152
+ uploadType: 's3',
153
+ filename: filename,
154
+ destinationInstanceID: subscriptionMetadata?.destinationConfigId,
155
+ subscriptionId: subscriptionMetadata?.actionConfigId,
156
+ fileContents,
157
+ rowCount: input.payloads.length,
158
+ gzipCompressFile: shouldEnableGzipCompression,
159
+ s3Info: {
160
+ s3BucketName: input.payloads[0].s3_aws_bucket_name,
161
+ s3Region: input.payloads[0].s3_aws_region,
162
+ s3AccessKeyId: input.payloads[0].s3_aws_access_key,
163
+ s3SecretAccessKey: input.payloads[0].s3_aws_secret_key,
164
+ s3BucketPath: input.payloads[0].s3_aws_bucket_path
165
+ }
166
+ });
167
+ return multiStatusResponse;
168
+ }
169
+ catch (error) {
170
+ let httpStatusCode = 400;
171
+ if (error?.$metadata?.httpStatusCode) {
172
+ httpStatusCode = error.$metadata.httpStatusCode;
141
173
  }
142
- });
174
+ for (let index = 0; index < input.payloads.length; index++) {
175
+ if (multiStatusResponse.isSuccessResponseAtIndex(index)) {
176
+ multiStatusResponse.setErrorResponseAtIndex(index, {
177
+ status: httpStatusCode,
178
+ errortype: 'RETRYABLE_ERROR',
179
+ errormessage: `Failed to upload to LiveRamp Endpoint: ${error.message}`
180
+ });
181
+ }
182
+ }
183
+ return multiStatusResponse;
184
+ }
143
185
  }
144
186
  }
145
187
  exports.default = action;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/liveramp-audiences/audienceEnteredS3/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/liveramp-audiences/audienceEnteredS3/index.ts"],"names":[],"mappings":"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"}
@@ -87,8 +87,8 @@ const action = {
87
87
  rawData: rawData ? [rawData] : []
88
88
  }, subscriptionMetadata);
89
89
  },
90
- performBatch: (request, { payload, features, rawData, subscriptionMetadata }) => {
91
- return processData({
90
+ performBatch: async (request, { payload, features, rawData, subscriptionMetadata }) => {
91
+ return await processData({
92
92
  request,
93
93
  payloads: payload,
94
94
  features,
@@ -100,29 +100,69 @@ async function processData(input, subscriptionMetadata) {
100
100
  if (input.payloads.length < properties_1.LIVERAMP_MIN_RECORD_COUNT) {
101
101
  throw new actions_core_1.PayloadValidationError(`received payload count below LiveRamp's ingestion limits. expected: >=${properties_1.LIVERAMP_MIN_RECORD_COUNT} actual: ${input.payloads.length}`);
102
102
  }
103
+ const multistatus = new actions_core_1.MultiStatusResponse();
104
+ for (let index = 0; index < input.payloads.length; index++) {
105
+ multistatus.setSuccessResponseAtIndex(index, {
106
+ status: 200,
107
+ sent: input.payloads[index],
108
+ body: 'Processing payload'
109
+ });
110
+ }
103
111
  (0, sftp_1.validateSFTP)(input.payloads[0]);
104
112
  const { filename, fileContents } = (0, operations_1.generateFile)(input.payloads);
105
113
  if (input.features && input.features[properties_1.LIVERAMP_LEGACY_FLOW_FLAG_NAME] === true) {
106
114
  const sftpClient = new sftp_1.Client();
107
- return (0, sftp_1.uploadSFTP)(sftpClient, input.payloads[0], filename, fileContents);
115
+ try {
116
+ await (0, sftp_1.uploadSFTP)(sftpClient, input.payloads[0], filename, fileContents);
117
+ }
118
+ catch (error) {
119
+ for (let index = 0; index < input.payloads.length; index++) {
120
+ if (multistatus.isErrorResponseAtIndex(index)) {
121
+ continue;
122
+ }
123
+ multistatus.setErrorResponseAtIndex(index, {
124
+ status: 500,
125
+ errormessage: `Failed to upload file to SFTP: ${error.message}`
126
+ });
127
+ }
128
+ }
129
+ return multistatus;
108
130
  }
109
131
  else {
110
132
  const shouldEnableCompression = input.features && input.features[properties_1.LIVERAMP_ENABLE_COMPRESSION_FLAG_NAME] === true;
111
- return (0, awsClient_1.sendEventToAWS)({
112
- audienceComputeId: input.rawData?.[0].context?.personas?.computation_id,
113
- uploadType: 'sftp',
114
- filename,
115
- fileContents,
116
- rowCount: input.payloads.length,
117
- destinationInstanceID: subscriptionMetadata?.destinationConfigId,
118
- subscriptionId: subscriptionMetadata?.actionConfigId,
119
- gzipCompressFile: shouldEnableCompression,
120
- sftpInfo: {
121
- sftpUsername: input.payloads[0].sftp_username,
122
- sftpPassword: input.payloads[0].sftp_password,
123
- sftpFolderPath: input.payloads[0].sftp_folder_path
133
+ try {
134
+ await (0, awsClient_1.sendEventToAWS)({
135
+ audienceComputeId: input.rawData?.[0].context?.personas?.computation_id,
136
+ uploadType: 'sftp',
137
+ filename,
138
+ fileContents,
139
+ rowCount: input.payloads.length,
140
+ destinationInstanceID: subscriptionMetadata?.destinationConfigId,
141
+ subscriptionId: subscriptionMetadata?.actionConfigId,
142
+ gzipCompressFile: shouldEnableCompression,
143
+ sftpInfo: {
144
+ sftpUsername: input.payloads[0].sftp_username,
145
+ sftpPassword: input.payloads[0].sftp_password,
146
+ sftpFolderPath: input.payloads[0].sftp_folder_path
147
+ }
148
+ });
149
+ }
150
+ catch (error) {
151
+ let httpStatusCode = 400;
152
+ if (error?.$metadata?.httpStatusCode) {
153
+ httpStatusCode = error.$metadata.httpStatusCode;
124
154
  }
125
- });
155
+ for (let index = 0; index < input.payloads.length; index++) {
156
+ if (multistatus.isErrorResponseAtIndex(index)) {
157
+ continue;
158
+ }
159
+ multistatus.setErrorResponseAtIndex(index, {
160
+ status: httpStatusCode,
161
+ errormessage: `Failed to process upload via AWS: ${error.message}`
162
+ });
163
+ }
164
+ }
165
+ return multistatus;
126
166
  }
127
167
  }
128
168
  exports.default = action;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/liveramp-audiences/audienceEnteredSftp/index.ts"],"names":[],"mappings":";;AAAA,wDAAgF;AAChF,iCAAuE;AACvE,8CAA4C;AAC5C,4CAA6C;AAC7C,8CAIsB;AAOtB,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,yBAAyB;IAChC,WAAW,EAAE,iFAAiF;IAC9F,mBAAmB,EAAE,4BAA4B;IACjD,MAAM,EAAE;QACN,aAAa,EAAE;YACb,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,qEAAqE;YAClF,IAAI,EAAE,QAAQ;SACf;QACD,aAAa,EAAE;YACb,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,qEAAqE;YAClF,IAAI,EAAE,UAAU;SACjB;QACD,gBAAgB,EAAE;YAChB,KAAK,EAAE,aAAa;YACpB,WAAW,EACT,2HAA2H;YAC7H,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE;YACrC,MAAM,EAAE,eAAe;SACxB;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EACT,iRAAiR;YACnR,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;SACjC;QACD,eAAe,EAAE;YACf,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,mEAAmE;YAChF,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,eAAe;SACjC;QACD,wBAAwB,EAAE;YACxB,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,0KAA0K;YACvL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,eAAe;SACjC;QACD,SAAS,EAAE;YACT,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,0DAA0D;YACvE,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,GAAG;SACb;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,8IAA8I;YAC3J,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,EAAE,WAAW,EAAE,qCAAqC,EAAE;SAChE;QACD,eAAe,EAAE;YACf,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,uFAAuF;YACpG,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,IAAI;SACd;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,qFAAqF;YAClG,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,KAAK;SACf;KACF;IACD,OAAO,EAAE,KAAK,EACZ,OAAO,EACP,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAA+C,EACjG,EAAE;QACF,OAAO,WAAW,CAChB;YACE,OAAO;YACP,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;SAClC,EACD,oBAAoB,CACrB,CAAA;IACH,CAAC;IACD,YAAY,EAAE,CACZ,OAAO,EACP,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAmD,EACrG,EAAE;QACF,OAAO,WAAW,CAChB;YACE,OAAO;YACP,QAAQ,EAAE,OAAO;YACjB,QAAQ;YACR,OAAO;SACR,EACD,oBAAoB,CACrB,CAAA;IACH,CAAC;CACF,CAAA;AAED,KAAK,UAAU,WAAW,CAAC,KAAgC,EAAE,oBAA2C;IACtG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,sCAAyB,EAAE,CAAC;QACtD,MAAM,IAAI,qCAAsB,CAC9B,yEAAyE,sCAAyB,YAAY,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CACtI,CAAA;IACH,CAAC;IAED,IAAA,mBAAY,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAA,yBAAY,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE/D,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,2CAA8B,CAAC,KAAK,IAAI,EAAE,CAAC;QAI9E,MAAM,UAAU,GAAG,IAAI,aAAU,EAAE,CAAA;QACnC,OAAO,IAAA,iBAAU,EAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC1E,CAAC;SAAM,CAAC;QAIN,MAAM,uBAAuB,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,kDAAqC,CAAC,KAAK,IAAI,CAAA;QAEhH,OAAO,IAAA,0BAAc,EAAC;YACpB,iBAAiB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc;YACvE,UAAU,EAAE,MAAM;YAClB,QAAQ;YACR,YAAY;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;YAC/B,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB;YAChE,cAAc,EAAE,oBAAoB,EAAE,cAAc;YACpD,gBAAgB,EAAE,uBAAuB;YACzC,QAAQ,EAAE;gBACR,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa;gBAC7C,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa;gBAC7C,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB;aACnD;SACF,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,kBAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/liveramp-audiences/audienceEnteredSftp/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { DestinationDefinition } from '@segment/actions-core';
2
2
  import type { Settings } from './generated-types';
3
3
  export declare const API_VERSION = "v1";
4
- export declare const BASE_URL = "https://memory.dev.twilio.com";
4
+ export declare const BASE_URL = "https://memory.twilio.com";
5
5
  declare const destination: DestinationDefinition<Settings>;
6
6
  export default destination;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BASE_URL = exports.API_VERSION = void 0;
7
7
  const upsertProfile_1 = __importDefault(require("./upsertProfile"));
8
8
  exports.API_VERSION = 'v1';
9
- exports.BASE_URL = 'https://memory.dev.twilio.com';
9
+ exports.BASE_URL = 'https://memory.twilio.com';
10
10
  const destination = {
11
11
  name: 'Memora',
12
12
  slug: 'actions-memora',
@@ -42,12 +42,6 @@ const destination = {
42
42
  });
43
43
  }
44
44
  },
45
- extendRequest({ settings }) {
46
- return {
47
- username: settings.username,
48
- password: settings.password
49
- };
50
- },
51
45
  actions: {
52
46
  upsertProfile: upsertProfile_1.default
53
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/memora/index.ts"],"names":[],"mappings":";;;;;;AAGA,oEAA2C;AAE9B,QAAA,WAAW,GAAG,IAAI,CAAA;AAClB,QAAA,QAAQ,GAAG,+BAA+B,CAAA;AAEvD,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,OAAO;IAEb,cAAc,EAAE;QACd,MAAM,EAAE,OAAO;QACf,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,kCAAkC;gBAC/C,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,qCAAqC;gBAClD,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;aACf;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,mBAAmB;gBAC1B,WAAW,EAAE,4DAA4D;gBACzE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC5C,OAAO,OAAO,CAAC,GAAG,gBAAQ,IAAI,mBAAW,iCAAiC,EAAE;gBAC1E,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;iBAChF;aACF,CAAC,CAAA;QACJ,CAAC;KACF;IAED,aAAa,CAAC,EAAE,QAAQ,EAAE;QACxB,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAA;IACH,CAAC;IAED,OAAO,EAAE;QACP,aAAa,EAAb,uBAAa;KACd;CACF,CAAA;AAED,kBAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/memora/index.ts"],"names":[],"mappings":";;;;;;AAGA,oEAA2C;AAE9B,QAAA,WAAW,GAAG,IAAI,CAAA;AAClB,QAAA,QAAQ,GAAG,2BAA2B,CAAA;AAEnD,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,OAAO;IAEb,cAAc,EAAE;QACd,MAAM,EAAE,OAAO;QACf,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,kCAAkC;gBAC/C,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,qCAAqC;gBAClD,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;aACf;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,mBAAmB;gBAC1B,WAAW,EAAE,4DAA4D;gBACzE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC5C,OAAO,OAAO,CAAC,GAAG,gBAAQ,IAAI,mBAAW,iCAAiC,EAAE;gBAC1E,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;iBAChF;aACF,CAAC,CAAA;QACJ,CAAC;KACF;IAED,OAAO,EAAE;QACP,aAAa,EAAb,uBAAa;KACd;CACF,CAAA;AAED,kBAAe,WAAW,CAAA"}
@@ -2,11 +2,11 @@ export interface Payload {
2
2
  enable_batching?: boolean;
3
3
  batch_size?: number;
4
4
  memora_store: string;
5
- contact?: {
5
+ contact_identifiers: {
6
6
  email?: string;
7
- firstName?: string;
8
- lastName?: string;
9
7
  phone?: string;
8
+ };
9
+ contact_traits?: {
10
10
  [k: string]: unknown;
11
11
  };
12
12
  }
@@ -4,19 +4,19 @@ const actions_core_1 = require("@segment/actions-core");
4
4
  const index_1 = require("../index");
5
5
  const action = {
6
6
  title: 'Upsert Profile',
7
- description: 'Create or update Memora profiles using the bulk upsert API. If a profile already exists, its traits are merged (new keys added, existing keys overwritten). Supports batching up to 1000 profiles.',
7
+ description: 'Create or update Memora profiles by importing a CSV file. Profiles are uploaded via a pre-signed URL and processed asynchronously. If a profile already exists, its traits are merged (new keys added, existing keys overwritten).',
8
8
  defaultSubscription: 'type = "identify"',
9
9
  fields: {
10
10
  enable_batching: {
11
11
  label: 'Enable Batching',
12
- description: 'Enable batching of requests to Memora. Batches can contain up to 1000 profiles.',
12
+ description: 'Enable batching of requests to Memora. Batches are uploaded as CSV files.',
13
13
  type: 'boolean',
14
14
  default: true,
15
15
  unsafe_hidden: true
16
16
  },
17
17
  batch_size: {
18
18
  label: 'Batch Size',
19
- description: 'Maximum number of profiles to include in each batch. Actual batch sizes may be lower.',
19
+ description: 'Maximum number of profiles to include in each CSV import. Actual batch sizes may be lower.',
20
20
  type: 'number',
21
21
  default: 1000,
22
22
  unsafe_hidden: true
@@ -28,12 +28,12 @@ const action = {
28
28
  required: true,
29
29
  dynamic: true
30
30
  },
31
- contact: {
32
- label: 'Contact Information',
33
- description: 'Contact information object containing email, firstName, lastName, and phone fields that will be placed in the Contact trait group in the Memora API call.',
31
+ contact_identifiers: {
32
+ label: 'Contact Identifiers',
33
+ description: 'Contact identifiers (email and/or phone). At least one identifier is required.',
34
34
  type: 'object',
35
- required: false,
36
- additionalProperties: true,
35
+ required: true,
36
+ additionalProperties: false,
37
37
  properties: {
38
38
  email: {
39
39
  label: 'Email',
@@ -41,16 +41,6 @@ const action = {
41
41
  type: 'string',
42
42
  format: 'email'
43
43
  },
44
- firstName: {
45
- label: 'First Name',
46
- description: 'User first name',
47
- type: 'string'
48
- },
49
- lastName: {
50
- label: 'Last Name',
51
- description: 'User last name',
52
- type: 'string'
53
- },
54
44
  phone: {
55
45
  label: 'Phone',
56
46
  description: 'User phone number',
@@ -59,95 +49,183 @@ const action = {
59
49
  },
60
50
  default: {
61
51
  email: { '@path': '$.properties.email' },
62
- firstName: { '@path': '$.properties.first_name' },
63
- lastName: { '@path': '$.properties.last_name' },
64
- phone: {
65
- '@path': '$.properties.phone'
66
- }
52
+ phone: { '@path': '$.properties.phone' }
67
53
  }
54
+ },
55
+ contact_traits: {
56
+ label: 'Other Contact Traits',
57
+ description: 'Additional contact traits for the profile. These fields are dynamically loaded from the selected Memora Store.',
58
+ type: 'object',
59
+ required: false,
60
+ additionalProperties: true,
61
+ dynamic: true
68
62
  }
69
63
  },
70
64
  dynamicFields: {
71
65
  memora_store: async (request, { settings }) => {
72
66
  return fetchMemoraStores(request, settings);
67
+ },
68
+ contact_traits: {
69
+ __keys__: async (request, { settings, payload }) => {
70
+ if (!payload.memora_store) {
71
+ return { choices: [], error: { message: 'Please select a Memora Store first', code: 'STORE_REQUIRED' } };
72
+ }
73
+ return fetchContactTraits(request, settings, payload.memora_store);
74
+ }
73
75
  }
74
76
  },
75
- perform: async (request, { payload, settings }) => {
76
- return upsertProfiles(request, [payload], settings);
77
+ perform: async (request, { payload, settings, logger }) => {
78
+ return upsertProfiles(request, [payload], settings, logger);
77
79
  },
78
- performBatch: async (request, { payload: payloads, settings }) => {
79
- return upsertProfiles(request, payloads, settings);
80
+ performBatch: async (request, { payload: payloads, settings, logger }) => {
81
+ return upsertProfiles(request, payloads, settings, logger);
80
82
  }
81
83
  };
82
- async function upsertProfiles(request, payloads, settings) {
84
+ async function upsertProfiles(request, payloads, settings, logger) {
83
85
  const storeId = payloads[0]?.memora_store;
84
86
  if (!payloads || payloads.length === 0) {
85
- throw new actions_core_1.IntegrationError('No profiles provided for batch sync', 'EMPTY_BATCH', 400);
87
+ throw new actions_core_1.IntegrationError('No profiles provided for import', 'EMPTY_BATCH', 400);
86
88
  }
87
- const profiles = payloads.map((payload, index) => {
88
- const traitGroups = buildTraitGroups(payload);
89
- if (Object.keys(traitGroups).length === 0) {
90
- throw new actions_core_1.IntegrationError(`Profile at index ${index} must contain at least one trait group or contact field`, 'EMPTY_PROFILE', 400);
89
+ const allFields = new Set();
90
+ payloads.forEach((payload, index) => {
91
+ const identifiers = payload.contact_identifiers || {};
92
+ if (!identifiers.email && !identifiers.phone) {
93
+ throw new actions_core_1.IntegrationError(`Profile at index ${index} must contain at least one identifier (email or phone)`, 'MISSING_IDENTIFIER', 400);
94
+ }
95
+ if (identifiers.email)
96
+ allFields.add('email');
97
+ if (identifiers.phone)
98
+ allFields.add('phone');
99
+ if (payload.contact_traits && typeof payload.contact_traits === 'object') {
100
+ const traits = payload.contact_traits;
101
+ Object.keys(traits).forEach((key) => {
102
+ if (traits[key] !== undefined) {
103
+ allFields.add(key);
104
+ }
105
+ });
91
106
  }
92
- return { traits: traitGroups };
93
107
  });
108
+ if (allFields.size === 0) {
109
+ throw new actions_core_1.IntegrationError('No profile fields found for import', 'EMPTY_PROFILE', 400);
110
+ }
111
+ const { csv, columnMappings } = convertToCSV(payloads, Array.from(allFields));
112
+ const csvBuffer = Buffer.from(csv, 'utf-8');
113
+ const filename = 'memora-segment-import.csv';
114
+ let importId;
115
+ let uploadUrl;
94
116
  try {
95
- const response = await request(`${index_1.BASE_URL}/${index_1.API_VERSION}/Stores/${storeId}/Profiles/Bulk`, {
96
- method: 'PUT',
117
+ const importResponse = await request(`${index_1.BASE_URL}/${index_1.API_VERSION}/Stores/${storeId}/Profiles/Imports`, {
118
+ method: 'POST',
97
119
  headers: {
98
120
  'Content-Type': 'application/json',
99
121
  ...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
100
122
  },
123
+ username: settings.username,
124
+ password: settings.password,
101
125
  json: {
102
- profiles
126
+ filename,
127
+ fileSize: csvBuffer.length,
128
+ columnMappings
103
129
  }
104
130
  });
105
- if (response.status !== 202) {
106
- throw new actions_core_1.IntegrationError(`Unexpected response status: ${response.status}`, 'API_ERROR', response.status);
107
- }
108
- return response;
131
+ importId = importResponse.data.importId;
132
+ uploadUrl = importResponse.data.url;
133
+ logger?.info?.(`Memora import initiated: ${importId} (${payloads.length} profiles)`);
109
134
  }
110
135
  catch (error) {
111
- if (error instanceof actions_core_1.IntegrationError) {
112
- throw error;
113
- }
114
- handleMemoraApiError(error);
136
+ logger?.error?.(`Error initiating Memora import: ${error instanceof Error ? error.message : String(error)}`);
137
+ throw error;
138
+ }
139
+ try {
140
+ await request(uploadUrl, {
141
+ method: 'PUT',
142
+ headers: {
143
+ 'Content-Type': 'text/csv'
144
+ },
145
+ body: csvBuffer
146
+ });
147
+ logger?.info?.(`CSV uploaded successfully to Memora (importId: ${importId}, ${payloads.length} profiles)`);
148
+ return {
149
+ data: {
150
+ importId,
151
+ profileCount: payloads.length,
152
+ success: true
153
+ }
154
+ };
155
+ }
156
+ catch (error) {
157
+ logger?.error?.(`Error uploading CSV to Memora (importId: ${importId}): ${error instanceof Error ? error.message : String(error)}`);
158
+ throw error;
115
159
  }
116
160
  }
117
- function buildTraitGroups(payload) {
118
- const traitGroups = {};
119
- if (payload.contact && typeof payload.contact === 'object') {
120
- const contact = payload.contact;
121
- if (Object.keys(contact).length > 0) {
122
- traitGroups.Contact = contact;
161
+ function convertToCSV(payloads, fields) {
162
+ const escapeCSVValue = (value) => {
163
+ if (value.includes(',') || value.includes('"') || value.includes('\n')) {
164
+ return `"${value.replace(/"/g, '""')}"`;
123
165
  }
124
- }
125
- return traitGroups;
166
+ return value;
167
+ };
168
+ const header = fields.map(escapeCSVValue).join(',');
169
+ const rows = payloads.map((payload) => {
170
+ return fields
171
+ .map((field) => {
172
+ let value;
173
+ if (field === 'email' || field === 'phone') {
174
+ const identifiers = payload.contact_identifiers;
175
+ value = identifiers?.[field];
176
+ }
177
+ else {
178
+ const traits = payload.contact_traits;
179
+ value = traits?.[field];
180
+ }
181
+ if (value === undefined || value === null) {
182
+ return '';
183
+ }
184
+ const stringValue = String(value);
185
+ return escapeCSVValue(stringValue);
186
+ })
187
+ .join(',');
188
+ });
189
+ const csv = [header, ...rows].join('\n');
190
+ const columnMappings = fields.map((field) => ({
191
+ columnName: field,
192
+ traitGroup: 'Contact',
193
+ traitName: field
194
+ }));
195
+ return { csv, columnMappings };
126
196
  }
127
- function handleMemoraApiError(error) {
128
- const httpError = error;
129
- if (httpError.response) {
130
- const status = httpError.response.status;
131
- const data = httpError.response.data;
132
- switch (status) {
133
- case 400:
134
- throw new actions_core_1.IntegrationError(data?.message || 'Bad Request - Invalid request data', 'INVALID_REQUEST_DATA', 400);
135
- case 404:
136
- throw new actions_core_1.IntegrationError(data?.message || 'Profile or service not found', 'SERVICE_NOT_FOUND', 404);
137
- case 429: {
138
- const retryAfter = httpError.response.headers?.['retry-after'];
139
- const message = retryAfter ? `Rate limit exceeded. Retry after ${retryAfter} seconds` : 'Rate limit exceeded';
140
- throw new actions_core_1.RetryableError(data?.message || message);
197
+ async function fetchContactTraits(request, settings, storeId) {
198
+ try {
199
+ const response = await request(`${index_1.BASE_URL}/${index_1.API_VERSION}/ControlPlane/Stores/${storeId}/TraitGroups/Contact?includeTraits=true&pageSize=100`, {
200
+ method: 'GET',
201
+ headers: {
202
+ ...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
203
+ },
204
+ username: settings.username,
205
+ password: settings.password,
206
+ skipResponseCloning: true
207
+ });
208
+ const traitsObj = response?.data?.traitGroup?.traits || {};
209
+ const choices = Object.entries(traitsObj)
210
+ .filter(([_, trait]) => trait.idTypePromotion !== 'email' && trait.idTypePromotion !== 'phone')
211
+ .map(([traitName, trait]) => ({
212
+ label: trait.displayName || traitName,
213
+ value: traitName,
214
+ description: trait.description || `${trait.displayName} (${trait.dataType})`
215
+ }));
216
+ return {
217
+ choices
218
+ };
219
+ }
220
+ catch (error) {
221
+ return {
222
+ choices: [],
223
+ error: {
224
+ message: 'Unable to fetch contact traits. You can still manually enter field names.',
225
+ code: 'FETCH_ERROR'
141
226
  }
142
- case 500:
143
- throw new actions_core_1.RetryableError(data?.message || 'Internal server error');
144
- case 503:
145
- throw new actions_core_1.RetryableError(data?.message || 'Service unavailable');
146
- default:
147
- throw new actions_core_1.IntegrationError(data?.message || `HTTP ${status} error`, 'API_ERROR', status);
148
- }
227
+ };
149
228
  }
150
- throw new actions_core_1.RetryableError(httpError.message || 'Network error occurred');
151
229
  }
152
230
  async function fetchMemoraStores(request, settings) {
153
231
  try {
@@ -156,12 +234,14 @@ async function fetchMemoraStores(request, settings) {
156
234
  headers: {
157
235
  ...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
158
236
  },
237
+ username: settings.username,
238
+ password: settings.password,
159
239
  skipResponseCloning: true
160
240
  });
161
- const services = response?.data?.services || [];
162
- const choices = services.map((serviceId) => ({
163
- label: serviceId,
164
- value: serviceId
241
+ const stores = response?.data?.stores || [];
242
+ const choices = stores.map((storeId) => ({
243
+ label: storeId,
244
+ value: storeId
165
245
  }));
166
246
  return {
167
247
  choices