@segment/action-destinations 3.109.0 → 3.110.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 (52) hide show
  1. package/dist/destinations/adobe-target/adobeTarget_operations.js +3 -1
  2. package/dist/destinations/adobe-target/adobeTarget_operations.js.map +1 -1
  3. package/dist/destinations/adobe-target/generated-types.d.ts +1 -0
  4. package/dist/destinations/adobe-target/index.js +15 -0
  5. package/dist/destinations/adobe-target/index.js.map +1 -1
  6. package/dist/destinations/google-enhanced-conversions/functions.d.ts +6 -0
  7. package/dist/destinations/google-enhanced-conversions/functions.js +54 -0
  8. package/dist/destinations/google-enhanced-conversions/functions.js.map +1 -0
  9. package/dist/destinations/google-enhanced-conversions/generated-types.d.ts +2 -1
  10. package/dist/destinations/google-enhanced-conversions/index.js +14 -7
  11. package/dist/destinations/google-enhanced-conversions/index.js.map +1 -1
  12. package/dist/destinations/google-enhanced-conversions/postConversion/index.js +7 -1
  13. package/dist/destinations/google-enhanced-conversions/postConversion/index.js.map +1 -1
  14. package/dist/destinations/google-enhanced-conversions/types.d.ts +23 -0
  15. package/dist/destinations/google-enhanced-conversions/types.js +5 -0
  16. package/dist/destinations/google-enhanced-conversions/types.js.map +1 -0
  17. package/dist/destinations/google-enhanced-conversions/uploadCallConversion/generated-types.d.ts +11 -0
  18. package/dist/destinations/google-enhanced-conversions/uploadCallConversion/generated-types.js +3 -0
  19. package/dist/destinations/google-enhanced-conversions/uploadCallConversion/generated-types.js.map +1 -0
  20. package/dist/destinations/google-enhanced-conversions/uploadCallConversion/index.d.ts +5 -0
  21. package/dist/destinations/google-enhanced-conversions/uploadCallConversion/index.js +92 -0
  22. package/dist/destinations/google-enhanced-conversions/uploadCallConversion/index.js.map +1 -0
  23. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/generated-types.d.ts +25 -0
  24. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/generated-types.js +3 -0
  25. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/generated-types.js.map +1 -0
  26. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.d.ts +5 -0
  27. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.js +229 -0
  28. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.js.map +1 -0
  29. package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/generated-types.d.ts +20 -0
  30. package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/generated-types.js +3 -0
  31. package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/generated-types.js.map +1 -0
  32. package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/index.d.ts +5 -0
  33. package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/index.js +286 -0
  34. package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/index.js.map +1 -0
  35. package/dist/destinations/hubspot/createCustomObjectRecord/generated-types.d.ts +6 -0
  36. package/dist/destinations/hubspot/createCustomObjectRecord/generated-types.js +3 -0
  37. package/dist/destinations/hubspot/createCustomObjectRecord/generated-types.js.map +1 -0
  38. package/dist/destinations/hubspot/createCustomObjectRecord/index.d.ts +5 -0
  39. package/dist/destinations/hubspot/createCustomObjectRecord/index.js +38 -0
  40. package/dist/destinations/hubspot/createCustomObjectRecord/index.js.map +1 -0
  41. package/dist/destinations/hubspot/generated-types.d.ts +2 -0
  42. package/dist/destinations/hubspot/generated-types.js +3 -0
  43. package/dist/destinations/hubspot/generated-types.js.map +1 -0
  44. package/dist/destinations/hubspot/index.d.ts +4 -0
  45. package/dist/destinations/hubspot/index.js +42 -0
  46. package/dist/destinations/hubspot/index.js.map +1 -0
  47. package/dist/destinations/hubspot/testHelper.d.ts +7 -0
  48. package/dist/destinations/hubspot/testHelper.js +24 -0
  49. package/dist/destinations/hubspot/testHelper.js.map +1 -0
  50. package/dist/destinations/index.js +1 -0
  51. package/dist/destinations/index.js.map +1 -1
  52. package/package.json +4 -4
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const actions_core_1 = require("@segment/actions-core");
4
+ const types_1 = require("../types");
5
+ const functions_1 = require("../functions");
6
+ const action = {
7
+ title: 'Upload Click Conversion',
8
+ description: 'Upload an offline click conversion to the Google Ads API.',
9
+ fields: {
10
+ conversion_action: {
11
+ label: 'Conversion Action ID',
12
+ description: 'The ID of the conversion action associated with this conversion. To find the Conversion Action ID, click on your conversion in Google Ads and get the value for `ctId` in the URL. For example, if the URL is `https://ads.google.com/aw/conversions/detail?ocid=00000000&ctId=570000000`, your Conversion Action ID is `570000000`.',
13
+ type: 'string',
14
+ required: true
15
+ },
16
+ gclid: {
17
+ label: 'GCLID',
18
+ description: 'The Google click ID (gclid) associated with this conversion.',
19
+ type: 'string'
20
+ },
21
+ gbraid: {
22
+ label: 'GBRAID',
23
+ description: 'The click identifier for clicks associated with app conversions and originating from iOS devices starting with iOS14.',
24
+ type: 'string'
25
+ },
26
+ wbraid: {
27
+ label: 'WBRAID',
28
+ description: 'The click identifier for clicks associated with web conversions and originating from iOS devices starting with iOS14.',
29
+ type: 'string'
30
+ },
31
+ conversion_timestamp: {
32
+ label: 'Conversion Timestamp',
33
+ description: 'The date time at which the conversion occurred. Must be after the click time. The timezone must be specified. The format is "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".',
34
+ type: 'string',
35
+ required: true,
36
+ default: {
37
+ '@path': '$.timestamp'
38
+ }
39
+ },
40
+ email_address: {
41
+ label: 'Email Address',
42
+ description: 'Email address of the individual who triggered the conversion event. Segment will hash this value before sending to Google.',
43
+ type: 'string',
44
+ format: 'email',
45
+ default: {
46
+ '@if': {
47
+ exists: { '@path': '$.properties.email' },
48
+ then: { '@path': '$.properties.email' },
49
+ else: { '@path': '$.context.traits.email' }
50
+ }
51
+ }
52
+ },
53
+ phone_number: {
54
+ label: 'Phone Number',
55
+ description: 'Phone number of the individual who triggered the conversion event, in E.164 standard format, e.g. +14150000000. Segment will hash this value before sending to Google.',
56
+ type: 'string',
57
+ default: {
58
+ '@if': {
59
+ exists: { '@path': '$.properties.phone' },
60
+ then: { '@path': '$.properties.phone' },
61
+ else: { '@path': '$.context.traits.phone' }
62
+ }
63
+ }
64
+ },
65
+ order_id: {
66
+ label: 'Order ID',
67
+ description: 'The order ID associated with the conversion. An order ID can only be used for one conversion per conversion action.',
68
+ type: 'string',
69
+ default: {
70
+ '@if': {
71
+ exists: { '@path': '$.properties.orderId' },
72
+ then: { '@path': '$.properties.orderId' },
73
+ else: { '@path': '$.properties.order_id' }
74
+ }
75
+ }
76
+ },
77
+ value: {
78
+ label: 'Value',
79
+ description: 'The value of the conversion for the advertiser.',
80
+ type: 'number',
81
+ default: {
82
+ '@path': '$.properties.total'
83
+ }
84
+ },
85
+ currency: {
86
+ label: 'Currency',
87
+ description: 'Currency associated with the conversion value. This is the ISO 4217 3-character currency code.',
88
+ type: 'string',
89
+ default: {
90
+ '@path': '$.properties.currency'
91
+ }
92
+ },
93
+ conversion_environment: {
94
+ label: 'Conversion Environment',
95
+ description: 'The environment this conversion was recorded on, e.g. APP or WEB.',
96
+ type: 'string',
97
+ choices: [
98
+ { label: 'APP', value: 'APP' },
99
+ { label: 'WEB', value: 'WEB' },
100
+ { label: 'UNSPECIFIED', value: 'UNSPECIFIED' }
101
+ ]
102
+ },
103
+ merchant_id: {
104
+ label: 'Merchant Center ID',
105
+ description: 'The ID of the Merchant Center account where the items are uploaded.',
106
+ type: 'string'
107
+ },
108
+ merchant_country_code: {
109
+ label: 'Merchant Center Feed Country Code',
110
+ description: 'The ISO 3166 two-character region code of the Merchant Center feed where the items are uploaded.',
111
+ type: 'string'
112
+ },
113
+ merchant_language_code: {
114
+ label: 'Merchant Center Feed Language Code',
115
+ description: 'The ISO 639-1 language code of the Merchant Center feed where the items are uploaded.',
116
+ type: 'string'
117
+ },
118
+ local_cost: {
119
+ label: 'Local Transaction Cost',
120
+ description: 'Sum of all transaction-level discounts, such as free shipping and coupon discounts for the whole cart.',
121
+ type: 'number'
122
+ },
123
+ items: {
124
+ label: 'Items',
125
+ description: 'Data of the items purchased.',
126
+ type: 'object',
127
+ multiple: true,
128
+ properties: {
129
+ product_id: {
130
+ label: 'Product ID',
131
+ type: 'string',
132
+ description: 'The ID of the item sold.'
133
+ },
134
+ quantity: {
135
+ label: 'Quantity',
136
+ type: 'number',
137
+ description: 'Number of items sold.'
138
+ },
139
+ price: {
140
+ label: 'Price',
141
+ type: 'number',
142
+ description: 'Unit price excluding tax, shipping, and any transaction level discounts.'
143
+ }
144
+ },
145
+ default: {
146
+ '@arrayPath': [
147
+ '$.properties.products',
148
+ {
149
+ product_id: {
150
+ '@path': '$.product_id'
151
+ },
152
+ quantity: {
153
+ '@path': '$.quantity'
154
+ },
155
+ price: {
156
+ '@path': '$.price'
157
+ }
158
+ }
159
+ ]
160
+ }
161
+ },
162
+ custom_variables: {
163
+ label: 'Custom Variables',
164
+ description: 'The custom variables associated with this conversion. On the left-hand side, input the name of the custom variable as it appears in your Google Ads account. On the right-hand side, map the Segment field that contains the corresponding value See [Google’s documentation on how to create custom conversion variables.](https://developers.google.com/google-ads/api/docs/conversions/conversion-custom-variables) ',
165
+ type: 'object',
166
+ additionalProperties: true,
167
+ defaultObjectUI: 'keyvalue:only'
168
+ }
169
+ },
170
+ perform: async (request, { auth, settings, payload }) => {
171
+ if (!settings.customerId) {
172
+ throw new actions_core_1.IntegrationError('Customer ID is required for this action. Please set it in destination settings.', 'Missing required fields.', 400);
173
+ }
174
+ settings.customerId = settings.customerId.replace(/-/g, '');
175
+ let cartItems = [];
176
+ if (payload.items) {
177
+ cartItems = payload.items.map((product) => {
178
+ return {
179
+ productId: product.product_id,
180
+ quantity: product.quantity,
181
+ unitPrice: product.price
182
+ };
183
+ });
184
+ }
185
+ const request_object = {
186
+ conversionAction: `customers/${settings.customerId}/conversionActions/${payload.conversion_action}`,
187
+ conversionDateTime: payload.conversion_timestamp.replace(/T/, ' ').replace(/\..+/, '+00:00'),
188
+ gclid: payload.gclid,
189
+ gbraid: payload.gbraid,
190
+ wbraid: payload.wbraid,
191
+ orderId: payload.order_id,
192
+ conversionValue: payload.value,
193
+ currencyCode: payload.currency,
194
+ conversionEnvironment: payload.conversion_environment,
195
+ cartData: {
196
+ merchantId: payload.merchant_id,
197
+ feedCountryCode: payload.merchant_country_code,
198
+ feedLanguageCode: payload.merchant_language_code,
199
+ localTransactionCost: payload.local_cost,
200
+ items: cartItems
201
+ },
202
+ userIdentifiers: []
203
+ };
204
+ if (payload.custom_variables) {
205
+ const customVariableIds = await functions_1.getCustomVariables(settings.customerId, auth, request);
206
+ request_object.customVariables = functions_1.formatCustomVariables(payload.custom_variables, customVariableIds.data[0].results);
207
+ }
208
+ if (payload.email_address) {
209
+ request_object.userIdentifiers.push({ hashedEmail: functions_1.hash(payload.email_address) });
210
+ }
211
+ if (payload.phone_number) {
212
+ request_object.userIdentifiers.push({ hashedPhoneNumber: functions_1.hash(payload.phone_number) });
213
+ }
214
+ const response = await request(`${types_1.GoogleAdsAPI}/${settings.customerId}:uploadClickConversions`, {
215
+ method: 'post',
216
+ headers: {
217
+ 'developer-token': `${process.env.ADWORDS_DEVELOPER_TOKEN}`
218
+ },
219
+ json: {
220
+ conversions: [request_object],
221
+ partialFailure: true
222
+ }
223
+ });
224
+ functions_1.handleGoogleErrors(response);
225
+ return response;
226
+ }
227
+ };
228
+ exports.default = action;
229
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/google-enhanced-conversions/uploadClickConversion/index.ts"],"names":[],"mappings":";;AAAA,wDAA0E;AAG1E,oCAAuE;AACvE,4CAAkG;AAGlG,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,yBAAyB;IAChC,WAAW,EAAE,2DAA2D;IACxE,MAAM,EAAE;QACN,iBAAiB,EAAE;YACjB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,sUAAsU;YACxU,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;SACf;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,8DAA8D;YAC3E,IAAI,EAAE,QAAQ;SACf;QACD,MAAM,EAAE;YACN,KAAK,EAAE,QAAQ;YACf,WAAW,EACT,uHAAuH;YACzH,IAAI,EAAE,QAAQ;SACf;QACD,MAAM,EAAE;YACN,KAAK,EAAE,QAAQ;YACf,WAAW,EACT,uHAAuH;YACzH,IAAI,EAAE,QAAQ;SACf;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,8LAA8L;YAChM,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,aAAa;aACvB;SACF;QACD,aAAa,EAAE;YACb,KAAK,EAAE,eAAe;YACtB,WAAW,EACT,4HAA4H;YAC9H,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACvC,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;iBAC5C;aACF;SACF;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,cAAc;YACrB,WAAW,EACT,wKAAwK;YAC1K,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACvC,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;iBAC5C;aACF;SACF;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,UAAU;YACjB,WAAW,EACT,qHAAqH;YACvH,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;oBAC3C,IAAI,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE;iBAC3C;aACF;SACF;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,iDAAiD;YAC9D,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,oBAAoB;aAC9B;SACF;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,gGAAgG;YAC7G,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,uBAAuB;aACjC;SACF;QACD,sBAAsB,EAAE;YACtB,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,mEAAmE;YAChF,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9B,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;aAC/C;SACF;QACD,WAAW,EAAE;YACX,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,qEAAqE;YAClF,IAAI,EAAE,QAAQ;SACf;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,mCAAmC;YAC1C,WAAW,EAAE,kGAAkG;YAC/G,IAAI,EAAE,QAAQ;SACf;QACD,sBAAsB,EAAE;YACtB,KAAK,EAAE,oCAAoC;YAC3C,WAAW,EAAE,uFAAuF;YACpG,IAAI,EAAE,QAAQ;SACf;QACD,UAAU,EAAE;YACV,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EACT,wGAAwG;YAC1G,IAAI,EAAE,QAAQ;SACf;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,8BAA8B;YAC3C,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,KAAK,EAAE,YAAY;oBACnB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0BAA0B;iBACxC;gBACD,QAAQ,EAAE;oBACR,KAAK,EAAE,UAAU;oBACjB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,KAAK,EAAE;oBACL,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0EAA0E;iBACxF;aACF;YACD,OAAO,EAAE;gBACP,YAAY,EAAE;oBACZ,uBAAuB;oBACvB;wBACE,UAAU,EAAE;4BACV,OAAO,EAAE,cAAc;yBACxB;wBACD,QAAQ,EAAE;4BACR,OAAO,EAAE,YAAY;yBACtB;wBACD,KAAK,EAAE;4BACL,OAAO,EAAE,SAAS;yBACnB;qBACF;iBACF;aACF;SACF;QACD,gBAAgB,EAAE;YAChB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EACT,yZAAyZ;YAC3Z,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,eAAe;SACjC;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAGtD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACxB,MAAM,IAAI,+BAAgB,CACxB,iFAAiF,EACjF,0BAA0B,EAC1B,GAAG,CACJ,CAAA;SACF;QACD,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAE3D,IAAI,SAAS,GAAe,EAAE,CAAA;QAC9B,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACxC,OAAO;oBACL,SAAS,EAAE,OAAO,CAAC,UAAU;oBAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,SAAS,EAAE,OAAO,CAAC,KAAK;iBACb,CAAA;YACf,CAAC,CAAC,CAAA;SACH;QAED,MAAM,cAAc,GAA2B;YAC7C,gBAAgB,EAAE,aAAa,QAAQ,CAAC,UAAU,sBAAsB,OAAO,CAAC,iBAAiB,EAAE;YACnG,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC5F,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,eAAe,EAAE,OAAO,CAAC,KAAK;YAC9B,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,qBAAqB,EAAE,OAAO,CAAC,sBAAsB;YACrD,QAAQ,EAAE;gBACR,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,eAAe,EAAE,OAAO,CAAC,qBAAqB;gBAC9C,gBAAgB,EAAE,OAAO,CAAC,sBAAsB;gBAChD,oBAAoB,EAAE,OAAO,CAAC,UAAU;gBACxC,KAAK,EAAE,SAAS;aACjB;YACD,eAAe,EAAE,EAAE;SACpB,CAAA;QAGD,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC5B,MAAM,iBAAiB,GAAG,MAAM,8BAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;YACtF,cAAc,CAAC,eAAe,GAAG,iCAAqB,CACpD,OAAO,CAAC,gBAAgB,EACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAClC,CAAA;SACF;QAED,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,gBAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;SAClF;QAED,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,gBAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;SACvF;QAED,MAAM,QAAQ,GAA2C,MAAM,OAAO,CACpE,GAAG,oBAAY,IAAI,QAAQ,CAAC,UAAU,yBAAyB,EAC/D;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,iBAAiB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE;aAC5D;YACD,IAAI,EAAE;gBACJ,WAAW,EAAE,CAAC,cAAc,CAAC;gBAC7B,cAAc,EAAE,IAAI;aACrB;SACF,CACF,CAAA;QAED,8BAAkB,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
@@ -0,0 +1,20 @@
1
+ export interface Payload {
2
+ conversion_action: string;
3
+ adjustment_type: string;
4
+ adjustment_timestamp: string;
5
+ order_id?: string;
6
+ gclid?: string;
7
+ conversion_timestamp?: string;
8
+ restatement_value?: number;
9
+ restatement_currency_code?: string;
10
+ email_address?: string;
11
+ phone_number?: string;
12
+ first_name?: string;
13
+ last_name?: string;
14
+ city?: string;
15
+ state?: string;
16
+ country?: string;
17
+ postal_code?: string;
18
+ street_address?: string;
19
+ user_agent?: string;
20
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=generated-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/google-enhanced-conversions/uploadConversionAdjustment/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { ActionDefinition } from '@segment/actions-core';
2
+ import type { Settings } from '../generated-types';
3
+ import type { Payload } from './generated-types';
4
+ declare const action: ActionDefinition<Settings, Payload>;
5
+ export default action;
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const actions_core_1 = require("@segment/actions-core");
4
+ const functions_1 = require("../functions");
5
+ const types_1 = require("../types");
6
+ const action = {
7
+ title: 'Upload Conversion Adjustment',
8
+ description: 'Upload a conversion adjustment to the Google Ads API.',
9
+ fields: {
10
+ conversion_action: {
11
+ label: 'Conversion Action ID',
12
+ description: 'The ID of the conversion action associated with this conversion. To find the Conversion Action ID, click on your conversion in Google Ads and get the value for `ctId` in the URL. For example, if the URL is `https://ads.google.com/aw/conversions/detail?ocid=00000000&ctId=570000000`, your Conversion Action ID is `570000000`.',
13
+ type: 'string',
14
+ required: true
15
+ },
16
+ adjustment_type: {
17
+ label: 'Adjustment Type',
18
+ description: 'The adjustment type. See [Google’s documentation](https://developers.google.com/google-ads/api/reference/rpc/v11/ConversionAdjustmentTypeEnum.ConversionAdjustmentType) for details on each type.',
19
+ type: 'string',
20
+ choices: [
21
+ { label: 'UNSPECIFIED', value: 'UNSPECIFIED' },
22
+ { label: 'UNKNOWN', value: 'UNKNOWN' },
23
+ { label: `RETRACTION`, value: 'RETRACTION' },
24
+ { label: 'RESTATEMENT', value: 'RESTATEMENT' },
25
+ { label: `ENHANCEMENT`, value: 'ENHANCEMENT' }
26
+ ],
27
+ required: true
28
+ },
29
+ adjustment_timestamp: {
30
+ label: 'Adjustment Timestamp',
31
+ description: 'The date time at which the adjustment occurred. Must be after the conversion timestamp. The timezone must be specified. The format is "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00".',
32
+ type: 'string',
33
+ required: true,
34
+ default: {
35
+ '@path': '$.timestamp'
36
+ }
37
+ },
38
+ order_id: {
39
+ label: 'Order ID',
40
+ description: 'The order ID of the conversion to be adjusted. If the conversion was reported with an order ID specified, that order ID must be used as the identifier here. Required for ENHANCEMENT adjustments.',
41
+ type: 'string',
42
+ default: {
43
+ '@if': {
44
+ exists: { '@path': '$.properties.orderId' },
45
+ then: { '@path': '$.properties.orderId' },
46
+ else: { '@path': '$.properties.order_id' }
47
+ }
48
+ }
49
+ },
50
+ gclid: {
51
+ label: 'GCLID',
52
+ description: 'Google click ID associated with the original conversion for this adjustment. This is used for the GCLID Date Time Pair. Required for non-ENHANCEMENT adjustments. If adjustment is ENHANCEMENT, this value is optional but may be set in addition to the order ID.',
53
+ type: 'string'
54
+ },
55
+ conversion_timestamp: {
56
+ label: 'Conversion Timestamp',
57
+ description: 'The date time at which the original conversion for this adjustment occurred. The timezone must be specified. The format is "yyyy-mm-dd hh:mm:ss+|-hh:mm", e.g. "2019-01-01 12:32:45-08:00". This is used for the GCLID Date Time Pair. Required for non-ENHANCEMENT adjustments. If adjustment is ENHANCEMENT, this value is optional but may be set in addition to the order ID.',
58
+ type: 'string'
59
+ },
60
+ restatement_value: {
61
+ label: 'Restatement Value',
62
+ description: 'The restated conversion value. This is the value of the conversion after restatement. For example, to change the value of a conversion from 100 to 70, an adjusted value of 70 should be reported. Required for RESTATEMENT adjustments.',
63
+ type: 'number'
64
+ },
65
+ restatement_currency_code: {
66
+ label: 'Restatement Currency Code',
67
+ description: 'The currency of the restated value. If not provided, then the default currency from the conversion action is used, and if that is not set then the account currency is used. This is the ISO 4217 3-character currency code, e.g. USD or EUR.',
68
+ type: 'string'
69
+ },
70
+ email_address: {
71
+ label: 'Email Address',
72
+ description: 'Email address of the individual who triggered the conversion event. Segment will hash this value before sending to Google.',
73
+ type: 'string',
74
+ format: 'email',
75
+ default: {
76
+ '@if': {
77
+ exists: { '@path': '$.properties.email' },
78
+ then: { '@path': '$.properties.email' },
79
+ else: { '@path': '$.context.traits.email' }
80
+ }
81
+ }
82
+ },
83
+ phone_number: {
84
+ label: 'Phone Number',
85
+ description: 'Phone number of the individual who triggered the conversion event, in E.164 standard format, e.g. +14150000000. Segment will hash this value before sending to Google.',
86
+ type: 'string',
87
+ default: {
88
+ '@if': {
89
+ exists: { '@path': '$.properties.phone' },
90
+ then: { '@path': '$.properties.phone' },
91
+ else: { '@path': '$.context.traits.phone' }
92
+ }
93
+ }
94
+ },
95
+ first_name: {
96
+ label: 'First Name',
97
+ description: 'First name of the user who performed the conversion. Segment will hash this value before sending to Google.',
98
+ type: 'string',
99
+ default: {
100
+ '@if': {
101
+ exists: { '@path': '$.properties.firstName' },
102
+ then: { '@path': '$.properties.firstName' },
103
+ else: { '@path': '$.context.traits.firstName' }
104
+ }
105
+ }
106
+ },
107
+ last_name: {
108
+ label: 'Last Name',
109
+ description: 'Last name of the user who performed the conversion. Segment will hash this value before sending to Google.',
110
+ type: 'string',
111
+ default: {
112
+ '@if': {
113
+ exists: { '@path': '$.properties.lastName' },
114
+ then: { '@path': '$.properties.lastName' },
115
+ else: { '@path': '$.context.traits.lastName' }
116
+ }
117
+ }
118
+ },
119
+ city: {
120
+ label: 'City',
121
+ description: 'City of the user who performed the conversion.',
122
+ type: 'string',
123
+ default: {
124
+ '@if': {
125
+ exists: { '@path': '$.properties.address.city,' },
126
+ then: { '@path': '$.properties.address.city,' },
127
+ else: { '@path': '$.context.traits.address.city' }
128
+ }
129
+ }
130
+ },
131
+ state: {
132
+ label: 'State',
133
+ description: 'State of the user who performed the conversion.',
134
+ type: 'string',
135
+ default: {
136
+ '@if': {
137
+ exists: { '@path': '$.properties.address.state,' },
138
+ then: { '@path': '$.properties.address.state,' },
139
+ else: { '@path': '$.context.traits.address.state' }
140
+ }
141
+ }
142
+ },
143
+ country: {
144
+ label: 'Country',
145
+ description: '2-letter country code in ISO-3166-1 alpha-2 of the user who performed the conversion.',
146
+ type: 'string',
147
+ default: {
148
+ '@if': {
149
+ exists: { '@path': '$.properties.address.country,' },
150
+ then: { '@path': '$.properties.address.country,' },
151
+ else: { '@path': '$.context.traits.address.country' }
152
+ }
153
+ }
154
+ },
155
+ postal_code: {
156
+ label: 'Postal Code',
157
+ description: 'Postal code of the user who performed the conversion.',
158
+ type: 'string',
159
+ default: {
160
+ '@if': {
161
+ exists: { '@path': '$.properties.address.postalCode,' },
162
+ then: { '@path': '$.properties.address.postalCode,' },
163
+ else: { '@path': '$.context.traits.address.postalCode' }
164
+ }
165
+ }
166
+ },
167
+ street_address: {
168
+ label: 'Street Address',
169
+ description: 'Street address of the user who performed the conversion. Segment will hash this value before sending to Google.',
170
+ type: 'string',
171
+ default: {
172
+ '@if': {
173
+ exists: { '@path': '$.properties.address.street,' },
174
+ then: { '@path': '$.properties.address.street,' },
175
+ else: { '@path': '$.context.traits.address.street' }
176
+ }
177
+ }
178
+ },
179
+ user_agent: {
180
+ label: 'User Agent',
181
+ description: 'The user agent to enhance the original conversion. User agent can only be specified in enhancements with user identifiers. This should match the user agent of the request that sent the original conversion so the conversion and its enhancement are either both attributed as same-device or both attributed as cross-device.',
182
+ type: 'string',
183
+ default: {
184
+ '@path': '$.context.userAgent'
185
+ }
186
+ }
187
+ },
188
+ perform: async (request, { settings, payload }) => {
189
+ if (!settings.customerId) {
190
+ throw new actions_core_1.IntegrationError('Customer ID is required for this action. Please set it in destination settings.', 'Missing required fields.', 400);
191
+ }
192
+ settings.customerId = settings.customerId.replace(/-/g, '');
193
+ const validations = {
194
+ ENHANCEMENT: {
195
+ validation: (payload) => !payload.order_id,
196
+ error: {
197
+ message: 'Order ID required for enhancements'
198
+ }
199
+ },
200
+ RESTATEMENT: {
201
+ validation: (payload) => !payload.restatement_value,
202
+ error: {
203
+ message: 'Restatement value required for restatements'
204
+ }
205
+ },
206
+ RETRACTION: {
207
+ validation: (payload) => !payload.gclid || !payload.conversion_timestamp,
208
+ error: {
209
+ message: 'GCLID and conversion timestamp required for chosen conversion type'
210
+ }
211
+ },
212
+ UNKNOWN: {
213
+ validation: (payload) => !payload.gclid || !payload.conversion_timestamp,
214
+ error: {
215
+ message: 'GCLID and conversion timestamp required for chosen conversion type'
216
+ }
217
+ },
218
+ UNSPECIFIED: {
219
+ validation: (payload) => !payload.gclid || !payload.conversion_timestamp,
220
+ error: {
221
+ message: 'GCLID and conversion timestamp required for chosen conversion type'
222
+ }
223
+ }
224
+ };
225
+ const key = payload.adjustment_type;
226
+ if (validations[key].validation(payload)) {
227
+ throw new actions_core_1.IntegrationError(validations[key].error.message, 'INVALID_ARGUMENT', 400);
228
+ }
229
+ const request_object = {
230
+ conversionAction: `customers/${settings.customerId}/conversionActions/${payload.conversion_action}`,
231
+ adjustmentType: payload.adjustment_type,
232
+ adjustmentDateTime: payload.adjustment_timestamp.replace(/T/, ' ').replace(/\..+/, '+00:00'),
233
+ orderId: payload.order_id,
234
+ gclidDateTimePair: {
235
+ gclid: payload.gclid,
236
+ conversionDateTime: payload.conversion_timestamp?.replace(/T/, ' ').replace(/\..+/, '+00:00')
237
+ },
238
+ restatementValue: {
239
+ adjustedValue: payload.restatement_value,
240
+ currencyCode: payload.restatement_currency_code
241
+ },
242
+ userIdentifiers: [],
243
+ userAgent: payload.user_agent
244
+ };
245
+ if (payload.email_address) {
246
+ request_object.userIdentifiers.push({ hashedEmail: functions_1.hash(payload.email_address) });
247
+ }
248
+ if (payload.phone_number) {
249
+ request_object.userIdentifiers.push({ hashedPhoneNumber: functions_1.hash(payload.phone_number) });
250
+ }
251
+ const containsAddressInfo = payload.first_name ||
252
+ payload.last_name ||
253
+ payload.city ||
254
+ payload.state ||
255
+ payload.country ||
256
+ payload.postal_code ||
257
+ payload.street_address;
258
+ if (containsAddressInfo) {
259
+ request_object.userIdentifiers.push({
260
+ addressInfo: {
261
+ hashedFirstName: functions_1.hash(payload.first_name),
262
+ hashedLastName: functions_1.hash(payload.last_name),
263
+ hashedStreetAddress: functions_1.hash(payload.street_address),
264
+ city: payload.city,
265
+ state: payload.state,
266
+ countryCode: payload.country,
267
+ postalCode: payload.postal_code
268
+ }
269
+ });
270
+ }
271
+ const response = await request(`${types_1.GoogleAdsAPI}/${settings.customerId}:uploadConversionAdjustments`, {
272
+ method: 'post',
273
+ headers: {
274
+ 'developer-token': `${process.env.ADWORDS_DEVELOPER_TOKEN}`
275
+ },
276
+ json: {
277
+ conversionAdjustments: [request_object],
278
+ partialFailure: true
279
+ }
280
+ });
281
+ functions_1.handleGoogleErrors(response);
282
+ return response;
283
+ }
284
+ };
285
+ exports.default = action;
286
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/google-enhanced-conversions/uploadConversionAdjustment/index.ts"],"names":[],"mappings":";;AAAA,wDAA0E;AAC1E,4CAAuD;AAGvD,oCAA6D;AAG7D,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,8BAA8B;IACrC,WAAW,EAAE,uDAAuD;IACpE,MAAM,EAAE;QACN,iBAAiB,EAAE;YACjB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,sUAAsU;YACxU,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;SACf;QACD,eAAe,EAAE;YACf,KAAK,EAAE,iBAAiB;YACxB,WAAW,EACT,mMAAmM;YACrM,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC9C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACtC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC5C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC9C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;aAC/C;YACD,QAAQ,EAAE,IAAI;SACf;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,wMAAwM;YAC1M,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,aAAa;aACvB;SACF;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,UAAU;YACjB,WAAW,EACT,oMAAoM;YACtM,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;oBAC3C,IAAI,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE;iBAC3C;aACF;SACF;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EACT,oQAAoQ;YACtQ,IAAI,EAAE,QAAQ;SACf;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,mXAAmX;YACrX,IAAI,EAAE,QAAQ;SACf;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EACT,0OAA0O;YAC5O,IAAI,EAAE,QAAQ;SACf;QACD,yBAAyB,EAAE;YACzB,KAAK,EAAE,2BAA2B;YAClC,WAAW,EACT,+OAA+O;YACjP,IAAI,EAAE,QAAQ;SACf;QACD,aAAa,EAAE;YACb,KAAK,EAAE,eAAe;YACtB,WAAW,EACT,4HAA4H;YAC9H,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACvC,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;iBAC5C;aACF;SACF;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,cAAc;YACrB,WAAW,EACT,wKAAwK;YAC1K,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACvC,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;iBAC5C;aACF;SACF;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EACT,6GAA6G;YAC/G,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;oBAC7C,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;oBAC3C,IAAI,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE;iBAChD;aACF;SACF;QACD,SAAS,EAAE;YACT,KAAK,EAAE,WAAW;YAClB,WAAW,EACT,4GAA4G;YAC9G,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE;oBAC5C,IAAI,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE;oBAC1C,IAAI,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE;iBAC/C;aACF;SACF;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,gDAAgD;YAC7D,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE;oBACjD,IAAI,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE;oBAC/C,IAAI,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE;iBACnD;aACF;SACF;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,iDAAiD;YAC9D,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE;oBAClD,IAAI,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE;oBAChD,IAAI,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE;iBACpD;aACF;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,uFAAuF;YACpG,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE;oBACpD,IAAI,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE;oBAClD,IAAI,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE;iBACtD;aACF;SACF;QACD,WAAW,EAAE;YACX,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,uDAAuD;YACpE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE;oBACvD,IAAI,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE;oBACrD,IAAI,EAAE,EAAE,OAAO,EAAE,qCAAqC,EAAE;iBACzD;aACF;SACF;QACD,cAAc,EAAE;YACd,KAAK,EAAE,gBAAgB;YACvB,WAAW,EACT,iHAAiH;YACnH,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE;oBACnD,IAAI,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE;oBACjD,IAAI,EAAE,EAAE,OAAO,EAAE,iCAAiC,EAAE;iBACrD;aACF;SACF;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EACT,kUAAkU;YACpU,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,qBAAqB;aAC/B;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAGhD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACxB,MAAM,IAAI,+BAAgB,CACxB,iFAAiF,EACjF,0BAA0B,EAC1B,GAAG,CACJ,CAAA;SACF;QAED,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAE3D,MAAM,WAAW,GAA2B;YAC1C,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;gBACnD,KAAK,EAAE;oBACL,OAAO,EAAE,oCAAoC;iBAC9C;aACF;YACD,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB;gBAC5D,KAAK,EAAE;oBACL,OAAO,EAAE,6CAA6C;iBACvD;aACF;YACD,UAAU,EAAE;gBACV,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,oBAAoB;gBACjF,KAAK,EAAE;oBACL,OAAO,EAAE,oEAAoE;iBAC9E;aACF;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,oBAAoB;gBACjF,KAAK,EAAE;oBACL,OAAO,EAAE,oEAAoE;iBAC9E;aACF;YACD,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,oBAAoB;gBACjF,KAAK,EAAE;oBACL,OAAO,EAAE,oEAAoE;iBAC9E;aACF;SACF,CAAA;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAA;QACnC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACxC,MAAM,IAAI,+BAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAA;SACpF;QAED,MAAM,cAAc,GAA2B;YAC7C,gBAAgB,EAAE,aAAa,QAAQ,CAAC,UAAU,sBAAsB,OAAO,CAAC,iBAAiB,EAAE;YACnG,cAAc,EAAE,OAAO,CAAC,eAAe;YACvC,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC5F,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,iBAAiB,EAAE;gBACjB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;aAC9F;YACD,gBAAgB,EAAE;gBAChB,aAAa,EAAE,OAAO,CAAC,iBAAiB;gBACxC,YAAY,EAAE,OAAO,CAAC,yBAAyB;aAChD;YACD,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAA;QAED,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,gBAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;SAClF;QAED,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,gBAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;SACvF;QAED,MAAM,mBAAmB,GACvB,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,OAAO;YACf,OAAO,CAAC,WAAW;YACnB,OAAO,CAAC,cAAc,CAAA;QAExB,IAAI,mBAAmB,EAAE;YACvB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC;gBAClC,WAAW,EAAE;oBACX,eAAe,EAAE,gBAAI,CAAC,OAAO,CAAC,UAAU,CAAC;oBACzC,cAAc,EAAE,gBAAI,CAAC,OAAO,CAAC,SAAS,CAAC;oBACvC,mBAAmB,EAAE,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;oBACjD,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,WAAW,EAAE,OAAO,CAAC,OAAO;oBAC5B,UAAU,EAAE,OAAO,CAAC,WAAW;iBAChC;aACF,CAAC,CAAA;SACH;QAED,MAAM,QAAQ,GAA2C,MAAM,OAAO,CACpE,GAAG,oBAAY,IAAI,QAAQ,CAAC,UAAU,8BAA8B,EACpE;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,iBAAiB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE;aAC5D;YACD,IAAI,EAAE;gBACJ,qBAAqB,EAAE,CAAC,cAAc,CAAC;gBACvC,cAAc,EAAE,IAAI;aACrB;SACF,CACF,CAAA;QAED,8BAAkB,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
@@ -0,0 +1,6 @@
1
+ export interface Payload {
2
+ objectType: string;
3
+ properties: {
4
+ [k: string]: unknown;
5
+ };
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=generated-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/createCustomObjectRecord/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { ActionDefinition } from '@segment/actions-core';
2
+ import type { Settings } from '../generated-types';
3
+ import type { Payload } from './generated-types';
4
+ declare const action: ActionDefinition<Settings, Payload>;
5
+ export default action;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const actions_core_1 = require("@segment/actions-core");
4
+ const hubspotDefinedObjects = ['deals', 'tickets'];
5
+ const customObjectExpression = new RegExp('^[a-zA-Z0-9]+_[a-zA-Z][a-zA-Z0-9_-]+$');
6
+ const action = {
7
+ title: 'Create Custom Object',
8
+ description: 'Create a Custom Object in HubSpot',
9
+ fields: {
10
+ objectType: {
11
+ label: 'Object Type',
12
+ description: 'The CRM object schema to use for creating a record. This can be a standard object (i.e. tickets, deals) or ***fullyQualifiedName*** of a custom object. Schema for the Custom Objects must be predefined in HubSpot. More information on Custom Objects and *fullyQualifiedName* in [HubSpot documentation](https://developers.hubspot.com/docs/cms/data/crm-objects#getting-a-custom-object-type-s-details).',
13
+ type: 'string',
14
+ required: true
15
+ },
16
+ properties: {
17
+ label: 'Properties',
18
+ description: 'Properties to send to HubSpot. Please make sure to include the object’s required properties. Any custom properties must be predefined in HubSpot. More information in [HubSpot documentation](https://knowledge.hubspot.com/crm-setup/manage-your-properties#create-custom-properties).',
19
+ type: 'object',
20
+ required: true,
21
+ defaultObjectUI: 'keyvalue:only',
22
+ allowNull: false
23
+ }
24
+ },
25
+ perform: async (request, { payload }) => {
26
+ if (!customObjectExpression.test(payload.objectType) && !hubspotDefinedObjects.includes(payload.objectType)) {
27
+ throw new actions_core_1.IntegrationError('Custom Object is not in valid format. Please make sure that you are using either a valid format of object’s fullyQualifiedName (eg: p11223344_myobject) or a supported HubSpot defined object (i.e.: deals, tickets).', 'Custom Object is not in valid format', 400);
28
+ }
29
+ return request(`https://api.hubapi.com/crm/v3/objects/${payload.objectType}`, {
30
+ method: 'POST',
31
+ json: {
32
+ properties: { ...payload.properties }
33
+ }
34
+ });
35
+ }
36
+ };
37
+ exports.default = action;
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/createCustomObjectRecord/index.ts"],"names":[],"mappings":";;AACA,wDAAwD;AAKxD,MAAM,qBAAqB,GAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAK5D,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAAC,uCAAuC,CAAC,CAAA;AAElF,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EAAE,mCAAmC;IAChD,MAAM,EAAE;QACN,UAAU,EAAE;YACV,KAAK,EAAE,aAAa;YACpB,WAAW,EACT,+YAA+Y;YACjZ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;SACf;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EACT,yRAAyR;YAC3R,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,eAAe;YAChC,SAAS,EAAE,KAAK;SACjB;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAEtC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC3G,MAAM,IAAI,+BAAgB,CACxB,uNAAuN,EACvN,sCAAsC,EACtC,GAAG,CACJ,CAAA;SACF;QAED,OAAO,OAAO,CAAC,yCAAyC,OAAO,CAAC,UAAU,EAAE,EAAE;YAC5E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;aACtC;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
@@ -0,0 +1,2 @@
1
+ export interface Settings {
2
+ }