import sitecreator from "../../sitecreator_io.app.mjs";
import constants from "../common/constants.mjs";
import * as locale from "locale-codes";
import { ConfigurationError } from "@pipedream/platform";
export default {
key: "sitecreator_io-create-site",
name: "Create Site",
description: "Create a new website. [See the docs here](http://api-doc.sitecreator.io/#tag/Site/operation/postSite)",
version: "0.0.1",
type: "action",
props: {
sitecreator,
siteUrl: {
type: "string",
label: "Site Domain",
description: "Domain name of the new site. This is what will appear between \"https://\" and \".sitecreator.io\". Example: `https://<your-site-domain>.sitecreator.io`",
},
siteName: {
type: "string",
label: "Name",
description: "Name of the new site",
},
language: {
type: "string",
label: "Language",
description: "Language code for the new site",
optional: true,
default: "en-US",
async options() {
return locale.all.map(({
name, tag,
}) => ({
label: name,
value: tag,
}));
},
},
siteData: {
type: "string",
label: "Site Data",
description: "Site data for the new site",
optional: true,
default: "empty",
},
accent: {
type: "string",
label: "Accent",
description: "Site Style accent color",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.ACCENT,
},
gradientBg: {
type: "string",
label: "Grandient Background",
description: "Site Style gradient background color",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.GRADIENTBG,
},
gradientImage: {
type: "string",
label: "Grandient Image",
description: "Site Style gradient image",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.GRANDIENTIMAGE,
},
lightBg: {
type: "string",
label: "Light Background",
description: "Site Style light background color",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.LIGHTBG,
},
name: {
type: "string",
label: "Name",
description: "Site Style name",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.NAME,
},
primaryBg: {
type: "string",
label: "Primary Background",
description: "Site Style primary background color",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.PRIMARYBG,
},
primaryText: {
type: "string",
label: "Primary Text",
description: "Site Style primary text color",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.PRIMARYTEXT,
},
secondaryBg: {
type: "string",
label: "Secondary Background",
description: "Site Style secondary background color",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.SECONDARYBG,
},
secondaryText: {
type: "string",
label: "Sedondary Text",
description: "Site Style secondary text color",
optional: true,
default: constants.SITE_STYLE_DEFAULTS.SECONDARYTEXT,
},
},
methods: {
async checkAvailability(siteUrl) {
return this.sitecreator.checkAvailability({
data: {
siteUrl,
},
});
},
},
async run({ $ }) {
if (this.siteUrl.includes(".")) {
throw new ConfigurationError("Site Domain cannot contain periods.");
}
if (!(await this.checkAvailability(this.siteUrl))) {
throw new Error("Domain already in use");
}
const data = {
siteName: this.siteName,
siteUrl: this.siteUrl,
language: this.language,
siteData: this.siteData,
siteStyle: {
accent: this.accent,
gradientBg: this.gradientBg,
gradientImage: this.gradientImage,
lightBg: this.lightBg,
name: this.name,
primaryBg: this.primaryBg,
primaryText: this.primaryText,
secondaryBg: this.secondaryBg,
secondaryText: this.secondaryText,
},
};
const response = await this.sitecreator.createSite({
data,
$,
});
$.export("$summary", `Successfully created site with ID ${response.siteId}`);
return response;
},
};