import { ConfigurationError } from "@pipedream/platform";
import gist from "../../gist.app.mjs";
export default {
key: "gist-create-or-update-contact",
name: "Create Or Update Contact",
description: "Create or update a contact in Gist [See docs](https://developers.getgist.com/api/#create-or-update-a-contact)",
type: "action",
version: "0.0.1",
props: {
gist,
email: {
propDefinition: [
gist,
"email",
],
optional: true,
},
userId: {
propDefinition: [
gist,
"userId",
],
optional: true,
},
name: {
label: "Name",
description: "The full name of the contact",
type: "string",
optional: true,
},
phone: {
label: "Phone",
description: "The contact number of the contact",
type: "string",
optional: true,
},
signedUpAt: {
label: "Signed Up At",
description: "The time the contact signed up",
type: "string",
optional: true,
},
lastSeenIp: {
label: "Last Seen Ip",
description: "The last IP address the contact visited your website from",
type: "string",
optional: true,
},
lastSeenUserAgent: {
label: "Last Seen User Agent",
description: "The last contact agent the contact was seen using",
type: "string",
optional: true,
},
customProperties: {
label: "Custom Properties",
description: "A JSON object containing the contact's custom properties. E.g. { \"name\": \"John Doe\" }",
type: "object",
optional: true,
},
unsubscribedFromEmails: {
label: "Unsubscribed From Emails",
description: "If the contact has unsubscribed from emails or not",
type: "boolean",
optional: true,
},
tagId: {
propDefinition: [
gist,
"tagId",
],
type: "string[]",
optional: true,
},
},
async run({ $ }) {
const {
userId,
signedUpAt,
lastSeenIp,
lastSeenUserAgent,
customProperties,
unsubscribedFromEmails,
tagId,
...data
} = this;
if (!userId && !this.email) {
throw new ConfigurationError("You must fill in at least **User Id** or **Email**");
}
const response = await this.gist.createOrUpdateContact({
$,
data: {
id: userId,
signed_up_at: signedUpAt,
last_seen_ip: lastSeenIp,
last_seen_user_agent: lastSeenUserAgent,
custom_properties: customProperties,
unsubscribed_from_emails: unsubscribedFromEmails,
tags: tagId && tagId.map((tag) => tag.label),
...data,
},
});
const action = (response.contact?.created_at != response.contact?.updated_at)
? "updated"
: "created";
$.export("$summary", `Successfully ${action} ${this.name || this.email} contact`);
return response;
},
};