@segment/action-destinations 3.112.1-alpha.9 → 3.113.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/destinations/clevertap/index.js +1 -1
- package/dist/destinations/google-enhanced-conversions/functions.d.ts +1 -0
- package/dist/destinations/google-enhanced-conversions/functions.js +8 -1
- package/dist/destinations/google-enhanced-conversions/functions.js.map +1 -1
- package/dist/destinations/google-enhanced-conversions/uploadCallConversion/index.js +2 -2
- package/dist/destinations/google-enhanced-conversions/uploadCallConversion/index.js.map +1 -1
- package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.js +1 -1
- package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.js.map +1 -1
- package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/index.js +8 -44
- package/dist/destinations/google-enhanced-conversions/uploadConversionAdjustment/index.js.map +1 -1
- package/dist/destinations/hubspot/errors.d.ts +17 -0
- package/dist/destinations/hubspot/errors.js +30 -0
- package/dist/destinations/hubspot/errors.js.map +1 -0
- package/dist/destinations/hubspot/index.js +5 -3
- package/dist/destinations/hubspot/index.js.map +1 -1
- package/dist/destinations/hubspot/properties.d.ts +3 -1
- package/dist/destinations/hubspot/properties.js +4 -2
- package/dist/destinations/hubspot/properties.js.map +1 -1
- package/dist/destinations/hubspot/sendCustomBehavioralEvent/index.js +2 -2
- package/dist/destinations/hubspot/sendCustomBehavioralEvent/index.js.map +1 -1
- package/dist/destinations/hubspot/upsertCompany/generated-types.d.ts +21 -0
- package/dist/destinations/hubspot/upsertCompany/generated-types.js +3 -0
- package/dist/destinations/hubspot/upsertCompany/generated-types.js.map +1 -0
- package/dist/destinations/hubspot/upsertCompany/index.d.ts +5 -0
- package/dist/destinations/hubspot/upsertCompany/index.js +321 -0
- package/dist/destinations/hubspot/upsertCompany/index.js.map +1 -0
- package/dist/destinations/hubspot/upsertContact/index.js +5 -5
- package/dist/destinations/hubspot/upsertContact/index.js.map +1 -1
- package/dist/destinations/hubspot/upsertCustomObjectRecord/index.js +39 -10
- package/dist/destinations/hubspot/upsertCustomObjectRecord/index.js.map +1 -1
- package/dist/destinations/linkedin-audiences/generated-types.d.ts +0 -2
- package/dist/destinations/linkedin-audiences/index.js +20 -49
- package/dist/destinations/linkedin-audiences/index.js.map +1 -1
- package/dist/destinations/linkedin-audiences/linkedin-properties.d.ts +1 -0
- package/dist/destinations/linkedin-audiences/linkedin-properties.js +5 -0
- package/dist/destinations/linkedin-audiences/linkedin-properties.js.map +1 -0
- package/dist/destinations/linkedin-audiences/updateAudience/generated-types.d.ts +2 -0
- package/dist/destinations/linkedin-audiences/updateAudience/index.js +63 -26
- package/dist/destinations/linkedin-audiences/updateAudience/index.js.map +1 -1
- package/dist/destinations/mixpanel/identifyUser/generated-types.d.ts +1 -0
- package/dist/destinations/mixpanel/identifyUser/index.js +9 -0
- package/dist/destinations/mixpanel/identifyUser/index.js.map +1 -1
- package/dist/destinations/mixpanel/trackPurchase/index.js +18 -6
- package/dist/destinations/mixpanel/trackPurchase/index.js.map +1 -1
- package/dist/destinations/sendgrid/sendgrid-properties.js +2 -1
- package/dist/destinations/sendgrid/sendgrid-properties.js.map +1 -1
- package/package.json +4 -4
- package/dist/destinations/hubspot/testHelper.d.ts +0 -7
- package/dist/destinations/hubspot/testHelper.js +0 -24
- package/dist/destinations/hubspot/testHelper.js.map +0 -1
- package/dist/destinations/linkedin-audiences/api/index.d.ts +0 -13
- package/dist/destinations/linkedin-audiences/api/index.js +0 -62
- package/dist/destinations/linkedin-audiences/api/index.js.map +0 -1
- package/dist/destinations/linkedin-audiences/constants.d.ts +0 -2
- package/dist/destinations/linkedin-audiences/constants.js +0 -6
- package/dist/destinations/linkedin-audiences/constants.js.map +0 -1
- package/dist/destinations/linkedin-audiences/types.d.ts +0 -28
- package/dist/destinations/linkedin-audiences/types.js +0 -11
- package/dist/destinations/linkedin-audiences/types.js.map +0 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const properties_1 = require("../properties");
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
var CompanySearchFilterOperator;
|
|
6
|
+
(function (CompanySearchFilterOperator) {
|
|
7
|
+
CompanySearchFilterOperator["EQ"] = "EQ";
|
|
8
|
+
CompanySearchFilterOperator["NEQ"] = "NEQ";
|
|
9
|
+
CompanySearchFilterOperator["LT"] = "LT";
|
|
10
|
+
CompanySearchFilterOperator["LTE"] = "LTE";
|
|
11
|
+
CompanySearchFilterOperator["GT"] = "GT";
|
|
12
|
+
CompanySearchFilterOperator["GTE"] = "GTE";
|
|
13
|
+
CompanySearchFilterOperator["BETWEEN"] = "BETWEEN";
|
|
14
|
+
CompanySearchFilterOperator["IN"] = "IN";
|
|
15
|
+
CompanySearchFilterOperator["NOT_IN"] = "NOT_IN";
|
|
16
|
+
CompanySearchFilterOperator["HAS_PROPERTY"] = "HAS_PROPERTY";
|
|
17
|
+
CompanySearchFilterOperator["NOT_HAS_PROPERTY"] = "NOT_HAS_PROPERTY";
|
|
18
|
+
CompanySearchFilterOperator["CONTAINS_TOKEN"] = "CONTAINS_TOKEN";
|
|
19
|
+
CompanySearchFilterOperator["NOT_CONTAINS_TOKEN"] = "NOT_CONTAINS_TOKEN";
|
|
20
|
+
})(CompanySearchFilterOperator || (CompanySearchFilterOperator = {}));
|
|
21
|
+
const action = {
|
|
22
|
+
title: 'Upsert Company',
|
|
23
|
+
description: 'Create or update a company in HubSpot.',
|
|
24
|
+
defaultSubscription: 'type = "group"',
|
|
25
|
+
fields: {
|
|
26
|
+
groupid: {
|
|
27
|
+
label: 'Group ID',
|
|
28
|
+
description: `Used for constructing the unique ${properties_1.SEGMENT_UNIQUE_IDENTIFIER} for HubSpot.`,
|
|
29
|
+
type: 'hidden',
|
|
30
|
+
required: true,
|
|
31
|
+
default: {
|
|
32
|
+
'@if': {
|
|
33
|
+
exists: { '@path': '$.groupId' },
|
|
34
|
+
then: { '@path': '$.groupId' },
|
|
35
|
+
else: { '@path': '$.context.groupId' }
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
companysearchfields: {
|
|
40
|
+
label: 'Company Search Fields',
|
|
41
|
+
description: 'The unique field(s) used to search for an existing company in HubSpot to update. By default, Segment creates a custom property to store groupId for each company and uses this property to search for companies. If a company is not found, the fields provided here are then used to search. If a company is still not found, a new one is created.',
|
|
42
|
+
type: 'object',
|
|
43
|
+
required: true,
|
|
44
|
+
defaultObjectUI: 'keyvalue:only'
|
|
45
|
+
},
|
|
46
|
+
name: {
|
|
47
|
+
label: 'Company Name',
|
|
48
|
+
description: 'The name of the company.',
|
|
49
|
+
type: 'string',
|
|
50
|
+
required: true,
|
|
51
|
+
default: {
|
|
52
|
+
'@path': '$.traits.name'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
description: {
|
|
56
|
+
label: 'Company Description',
|
|
57
|
+
description: 'A short statement about the company’s mission and goals.',
|
|
58
|
+
type: 'string',
|
|
59
|
+
default: {
|
|
60
|
+
'@path': '$.traits.description'
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
createdate: {
|
|
64
|
+
label: 'Company Create Date',
|
|
65
|
+
description: 'The date the company was added to your account.',
|
|
66
|
+
type: 'string',
|
|
67
|
+
default: {
|
|
68
|
+
'@path': '$.traits.createdAt'
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
address: {
|
|
72
|
+
label: 'Street Address',
|
|
73
|
+
description: 'The street address of the company.',
|
|
74
|
+
type: 'string',
|
|
75
|
+
default: {
|
|
76
|
+
'@path': '$.traits.address.street'
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
city: {
|
|
80
|
+
label: 'City',
|
|
81
|
+
description: 'The city where the company is located.',
|
|
82
|
+
type: 'string',
|
|
83
|
+
default: {
|
|
84
|
+
'@path': '$.traits.address.city'
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
state: {
|
|
88
|
+
label: 'State',
|
|
89
|
+
description: 'The state or region where the company is located.',
|
|
90
|
+
type: 'string',
|
|
91
|
+
default: {
|
|
92
|
+
'@path': '$.traits.address.state'
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
zip: {
|
|
96
|
+
label: 'Postal Code',
|
|
97
|
+
description: 'The postal or zip code of the company.',
|
|
98
|
+
type: 'string',
|
|
99
|
+
default: {
|
|
100
|
+
'@if': {
|
|
101
|
+
exists: { '@path': '$.traits.address.postalCode' },
|
|
102
|
+
then: { '@path': '$.traits.address.postalCode' },
|
|
103
|
+
else: { '@path': '$.traits.address.postal_code' }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
domain: {
|
|
108
|
+
label: 'Domain',
|
|
109
|
+
description: 'The company’s website domain.',
|
|
110
|
+
type: 'string',
|
|
111
|
+
default: {
|
|
112
|
+
'@path': '$.traits.website'
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
phone: {
|
|
116
|
+
label: 'Phone',
|
|
117
|
+
description: 'The company’s primary phone number.',
|
|
118
|
+
type: 'string',
|
|
119
|
+
default: {
|
|
120
|
+
'@path': '$.traits.phone'
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
numberofemployees: {
|
|
124
|
+
label: 'Number of Employees',
|
|
125
|
+
description: 'The total number of people who work for the company.',
|
|
126
|
+
type: 'integer',
|
|
127
|
+
default: {
|
|
128
|
+
'@path': '$.traits.employees'
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
industry: {
|
|
132
|
+
label: 'Industry',
|
|
133
|
+
description: 'The type of business the company performs.',
|
|
134
|
+
type: 'string',
|
|
135
|
+
default: {
|
|
136
|
+
'@path': '$.traits.industry'
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
lifecyclestage: {
|
|
140
|
+
label: 'Lifecycle Stage',
|
|
141
|
+
description: 'The company’s stage within the marketing/sales process. See more information on default and custom stages in [HubSpot’s documentation](https://knowledge.hubspot.com/contacts/use-lifecycle-stages). Segment supports moving status forwards or backwards.',
|
|
142
|
+
type: 'string'
|
|
143
|
+
},
|
|
144
|
+
properties: {
|
|
145
|
+
label: 'Other Properties',
|
|
146
|
+
description: `Any other default or custom company properties. On the left-hand side, input the internal name of the property as seen in your HubSpot account. On the right-hand side, map the Segment field that contains the value. Custom properties must be predefined in HubSpot. See more information in [HubSpot’s documentation](https://knowledge.hubspot.com/crm-setup/manage-your-properties#create-custom-properties). Important: Do not use ’${properties_1.SEGMENT_UNIQUE_IDENTIFIER}’ here as it is an internal property and will result in an an error.`,
|
|
147
|
+
type: 'object',
|
|
148
|
+
defaultObjectUI: 'keyvalue:only',
|
|
149
|
+
allowNull: false
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
perform: async (request, { payload, transactionContext }) => {
|
|
153
|
+
if (payload.properties?.[properties_1.SEGMENT_UNIQUE_IDENTIFIER]) {
|
|
154
|
+
throw errors_1.RestrictedPropertyThrowableError;
|
|
155
|
+
}
|
|
156
|
+
if (!transactionContext?.transaction?.contact_id) {
|
|
157
|
+
throw errors_1.MissingIdentityCallThrowableError;
|
|
158
|
+
}
|
|
159
|
+
const companyProperties = {
|
|
160
|
+
name: payload.name,
|
|
161
|
+
description: payload.description,
|
|
162
|
+
createdate: payload.createdate,
|
|
163
|
+
address: payload.address,
|
|
164
|
+
city: payload.city,
|
|
165
|
+
state: payload.state,
|
|
166
|
+
zip: payload.zip,
|
|
167
|
+
domain: payload.domain,
|
|
168
|
+
phone: payload.phone,
|
|
169
|
+
numberofemployees: payload.numberofemployees,
|
|
170
|
+
industry: payload.industry,
|
|
171
|
+
lifecyclestage: payload.lifecyclestage?.toLocaleLowerCase(),
|
|
172
|
+
[properties_1.SEGMENT_UNIQUE_IDENTIFIER]: payload.groupid,
|
|
173
|
+
...payload.properties
|
|
174
|
+
};
|
|
175
|
+
let companyId = '';
|
|
176
|
+
try {
|
|
177
|
+
const updateCompanyResponse = await updateCompany(request, payload.groupid, companyProperties, properties_1.SEGMENT_UNIQUE_IDENTIFIER);
|
|
178
|
+
companyId = updateCompanyResponse.data.id;
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
const error = e;
|
|
182
|
+
if (errors_1.isSegmentUniqueIdentifierPropertyError(error, properties_1.SEGMENT_UNIQUE_IDENTIFIER)) {
|
|
183
|
+
await createSegmentUniqueIdentifierProperty(request);
|
|
184
|
+
throw errors_1.SegmentUniqueIdentifierMissingRetryableError;
|
|
185
|
+
}
|
|
186
|
+
if (error?.response?.status !== 404 &&
|
|
187
|
+
!errors_1.isSegmentUniqueIdentifierPropertyError(error, properties_1.SEGMENT_UNIQUE_IDENTIFIER)) {
|
|
188
|
+
throw e;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (!companyId) {
|
|
192
|
+
let searchCompanyResponse = null;
|
|
193
|
+
if (typeof payload.companysearchfields === 'object' && Object.keys(payload.companysearchfields).length > 0) {
|
|
194
|
+
try {
|
|
195
|
+
searchCompanyResponse = await searchCompany(request, { ...payload.companysearchfields });
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
if (e?.response?.status === 400) {
|
|
199
|
+
throw errors_1.CompanySearchThrowableError;
|
|
200
|
+
}
|
|
201
|
+
throw e;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (!searchCompanyResponse || searchCompanyResponse.data.total === 0) {
|
|
205
|
+
const createCompanyWrapper = function () {
|
|
206
|
+
return createCompany(request, companyProperties);
|
|
207
|
+
};
|
|
208
|
+
companyId = await upsertCompanyWithRetry(request, createCompanyWrapper);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
if (searchCompanyResponse.data.total > 1) {
|
|
212
|
+
throw errors_1.MultipleCompaniesInSearchResultThrowableError;
|
|
213
|
+
}
|
|
214
|
+
companyId = searchCompanyResponse.data.results[0].id;
|
|
215
|
+
const updateCompanyWrapper = function () {
|
|
216
|
+
return updateCompany(request, companyId, companyProperties);
|
|
217
|
+
};
|
|
218
|
+
await upsertCompanyWithRetry(request, updateCompanyWrapper);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
await associateCompanyToContact(request, companyId, transactionContext?.transaction?.['contact_id'], properties_1.ASSOCIATION_TYPE);
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
function searchCompany(request, companySearchFields) {
|
|
225
|
+
const responseProperties = ['name', 'domain', 'lifecyclestage', properties_1.SEGMENT_UNIQUE_IDENTIFIER];
|
|
226
|
+
const responseSortBy = ['name'];
|
|
227
|
+
const companySearchPayload = {
|
|
228
|
+
filterGroups: [],
|
|
229
|
+
properties: [...responseProperties],
|
|
230
|
+
sorts: [...responseSortBy]
|
|
231
|
+
};
|
|
232
|
+
for (const [key, value] of Object.entries(companySearchFields)) {
|
|
233
|
+
companySearchPayload.filterGroups.push({
|
|
234
|
+
filters: [
|
|
235
|
+
{
|
|
236
|
+
propertyName: key,
|
|
237
|
+
operator: CompanySearchFilterOperator.EQ,
|
|
238
|
+
value
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
return request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/objects/companies/search`, {
|
|
244
|
+
method: 'POST',
|
|
245
|
+
json: {
|
|
246
|
+
...companySearchPayload
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
function createCompany(request, properties) {
|
|
251
|
+
return request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/objects/companies`, {
|
|
252
|
+
method: 'POST',
|
|
253
|
+
json: {
|
|
254
|
+
properties: {
|
|
255
|
+
...properties
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
function updateCompany(request, uniqueIdentifier, properties, idProperty) {
|
|
261
|
+
const updateCompanyURL = `${properties_1.HUBSPOT_BASE_URL}/crm/v3/objects/companies/${uniqueIdentifier}` + (idProperty ? `?idProperty=${idProperty}` : '');
|
|
262
|
+
return request(updateCompanyURL, {
|
|
263
|
+
method: 'PATCH',
|
|
264
|
+
json: {
|
|
265
|
+
properties: {
|
|
266
|
+
...properties
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
function createSegmentUniqueIdentifierProperty(request) {
|
|
272
|
+
const segmentUniqueIdentifierProperty = {
|
|
273
|
+
name: properties_1.SEGMENT_UNIQUE_IDENTIFIER,
|
|
274
|
+
label: 'Segment Group ID',
|
|
275
|
+
description: 'Unique Property to map Segment Group ID with a HubSpot Company Object',
|
|
276
|
+
groupName: 'companyinformation',
|
|
277
|
+
type: 'string',
|
|
278
|
+
fieldType: 'text',
|
|
279
|
+
hidden: true,
|
|
280
|
+
displayOrder: -1,
|
|
281
|
+
hasUniqueValue: true,
|
|
282
|
+
formField: false
|
|
283
|
+
};
|
|
284
|
+
return request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/properties/companies`, {
|
|
285
|
+
method: 'POST',
|
|
286
|
+
json: {
|
|
287
|
+
...segmentUniqueIdentifierProperty
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
function associateCompanyToContact(request, companyId, contactId, associationType) {
|
|
292
|
+
return request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/objects/companies/${companyId}/associations/contacts/${contactId}/${associationType}`, {
|
|
293
|
+
method: 'PUT'
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
async function upsertCompanyWithRetry(request, upsertCompanyFunction) {
|
|
297
|
+
try {
|
|
298
|
+
const upsertCompanyResponse = await upsertCompanyFunction();
|
|
299
|
+
return upsertCompanyResponse.data.id;
|
|
300
|
+
}
|
|
301
|
+
catch (e) {
|
|
302
|
+
const error = e;
|
|
303
|
+
if (errors_1.isSegmentUniqueIdentifierPropertyError(error, properties_1.SEGMENT_UNIQUE_IDENTIFIER)) {
|
|
304
|
+
try {
|
|
305
|
+
await createSegmentUniqueIdentifierProperty(request);
|
|
306
|
+
}
|
|
307
|
+
catch (e) {
|
|
308
|
+
if (e?.response?.status !== 409) {
|
|
309
|
+
throw e;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
const upsertCompanyResponse = await upsertCompanyFunction();
|
|
313
|
+
return upsertCompanyResponse.data.id;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
throw e;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
exports.default = action;
|
|
321
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/upsertCompany/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const actions_core_1 = require("@segment/actions-core");
|
|
4
3
|
const properties_1 = require("../properties");
|
|
5
4
|
const action = {
|
|
6
5
|
title: 'Upsert Contact',
|
|
@@ -117,7 +116,7 @@ const action = {
|
|
|
117
116
|
properties: {
|
|
118
117
|
label: 'Other properties',
|
|
119
118
|
type: 'object',
|
|
120
|
-
description: 'Any other default or custom contact properties. Custom properties must be predefined in HubSpot. See more information in [HubSpot’s documentation](https://knowledge.hubspot.com/crm-setup/manage-your-properties#create-custom-properties).',
|
|
119
|
+
description: 'Any other default or custom contact properties. On the left-hand side, input the internal name of the property as seen in your HubSpot account. On the right-hand side, map the Segment field that contains the value. Custom properties must be predefined in HubSpot. See more information in [HubSpot’s documentation](https://knowledge.hubspot.com/crm-setup/manage-your-properties#create-custom-properties).',
|
|
121
120
|
defaultObjectUI: 'keyvalue:only'
|
|
122
121
|
}
|
|
123
122
|
},
|
|
@@ -133,6 +132,7 @@ const action = {
|
|
|
133
132
|
country: payload.country,
|
|
134
133
|
zip: payload.zip,
|
|
135
134
|
email: payload.email,
|
|
135
|
+
website: payload.website,
|
|
136
136
|
lifecyclestage: payload.lifecyclestage?.toLowerCase(),
|
|
137
137
|
...payload.properties
|
|
138
138
|
};
|
|
@@ -150,7 +150,7 @@ const action = {
|
|
|
150
150
|
return response;
|
|
151
151
|
}
|
|
152
152
|
catch (ex) {
|
|
153
|
-
if (ex
|
|
153
|
+
if (ex?.response.status == 404) {
|
|
154
154
|
const result = await createContact(request, contactProperties);
|
|
155
155
|
transactionContext?.setTransaction('contact_id', result.data.id);
|
|
156
156
|
return result;
|
|
@@ -160,7 +160,7 @@ const action = {
|
|
|
160
160
|
}
|
|
161
161
|
};
|
|
162
162
|
async function createContact(request, contactProperties) {
|
|
163
|
-
return request(`${properties_1.
|
|
163
|
+
return request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/objects/contacts`, {
|
|
164
164
|
method: 'POST',
|
|
165
165
|
json: {
|
|
166
166
|
properties: {
|
|
@@ -170,7 +170,7 @@ async function createContact(request, contactProperties) {
|
|
|
170
170
|
});
|
|
171
171
|
}
|
|
172
172
|
async function updateContact(request, email, properties) {
|
|
173
|
-
return request(`${properties_1.
|
|
173
|
+
return request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/objects/contacts/${email}?idProperty=email`, {
|
|
174
174
|
method: 'PATCH',
|
|
175
175
|
json: {
|
|
176
176
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/upsertContact/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/upsertContact/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const hubspotDefinedObjects = ['deals', 'tickets'];
|
|
5
|
-
const customObjectExpression = new RegExp('^[a-zA-Z0-9]+_[a-zA-Z][a-zA-Z0-9_-]+$');
|
|
3
|
+
const properties_1 = require("../properties");
|
|
6
4
|
const action = {
|
|
7
5
|
title: 'Create Custom Object Record',
|
|
8
6
|
description: 'Create records in any HubSpot standard or custom object.',
|
|
9
7
|
fields: {
|
|
10
8
|
objectType: {
|
|
11
9
|
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/
|
|
10
|
+
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/api/crm/crm-custom-objects#retrieve-existing-custom-objects).',
|
|
13
11
|
type: 'string',
|
|
14
|
-
required: true
|
|
12
|
+
required: true,
|
|
13
|
+
dynamic: true
|
|
15
14
|
},
|
|
16
15
|
properties: {
|
|
17
16
|
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).',
|
|
17
|
+
description: 'Properties to send to HubSpot. On the left-hand side, input the internal name of the property as seen in your HubSpot account. On the right-hand side, map the Segment field that contains the value. 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
18
|
type: 'object',
|
|
20
19
|
required: true,
|
|
21
20
|
defaultObjectUI: 'keyvalue:only',
|
|
22
21
|
allowNull: false
|
|
23
22
|
}
|
|
24
23
|
},
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
dynamicFields: {
|
|
25
|
+
objectType: async (request, _) => {
|
|
26
|
+
return getCustomObjects(request);
|
|
28
27
|
}
|
|
29
|
-
|
|
28
|
+
},
|
|
29
|
+
perform: async (request, { payload }) => {
|
|
30
|
+
return request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/objects/${payload.objectType}`, {
|
|
30
31
|
method: 'POST',
|
|
31
32
|
json: {
|
|
32
33
|
properties: { ...payload.properties }
|
|
@@ -34,5 +35,33 @@ const action = {
|
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
37
|
};
|
|
38
|
+
async function getCustomObjects(request) {
|
|
39
|
+
const defaultChoices = [
|
|
40
|
+
{ value: 'deals', label: 'Deals' },
|
|
41
|
+
{ value: 'tickets', label: 'Tickets' }
|
|
42
|
+
];
|
|
43
|
+
try {
|
|
44
|
+
const response = await request(`${properties_1.HUBSPOT_BASE_URL}/crm/v3/schemas?archived=false`, {
|
|
45
|
+
method: 'GET',
|
|
46
|
+
skipResponseCloning: true
|
|
47
|
+
});
|
|
48
|
+
const choices = response.data.results.map((schema) => ({
|
|
49
|
+
label: schema.labels.plural,
|
|
50
|
+
value: schema.fullyQualifiedName
|
|
51
|
+
}));
|
|
52
|
+
return {
|
|
53
|
+
choices: [...choices, ...defaultChoices]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return {
|
|
58
|
+
choices: [],
|
|
59
|
+
error: {
|
|
60
|
+
message: err?.response?.data?.message ?? 'Unknown error',
|
|
61
|
+
code: err?.response?.data?.category ?? 'Unknown code'
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
37
66
|
exports.default = action;
|
|
38
67
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/upsertCustomObjectRecord/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/upsertCustomObjectRecord/index.ts"],"names":[],"mappings":";;AAIA,8CAAgD;AAchD,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,6BAA6B;IACpC,WAAW,EAAE,0DAA0D;IACvE,MAAM,EAAE;QACN,UAAU,EAAE;YACV,KAAK,EAAE,aAAa;YACpB,WAAW,EACT,+YAA+Y;YACjZ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EACT,gcAAgc;YAClc,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,eAAe;YAChC,SAAS,EAAE,KAAK;SACjB;KACF;IACD,aAAa,EAAE;QACb,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;YAC/B,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACtC,OAAO,OAAO,CAAC,GAAG,6BAAgB,mBAAmB,OAAO,CAAC,UAAU,EAAE,EAAE;YACzE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;aACtC;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAsB;IAEpD,MAAM,cAAc,GAAG;QACrB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QAClC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KACvC,CAAA;IAED,IAAI;QAGF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAqB,GAAG,6BAAgB,gCAAgC,EAAE;YACtG,MAAM,EAAE,KAAK;YACb,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC3B,KAAK,EAAE,MAAM,CAAC,kBAAkB;SACjC,CAAC,CAAC,CAAA;QACH,OAAO;YACL,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,cAAc,CAAC;SACzC,CAAA;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO;YACL,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,OAAO,EAAG,GAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,eAAe;gBAC1E,IAAI,EAAG,GAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,cAAc;aACxE;SACF,CAAA;KACF;AACH,CAAC;AAED,kBAAe,MAAM,CAAA"}
|
|
@@ -3,12 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const actions_core_1 = require("@segment/actions-core");
|
|
7
6
|
const updateAudience_1 = __importDefault(require("./updateAudience"));
|
|
8
|
-
const
|
|
7
|
+
const linkedin_properties_1 = require("./linkedin-properties");
|
|
9
8
|
const https_1 = __importDefault(require("https"));
|
|
10
|
-
const api_1 = require("./api");
|
|
11
|
-
const actions_core_2 = require("@segment/actions-core");
|
|
12
9
|
const destination = {
|
|
13
10
|
name: 'Linkedin Audiences',
|
|
14
11
|
slug: 'actions-linkedin-audiences',
|
|
@@ -21,37 +18,20 @@ const destination = {
|
|
|
21
18
|
description: 'The id of the LinkedIn Ad Account where batches should be synced.',
|
|
22
19
|
type: 'string',
|
|
23
20
|
required: true
|
|
24
|
-
},
|
|
25
|
-
send_email: {
|
|
26
|
-
label: 'Send Email',
|
|
27
|
-
description: 'Whether to send `email` to LinkedIn. This setting applies to all mappings you create in this destination instance.',
|
|
28
|
-
type: 'boolean',
|
|
29
|
-
default: true,
|
|
30
|
-
required: true
|
|
31
|
-
},
|
|
32
|
-
send_google_advertising_id: {
|
|
33
|
-
label: 'Send Google Advertising ID',
|
|
34
|
-
description: 'Whether to send Google Advertising ID to LinkedIn. This setting applies to all mappings you create in this destination instance.',
|
|
35
|
-
type: 'boolean',
|
|
36
|
-
default: true,
|
|
37
|
-
required: true
|
|
38
21
|
}
|
|
39
22
|
},
|
|
40
23
|
testAuthentication: async (request, { settings, auth }) => {
|
|
41
24
|
if (!auth?.accessToken) {
|
|
42
|
-
throw new
|
|
25
|
+
throw new Error('Please authenticate via Oauth before updating other settings and/or enabling the destination.');
|
|
43
26
|
}
|
|
44
|
-
if (!settings.send_email && !settings.send_google_advertising_id) {
|
|
45
|
-
throw new Error('At least one of `Send Email` or `Send Google Advertising ID` must be set to `true`.');
|
|
46
|
-
}
|
|
47
|
-
const linkedinApiClient = new api_1.LinkedInAudiences(request);
|
|
48
27
|
let firstRes;
|
|
49
28
|
try {
|
|
50
|
-
firstRes = await
|
|
29
|
+
firstRes = await request(`https://api.linkedin.com/rest/me`, {
|
|
30
|
+
method: 'GET'
|
|
31
|
+
});
|
|
51
32
|
}
|
|
52
33
|
catch (e) {
|
|
53
|
-
|
|
54
|
-
if (error.message === 'Unauthorized') {
|
|
34
|
+
if (e.message === 'Unauthorized') {
|
|
55
35
|
throw new Error('Invalid LinkedIn Oauth access token. Please reauthenticate to retrieve a valid access token before updating other settings and/or enabling the destination.');
|
|
56
36
|
}
|
|
57
37
|
throw e;
|
|
@@ -59,11 +39,12 @@ const destination = {
|
|
|
59
39
|
const userId = firstRes?.data?.id;
|
|
60
40
|
let secondRes;
|
|
61
41
|
try {
|
|
62
|
-
secondRes = await
|
|
42
|
+
secondRes = await request(`https://api.linkedin.com/rest/adAccountUsers/account=urn:li:sponsoredAccount:${settings.ad_account_id}&user=urn:li:person:${userId}`, {
|
|
43
|
+
method: 'GET'
|
|
44
|
+
});
|
|
63
45
|
}
|
|
64
46
|
catch (e) {
|
|
65
|
-
|
|
66
|
-
if (error.message === 'Not Found') {
|
|
47
|
+
if (e.message === 'Not Found') {
|
|
67
48
|
throw new Error('Invalid LinkedIn Ad Account id. Please verify that the LinkedIn Ad Account exists and that you have access to it.');
|
|
68
49
|
}
|
|
69
50
|
throw e;
|
|
@@ -75,25 +56,15 @@ const destination = {
|
|
|
75
56
|
return true;
|
|
76
57
|
},
|
|
77
58
|
refreshAccessToken: async (request, { auth }) => {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
})
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
91
|
-
const error = e;
|
|
92
|
-
if (error.response?.data?.error === 'invalid_grant') {
|
|
93
|
-
throw new actions_core_2.IntegrationError(`Invalid Authentication: Your refresh token is invalid or expired. Please re-authenticate to fetch a new refresh token.`, 'REFRESH_TOKEN_EXPIRED', 401);
|
|
94
|
-
}
|
|
95
|
-
throw new actions_core_2.IntegrationError(`Failed to fetch a new access token. Reason: ${error.response?.data?.error}`, 'OAUTH_REFRESH_FAILED', 401);
|
|
96
|
-
}
|
|
59
|
+
const res = await request('https://www.linkedin.com/oauth/v2/accessToken', {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
body: new URLSearchParams({
|
|
62
|
+
refresh_token: auth.refreshToken,
|
|
63
|
+
client_id: auth.clientId,
|
|
64
|
+
client_secret: auth.clientSecret,
|
|
65
|
+
grant_type: 'refresh_token'
|
|
66
|
+
})
|
|
67
|
+
});
|
|
97
68
|
return { accessToken: res?.data?.access_token };
|
|
98
69
|
}
|
|
99
70
|
},
|
|
@@ -102,7 +73,7 @@ const destination = {
|
|
|
102
73
|
return {
|
|
103
74
|
headers: {
|
|
104
75
|
authorization: `Bearer ${auth?.accessToken}`,
|
|
105
|
-
'LinkedIn-Version':
|
|
76
|
+
'LinkedIn-Version': linkedin_properties_1.LINKEDIN_API_VERSION
|
|
106
77
|
},
|
|
107
78
|
agent
|
|
108
79
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/linkedin-audiences/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/linkedin-audiences/index.ts"],"names":[],"mappings":";;;;;AAEA,sEAA6C;AAC7C,+DAA4D;AAC5D,kDAAyB;AAiBzB,MAAM,WAAW,GAAoC;IAGnD,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,4BAA4B;IAClC,IAAI,EAAE,OAAO;IAEb,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE;YACN,aAAa,EAAE;gBACb,KAAK,EAAE,wBAAwB;gBAC/B,WAAW,EAAE,mEAAmE;gBAChF,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;SACF;QACD,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;YACxD,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAA;aACjH;YAED,IAAI,QAAQ,CAAA;YAEZ,IAAI;gBAGF,QAAQ,GAAG,MAAM,OAAO,CAAqB,kCAAkC,EAAE;oBAC/E,MAAM,EAAE,KAAK;iBACd,CAAC,CAAA;aACH;YAAC,OAAO,CAAM,EAAE;gBACf,IAAI,CAAC,CAAC,OAAO,KAAK,cAAc,EAAE;oBAChC,MAAM,IAAI,KAAK,CACb,6JAA6J,CAC9J,CAAA;iBACF;gBACD,MAAM,CAAC,CAAA;aACR;YAED,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAA;YAEjC,IAAI,SAAS,CAAA;YAEb,IAAI;gBAGF,SAAS,GAAG,MAAM,OAAO,CACvB,gFAAgF,QAAQ,CAAC,aAAa,uBAAuB,MAAM,EAAE,EACrI;oBACE,MAAM,EAAE,KAAK;iBACd,CACF,CAAA;aACF;YAAC,OAAO,CAAM,EAAE;gBACf,IAAI,CAAC,CAAC,OAAO,KAAK,WAAW,EAAE;oBAC7B,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAA;iBACF;gBACD,MAAM,CAAC,CAAA;aACR;YAED,MAAM,QAAQ,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,CAAA;YAErC,IAAI,QAAQ,KAAK,QAAQ,EAAE;gBACzB,MAAM,IAAI,KAAK,CACb,gJAAgJ,CACjJ,CAAA;aACF;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QACD,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAuB,+CAA+C,EAAE;gBAC/F,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,eAAe,CAAC;oBACxB,aAAa,EAAE,IAAI,CAAC,YAAY;oBAChC,SAAS,EAAE,IAAI,CAAC,QAAQ;oBACxB,aAAa,EAAE,IAAI,CAAC,YAAY;oBAChC,UAAU,EAAE,eAAe;iBAC5B,CAAC;aACH,CAAC,CAAA;YAEF,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;QACjD,CAAC;KACF;IACD,aAAa,CAAC,EAAE,IAAI,EAAE;QAGpB,MAAM,KAAK,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAElD,OAAO;YACL,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,EAAE,WAAW,EAAE;gBAC5C,kBAAkB,EAAE,0CAAoB;aACzC;YACD,KAAK;SACN,CAAA;IACH,CAAC;IAED,OAAO,EAAE;QACP,cAAc,EAAd,wBAAc;KACf;CACF,CAAA;AAED,kBAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LINKEDIN_API_VERSION = "202207";
|