Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { parseObject } from "../../common/utils.mjs";
import pingback from "../../pingback.app.mjs";

export default {
name: "Add Subscriber To Segmentation Lists",
description: "Add a subscriber to segmentation lists by email [See the documentation](https://developer.pingback.com/docs/api/add-subscriber-to-segment)",
key: "pingback-add-subscriber-to-segmentation-lists",
version: "0.0.1",
type: "action",
props: {
pingback,
email: {
propDefinition: [
pingback,
"email",
],
},
segmentationLists: {
propDefinition: [
pingback,
"segmentationLists",
],
},
},
async run({ $ }) {
const response = await this.pingback.addSubscriberToSegmentationLists({
$,
email: this.email,
data: {
segmentationLists: parseObject(this.segmentationLists),
},
});

$.export("$summary", `Subscriber ${this.email} added to segmentation list(s) successfully`);
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import {
parseCustomFields,
parseObject,
} from "../../common/utils.mjs";
import pingback from "../../pingback.app.mjs";

export default {
name: "Create Subscriber",
description: "Create a new subscriber [See the documentation](https://developer.pingback.com/docs/api/create-subscriber)",
key: "pingback-create-subscriber",
version: "0.0.1",
type: "action",
props: {
pingback,
email: {
propDefinition: [
pingback,
"email",
],
},
phone: {
propDefinition: [
pingback,
"phone",
],
},
name: {
propDefinition: [
pingback,
"name",
],
},
status: {
propDefinition: [
pingback,
"status",
],
},
customFields: {
propDefinition: [
pingback,
"customFields",
],
},
segmentationLists: {
propDefinition: [
pingback,
"segmentationLists",
],
},
},
async run({ $ }) {
const data = {
email: this.email,
phone: this.phone,
name: this.name,
status: this.status,
segmentationLists: parseObject(this.segmentationLists),
};

data.customFields = parseCustomFields(this.customFields);

const response = await this.pingback.createSubscriber({
$,
data,
});

$.export("$summary", `Subscriber created successfully with ID: ${response.data.data.id}`);
return response;
},
};
32 changes: 32 additions & 0 deletions components/pingback/actions/get-subscriber/get-subscriber.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { ConfigurationError } from "@pipedream/platform";
import pingback from "../../pingback.app.mjs";

export default {
name: "Get Subscriber",
description: "Get a subscriber by email [See the documentation](https://developer.pingback.com/docs/api/get-subscriber)",
key: "pingback-get-subscriber",
version: "0.0.1",
type: "action",
props: {
pingback,
email: {
propDefinition: [
pingback,
"email",
],
},
},
async run({ $ }) {
try {
const response = await this.pingback.getSubscriber({
$,
email: this.email,
});

$.export("$summary", `Subscriber retrieved successfully with email: ${response.data.data.email}`);
return response;
} catch ({ response }) {
throw new ConfigurationError(response.data.error);
}
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import pingback from "../../pingback.app.mjs";

export default {
name: "Remove Subscriber From Segmentation List",
description: "Remove a subscriber from a segmentation list by email [See the documentation](https://developer.pingback.com/docs/api/remove-subscriber-from-segment)",
key: "pingback-remove-subscriber-from-segmentation-list",
version: "0.0.1",
type: "action",
props: {
pingback,
email: {
propDefinition: [
pingback,
"email",
],
},
segmentationListId: {
propDefinition: [
pingback,
"segmentationLists",
],
type: "string[]",
label: "Segmentation Lists",
description: "Segmentation list ID to remove the subscriber from. You can get the ID by clicking audience and lists at Pingback dashboard.",
},
},
async run({ $ }) {
const response = await this.pingback.removeSubscriberFromSegmentationList({
$,
email: this.email,
segmentationListId: this.segmentationListId,
});

$.export("$summary", `Subscriber ${this.email} removed from segmentation list ${this.segmentationListId} successfully`);
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { parseCustomFields } from "../../common/utils.mjs";
import pingback from "../../pingback.app.mjs";

export default {
name: "Update Subscriber",
description: "Update a specific subscriber by email [See the documentation](https://developer.pingback.com/docs/api/update-subscriber)",
key: "pingback-update-subscriber",
version: "0.0.1",
type: "action",
props: {
pingback,
email: {
propDefinition: [
pingback,
"email",
],
},
phone: {
propDefinition: [
pingback,
"phone",
],
},
name: {
propDefinition: [
pingback,
"name",
],
},
status: {
propDefinition: [
pingback,
"status",
],
},
customFields: {
propDefinition: [
pingback,
"customFields",
],
},
},
async run({ $ }) {
const data = {
phone: this.phone,
name: this.name,
status: this.status,
};

data.customFields = parseCustomFields(this.customFields);

const response = await this.pingback.updateSubscriber({
$,
email: this.email,
data,
});

$.export("$summary", `Subscriber updated successfully with ID: ${response.data.data.id}`);
return response;
},
};
14 changes: 14 additions & 0 deletions components/pingback/common/constants.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
export const STATUS_OPTIONS = [
{
label: "Free Subscriber",
value: "free_subscriber",
},
{
label: "Paid Subscriber",
value: "paid_subscriber",
},
{
label: "Unsubscribed Subscriber",
value: "unsubscribed_subscriber",
},
];
37 changes: 37 additions & 0 deletions components/pingback/common/utils.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
export const parseObject = (obj) => {
if (!obj) return undefined;

if (Array.isArray(obj)) {
return obj.map((item) => {
if (typeof item === "string") {
try {
return JSON.parse(item);
} catch (e) {
return item;
}
}
return item;
});
}
if (typeof obj === "string") {
try {
return JSON.parse(obj);
} catch (e) {
return obj;
}
}
return obj;
};

export const parseCustomFields = (customFields) => {
const parsedCustomFields = Object.entries(parseObject(customFields) || {});
if (parsedCustomFields.length) {
return parsedCustomFields.map(([
key,
value,
]) => ({
label: key,
value,
}));
}
};
7 changes: 5 additions & 2 deletions components/pingback/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pipedream/pingback",
"version": "0.0.1",
"version": "0.1.0",
"description": "Pipedream Pingback Components",
"main": "pingback.app.mjs",
"keywords": [
Expand All @@ -11,5 +11,8 @@
"author": "Pipedream <[email protected]> (https://pipedream.com/)",
"publishConfig": {
"access": "public"
},
"dependencies": {
"@pipedream/platform": "^3.1.0"
}
}
}
Loading
Loading