@viewdo/dxp-story-cli
Version:
DXP Story Management CLI
178 lines • 10.4 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AddActionCommand = void 0;
const WaitType_1 = require("../app/models/configuration/support/WaitType");
const ConfigurationSourceType_1 = require("../app/models/configuration/support/ConfigurationSourceType");
const StoryAction_1 = require("../app/models/configuration/support/StoryAction");
const ServiceProviderType_1 = require("../app/models/configuration/support/ServiceProviderType");
const ActionsService_1 = require("../app/services/ActionsService");
const app_1 = require("../app");
const CommandBase_1 = require("./support/CommandBase");
const typedi_1 = __importStar(require("typedi"));
const ConfigurationSource_1 = require("../app/models/configuration/support/ConfigurationSource");
const EnabledForType_1 = require("../app/models/configuration/support/EnabledForType");
const GroupingOperatorType_1 = require("../app/models/configuration/support/GroupingOperatorType");
const jsonata_1 = __importDefault(require("jsonata"));
let AddActionCommand = class AddActionCommand extends CommandBase_1.CommandBase {
run(options) {
return __awaiter(this, void 0, void 0, function* () {
const app = new app_1.App(options);
if (!(yield app.auth_manager.requireToken(options.client_id, options.client_secret)))
return 1;
var actionService = typedi_1.default.get(ActionsService_1.ActionsService).withToken(app.auth_manager.token);
const storyKey = options.storyKey ||
(yield app.prompt_service.selectFromKeys("Story", app.configuration_manager.story_keys, "Add Action"));
const story_config = app.configuration_manager.getStoryConfig(storyKey);
const org_config = app.configuration_manager.getOrganizationConfig(story_config.organizationKey);
app.console_service.log(`Adding Action to Story ${storyKey}`.blue);
let eventType = yield app.prompt_service.askWhich("Event", actionService.listEvents());
let eventData;
if (actionService.eventDataMap[eventType]) {
var choices = actionService.eventDataMap[eventType](story_config);
if (!choices || choices.length == 0)
throw new Error("Unable to create conditional event without dependent element.");
eventData = (yield app.prompt_service.askWhich("Condition", choices));
}
let actions = yield actionService.listActionsByEvent(eventType);
let actionType = (yield app.prompt_service.askWhich("Action", actions));
let actionProviders = actionService.listProvidersByAction(actionType);
let availableServices = org_config.services.filter((s) => actionProviders.includes(s.serviceProvider));
if (availableServices.length == 0)
throw new Error(`No service is setup for this action. Providers: ${actionProviders.join(",")} `);
let service = (yield app.prompt_service.askWhich("Service", availableServices.map((p) => {
return {
name: `${p.serviceProvider}:${p.data["configuration_name"]}`,
value: p,
};
})));
let name = yield app.prompt_service.askFor("Action Name");
let key = yield app.prompt_service.askFor("Action Key", name.replace(" ", "_").toLowerCase(), app.prompt_service.validateKey);
let parameterFields = yield actionService.listActionsParameters(service.serviceProvider, actionType);
const parameters = {};
for (const p of parameterFields) {
let value = p.value;
let param = p;
if (p.isDynamic) {
param = newParam || param;
let optionItems = [];
if (param.dynamicOptionsFromStoryExpression) {
let expression = (0, jsonata_1.default)(param.dynamicOptionsFromStoryExpression);
let dynamicOptions = expression.evaluate(story_config);
if (dynamicOptions && dynamicOptions.length)
optionItems = dynamicOptions.map((i) => {
return {
display: i.name,
value: i.key,
};
});
}
else if (param.dynamicOptionsFromOrganizationExpression) {
let expression = (0, jsonata_1.default)(param.dynamicOptionsFromOrganizationExpression);
let dynamicOptions = expression.evaluate(org_config);
if (dynamicOptions && dynamicOptions.length)
optionItems = dynamicOptions.map((i) => {
return {
display: i.name,
value: i.key,
};
});
}
else {
var newParam = yield actionService.getDynamicActionParameter(service.serviceProvider, actionType, p.key, storyKey);
optionItems = (newParam === null || newParam === void 0 ? void 0 : newParam.options) || [];
}
param.options = optionItems;
}
if (param.options.length)
value = yield app.prompt_service.askWhich(param.name, param.options.map((o) => {
return {
name: o.display,
value: o.value,
};
}), param.value, p.isDynamic);
else if (p.display == "Checkbox")
value = yield app.prompt_service.askIf(param.name, param.value);
else
value = yield app.prompt_service.askFor(param.name, param.value);
parameters[p.key] = value || param.value || "";
}
const actionConfig = Object.assign(new StoryAction_1.StoryAction(), {
key,
name,
eventType,
eventData,
serviceProvider: service.serviceProvider,
actionType,
parameters,
configurationSource: Object.assign(new ConfigurationSource_1.ConfigurationSource(), {
modelKey: org_config.key,
sourceType: service.serviceProvider == ServiceProviderType_1.ServiceProviderType.DXP
? ConfigurationSourceType_1.ConfigurationSourceType.Global
: ConfigurationSourceType_1.ConfigurationSourceType.Organization,
serviceKey: service.key,
}),
enabled: true,
enabledFor: EnabledForType_1.EnabledForType.New,
wait: WaitType_1.WaitType.None,
waitType: WaitType_1.WaitType.None,
groupingOperator: GroupingOperatorType_1.GroupingOperatorType.Or,
rules: [],
onDemand: false,
visibleInReport: false,
isDeliveryAction: false,
});
story_config.actions.push(actionConfig);
app.template_manager.addActionTemplates(story_config, actionConfig);
app.configuration_manager.saveStoryConfig(story_config);
app.console_service.log(`Created ${name} (${key}), a new ${actionType} action for event ${eventType} ${eventData || ""} using service ${service.serviceProvider} ${service.key} in ${storyKey}`
.blue);
return 0;
});
}
};
exports.AddActionCommand = AddActionCommand;
exports.AddActionCommand = AddActionCommand = __decorate([
(0, typedi_1.Service)()
], AddActionCommand);
//# sourceMappingURL=add-action.js.map