UNPKG

285 kBSource Map (JSON)View Raw
1{"version":3,"file":"bundle.js","sources":["src/config.js","src/decorators.js","src/rally-tools.js","src/config-create.js","src/providers.js","src/file.js","src/asset.js","src/fswrap.js","src/preset.js","src/notification.js","src/rule.js","src/supply-chain.js","src/user.js","src/tag.js","src/trace.js","src/index.js","src/baseCode.js","src/cli.js"],"sourcesContent":["import {homedir} from \"os\";\nimport {readFileSync} from \"fs\";\n\nexport let configFile = null\n\nif(homedir){\n configFile = homedir() + \"/.rallyconfig\";\n}\n\nlet configObject;\nexport function loadConfig(file){\n if(file) configFile = file;\n if(!configFile) return;\n\n configObject = {hasConfig: true};\n try{\n let json = readFileSync(configFile);\n configObject = JSON.parse(json);\n configObject.hasConfig = true;\n }catch(e){\n if(e.code == \"ENOENT\"){\n configObject.hasConfig = false;\n //ok, they should probably make a config\n }else{\n throw e;\n }\n }\n}\n\nexport function loadConfigFromArgs(args){\n let tempConfig = {\n hasConfig: true,\n ...args.config\n };\n\n configObject = tempConfig;\n}\n\nexport function setConfig(obj){\n configObject = obj;\n}\n\nexport {configObject};\n","\n//these are the help entries for each command\nexport let helpEntries = {};\nlet helpEntry = name => helpEntries[name] ? helpEntries[name] : (helpEntries[name] = {name});\n\n//short description\nexport function helpText(text){\n return function(func, name){\n helpEntry(name).text = text;\n return func;\n }\n}\n\n//flag type argument like -f or --file\nexport function arg(long, short, desc){\n return function(func, name){\n let args = helpEntry(name).args = helpEntry(name).args || [];\n args.unshift({long, short, desc});\n return func;\n }\n}\n\n//normal argument\nexport function param(param, desc){\n return function(func, name){\n let params = helpEntry(name).params = helpEntry(name).params || [];\n params.unshift({param, desc});\n return func;\n }\n}\n\n//usage string\nexport function usage(usage){\n return function(func, name){\n usage = usage.replace(/[\\[<](\\w+)[\\]>]/g, chalk`[{blue $1}]`);\n helpEntry(name).usage = usage;\n return func;\n }\n}\n\nexport function cachedgetter(target, key, desc){\n let cachedVal;\n\n let oldget = desc.get;\n desc.get = function(){\n if(cachedVal) return cachedVal;\n return cachedVal = oldget.call(this);\n };\n desc.set = function(val){\n cachedVal = val;\n };\n}\n\nfunction findValueInCache(args, cache){\n for(let [argsKey, value] of cache){\n if(args.length !== argsKey.length) continue;\n for(let i in argsKey){\n if(args[i] !== argsKey[i]){\n continue\n }\n }\n return {found: true, value};\n }\n return {found: false};\n}\n\n//This decorator takes a function and returns a function that remembers the\n// value returned by given arguments\nexport function cached(target, key, desc){\n let oldFunc = desc.value;\n let cachedValues = [];\n function newFunc(...args){\n let {found, value} = findValueInCache(args, cachedValues);\n if(!found){\n //Call the old function to find the value, then store it in the cache\n value = oldFun(...args);\n cachedValues.push([args, value]);\n }\n return value;\n }\n newFunc.clearCache = function(){\n cachedValues = [];\n }\n newFunc.cachePush = function(args, value){\n cachedValues.push([args, value]);\n }\n newFunc.remove = function(...args){\n let {found, value} = findValueInCache(args, cachedValues);\n if(found){\n cachedValues = cachedValues.filter(([arg, item]) => item !== value);\n }\n }\n\n return {\n ...desc,\n value: newFunc,\n };\n}\n\n//Access a deep property of an object: if path is [\"a\", \"b\", \"c\"], then this\n//function retuns obj.a.b.c\nfunction deepAccess(obj, path){\n let o = obj;\n for(let key of path){\n if(!o) return [];\n o = o[key];\n }\n return o;\n}\n\n//This takes a class as the first argument, then adds a getter/setter pair that\n//corresponds to an object in this.data\nexport function defineAssoc(classname, shortname, path){\n path = path.split(\".\");\n let lastKey = path.pop();\n\n Object.defineProperty(classname.prototype, shortname, {\n get(){\n return deepAccess(this, path)[lastKey];\n },\n set(val){\n deepAccess(this, path)[lastKey] = val;\n },\n });\n}\n\nimport {spawn as cp_spawn} from \"child_process\";\nimport {performance} from \"perf_hooks\";\n\n//Spawn promise decorator, based on https://gist.github.com/Stuk/6226938\nexport function spawn(options, ...args){\n if(typeof options !== \"object\"){\n args.unshift(options);\n options = {};\n }\n //todo options\n return new Promise((resolve, reject) => {\n let start = performance.now();\n\n let stdout = \"\";\n let stderr = \"\";\n let cp = cp_spawn(...args);\n\n let write = global.write;\n if(options.noecho){\n write = () => {};\n }\n if(cp.stdout) cp.stdout.on(\"data\", chunk => {stdout += chunk; write(chunk)});\n if(cp.stderr) cp.stderr.on(\"data\", chunk => {stderr += chunk; write(chunk)});\n\n cp.on(\"error\", reject);\n cp.on(\"close\", code => {\n let end = performance.now();\n let time = end - start;\n let timestr = time > 1000 ? (time/100|0)/10 + \"s\" : (time|0) + \"ms\";\n resolve({stdout, stderr, exitCode: code, time, timestr});\n });\n });\n}\n","import chalk from \"chalk\";\nimport {configObject} from \"./config.js\";\nimport {cached} from \"./decorators.js\";\nimport rp from \"request-promise\";\n\nglobal.chalk = chalk;\nglobal.log = (...text) => console.log(...text);\nglobal.write = (...text) => process.stdout.write(...text);\nglobal.elog = (...text) => console.error(...text);\nglobal.ewrite = (...text) => process.stderr.write(...text);\nglobal.errorLog = (...text) => log(...text.map(chalk.red));\n\nexport class lib{\n //This function takes 2 required arguemnts:\n // env: the enviornment you wish to use\n // and either:\n // 'path', the short path to the resource. ex '/presets/'\n // 'path_full', the full path to the resource like 'https://discovery-dev.sdvi.com/presets'\n //\n // If the method is anything but GET, either payload or body should be set.\n // payload should be a javascript object to be turned into json as the request body\n // body should be a string that is passed as the body. for example: the python code of a preset.\n //\n // qs are the querystring parameters, in a key: value object.\n // {filter: \"name=test name\"} becomes something like 'filter=name=test+name'\n //\n // headers are the headers of the request. \"Content-Type\" is already set if\n // payload is given as a parameter\n //\n // fullResponse should be true if you want to receive the request object,\n // not just the returned data.\n static async makeAPIRequest({\n env, path, path_full, fullPath,\n payload, body, method = \"GET\",\n qs, headers = {},\n fullResponse = false, timeout = configObject.timeout || 20000\n }){\n //backwards compatability from ruby script\n if(fullPath) path_full = fullPath;\n //Keys are defined in enviornment variables\n let config = configObject?.api?.[env];\n if(!config) {\n throw new UnconfiguredEnvError(env);\n };\n //Protect PROD and UAT(?) if the --no-protect flag was not set.\n if(method !== \"GET\" && !configObject.dangerModify){\n if(env === \"UAT\" && configObject.restrictUAT || env === \"PROD\"){\n throw new ProtectedEnvError(env);\n }\n }\n\n let rally_api_key = config.key;\n let rally_api = config.url;\n if(path && path.startsWith(\"/v1.0/\")){\n rally_api = rally_api.replace(\"/api/v2\", \"/api\");\n }\n\n path = path_full || rally_api + path;\n if(payload){\n body = JSON.stringify(payload, null, 4);\n }\n\n if(payload){\n headers[\"Content-Type\"] = \"application/vnd.api+json\";\n }\n\n let fullHeaders = {\n //SDVI ignores this header sometimes.\n Accept: \"application/vnd.api+json\",\n \"X-SDVI-Client-Application\": \"Discovery-rtlib-\" + (configObject.appName || \"commandline\"),\n ...headers,\n }\n\n if(configObject.vvverbose){\n log(`${method} @ ${path}`)\n log(JSON.stringify(fullHeaders, null, 4))\n\n if(body){\n log(body);\n }else{\n log(\"(No body\")\n }\n }\n\n let requestOptions = {\n method, body, qs, uri: path,\n timeout,\n auth: {bearer: rally_api_key},\n headers: fullHeaders,\n simple: false, resolveWithFullResponse: true,\n };\n\n let response;\n try{\n response = await rp(requestOptions);\n if(configObject.vverbose || configObject.vvverbose){\n log(chalk`${method} @ ${response.request.uri.href}`);\n }\n }catch(e){\n if(e?.cause.code === \"ESOCKETTIMEDOUT\"){\n throw new APIError(response || {}, requestOptions, body);\n }else{\n throw e;\n }\n }\n\n //Throw an error for any 5xx or 4xx\n if(!fullResponse && ![200, 201, 202, 203, 204].includes(response.statusCode)){\n throw new APIError(response, requestOptions, body);\n }\n let contentType = response.headers[\"content-type\"];\n let isJSONResponse = contentType === \"application/vnd.api+json\" || contentType === \"application/json\";\n\n if(configObject.vvverbose){\n log(response.body);\n }\n\n if(fullResponse){\n return response;\n }else if(isJSONResponse){\n if([200, 201, 202, 203, 204].includes(response.statusCode) && !response?.body?.trim()) return {};\n try{\n return JSON.parse(response.body);\n }catch(e){\n log(response.body);\n throw new AbortError(\"Body is not valid json: \");\n }\n }else{\n return response.body;\n }\n }\n\n //Index a json endpoint that returns a {links} field.\n //This function returns the merged data objects as an array\n //\n //Additonal options (besides makeAPIRequest options):\n // - Observe: function to be called for each set of data from the api\n static async indexPath(env, path){\n let all = [];\n\n let opts = typeof env === \"string\" ? {env, path} : env;\n let json = await this.makeAPIRequest(opts);\n\n let [numPages, pageSize] = this.numPages(json.links.last);\n //log(`num pages: ${numPages} * ${pageSize}`);\n\n all = [...json.data];\n while(json.links.next){\n json = await this.makeAPIRequest({...opts, path_full: json.links.next});\n if(opts.observe) await opts.observe(json.data);\n all = [...all, ...json.data];\n }\n\n return all;\n }\n\n //Returns number of pages and pagination size\n static numPages(str){\n return /page=(\\d+)p(\\d+)/.exec(str).slice(1);\n }\n\n static arrayChunk(array, chunkSize){\n let newArr = [];\n for (let i = 0; i < array.length; i += chunkSize){\n newArr.push(array.slice(i, i + chunkSize));\n }\n return newArr;\n }\n\n static async doPromises(promises, result = [], cb){\n for(let promise of promises){\n let res = await promise;\n result.push(res);\n if(cb){\n cb(res.data);\n }\n }\n return result\n }\n\n static clearProgress(size = 30){\n if(!configObject.globalProgress) return;\n process.stderr.write(`\\r${\" \".repeat(size + 15)}\\r`);\n }\n\n static async drawProgress(i, max, size = process.stdout.columns - 15 || 15){\n if(!configObject.globalProgress) return;\n if(size > 45) size = 45;\n let pct = Number(i) / Number(max);\n //clamp between 0 and 1\n pct = pct < 0 ? 0 : pct > 1 ? 1 : pct;\n let numFilled = Math.floor(pct * size);\n let numEmpty = size - numFilled;\n\n this.clearProgress(size);\n process.stderr.write(`[${\"*\".repeat(numFilled)}${\" \".repeat(numEmpty)}] ${i} / ${max}`);\n }\n\n\n static async keepalive(func, inputData, {chunksize = 20, observe = async _=>_, progress = configObject.globalProgress} = {}){\n let total = inputData ? inputData.length : func.length;\n let i = 0;\n let createPromise = () => {\n let ret;\n if(i >= total) return [];\n if(inputData){\n ret = [i, func(inputData[i])];\n }else{\n ret = [i, func[i]()];\n }\n\n i++;\n return ret;\n }\n\n let values = [];\n let finished = 0;\n if(progress) process.stderr.write(\"\\n\");\n let threads = [...this.range(chunksize)].map(async whichThread => {\n while(true){\n let [i, currentPromise] = createPromise();\n if(i == undefined) break;\n values[i] = await observe(await currentPromise);\n if(progress) this.drawProgress(++finished, total);\n }\n });\n await Promise.all(threads);\n if(progress) process.stderr.write(\"\\n\");\n\n\n return values;\n }\n\n static *range(start, end){\n if(end === undefined){\n end = start;\n start = 0;\n }\n while(start < end) yield start++;\n }\n\n //Index a json endpoint that returns a {links} field.\n //\n //This function is faster than indexPath because it can guess the pages it\n //needs to retreive so that it can request all assets at once.\n //\n //This function assumes that the content from the inital request is the\n //first page, so starting on another page may cause issues. Consider\n //indexPath for that.\n //\n //Additional opts, besides default indexPath opts:\n // - chunksize[10]: How often to break apart concurrent requests\n static async indexPathFast(env, path){\n let opts = typeof env === \"string\" ? {env, path} : env;\n //Create a copy of the options in case we need to have a special first request\n let start = opts.start || 1;\n let initOpts = {...opts};\n if(opts.pageSize){\n initOpts.qs = {...opts.qs};\n initOpts.qs.page = `${start}p${opts.pageSize}`;\n }\n\n let json = await this.makeAPIRequest(initOpts);\n\n if(opts.observe && opts.start !== 1) json = await opts.observe(json);\n\n let baselink = json.links.first;\n const linkToPage = page => baselink.replace(`page=1p`, `page=${page}p`);\n\n let [numPages, pageSize] = this.numPages(json.links.last);\n\n //Construct an array of all the requests that are done simultanously.\n //Assume that the content from the inital request is the first page.\n let allResults = await this.keepalive(\n this.makeAPIRequest,\n [...this.range(start+1, Number(numPages) + 1 || opts.limit + 1)]\n .map(i => ({...opts, path_full: linkToPage(i)})),\n {chunksize: opts.chunksize, observe: opts.observe},\n );\n if(start == 1){\n allResults.unshift(json);\n }\n this.clearProgress();\n\n let all = [];\n for(let result of allResults){\n for(let item of result.data){\n all.push(item);\n }\n }\n\n return all;\n }\n static isLocalEnv(env){\n return !env || env === \"LOCAL\" || env === \"LOC\";\n }\n static envName(env){\n if(this.isLocalEnv(env)) return \"LOCAL\";\n return env;\n }\n};\n\nexport class AbortError extends Error{\n constructor(message){\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.name = \"AbortError\";\n }\n}\n\nexport class APIError extends Error{\n constructor(response, opts, body){\n super(chalk`\n{reset Request returned} {yellow ${response?.statusCode}}{\n{green ${JSON.stringify(opts, null, 4)}}\n{green ${body}}\n{reset ${response.body}}\n===============================\n{red ${response.body ? \"Request timed out\" : \"Bad response from API\"}}\n===============================\n `);\n this.response = response;\n this.opts = opts;\n this.body = body;\n\n Error.captureStackTrace(this, this.constructor);\n this.name = \"ApiError\";\n }\n}\n\nexport class UnconfiguredEnvError extends AbortError{\n constructor(env){\n super(\"Unconfigured enviornment: \" + env);\n this.name = \"Unconfigured Env Error\";\n }\n}\n\nexport class ProtectedEnvError extends AbortError{\n constructor(env){\n super(\"Protected enviornment: \" + env);\n this.name = \"Protected Env Error\";\n }\n}\n\nexport class FileTooLargeError extends Error{\n constructor(file){\n super(`File ${file.parentAsset ? file.parentAsset.name : \"(unknown)\"}/${file.name} size is: ${file.sizeGB}g (> ~.2G)`);\n this.name = \"File too large error\";\n }\n}\n\nexport class Collection{\n constructor(arr){\n this.arr = arr;\n }\n [Symbol.iterator](){\n return this.arr[Symbol.iterator]();\n }\n findById(id){\n return this.arr.find(x => x.id == id);\n }\n findByName(name){\n return this.arr.find(x => x.name == name);\n }\n findByNameContains(name){\n return this.arr.find(x => x.name.includes(name));\n }\n log(){\n for(let d of this){\n if(d){\n log(d.chalkPrint(true));\n }else{\n log(chalk`{red (None)}`);\n }\n }\n }\n get length(){return this.arr.length;}\n}\n\nexport class RallyBase{\n static handleCaching(){\n if(!this.cache) this.cache = [];\n }\n static isLoaded(env){\n if(!this.hasLoadedAll) return;\n return this.hasLoadedAll[env];\n }\n static async getById(env, id, qs){\n this.handleCaching();\n for(let item of this.cache){\n if(item.id == id && item.remote === env || `${env}-${id}` === item.metastring) return item;\n }\n\n let data = await lib.makeAPIRequest({\n env, path: `/${this.endpoint}/${id}`,\n qs\n });\n if(data.data){\n let o = new this({data: data.data, remote: env, included: data.included});\n this.cache.push(o);\n return o;\n }\n }\n\n static async getByName(env, name, qs){\n this.handleCaching();\n for(let item of this.cache){\n if(item.name === name && item.remote === env) return item;\n }\n\n let data = await lib.makeAPIRequest({\n env, path: `/${this.endpoint}`,\n qs: {...qs, filter: `name=${name}` + (qs ? qs.filter : \"\")},\n });\n //TODO included might not wokr correctly here\n if(data.data[0]){\n let o = new this({data: data.data[0], remote: env, included: data.included});\n this.cache.push(o);\n return o;\n }\n }\n\n static async getAllPreCollect(d){return d;}\n static async getAll(env){\n this.handleCaching();\n let datas = await lib.indexPathFast({\n env, path: `/${this.endpoint}`,\n pageSize: \"50\",\n qs: {sort: \"id\"},\n });\n datas = await this.getAllPreCollect(datas);\n let all = new Collection(datas.map(data => new this({data, remote: env})));\n this.cache = [...this.cache, ...all.arr];\n return all;\n }\n static async removeCache(env){\n this.handleCaching();\n this.cache = this.cache.filter(x => x.remote !== env);\n }\n\n //Specific turns name into id based on env\n //Generic turns ids into names\n async resolveApply(type, dataObj, direction){\n let obj;\n if(direction == \"generic\"){\n obj = await type.getById(this.remote, dataObj.id);\n if(obj){\n dataObj.name = obj.name\n }\n }else if(direction == \"specific\"){\n obj = await type.getByName(this.remote, dataObj.name);\n if(obj){\n dataObj.id = obj.id\n }\n }\n return obj;\n }\n\n //Type is the baseclass you are looking for (should extend RallyBase)\n //name is the name of the field\n //isArray is true if it has multiple cardinailty, false if it is single\n //direction gets passed directly to resolveApply\n async resolveField(type, name, isArray=false, direction=\"generic\"){\n // ignore empty fields\n let field = this.relationships[name];\n if(!field?.data) return;\n\n if(isArray){\n return await Promise.all(field.data.map(o => this.resolveApply(type, o, direction)));\n }else{\n return await this.resolveApply(type, field.data, direction);\n }\n }\n\n cleanup(){\n for(let [key, val] of Object.entries(this.relationships)){\n //Remove ids from data\n if(val.data){\n if(val.data.id){\n delete val.data.id;\n }else if(val.data[0]){\n for(let x of val.data) delete x.id;\n }\n }\n delete val.links;\n }\n // organization is unused (?)\n delete this.relationships.organization;\n // id is specific to envs\n // but save source inside meta string in case we need it\n this.metastring = this.remote + \"-\" + this.data.id;\n delete this.data.id;\n // links too\n delete this.data.links;\n }\n}\n\nexport function sleep(time = 1000){\n return new Promise(resolve => setTimeout(resolve, time));\n}\n","import {configObject} from \"./config.js\";\nimport {join, basename} from \"path\";\nimport Preset from \"./preset.js\";\nimport Rule from \"./rule.js\";\nexport const inquirer = importLazy(\"inquirer\");\nconst readdir = importLazy(\"recursive-readdir\");\n\nlet hasAutoCompletePrompt = false;\nexport function addAutoCompletePrompt(){\n if(hasAutoCompletePrompt) return\n hasAutoCompletePrompt = true;\n inquirer.registerPrompt(\"autocomplete\", require(\"inquirer-autocomplete-prompt\"));\n}\n\nexport async function $api(propArray){\n let q;\n q = await inquirer.prompt([{\n type: \"input\",\n name: \"company\",\n message: `What is your company?`,\n default: `discovery`,\n }]);\n\n let company = q.company;\n\n const defaults = {\n DEV: `https://${company}-dev.sdvi.com/api/v2`,\n UAT: `https://${company}-uat.sdvi.com/api/v2`,\n QA: `https://${company}-qa.sdvi.com/api/v2`,\n PROD: `https://${company}.sdvi.com/api/v2`,\n };\n\n if(propArray && propArray[1]){\n q = {envs: [propArray[1]]};\n }else{\n //Create a checkbox prompt to choose enviornments\n q = await inquirer.prompt([{\n type: \"checkbox\",\n name: \"envs\",\n message: `What enviornments would you like to configure?`,\n choices: Object.keys(defaults).map(name => ({name, checked:true})),\n }]);\n }\n\n //Each env should ask 2 for two things: The url and the key.\n let questions = q.envs.map(env => {\n let defaultKey = process.env[`rally_api_key_${env}`];\n if(configObject && configObject.api && configObject.api[env]){\n defaultKey = configObject.api[env].key;\n }\n\n return [{\n type: \"input\",\n name: `api.${env}.url`,\n message: `What is the api endpoint for ${env}?`,\n default: defaults[env],\n }, {\n type: \"input\",\n name: `api.${env}.key`,\n message: `What is your api key for ${env}?`,\n default: defaultKey,\n }];\n });\n\n //flatten and ask\n questions = [].concat(...questions);\n q = await inquirer.prompt(questions);\n if(propArray){\n q.api = {...configObject.api, ...q.api};\n }\n return q;\n}\nexport async function $chalk(propArray){\n return {chalk: await askQuestion(\"Would you like chalk enabled (Adds coloring)?\")};\n}\nexport async function $restrictUAT(propArray){\n return {restrictUAT: await askQuestion(\"Would you like to protect UAT?\")};\n}\nexport async function $repodir(propArray){\n return await inquirer.prompt([{\n type: \"input\",\n name: `repodir`,\n message: `Where is your rally repository?`,\n default: process.env[\"rally_repo_path\"],\n }]);\n}\n\nexport async function $appName(propArray){\n let defaultAppName = \"cmdline-\" + (process.env.USERNAME || process.env.LOGNAME);\n let project = await askInput(\"Application name?\", defaultAppName);\n if(project === \"none\" || project === \"-\" || project === \"\" || !project){\n project = null\n }\n return {appName: project};\n}\n\nexport async function $project(propArray){\n let project = await askInput(\"Subproject directory?\");\n if(project === \"none\" || project === \"-\" || project === \"\" || !project){\n project = null\n }\n return {project};\n}\n\nexport async function $defaultEnv(propArray){\n return await inquirer.prompt([{\n type: \"input\",\n name: `defaultEnv`,\n message: `Default enviornment?`,\n default: \"DEV\",\n }]);\n}\n\n//Internal usage/testing\nexport async function selectProvider(providers, autoDefault = false){\n addAutoCompletePrompt();\n let defaultProvider = providers.findByName(\"SdviEvaluate\");\n if(autoDefault){\n return defaultProvider;\n }else{\n let choices = providers.arr.map(x => ({\n name: x.chalkPrint(true),\n value: x,\n }))\n let q = await inquirer.prompt([{\n type: \"autocomplete\",\n name: \"provider\",\n default: defaultProvider,\n source: async (sofar, input) => {\n return choices.filter(x => input ? x.value.name.toLowerCase().includes(input.toLowerCase()) : true);\n },\n }]);\n return q.provider;\n }\n}\n\nexport async function loadLocals(path, Class){\n let basePath = configObject.repodir;\n let objs = (await readdir(basePath))\n .filter(name => name.includes(path))\n .filter(name => !basename(name).startsWith(\".\"))\n .map(name => new Class({path: name}));\n return objs;\n}\n\nexport async function selectLocal(path, typeName, Class, canSelectNone = true){\n addAutoCompletePrompt();\n let objs = await loadLocals(path, Class);\n let objsMap = objs.map(x => ({\n name: x.chalkPrint(true),\n value: x,\n }));\n let none = {\n name: (chalk` {red None}: {red None}`),\n value: null,\n };\n\n if(canSelectNone) objsMap.unshift(none);\n\n let q = await inquirer.prompt([{\n type: \"autocomplete\",\n name: \"obj\",\n message: `What ${typeName} do you want?`,\n source: async (sofar, input) => {\n return objsMap.filter(x => input ? x.name.toLowerCase().includes(input.toLowerCase()) : true);\n },\n }]);\n return q.obj;\n}\n\nexport async function selectPreset({purpose = \"preset\", canSelectNone}){\n return selectLocal(\"silo-presets\", purpose, Preset, canSelectNone);\n}\nexport async function selectRule({purpose = \"rule\", canSelectNone}){\n return selectLocal(\"silo-rules\", purpose, Rule, canSelectNone);\n}\n\nexport async function askInput(question, def){\n return (await inquirer.prompt([{\n type: \"input\",\n name: \"ok\",\n message: question,\n default: def,\n }])).ok;\n}\n\nexport async function askQuestion(question){\n return (await inquirer.prompt([{\n type: \"confirm\",\n name: \"ok\",\n message: question,\n }])).ok;\n}\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nclass Provider extends RallyBase{\n constructor({data, remote}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n }\n //cached\n async getEditorConfig(){\n if(this.editorConfig) return this.editorConfig;\n\n this.editorConfig = await lib.makeAPIRequest({\n env: this.remote,\n path_full: this.data.links.editorConfig\n });\n this.editorConfig.fileExt = await this.getFileExtension();\n return this.editorConfig;\n }\n static async getAllPreCollect(providers){\n return providers.sort((a, b) => {\n return a.attributes.category.localeCompare(b.attributes.category) ||\n a.attributes.name .localeCompare(b.attributes.name);\n });\n }\n\n async getFileExtension(){\n let config = await this.getEditorConfig();\n let map = {\n python: \"py\",\n text: \"txt\",\n getmap(key){\n if(this.name === \"Aurora\") return \"zip\";\n if(this[key]) return this[key];\n return key;\n }\n }\n return map.getmap(config.lang);\n }\n\n chalkPrint(pad=true){\n let id = String(this.id)\n if(pad) id = id.padStart(4);\n return chalk`{green ${id}}: {blue ${this.category}} - {green ${this.name}}`;\n }\n}\n\ndefineAssoc(Provider, \"id\", \"data.id\");\ndefineAssoc(Provider, \"name\", \"data.attributes.name\");\ndefineAssoc(Provider, \"category\", \"data.attributes.category\");\ndefineAssoc(Provider, \"remote\", \"meta.remote\");\ndefineAssoc(Provider, \"editorConfig\", \"meta.editorConfig\");\nProvider.endpoint = \"providerTypes\";\n\nexport default Provider;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase, FileTooLargeError} from \"./rally-tools.js\";\n\nclass File extends RallyBase{\n constructor({data, remote, included, parent}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n this.parentAsset = parent;\n }\n\n chalkPrint(pad=false){\n let id = String(\"F-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n if(pad) id = id.padStart(15);\n return chalk`{green ${id}}: {blue ${this.data.attributes ? this.name : \"(lite file)\"}} {red ${this.sizeHR}}`;\n }\n\n canBeDownloaded(){\n return this.sizeGB <= .2;\n }\n\n async getContent(force = false){\n if(!this.canBeDownloaded() && !force){\n throw new FileTooLargeError(this);\n }\n\n return lib.makeAPIRequest({\n env: this.remote, fullPath: this.contentLink\n });\n }\n async delete(remove = true){\n return lib.makeAPIRequest({\n env: this.remote, fullPath: this.selfLink,\n method: \"DELETE\",\n });\n }\n get size(){\n return Object.values(this.data.attributes.instances)[0].size\n }\n\n get sizeGB(){\n return Math.round(this.size / 1024 / 1024 / 1024 * 10) / 10;\n }\n\n get sizeHR(){\n let units = [\"B\", \"K\", \"M\", \"G\", \"T\"];\n\n let unitIdx = 0;\n\n let size = this.size;\n while(size > 1000){\n size /= 1024;\n unitIdx++;\n }\n\n if(size > 100){\n size = Math.round(size);\n }else{\n size = Math.round(size * 10) / 10;\n }\n\n return size + units[unitIdx];\n }\n\n get instancesList() {\n let instances = [];\n for(let [key, val] of Object.entries(this.instances)){\n let n = {id: key};\n Object.assign(n, val);\n instances.push(n);\n }\n return instances;\n }\n\n static rslURL(instance){\n return `rsl://${instance.storageLocationName}/${instance.name}`;\n }\n}\n\ndefineAssoc(File, \"id\", \"data.id\");\ndefineAssoc(File, \"name\", \"data.attributes.label\");\ndefineAssoc(File, \"contentLink\", \"data.links.content\");\ndefineAssoc(File, \"selfLink\", \"data.links.self\");\ndefineAssoc(File, \"label\", \"data.attributes.label\");\ndefineAssoc(File, \"md5\", \"data.attributes.md5\");\ndefineAssoc(File, \"sha512\", \"data.attributes.sha512\");\ndefineAssoc(File, \"tags\", \"data.attributes.tagList\");\ndefineAssoc(File, \"instances\", \"data.attributes.instances\");\nFile.endpoint = null\n\nexport default File;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase, sleep} from \"./rally-tools.js\";\nimport {configObject} from \"./config.js\";\nimport File from \"./file.js\";\nimport Provider from \"./providers.js\";\n\nclass Asset extends RallyBase{\n constructor({data, remote, included, lite}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n if(included){\n this.meta.metadata = Asset.normalizeMetadata(included);\n }\n this.lite = !!lite;\n }\n static normalizeMetadata(payload){\n let newMetadata = {}\n for(let md of payload){\n if(md.type !== \"metadata\") continue;\n newMetadata[md.attributes.usage] = md.attributes.metadata;\n }\n return newMetadata;\n }\n\n async getMetadata(forceRefresh = false){\n if(this.meta.metadata && !forceRefresh) return this.meta.metadata;\n let req = await lib.makeAPIRequest({\n env: this.remote, path: `/movies/${this.id}/metadata`,\n });\n\n return this.meta.metadata = Asset.normalizeMetadata(req.data);\n }\n\n async patchMetadata(metadata){\n if(metadata.Workflow){\n //FIXME\n //Currently, WORKFLOW_METADATA cannot be patched via api: we need to\n //start a ephemeral eval to upload it\n let md = JSON.stringify(JSON.stringify(metadata.Workflow));\n let fakePreset = {\n code: `WORKFLOW_METADATA.update(json.loads(${md}))`\n }\n await this.startEphemeralEvaluateIdeal(fakePreset);\n log(\"WFMD Patched using ephemeralEval\")\n }\n if(metadata.Metadata){\n let req = await lib.makeAPIRequest({\n env: this.remote, path: `/movies/${this.id}/metadata/Metadata`,\n method: \"PATCH\",\n payload: {\n \"data\": {\n \"type\": \"metadata\",\n \"attributes\": {\n \"metadata\": metadata.Metadata\n },\n }\n }\n });\n log(\"MD Patched\")\n }\n }\n\n static lite(id, remote){\n return new this({data: {id}, remote, lite: true})\n }\n\n chalkPrint(pad=false){\n let id = String(\"A-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n if(pad) id = id.padStart(15);\n return chalk`{green ${id}}: {blue ${this.data.attributes ? this.name : \"(lite asset)\"}}`;\n }\n\n static async createNew(name, env){\n let req = await lib.makeAPIRequest({\n env, path: \"/assets\",\n method: \"POST\",\n payload: {\n data: {\n attributes: {name},\n type: \"assets\"\n }\n }\n });\n return new this({data: req.data, remote: env});\n }\n\n async delete(){\n let req = await lib.makeAPIRequest({\n env: this.remote, path: \"/assets/\" + this.id,\n method: \"DELETE\",\n });\n }\n\n async getFiles(){\n let req = await lib.indexPathFast({\n env: this.remote, path: `/assets/${this.id}/files`,\n method: \"GET\",\n });\n\n //return req;\n return new Collection(req.map(x => new File({data: x, remote: this.remote, parent: this})));\n }\n\n async addFile(label, fileuris){\n if(!Array.isArray(fileuris)) fileuris = [fileuris];\n\n let instances = {}\n for(let i = 0; i < fileuris.length; i++){\n instances[String(i + 1)] = {uri: fileuris[i]};\n }\n\n let req = await lib.makeAPIRequest({\n env: this.remote, path: \"/files\",\n method: \"POST\",\n payload: {\n \"data\": {\n \"attributes\": {\n label, instances,\n },\n \"relationships\": {\n \"asset\": {\n \"data\": {\n id: this.id,\n \"type\": \"assets\"\n }\n }\n },\n \"type\": \"files\"\n }\n\n }\n });\n return req;\n }\n async startWorkflow(jobName, {initData, priority} = {}){\n let attributes = {};\n if(initData){\n //Convert init data to string\n initData = typeof initData === \"string\" ? initData : JSON.stringify(initData);\n attributes.initData = initData;\n }\n if(priority){\n attributes.priority = priority\n }\n\n let req = await lib.makeAPIRequest({\n env: this.remote, path: \"/workflows\",\n method: \"POST\",\n payload: {\n \"data\": {\n \"type\": \"workflows\",\n attributes,\n \"relationships\": {\n \"movie\": {\n \"data\": {\n id: this.id,\n \"type\": \"movies\"\n }\n }, \"rule\": {\n \"data\": {\n \"attributes\": {\n \"name\": jobName,\n },\n \"type\": \"rules\"\n }\n }\n }\n }\n }\n });\n return req;\n }\n static async startAnonWorkflow(env, jobName, {initData, priority} = {}){\n let attributes = {};\n if(initData){\n //Convert init data to string\n initData = typeof initData === \"string\" ? initData : JSON.stringify(initData);\n attributes.initData = initData;\n }\n if(priority){\n attributes.priority = priority\n }\n\n let req = await lib.makeAPIRequest({\n env, path: \"/workflows\",\n method: \"POST\",\n payload: {\n \"data\": {\n \"type\": \"workflows\",\n attributes,\n \"relationships\": {\n \"rule\": {\n \"data\": {\n \"attributes\": {\n \"name\": jobName,\n },\n \"type\": \"rules\"\n }\n }\n }\n }\n }\n });\n return req;\n\n }\n\n async startEphemeralEvaluateIdeal(preset, dynamicPresetData, isBinary=false){\n let res;\n const env = this.remote;\n let provider = await Provider.getByName(this.remote, \"SdviEvaluate\");\n\n write(chalk`Starting ephemeral evaluate on ${this.chalkPrint(false)}...`)\n\n // Fire and forget.\n let evalInfo = await lib.makeAPIRequest({\n env: this.remote, path: \"/jobs\", method: \"POST\",\n payload: {\n data: {\n attributes: {\n category: provider.category,\n providerTypeName: provider.name,\n rallyConfiguration: {},\n //we need to strip invalid utf8 characters from the\n //buffer before we encode it or the sdvi backend dies\n providerData: Buffer.from(preset.code, isBinary && \"binary\" || \"utf8\").toString(\"base64\"),\n dynamicPresetData,\n },\n type: \"jobs\",\n relationships: {\n movie: {\n data: {\n id: this.id,\n type: \"movies\",\n }\n }\n }\n }\n }\n });\n\n write(\" Waiting for finish...\");\n for(;;){\n res = await lib.makeAPIRequest({\n env, path_full: evalInfo.data.links.self\n });\n write(\".\");\n if(res.data.attributes.state == \"Complete\"){\n write(chalk`{green Done}...\\n`);\n break;\n }\n await sleep(300);\n }\n\n return;\n }\n\n async startEvaluate(presetid, dynamicPresetData){\n // Fire and forget.\n let data = await lib.makeAPIRequest({\n env: this.remote, path: \"/jobs\", method: \"POST\",\n payload: {\n data: {\n type: \"jobs\",\n attributes: {\n dynamicPresetData,\n },\n relationships: {\n movie: {\n data: {\n id: this.id,\n type: \"movies\",\n }\n }, preset: {\n data: {\n id: presetid,\n type: \"presets\",\n }\n }\n }\n }\n }\n });\n return data;\n }\n async rename(newName){\n let req = await lib.makeAPIRequest({\n env: this.remote, path: `/assets/${this.id}`,\n method: \"PATCH\",\n payload: {\n data: {\n attributes: {\n name: newName,\n },\n type: \"assets\",\n }\n }\n });\n\n this.name = newName;\n\n return req;\n }\n\n async migrate(targetEnv){\n configObject.globalProgress = false;\n log(`Creating paired file in ${targetEnv}`);\n\n //Fetch metadata in parallel, we await it later\n let _mdPromise = this.getMetadata();\n\n let targetAsset = await Asset.getByName(targetEnv, this.name);\n if(targetAsset){\n log(`Asset already exists ${targetAsset.chalkPrint()}`);\n //if(configObject.script) process.exit(10);\n }else{\n targetAsset = await Asset.createNew(this.name, targetEnv);\n log(`Asset created ${targetAsset.chalkPrint()}`);\n }\n\n //wait for metadata to be ready before patching\n await _mdPromise;\n log(\"Adding asset metadata\");\n await targetAsset.patchMetadata(this.md);\n\n let fileCreations = [];\n for(let file of await this.getFiles()){\n //Check for any valid copy-able instances\n for(let inst of file.instancesList){\n //We need to skip internal files\n if(inst.storageLocationName === \"Rally Platform Bucket\") continue;\n\n log(`Adding file: ${file.chalkPrint()}`);\n fileCreations.push(targetAsset.addFileInstance(file, inst));\n }\n }\n await Promise.all(fileCreations);\n }\n\n async addFileInstance(file, inst, tagList = []){\n let newInst = {\n uri: File.rslURL(inst),\n name: inst.name,\n size: inst.size,\n lastModified: inst.lastModified,\n storageLocationName: inst.storageLocationName,\n };\n\n let request = lib.makeAPIRequest({\n env: this.remote, path: `/files`, method: \"POST\",\n\n payload: {\n data: {\n type: \"files\",\n attributes: {\n label: file.label,\n tagList,\n instances: {\n \"1\": newInst,\n }\n },\n relationships: {\n asset: {\n data: {\n id: this.id,\n type: \"assets\"\n },\n },\n },\n }\n }\n });\n\n\n try{\n let fileData = await request;\n let newFile = new File({data: fileData.data, remote: this.remote, parent: this})\n if(configObject.script) console.log(inst.uri, newFile.instancesList[0].uri);\n }catch(e){\n log(chalk`{red Failed file: ${file.chalkPrint()}}`)\n }\n }\n}\n\ndefineAssoc(Asset, \"id\", \"data.id\");\ndefineAssoc(Asset, \"name\", \"data.attributes.name\");\ndefineAssoc(Asset, \"remote\", \"meta.remote\");\ndefineAssoc(Asset, \"md\", \"meta.metadata\");\ndefineAssoc(Asset, \"lite\", \"meta.lite\");\nAsset.endpoint = \"movies\"\n\nexport default Asset;\n","import fs from \"fs\";\nimport {dirname} from \"path\";\n\nimport {configObject} from \"./config.js\";\nimport {homedir} from \"os\";\n\n\nlet home;\nif(homedir){\n home = homedir();\n}\nconst colon = /:/g;\nconst siloLike = /(silo\\-\\w+?)s?\\/([^\\/]+)\\.([\\w1234567890]+)$/g;\nexport function pathTransform(path){\n if(path.includes(\":\")){\n //Ignore the first colon in window-like filesystems\n path = path.slice(0, 3) + path.slice(3).replace(colon, \"--\");\n }\n if(configObject.invertedPath){\n path = path.replace(siloLike, \"$2-$1.$3\")\n }\n if(path.includes(\"\\\\342\\\\200\\\\220\")){\n path = path.replace(\"\\\\342\\\\200\\\\220\", \"‐\");\n }\n return path;\n}\n\nexport function readFileSync(path, options){\n return fs.readFileSync(pathTransform(path), options);\n}\n//Create writefilesync, with ability to create directory if it doesnt exist\nexport function writeFileSync(path, data, options, dircreated = false){\n path = pathTransform(path);\n try{\n return fs.writeFileSync(path, data, options);\n }catch(e){\n if(dircreated) throw e;\n let directory = dirname(path);\n try{\n fs.statSync(directory);\n throw e;\n }catch(nodir){\n fs.mkdirSync(directory);\n return writeFileSync(path, data, options, true);\n }\n }\n}\n","import {RallyBase, lib, AbortError, Collection} from \"./rally-tools.js\";\nimport {basename, resolve as pathResolve, dirname} from \"path\";\nimport {cached, defineAssoc, spawn} from \"./decorators.js\";\nimport {configObject} from \"./config.js\";\nimport {loadLocals} from \"./config-create\";\nimport Provider from \"./providers.js\";\nimport Asset from \"./asset.js\";\n\n// pathtransform for hotfix\nimport {writeFileSync, readFileSync, pathTransform} from \"./fswrap.js\";\nimport path from \"path\";\nimport moment from \"moment\";\n\nlet exists = {};\n\nclass Preset extends RallyBase{\n constructor({path, remote, data, subProject} = {}){\n // Get full path if possible\n if(path){\n path = pathResolve(path);\n if(dirname(path).includes(\"silo-metadata\")){\n throw new AbortError(\"Constructing preset from metadata file\")\n }\n }\n\n super();\n\n\n // Cache by path\n if(path){\n if(exists[pathTransform(path)]) return exists[pathTransform(path)];\n exists[pathTransform(path)] = this;\n }\n\n this.meta = {};\n this.subproject = subProject;\n this.remote = remote\n if(lib.isLocalEnv(this.remote)){\n if(path){\n this.path = path;\n let pathspl = this.path.split(\".\");\n this.ext = pathspl[pathspl.length-1];\n try{\n this.code = this.getLocalCode();\n }catch(e){\n if(e.code === \"ENOENT\" && configObject.ignoreMissing){\n this.missing = true;\n return undefined;\n }else{\n log(chalk`{red Node Error} ${e.message}`);\n throw new AbortError(\"Could not load code of local file\");\n }\n }\n let name = this.parseFilenameForName() || this.parseCodeForName();\n try{\n this.data = this.getLocalMetadata();\n this.isGeneric = true;\n name = this.name;\n }catch(e){\n log(chalk`{yellow Warning}: ${path} does not have a readable metadata file! Looking for ${this.localmetadatapath}`);\n this.data = Preset.newShell(name);\n this.isGeneric = false;\n }\n this.name = name;\n }else{\n this.data = Preset.newShell();\n }\n }else{\n this.data = data;\n //this.name = data.attributes.name;\n //this.id = data.id;\n this.isGeneric = false;\n }\n this.data.attributes.rallyConfiguration = undefined;\n this.data.attributes.systemManaged = undefined;\n }\n //Given a metadata file, get its actualy file\n static async fromMetadata(path, subproject){\n let data;\n try{\n data = JSON.parse(readFileSync(path));\n }catch(e){\n if(e.code === \"ENOENT\" && configObject.ignoreMissing){\n return null;\n }else{\n throw e;\n }\n }\n let providerType = data.relationships.providerType.data.name;\n let provider = await Provider.getByName(\"DEV\", providerType);\n\n if(!provider){\n log(chalk`{red The provider type {green ${providerType}} does not exist}`);\n log(chalk`{red Skipping {green ${path}}.}`);\n return null;\n }\n\n let ext = await provider.getFileExtension();\n let name = data.attributes.name;\n\n let realpath = Preset.getLocalPath(name, ext, subproject);\n return new Preset({path: realpath, subProject: subproject});\n }\n\n static newShell(name = undefined){\n return {\n \"attributes\": {\n \"providerSettings\": {\n \"PresetName\": name\n }\n },\n \"relationships\": {},\n \"type\": \"presets\",\n };\n }\n cleanup(){\n super.cleanup();\n delete this.attributes[\"createdAt\"];\n delete this.attributes[\"updatedAt\"];\n }\n async acclimatize(env){\n if(!this.isGeneric) throw new AbortError(\"Cannot acclimatize non-generics or shells\");\n let providers = await Provider.getAll(env);\n let ptype = this.relationships[\"providerType\"];\n ptype = ptype.data;\n\n let provider = providers.findByName(ptype.name);\n ptype.id = provider.id;\n }\n get test(){\n if(!this.code) return [];\n\n const regex = /[^-]autotest:\\s?([\\w\\d_\\-. \\/]+)[\\r\\s\\n]*?/gm;\n let match\n let matches = []\n while(match = regex.exec(this.code)){\n matches.push(match[1]);\n }\n return matches\n }\n async runTest(env){\n let remote = await Preset.getByName(env, this.name);\n for(let test of this.test){\n log(\"Tests...\");\n let asset;\n\n if(test.startsWith(\"id\")){\n let match = /id:\\s*(\\d+)/g.exec(test);\n if(!match){\n log(chalk`{red Could not parse autotest} ${test}.`);\n throw new AbortError(\"Could not properly parse the preset header\");\n }\n asset = await Asset.getById(env, match[1]);\n }else{\n asset = await Asset.getByName(env, test);\n }\n\n if(!asset){\n log(chalk`{yellow No movie found}, skipping test.`);\n continue;\n }\n\n log(chalk`Starting job {green ${this.name}} on ${asset.chalkPrint(false)}... `);\n await asset.startEvaluate(remote.id);\n }\n }\n async resolve(){\n if(this.isGeneric) return;\n\n let proType = await this.resolveField(Provider, \"providerType\");\n\n this.ext = await proType.getFileExtension();\n\n this.isGeneric = true;\n\n return {proType};\n }\n async saveLocal(){\n await this.saveLocalMetadata();\n await this.saveLocalFile();\n }\n async saveLocalMetadata(){\n if(!this.isGeneric){\n await this.resolve();\n this.cleanup();\n }\n writeFileSync(this.localmetadatapath, JSON.stringify(this.data, null, 4));\n }\n async saveLocalFile(){\n writeFileSync(this.localpath, this.code);\n }\n async uploadRemote(env){\n await this.uploadCodeToEnv(env, true);\n }\n async save(env){\n this.saved = true;\n if(!this.isGeneric){\n await this.resolve();\n }\n\n this.cleanup();\n if(lib.isLocalEnv(env)){\n log(chalk`Saving preset {green ${this.name}} to {blue ${lib.envName(env)}}.`)\n await this.saveLocal();\n }else{\n await this.uploadRemote(env);\n }\n }\n\n async downloadCode(){\n if(!this.remote || this.code) return this.code;\n let code = await lib.makeAPIRequest({\n env: this.remote,\n path_full: this.data.links.providerData,\n json: false,\n });\n\n //match header like \n // # c: d\n // # b\n // # a\n // ##################\n let headerRegex = /(^# .+[\\r\\n]+)+#+[\\r\\n]+/gim;\n let hasHeader = headerRegex.exec(code);\n\n if(hasHeader){\n this.header = code.substring(0, hasHeader[0].length - 1);\n code = code.substring(hasHeader[0].length);\n }\n\n return this.code = code;\n }\n\n get code(){\n if(this._code) return this._code;\n }\n set code(v){this._code = v;}\n\n chalkPrint(pad=true){\n let id = String(\"P-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n let sub = \"\";\n if(this.subproject){\n sub = chalk`{yellow ${this.subproject}}`;\n }\n if(pad) id = id.padStart(10);\n if(this.name == undefined){\n return chalk`{green ${id}}: ${sub}{red ${this.path}}`;\n }else if(this.meta.proType){\n return chalk`{green ${id}}: ${sub}{red ${this.meta.proType.name}} {blue ${this.name}}`;\n }else{\n return chalk`{green ${id}}: ${sub}{blue ${this.name}}`;\n }\n }\n parseFilenameForName(){\n if(this.path.endsWith(\".jinja\") || this.path.endsWith(\".json\")){\n return basename(this.path)\n .replace(\"_\", \" \")\n .replace(\"-\", \" \")\n .replace(\".json\", \"\")\n .replace(\".jinja\", \"\");\n }\n }\n\n parseCodeForName(){\n const name_regex = /name\\s?:\\s([\\w\\d. \\/]+)[\\r\\s\\n]*?/;\n const match = name_regex.exec(this.code);\n if(match) return match[1];\n }\n\n findStringsInCode(strings){\n if(!this.code) return [];\n\n return strings.filter(str => {\n let regex = new RegExp(str);\n return !!this.code.match(regex);\n });\n }\n static getLocalPath(name, ext, subproject){\n return path.join(configObject.repodir, subproject || \"\", \"silo-presets\", name + \".\" + ext);\n }\n get localpath(){return Preset.getLocalPath(this.name, this.ext, this.subproject)}\n\n get path(){\n if(this._path) return this._path;\n }\n set path(val){\n this._path = val;\n }\n get name(){\n return this._nameOuter;\n }\n set name(val){\n if(!this._nameInner) this._nameInner = val;\n this._nameOuter = val;\n }\n set providerType(value){\n this.relationships[\"providerType\"] = {\n data: {\n ...value,\n type: \"providerTypes\",\n }\n };\n }\n get localmetadatapath(){\n if(this.path){\n return this.path.replace(\"silo-presets\", \"silo-metadata\").replace(new RegExp(this.ext + \"$\"), \"json\")\n }\n return path.join(configObject.repodir, this.subproject || \"\", \"silo-metadata\", this.name + \".json\");\n }\n get immutable(){\n return this.name.includes(\"Constant\") && !configObject.updateImmutable;\n }\n async uploadPresetData(env, id){\n if(this.code.trim() === \"NOUPLOAD\"){\n write(chalk`code skipped {yellow :)}, `);\n return;\n }\n\n let code = this.code;\n let headers = {};\n\n let providerName = this.relationships?.providerType?.data?.name;\n if(!configObject.skipHeader && (providerName === \"SdviEvaluate\" || providerName === \"SdviEvalPro\")){\n write(chalk`generate header, `);\n let repodir = configObject.repodir;\n let localpath = this.path.replace(repodir, \"\");\n if(localpath.startsWith(\"/\")) localpath = localpath.substring(1);\n\n try{\n let {stdout: headerText} = await spawn(\n {noecho: true},\n \"sh\",\n [\n path.join(configObject.repodir, `bin/header.sh`),\n moment(Date.now()).format(\"ddd YYYY/MM/DD hh:mm:ssa\"),\n localpath,\n ]\n );\n code = headerText + code;\n write(chalk`header ok, `);\n }catch(e){\n write(chalk`missing unix, `);\n }\n }\n\n //binary presets\n if(providerName == \"Vantage\"){\n code = code.toString(\"base64\");\n headers[\"Content-Transfer-Encoding\"] = \"base64\";\n }\n\n let res = await lib.makeAPIRequest({\n env, path: `/presets/${id}/providerData`,\n body: code, method: \"PUT\", fullResponse: true, timeout: 10000,\n headers,\n });\n write(chalk`code up {yellow ${res.statusCode}}, `);\n }\n async grabMetadata(env){\n let remote = await Preset.getByName(env, this.name);\n this.isGeneric = false;\n if(!remote){\n throw new AbortError(`No file found on remote ${env} with name ${this.name}`);\n }\n this.data = remote.data;\n this.remote = env;\n }\n\n async deleteRemoteVersion(env, id=null){\n if(lib.isLocalEnv(env)) return false;\n if(!id){\n let remote = await Preset.getByName(env, this.name);\n id = remote.id;\n }\n\n return await lib.makeAPIRequest({\n env, path: `/presets/${id}`,\n method: \"DELETE\",\n });\n }\n\n async delete(){\n if(lib.isLocalEnv(this.remote)) return false;\n\n return await this.deleteRemoteVersion(this.remote, this.id);\n }\n\n async uploadCodeToEnv(env, includeMetadata, shouldTest = true){\n if(!this.name){\n let match;\n if(match = /^(#|[\"']{3})\\s*EPH (\\d+)/.exec(this.code.trim())){\n let a = await Asset.getById(env, Number(match[2]))\n return a.startEphemeralEvaluateIdeal(this);\n }else{\n log(chalk`Failed uploading {red ${this.path}}. No name found.`);\n return;\n }\n }\n\n write(chalk`Uploading preset {green ${this.name}} to {green ${env}}: `);\n\n if(this.immutable){\n log(chalk`{magenta IMMUTABLE}. Nothing to do.`);\n return;\n }\n\n //First query the api to see if this already exists.\n let remote = await Preset.getByName(env, this.name);\n\n if(remote){\n //If it exists we can replace it\n write(\"replace, \");\n if(includeMetadata){\n let payload = {data: {attributes: this.data.attributes, type: \"presets\"}};\n if(this.relationships.tagNames){\n payload.relationships = {tagNames: this.relationships.tagNames};\n }\n let res = await lib.makeAPIRequest({\n env, path: `/presets/${remote.id}`, method: \"PATCH\",\n payload,\n fullResponse: true,\n });\n write(chalk`metadata {yellow ${res.statusCode}}, `);\n if(res.statusCode == 500){\n log(chalk`skipping code upload, did not successfully upload metadata`)\n return;\n }\n }\n\n await this.uploadPresetData(env, remote.id);\n }else{\n write(\"create, \");\n let metadata = {data: this.data};\n if(!this.relationships[\"providerType\"]){\n throw new AbortError(\"Cannot acclimatize shelled presets. (try creating it on the env first)\");\n }\n\n await this.acclimatize(env);\n write(\"Posting to create preset... \");\n let res = await lib.makeAPIRequest({\n env, path: `/presets`, method: \"POST\",\n payload: metadata, timeout: 5000,\n });\n let id = res.data.id;\n write(chalk`Created id {green ${id}}... Uploading Code... `);\n await this.uploadPresetData(env, id);\n }\n if(this.test[0] && shouldTest){\n await this.runTest(env);\n }else{\n log(\"No tests. Done.\");\n }\n }\n\n getLocalMetadata(){\n return JSON.parse(readFileSync(this.localmetadatapath, \"utf-8\"));\n }\n getLocalCode(){\n //todo fixup for binary presets, see uploadPresetData\n return readFileSync(this.path, \"utf-8\");\n }\n\n parseHeaderInfo(){\n if(!this.header) return null;\n let abs = {\n built: /Built On:(.+)/.exec(this.header)[1]?.trim(),\n author: /Author:(.+)/.exec(this.header)[1]?.trim(),\n build: /Build:(.+)/.exec(this.header)[1]?.trim(),\n version: /Version:(.+)/.exec(this.header)[1]?.trim(),\n branch: /Branch:(.+)/.exec(this.header)[1]?.trim(),\n commit: /Commit:(.+)/.exec(this.header)[1]?.trim(),\n local: /Local File:(.+)/.exec(this.header)[1]?.trim(),\n }\n\n let tryFormats = [\n [true, \"ddd MMM DD HH:mm:ss YYYY\"],\n [false, \"ddd YYYY/MM/DD LTS\"],\n ];\n\n for(let [isUTC, format] of tryFormats){\n let date;\n if(isUTC){\n date = moment.utc(abs.built, format)\n }else{\n date = moment(abs.built, format)\n }\n\n if(!date.isValid()) continue;\n\n abs.offset = date.fromNow();\n\n break;\n }\n\n return abs;\n }\n\n async printRemoteInfo(env){\n let remote = await Preset.getByName(env, this.name);\n await remote.downloadCode();\n let i = remote.parseHeaderInfo();\n\n if(i){\n log(chalk`\n ENV: {red ${env}}, updated {yellow ~${i.offset}}\n Built on {blue ${i.built}} by {green ${i.author}}\n From ${i.build || \"(unknown)\"} on ${i.branch} ({yellow ${i.commit}})\n `.replace(/^[ \\t]+/gim, \"\").trim());\n }else{\n log(chalk`No header on {red ${env}}`);\n }\n }\n\n async getInfo(envs){\n await this.printDepends();\n for(let env of envs.split(\",\")){\n await this.printRemoteInfo(env);\n }\n }\n\n async printDepends(indent=0, locals=null, seen={}){\n let includeRegex = /@include \"(.+)\"/gim;\n //let includeRegex = /@include/g;\n\n let includes = [];\n\n let inc;\n while(inc = includeRegex.exec(this.code)){\n includes.push(inc[1]);\n }\n\n //let includes = this.code\n //.split(\"\\n\")\n //.map(x => includeRegex.exec(x))\n //.filter(x => x)\n //.map(x => x[1]);\n //log(includes);\n\n if(!locals){\n locals = new Collection(await loadLocals(\"silo-presets\", Preset));\n }\n\n log(Array(indent + 1).join(\" \") + \"- \" + this.name);\n\n for(let include of includes){\n if(seen[include]){\n log(Array(indent + 1).join(\" \") + \" - (seen) \" + include);\n }else{\n seen[include] = true\n let file = await locals.findByName(include);\n if(file){\n await file.printDepends(indent + 2, locals, seen);\n }else{\n log(Array(indent + 1).join(\" \") + \" - (miss) \" + include);\n }\n }\n }\n }\n}\n\ndefineAssoc(Preset, \"_nameInner\", \"data.attributes.providerSettings.PresetName\");\ndefineAssoc(Preset, \"_nameOuter\", \"data.attributes.name\");\ndefineAssoc(Preset, \"id\", \"data.id\");\ndefineAssoc(Preset, \"attributes\", \"data.attributes\");\ndefineAssoc(Preset, \"relationships\", \"data.relationships\");\ndefineAssoc(Preset, \"remote\", \"meta.remote\");\ndefineAssoc(Preset, \"_code\", \"meta.code\");\ndefineAssoc(Preset, \"_path\", \"meta.path\");\ndefineAssoc(Preset, \"isGeneric\", \"meta.isGeneric\");\ndefineAssoc(Preset, \"ext\", \"meta.ext\");\ndefineAssoc(Preset, \"subproject\", \"meta.project\");\ndefineAssoc(Preset, \"metastring\", \"meta.metastring\");\nPreset.endpoint = \"presets\";\n\nexport default Preset;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nclass Notification extends RallyBase{\n constructor({data, remote}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n }\n\n static async getAllPreCollect(notifications){\n return notifications.sort((a, b) => {\n return a.attributes.type.localeCompare(b.attributes.type) ||\n a.attributes.name.localeCompare(b.attributes.name);\n });\n }\n\n chalkPrint(pad=false){\n let id = String(\"N-\" + this.id)\n if(pad) id = id.padStart(4);\n return chalk`{green ${id}}: {blue ${this.type}} - {green ${this.name}}`;\n }\n}\n\ndefineAssoc(Notification, \"id\", \"data.id\");\ndefineAssoc(Notification, \"name\", \"data.attributes.name\");\ndefineAssoc(Notification, \"address\", \"data.attributes.address\");\ndefineAssoc(Notification, \"type\", \"data.attributes.type\");\ndefineAssoc(Notification, \"remote\", \"meta.remote\");\nNotification.endpoint = \"notificationPresets\"\n\nexport default Notification;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {RallyBase, lib, Collection, AbortError} from \"./rally-tools.js\";\nimport {configObject} from \"./config.js\";\nimport Preset from \"./preset.js\";\nimport Provider from \"./providers.js\";\nimport Notification from \"./notification.js\";\n\nimport {writeFileSync, readFileSync} from \"./fswrap.js\";\nimport {join, resolve as pathResolve} from \"path\";\n\nclass Rule extends RallyBase{\n constructor({path, data, remote, subProject} = {}){\n super();\n if(path){\n path = pathResolve(path);\n try{\n let f = readFileSync(path, \"utf-8\")\n data = JSON.parse(readFileSync(path, \"utf-8\"));\n }catch(e){\n if(e.code === \"ENOENT\"){\n if(configObject.ignoreMissing){\n this.missing = true;\n return undefined;\n }else{\n throw new AbortError(\"Could not load code of local file\");\n }\n }else{\n throw new AbortError(`Unreadable JSON in ${path}. ${e}`);\n }\n }\n }\n this.meta = {};\n this.subproject = subProject;\n if(!data){\n data = Rule.newShell();\n }\n this.data = data;\n this.remote = remote;\n this.isGeneric = !this.remote;\n }\n\n static newShell(){\n return {\n \"attributes\": {\n \"description\": \"-\",\n \"priority\": \"PriorityNorm\",\n \"starred\": false,\n },\n \"relationships\": {},\n \"type\": \"workflowRules\",\n };\n }\n\n async acclimatize(env){\n this.remote = env;\n\n let preset = await this.resolveField(Preset, \"preset\", false, \"specific\");\n let pNext = await this.resolveField(Rule, \"passNext\", false, \"specific\");\n let eNext = await this.resolveField(Rule, \"errorNext\", false, \"specific\");\n let proType = await this.resolveField(Provider, \"providerType\", false, \"specific\");\n\n let dynamicNexts = await this.resolveField(Rule, \"dynamicNexts\", true, \"specific\");\n\n let enterNotif = await this.resolveField(Notification, \"enterNotifications\", true, \"specific\");\n let errorNotif = await this.resolveField(Notification, \"errorNotifications\", true, \"specific\");\n let passNotif = await this.resolveField(Notification, \"passNotifications\", true, \"specific\");\n }\n async saveA(env){\n if(lib.isLocalEnv(env)) return;\n return await this.createIfNotExist(env);\n }\n async saveB(env){\n if(!this.isGeneric){\n await this.resolve();\n }\n this.cleanup();\n if(lib.isLocalEnv(env)){\n log(chalk`Saving rule {green ${this.name}} to {blue ${lib.envName(env)}}.`)\n writeFileSync(this.localpath, JSON.stringify(this.data, null, 4));\n }else{\n await this.acclimatize(env);\n await this.uploadRemote(env);\n }\n }\n get immutable(){\n return false;\n }\n async createIfNotExist(env){\n write(chalk`First pass rule {green ${this.name}} to {green ${env}}: `);\n\n if(this.immutable){\n log(chalk`{magenta IMMUTABLE}. Nothing to do.`);\n return;\n }\n\n //First query the api to see if this already exists.\n let remote = await Rule.getByName(env, this.name);\n\n this.idMap = this.idMap || {};\n\n if(remote){\n this.idMap[env] = remote.id;\n log(chalk`exists ${remote.chalkPrint(false)}`);\n return;\n }\n\n //If it exists we can replace it\n write(\"create, \");\n let res = await lib.makeAPIRequest({\n env, path: `/workflowRules`, method: \"POST\",\n payload: {data: {attributes: {name: this.name}, type: \"workflowRules\"}},\n });\n this.idMap = this.idMap || {};\n this.idMap[env] = res.data.id;\n write(\"id \");\n log(this.idMap[env]);\n }\n\n async patchStrip(){\n delete this.data.attributes.createdAt;\n delete this.data.attributes.starred;\n delete this.data.attributes.updatedAt;\n\n // TEMP FIX FOR BUG IN SDVI\n if(this.relationships.passMetadata && this.relationships.passMetadata[0]){\n log(\"HAS PASS\");\n log(this.name);\n log(\"HAS PASS\");\n }\n delete this.relationships.passMetadata;\n\n if(this.relationships.errorMetadata && this.relationships.errorMetadata[0]){\n log(\"HAS PASS\");\n log(this.name);\n log(\"HAS PASS\");\n }\n delete this.relationships.errorMetadata;\n\n // This is commented out because it was fixed.\n //for(let key in this.relationships){\n //let relationship = this.relationships[key];\n //if(!relationship.data || relationship.data instanceof Array && !relationship.data[0]){\n //delete this.relationships[key];\n //}\n //}\n }\n\n async uploadRemote(env){\n write(chalk`Uploading rule {green ${this.name}} to {green ${env}}: `);\n\n if(this.immutable){\n log(chalk`{magenta IMMUTABLE}. Nothing to do.`);\n return;\n }\n\n if(this.idMap[env]){\n this.remote = env;\n\n await this.patchStrip();\n this.data.id = this.idMap[env];\n //If it exists we can replace it\n write(\"replace, \");\n let res = await lib.makeAPIRequest({\n env, path: `/workflowRules/${this.idMap[env]}`, method: \"PATCH\",\n payload: {data: this.data}, fullResponse: true,\n });\n\n log(chalk`response {yellow ${res.statusCode}}`);\n if(res.statusCode !== 200){\n log(res.body)\n log(JSON.stringify(this.data, null, 4));\n }\n }else{\n throw Error(\"Bad idmap!\");\n }\n }\n\n get localpath(){\n return join(configObject.repodir, this.subproject || \"\", \"silo-rules\", this.name + \".json\");\n }\n\n async resolve(){\n let preset = await this.resolveField(Preset, \"preset\", false);\n //log(preset);\n let pNext = await this.resolveField(Rule, \"passNext\", false);\n let eNext = await this.resolveField(Rule, \"errorNext\", false);\n let proType = await this.resolveField(Provider, \"providerType\", false);\n\n //log(\"Dynamic nexts\")\n let dynamicNexts = await this.resolveField(Rule, \"dynamicNexts\", true);\n //log(dynamicNexts);\n\n let enterNotif = await this.resolveField(Notification, \"enterNotifications\", true);\n let errorNotif = await this.resolveField(Notification, \"errorNotifications\", true);\n let passNotif = await this.resolveField(Notification, \"passNotifications\", true);\n\n //TODO Unsupported\n delete this.relationships[\"enterMetadata\"]\n delete this.relationships[\"errorMetadata\"]\n\n this.isGeneric = true;\n\n return {\n preset, proType,\n pNext, eNext,\n dynamicNexts,\n errorNotif, enterNotif, passNotif,\n };\n }\n\n chalkPrint(pad=true){\n let id = String(\"R-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n let sub = \"\";\n if(this.subproject){\n sub = chalk`{yellow ${this.subproject}}`;\n }\n if(pad) id = id.padStart(10);\n try{\n return chalk`{green ${id}}: ${sub}{blue ${this.name}}`;\n }catch(e){\n return this.data;\n }\n }\n}\n\ndefineAssoc(Rule, \"name\", \"data.attributes.name\");\ndefineAssoc(Rule, \"description\", \"data.attributes.description\");\ndefineAssoc(Rule, \"id\", \"data.id\");\ndefineAssoc(Rule, \"relationships\", \"data.relationships\");\ndefineAssoc(Rule, \"isGeneric\", \"meta.isGeneric\");\ndefineAssoc(Rule, \"remote\", \"meta.remote\");\ndefineAssoc(Rule, \"subproject\", \"meta.project\");\ndefineAssoc(Rule, \"idMap\", \"meta.idMap\");\nRule.endpoint = \"workflowRules\";\n\nexport default Rule;\n","import Rule from \"./rule.js\";\nimport Preset from \"./preset.js\";\nimport Provider from \"./providers.js\";\nimport Notification from \"./notification.js\";\nimport {Collection, lib} from \"./rally-tools.js\";\nimport {configObject} from \"./config.js\";\n\n\n//TODO\n//Move project into silo metadata\n//move autotest into silo metadata\n//\n\nexport default class SupplyChain{\n constructor(startingRule, stopRule){\n if(startingRule){\n this.startingRule = startingRule;\n this.stopRule = stopRule\n this.remote = startingRule.remote;\n }\n }\n async downloadPresetCode(objs = this.allPresets){\n log(\"Downloading code... \");\n await lib.keepalive(objs.arr.map(x => () => x.downloadCode()));\n }\n async calculate(){\n log(\"Getting rules... \");\n this.allRules = await Rule.getAll(this.remote);\n log(this.allRules.length);\n\n log(\"Getting presets... \");\n this.allPresets = await Preset.getAll(this.remote);\n log(this.allPresets.length);\n\n log(\"Getting providers... \");\n this.allProviders = await Provider.getAll(this.remote);\n log(this.allProviders.length);\n\n log(\"Getting notifications... \");\n this.allNotifications = await Notification.getAll(this.remote);\n log(this.allNotifications.length);\n\n if(!this.startingRule){\n this.rules = this.allRules;\n this.presets = this.allPresets;\n this.notifications = new Collection([]);\n\n await this.downloadPresetCode();\n return\n }else{\n await this.downloadPresetCode();\n }\n\n log(\"Done!\");\n\n //Now we have everything we need to find a whole supply chain\n\n write(\"Calculating Supply chain... \");\n log(this.startingRule.chalkPrint());\n\n let allRuleNames = this.allRules.arr.map(x => x.name).filter(x => x.length >= 4);\n let allPresetNames = this.allPresets.arr.map(x => x.name).filter(x => x.length >= 4);\n let allNotifNames = this.allNotifications.arr.map(x => x.name).filter(x => x.length >= 4);\n let requiredNotifications = new Set();\n\n let ruleQueue = [this.startingRule];\n let presetQueue = [];\n for(let currentRule of ruleQueue){\n if(currentRule === this.stopRule) continue;\n let {\n eNext, pNext, preset,\n passNotif, errorNotif, enterNotif\n } = await currentRule.resolve();\n\n\n passNotif .forEach(n => requiredNotifications.add(n));\n enterNotif.forEach(n => requiredNotifications.add(n));\n errorNotif.forEach(n => requiredNotifications.add(n));\n\n if(eNext && !ruleQueue.includes(eNext)) ruleQueue.push(eNext);\n if(pNext && !ruleQueue.includes(eNext)) ruleQueue.push(pNext);\n\n let neededPresets = preset.findStringsInCode(allPresetNames);\n neededPresets = neededPresets.map(x => this.allPresets.findByName(x));\n\n let neededRules = preset.findStringsInCode(allRuleNames);\n neededRules = neededRules.map(x => this.allRules.findByName(x));\n\n preset\n .findStringsInCode(allNotifNames)\n .map(str => this.allNotifications.findByName(str))\n .forEach(notif => requiredNotifications.add(notif));\n\n neededPresets.push(preset);\n\n for(let p of neededPresets) if(!presetQueue.includes(p)) presetQueue.push(p);\n for(let p of neededRules) if(!ruleQueue .includes(p)) ruleQueue .push(p);\n\n if(configObject.verbose){\n write(currentRule.chalkPrint(false));\n log(\":\");\n write(\" \");\n write(preset.chalkPrint(false));\n log(\":\");\n write(\" Pass Next: \"); if(pNext) write(pNext.chalkPrint(false)); else write(\"None\");\n log(\"\");\n write(\" Err Next: \"); if(eNext) write(eNext.chalkPrint(false)); else write(\"None\");\n log(\"\");\n log(\" Rules:\");\n\n for(let p of neededRules) log(\" \" + p.chalkPrint(true));\n\n log(\" Presets:\");\n for(let p of neededPresets) log(\" \" + p.chalkPrint(true));\n\n log(\"\\n\");\n }\n }\n\n log(\"Done!\")\n\n this.rules = new Collection(ruleQueue);\n this.presets = new Collection(presetQueue);\n requiredNotifications.delete(undefined);\n this.notifications = new Collection([...requiredNotifications]);\n }\n async log(){\n if(this.notifications.arr.length > 0){\n log(\"Required notifications: \");\n this.notifications.log();\n }\n\n if(this.rules.arr.length > 0){\n write(\"Required rules: \");\n log(this.rules.arr.length);\n this.rules.log();\n }\n\n if(this.presets.arr.length > 0){\n write(\"Required presets: \");\n log(this.presets.arr.length);\n this.presets.log();\n }\n\n if(configObject.rawOutput){\n return {presets: this.presets.arr, rules: this.rules.arr, notifications: this.notifications.arr};\n }\n }\n async deleteTo(env){\n for(let preset of this.presets){\n try{\n await preset.deleteRemoteVersion(env);\n }catch(e){log(e);}\n }\n }\n async syncTo(env){\n for(let preset of this.presets){\n try{\n await preset.save(env);\n }catch(e){log(e);}\n }\n if(this.rules.arr[0]){\n log(\"Starting create phase for rules\")\n for(let rule of this.rules){\n try{\n await rule.saveA(env);\n }catch(e){log(e);}\n }\n\n log(\"OK\")\n log(\"Starting link phase for rules\");\n Rule.removeCache(env);\n\n for(let rule of this.rules){\n try{\n await rule.saveB(env);\n }catch(e){log(e);}\n }\n }\n }\n}\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nclass User extends RallyBase{\n constructor({data, remote}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n }\n chalkPrint(pad=false){\n let id = String(\"U-\" + this.id)\n if(pad) id = id.padStart(7);\n return chalk`{green ${id}}: {blue ${this.name}}`;\n }\n}\n\ndefineAssoc(User, \"id\", \"data.id\");\ndefineAssoc(User, \"name\", \"data.attributes.name\");\ndefineAssoc(User, \"email\", \"data.attributes.email\");\ndefineAssoc(User, \"remote\", \"meta.remote\");\nUser.endpoint = \"users\"\n\nexport default User;\n","import {RallyBase, lib, AbortError, Collection} from \"./rally-tools.js\";\nimport {cached, defineAssoc} from \"./decorators.js\";\n\nclass Tag extends RallyBase{\n constructor({data, remote} = {}){\n super();\n\n this.meta = {};\n this.remote = remote\n this.data = data;\n\n //this.data.attributes.rallyConfiguration = undefined;\n //this.data.attributes.systemManaged = undefined;\n }\n chalkPrint(pad=true){\n let id = String(\"T-\" + this.remote + \"-\" + this.id)\n if(pad) id = id.padStart(10);\n\n let prefix = this.curated ? \"blue +\" : \"red -\";\n\n return chalk`{green ${id}}: {${prefix}${this.name}}`;\n }\n static async create(env, name, {notCurated} = {}){\n return new Tag({data: await lib.makeAPIRequest({\n env, path: `/${this.endpoint}`, method: \"POST\",\n payload: {\n data: {\n attributes: {\n name,\n curated: notCurated ? false : true,\n },\n type: \"tagNames\",\n }\n }\n }), remote: env});\n }\n}\n\ndefineAssoc(Tag, \"id\", \"data.id\");\ndefineAssoc(Tag, \"attributes\", \"data.attributes\");\ndefineAssoc(Tag, \"relationships\", \"data.relationships\");\ndefineAssoc(Tag, \"name\", \"data.attributes.name\");\ndefineAssoc(Tag, \"curated\", \"data.attributes.curated\");\ndefineAssoc(Tag, \"remote\", \"meta.remote\");\nTag.endpoint = \"tagNames\";\n\nexport default Tag;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nexport async function findLineInFile(renderedPreset, lineNumber){\n let trueFileLine = lineNumber;\n\n let linedRenderedPreset = renderedPreset.split(\"\\n\").slice(2,-2);\n renderedPreset = renderedPreset.split(\"\\n\").slice(2,-2).join(\"\\n\");\n let includeLocation = renderedPreset.split(\"\\n\").filter(x => x.includes(\"@include\"));\n\n let endIncludeNumber = -1, addTabDepth = 2;\n let lineBeforeIncludeStatement = '';\n let withinInclude = true;\n\n if (lineNumber > linedRenderedPreset.indexOf(includeLocation[includeLocation.length -1])){\n addTabDepth = 0;\n withinInclude = false;\n }\n\n for (let index = includeLocation.length - 1; index >= 0; index--){\n let currIncludeIndex = linedRenderedPreset.indexOf(includeLocation[index]);\n let tabDepth = includeLocation[index].split(\" \").length;\n if (lineNumber > currIncludeIndex) {\n if (includeLocation[index].split(\" \").filter(Boolean)[1] != \"ERROR:\"){\n if (lineBeforeIncludeStatement.split(\" \").length == tabDepth && withinInclude){\n trueFileLine = trueFileLine - currIncludeIndex;\n break;\n } else if ((lineBeforeIncludeStatement.split(\" \").length + addTabDepth) == tabDepth && endIncludeNumber == -1){\n endIncludeNumber = currIncludeIndex;\n } else if ((lineBeforeIncludeStatement.split(\" \").length + addTabDepth) == tabDepth){\n trueFileLine = trueFileLine - (endIncludeNumber - currIncludeIndex);\n endIncludeNumber = -1;\n }\n }\n } else {\n lineBeforeIncludeStatement = includeLocation[index];\n }\n }\n\n let funcLine = \"\"\n for(let line of linedRenderedPreset.slice(0, lineNumber).reverse()){\n let match = /def (\\w+)/.exec(line);\n if(match){\n funcLine = match[1];\n break;\n }\n }\n\n let includeFilename;\n\n if(lineBeforeIncludeStatement != \"\"){\n includeFilename = lineBeforeIncludeStatement.slice(1).trim().slice(14, -1)\n }else{\n includeFilename = null;\n }\n\n if(includeLocation.length !== 0){\n trueFileLine -= 1;\n lineNumber -= 1;\n }\n\n return {\n lineNumber: trueFileLine,\n includeFilename,\n line: linedRenderedPreset[lineNumber],\n funcLine,\n };\n\n}\n\nexport function printOutLine(eLine){\n return log(chalk`{blue ${eLine.includeFilename || \"Main\"}}:{green ${eLine.lineNumber}} in ${eLine.funcLine}\n${eLine.line}`)\n}\n\nexport async function getInfo(env, jobid){\n log(env, jobid);\n let trace = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/trace`,\n }).catch(x => null);\n\n let renderedPreset = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/preset`,\n }).catch(x => null);\n\n let result = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/result`,\n }).catch(x => null);\n\n let error = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/error`,\n }).catch(x => null);\n\n let output = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/output`,\n }).catch(x => null);\n\n [trace, renderedPreset, result, output, error] = await Promise.all([trace, renderedPreset, result, output, error]);\n\n return {trace, renderedPreset, result, output, error}\n}\n\nexport async function parseTrace(env, jobid){\n\n let {trace, renderedPreset} = await getInfo(env, jobid);\n\n let fileName = '';\n let lineNumber = -1;\n\n let errorLines = []\n let shouldBreak = 0;\n for(let tr of trace.split(\"\\n\\n\").reverse()){\n errorLines.push(tr);\n shouldBreak--;\n if(tr.includes(\"Exception\")) shouldBreak = 1;\n if(tr.includes(\"raised\")) shouldBreak = 1;\n if(!shouldBreak) break;\n }\n\n let errorList = [];\n for(let errLine of errorLines){\n\n lineNumber = /^[\\w ]+:(\\d+):/g.exec(errLine);\n if(lineNumber && lineNumber[1]){\n errorList.push(await findLineInFile(renderedPreset, lineNumber[1]));\n }else{\n errorList.push(errLine);\n }\n }\n\n return errorList;\n}\n\nconst Trace = {parseTrace, printOutLine, getInfo, findLineInFile};\nexport default Trace;\n","require(\"source-map-support\").install();\n\nimport {lib} from \"./rally-tools.js\";\nimport {cached} from \"./decorators.js\";\n\nexport {default as SupplyChain} from \"./supply-chain.js\";\nexport {default as Preset} from \"./preset.js\";\nexport {default as Rule} from \"./rule.js\";\nexport {default as Provider} from \"./providers.js\";\nexport {default as Notification} from \"./notification.js\";\nexport {default as Asset} from \"./asset.js\";\nexport {default as User} from \"./user.js\";\nexport {default as Tag} from \"./tag.js\";\n//TODO fix export from index\nexport {default as Trace} from \"./trace.js\";\n\nexport * from \"./config.js\";\n\nexport * from \"./rally-tools.js\";\n\nexport const rallyFunctions = {\n async bestPagintation(){\n global.silentAPI = true;\n for(let i = 10; i <= 30; i+=5){\n console.time(\"test with \" + i);\n let dl = await lib.indexPathFast(\"DEV\", `/workflowRules?page=1p${i}`);\n console.timeEnd(\"test with \" + i);\n }\n },\n async uploadPresets(env, presets, createFunc = ()=>false){\n for(let preset of presets){\n await preset.uploadCodeToEnv(env, createFunc);\n }\n },\n //Dummy test access\n async testAccess(env){\n if(lib.isLocalEnv(env)){\n //TODO\n return true;\n }\n let result = await lib.makeAPIRequest({env, path: \"/providers?page=1p1\", fullResponse: true, timeout: 1000});\n return result.statusCode;\n },\n}\n","export default {\n SdviContentMover:`{\n \"tasks\": [\n {\n \"operation\": \"copy\" | \"move\" | \"delete\",\n\n \"source\": {\n \"optional\": true | false,\n\n # must specify either inventory OR externalStorage\n \"inventory\": {\n \"labels\": [\"<label>\" | \"*\", ],\n \"tags\": [\"<tag>\", ],\n \"storageSet\": [\"<storage location name>\" | \"*\", ], # only valid for move & delete tasks\n \"expandCollections\": true | false\n },\n \"externalStorage\": {\n \"uri\": \"<protocol>://<host>/<path>/<file>\",\n \"credentials\": {\n \"key\": \"<parameter store key>\",\n \"roleArn\": \"<role to assume to access the parameter store>\",\n \"roleId\": \"<external ID to be used in role assumption>\",\n \"region\": \"<AWS region of the parameter store>\"\n }\n }\n },\n\n \"destination\": {\n \"name\": \"<path within the storage location>/<filename>\",\n \"overwrite\": \"never\" | \"notInAnyAsset\" | \"notInOtherAsset\" | \"always\",\n \"storageMetadata\": {\"<key>\": \"<value>\",...} | \"<sourceStorageMetadata>\",\n\n # must specify either inventory OR externalStorage\n \"inventory\": {\n \"storage\": \"<storage location name>\",\n \"newLabel\": \"<fileLabel>\",\n \"newTags\": [\"<tag>\", \"<tag>\"],\n },\n \"externalStorage\": {\n \"uri\": \"<protocol>://<host>\",\n \"credentials\": {\n \"key\": \"<parameter store key>\",\n \"roleArn\": \"<role to assume to access the parameter store>\",\n \"roleId\": \"<external ID to be used in role assumption>\",\n \"region\": \"<AWS region of the parameter store>\"\n }\n }\n }\n },\n\n {\n <another task>\n },\n\n {\n <another task>\n },\n\n ...\n\n ]\n}`, SdviEvaluate: `'''\nname: {name}\n'''\n\n# code here`, SdviEvalPro: `'''\nname: {name}\n'''\n\nimport rally\n\ndef evalMain(context):\n # code here`,\n};\n","require(\"source-map-support\").install();\n\nimport argparse from \"minimist\";\nimport * as allIndexBundle from \"./index.js\"\nimport {\n rallyFunctions as funcs,\n Preset, Rule, SupplyChain, Provider, Asset, User, Tag,\n AbortError, UnconfiguredEnvError, Collection, APIError,\n} from \"./index.js\";\n\nimport {version as packageVersion} from \"../package.json\";\nimport {configFile, configObject, loadConfig, loadConfigFromArgs} from \"./config.js\";\nimport {readFileSync, writeFileSync} from \"fs\";\n\nimport {printOutLine, parseTrace, findLineInFile, getInfo as getTraceInfo} from \"./trace.js\";\n\nimport {helpText, arg, param, usage, helpEntries, spawn} from \"./decorators.js\";\n\nimport baseCode from \"./baseCode.js\";\nimport {sep as pathSeperator} from \"path\";\n\nimport moment from \"moment\";\n\nimport * as configHelpers from \"./config-create.js\";\nconst False = false; const True = true; const None = null;\n\nlet argv = argparse(process.argv.slice(2), {\n string: [\"file\", \"env\"],\n //boolean: [\"no-protect\"],\n boolean: [\"anon\"],\n default: {protect: true},\n alias: {\n f: \"file\", e: \"env\",\n }\n});\n\n//help menu helper\nfunction printHelp(help, short){\n let helpText = chalk`\n{white ${help.name}}: ${help.text}\n Usage: ${help.usage || \"<unknown>\"}\n`\n //Trim newlines\n helpText = helpText.substring(1, helpText.length-1);\n\n if(!short){\n for(let param of help.params || []){\n helpText += chalk`\\n {blue ${param.param}}: ${param.desc}`\n }\n for(let arg of help.args || []){\n helpText += chalk`\\n {blue ${arg.short}}, {blue ${arg.long}}: ${arg.desc}`\n }\n }\n\n return helpText;\n}\n\nasync function getFilesFromArgs(args){\n let lastArg = args._.shift()\n if(args.file){\n let files = args.file;\n if(typeof files === \"string\") files = [files];\n return files;\n }\n\n if(lastArg == \"-\"){\n log(\"Reading from stdin\");\n let getStdin = require(\"get-stdin\");\n let stdin = await getStdin();\n let files = stdin.split(\"\\n\");\n if(files[files.length - 1] === \"\") files.pop();\n return files;\n }else{\n args._.push(lastArg);\n }\n}\n\nlet presetsub = {\n async before(args){\n this.env = args.env;\n if(!this.env) throw new AbortError(\"No env supplied\");\n\n this.files = await getFilesFromArgs(args);\n },\n async $grab(args){\n if(!this.files){\n throw new AbortError(\"No files provided to grab (use --file argument)\");\n }\n\n log(chalk`Grabbing {green ${this.files.length}} preset(s) metadata from {green ${this.env}}.`);\n\n let presets = this.files.map(path => new Preset({path, remote: false}));\n for(let preset of presets){\n //TODO small refactor\n await preset.grabMetadata(this.env);\n await preset.saveLocalMetadata();\n\n if(args.full){\n let remo = await Preset.getByName(this.env, preset.name);\n await remo.resolve();\n await remo.downloadCode();\n await remo.saveLocalFile();\n }\n }\n },\n async $create(args){\n let provider, name, ext;\n if(args.provider){\n provider = {name: args.provider};\n ext = args.ext\n }else{\n provider = await configHelpers.selectProvider(await Provider.getAll(this.env));\n ext = (await provider.getEditorConfig()).fileExt;\n }\n if(args.name){\n name = args.name;\n }else{\n name = await configHelpers.askInput(\"Preset Name\", \"What is the preset name?\");\n }\n\n let preset = new Preset({subProject: configObject.project});\n\n preset.providerType = {name: provider.name};\n preset.isGeneric = true;\n preset.name = name;\n preset.ext = ext;\n if(baseCode[provider.name]){\n preset._code = baseCode[provider.name].replace(\"{name}\", name);\n }else{\n preset._code = \" \";\n }\n\n preset.saveLocalMetadata();\n if(!args[\"only-metadata\"]) preset.saveLocalFile();\n },\n async $list(args){\n log(\"Loading...\");\n let presets = await Preset.getAll(this.env);\n if(args.resolve){\n Provider.getAll(this.env);\n for(let preset of presets){\n let resolve = await preset.resolve(this.env);\n if(args.attach){\n let {proType} = resolve;\n proType.editorConfig.helpText = \"\";\n preset.meta = {\n ...preset.meta, proType\n };\n }\n }\n }\n if(configObject.rawOutput) return presets;\n log(chalk`{yellow ${presets.length}} presets on {green ${this.env}}.`);\n presets.arr.sort((a, b) => {\n return Number(a.attributes.updatedAt) - Number(b.attributes.updatedAt)\n });\n for(let preset of presets){\n log(preset.chalkPrint());\n }\n },\n async $upload(args){\n if(!this.files){\n throw new AbortError(\"No files provided to upload (use --file argument)\");\n }\n\n log(chalk`Uploading {green ${this.files.length}} preset(s) to {green ${this.env}}.`);\n\n let presets = this.files.map(path => new Preset({path, remote: false}));\n await funcs.uploadPresets(this.env, presets);\n },\n async $deleteRemote(args){\n let file = this.files[0];\n if(!this.files){\n throw new AbortError(\"No files provided to diff (use --file argument)\");\n }\n\n let preset = new Preset({path: file, remote: false});\n if(!preset.name){\n throw new AbortError(chalk`No preset header found. Cannot get name.`);\n }\n\n let preset2 = await Preset.getByName(this.env, preset.name);\n if(!preset2){\n throw new AbortError(chalk`No preset found with name {red ${preset.name}} on {blue ${this.env}}`);\n }\n\n log(chalk`Deleting ${preset2.chalkPrint(true)}.`);\n\n log(await preset2.delete());\n },\n async $diff(args){\n let file = this.files[0];\n if(!this.files){\n throw new AbortError(\"No files provided to diff (use --file argument)\");\n }\n\n let preset = new Preset({path: file, remote: false});\n if(!preset.name){\n throw new AbortError(chalk`No preset header found. Cannot get name.`);\n }\n let preset2 = await Preset.getByName(this.env, preset.name);\n if(!preset2){\n throw new AbortError(chalk`No preset found with name {red ${preset.name}} on {blue ${this.env}}`);\n }\n await preset2.downloadCode();\n\n let tempfile = require(\"tempy\").file;\n let temp = tempfile({extension: `${this.env}.${preset.ext}`});\n writeFileSync(temp, preset2.code);\n\n let ptr = `${file},${temp}`;\n\n\n //raw output returns \"file1\" \"file2\"\n if(configObject.rawOutput){\n if(args[\"only-new\"]) return temp;\n else return ptr;\n }\n\n //standard diff\n argv.command = argv.command || \"diff\";\n await spawn(argv.command, [file, temp], {stdio: \"inherit\"});\n },\n async $info(args){\n if(!this.files){\n throw new AbortError(\"No files provided to diff (use --file argument)\");\n }\n\n let file = this.files[0];\n let preset = new Preset({path: file, remote: false});\n if(!preset.name){\n throw new AbortError(chalk`No preset header found. Cannot get name.`);\n }\n\n await preset.getInfo(args.env);\n },\n async unknown(arg, args){\n log(chalk`Unknown action {red ${arg}} try '{white rally help preset}'`);\n },\n}\n\nlet rulesub = {\n async before(args){\n this.env = args.env;\n if(!this.env) throw new AbortError(\"No env supplied\");\n },\n async $list(args){\n log(\"Loading...\");\n let rules = await Rule.getAll(this.env);\n if(configObject.rawOutput) return rules;\n\n log(chalk`{yellow ${rules.length}} rules on {green ${this.env}}.`);\n rules.arr.sort((a, b) => {\n return Number(a.data.attributes.updatedAt) - Number(b.data.attributes.updatedAt)\n });\n for(let rule of rules) log(rule.chalkPrint());\n },\n async $create(args){\n let preset = await configHelpers.selectPreset({canSelectNone: false});\n let passNext = await configHelpers.selectRule({purpose: \"'On Exit OK'\"});\n let errorNext = await configHelpers.selectRule({purpose: \"'On Exit Error'\"});\n let name = await configHelpers.askInput(\"Rule Name\", \"What is the rule name?\");\n name = name.replace(\"@\", preset.name);\n let desc = await configHelpers.askInput(\"Description\", \"Enter a description.\");\n\n let dynamicNexts = [];\n let next;\n while(next = await configHelpers.selectRule({purpose: \"dynamic next\"})){\n let name = await configHelpers.askInput(\"Key\", \"Key name for dynamic next\");\n dynamicNexts.push({\n meta: {\n transition: name,\n },\n type: \"workflowRules\",\n name: next.name,\n });\n }\n\n let rule = new Rule({subProject: configObject.project});\n rule.name = name;\n rule.description = desc;\n rule.relationships.preset = {data: {name: preset.name, type: \"presets\"}}\n if(errorNext) rule.relationships.errorNext = {data: {name: errorNext.name, type: \"workflowRules\"}}\n if(passNext) rule.relationships.passNext = {data: {name: passNext.name, type: \"workflowRules\"}}\n if(dynamicNexts[0]){\n rule.relationships.dynamicNexts = {\n data: dynamicNexts\n };\n }\n\n rule.saveB()\n },\n async unknown(arg, args){\n log(chalk`Unknown action {red ${arg}} try '{white rally help rule}'`);\n },\n}\n\nlet jupytersub = {\n async before(args){\n this.input = args._.shift() || \"main.ipynb\";\n this.output = args._.shift() || \"main.py\";\n },\n async $build(args){\n let cmd = `jupyter nbconvert --to python ${this.input} --TagRemovePreprocessor.remove_cell_tags={\\\"remove_cell\\\"} --output ${this.output} --TemplateExporter.exclude_markdown=True --TemplateExporter.exclude_input_prompt=True --TemplateExporter.exclude_output_prompt=True`.split(\" \");\n log(chalk`Compiling GCR file {green ${this.input}} into {green ${this.output}} using jupyter...`);\n\n try{\n let {timestr} = await spawn(cmd[0], cmd.slice(1));\n log(chalk`Complete in ~{green.bold ${timestr}}.`);\n }catch(e){\n if(e.code !== \"ENOENT\") throw e;\n log(chalk`Cannot run the build command. Make sure that you have jupyter notebook installed.\\n{green pip install jupyter}`);\n return;\n }\n },\n}\n\nasync function categorizeString(str, defaultSubproject=undefined){\n str = str.trim();\n if(str.startsWith('\"')){\n str = str.slice(1, -1);\n }\n if(match = /^(\\w)-(\\w{1,10})-(\\d{1,10}):/.exec(str)){\n if(match[1] === \"P\"){\n let ret = await Preset.getById(match[2], match[3]);\n //TODO modify for subproject a bit\n return ret;\n }else if(match[1] === \"R\"){\n return await Rule.getById(match[2], match[3]);\n }else{\n return null;\n }\n }else if(match = /^([\\w \\/\\\\\\-_]*)[\\/\\\\]?silo\\-(\\w+)[\\/\\\\]/.exec(str)){\n try{\n switch(match[2]){\n case \"presets\": return new Preset({path: str, subProject: match[1]});\n case \"rules\": return new Rule({path: str, subProject: match[1]});\n case \"metadata\": return await Preset.fromMetadata(str, match[1]);\n }\n }catch(e){\n log(e);\n }\n }else{\n return null;\n }\n}\n\nlet tagsub = {\n async before(args){\n this.env = args.env;\n if(!this.env) throw new AbortError(\"No env supplied\");\n },\n async $list(args){\n log(\"Loading...\");\n let tags = await Tag.getAll(this.env);\n if(configObject.rawOutput) return tags;\n\n log(chalk`{yellow ${tags.length}} tags on {green ${this.env}}.`);\n tags.arr.sort((a, b) => {\n return Number(a.data.attributes.updatedAt) - Number(b.data.attributes.updatedAt)\n });\n for(let tag of tags) log(tag.chalkPrint());\n },\n async $create(args){\n return Tag.create(this.env, args._.shift());\n }\n};\n\nlet supplysub = {\n async before(args){\n this.env = args.env;\n if(!this.env) throw new AbortError(\"No env supplied\");\n this.files = await getFilesFromArgs(args);\n },\n\n //Calculate a supply chain based on a starting rule at the top of the stack\n async $calc(args){\n let name = args._.shift();\n let stopName = args._.shift();\n if(!name){\n throw new AbortError(\"No starting rule or @ supplied\");\n }\n\n if(name === \"@\"){\n log(chalk`Silo clone started`);\n this.chain = new SupplyChain();\n this.chain.remote = args.env;\n }else{\n let rules = await Rule.getAll(this.env);\n let stop, start;\n start = rules.findByNameContains(name);\n if(stopName) stop = rules.findByNameContains(stopName);\n\n if(!start){\n throw new AbortError(chalk`No starting rule found by name {blue ${name}}`);\n }\n log(chalk`Analzying supply chain: ${start.chalkPrint(false)} - ${stop ? stop.chalkPrint(false) : \"(open)\"}`);\n this.chain = new SupplyChain(start, stop);\n }\n\n await this.chain.calculate();\n return await this.postAction(args);\n },\n async postAction(args){\n //Now that we ahve a supply chain object, do something with it\n if(args[\"to\"]){\n this.chain.log();\n if(this.chain.presets.arr[0]){\n await this.chain.downloadPresetCode(this.chain.presets);\n log(\"Done\");\n }\n\n if(Array.isArray(args[\"to\"])){\n for(let to of args[\"to\"]){\n await this.chain.syncTo(to);\n }\n }else{\n await this.chain.syncTo(args[\"to\"]);\n }\n\n }else if(args[\"delete\"]){\n if(Array.isArray(args[\"delete\"])){\n for(let to of args[\"delete\"]){\n await this.chain.deleteTo(to);\n }\n }else{\n await this.chain.deleteTo(args[\"delete\"]);\n }\n }else if(args[\"diff\"]){\n //Very basic diff\n let env = args[\"diff\"];\n await Promise.all(this.chain.presets.arr.map(obj => obj.downloadCode()));\n await Promise.all(this.chain.presets.arr.map(obj => obj.resolve()));\n\n let otherPresets = await Promise.all(this.chain.presets.arr.map(obj => Preset.getByName(env, obj.name)));\n otherPresets = new Collection(otherPresets.filter(x => x));\n await Promise.all(otherPresets.arr.map(obj => obj.downloadCode()));\n await Promise.all(otherPresets.arr.map(obj => obj.resolve()));\n\n const printPresets = (preset, otherPreset) => {\n log(preset.chalkPrint(true));\n if(otherPreset.name){\n log(otherPreset.chalkPrint(true));\n }else{\n log(chalk`{red (None)}`);\n }\n }\n\n for(let preset of this.chain.presets){\n let otherPreset = otherPresets.arr.find(x => x.name === preset.name) || {};\n\n preset.code = preset.code.replace(/[\\r\\n ]/, \"\");\n otherPreset.code = (otherPreset.code || \"\").replace(/[\\r\\n ]/, \"\");\n\n if(preset.code === otherPreset.code){\n if(!args[\"ignore-same\"]){\n printPresets(preset, otherPreset);\n log(\"Code Same\");\n }\n }else{\n printPresets(preset, otherPreset);\n if(args[\"ignore-same\"]){\n log(\"-------\");\n }else{\n log(\"Code Different\");\n }\n }\n }\n\n }else{\n return await this.chain.log();\n }\n\n },\n async $make(args){\n let set = new Set();\n let hints = args.hint ? (Array.isArray(args.hint) ? args.hint : [args.hint]) : []\n //TODO modify for better hinting, and add this elsewhere\n for(let hint of hints){\n if(hint === \"presets-uat\"){\n log(\"got hint\");\n await Preset.getAll(\"UAT\");\n }\n }\n\n for(let file of this.files){\n set.add(await categorizeString(file));\n }\n let files = [...set];\n files = files.filter(f => f && !f.missing);\n this.chain = new SupplyChain();\n\n this.chain.rules = new Collection(files.filter(f => f instanceof Rule));\n this.chain.presets = new Collection(files.filter(f => f instanceof Preset));\n this.chain.notifications = new Collection([]);\n\n return await this.postAction(args);\n },\n async unknown(arg, args){\n log(chalk`Unknown action {red ${arg}} try '{white rally help supply}'`);\n },\n}\n\nfunction subCommand(object){\n object = {\n before(){}, after(){}, unknown(){},\n ...object\n };\n return async function(args){\n //Grab the next arg on the stack, find a function tied to it, and run\n let arg = args._.shift();\n let key = \"$\" + arg;\n let ret;\n if(object[key]){\n await object.before(args);\n ret = await object[key](args);\n await object.after(args);\n }else{\n if(arg === undefined) arg = \"(None)\";\n object.unknown(arg, args);\n }\n return ret;\n }\n}\n\nlet cli = {\n @helpText(`Display the help menu`)\n @usage(`rally help [subhelp]`)\n @param(\"subhelp\", \"The name of the command to see help for\")\n async help(args){\n let arg = args._.shift();\n if(arg){\n let help = helpEntries[arg];\n if(!help){\n log(chalk`No help found for '{red ${arg}}'`);\n }else{\n log(printHelp(helpEntries[arg]));\n }\n }else{\n for(let helpArg in helpEntries){\n log(printHelp(helpEntries[helpArg], true));\n }\n }\n },\n\n @helpText(\"Rally tools jupyter interface. Requires jupyter to be installed.\")\n @usage(\"rally jupyter build [in] [out]\")\n @param(\"in/out\", \"input and output file for jupyter. By default main.ipyrb and main.py\")\n async jupyter(args){\n return subCommand(jupytersub)(args);\n },\n\n //@helpText(`Print input args, for debugging`)\n async printArgs(args){\n log(args);\n },\n\n @helpText(`Preset related actions`)\n @usage(`rally preset [action] --env <enviornment> --file [file1] --file [file2] ...`)\n @param(\"action\", \"The action to perform. Can be upload, diff, list, deleteRemote\")\n @arg(\"-e\", \"--env\", \"The enviornment you wish to perform the action on\")\n @arg(\"-f\", \"--file\", \"A file to act on\")\n @arg(\"~\", \"--command\", \"If the action is diff, this is the command to run instead of diff\")\n async preset(args){\n return subCommand(presetsub)(args);\n },\n\n @helpText(`Rule related actions`)\n @usage(`rally rule [action] --env [enviornment]`)\n @param(\"action\", \"The action to perform. Only list is supported right now\")\n @arg(\"-e\", \"--env\", \"The enviornment you wish to perform the action on\")\n async rule(args){\n return subCommand(rulesub)(args);\n },\n\n @helpText(`supply chain related actions`)\n @usage(`rally supply [action] [identifier] --env [enviornment] [post actions]`)\n @param(\"action\", \"The action to perform. Can be calc or make.\")\n @param(\"identifier\", \"If the action is calc, then this identifier should be the first rule in the chain. If this is make, then supply '-' to read from stdin\")\n @param(\"post actions\", \"The action to perform on the created supply chain. See commands below\")\n @arg(\"-e\", \"--env\", \"(calc only) environment to do the calculation on\")\n @arg(\"~\", \"--diff\", \"(post action) Use as `--diff [env]`. List all files with differences on the given env.\")\n @arg(\"~\", \"--to\", \"(post action) Use as `--to [env]`. Upload all objects.\")\n @arg(\"~\", \"--delete\", \"(post action) Use as `--delete [env]`. The reverse of uploading. Only presets are supported right now.\")\n async supply(args){\n return subCommand(supplysub)(args);\n },\n\n @helpText(`tags stuff`)\n @usage(`rally tags [action]`)\n @param(\"action\", \"The action to perform. Can be list or create.\")\n @arg(\"-e\", \"--env\", \"The enviornment you wish to perform the action on\")\n async tag(args){\n return subCommand(tagsub)(args);\n },\n\n @helpText(`print out some trace info`)\n @usage(`rally trace -e [env] [jobid]`)\n @param(\"jobid\", \"a job id like b86d7d90-f0a5-4622-8754-486ca8e9ecbd\")\n @arg(\"-e\", \"--env\", \"The enviornment you wish to perform the action on\")\n async trace(args){\n let jobId = args._.shift();\n if(!jobId) throw new AbortError(\"No job id\");\n if(!args.env) throw new AbortError(\"no env\");\n let ln = args._.shift();\n if(!ln){\n log(\"is trace\");\n let traceInfo = await parseTrace(args.env, jobId);\n\n for(let line of traceInfo){\n if(typeof(line) == \"string\"){\n log(chalk.red(line));\n }else{\n printOutLine(line);\n }\n }\n }else{\n log(\"is ln\");\n let {renderedPreset} = await getTraceInfo(args.env, jobId);\n return findLineInFile(renderedPreset, Number(ln));\n }\n },\n\n @helpText(`List all available providers, or find one by name/id`)\n @usage(`rally providers [identifier] --env [env] --raw`)\n @param(\"identifier\", \"Either the name or id of the provider\")\n @arg(\"-e\", \"--env\", \"The enviornment you wish to perform the action on\")\n @arg(\"~\", \"--raw\", \"Raw output of command. If [identifier] is given, then print editorConfig too\")\n async providers(args){\n let env = args.env;\n if(!env) return errorLog(\"No env supplied.\");\n let ident = args._.shift();\n\n let providers = await Provider.getAll(env);\n\n if(ident){\n let pro = providers.arr.find(x => x.id == ident || x.name.includes(ident));\n if(!pro){\n log(chalk`Couldn't find provider by {green ${ident}}`);\n }else{\n log(pro.chalkPrint(false));\n let econfig = await pro.getEditorConfig();\n if(args.raw){\n return pro;\n }else{\n if(econfig.helpText.length > 100){\n econfig.helpText = \"<too long to display>\";\n }\n if(econfig.completions.length > 5){\n econfig.completions = \"<too long to display>\";\n }\n log(econfig);\n }\n }\n }else{\n if(args.raw) return providers;\n for(let pro of providers) log(pro.chalkPrint());\n }\n },\n\n @helpText(`Change config for rally tools`)\n @usage(\"rally config [key] --set [value] --raw\")\n @param(\"key\", chalk`Key you want to edit. For example, {green chalk} or {green api.DEV}`)\n @arg(\"~\", \"--set\", \"If this value is given, no interactive prompt will launch and the config option will change.\")\n @arg(\"~\", \"--raw\", \"Raw output of json config\")\n async config(args){\n let prop = args._.shift();\n let propArray = prop && prop.split(\".\");\n\n //if(!await configHelpers.askQuestion(`Would you like to create a new config file in ${configFile}`)) return;\n let newConfigObject;\n\n if(!prop){\n if(configObject.rawOutput) return configObject;\n log(\"Creating new config\");\n newConfigObject = {\n ...configObject,\n };\n for(let helperName in configHelpers){\n if(helperName.startsWith(\"$\")){\n newConfigObject = {\n ...newConfigObject,\n ...(await configHelpers[helperName](false))\n }\n }\n }\n }else{\n log(chalk`Editing option {green ${prop}}`);\n if(args.set){\n newConfigObject = {\n ...configObject,\n [prop]: args.set,\n };\n }else{\n let ident = \"$\" + propArray[0];\n\n if(configHelpers[ident]){\n newConfigObject = {\n ...configObject,\n ...(await configHelpers[ident](propArray))\n };\n }else{\n log(chalk`No helper for {red ${ident}}`);\n return;\n }\n }\n }\n\n newConfigObject.hasConfig = true;\n\n //Create readable json and make sure the user is ok with it\n let newConfig = JSON.stringify(newConfigObject, null, 4);\n log(newConfig);\n\n //-y or --set will make this not prompt\n if(!args.y && !args.set && !await configHelpers.askQuestion(\"Write this config to disk?\")) return;\n writeFileSync(configFile, newConfig, {mode: 0o600});\n log(chalk`Created file {green ${configFile}}.`);\n },\n\n @helpText(`create/modify asset`)\n @usage(\"rally asset [action] [action...]\")\n @param(\"action\", chalk`Options are create, delete, launch, addfile, metadata, show, patchMetadata, and launchEvalute. You can supply multiple actions to chain them`)\n @arg(`-i`, `--id`, chalk`MOVIE_ID of asset to select`)\n @arg(`-n`, `--name`, chalk`MOVIE_NAME of asset. with {white create}, '{white #}' will be replaced with a uuid. Default is '{white TEST_#}'`)\n @arg(`~`, `--anon`, chalk`Supply this if no asset is needed (used to lauch anonymous workflows)`)\n @arg(`-j`, `--job-name`, chalk`Job name to start (used with launch and launchEvalute)`)\n @arg(`~`, `--init-data`, chalk`Init data to use when launching job. can be string, or {white @path/to/file} for a file`)\n @arg(`~`, `--file-label`, chalk`File label (used with addfile)`)\n @arg(`~`, `--file-uri`, chalk`File s3 uri. Can use multiple uri's for the same label (used with addfile)`)\n @arg(`~`, `--metadata`, chalk`Metadata to use with patchMetadata. Can be string, or {white @path/to/file} for a file. Data must contain a top level key Metadata, or Workflow. Metadata will be pached into METADATA. Workflow will be patched into WORKFLOW_METADATA(not currently available)`)\n @arg(`~`, `--priority`, chalk`set the priority of all launched jobs`)\n @arg(`~`, `--new-name`, chalk`set the new name`)\n @arg(`~`, `--target-env`, chalk`migrate to the env (when using migrate)`)\n async asset(args){\n function uuid(args){\n const digits = 16;\n return String(Math.floor(Math.random() * Math.pow(10, digits))).padStart(digits, \"0\");\n }\n\n let name = args.name || `TEST_#`;\n let env = args.env;\n\n let asset;\n let arg = args._.shift()\n if(!arg){\n throw new AbortError(chalk`Missing arguments: see {white 'rally help asset'}`);\n }\n\n if(args.anon){\n args._.unshift(arg);\n }else if(arg == \"create\"){\n name = name.replace(\"#\", uuid());\n asset = await Asset.createNew(name, env);\n }else{\n args._.unshift(arg);\n if(args.id){\n asset = Asset.lite(args.id, env);\n }else{\n asset = await Asset.getByName(env, args.name);\n }\n }\n\n if(!asset && !args.anon){\n throw new AbortError(\"No asset found/created\");\n }\n let launchArg = 0;\n let fileArg = 0;\n\n let arrayify = (obj, i) => Array.isArray(obj) ? obj[i] : (i == 0 ? obj : undefined);\n\n while(arg = args._.shift()){\n\n if(arg === \"launch\"){\n let initData = arrayify(args[\"init-data\"], launchArg);\n if(initData && initData.startsWith(\"@\")){\n log(chalk`Reading init data from {white ${initData.slice(1)}}`);\n initData = readFileSync(initData.slice(1), \"utf-8\");\n }\n\n let jobName = arrayify(args[\"job-name\"], launchArg);\n let p = await Rule.getByName(env, jobName);\n if(!p){\n throw new AbortError(`Cannot launch job ${jobName}, does not exist (?)`);\n }else{\n log(chalk`Launching ${p.chalkPrint(false)} on ${asset ? asset.chalkPrint(false) : \"(None)\"}`);\n }\n\n if(asset){\n await asset.startWorkflow(jobName, {initData, priority: args.priority})\n }else{\n await Asset.startAnonWorkflow(env, jobName, {initData, priority: args.priority})\n }\n launchArg++;\n }else if(arg === \"launchEvaluate\"){\n let initData = arrayify(args[\"init-data\"], launchArg);\n if(initData && initData.startsWith(\"@\")){\n log(chalk`Reading init data from {white ${initData.slice(1)}}`);\n initData = readFileSync(initData.slice(1), \"utf-8\");\n }\n\n let jobName = arrayify(args[\"job-name\"], launchArg);\n let jobData;\n let ephemeralEval = false;\n let p;\n if(jobName.startsWith(\"@\")){\n ephemeralEval = true;\n jobData = readFileSync(jobName.slice(1));\n }else{\n p = await Preset.getByName(env, jobName);\n if(!p){\n throw new AbortError(`Cannot launch preset ${jobName}, does not exist (?)`);\n }else{\n log(chalk`Launching ${p.chalkPrint(false)} on ${asset ? asset.chalkPrint(false) : \"(None)\"}`);\n }\n }\n\n\n if(ephemeralEval){\n await Asset.startEphemeralEvaluateIdeal(env, p.id, initData)\n }else{\n await asset.startEvaluate(p.id, initData)\n }\n launchArg++;\n }else if(arg === \"addfile\"){\n let label = arrayify(args[\"file-label\"], fileArg)\n let uri = arrayify(args[\"file-uri\"], fileArg)\n if(label === undefined || !uri){\n throw new AbortError(\"Number of file-label and file-uri does not match\");\n }\n await asset.addFile(label, uri);\n log(chalk`Added file ${label}`);\n fileArg++;\n }else if(arg === \"delete\"){\n await asset.delete();\n }else if(arg === \"create\"){\n throw new AbortError(`Cannot have more than 1 create/get per asset call`);\n }else if(arg === \"show\" || arg == \"load\"){\n if(asset.lite) asset = await Asset.getById(env, asset.id);\n if(arg == \"show\") log(asset);\n }else if(arg === \"metadata\" || arg === \"md\"){\n log(await asset.getMetadata());\n }else if(arg === \"migrate\"){\n await asset.migrate(args[\"target-env\"]);\n }else if(arg === \"patchMetadata\"){\n let initData = arrayify(args[\"metadata\"], launchArg);\n if(initData && initData.startsWith(\"@\")){\n log(chalk`Reading data from {white ${initData.slice(1)}}`);\n initData = readFileSync(initData.slice(1), \"utf-8\");\n }\n\n initData = JSON.parse(initData);\n\n await asset.patchMetadata(initData);\n }else if(arg === \"rename\"){\n let newName = args[\"new-name\"];\n let oldName = asset.name;\n await asset.rename(newName);\n log(chalk`Rename: {green ${oldName}} -> {green ${newName}}`);\n }\n }\n if(configObject.rawOutput && !configObject.script) return asset;\n },\n\n async checkSegments(args){\n let asset = args._.shift()\n let res = await allIndexBundle.lib.makeAPIRequest({\n env: args.env, path: `/movies/${asset}/metadata/Metadata`,\n });\n let segments = res.data.attributes.metadata.userMetaData.segments.segments;\n\n let r = segments.reduce((lastSegment, val, ind) => {\n let curSegment = val.startTime;\n if(curSegment < lastSegment){\n log(\"bad segment \" + (ind + 1))\n }\n return val.endTime\n }, \"00:00:00:00\");\n },\n\n async getJobs(args){\n let req = await allIndexBundle.lib.indexPathFast({\n env: args.env, path: \"/jobs\",\n qs: {\n filter: \"presetName=DCTC Add Element US Checkin\",\n },\n });\n\n log(req.map(x => x.relationships.asset.data.id).join(\"\\n\"))\n },\n\n async listAssets(args, tag){\n let req = await allIndexBundle.lib.indexPathFast({\n env: args.env, path: \"/assets\",\n qs: {\n noRelationships: true,\n sort: \"id\",\n },\n chunksize: 30,\n });\n for(let asset of req){\n log(asset.id);\n }\n\n return req;\n },\n\n async listSegments(args){\n let f = JSON.parse(readFileSync(args.file, \"utf-8\"));\n\n for(let asset of f){\n let r = await allIndexBundle.lib.makeAPIRequest({\n env: args.env, path: `/movies/${asset.id}/metadata/Metadata`,\n });\n\n let segs = r.data.attributes.metadata.userMetaData?.segments?.segments;\n if(segs && segs.length > 1){\n log(asset.id);\n log(asset.name);\n }\n }\n },\n async test4(args){\n let things = await allIndexBundle.lib.indexPathFast({\n env: args.env, path: \"/assets\",\n qs: {\n filter: `createdBefore=${Date.now() - 1000 * 160 * 24 * 60 * 60},createdSince=${Date.now() - 1000 * 170 * 24 * 60 * 60}`\n }\n });\n\n log(JSON.stringify(things, null, 4));\n },\n\n async test5(args){\n let things = await allIndexBundle.lib.indexPathFast({\n env: args.env, path: \"/jobs\",\n qs: {\n filter: `state=Queued,presetName=E2 P4101 - DNE Compliance Edit - US Output Deal - Edit WorkOrder`\n }\n });\n\n log(JSON.stringify(things, null, 4));\n },\n async test2(args){\n let wfr = await allIndexBundle.lib.indexPath({\n env: args.env, path: \"/workflowRuleMetadata\",\n });\n log(wfr);\n\n for(let wfrm of wfr){\n try{\n wfrm.id = undefined;\n wfrm.links = undefined;\n log(wfrm);\n let req = await allIndexBundle.lib.makeAPIRequest({\n env: \"DEV\", path: \"/workflowRuleMetadata\",\n method: \"POST\",\n payload: {data: wfrm},\n })\n }catch(e){\n log(\"caught\");\n }\n //break;\n }\n },\n\n async test3(args){\n let wfr = await allIndexBundle.lib.indexPath({\n env: args.env, path: \"/workflowRuleMetadata\",\n });\n log(wfr);\n\n for(let wfrm of wfr){\n try{\n wfrm.id = undefined;\n wfrm.links = undefined;\n log(wfrm);\n let req = await allIndexBundle.lib.makeAPIRequest({\n env: \"DEV\", path: \"/workflowRuleMetadata\",\n method: \"POST\",\n payload: {data: wfrm},\n })\n }catch(e){\n log(\"caught\");\n }\n //break;\n }\n },\n\n async deleteOmneons(args){\n let id = args._.shift();\n\n let asset;\n if(Number(id)) {\n asset = await Asset.getById(\"PROD\", Number(id));\n }else{\n asset = await Asset.getByName(\"PROD\", id);\n }\n\n log(asset);\n let f = await asset.getFiles();\n\n for(let file of f){\n if(file.label.includes(\"Omneon\")){\n log(`removing ${file.label}`);\n await file.delete();\n }\n }\n },\n\n async audit(args){\n let supportedAudits = [\"presets\", \"rule\", \"other\"];\n await configHelpers.addAutoCompletePrompt();\n let q = await configHelpers.inquirer.prompt([{\n type: \"autocomplete\", name: \"obj\",\n message: `What audit do you want?`,\n source: async (sofar, input) => {\n return supportedAudits.filter(x => input ? x.includes(input.toLowerCase()) : true);\n },\n }]);\n let choice = q.obj;\n let resourceId = undefined\n let filterFunc = _=>_;\n if(choice === \"presets\"){\n let preset = await configHelpers.selectPreset({canSelectNone: false});\n let remote = await Preset.getByName(args.env, preset.name);\n if(!remote) throw new AbortError(\"Could not find this item on remote env\");\n filterFunc = ev => ev.resource == \"Preset\";\n resourceId = remote.id;\n }else if(choice === \"rule\"){\n let preset = await configHelpers.selectRule({canSelectNone: false});\n let remote = await Rule.getByName(args.env, preset.name);\n if(!remote) throw new AbortError(\"Could not find this item on remote env\");\n filterFunc = ev => ev.resource == \"Rule\";\n resourceId = remote.id;\n }else{\n resourceId = await configHelpers.askInput(null, \"What resourceID?\");\n }\n\n log(chalk`Resource ID on {blue ${args.env}} is {yellow ${resourceId}}`);\n log(`Loading audits (this might take a while)`);\n const numRows = 100;\n let r = await allIndexBundle.lib.makeAPIRequest({\n env: args.env,\n path: `/v1.0/audit?perPage=${numRows}&count=${numRows}&filter=%7B%22resourceId%22%3A%22${resourceId}%22%7D&autoload=false&pageNum=1&include=`,\n timeout: 180000,\n });\n r.data = r.data.filter(filterFunc);\n\n log(\"Data recieved, parsing users\");\n\n for(let event of r.data){\n let uid = event?.correlation?.userId;\n if(!uid) continue;\n try{\n event.user = await User.getById(args.env, uid);\n }catch(e){\n event.user = {name: \"????\"};\n }\n }\n\n if(args.raw) return r.data;\n let evCounter = 0;\n for(let event of r.data){\n let evtime = moment(event.createdAt);\n let date = evtime.format(\"ddd YYYY/MM/DD hh:mm:ssa\");\n let timedist = evtime.fromNow();\n log(chalk`${date} {yellow ${timedist}} {green ${event.user?.name}} ${event.event}`);\n\n if(++evCounter >= 30) break;\n }\n },\n\n async audit2(args){\n const numRows = 1000\n let r = await allIndexBundle.lib.makeAPIRequest({\n env: args.env,\n //path: `/v1.0/audit?perPage=${numRows}&count=${numRows}&autoload=false&pageNum=1&include=`,\n path: `/v1.0/audit?perPage=${numRows}&count=${numRows}&filter=%7B%22correlation.userId%22%3A%5B%22164%22%5D%7D&autoload=false&pageNum=1&include=`,\n timeout: 60000,\n });\n for(let event of r.data){\n log(event.event);\n }\n },\n\n async findIDs(args){\n let files = await getFilesFromArgs(args);\n for(let file of files){\n let preset = await Preset.getByName(args.env, file);\n await preset.resolve();\n log(`silo-presets/${file}.${preset.ext}`);\n }\n },\n\n async getAssets(env, name){\n if(!this.callid) this.callid = 0;\n this.callid++;\n let callid = this.callid;\n\n await allIndexBundle.sleep(500);\n\n if(callid != this.callid) return this.lastResult || [];\n\n let req = await allIndexBundle.lib.makeAPIRequest({\n env, path: `/assets`,\n qs: name ? {filter: `nameContains=${name}`} : undefined,\n })\n this.lastCall = Date.now();\n\n return this.lastResult = req.data;\n },\n\n async content(args){\n configHelpers.addAutoCompletePrompt();\n let q = await configHelpers.inquirer.prompt([{\n type: \"autocomplete\",\n name: \"what\",\n message: `What asset do you want?`,\n source: async (sofar, input) => {\n let assets = await this.getAssets(args.env, input);\n assets = assets.map(x => new Asset({data: x, remote: args.env}));\n return assets.map(x => ({\n name: x.chalkPrint(true) + \": \" + x.data.links.self.replace(\"/api/v2/assets/\", \"/content/\"),\n value: x,\n }));\n },\n }]);\n },\n\n async [\"@\"](args){\n args._.unshift(\"-\");\n args._.unshift(\"make\");\n return this.supply(args);\n },\n\n async test(args){\n let asset = await Asset.getByName(\"UAT\", args.name);\n log(asset);\n },\n\n //Used to test startup and teardown speed.\n noop(){\n return true;\n },\n};\nasync function unknownCommand(cmd){\n log(chalk`Unknown command {red ${cmd}}.`);\n}\n\nasync function noCommand(){\n write(chalk`\nRally Tools {yellow v${packageVersion} (alpha)} CLI\nby John Schmidt <John_Schmidt@discovery.com>\n`);\n\n //Prompt users to setup one time config.\n if(!configObject.hasConfig){\n write(chalk`\nIt looks like you haven't setup the config yet. Please run '{green rally config}'.\n`);\n return;\n }\n\n let envs = new Set([\"LOCAL\", \"UAT\", \"DEV\", \"PROD\", \"QA\", ...Object.keys(configObject.api)]);\n\n let proms = [];\n for(let env of envs){\n proms.push({env, prom: funcs.testAccess(env)});\n }\n\n //API Access tests\n for(let {env, prom} of proms){\n //Test access. Returns HTTP response code\n let resultStr;\n try{\n\n let result = await prom;\n\n //Create a colored display and response\n resultStr = chalk`{yellow ${result} <unknown>}`;\n if(result === 200) resultStr = chalk`{green 200 OK}`;\n else if(result === 401) resultStr = chalk`{red 401 No Access}`;\n else if(result >= 500) resultStr = chalk`{yellow ${result} API Down?}`;\n else if(result === true) resultStr = chalk`{green OK}`;\n else if(result === false) resultStr = chalk`{red BAD}`;\n }catch(e){\n if(e instanceof UnconfiguredEnvError){\n resultStr = chalk`{yellow Unconfigured}`;\n }else if(e instanceof APIError){\n if(!e.response.body){\n resultStr = chalk`{red Timeout (?)}`;\n }\n }else if(e.name == \"RequestError\"){\n resultStr = chalk`{red Low level error (check internet): ${e.error.errno}}`;\n }else{\n throw e;\n }\n }\n\n log(chalk` ${env}: ${resultStr}`);\n }\n}\n\nasync function $main(){\n //Supply --config to load a different config file\n if(typeof(argv.config) === \"string\"){\n loadConfig(argv.config);\n }else if(typeof(argv.config) === \"object\") {\n loadConfigFromArgs(argv);\n }else{\n loadConfig();\n }\n\n // First we need to decide if the user wants color or not. If they do want\n // color, we need to make sure we use the right mode\n chalk.enabled = configObject.hasConfig ? configObject.chalk : true;\n if(chalk.level === 0 || !chalk.enabled){\n let force = argv[\"force-color\"];\n if(force){\n chalk.enabled = true;\n if(force === true && chalk.level === 0){\n chalk.level = 1;\n }else if(Number(force)){\n chalk.level = Number(force);\n }\n }\n }\n\n //This flag being true allows you to modify UAT and PROD\n if(!argv[\"protect\"]){\n configObject.dangerModify = true;\n }\n\n //This enables raw output for some functions\n if(argv[\"raw\"]){\n configObject.rawOutput = true;\n global.log = ()=>{};\n global.errorLog = ()=>{};\n global.write = ()=>{};\n }\n\n if(argv[\"script\"]){\n configObject.script = true;\n }\n\n if(argv[\"ignore-missing\"]){\n configObject.ignoreMissing = true;\n }\n\n if(argv[\"update-immutable\"]){\n configObject.updateImmutable = true;\n }\n\n if(argv[\"skip-header\"]){\n configObject.skipHeader = true;\n }\n\n configObject.globalProgress = !argv[\"hide-progress\"];\n\n //Default enviornment should normally be from config, but it can be\n //overridden by the -e/--env flag\n if(configObject.defaultEnv){\n argv.env = argv.env || configObject.defaultEnv;\n }\n\n //Enable verbose logging in some places.\n if(argv[\"vverbose\"]){\n configObject.verbose = argv[\"vverbose\"];\n configObject.vverbose = true;\n }else if(argv[\"verbose\"]){\n configObject.verbose = argv[\"verbose\"]\n }else if(argv[\"vvverbose\"]){\n configObject.verbose = true;\n configObject.vverbose = true;\n configObject.vvverbose = true;\n }\n\n //copy argument array to new object to allow modification\n argv._old = argv._.slice();\n\n //Take first argument after `node bundle.js`\n //If there is no argument, display the default version info and API access.\n let func = argv._.shift();\n if(func){\n if(!cli[func]) return await unknownCommand(func);\n try{\n //Call the cli function\n let ret = await cli[func](argv);\n if(ret){\n write(chalk.white(\"CLI returned: \"));\n if(ret instanceof Collection) ret = ret.arr;\n\n //Directly use console.log so that --raw works as intended.\n if(typeof ret === \"object\"){\n console.log(JSON.stringify(ret, null, 4));\n }else{\n console.log(ret);\n }\n }\n }catch(e){\n if(e instanceof AbortError){\n log(chalk`{red CLI Aborted}: ${e.message}`);\n process.exit(1);\n }else{\n throw e;\n }\n }\n }else{\n await noCommand();\n }\n\n process.exit(0);\n}\n\nasync function main(...args){\n //Catch all for errors to avoid ugly default node promise catcher\n try{\n await $main(...args);\n }catch(e){\n errorLog(e.stack);\n process.exit(1);\n }\n}\n\n// If this is an imported module, then we should exec the cli interface.\n// Oterwise just export everything.\nif(require.main === module){\n main();\n}else{\n loadConfig();\n module.exports = allIndexBundle;\n}\n"],"names":["configFile","homedir","configObject","loadConfig","file","hasConfig","json","readFileSync","JSON","parse","e","code","loadConfigFromArgs","args","tempConfig","config","setConfig","obj","helpEntries","helpEntry","name","helpText","text","func","arg","long","short","desc","unshift","param","params","usage","replace","chalk","deepAccess","path","o","key","defineAssoc","classname","shortname","split","lastKey","pop","Object","defineProperty","prototype","get","set","val","spawn","options","Promise","resolve","reject","start","performance","now","stdout","stderr","cp","cp_spawn","write","global","noecho","on","chunk","end","time","timestr","exitCode","log","console","process","elog","error","ewrite","errorLog","map","red","lib","makeAPIRequest","env","path_full","fullPath","payload","body","method","qs","headers","fullResponse","timeout","api","UnconfiguredEnvError","dangerModify","restrictUAT","ProtectedEnvError","rally_api_key","rally_api","url","startsWith","stringify","fullHeaders","Accept","appName","vvverbose","requestOptions","uri","auth","bearer","simple","resolveWithFullResponse","response","rp","vverbose","request","href","cause","APIError","includes","statusCode","contentType","isJSONResponse","trim","AbortError","indexPath","all","opts","numPages","pageSize","links","last","data","next","observe","str","exec","slice","arrayChunk","array","chunkSize","newArr","i","length","push","doPromises","promises","result","cb","promise","res","clearProgress","size","globalProgress","repeat","drawProgress","max","columns","pct","Number","numFilled","Math","floor","numEmpty","keepalive","inputData","chunksize","_","progress","total","createPromise","ret","values","finished","threads","range","whichThread","currentPromise","undefined","indexPathFast","initOpts","page","baselink","first","linkToPage","allResults","limit","item","isLocalEnv","envName","Error","constructor","message","captureStackTrace","FileTooLargeError","parentAsset","sizeGB","Collection","arr","Symbol","iterator","findById","id","find","x","findByName","findByNameContains","d","chalkPrint","RallyBase","handleCaching","cache","isLoaded","hasLoadedAll","getById","remote","metastring","endpoint","included","getByName","filter","getAllPreCollect","getAll","datas","sort","removeCache","resolveApply","type","dataObj","direction","resolveField","isArray","field","relationships","cleanup","entries","organization","sleep","setTimeout","inquirer","importLazy","readdir","hasAutoCompletePrompt","addAutoCompletePrompt","registerPrompt","require","$api","propArray","q","prompt","default","company","defaults","DEV","UAT","QA","PROD","envs","choices","keys","checked","questions","defaultKey","concat","$chalk","askQuestion","$restrictUAT","$repodir","$appName","defaultAppName","USERNAME","LOGNAME","project","askInput","$project","$defaultEnv","selectProvider","providers","autoDefault","defaultProvider","value","source","sofar","input","toLowerCase","provider","loadLocals","Class","basePath","repodir","objs","basename","selectLocal","typeName","canSelectNone","objsMap","none","selectPreset","purpose","Preset","selectRule","Rule","question","def","ok","Provider","meta","getEditorConfig","editorConfig","fileExt","getFileExtension","a","b","attributes","category","localeCompare","python","getmap","lang","pad","String","padStart","File","parent","sizeHR","canBeDownloaded","getContent","force","contentLink","delete","remove","selfLink","instances","round","units","unitIdx","instancesList","n","assign","rslURL","instance","storageLocationName","Asset","lite","metadata","normalizeMetadata","newMetadata","md","getMetadata","forceRefresh","req","patchMetadata","Workflow","fakePreset","startEphemeralEvaluateIdeal","Metadata","createNew","getFiles","addFile","label","fileuris","Array","startWorkflow","jobName","initData","priority","startAnonWorkflow","preset","dynamicPresetData","isBinary","evalInfo","providerTypeName","rallyConfiguration","providerData","Buffer","from","toString","movie","self","state","startEvaluate","presetid","rename","newName","migrate","targetEnv","_mdPromise","targetAsset","fileCreations","inst","addFileInstance","tagList","newInst","lastModified","asset","fileData","newFile","script","home","colon","siloLike","pathTransform","invertedPath","fs","writeFileSync","dircreated","directory","dirname","statSync","nodir","mkdirSync","exists","subProject","pathResolve","subproject","pathspl","ext","getLocalCode","ignoreMissing","missing","parseFilenameForName","parseCodeForName","getLocalMetadata","isGeneric","localmetadatapath","newShell","systemManaged","fromMetadata","providerType","realpath","getLocalPath","acclimatize","ptype","test","regex","match","matches","runTest","proType","saveLocal","saveLocalMetadata","saveLocalFile","localpath","uploadRemote","uploadCodeToEnv","save","saved","downloadCode","headerRegex","hasHeader","header","substring","_code","v","sub","endsWith","name_regex","findStringsInCode","strings","RegExp","join","_path","_nameOuter","_nameInner","immutable","updateImmutable","uploadPresetData","providerName","skipHeader","headerText","moment","Date","format","grabMetadata","deleteRemoteVersion","includeMetadata","shouldTest","tagNames","parseHeaderInfo","abs","built","author","build","version","branch","commit","local","tryFormats","isUTC","date","utc","isValid","offset","fromNow","printRemoteInfo","getInfo","printDepends","indent","locals","seen","includeRegex","inc","include","Notification","notifications","f","pNext","eNext","dynamicNexts","enterNotif","errorNotif","passNotif","saveA","createIfNotExist","saveB","idMap","patchStrip","createdAt","starred","updatedAt","passMetadata","errorMetadata","SupplyChain","startingRule","stopRule","downloadPresetCode","allPresets","calculate","allRules","allProviders","allNotifications","rules","presets","allRuleNames","allPresetNames","allNotifNames","requiredNotifications","Set","ruleQueue","presetQueue","currentRule","forEach","add","neededPresets","neededRules","notif","p","verbose","rawOutput","deleteTo","syncTo","rule","User","Tag","prefix","curated","create","notCurated","findLineInFile","renderedPreset","lineNumber","trueFileLine","linedRenderedPreset","includeLocation","endIncludeNumber","addTabDepth","lineBeforeIncludeStatement","withinInclude","indexOf","index","currIncludeIndex","tabDepth","Boolean","funcLine","line","reverse","includeFilename","printOutLine","eLine","jobid","trace","catch","output","parseTrace","errorLines","shouldBreak","tr","errorList","errLine","Trace","install","rallyFunctions","bestPagintation","silentAPI","dl","timeEnd","uploadPresets","createFunc","testAccess","SdviContentMover","SdviEvaluate","SdviEvalPro","argv","argparse","string","boolean","protect","alias","printHelp","help","getFilesFromArgs","lastArg","shift","files","getStdin","stdin","presetsub","before","$grab","full","remo","$create","configHelpers","baseCode","$list","attach","$upload","funcs","$deleteRemote","preset2","$diff","tempfile","temp","extension","ptr","command","stdio","$info","unknown","rulesub","passNext","errorNext","transition","description","jupytersub","$build","cmd","categorizeString","defaultSubproject","tagsub","tags","tag","supplysub","$calc","stopName","chain","stop","postAction","to","otherPresets","printPresets","otherPreset","$make","hints","hint","subCommand","object","after","cli","helpArg","jupyter","printArgs","supply","jobId","ln","traceInfo","getTraceInfo","ident","pro","econfig","raw","completions","prop","newConfigObject","helperName","newConfig","y","mode","uuid","digits","random","pow","anon","launchArg","fileArg","arrayify","jobData","ephemeralEval","oldName","checkSegments","allIndexBundle","segments","userMetaData","r","reduce","lastSegment","ind","curSegment","startTime","endTime","getJobs","listAssets","noRelationships","listSegments","segs","test4","things","test5","test2","wfr","wfrm","test3","deleteOmneons","audit","supportedAudits","choice","resourceId","filterFunc","ev","resource","numRows","event","uid","correlation","userId","user","evCounter","evtime","timedist","audit2","findIDs","getAssets","callid","lastResult","lastCall","content","assets","noop","unknownCommand","noCommand","packageVersion","proms","prom","resultStr","errno","$main","enabled","level","defaultEnv","_old","white","exit","main","stack","module","exports"],"mappings":"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"}
\No newline at end of file