diff --git a/components/godaddy/actions/check-domain-availability/check-domain-availability.mjs b/components/godaddy/actions/check-domain-availability/check-domain-availability.mjs new file mode 100644 index 0000000000000..9ca601c5dd6ea --- /dev/null +++ b/components/godaddy/actions/check-domain-availability/check-domain-availability.mjs @@ -0,0 +1,45 @@ +import godaddy from "../../godaddy.app.mjs"; + +export default { + key: "godaddy-check-domain-availability", + name: "Check Domain Availability", + description: "Check the availability of a domain. [See the documentation](https://developer.godaddy.com/doc/endpoint/domains#/v1/available)", + version: "0.0.1", + type: "action", + props: { + godaddy, + domain: { + type: "string", + label: "Domain", + description: "The domain to check availability for", + }, + checkType: { + type: "string", + label: "Check Type", + description: "Optimize for time ('FAST') or accuracy ('FULL')", + options: [ + "FAST", + "FULL", + ], + optional: true, + }, + forTransfer: { + type: "boolean", + label: "For Transfer", + description: "Whether or not to include domains available for transfer. If set to `true`, checkType is ignored", + optional: true, + }, + }, + async run({ $ }) { + const response = await this.godaddy.checkDomainAvailability({ + $, + params: { + domain: this.domain, + checkType: this.checkType, + forTransfer: this.forTransfer, + }, + }); + $.export("$summary", `Successfully checked domain availability for ${this.domain}`); + return response; + }, +}; diff --git a/components/godaddy/actions/list-domains/list-domains.mjs b/components/godaddy/actions/list-domains/list-domains.mjs new file mode 100644 index 0000000000000..65226d6ddf899 --- /dev/null +++ b/components/godaddy/actions/list-domains/list-domains.mjs @@ -0,0 +1,64 @@ +import godaddy from "../../godaddy.app.mjs"; + +export default { + key: "godaddy-list-domains", + name: "List Domains", + description: "List domains in GoDaddy. [See the documentation](https://developer.godaddy.com/doc/endpoint/domains#/v1/list)", + version: "0.0.1", + type: "action", + props: { + godaddy, + statuses: { + propDefinition: [ + godaddy, + "statuses", + ], + }, + statusGroups: { + propDefinition: [ + godaddy, + "statusGroups", + ], + }, + limit: { + type: "integer", + label: "Limit", + description: "Maximum number of domains to return", + optional: true, + }, + marker: { + type: "string", + label: "Marker", + description: "Marker Domain to use as the offset in results", + optional: true, + }, + includes: { + propDefinition: [ + godaddy, + "includes", + ], + }, + modifiedDate: { + type: "string", + label: "Modified Date", + description: "Only include results that have been modified since the specified date", + optional: true, + }, + }, + async run({ $ }) { + const domains = await this.godaddy.listDomains({ + $, + params: { + statuses: this.statuses, + statusGroups: this.statusGroups, + limit: this.limit, + marker: this.marker, + includes: this.includes, + modifiedDate: this.modifiedDate, + }, + }); + + $.export("$summary", `Found ${domains.length} domain(s)`); + return domains; + }, +}; diff --git a/components/godaddy/actions/renew-domain/renew-domain.mjs b/components/godaddy/actions/renew-domain/renew-domain.mjs new file mode 100644 index 0000000000000..89aa551dae8d0 --- /dev/null +++ b/components/godaddy/actions/renew-domain/renew-domain.mjs @@ -0,0 +1,37 @@ +import godaddy from "../../godaddy.app.mjs"; + +export default { + key: "godaddy-renew-domain", + name: "Renew Domain", + description: "Renew a domain in GoDaddy. [See the documentation](https://developer.godaddy.com/doc/endpoint/domains#/v1/renew)", + version: "0.0.1", + type: "action", + props: { + godaddy, + domain: { + propDefinition: [ + godaddy, + "domain", + ], + }, + period: { + type: "integer", + label: "Period", + description: "Number of years to extend the Domain. Must not exceed maximum for TLD. When omitted, defaults to period specified during original purchase.", + max: 10, + min: 1, + optional: true, + }, + }, + async run({ $ }) { + const response = await this.godaddy.renewDomain({ + $, + domain: this.domain, + data: { + period: this.period, + }, + }); + $.export("$summary", `Renewed domain ${this.domain}`); + return response; + }, +}; diff --git a/components/godaddy/actions/suggest-domains/suggest-domains.mjs b/components/godaddy/actions/suggest-domains/suggest-domains.mjs new file mode 100644 index 0000000000000..33b9d068e0889 --- /dev/null +++ b/components/godaddy/actions/suggest-domains/suggest-domains.mjs @@ -0,0 +1,86 @@ +import godaddy from "../../godaddy.app.mjs"; +import constants from "../../common/constants.mjs"; + +export default { + key: "godaddy-suggest-domains", + name: "Suggest Domains", + description: "Suggest domains based on the given criteria. [See the documentation](https://developer.godaddy.com/doc/endpoint/domains#/v1/suggest)", + version: "0.0.1", + type: "action", + props: { + godaddy, + query: { + type: "string", + label: "Query", + description: "Domain name or set of keywords for which alternative domain names will be suggested", + }, + country: { + type: "string", + label: "Country", + description: "Two-letter ISO country code to be used as a hint for target region", + optional: true, + }, + city: { + type: "string", + label: "City", + description: "Name of city to be used as a hint for target region", + optional: true, + }, + sources: { + type: "string[]", + label: "Sources", + description: "Sources to be queried", + options: constants.DOMAIN_SUGGESTION_SOURCES, + optional: true, + }, + tlds: { + propDefinition: [ + godaddy, + "tlds", + ], + }, + lengthMax: { + type: "integer", + label: "Length Max", + description: "Maximum length of second-level domain", + optional: true, + }, + lengthMin: { + type: "integer", + label: "Length Min", + description: "Minimum length of second-level domain", + optional: true, + }, + limit: { + type: "integer", + label: "Limit", + description: "Maximum number of suggestions to return", + optional: true, + }, + waitMs: { + type: "integer", + label: "Wait Ms", + description: "Maximum amount of time, in milliseconds, to wait for responses. If elapses, return the results compiled up to that point", + optional: true, + }, + }, + async run({ $ }) { + const domains = await this.godaddy.suggestDomains({ + $, + params: { + query: this.query, + country: this.country, + city: this.city, + sources: this.sources, + tlds: this.tlds, + lengthMax: this.lengthMax, + lengthMin: this.lengthMin, + limit: this.limit, + waitMs: this.waitMs, + }, + }); + + $.export("$summary", `Found ${domains.length} domain(s)`); + return domains; + }, +}; diff --git a/components/godaddy/common/constants.mjs b/components/godaddy/common/constants.mjs new file mode 100644 index 0000000000000..77888e42cbc74 --- /dev/null +++ b/components/godaddy/common/constants.mjs @@ -0,0 +1,259 @@ +const DOMAIN_STATUSES = [ + "ACTIVE", + "AWAITING_CLAIM_ACK", + "AWAITING_DOCUMENT_AFTER_TRANSFER", + "AWAITING_DOCUMENT_AFTER_UPDATE_ACCOUNT", + "AWAITING_DOCUMENT_UPLOAD", + "AWAITING_FAILED_TRANSFER_WHOIS_PRIVACY", + "AWAITING_PAYMENT", + "AWAITING_RENEWAL_TRANSFER_IN_COMPLETE", + "AWAITING_TRANSFER_IN_ACK", + "AWAITING_TRANSFER_IN_AUTH", + "AWAITING_TRANSFER_IN_AUTO", + "AWAITING_TRANSFER_IN_WHOIS", + "AWAITING_TRANSFER_IN_WHOIS_FIX", + "AWAITING_VERIFICATION_ICANN", + "AWAITING_VERIFICATION_ICANN_MANUAL", + "CANCELLED", + "CANCELLED_HELD", + "CANCELLED_REDEEMABLE", + "CANCELLED_TRANSFER", + "CONFISCATED", + "DISABLED_SPECIAL", + "EXCLUDED_INVALID_CLAIM_FIREHOSE", + "EXPIRED_REASSIGNED", + "FAILED_BACKORDER_CAPTURE", + "FAILED_DROP_IMMEDIATE_THEN_ADD", + "FAILED_PRE_REGISTRATION", + "FAILED_REDEMPTION", + "FAILED_REDEMPTION_REPORT", + "FAILED_REGISTRATION", + "FAILED_REGISTRATION_FIREHOSE", + "FAILED_RESTORATION_REDEMPTION_MOCK", + "FAILED_SETUP", + "FAILED_TRANSFER_IN", + "FAILED_TRANSFER_IN_BAD_STATUS", + "FAILED_TRANSFER_IN_REGISTRY", + "HELD_COURT_ORDERED", + "HELD_DISPUTED", + "HELD_EXPIRATION_PROTECTION", + "HELD_EXPIRED_REDEMPTION_MOCK", + "HELD_REGISTRAR_ADD", + "HELD_REGISTRAR_REMOVE", + "HELD_SHOPPER", + "HELD_TEMPORARY", + "LOCKED_ABUSE", + "LOCKED_COPYRIGHT", + "LOCKED_REGISTRY", + "LOCKED_SUPER", + "PARKED_AND_HELD", + "PARKED_EXPIRED", + "PARKED_VERIFICATION_ICANN", + "PENDING_ABORT_CANCEL_SETUP", + "PENDING_AGREEMENT_PRE_REGISTRATION", + "PENDING_APPLY_RENEWAL_CREDITS", + "PENDING_BACKORDER_CAPTURE", + "PENDING_BLOCKED_REGISTRY", + "PENDING_CANCEL_REGISTRANT_PROFILE", + "PENDING_COMPLETE_REDEMPTION_WITHOUT_RECEIPT", + "PENDING_COMPLETE_REGISTRANT_PROFILE", + "PENDING_COO", + "PENDING_COO_COMPLETE", + "PENDING_DNS", + "PENDING_DNS_ACTIVE", + "PENDING_DNS_INACTIVE", + "PENDING_DOCUMENT_VALIDATION", + "PENDING_DOCUMENT_VERIFICATION", + "PENDING_DROP_IMMEDIATE", + "PENDING_DROP_IMMEDIATE_THEN_ADD", + "PENDING_EPP_CREATE", + "PENDING_EPP_DELETE", + "PENDING_EPP_UPDATE", + "PENDING_ESCALATION_REGISTRY", + "PENDING_EXPIRATION", + "PENDING_EXPIRATION_RESPONSE", + "PENDING_EXPIRATION_SYNC", + "PENDING_EXPIRED_REASSIGNMENT", + "PENDING_EXPIRE_AUTO_ADD", + "PENDING_EXTEND_REGISTRANT_PROFILE", + "PENDING_FAILED_COO", + "PENDING_FAILED_EPP_CREATE", + "PENDING_FAILED_HELD", + "PENDING_FAILED_PURCHASE_PREMIUM", + "PENDING_FAILED_RECONCILE_FIREHOSE", + "PENDING_FAILED_REDEMPTION_WITHOUT_RECEIPT", + "PENDING_FAILED_RELEASE_PREMIUM", + "PENDING_FAILED_RENEW_EXPIRATION_PROTECTION", + "PENDING_FAILED_RESERVE_PREMIUM", + "PENDING_FAILED_SUBMIT_FIREHOSE", + "PENDING_FAILED_TRANSFER_ACK_PREMIUM", + "PENDING_FAILED_TRANSFER_IN_ACK_PREMIUM", + "PENDING_FAILED_TRANSFER_IN_PREMIUM", + "PENDING_FAILED_TRANSFER_PREMIUM", + "PENDING_FAILED_TRANSFER_SUBMIT_PREMIUM", + "PENDING_FAILED_UNLOCK_PREMIUM", + "PENDING_FAILED_UPDATE_API", + "PENDING_FRAUD_VERIFICATION", + "PENDING_FRAUD_VERIFIED", + "PENDING_GET_CONTACTS", + "PENDING_GET_HOSTS", + "PENDING_GET_NAME_SERVERS", + "PENDING_GET_STATUS", + "PENDING_HOLD_ESCROW", + "PENDING_HOLD_REDEMPTION", + "PENDING_LOCK_CLIENT_REMOVE", + "PENDING_LOCK_DATA_QUALITY", + "PENDING_LOCK_THEN_HOLD_REDEMPTION", + "PENDING_PARKING_DETERMINATION", + "PENDING_PARK_INVALID_WHOIS", + "PENDING_PARK_INVALID_WHOIS_REMOVAL", + "PENDING_PURCHASE_PREMIUM", + "PENDING_RECONCILE", + "PENDING_RECONCILE_FIREHOSE", + "PENDING_REDEMPTION", + "PENDING_REDEMPTION_REPORT", + "PENDING_REDEMPTION_REPORT_COMPLETE", + "PENDING_REDEMPTION_REPORT_SUBMITTED", + "PENDING_REDEMPTION_WITHOUT_RECEIPT", + "PENDING_REDEMPTION_WITHOUT_RECEIPT_MOCK", + "PENDING_RELEASE_PREMIUM", + "PENDING_REMOVAL", + "PENDING_REMOVAL_HELD", + "PENDING_REMOVAL_PARKED", + "PENDING_REMOVAL_UNPARK", + "PENDING_RENEWAL", + "PENDING_RENEW_EXPIRATION_PROTECTION", + "PENDING_RENEW_INFINITE", + "PENDING_RENEW_LOCKED", + "PENDING_RENEW_WITHOUT_RECEIPT", + "PENDING_REPORT_REDEMPTION_WITHOUT_RECEIPT", + "PENDING_RESERVE_PREMIUM", + "PENDING_RESET_VERIFICATION_ICANN", + "PENDING_RESPONSE_FIREHOSE", + "PENDING_RESTORATION", + "PENDING_RESTORATION_INACTIVE", + "PENDING_RESTORATION_REDEMPTION_MOCK", + "PENDING_RETRY_EPP_CREATE", + "PENDING_RETRY_HELD", + "PENDING_SEND_AUTH_CODE", + "PENDING_SETUP", + "PENDING_SETUP_ABANDON", + "PENDING_SETUP_AGREEMENT_LANDRUSH", + "PENDING_SETUP_AGREEMENT_SUNRISE2_A", + "PENDING_SETUP_AGREEMENT_SUNRISE2_B", + "PENDING_SETUP_AGREEMENT_SUNRISE2_C", + "PENDING_SETUP_AUTH", + "PENDING_SETUP_DNS", + "PENDING_SETUP_FAILED", + "PENDING_SETUP_REVIEW", + "PENDING_SETUP_SUNRISE", + "PENDING_SETUP_SUNRISE_PRE", + "PENDING_SETUP_SUNRISE_RESPONSE", + "PENDING_SUBMIT_FAILURE", + "PENDING_SUBMIT_FIREHOSE", + "PENDING_SUBMIT_HOLD_FIREHOSE", + "PENDING_SUBMIT_HOLD_LANDRUSH", + "PENDING_SUBMIT_HOLD_SUNRISE", + "PENDING_SUBMIT_LANDRUSH", + "PENDING_SUBMIT_RESPONSE_FIREHOSE", + "PENDING_SUBMIT_RESPONSE_LANDRUSH", + "PENDING_SUBMIT_RESPONSE_SUNRISE", + "PENDING_SUBMIT_SUCCESS_FIREHOSE", + "PENDING_SUBMIT_SUCCESS_LANDRUSH", + "PENDING_SUBMIT_SUCCESS_SUNRISE", + "PENDING_SUBMIT_SUNRISE", + "PENDING_SUBMIT_WAITING_LANDRUSH", + "PENDING_SUCCESS_PRE_REGISTRATION", + "PENDING_SUSPENDED_DATA_QUALITY", + "PENDING_TRANSFER_ACK_PREMIUM", + "PENDING_TRANSFER_IN", + "PENDING_TRANSFER_IN_ACK", + "PENDING_TRANSFER_IN_ACK_PREMIUM", + "PENDING_TRANSFER_IN_BAD_REGISTRANT", + "PENDING_TRANSFER_IN_CANCEL", + "PENDING_TRANSFER_IN_CANCEL_REGISTRY", + "PENDING_TRANSFER_IN_COMPLETE_ACK", + "PENDING_TRANSFER_IN_DELETE", + "PENDING_TRANSFER_IN_LOCK", + "PENDING_TRANSFER_IN_NACK", + "PENDING_TRANSFER_IN_NOTIFICATION", + "PENDING_TRANSFER_IN_PREMIUM", + "PENDING_TRANSFER_IN_RELEASE", + "PENDING_TRANSFER_IN_RESPONSE", + "PENDING_TRANSFER_IN_UNDERAGE", + "PENDING_TRANSFER_OUT", + "PENDING_TRANSFER_OUT_ACK", + "PENDING_TRANSFER_OUT_NACK", + "PENDING_TRANSFER_OUT_PREMIUM", + "PENDING_TRANSFER_OUT_UNDERAGE", + "PENDING_TRANSFER_OUT_VALIDATION", + "PENDING_TRANSFER_PREMIUM", + "PENDING_TRANSFER_SUBMIT_PREMIUM", + "PENDING_UNLOCK_DATA_QUALITY", + "PENDING_UNLOCK_PREMIUM", + "PENDING_UPDATE", + "PENDING_UPDATED_REGISTRANT_DATA_QUALITY", + "PENDING_UPDATE_ACCOUNT", + "PENDING_UPDATE_API", + "PENDING_UPDATE_API_RESPONSE", + "PENDING_UPDATE_AUTH", + "PENDING_UPDATE_CONTACTS", + "PENDING_UPDATE_CONTACTS_PRIVACY", + "PENDING_UPDATE_DNS", + "PENDING_UPDATE_DNS_SECURITY", + "PENDING_UPDATE_ELIGIBILITY", + "PENDING_UPDATE_EPP_CONTACTS", + "PENDING_UPDATE_MEMBERSHIP", + "PENDING_UPDATE_OWNERSHIP", + "PENDING_UPDATE_OWNERSHIP_AUTH_AUCTION", + "PENDING_UPDATE_OWNERSHIP_HELD", + "PENDING_UPDATE_REGISTRANT", + "PENDING_UPDATE_REPO", + "PENDING_VALIDATION_DATA_QUALITY", + "PENDING_VERIFICATION_FRAUD", + "PENDING_VERIFICATION_STATUS", + "PENDING_VERIFY_REGISTRANT_DATA_QUALITY", + "RESERVED", + "RESERVED_PREMIUM", + "REVERTED", + "SUSPENDED_VERIFICATION_ICANN", + "TRANSFERRED_OUT", + "UNLOCKED_ABUSE", + "UNLOCKED_SUPER", + "UNPARKED_AND_UNHELD", + "UPDATED_OWNERSHIP", + "UPDATED_OWNERSHIP_HELD", +]; + +const STATUS_GROUPS = [ + "INACTIVE", + "PRE_REGISTRATION", + "REDEMPTION", + "RENEWABLE", + "VERIFICATION_ICANN", + "VISIBLE", +]; + +const DOMAIN_DETAIL_FIELDS = [ + "authCode", + "contacts", + "nameServers", +]; + +const DOMAIN_SUGGESTION_SOURCES = [ + "CC_TLD", + "EXTENSION", + "KEYWORD_SPIN", + "PREMIUM", + "cctld", + "extension", + "keywordspin", + "premium", +]; + +export default { + DOMAIN_STATUSES, + STATUS_GROUPS, + DOMAIN_DETAIL_FIELDS, + DOMAIN_SUGGESTION_SOURCES, +}; diff --git a/components/godaddy/godaddy.app.mjs b/components/godaddy/godaddy.app.mjs index 080f2d4ba0a48..1dcfdba71e34e 100644 --- a/components/godaddy/godaddy.app.mjs +++ b/components/godaddy/godaddy.app.mjs @@ -1,11 +1,137 @@ +import { axios } from "@pipedream/platform"; +import constants from "./common/constants.mjs"; + export default { type: "app", app: "godaddy", - propDefinitions: {}, + propDefinitions: { + domain: { + type: "string", + label: "Domain", + description: "A domain name", + async options({ prevContext }) { + const domains = await this.listDomains({ + params: { + marker: prevContext?.marker, + }, + }); + const options = domains.map((domain) => domain.domain); + return { + options, + context: { + marker: options.length > 0 + ? options[options.length - 1] + : undefined, + }, + }; + }, + }, + tlds: { + type: "string[]", + label: "TLDs", + description: "Top-level domains to be included in suggestions", + optional: true, + async options() { + const tlds = await this.listTlds(); + return tlds.map((tld) => tld.name); + }, + }, + statuses: { + type: "string[]", + label: "Statuses", + description: "Filter by status", + options: constants.DOMAIN_STATUSES, + optional: true, + }, + statusGroups: { + type: "string[]", + label: "Status Groups", + description: "Filter by status group", + options: constants.STATUS_GROUPS, + optional: true, + }, + includes: { + type: "string[]", + label: "Includes", + description: "Optional details to be included in the response", + options: constants.DOMAIN_DETAIL_FIELDS, + optional: true, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return `${this.$auth.api_url}/v1`; + }, + _makeRequest({ + $ = this, + path, + ...opts + }) { + return axios($, { + url: `${this._baseUrl()}${path}`, + headers: { + "Authorization": `sso-key ${this.$auth.api_key}:${this.$auth.api_secret}`, + }, + ...opts, + }); + }, + listDomains(opts = {}) { + return this._makeRequest({ + path: "/domains", + ...opts, + }); + }, + listTlds(opts = {}) { + return this._makeRequest({ + path: "/domains/tlds", + ...opts, + }); + }, + checkDomainAvailability(opts = {}) { + return this._makeRequest({ + path: "/domains/available", + ...opts, + }); + }, + renewDomain({ + domain, ...opts + }) { + return this._makeRequest({ + method: "POST", + path: `/domains/${domain}/renew`, + ...opts, + }); + }, + suggestDomains(opts = {}) { + return this._makeRequest({ + path: "/domains/suggest", + ...opts, + }); + }, + async *paginate({ + fn, params = {}, max, + }) { + params = { + ...params, + limit: 100, + }; + let total, count = 0; + do { + const results = await fn({ + params, + }); + if (!results?.length) { + return; + } + for (const item of results) { + yield item; + if (max && ++count >= max) { + return; + } + } + total = results?.length; + params.marker = results[results.length - 1].domain; + } while (total === params.limit); }, }, }; diff --git a/components/godaddy/package.json b/components/godaddy/package.json index 03ebbea859d45..78d34fe21927a 100644 --- a/components/godaddy/package.json +++ b/components/godaddy/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/godaddy", - "version": "0.0.4", + "version": "0.1.0", "description": "Pipedream GoDaddy Components", "main": "godaddy.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.1.0" } } diff --git a/components/godaddy/sources/common/base.mjs b/components/godaddy/sources/common/base.mjs new file mode 100644 index 0000000000000..7fee4dfcd1b4d --- /dev/null +++ b/components/godaddy/sources/common/base.mjs @@ -0,0 +1,23 @@ +import godaddy from "../../godaddy.app.mjs"; +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; + +export default { + props: { + godaddy, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + methods: { + _getLastTs() { + return this.db.get("lastTs"); + }, + _setLastTs(lastTs) { + this.db.set("lastTs", lastTs); + }, + }, +}; diff --git a/components/godaddy/sources/new-domain-added/new-domain-added.mjs b/components/godaddy/sources/new-domain-added/new-domain-added.mjs new file mode 100644 index 0000000000000..aaa16969e3129 --- /dev/null +++ b/components/godaddy/sources/new-domain-added/new-domain-added.mjs @@ -0,0 +1,80 @@ +import common from "../common/base.mjs"; + +export default { + ...common, + key: "godaddy-new-domain-added", + name: "New Domain Added", + description: "Emit new event when a new domain is added. [See the documentation](https://developer.godaddy.com/doc/endpoint/domains#/v1/list)", + version: "0.0.1", + type: "source", + dedupe: "unique", + props: { + ...common.props, + statuses: { + propDefinition: [ + common.props.godaddy, + "statuses", + ], + }, + statusGroups: { + propDefinition: [ + common.props.godaddy, + "statusGroups", + ], + }, + includes: { + propDefinition: [ + common.props.godaddy, + "includes", + ], + }, + }, + methods: { + ...common.methods, + generateMeta(domain) { + return { + id: domain.domain, + summary: domain.domain, + ts: Date.parse(domain.createdAt), + }; + }, + async processEvents(max) { + const lastTs = this._getLastTs(); + const domains = []; + + const results = this.godaddy.paginate({ + fn: this.godaddy.listDomains, + params: { + statuses: this.statuses, + statusGroups: this.statusGroups, + includes: this.includes, + modifiedDate: lastTs, + }, + max, + }); + + for await (const domain of results) { + domains.push(domain); + } + + if (!domains.length) { + return; + } + + this._setLastTs(domains[domains.length - 1].createdAt); + + domains.forEach((domain) => { + const meta = this.generateMeta(domain); + this.$emit(domain, meta); + }); + }, + }, + hooks: { + async deploy() { + await this.processEvents(25); + }, + }, + async run() { + await this.processEvents(); + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95f81c178a589..2566e58986c87 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5754,7 +5754,11 @@ importers: specifier: ^0.6.2 version: 0.6.2 - components/godaddy: {} + components/godaddy: + dependencies: + '@pipedream/platform': + specifier: ^3.1.0 + version: 3.1.0 components/godial: dependencies: