@itentialopensource/adapter-jira 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/AUTH.md +2 -8
  2. package/CALLS.md +1698 -2358
  3. package/CHANGELOG.md +8 -0
  4. package/CONTRIBUTING.md +1 -160
  5. package/ENHANCE.md +2 -2
  6. package/README.md +32 -23
  7. package/SYSTEMINFO.md +19 -4
  8. package/adapter.js +158 -329
  9. package/adapterBase.js +541 -877
  10. package/changelogs/changelog.md +122 -0
  11. package/metadata.json +94 -0
  12. package/package.json +25 -26
  13. package/pronghorn.json +470 -138
  14. package/propertiesSchema.json +422 -31
  15. package/refs?service=git-upload-pack +0 -0
  16. package/report/adapter-openapi.json +65406 -0
  17. package/report/adapter-openapi.yaml +66802 -0
  18. package/report/adapterInfo.json +8 -8
  19. package/report/updateReport1691511376916.json +120 -0
  20. package/report/updateReport1692202881338.json +120 -0
  21. package/report/updateReport1694464722118.json +120 -0
  22. package/sampleProperties.json +63 -2
  23. package/test/integration/adapterTestBasicGet.js +2 -4
  24. package/test/integration/adapterTestConnectivity.js +91 -42
  25. package/test/integration/adapterTestIntegration.js +131 -3
  26. package/test/unit/adapterBaseTestUnit.js +388 -313
  27. package/test/unit/adapterTestUnit.js +303 -112
  28. package/utils/adapterInfo.js +1 -1
  29. package/utils/addAuth.js +1 -1
  30. package/utils/artifactize.js +1 -1
  31. package/utils/checkMigrate.js +1 -1
  32. package/utils/entitiesToDB.js +2 -2
  33. package/utils/findPath.js +1 -1
  34. package/utils/methodDocumentor.js +57 -22
  35. package/utils/modify.js +13 -15
  36. package/utils/packModificationScript.js +1 -1
  37. package/utils/pre-commit.sh +1 -1
  38. package/utils/taskMover.js +309 -0
  39. package/utils/tbScript.js +89 -34
  40. package/utils/tbUtils.js +41 -21
  41. package/utils/testRunner.js +1 -1
  42. package/utils/troubleshootingAdapter.js +9 -6
  43. package/workflows/Jira Adapter Issue Workflow.json +0 -1
  44. package/workflows/Jira Adapter Project Workflow.json +0 -1
  45. package/workflows/README.md +0 -3
package/utils/tbScript.js CHANGED
@@ -9,6 +9,7 @@
9
9
 
10
10
  const program = require('commander');
11
11
  const rls = require('readline-sync');
12
+ const prompts = require('prompts');
12
13
  const utils = require('./tbUtils');
13
14
  const basicGet = require('./basicGet');
14
15
  const { name } = require('../package.json');
@@ -50,10 +51,81 @@ const executeInStandaloneMode = async (command) => {
50
51
  process.exit(0);
51
52
  };
52
53
 
54
+ const getAdapterInstanceConfig = async (command) => {
55
+ const instances = await utils.getAllAdapterInstances();
56
+ if (!instances || instances.length === 0) {
57
+ return console.log('None adapter instances found!');
58
+ }
59
+
60
+ let instance;
61
+ if (instances.length === 1) {
62
+ [instance] = instances;
63
+ } else {
64
+ const choices = instances.map((item) => ({ title: item.name }));
65
+ const menu = {
66
+ type: 'select',
67
+ name: 'index',
68
+ message: `Pick an adapter for ${command} check`,
69
+ choices
70
+ };
71
+
72
+ console.log('\n');
73
+ const selected = await prompts(menu);
74
+ console.log('\n');
75
+ instance = instances[selected.index];
76
+ }
77
+
78
+ if (!instance) {
79
+ console.error('No adapter instance selected');
80
+ return null;
81
+ }
82
+
83
+ const { serviceItem: adapterConfig } = await utils.getAdapterConfig(instance._id); /* eslint-disable-line no-underscore-dangle */
84
+
85
+ console.log('\nAdapter instance configuration =>');
86
+ console.log('======================================');
87
+ console.log(adapterConfig);
88
+ console.log('======================================');
89
+
90
+ return adapterConfig;
91
+ };
92
+
93
+ const executeCommandOnInstance = async (command) => {
94
+ const adapterConfig = await getAdapterInstanceConfig(command);
95
+ if (!adapterConfig) {
96
+ process.exit(0);
97
+ }
98
+
99
+ switch (command) {
100
+ case 'connectivity': {
101
+ const { host } = adapterConfig.properties.properties;
102
+ console.log(`perform networking diagnositics to ${host}`);
103
+ utils.runConnectivity(host, true);
104
+ break;
105
+ }
106
+ case 'healthcheck': {
107
+ const adapterInstance = basicGet.getAdapterInstance(adapterConfig);
108
+ await utils.healthCheck(adapterInstance);
109
+ break;
110
+ }
111
+ case 'basicget': {
112
+ utils.runBasicGet(true);
113
+ break;
114
+ }
115
+ case 'troubleshoot': {
116
+ const adapter = { properties: adapterConfig };
117
+ await troubleshoot({}, true, true, adapter);
118
+ break;
119
+ }
120
+ default: {
121
+ console.error(`Unknown command: ${command}`);
122
+ }
123
+ }
124
+ return process.exit(0);
125
+ };
126
+
53
127
  const executeUnderIAPInstallationDirectory = async (command) => {
54
- if (command === undefined) {
55
- await troubleshoot({}, true, true);
56
- } else if (command === 'install') {
128
+ if (command === 'install') {
57
129
  const { database, serviceItem, pronghornProps } = await utils.getAdapterConfig();
58
130
  const filter = { id: pronghornProps.id };
59
131
  const profileItem = await database.collection(utils.IAP_PROFILES_COLLECTION).findOne(filter);
@@ -71,9 +143,7 @@ const executeUnderIAPInstallationDirectory = async (command) => {
71
143
  const serviceIndex = profileItem.services.indexOf(serviceItem.name);
72
144
  profileItem.services.splice(serviceIndex, 1);
73
145
  const update = { $set: { services: profileItem.services } };
74
- await database.collection(utils.IAP_PROFILES_COLLECTION).updateOne(
75
- { id: pronghornProps.id }, update
76
- );
146
+ await database.collection(utils.IAP_PROFILES_COLLECTION).updateOne({ id: pronghornProps.id }, update);
77
147
  console.log(`${serviceItem.name} removed from profileItem.services.`);
78
148
  console.log(`Rerun the script to reinstall ${serviceItem.name}.`);
79
149
  process.exit(0);
@@ -90,43 +160,20 @@ const executeUnderIAPInstallationDirectory = async (command) => {
90
160
  utils.runTest();
91
161
  if (rls.keyInYN(`Do you want to install ${name} to IAP?`)) {
92
162
  console.log('Creating database entries...');
93
- const adapter = utils.createAdapter(
94
- pronghornProps, profileItem, sampleProperties, adapterPronghorn
95
- );
96
-
163
+ const adapter = utils.createAdapter(pronghornProps, profileItem, sampleProperties, adapterPronghorn);
97
164
  adapter.properties.properties = await addAuthInfo(adapter.properties.properties);
98
165
 
99
166
  await database.collection(utils.SERVICE_CONFIGS_COLLECTION).insertOne(adapter);
100
167
  profileItem.services.push(adapter.name);
101
168
  const update = { $set: { services: profileItem.services } };
102
- await database.collection(utils.IAP_PROFILES_COLLECTION).updateOne(
103
- { id: pronghornProps.id }, update
104
- );
169
+ await database.collection(utils.IAP_PROFILES_COLLECTION).updateOne({ id: pronghornProps.id }, update);
105
170
  console.log('Database entry creation complete.');
106
171
  }
107
172
  console.log('Exiting...');
108
173
  process.exit(0);
109
174
  }
110
- } else if (['healthcheck', 'basicget', 'connectivity'].includes(command)) {
111
- const { serviceItem } = await utils.getAdapterConfig();
112
- if (serviceItem) {
113
- const adapter = serviceItem;
114
- const a = basicGet.getAdapterInstance(adapter);
115
- if (command === 'healthcheck') {
116
- await utils.healthCheck(a);
117
- process.exit(0);
118
- } else if (command === 'basicget') {
119
- await utils.runBasicGet(true);
120
- } else if (command === 'connectivity') {
121
- const { host } = adapter.properties.properties;
122
- console.log(`perform networking diagnositics to ${host}`);
123
- await utils.runConnectivity(host, true);
124
- process.exit(0);
125
- }
126
- } else {
127
- console.log(`${name} not installed. Run npm \`run install:adapter\` to install.`);
128
- process.exit(0);
129
- }
175
+ } else if (['healthcheck', 'basicget', 'connectivity', 'troubleshoot'].includes(command)) {
176
+ await executeCommandOnInstance(command);
130
177
  }
131
178
  };
132
179
 
@@ -170,13 +217,21 @@ program
170
217
  main('basicget');
171
218
  });
172
219
 
220
+ program
221
+ .command('troubleshoot')
222
+ .alias('tb')
223
+ .description('perfom troubleshooting')
224
+ .action(() => {
225
+ main('troubleshoot');
226
+ });
227
+
173
228
  // Allow commander to parse `process.argv`
174
229
  program.parse(process.argv);
175
230
 
176
231
  if (process.argv.length < 3) {
177
232
  main();
178
233
  }
179
- const allowedParams = ['install', 'healthcheck', 'basicget', 'connectivity'];
234
+ const allowedParams = ['install', 'healthcheck', 'basicget', 'connectivity', 'troubleshoot'];
180
235
  if (process.argv.length === 3 && !allowedParams.includes(process.argv[2])) {
181
236
  console.log(`unknown parameter ${process.argv[2]}`);
182
237
  console.log('try `node troubleshootingAdapter.js -h` to see allowed parameters. Exiting...');
package/utils/tbUtils.js CHANGED
@@ -6,8 +6,8 @@
6
6
  /* eslint-disable no-console */
7
7
 
8
8
  const path = require('path');
9
- const fs = require('fs-extra');
10
9
  const cp = require('child_process');
10
+ const fs = require('fs-extra');
11
11
 
12
12
  module.exports = {
13
13
  SERVICE_CONFIGS_COLLECTION: 'service_configs',
@@ -101,10 +101,8 @@ module.exports = {
101
101
  *
102
102
  * @function decryptProperties
103
103
  */
104
- decryptProperties: (props, iapDir, discovery) => {
105
- const propertyEncryptionClassPath = path.join(iapDir, 'node_modules/@itential/pronghorn-core/core/PropertyEncryption.js');
106
- const isEncrypted = props.pathProps.encrypted;
107
- const PropertyEncryption = discovery.require(propertyEncryptionClassPath, isEncrypted);
104
+ decryptProperties: (props, iapDir) => {
105
+ const { PropertyEncryption } = require(path.join(iapDir, 'node_modules/@itential/itential-utils'));
108
106
  const propertyEncryption = new PropertyEncryption({
109
107
  algorithm: 'aes-256-ctr',
110
108
  key: 'TG9uZ0Rpc3RhbmNlUnVubmVyUHJvbmdob3JuCg==',
@@ -160,8 +158,7 @@ module.exports = {
160
158
  * @param {Object} healthcheck - {Object} healthcheck - ./entities/.system/action.json object
161
159
  */
162
160
  getHealthCheckEndpoint: (healthcheck) => {
163
- const endpoint = healthcheck.actions[1].entitypath.slice(21,
164
- healthcheck.actions[1].entitypath.length - 8);
161
+ const endpoint = healthcheck.actions[1].entitypath.slice(21, healthcheck.actions[1].entitypath.length - 8);
165
162
  return { healthCheckEndpoint: endpoint };
166
163
  },
167
164
 
@@ -203,6 +200,7 @@ module.exports = {
203
200
  try {
204
201
  stdout = cp.execSync(cmd).toString();
205
202
  } catch (error) {
203
+ console.log('execute command error', error.stdout.toString(), error.stderr.toString());
206
204
  stdout = error.stdout.toString();
207
205
  }
208
206
  const output = this.getTestCount(stdout);
@@ -290,10 +288,12 @@ module.exports = {
290
288
  */
291
289
  runConnectivity: function runConnectivity(host, scriptFlag) {
292
290
  let testPath = 'test/integration/adapterTestConnectivity.js';
291
+ let executable = 'mocha';
293
292
  if (!scriptFlag) {
294
293
  testPath = path.resolve(__dirname, '..', testPath);
294
+ executable = path.join(__dirname, '..', 'node_modules/mocha/bin/mocha');
295
295
  }
296
- return this.systemSync(`mocha ${testPath} --HOST=${host} --timeout 10000 --exit`, !scriptFlag);
296
+ return this.systemSync(`${executable} ${testPath} --HOST=${host} --timeout 10000 --exit`, !scriptFlag);
297
297
  },
298
298
 
299
299
  /**
@@ -340,28 +340,42 @@ module.exports = {
340
340
  return adapter;
341
341
  },
342
342
 
343
- getPronghornProps: function getPronghornProps(iapDir) {
343
+ getPronghornProps: function getPronghornProps() {
344
+ const iapDir = this.getIAPHome();
344
345
  console.log('Retrieving properties.json file...');
345
346
  const rawProps = require(path.join(iapDir, 'properties.json'));
346
347
  console.log('Decrypting properties...');
347
- const { Discovery } = require(path.join(iapDir, 'node_modules/@itential/itential-utils'));
348
- const discovery = new Discovery();
349
- const pronghornProps = this.decryptProperties(rawProps, iapDir, discovery);
348
+ const pronghornProps = this.decryptProperties(rawProps, iapDir);
350
349
  console.log('Found properties.\n');
351
350
  return pronghornProps;
352
351
  },
353
352
 
353
+ getAllAdapterInstances: async function getAllAdapterInstances() {
354
+ const database = await this.getIAPDatabaseConnection();
355
+ const { name } = require(path.join(__dirname, '..', 'package.json'));
356
+ const query = { model: name };
357
+ const options = { projection: { name: 1 } };
358
+ const adapterInstancesNames = await database.collection(this.SERVICE_CONFIGS_COLLECTION).find(
359
+ query,
360
+ options
361
+ ).toArray();
362
+ return adapterInstancesNames;
363
+ },
364
+
354
365
  // get database connection and existing adapter config
355
- getAdapterConfig: async function getAdapterConfig() {
356
- const iapDir = this.getIAPHome();
357
- const pronghornProps = this.getPronghornProps(iapDir);
358
- console.log('Connecting to Database...');
359
- const database = await this.connect(iapDir, pronghornProps);
360
- console.log('Connection established.');
366
+ getAdapterConfig: async function getAdapterConfig(adapterId) {
367
+ const database = await this.getIAPDatabaseConnection();
361
368
  const { name } = require(path.join(__dirname, '..', 'package.json'));
369
+ let query = {};
370
+ if (!adapterId) {
371
+ query = { model: name };
372
+ } else {
373
+ query = { _id: adapterId };
374
+ }
362
375
  const serviceItem = await database.collection(this.SERVICE_CONFIGS_COLLECTION).findOne(
363
- { model: name }
376
+ query
364
377
  );
378
+ const pronghornProps = await this.getPronghornProps();
365
379
  return { database, serviceItem, pronghornProps };
366
380
  },
367
381
 
@@ -438,13 +452,19 @@ module.exports = {
438
452
  return path.join(this.getCurrentExecutionPath(), '../../..') === this.getIAPHome();
439
453
  },
440
454
 
455
+ getIAPDatabaseConnection: async function getIAPDatabaseConnection() {
456
+ const pronghornProps = await this.getPronghornProps();
457
+ const database = await this.connect(pronghornProps);
458
+ return database;
459
+ },
460
+
441
461
  /**
442
462
  * @summary connect to mongodb
443
463
  *
444
464
  * @function connect
445
465
  * @param {Object} properties - pronghornProps
446
466
  */
447
- connect: async function connect(iapDir, properties) {
467
+ connect: async function connect(properties) {
448
468
  let dbConnectionProperties = {};
449
469
  if (properties.mongoProps) {
450
470
  dbConnectionProperties = properties.mongoProps;
@@ -459,7 +479,7 @@ module.exports = {
459
479
  if (!dbConnectionProperties.url || !dbConnectionProperties.db) {
460
480
  throw new Error('Mongo properties are not specified in IAP configuration!');
461
481
  }
462
-
482
+ const iapDir = this.getIAPHome();
463
483
  const { MongoDBConnection } = require(path.join(iapDir, 'node_modules/@itential/database'));
464
484
  const connection = new MongoDBConnection(dbConnectionProperties);
465
485
  const database = await connection.connect(true);
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  /* @copyright Itential, LLC 2019 */
3
3
 
4
+ const execute = require('child_process').exec;
4
5
  const fs = require('fs-extra');
5
6
  const rl = require('readline-sync');
6
- const execute = require('child_process').exec;
7
7
 
8
8
  /**
9
9
  * This script will determine the type of integration test to run
@@ -134,9 +134,13 @@ const offline = async () => {
134
134
  };
135
135
 
136
136
  const troubleshoot = async (props, scriptFlag, persistFlag, adapter) => {
137
- // get database connection and existing adapter config
138
- const { database, serviceItem } = await utils.getAdapterConfig();
139
- // where troubleshoot should start
137
+ let serviceItem;
138
+ if (adapter && adapter.allProps) {
139
+ serviceItem = { properties: { properties: adapter.allProps } };
140
+ }
141
+ if (adapter && adapter.properties && adapter.properties.properties) {
142
+ serviceItem = adapter.properties;
143
+ }
140
144
  if (serviceItem) {
141
145
  if (!scriptFlag || rls.keyInYN(`Start verifying the connection and authentication properties for ${name}?`)) {
142
146
  const { result, updatedAdapter } = VerifyHealthCheckEndpoint(serviceItem, props, scriptFlag);
@@ -154,10 +158,9 @@ const troubleshoot = async (props, scriptFlag, persistFlag, adapter) => {
154
158
  }
155
159
 
156
160
  if (persistFlag && healthRes) {
161
+ const { database } = await utils.getIAPDatabaseConnection();
157
162
  const update = { $set: { properties: updatedAdapter.properties } };
158
- await database.collection(utils.SERVICE_CONFIGS_COLLECTION).updateOne(
159
- { model: name }, update
160
- );
163
+ await database.collection(utils.SERVICE_CONFIGS_COLLECTION).updateOne({ model: name }, update);
161
164
  if (scriptFlag) {
162
165
  console.log(`${name} updated.`);
163
166
  }
@@ -1 +0,0 @@
1
- {"name":"Jira Adapter Issue Workflow","tasks":{"1260":{"name":"query","summary":"query issue type id","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":true,"query":"{}.issue_id[0]","obj":"$var.fd2.export"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":-0.022794117647058822,"y":-0.12121212121212122,"scheduled":false},"5218":{"name":"merge","summary":"project","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"id","value":{"task":"8d6c","variable":"return_data","editable":true}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[],"groups":[],"x":0.10588235294117647,"y":-0.06186868686868687},"8073":{"name":"ProviderForm","summary":"Assignee Form","description":"Show Form w/ Custom Dropdown","location":"Application","app":"FormBuilder","displayName":"FormBuilder","type":"manual","variables":{"incoming":{"form_name":"Assign Issue","instance_data":{},"provider_data":"$var.5cbb.merged_object"},"outgoing":{"export":null},"error":""},"view":"/formbuilder/task/ProviderForm","deprecated":false,"matched":[{"key":"app","highlightString":"<span class='highlight-string'>Form</span>Builder"},{"key":"name","highlightString":"Provider<span class='highlight-string'>Form</span>"},{"key":"summary","highlightString":"Show <span class='highlight-string'>Form</span> w/ Custom Dropdown"},{"key":"description","highlightString":"Show <span class='highlight-string'>Form</span> w/ Custom Dropdown"}],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":0.20123456790123456,"y":0.24161849710982658,"scheduled":false},"workflow_start":{"name":"workflow_start","groups":[],"x":-0.5018518518518519,"y":-0.07167630057803469},"workflow_end":{"name":"workflow_end","groups":[],"x":-0.49753086419753084,"y":0.16647398843930636},"fd2":{"name":"ShowFormByName","summary":"Show Form By Name","description":"Show Form By Name","location":"Application","app":"FormBuilder","displayName":"FormBuilder","type":"manual","variables":{"incoming":{"form_name":"Issue Creation","instance_data":{}},"outgoing":{"export":null},"error":""},"view":"/formbuilder/task/ShowFormByName","deprecated":false,"matched":[],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":-0.14852941176470588,"y":-0.08585858585858586,"scheduled":false},"c2de":{"name":"merge","summary":"fields object","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"summary","value":{"task":"9f","variable":"return_data","editable":true}},{"key":"issuetype","value":{"task":"a8a9","variable":"merged_object"}},{"key":"project","value":{"task":"5218","variable":"merged_object"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[],"groups":[],"x":0.04852941176470588,"y":-0.22348484848484848},"a8a9":{"name":"merge","summary":"issue type","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"id","value":{"task":"1260","variable":"return_data","editable":true}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[],"groups":[],"x":0.03455882352941177,"y":-0.09974747474747475},"db16":{"name":"merge","summary":"post body","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"fields","value":{"task":"c2de","variable":"merged_object"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[],"groups":[],"x":0.13014705882352942,"y":-0.19823232323232323},"6b77":{"name":"postRestapi2issue","summary":"Create issue","description":"Creates an issue or, where the option to create subtasks is enabled in Jira, a subtask. A transition may be applied, to move the issue or subtask to a workflow step other than the default start step, and issue properties set.\n\nThe content of the issue or subtask is defined using `update` and `fields`. The fields that can be set in the issue or subtask are determined using the [ Get create issue metadata](#api-api-2-issue-createmeta-get). These are the same fields that appear on the issue's create screen.\n\nCreating a subtask differs from creating an issue as follows:\n\n * `issueType` must be set to a subtask issue type (use [ Get create issue metadata](#api-api-2-issue-createmeta-get) to find subtask issue types).\n * `parent` the must contain the ID or key of the parent issue.\n\n**[Permissions](#permissions) required:** *Browse projects* and *Create issues* [project permissions](https://confluence.atlassian.com/x/yodKLg) for the project in which the issue or subtask is created.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"updateHistory":false,"body":"$var.db16.merged_object","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>postRestapi2issue</span>"}],"groups":[],"actor":"Pronghorn","x":0.27839506172839507,"y":-0.2023121387283237,"scheduled":false},"9f":{"name":"query","summary":"Query Summary","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":true,"query":"{}.summary[0]","obj":"$var.fd2.export"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":-0.022794117647058822,"y":-0.21843434343434343,"scheduled":false},"8d6c":{"name":"query","summary":"Query project id","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":true,"query":"{}.project_id[0]","obj":"$var.fd2.export"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":-0.01764705882352941,"y":-0.007575757575757576,"scheduled":false},"e062":{"name":"query","summary":"Query Issue Id","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":true,"query":"{}.response.id","obj":"$var.6b77.result"},"outgoing":{"return_data":"$var.job.issue_id"},"error":""},"deprecated":false,"matched":[],"groups":[],"x":0.24938271604938272,"y":-0.08092485549132948,"scheduled":false},"810f":{"name":"deleteRestapi2issueissueIdOrKey","summary":"Delete issue","description":"Deletes an issue.\n\nAn issue cannot be deleted if it has one or more subtasks. To delete an issue with subtasks, set `deleteSubtasks`. This causes the issue's subtasks to be deleted with the issue.\n\n**[Permissions](#permissions) required:**\n\n * *Browse projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is in.\n * If configured, permission to view the issue granted by [ issue-level security](https://confluence.atlassian.com/x/J4lKLg).\n * *Delete issues* [project permission](https://confluence.atlassian.com/x/yodKLg) for the issue.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"issueIdOrKey":"$var.job.issue_id","deleteSubtasks":true,"adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>deleteRestapi2issue</span>issueIdOrKey"}],"groups":[],"actor":"Pronghorn","x":-0.19558823529411765,"y":0.15746971736204576,"scheduled":false},"531e":{"name":"decisionTask","summary":"New Issue Creation","description":"MOP Decision Task","location":"Application","app":"MOP","displayName":"MOP","type":"manual","variables":{"incoming":{"title":"New","body":"<h3>New Issue</h3><p> \nA new issue has been created with issue id $var.job.issue_id$\n</p>","variables":{},"btn_success":"Proceed","btn_failure":"Delete Issue"},"outgoing":{},"error":""},"view":"/mop/task/decisionTask","deprecated":false,"matched":[{"key":"app","highlightString":"<span class='highlight-string'>MOP</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>MOP</span> <span class='highlight-string'>Decision</span> Task"},{"key":"description","highlightString":"<span class='highlight-string'>MOP</span> <span class='highlight-string'>Decision</span> Task"},{"key":"name","highlightString":"<span class='highlight-string'>decision</span>Task"}],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":0.2289855072463768,"y":0.06227544910179641,"scheduled":false},"269a":{"name":"putRestapi2issueissueIdOrKeyassignee","summary":"Assign issue","description":"Assigns an issue to a user. Use this operation when the calling user does not have the *Edit Issues* permission but has the *Assign issue* permission for the project that the issue is in.\n\nIf `name` or `accountId` is set to:\n\n * `\"-1\"`, the issue is assigned to the default assignee for the project.\n * `null`, the issue is set to unassigned.\n\n**[Permissions](#permissions) required:**\n\n * *Browse Projects* and *Assign Issues* [ project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is in.\n * If configured, permission to view the issue granted by [ issue-level security](https://confluence.atlassian.com/x/J4lKLg).","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"issueIdOrKey":"$var.job.issue_id","body":"$var.f844.merged_object","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>putRestapi2issue</span>issueIdOrKeyassignee"}],"groups":[],"actor":"Pronghorn","x":0.2617283950617284,"y":0.6427745664739885,"scheduled":false},"987b":{"name":"query","summary":"Query Assignee Name","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"assignee_names[0]","obj":"$var.8073.export"},"outgoing":{"return_data":"$var.job.assignee_name"},"error":""},"deprecated":false,"matched":[],"groups":[],"x":0.25555555555555554,"y":0.3815028901734104,"scheduled":false},"f844":{"name":"merge","summary":"Merge Assignee Info","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"name","value":{"task":"987b","variable":"return_data"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.25925925925925924,"y":0.484393063583815},"3c71":{"name":"getRestapi2issueissueIdOrKey","summary":"Get Issue Status","description":"Returns the details for an issue.\n\nThe issue is identified by its ID or key, however, if the identifier doesn't match an issue, a case-insensitive search and check for moved issues is performed. If a matching issue is found its details are returned, a 302 or other redirect is **not** returned. The issue key returned in the response is the key of the issue found.\n\n**[Permissions](#permissions) required:**\n\n * *Browse projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is in.\n * If configured, permission to view the issue granted by [ issue-level security](https://confluence.atlassian.com/x/J4lKLg).","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"issueIdOrKey":"$var.job.issue_id","fields":"status","fieldsByKeys":"","expand":"","properties":"","updateHistory":"","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>getRestapi2issue</span>issueIdOrKey"}],"groups":[],"actor":"Pronghorn","x":0.052941176470588235,"y":0.629878869448183,"scheduled":false},"b036":{"name":"delay","summary":"Status Check Delay","description":"Delay a Job for a duration by Job ID and number of seconds.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"time":10},"outgoing":{"time_in_milliseconds":null},"error":""},"deprecated":false,"matched":[],"groups":[],"x":-0.06911764705882353,"y":0.41318977119784656,"scheduled":false},"cc8":{"name":"evaluation","summary":"Run Evaluation","description":"Run an evaluation","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"all_true_flag":false,"evaluation_groups":[{"all_true_flag":true,"evaluations":[{"query":"response.fields.status.name","operand_1":{"variable":"result","task":"3c71"},"operator":"==","operand_2":{"variable":"In Progress","task":"static"}}]}]},"outgoing":{"return_value":null}},"deprecated":false,"matched":[],"groups":[],"x":-0.07573529411764705,"y":0.6244952893674294},"f4d4":{"name":"postRestapi2issueissueIdOrKeycomment","summary":"Add Issue Comment","description":"Adds a comment to an issue.\n\n**[Permissions](#permissions) required:**\n\n * *Browse projects* and *Add comments* [ project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue containing the comment is in.\n * If configured, permission to view the issue granted by [ issue-level security](https://confluence.atlassian.com/x/J4lKLg).","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"issueIdOrKey":"$var.job.issue_id","expand":"","body":{"body":"issue approved in Jira, starting job"},"adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>postRestapi2issue</span>issueIdOrKeycomment"}],"groups":[],"actor":"Pronghorn","x":-0.07352941176470588,"y":0.8506056527590848,"scheduled":false},"d89a":{"name":"decisionTask","summary":"Issue Wrap Up","description":"MOP Decision Task","location":"Application","app":"MOP","displayName":"MOP","type":"manual","variables":{"incoming":{"title":"New","body":"<h3>Issue Complete</h3><p> \nJob issue $var.job.issue_id$ has been completed.\n</p>","variables":{},"btn_success":"Mark as Done","btn_failure":"Delete Issue"},"outgoing":{},"error":""},"view":"/mop/task/decisionTask","deprecated":false,"matched":[{"key":"app","highlightString":"<span class='highlight-string'>MOP</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>MOP</span> <span class='highlight-string'>Decision</span> Task"},{"key":"description","highlightString":"<span class='highlight-string'>MOP</span> <span class='highlight-string'>Decision</span> Task"},{"key":"name","highlightString":"<span class='highlight-string'>decision</span>Task"}],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":-0.19926470588235295,"y":0.620457604306864,"scheduled":false},"23a":{"name":"postRestapi2issueissueIdOrKeytransitions","summary":"Issue Done","description":"Performs an issue transition and, if the transition has a screen, updates the fields from the transition screen.\n\nTo update the fields on the transition screen, specify the fields in the `fields` or `update` parameters in the request body. Get details about the fields using [ Get transitions](#api-api-2-issue-issueIdOrKey-transitions-get) with the `transitions.fields` expand.\n\n**[Permissions](#permissions) required:**\n\n * *Browse projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is in.\n * If configured, permission to view the issue granted by [ issue-level security](https://confluence.atlassian.com/x/J4lKLg).\n * *Transition issues* [project permission](https://confluence.atlassian.com/x/yodKLg) for the issue.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"issueIdOrKey":"$var.job.issue_id","body":{"transition":{"id":"41"}},"adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>postRestapi2</span>issueissueIdOrKeytransitions"}],"groups":[],"actor":"Pronghorn","x":-0.4985294117647059,"y":0.678030303030303,"scheduled":false},"606f":{"name":"postRestapi2issueissueIdOrKeynotify","summary":"Send notification for issue","description":"Creates an email notification for an issue and adds it to the mail queue.\n\n**[Permissions](#permissions) required:**\n\n * *Browse Projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project that the issue is in.\n * If configured, permission to view the issue granted by [issue-level security](https://confluence.atlassian.com/x/J4lKLg).","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"issueIdOrKey":"$var.job.issue_id","body":{"subject":"Issue Done","textBody":"The Job FooBar you requested is complete","to":{"reporter":true}},"adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>postRestapi2issueissueIdOrKeynotify</span>"}],"groups":[],"actor":"Pronghorn","x":-0.4963235294117647,"y":0.42045454545454547,"scheduled":false},"eb07":{"name":"getRestapi2userassignablesearch","summary":"Find users assignable to Issue","description":"Returns a list of users that can be assigned to an issue. Use this operation to find the list of users who can be assigned to:\n\n * a new issue, by providing the `projectKeyOrId`.\n * an updated issue, by providing the `issueKey`.\n * to an issue during a transition (workflow action), by providing the `issueKey` and the transition id in `actionDescriptorId`. You can obtain the IDs of an issue's valid transitions using the `transitions` option in the `expand` parameter of [ Get issue](#api-api-2-issue-issueIdOrKey-get).\n\nIn all these cases, you can pass a username to determine if a user can be assigned to an issue. The user is returned in the response if they can be assigned to the issue or issue transition.\n\n**[Permissions](#permissions) required:** Permission to access Jira.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"query":"","username":"","accountId":"","project":"","issueKey":"$var.job.issue_key","startAt":"","maxResults":"","actionDescriptorId":"","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"getRestapi2user<span class='highlight-string'>assignable</span>search"},{"key":"summary","highlightString":"Find users <span class='highlight-string'>assignable</span> to issues"}],"groups":[],"actor":"Pronghorn","x":0.38395061728395063,"y":0.058959537572254334,"scheduled":false},"d91":{"name":"query","summary":"Query Data Using 'json-query' Format","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"{}.response.key","obj":"$var.6b77.result"},"outgoing":{"return_data":"$var.job.issue_key"},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.3197530864197531,"y":-0.08554913294797688,"scheduled":false},"68a8":{"name":"query","summary":"Get Assignable Users","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"{}.response[*].name","obj":"$var.eb07.result"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.3932098765432099,"y":0.24739884393063583,"scheduled":false},"5cbb":{"name":"merge","summary":"Merge Assignee For Form","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"assignee_names","value":{"task":"68a8","variable":"return_data"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.3160493827160494,"y":0.24971098265895952}},"transitions":{"1260":{"a8a9":{"type":"standard","state":"success"}},"5218":{"c2de":{"type":"standard","state":"success"}},"8073":{"987b":{"type":"standard","state":"success"}},"workflow_start":{"fd2":{"type":"standard","state":"success"}},"workflow_end":{},"6dbe":{},"fd2":{"1260":{"type":"standard","state":"success"},"9f":{"type":"standard","state":"success"},"8d6c":{"type":"standard","state":"success"}},"f158":{},"c2de":{"db16":{"type":"standard","state":"success"}},"a8a9":{"c2de":{"type":"standard","state":"success"}},"bc8":{},"db16":{"6b77":{"type":"standard","state":"success"}},"6b77":{"e062":{"type":"standard","state":"success"},"d91":{"type":"standard","state":"success"}},"9f":{"c2de":{"type":"standard","state":"success"}},"8d6c":{"5218":{"type":"standard","state":"success"}},"e062":{"531e":{"type":"standard","state":"success"}},"810f":{"workflow_end":{"type":"standard","state":"success"}},"531e":{"810f":{"type":"standard","state":"failure"},"eb07":{"type":"standard","state":"success"}},"269a":{"3c71":{"type":"standard","state":"success"},"810f":{"type":"standard","state":"failure"}},"987b":{"f844":{"type":"standard","state":"success"}},"f844":{"269a":{"type":"standard","state":"success"}},"3c71":{"cc8":{"type":"standard","state":"success"}},"b036":{"3c71":{"type":"revert","state":"success"}},"cc8":{"b036":{"type":"standard","state":"failure"},"d89a":{"type":"standard","state":"success"},"f4d4":{"type":"standard","state":"success"}},"31ca":{},"f4d4":{},"d89a":{"810f":{"type":"standard","state":"failure"},"23a":{"type":"standard","state":"success"}},"23a":{"606f":{"type":"standard","state":"success"}},"606f":{"workflow_end":{"type":"standard","state":"success"}},"2b82":{},"eb07":{"68a8":{"type":"standard","state":"success"}},"d91":{"eb07":{"type":"standard","state":"success"}},"68a8":{"5cbb":{"type":"standard","state":"success"}},"5cbb":{"8073":{"type":"standard","state":"success"}}},"font_size":12,"created":"2019-03-27T19:58:22.741Z","created_by":{"provenance":"Local AAA","username":"admin@pronghorn","firstname":"admin","inactive":false,"email":""},"groups":[],"last_updated":"2019-04-03T20:06:17.322Z","last_updated_by":{"provenance":"Local AAA","username":"admin@pronghorn","firstname":"admin","inactive":false,"email":""},"type":"automation","description":null}
@@ -1 +0,0 @@
1
- {"name":"Jira Adapter Project Workflow","tasks":{"366":{"name":"merge","summary":"Merge Project Create Data","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"leadAccountId","value":{"task":"job","variable":"myself_id"}},{"key":"key","value":{"task":"c2bf","variable":"return_data"}},{"key":"name","value":{"task":"8124","variable":"return_data"}},{"key":"projectTypeKey","value":{"task":"390c","variable":"return_data"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.3135802469135803,"y":0.6751445086705202},"1698":{"name":"postRestapi2project","summary":"Create project","description":"Creates a project based on a project type template, as shown in the following table:\n\n<table> \n <thead> \n <tr> \n <th>Project Type Key</th> \n <th>Project Template Key</th> \n </tr> \n </thead> \n <tbody> \n <tr> \n <td><code>business</code></td> \n <td><code>com.atlassian.jira-core-project-templates:jira-core-simplified-content-management</code>, <code>com.atlassian.jira-core-project-templates:jira-core-simplified-document-approval</code>, <code>com.atlassian.jira-core-project-templates:jira-core-simplified-lead-tracking</code>, <code>com.atlassian.jira-core-project-templates:jira-core-simplified-process-control</code>, <code>com.atlassian.jira-core-project-templates:jira-core-simplified-procurement</code>, <code>com.atlassian.jira-core-project-templates:jira-core-simplified-project-management</code>, <code>com.atlassian.jira-core-project-templates:jira-core-simplified-recruitment</code>, <code>com.atlassian.jira-core-project-templates:jira-core-simplified-task-tracking</code> </td> \n </tr> \n <tr> \n <td><code>service_desk</code></td> \n <td><code>com.atlassian.servicedesk:simplified-it-service-desk</code>, <code>com.atlassian.servicedesk:simplified-internal-service-desk</code>, <code>com.atlassian.servicedesk:simplified-external-service-desk</code> </td> \n </tr> \n <tr> \n <td><code>software</code></td> \n <td><code>com.pyxis.greenhopper.jira:gh-simplified-agility-kanban</code>, <code>com.pyxis.greenhopper.jira:gh-simplified-agility-scrum</code>, <code>com.pyxis.greenhopper.jira:gh-simplified-basic</code>, <code>com.pyxis.greenhopper.jira:gh-simplified-kanban-classic</code>, <code>com.pyxis.greenhopper.jira:gh-simplified-scrum-classic</code> </td> \n </tr> \n <tr> \n <td><code>ops</code></td> \n <td><code>com.atlassian.jira.jira-incident-management-plugin:im-incident-management</code></td> \n </tr> \n </tbody>\n <tbody> \n </tbody>\n</table>\n\nThe project types are available according to the installed Jira features as follows:\n\n * Jira Core, the default, enables `business` projects.\n * Jira Service Desk enables `service_desk` projects.\n * Jira Software enables `software` projects.\n * Jira Ops enables `ops` projects.Jira\n\nTo determine which features are installed, go to **Jira settings** > **Apps** > **Manage apps** and review the System Apps list. To add JIRA Software or JIRA Service Desk into a JIRA instance, use **Jira settings** > **Apps** > **Finding new apps**. For more information, see [ Managing add-ons](https://confluence.atlassian.com/x/S31NLg). To enable Jira Ops, see [Jira Ops](https://www.atlassian.com/software/jira/ops).\n\n**[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"body":"$var.366.merged_object","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>postRestapi2project</span>"}],"groups":[],"actor":"Pronghorn","x":0.4148148148148148,"y":0.6404624277456648,"scheduled":false},"6991":{"name":"decisionTask","summary":"MOP Decision Task","description":"MOP Decision Task","location":"Application","app":"MOP","displayName":"MOP","type":"manual","variables":{"incoming":{"title":"Delete Project?","body":"Are you sure you want to delete the project you created?","variables":"","btn_success":"Yes, Delete","btn_failure":"No"},"outgoing":{},"error":""},"view":"/mop/task/decisionTask","deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>decision</span>Task"},{"key":"summary","highlightString":"MOP <span class='highlight-string'>Decision</span> Task"},{"key":"description","highlightString":"MOP <span class='highlight-string'>Decision</span> Task"}],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":0.7561728395061729,"y":0.47861271676300576,"scheduled":false},"8124":{"name":"query","summary":"Query Project Name","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"project_name[0]","obj":"$var.d8a2.export"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.30987654320987656,"y":0.5664739884393064,"scheduled":false},"workflow_start":{"name":"workflow_start","groups":[],"x":0,"y":0.5},"workflow_end":{"name":"workflow_end","groups":[],"x":1.1277777777777778,"y":0.4774566473988439},"f31f":{"name":"getRestapi2projecttype","summary":"Get all project types","description":"Returns all [project types](https://confluence.atlassian.com/x/Var1Nw), whether or not the instance has a valid license for each type.\n\n**[Permissions](#permissions) required:** None.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"getRestapi2<span class='highlight-string'>projecttype</span>"}],"groups":[],"actor":"Pronghorn","x":0.07654320987654321,"y":0.34566473988439306,"scheduled":false},"da2d":{"name":"query","summary":"Query Project Type Names","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"response[*].key","obj":"$var.f31f.result"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.17160493827160495,"y":0.3421965317919075,"scheduled":false},"d8a2":{"name":"ProviderForm","summary":"Create Project Form","description":"Show Form w/ Custom Dropdown","location":"Application","app":"FormBuilder","displayName":"FormBuilder","type":"manual","variables":{"incoming":{"form_name":"Create Project","instance_data":{},"provider_data":"$var.dae.merged_object"},"outgoing":{"export":null},"error":""},"view":"/formbuilder/task/ProviderForm","deprecated":false,"matched":[{"key":"app","highlightString":"<span class='highlight-string'>Form</span>Builder"},{"key":"name","highlightString":"Provider<span class='highlight-string'>Form</span>"},{"key":"summary","highlightString":"Show <span class='highlight-string'>Form</span> w/ Custom Dropdown"},{"key":"description","highlightString":"Show <span class='highlight-string'>Form</span> w/ Custom Dropdown"}],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":0.23333333333333334,"y":0.4728323699421965,"scheduled":false},"dae":{"name":"merge","summary":"Merge Project Type Form","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"project_type","value":{"task":"da2d","variable":"return_data"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.2382716049382716,"y":0.3445086705202312},"1f31":{"name":"getRestapi2myself","summary":"Get current user","description":"Returns details for the current user.\n\n**[Permissions](#permissions) required:** Permission to access Jira.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"expand":"","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>getRestapi2my</span>self"}],"groups":[],"actor":"Pronghorn","x":0.10246913580246914,"y":0.5491329479768786,"scheduled":false},"c3de":{"name":"query","summary":"Query My Account Id","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"response.accountId","obj":"$var.1f31.result"},"outgoing":{"return_data":"$var.job.myself_id"},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.19012345679012346,"y":0.6277456647398844,"scheduled":false},"390c":{"name":"query","summary":"Query Project Type","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"project_type[0]","obj":"$var.d8a2.export"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.35185185185185186,"y":0.5364161849710982,"scheduled":false},"c2bf":{"name":"query","summary":"Query Project Key","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"project_key[0]","obj":"$var.d8a2.export"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.23271604938271606,"y":0.5791907514450867,"scheduled":false},"6df":{"name":"query","summary":"Query Project Id","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"response.id","obj":"$var.1698.result"},"outgoing":{"return_data":"$var.job.project_id"},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.4185185185185185,"y":0.47861271676300576,"scheduled":false},"99d1":{"name":"deleteRestapi2projectprojectIdOrKey","summary":"Delete project","description":"Deletes a project.\n\n**[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"projectIdOrKey":"$var.job.project_id","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>deleteRestapi2project</span>projectIdOrKey"}],"groups":[],"actor":"Pronghorn","x":0.9302469135802469,"y":0.4820809248554913,"scheduled":false},"595b":{"name":"postRestapi2issue","summary":"Create issue","description":"Creates an issue or, where the option to create subtasks is enabled in Jira, a subtask. A transition may be applied, to move the issue or subtask to a workflow step other than the default start step, and issue properties set.\n\nThe content of the issue or subtask is defined using `update` and `fields`. The fields that can be set in the issue or subtask are determined using the [ Get create issue metadata](#api-api-2-issue-createmeta-get). These are the same fields that appear on the issue's create screen.\n\nCreating a subtask differs from creating an issue as follows:\n\n * `issueType` must be set to a subtask issue type (use [ Get create issue metadata](#api-api-2-issue-createmeta-get) to find subtask issue types).\n * `parent` the must contain the ID or key of the parent issue.\n\n**[Permissions](#permissions) required:** *Browse projects* and *Create issues* [project permissions](https://confluence.atlassian.com/x/yodKLg) for the project in which the issue or subtask is created.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"updateHistory":"","body":"$var.8f61.merged_object","adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>postRestapi2issue</span>"}],"groups":[],"actor":"Pronghorn","x":0.7555555555555555,"y":0.22658959537572254,"scheduled":false},"14f1":{"name":"decisionTask","summary":"Post Project Creation Decision","description":"MOP Decision Task","location":"Application","app":"MOP","displayName":"MOP","type":"manual","variables":{"incoming":{"title":"Create Project Issue","body":"<p> Your project has been created, would you like to add an issue to it? </P>","variables":0,"btn_success":"Create Issue","btn_failure":"Delete Project"},"outgoing":{},"error":""},"view":"/mop/task/decisionTask","deprecated":false,"matched":[{"key":"app","highlightString":"<span class='highlight-string'>MOP</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>MOP</span> Decision Task"},{"key":"description","highlightString":"<span class='highlight-string'>MOP</span> Decision Task"}],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":0.5858024691358025,"y":0.49942196531791905,"scheduled":false},"685f":{"name":"getRestapi2issuetype","summary":"Get all issue types for user","description":"Returns all issue types.\n\n**[Permissions](#permissions) required:** Permission to access Jira, however, issue types are only returned as follows:\n\n * if the user has the *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg), all issue types are returned.\n * if the user has the *Browse projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for one or more projects, the issue types associated with the projects the user has permission to browse are returned.","location":"Adapter","locationType":"Jira","app":"Jira","displayName":"Jira","type":"automatic","variables":{"incoming":{"adapter_id":"Adapter-Jira"},"outgoing":{"result":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>getRestapi2issuetyp</span>e"}],"groups":[],"actor":"Pronghorn","x":0.4080246913580247,"y":0.28439306358381505,"scheduled":false},"9b47":{"name":"query","summary":"Query IssueTypes","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"response[*].name","obj":"$var.685f.result"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.4148148148148148,"y":0.14797687861271677,"scheduled":false},"abb1":{"name":"ProviderForm","summary":"Create Issue","description":"Show Form w/ Custom Dropdown","location":"Application","app":"FormBuilder","displayName":"FormBuilder","type":"manual","variables":{"incoming":{"form_name":"Create Issue","instance_data":{},"provider_data":"$var.c342.merged_object"},"outgoing":{"export":null},"error":""},"view":"/formbuilder/task/ProviderForm","deprecated":false,"matched":[],"groups":[{"provenance":"Local AAA","name":"pronghorn_admin","description":"pronghorn_admin"}],"x":0.5141975308641975,"y":0.013872832369942197,"scheduled":false},"c342":{"name":"merge","summary":"Merge Issue Type","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"issue_type","value":{"task":"9b47","variable":"return_data"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.40987654320987654,"y":0.03005780346820809},"a7e0":{"name":"query","summary":"Query IssueType","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"issue_type[0]","obj":"$var.abb1.export"},"outgoing":{"return_data":"$var.job.issue_type_selected"},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.6067901234567902,"y":-0.005780346820809248,"scheduled":false},"cf9":{"name":"query","summary":"Query Issue Summary","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"issue_summary[0]","obj":"$var.abb1.export"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.5506172839506173,"y":0.12716763005780346,"scheduled":false},"5fae":{"name":"query","summary":"Query Issue Type Id","description":"Query data using a dot/bracket notation string and a matching key/value pair.","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"pass_on_null":false,"query":"response[name=$var.job.issue_type_selected$].id","obj":"$var.685f.result"},"outgoing":{"return_data":null},"error":""},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>query</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Query</span> Data Using 'json-query' Format"},{"key":"description","highlightString":"<span class='highlight-string'>Query</span> data using a dot/bracket notation string and a matching key/value pair."}],"groups":[],"x":0.6567901234567901,"y":0.003468208092485549,"scheduled":false},"5ff3":{"name":"merge","summary":"Merge Project Id","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"id","value":{"task":"6df","variable":"return_data"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.5080246913580246,"y":0.22890173410404624},"34f6":{"name":"merge","summary":"Merge issue type Id","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"id","value":{"task":"5fae","variable":"return_data"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.6265432098765432,"y":0.1283236994219653},"fca":{"name":"merge","summary":"Merge Issue Obj","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"summary","value":{"task":"cf9","variable":"return_data"}},{"key":"project","value":{"task":"5ff3","variable":"merged_object"}},{"key":"issuetype","value":{"task":"34f6","variable":"merged_object"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.5864197530864198,"y":0.21965317919075145},"8f61":{"name":"merge","summary":"Merge Issue Create","description":"Merge data into a single object","location":"Application","locationType":null,"app":"WorkFlowEngine","displayName":"WorkFlowEngine","type":"operation","variables":{"incoming":{"data_to_merge":[{"key":"fields","value":{"task":"fca","variable":"merged_object"}}]},"outgoing":{"merged_object":null}},"deprecated":false,"matched":[{"key":"name","highlightString":"<span class='highlight-string'>merge</span>"},{"key":"summary","highlightString":"<span class='highlight-string'>Merge</span> Data"},{"key":"description","highlightString":"<span class='highlight-string'>Merge</span> data into a single object"}],"groups":[],"x":0.6493827160493827,"y":0.2323699421965318}},"transitions":{"366":{"1698":{"type":"standard","state":"success"}},"1698":{"6df":{"type":"standard","state":"success"}},"6991":{"99d1":{"type":"standard","state":"success"}},"8124":{"366":{"type":"standard","state":"success"}},"workflow_start":{"f31f":{"type":"standard","state":"success"},"1f31":{"type":"standard","state":"success"}},"workflow_end":{},"f31f":{"da2d":{"type":"standard","state":"success"}},"da2d":{"dae":{"type":"standard","state":"success"}},"d8a2":{"8124":{"type":"standard","state":"success"},"c2bf":{"type":"standard","state":"success"},"390c":{"type":"standard","state":"success"}},"dae":{"d8a2":{"type":"standard","state":"success"}},"2cb":{},"1f31":{"c3de":{"type":"standard","state":"success"}},"c3de":{"366":{"type":"standard","state":"success"}},"390c":{"366":{"type":"standard","state":"success"}},"c2bf":{"366":{"type":"standard","state":"success"}},"6df":{"14f1":{"type":"standard","state":"success"}},"99d1":{"workflow_end":{"type":"standard","state":"success"}},"595b":{"6991":{"type":"standard","state":"success"}},"14f1":{"6991":{"type":"standard","state":"failure"},"685f":{"type":"standard","state":"success"}},"685f":{"9b47":{"type":"standard","state":"success"}},"9b47":{"c342":{"type":"standard","state":"success"}},"abb1":{"a7e0":{"type":"standard","state":"success"},"cf9":{"type":"standard","state":"success"},"5ff3":{"type":"standard","state":"success"}},"c342":{"abb1":{"type":"standard","state":"success"}},"a7e0":{"5fae":{"type":"standard","state":"success"}},"cf9":{"fca":{"type":"standard","state":"success"}},"5fae":{"34f6":{"type":"standard","state":"success"}},"5ff3":{"fca":{"type":"standard","state":"success"}},"34f6":{"fca":{"type":"standard","state":"success"}},"fca":{"8f61":{"type":"standard","state":"success"}},"8f61":{"595b":{"type":"standard","state":"success"}},"6a2e":{}},"font_size":12,"created":"2019-04-03T20:23:46.273Z","created_by":{"provenance":"Local AAA","username":"admin@pronghorn","firstname":"admin","inactive":false,"email":""},"groups":[],"last_updated":"2019-04-03T21:41:09.075Z","last_updated_by":{"provenance":"Local AAA","username":"admin@pronghorn","firstname":"admin","inactive":false,"email":""},"type":"automation","description":null}
@@ -1,3 +0,0 @@
1
- # Adapter Workflows
2
-
3
- This directory contains workflows that support the adapter use cases. These workflows can be imported into IAP. If the adapter is installed using App-Artifact the workflows should be automatically imported.