sources/new-segment-tag-subscriber/new-segment-tag-subscriber.mjs
import common from "../common/timer-based.mjs"; import constants from "../constants.mjs"; export default { ...common, key: "mailchimp-new-segment-tag-subscriber", name: "New Segment Tag Subscriber", description: "Emit new event when a subscriber is added to a segment or tags within an audience list.", version: "0.0.2", type: "source", dedupe: "unique", props: { ...common.props, listId: { propDefinition: [ common.props.mailchimp, "listId", ], description: "The unique ID of the audience list related to the segment or tag you'd like to watch for new subscribers", }, segmentId: { propDefinition: [ common.props.mailchimp, "segmentId", (c) => ({ listId: c.listId, }), ], }, includeTransactional: { propDefinition: [ common.props.mailchimp, "includeTransactional", ], }, }, hooks: { async deploy() { const config = { count: 10, offset: 0, includeTransactional: this.includeTransactional, includeUnsubscribed: false, }; const subscribers = await this.mailchimp.getSegmentMembersList( this.listId, this.segmentId, config, ); if (!subscribers?.length) { console.log("No data available, skipping iteration"); return; } subscribers.forEach(this.processEvent); }, }, methods: { ...common.methods, generateMeta(eventPayload) { const ts = Date.parse(eventPayload.timestamp_opt); return { id: eventPayload.id, summary: `A new subscriber "${eventPayload.merge_fields.FNAME}" was added to a segment or tag. `, ts, }; }, }, async run() { const pageSize = constants.PAGE_SIZE; let mailchimpSegmentMembersInfo; let mailchimpSegmentMembers; let offset = 0; const config = { count: pageSize, includeTransactional: this.includeTransactional, includeUnsubscribed: false, }; do { config.offset = offset; mailchimpSegmentMembersInfo = await this.mailchimp.getSegmentMembersList( this.listId, this.segmentId, config, ); mailchimpSegmentMembers = mailchimpSegmentMembersInfo.members; if (!mailchimpSegmentMembers?.length) { return; } mailchimpSegmentMembers.forEach(this.processEvent); offset = offset + mailchimpSegmentMembers.length; } while (mailchimpSegmentMembers.length === pageSize); }, };