@hotglue/cli 1.0.30 → 1.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("fs"),n=require("path"),t=require("os"),o=require("yargs"),s=require("util"),r=require("assert"),a=require("url"),i=require("fs/promises"),c=require("cosmiconfig"),l=require("chalk"),d=require("aws-sdk"),u=require("debug"),f=require("yaml"),p=require("cli-table"),y=require("ora"),g=require("micromatch"),h=require("axios");require("progress");var m=require("node:fs/promises"),b="undefined"!=typeof document?document.currentScript:null;function w(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var v,$,_,k,j,O,x,E={};function T(){if(v)return E;v=1;const o=e,s=n,r=t;function a(e){console.log(`[dotenv][DEBUG] ${e}`)}const i=/^\s*([\w.-]+)\s*=\s*("[^"]*"|'[^']*'|[^#]*)?(\s*|\s*#.*)?$/,c=/\\n/g,l=/\r\n|\n|\r/;function d(e,n){const t=Boolean(n&&n.debug),o={};return e.toString().split(l).forEach((function(e,n){const s=e.match(i);if(null!=s){const e=s[1];let n=s[2]||"";const t=n.length-1,r='"'===n[0]&&'"'===n[t];"'"===n[0]&&"'"===n[t]||r?(n=n.substring(1,t),r&&(n=n.replace(c,"\n"))):n=n.trim(),o[e]=n}else if(t){const t=e.trim();t.length&&"#"!==t[0]&&a(`Failed to match key and value when parsing line ${n+1}: ${e}`)}})),o}return E.config=function(e){let n=s.resolve(process.cwd(),".env"),t="utf8";const i=Boolean(e&&e.debug),c=Boolean(e&&e.override);var l;e&&(null!=e.path&&(n="~"===(l=e.path)[0]?s.join(r.homedir(),l.slice(1)):l),null!=e.encoding&&(t=e.encoding));try{const e=d(o.readFileSync(n,{encoding:t}),{debug:i});return Object.keys(e).forEach((function(n){Object.prototype.hasOwnProperty.call(process.env,n)?(!0===c&&(process.env[n]=e[n]),i&&a(!0===c?`"${n}" is already defined in \`process.env\` and WAS overwritten`:`"${n}" is already defined in \`process.env\` and was NOT overwritten`)):process.env[n]=e[n]})),{parsed:e}}catch(e){return i&&a(`Failed to load ${n} ${e.message}`),{error:e}}},E.parse=d,E}O||(O=1,T().config(Object.assign({},function(){if(_)return $;_=1;const e={};return null!=process.env.DOTENV_CONFIG_ENCODING&&(e.encoding=process.env.DOTENV_CONFIG_ENCODING),null!=process.env.DOTENV_CONFIG_PATH&&(e.path=process.env.DOTENV_CONFIG_PATH),null!=process.env.DOTENV_CONFIG_DEBUG&&(e.debug=process.env.DOTENV_CONFIG_DEBUG),null!=process.env.DOTENV_CONFIG_OVERRIDE&&(e.override=process.env.DOTENV_CONFIG_OVERRIDE),$=e}(),function(){if(j)return k;j=1;const e=/^dotenv_config_(encoding|path|debug|override)=(.+)$/;return k=function(n){return n.reduce((function(n,t){const o=t.match(e);return o&&(n[o[1]]=o[2]),n}),{})}}()(process.argv))));Error;function S(){return process.versions.electron&&!process.defaultApp?0:1}
2
+ "use strict";var e=require("fs"),n=require("path"),t=require("os"),o=require("yargs"),s=require("util"),r=require("assert"),a=require("url"),i=require("fs/promises"),c=require("cosmiconfig"),l=require("chalk"),d=require("aws-sdk"),u=require("debug"),f=require("yaml"),p=require("cli-table"),y=require("ora"),g=require("micromatch"),h=require("axios");require("progress");var m=require("node:fs/promises"),w="undefined"!=typeof document?document.currentScript:null;function b(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var v,$,k,_,j,O,x,E={};function T(){if(v)return E;v=1;const o=e,s=n,r=t;function a(e){console.log(`[dotenv][DEBUG] ${e}`)}const i=/^\s*([\w.-]+)\s*=\s*("[^"]*"|'[^']*'|[^#]*)?(\s*|\s*#.*)?$/,c=/\\n/g,l=/\r\n|\n|\r/;function d(e,n){const t=Boolean(n&&n.debug),o={};return e.toString().split(l).forEach((function(e,n){const s=e.match(i);if(null!=s){const e=s[1];let n=s[2]||"";const t=n.length-1,r='"'===n[0]&&'"'===n[t];"'"===n[0]&&"'"===n[t]||r?(n=n.substring(1,t),r&&(n=n.replace(c,"\n"))):n=n.trim(),o[e]=n}else if(t){const t=e.trim();t.length&&"#"!==t[0]&&a(`Failed to match key and value when parsing line ${n+1}: ${e}`)}})),o}return E.config=function(e){let n=s.resolve(process.cwd(),".env"),t="utf8";const i=Boolean(e&&e.debug),c=Boolean(e&&e.override);var l;e&&(null!=e.path&&(n="~"===(l=e.path)[0]?s.join(r.homedir(),l.slice(1)):l),null!=e.encoding&&(t=e.encoding));try{const e=d(o.readFileSync(n,{encoding:t}),{debug:i});return Object.keys(e).forEach((function(n){Object.prototype.hasOwnProperty.call(process.env,n)?(!0===c&&(process.env[n]=e[n]),i&&a(!0===c?`"${n}" is already defined in \`process.env\` and WAS overwritten`:`"${n}" is already defined in \`process.env\` and was NOT overwritten`)):process.env[n]=e[n]})),{parsed:e}}catch(e){return i&&a(`Failed to load ${n} ${e.message}`),{error:e}}},E.parse=d,E}O||(O=1,T().config(Object.assign({},function(){if(k)return $;k=1;const e={};return null!=process.env.DOTENV_CONFIG_ENCODING&&(e.encoding=process.env.DOTENV_CONFIG_ENCODING),null!=process.env.DOTENV_CONFIG_PATH&&(e.path=process.env.DOTENV_CONFIG_PATH),null!=process.env.DOTENV_CONFIG_DEBUG&&(e.debug=process.env.DOTENV_CONFIG_DEBUG),null!=process.env.DOTENV_CONFIG_OVERRIDE&&(e.override=process.env.DOTENV_CONFIG_OVERRIDE),$=e}(),function(){if(j)return _;j=1;const e=/^dotenv_config_(encoding|path|debug|override)=(.+)$/;return _=function(n){return n.reduce((function(n,t){const o=t.match(e);return o&&(n[o[1]]=o[2]),n}),{})}}()(process.argv))));Error;function S(){return process.versions.electron&&!process.defaultApp?0:1}
3
3
  /**
4
4
  * @license
5
5
  * Copyright (c) 2016, Contributors
6
6
  * SPDX-License-Identifier: ISC
7
7
  */
8
- function I(e){if(e!==e.toLowerCase()&&e!==e.toUpperCase()||(e=e.toLowerCase()),-1===e.indexOf("-")&&-1===e.indexOf("_"))return e;{let n="",t=!1;const o=e.match(/^-+/);for(let s=o?o[0].length:0;s<e.length;s++){let o=e.charAt(s);t&&(t=!1,o=o.toUpperCase()),0===s||"-"!==o&&"_"!==o?"-"!==o&&"_"!==o&&(n+=o):t=!0}return n}}function F(e,n){const t=e.toLowerCase();n=n||"-";let o="";for(let s=0;s<e.length;s++){const r=t.charAt(s),a=e.charAt(s);o+=r!==a&&s>0?`${n}${t.charAt(s)}`:a}return o}function A(e){return null!=e&&("number"==typeof e||(!!/^0x[0-9a-f]+$/i.test(e)||!/^0[^.]/.test(e)&&/^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(e)))}
8
+ function A(e){if(e!==e.toLowerCase()&&e!==e.toUpperCase()||(e=e.toLowerCase()),-1===e.indexOf("-")&&-1===e.indexOf("_"))return e;{let n="",t=!1;const o=e.match(/^-+/);for(let s=o?o[0].length:0;s<e.length;s++){let o=e.charAt(s);t&&(t=!1,o=o.toUpperCase()),0===s||"-"!==o&&"_"!==o?"-"!==o&&"_"!==o&&(n+=o):t=!0}return n}}function F(e,n){const t=e.toLowerCase();n=n||"-";let o="";for(let s=0;s<e.length;s++){const r=t.charAt(s),a=e.charAt(s);o+=r!==a&&s>0?`${n}${t.charAt(s)}`:a}return o}function I(e){return null!=e&&("number"==typeof e||(!!/^0x[0-9a-f]+$/i.test(e)||!/^0[^.]/.test(e)&&/^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(e)))}
9
9
  /**
10
10
  * @license
11
11
  * Copyright (c) 2016, Contributors
@@ -16,7 +16,7 @@ function I(e){if(e!==e.toLowerCase()&&e!==e.toUpperCase()||(e=e.toLowerCase()),-
16
16
  * Copyright (c) 2016, Contributors
17
17
  * SPDX-License-Identifier: ISC
18
18
  */
19
- let N;!function(e){e.BOOLEAN="boolean",e.STRING="string",e.NUMBER="number",e.ARRAY="array"}(x||(x={}));function U(e){return void 0!==e?e+1:1}function K(e){return"__proto__"===e?"___proto___":e}
19
+ let U;!function(e){e.BOOLEAN="boolean",e.STRING="string",e.NUMBER="number",e.ARRAY="array"}(x||(x={}));function N(e){return void 0!==e?e+1:1}function K(e){return"__proto__"===e?"___proto___":e}
20
20
  /**
21
21
  * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js
22
22
  * CJS and ESM environments.
@@ -25,10 +25,10 @@ let N;!function(e){e.BOOLEAN="boolean",e.STRING="string",e.NUMBER="number",e.ARR
25
25
  * Copyright (c) 2016, Contributors
26
26
  * SPDX-License-Identifier: ISC
27
27
  */
28
- const B=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process.env.YARGS_MIN_NODE_VERSION):12;if(process&&process.version){if(Number(process.version.match(/v([^.]+)/)[1])<B)throw Error(`yargs parser supports a minimum Node.js version of ${B}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`)}const D=process?process.env:{},M=new class{constructor(e){N=e}parse(e,n){const t=Object.assign({alias:void 0,array:void 0,boolean:void 0,config:void 0,configObjects:void 0,configuration:void 0,coerce:void 0,count:void 0,default:void 0,envPrefix:void 0,narg:void 0,normalize:void 0,string:void 0,number:void 0,__:void 0,key:void 0},n),o=function(e){if(Array.isArray(e))return e.map((e=>"string"!=typeof e?e+"":e));e=e.trim();let n=0,t=null,o=null,s=null;const r=[];for(let a=0;a<e.length;a++)t=o,o=e.charAt(a)," "!==o||s?(o===s?s=null:"'"!==o&&'"'!==o||s||(s=o),r[n]||(r[n]=""),r[n]+=o):" "!==t&&n++;return r}
28
+ const B=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process.env.YARGS_MIN_NODE_VERSION):12;if(process&&process.version){if(Number(process.version.match(/v([^.]+)/)[1])<B)throw Error(`yargs parser supports a minimum Node.js version of ${B}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`)}const D=process?process.env:{},M=new class{constructor(e){U=e}parse(e,n){const t=Object.assign({alias:void 0,array:void 0,boolean:void 0,config:void 0,configObjects:void 0,configuration:void 0,coerce:void 0,count:void 0,default:void 0,envPrefix:void 0,narg:void 0,normalize:void 0,string:void 0,number:void 0,__:void 0,key:void 0},n),o=function(e){if(Array.isArray(e))return e.map((e=>"string"!=typeof e?e+"":e));e=e.trim();let n=0,t=null,o=null,s=null;const r=[];for(let a=0;a<e.length;a++)t=o,o=e.charAt(a)," "!==o||s?(o===s?s=null:"'"!==o&&'"'!==o||s||(s=o),r[n]||(r[n]=""),r[n]+=o):" "!==t&&n++;return r}
29
29
  /**
30
30
  * @license
31
31
  * Copyright (c) 2016, Contributors
32
32
  * SPDX-License-Identifier: ISC
33
- */(e),s="string"==typeof e,r=function(e){const n=[],t=Object.create(null);let o=!0;Object.keys(e).forEach((function(t){n.push([].concat(e[t],t))}));for(;o;){o=!1;for(let e=0;e<n.length;e++)for(let t=e+1;t<n.length;t++){if(n[e].filter((function(e){return-1!==n[t].indexOf(e)})).length){n[e]=n[e].concat(n[t]),n.splice(t,1),o=!0;break}}}return n.forEach((function(e){const n=(e=e.filter((function(e,n,t){return t.indexOf(e)===n}))).pop();void 0!==n&&"string"==typeof n&&(t[n]=e)})),t}(Object.assign(Object.create(null),t.alias)),a=Object.assign({"boolean-negation":!0,"camel-case-expansion":!0,"combine-arrays":!1,"dot-notation":!0,"duplicate-arguments-array":!0,"flatten-duplicate-arrays":!0,"greedy-arrays":!0,"halt-at-non-option":!1,"nargs-eats-options":!1,"negation-prefix":"no-","parse-numbers":!0,"parse-positional-numbers":!0,"populate--":!1,"set-placeholder-key":!1,"short-option-groups":!0,"strip-aliased":!1,"strip-dashed":!1,"unknown-options-as-args":!1},t.configuration),i=Object.assign(Object.create(null),t.default),c=t.configObjects||[],l=t.envPrefix,d=a["populate--"],u=d?"--":"_",f=Object.create(null),p=Object.create(null),y=t.__||N.format,g={aliases:Object.create(null),arrays:Object.create(null),bools:Object.create(null),strings:Object.create(null),numbers:Object.create(null),counts:Object.create(null),normalize:Object.create(null),configs:Object.create(null),nargs:Object.create(null),coercions:Object.create(null),keys:[]},h=/^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/,m=new RegExp("^--"+a["negation-prefix"]+"(.+)");[].concat(t.array||[]).filter(Boolean).forEach((function(e){const n="object"==typeof e?e.key:e,t=Object.keys(e).map((function(e){return{boolean:"bools",string:"strings",number:"numbers"}[e]})).filter(Boolean).pop();t&&(g[t][n]=!0),g.arrays[n]=!0,g.keys.push(n)})),[].concat(t.boolean||[]).filter(Boolean).forEach((function(e){g.bools[e]=!0,g.keys.push(e)})),[].concat(t.string||[]).filter(Boolean).forEach((function(e){g.strings[e]=!0,g.keys.push(e)})),[].concat(t.number||[]).filter(Boolean).forEach((function(e){g.numbers[e]=!0,g.keys.push(e)})),[].concat(t.count||[]).filter(Boolean).forEach((function(e){g.counts[e]=!0,g.keys.push(e)})),[].concat(t.normalize||[]).filter(Boolean).forEach((function(e){g.normalize[e]=!0,g.keys.push(e)})),"object"==typeof t.narg&&Object.entries(t.narg).forEach((([e,n])=>{"number"==typeof n&&(g.nargs[e]=n,g.keys.push(e))})),"object"==typeof t.coerce&&Object.entries(t.coerce).forEach((([e,n])=>{"function"==typeof n&&(g.coercions[e]=n,g.keys.push(e))})),void 0!==t.config&&(Array.isArray(t.config)||"string"==typeof t.config?[].concat(t.config).filter(Boolean).forEach((function(e){g.configs[e]=!0})):"object"==typeof t.config&&Object.entries(t.config).forEach((([e,n])=>{"boolean"!=typeof n&&"function"!=typeof n||(g.configs[e]=n)}))),function(...e){e.forEach((function(e){Object.keys(e||{}).forEach((function(e){g.aliases[e]||(g.aliases[e]=[].concat(r[e]||[]),g.aliases[e].concat(e).forEach((function(n){if(/-/.test(n)&&a["camel-case-expansion"]){const t=I(n);t!==e&&-1===g.aliases[e].indexOf(t)&&(g.aliases[e].push(t),f[t]=!0)}})),g.aliases[e].concat(e).forEach((function(n){if(n.length>1&&/[A-Z]/.test(n)&&a["camel-case-expansion"]){const t=F(n,"-");t!==e&&-1===g.aliases[e].indexOf(t)&&(g.aliases[e].push(t),f[t]=!0)}})),g.aliases[e].forEach((function(n){g.aliases[n]=[e].concat(g.aliases[e].filter((function(e){return n!==e})))})))}))}))}(t.key,r,t.default,g.arrays),Object.keys(i).forEach((function(e){(g.aliases[e]||[]).forEach((function(n){i[n]=i[e]}))}));let b=null;Object.keys(g.counts).find((e=>C(e,g.arrays)?(b=Error(y("Invalid configuration: %s, opts.count excludes opts.array.",e)),!0):!!C(e,g.nargs)&&(b=Error(y("Invalid configuration: %s, opts.count excludes opts.narg.",e)),!0)));let w=[];const v=Object.assign(Object.create(null),{_:[]}),$={};for(let e=0;e<o.length;e++){const n=o[e],t=n.replace(/^-{3,}/,"---");let s,r,i,c,l,d;if("--"!==n&&z(n))_(n);else{if(t.match(/---+(=|$)/)){_(n);continue}if(n.match(/^--.+=/)||!a["short-option-groups"]&&n.match(/^-.+=/))c=n.match(/^--?([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&(C(c[1],g.arrays)?e=j(e,c[1],o,c[2]):!1!==C(c[1],g.nargs)?e=k(e,c[1],o,c[2]):O(c[1],c[2],!0));else if(n.match(m)&&a["boolean-negation"])c=n.match(m),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],O(r,!!C(r,g.arrays)&&[!1]));else if(n.match(/^--.+/)||!a["short-option-groups"]&&n.match(/^-[^-]+/))c=n.match(/^--?(.+)/),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],C(r,g.arrays)?e=j(e,r,o):!1!==C(r,g.nargs)?e=k(e,r,o):(l=o[e+1],void 0===l||l.match(/^-/)&&!l.match(h)||C(r,g.bools)||C(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,q(r)):(O(r,l),e++)));else if(n.match(/^-.\..+=/))c=n.match(/^-([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&O(c[1],c[2]);else if(n.match(/^-.\..+/)&&!n.match(h))l=o[e+1],c=n.match(/^-(.\..+)/),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],void 0===l||l.match(/^-/)||C(r,g.bools)||C(r,g.counts)?O(r,q(r)):(O(r,l),e++));else if(n.match(/^-[^-]+/)&&!n.match(h)){i=n.slice(1,-1).split(""),s=!1;for(let t=0;t<i.length;t++){if(l=n.slice(t+2),i[t+1]&&"="===i[t+1]){d=n.slice(t+3),r=i[t],C(r,g.arrays)?e=j(e,r,o,d):!1!==C(r,g.nargs)?e=k(e,r,o,d):O(r,d),s=!0;break}if("-"!==l){if(/[A-Za-z]/.test(i[t])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(l)&&!1===C(l,g.bools)){O(i[t],l),s=!0;break}if(i[t+1]&&i[t+1].match(/\W/)){O(i[t],l),s=!0;break}O(i[t],q(i[t]))}else O(i[t],l)}r=n.slice(-1)[0],s||"-"===r||(C(r,g.arrays)?e=j(e,r,o):!1!==C(r,g.nargs)?e=k(e,r,o):(l=o[e+1],void 0===l||/^(-|--)[^-]/.test(l)&&!l.match(h)||C(r,g.bools)||C(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,q(r)):(O(r,l),e++)))}else if(n.match(/^-[0-9]$/)&&n.match(h)&&C(n.slice(1),g.bools))r=n.slice(1),O(r,q(r));else{if("--"===n){w=o.slice(e+1);break}if(a["halt-at-non-option"]){w=o.slice(e);break}_(n)}}}function _(e){const n=S("_",e);"string"!=typeof n&&"number"!=typeof n||v._.push(n)}function k(e,n,t,o){let s,r=C(n,g.nargs);if(r="number"!=typeof r||isNaN(r)?1:r,0===r)return V(o)||(b=Error(y("Argument unexpected for: %s",n))),O(n,q(n)),e;let i=V(o)?0:1;if(a["nargs-eats-options"])t.length-(e+1)+i<r&&(b=Error(y("Not enough arguments following: %s",n))),i=r;else{for(s=e+1;s<t.length&&(!t[s].match(/^-[^0-9]/)||t[s].match(h)||z(t[s]));s++)i++;i<r&&(b=Error(y("Not enough arguments following: %s",n)))}let c=Math.min(i,r);for(!V(o)&&c>0&&(O(n,o),c--),s=e+1;s<c+e+1;s++)O(n,t[s]);return e+c}function j(e,n,t,o){let r=[],c=o||t[e+1];const l=C(n,g.nargs);if(C(n,g.bools)&&!/^(true|false)$/.test(c))r.push(!0);else if(V(c)||V(o)&&/^-/.test(c)&&!h.test(c)&&!z(c)){if(void 0!==i[n]){const e=i[n];r=Array.isArray(e)?e:[e]}}else{V(o)||r.push(T(n,o,!0));for(let o=e+1;o<t.length&&!(!a["greedy-arrays"]&&r.length>0||l&&"number"==typeof l&&r.length>=l)&&(c=t[o],!/^-/.test(c)||h.test(c)||z(c));o++)e=o,r.push(T(n,c,s))}return"number"==typeof l&&(l&&r.length<l||isNaN(l)&&0===r.length)&&(b=Error(y("Not enough arguments following: %s",n))),O(n,r),e}function O(e,n,t=s){if(/-/.test(e)&&a["camel-case-expansion"]){const n=e.split(".").map((function(e){return I(e)})).join(".");E(e,n)}const o=T(e,n,t),r=e.split(".");if(P(v,r,o),g.aliases[e]&&g.aliases[e].forEach((function(e){const n=e.split(".");P(v,n,o)})),r.length>1&&a["dot-notation"]&&(g.aliases[r[0]]||[]).forEach((function(n){let t=n.split(".");const s=[].concat(r);s.shift(),t=t.concat(s),(g.aliases[e]||[]).includes(t.join("."))||P(v,t,o)})),C(e,g.normalize)&&!C(e,g.arrays)){[e].concat(g.aliases[e]||[]).forEach((function(e){Object.defineProperty($,e,{enumerable:!0,get:()=>n,set(e){n="string"==typeof e?N.normalize(e):e}})}))}}function E(e,n){g.aliases[e]&&g.aliases[e].length||(g.aliases[e]=[n],f[n]=!0),g.aliases[n]&&g.aliases[n].length||E(n,e)}function T(e,n,t){t&&(n=function(e){return"string"!=typeof e||"'"!==e[0]&&'"'!==e[0]||e[e.length-1]!==e[0]?e:e.substring(1,e.length-1)}(n)),(C(e,g.bools)||C(e,g.counts))&&"string"==typeof n&&(n="true"===n);let o=Array.isArray(n)?n.map((function(n){return S(e,n)})):S(e,n);return C(e,g.counts)&&(V(o)||"boolean"==typeof o)&&(o=U()),C(e,g.normalize)&&C(e,g.arrays)&&(o=Array.isArray(n)?n.map((e=>N.normalize(e))):N.normalize(n)),o}function S(e,n){if(!a["parse-positional-numbers"]&&"_"===e)return n;if(!C(e,g.strings)&&!C(e,g.bools)&&!Array.isArray(n)){(A(n)&&a["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${n}`)))||!V(n)&&C(e,g.numbers))&&(n=Number(n))}return n}function B(e,n){Object.keys(e).forEach((function(t){const o=e[t],s=n?n+"."+t:t;"object"==typeof o&&null!==o&&!Array.isArray(o)&&a["dot-notation"]?B(o,s):(!L(v,s.split("."))||C(s,g.arrays)&&a["combine-arrays"])&&O(s,o)}))}function D(e,n){if(void 0===l)return;const t="string"==typeof l?l:"",o=N.env();Object.keys(o).forEach((function(s){if(""===t||0===s.lastIndexOf(t,0)){const r=s.split("__").map((function(e,n){return 0===n&&(e=e.substring(t.length)),I(e)}));(n&&g.configs[r.join(".")]||!n)&&!L(e,r)&&O(r.join("."),o[s])}}))}function M(e,n,t,o=!1){Object.keys(t).forEach((function(s){L(e,s.split("."))||(P(e,s.split("."),t[s]),o&&(p[s]=!0),(n[s]||[]).forEach((function(n){L(e,n.split("."))||P(e,n.split("."),t[s])})))}))}function L(e,n){let t=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){t=t[e]||{}}));const o=n[n.length-1];return"object"==typeof t&&o in t}function P(e,n,t){let o=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){e=K(e),"object"==typeof o&&void 0===o[e]&&(o[e]={}),"object"!=typeof o[e]||Array.isArray(o[e])?(Array.isArray(o[e])?o[e].push({}):o[e]=[o[e],{}],o=o[e][o[e].length-1]):o=o[e]}));const s=K(n[n.length-1]),r=C(n.join("."),g.arrays),i=Array.isArray(t);let c=a["duplicate-arguments-array"];!c&&C(s,g.nargs)&&(c=!0,(!V(o[s])&&1===g.nargs[s]||Array.isArray(o[s])&&o[s].length===g.nargs[s])&&(o[s]=void 0)),t===U()?o[s]=U(o[s]):Array.isArray(o[s])?c&&r&&i?o[s]=a["flatten-duplicate-arrays"]?o[s].concat(t):(Array.isArray(o[s][0])?o[s]:[o[s]]).concat([t]):c||Boolean(r)!==Boolean(i)?o[s]=o[s].concat([t]):o[s]=t:void 0===o[s]&&r?o[s]=i?t:[t]:!c||void 0===o[s]||C(s,g.counts)||C(s,g.bools)?o[s]=t:o[s]=[o[s],t]}function C(e,n){const t=[].concat(g.aliases[e]||[],e),o=Object.keys(n),s=t.find((e=>o.includes(e)));return!!s&&n[s]}function R(e){const n=Object.keys(g);return[].concat(n.map((e=>g[e]))).some((function(n){return Array.isArray(n)?n.includes(e):n[e]}))}function z(e){return a["unknown-options-as-args"]&&function(e){if(e=e.replace(/^-{3,}/,"--"),e.match(h))return!1;if(function(e){if(e.match(h)||!e.match(/^-[^-]+/))return!1;let n,t=!0;const o=e.slice(1).split("");for(let s=0;s<o.length;s++){if(n=e.slice(s+2),!R(o[s])){t=!1;break}if(o[s+1]&&"="===o[s+1]||"-"===n||/[A-Za-z]/.test(o[s])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(n)||o[s+1]&&o[s+1].match(/\W/))break}return t}(e))return!1;return!function(e,...n){return[].concat(...n).some((function(n){const t=e.match(n);return t&&R(t[1])}))}(e,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(e)}function q(e){return C(e,g.bools)||C(e,g.counts)||!(`${e}`in i)?(n=function(e){let n=x.BOOLEAN;return C(e,g.strings)?n=x.STRING:C(e,g.numbers)?n=x.NUMBER:C(e,g.bools)?n=x.BOOLEAN:C(e,g.arrays)&&(n=x.ARRAY),n}(e),{[x.BOOLEAN]:!0,[x.STRING]:"",[x.NUMBER]:void 0,[x.ARRAY]:[]}[n]):i[e];var n}function V(e){return void 0===e}return D(v,!0),D(v,!1),function(e){const n=Object.create(null);M(n,g.aliases,i),Object.keys(g.configs).forEach((function(t){const o=e[t]||n[t];if(o)try{let e=null;const n=N.resolve(N.cwd(),o),s=g.configs[t];if("function"==typeof s){try{e=s(n)}catch(n){e=n}if(e instanceof Error)return void(b=e)}else e=N.require(n);B(e)}catch(n){"PermissionDenied"===n.name?b=n:e[t]&&(b=Error(y("Invalid JSON config file: %s",o)))}}))}(v),void 0!==c&&c.forEach((function(e){B(e)})),M(v,g.aliases,i,!0),function(e){let n;const t=new Set;Object.keys(e).forEach((function(o){if(!t.has(o)&&(n=C(o,g.coercions),"function"==typeof n))try{const s=S(o,n(e[o]));[].concat(g.aliases[o]||[],o).forEach((n=>{t.add(n),e[n]=s}))}catch(e){b=e}}))}(v),a["set-placeholder-key"]&&function(e){g.keys.forEach((n=>{~n.indexOf(".")||void 0===e[n]&&(e[n]=void 0)}))}(v),Object.keys(g.counts).forEach((function(e){L(v,e.split("."))||O(e,0)})),d&&w.length&&(v[u]=[]),w.forEach((function(e){v[u].push(e)})),a["camel-case-expansion"]&&a["strip-dashed"]&&Object.keys(v).filter((e=>"--"!==e&&e.includes("-"))).forEach((e=>{delete v[e]})),a["strip-aliased"]&&[].concat(...Object.keys(r).map((e=>r[e]))).forEach((e=>{a["camel-case-expansion"]&&e.includes("-")&&delete v[e.split(".").map((e=>I(e))).join(".")],delete v[e]})),{aliases:Object.assign({},g.aliases),argv:Object.assign($,v),configuration:a,defaulted:Object.assign({},p),error:b,newAliases:Object.assign({},f)}}}({cwd:process.cwd,env:()=>D,format:s.format,normalize:n.normalize,resolve:n.resolve,require:n=>{if("undefined"!=typeof require)return require(n);if(n.match(/\.json$/))return JSON.parse(e.readFileSync(n,"utf8"));throw Error("only .json config files are supported in ESM")}}),L=function(e,n){return M.parse(e.slice(),n).argv};L.detailed=function(e,n){return M.parse(e.slice(),n)},L.camelCase=I,L.decamelize=F,L.looksLikeNumber=A;new RegExp("(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)","g");var P={fs:{readFileSync:e.readFileSync,writeFile:e.writeFile},format:s.format,resolve:n.resolve,exists:n=>{try{return e.statSync(n).isFile()}catch(e){return!1}}};let C;class R{constructor(e){e=e||{},this.directory=e.directory||"./locales",this.updateFiles="boolean"!=typeof e.updateFiles||e.updateFiles,this.locale=e.locale||"en",this.fallbackToLanguage="boolean"!=typeof e.fallbackToLanguage||e.fallbackToLanguage,this.cache=Object.create(null),this.writeQueue=[]}__(...e){if("string"!=typeof arguments[0])return this._taggedLiteral(arguments[0],...arguments);const n=e.shift();let t=function(){};return"function"==typeof e[e.length-1]&&(t=e.pop()),t=t||function(){},this.cache[this.locale]||this._readLocaleFile(),!this.cache[this.locale][n]&&this.updateFiles?(this.cache[this.locale][n]=n,this._enqueueWrite({directory:this.directory,locale:this.locale,cb:t})):t(),C.format.apply(C.format,[this.cache[this.locale][n]||n].concat(e))}__n(){const e=Array.prototype.slice.call(arguments),n=e.shift(),t=e.shift(),o=e.shift();let s=function(){};"function"==typeof e[e.length-1]&&(s=e.pop()),this.cache[this.locale]||this._readLocaleFile();let r=1===o?n:t;if(this.cache[this.locale][n]){r=this.cache[this.locale][n][1===o?"one":"other"]}!this.cache[this.locale][n]&&this.updateFiles?(this.cache[this.locale][n]={one:n,other:t},this._enqueueWrite({directory:this.directory,locale:this.locale,cb:s})):s();const a=[r];return~r.indexOf("%d")&&a.push(o),C.format.apply(C.format,a.concat(e))}setLocale(e){this.locale=e}getLocale(){return this.locale}updateLocale(e){this.cache[this.locale]||this._readLocaleFile();for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(this.cache[this.locale][n]=e[n])}_taggedLiteral(e,...n){let t="";return e.forEach((function(e,o){const s=n[o+1];t+=e,void 0!==s&&(t+="%s")})),this.__.apply(this,[t].concat([].slice.call(n,1)))}_enqueueWrite(e){this.writeQueue.push(e),1===this.writeQueue.length&&this._processWriteQueue()}_processWriteQueue(){const e=this,n=this.writeQueue[0],t=n.directory,o=n.locale,s=n.cb,r=this._resolveLocaleFile(t,o),a=JSON.stringify(this.cache[o],null,2);C.fs.writeFile(r,a,"utf-8",(function(n){e.writeQueue.shift(),e.writeQueue.length>0&&e._processWriteQueue(),s(n)}))}_readLocaleFile(){let e={};const n=this._resolveLocaleFile(this.directory,this.locale);try{C.fs.readFileSync&&(e=JSON.parse(C.fs.readFileSync(n,"utf-8")))}catch(t){if(t instanceof SyntaxError&&(t.message="syntax error in "+n),"ENOENT"!==t.code)throw t;e={}}this.cache[this.locale]=e}_resolveLocaleFile(e,n){let t=C.resolve(e,"./",n+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(t)&&~n.lastIndexOf("_")){const o=C.resolve(e,"./",n.split("_")[0]+".json");this._fileExistsSync(o)&&(t=o)}return t}_fileExistsSync(e){return C.exists(e)}}let z;try{z=a.fileURLToPath("undefined"==typeof document?require("url").pathToFileURL(__filename).href:b&&"SCRIPT"===b.tagName.toUpperCase()&&b.src||new URL("index.js",document.baseURI).href)}catch(e){z=process.cwd()}const q=z.split("node_modules")[0];r.notStrictEqual,r.strictEqual,s.inspect,q||process.cwd(),n.basename,n.dirname,n.extname,n.relative,n.resolve,process.cwd,process.exit,process.nextTick,void 0!==process.stdout.columns&&process.stdout.columns,e.readFileSync,function(e,n){C=n;const t=new R(e);t.__.bind(t),t.__n.bind(t),t.setLocale.bind(t),t.getLocale.bind(t),t.updateLocale.bind(t),t.locale}({directory:n.resolve(z,"../../../locales"),updateFiles:!1},P);const V={hg:{appName:"hotglue",clientApiBaseUri:process.env.HOTGLUE_CLIENT_API_BASE_URI||"https://client-api.hotglue.xyz",defaultConfigFileName:"config.yaml"}},G={},W=()=>n.resolve(t.homedir(),`.${V.hg.appName}`,V.hg.defaultConfigFileName),J=async()=>{const{appName:e}=V.hg;try{return await c.cosmiconfig(e).load(W())||{}}catch(e){return{}}},Q=async()=>{const{appName:e}=V.hg,n=c.cosmiconfig(e,{searchPlaces:[`${e}.yaml`,`.${e}.yaml`,`.${e}rc.yaml`,`.${e}rc.yml`,`.${e}rc`,`.${e}rc.json`,`.${e}rc.js`]});try{return await n.search()||{}}catch(e){throw console.log(e),new Error(`Malformed configuration file: ${e.message}`)}},Y={primary:e=>l.whiteBright(e),secondary:e=>l.white(e),info:e=>l.green(e),warn:e=>l.yellow(e),error:e=>l.redBright(e),success:e=>l.greenBright(e)};let H=Y,Z="primary";function X(e){return H={...Y,...e},re}function ee(e){process.stdout.write(e)}const ne=(e,n=Z)=>{if(!e)return"";if("string"==typeof e)return H[n]?H[n](e):H[Z](e);const t=s.inspect(e,{colors:!0});return H[n]?H[n](t):t};function te(...e){return console.log(...e),re}function oe(e,n){return ee(ne(e,n)),ee("\n"),re}function se(e,n){return ee(ne(e,n)),re}const re={cl:te,pr:oe,pp:se,setTheme:X,setDefault:function(e="primary"){return H[e]&&(Z=e),re}},ae=e=>{console.log(JSON.stringify(e))},ie=u("hotglue-cli");function ce(e){return ie.extend(e)}const le=ce("commands:config:set"),de="set <setting> <value>";var ue=Object.freeze({__proto__:null,builder:async e=>(le("builder",de,e),e.option("setting",{describe:"The configuration parameter you wish to set",type:"string"}).option("value",{describe:"The configuration parameter's value",type:"string"}),e),command:de,desc:"Set configuration key-value pairs",handler:async e=>{le("handler",de,e);const{json:t,setting:o,value:s}=e;if(["apikey"].includes(o))try{const e=await J();e&&e.config?!t&&se("Updating profile config file..."):!t&&se("Creating profile config file...");const r=e&&e.config?{...e.config,[o]:s}:{[o]:s},a=f.stringify(r),c=e&&e.filepath?e.filepath:W();await(async(e,t)=>{await i.mkdir(n.dirname(e),{recursive:!0}),await i.writeFile(e,t)})(c,a),t?ae({status:"success"}):se("Done").pr()}catch(e){t?ae({status:"error",error:e}):console.log(e)}else t?ae({status:"error",error:"Invalid settings parameter"}):console.error("Invalid settings parameter")}});const fe=[ue],pe=ce("commands:config"),ye="config [action]";var ge=Object.freeze({__proto__:null,builder:async function(e){return pe("builder",ye),e.command(fe)},command:ye,desc:"Configure your hotglue CLI",handler:async function(e){pe("handler",ye,e);const{action:t}=e;if(!t)try{const e=await J();e.config&&0!==Object.keys(e.config).length||oe("No profile configuration found. Run config set to configure the hotglue CLI.");const t=new p({head:["Setting","Value","Config File","Type"]});e.config&&Object.entries(e.config).forEach((([n,o])=>t.push([n,o,e.filepath,"Profile"])));const o=await Q();o.config&&Object.entries(o.config).forEach((([e,s])=>t.push([e,s,n.relative(process.cwd(),o.filepath),"Project"]))),t.length>0&&console.log(t.toString())}catch(e){throw console.log(e),e}}}),he={env:{config:{describe:"Environment Id",type:"string",alias:["e"]},demandText:'The "env" parameter (Environment Id) is required. Either pass here using `-e [env_id]` or add an env property in your rc file.'},apikey:{config:{describe:"API key",type:"string",alias:["k"]},demandText:"API key is required. Either pass here using -k [key] or configure your profile using config set."},json:{config:{describe:"Makes the output format to be JSON",type:"boolean",default:!1},demandText:""},tenant:{config:{describe:"Tenant (user) ID",type:"string",alias:["u"]},demandText:"TenantId is required. You can pass it using -u [tenantId]."},flow:{config:{describe:"Flow ID",type:"string",alias:["f"]},demandText:"FlowId is required. You can pass it using -f [flow_id]."},tap:{config:{describe:"Tap name",type:"string",alias:["t"]},demandText:"Tap name is required. You can pass it using -t <tap_name>."},connector:{config:{describe:"Connector ID",type:"string",alias:["c"]},demandText:"Connector ID is required. You can pass it using -c <connector>."},all:{config:{describe:"Run command for all taps/connectors",type:"boolean",default:!1,alias:["a"]},demandText:'This "all" flag is required. You can pass it using -a or --all.'},jobroot:{config:{describe:"Job Root (S3 prefix)",type:"string",alias:["j"]},demandText:"JobRoot key is required. You can pass it using -j [job_root]."},count:{config:{describe:"Max returned records",type:"number"}},downloadTo:{config:{describe:"Download folder",default:".",type:"string",alias:["d"]},demandText:"A destination folder is required. You can pass it using -d [folder] and can be either relative from cwd or absolute."},sourceFolder:{config:{describe:"Source folder",type:"string",default:".",alias:["s"]},demandText:""},configFilePath:{config:{describe:"Config file path",type:"string",default:"./config.json",alias:["p"]},demandText:'Local path of the config (with .json extension). Example: "/home/hotglue/config.json"'},overwrite:{config:{describe:"Overwrite existing",type:"boolean",default:!1,alias:["o"]},demandText:""},cleanup:{config:{describe:"Clean up target prior to action",type:"boolean",default:!1,alias:["c"]},demandText:""}};const me=ce("base"),be=async e=>{me("builder");const n=await(async()=>{const e=await J(),n=await Q();return{...G,...e.config,...n.config}})();return e.option("apikey",he.apikey.config).option("env",he.env.config).option("json",he.json.config).config(n).demandOption(["env"],he.env.demandText).demandOption(["apikey"],he.apikey.demandText)},we=ce("utils.js"),ve=async(e,t,o=[])=>{const{includeSymLinks:s,recursive:r,filter:a}=t,{matcher:c}=a,l=n.resolve(e),d=await i.readdir(l,{withFileTypes:!0});for(const e of d){const a=n.resolve(l,e.name);e.isSymbolicLink()&&!s||(!c||c(a)?e.isFile()?o.push(n.resolve(l,e.name)):e.isDirectory()&&r&&await ve(n.resolve(l,e.name),t,o):we("skip",a))}return o},$e=async(e,n)=>{const t={includeSymLinks:!1,recursive:!1,filter:{},...n},{pattern:o}=t.filter;return o&&(t.filter.matcher=g.matcher(o,{dot:!0})),ve(e,t)},_e=(e,n)=>{we("filter-in",e);const{pattern:t}={...n};let o=e;return t&&(o=g(o,t)),we("filter-out",o),o};const ke=e=>{const n=[];return new Promise(((t,o)=>{e.on("error",o),e.on("data",(e=>n.push(Buffer.from(e)))),e.on("end",(()=>t(Buffer.concat(n).toString("utf8"))))}))},je=(e,n=10)=>{const t=[];for(let o=0;o<e.length;o+=n){const s=e.slice(o,o+n);t.push(s)}return t},Oe=async({debug:e,baseUri:n,env:t,apiKey:o})=>{const s=new URL(`${n}/${t}/resetAvailableEntities`),{data:r}=await h.delete(s,{headers:{"x-api-key":o,"Content-type":"application/json"}});e({data:r})},xe=async({debug:e,baseUri:n,task:t,env:o,apikey:s,...r})=>{const a=new URL(`${n}/credentials/${t}/${o}`);r&&Object.entries(r).forEach((([e,n])=>{a.searchParams.set(e,n)}));const i=a.toString();e&&e("uri:",i);const{data:c}=await h.get(i,{headers:{"x-api-key":s}}),{accessKeyId:l,secretAccessKey:d,sessionToken:u}=c;return{accessKeyId:l,secretAccessKey:d,sessionToken:u}},Ee=async({debug:e,baseUri:n,env:t,apikey:o})=>{const s=`${n}/tenants/${t}`;e("requesting:",s);const{data:r}=await h.get(s,{headers:{"x-api-key":o}});return e("response-data",r),r},Te=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/${o}/supportedSources`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Se=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,config:a})=>{const i=new URL(`${n}/${t}/${o}/${s}/linkedSources`);a&&i.searchParams.set("config","true");const c={"x-api-key":r},l=i.toString();e&&e("uri:",l);const{data:d}=await h.get(l,{headers:c});return d},Ie=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,config:a})=>{const i=new URL(`${n}/v2/${t}/${o}/${s}/linkedConnectors`);a&&i.searchParams.set("config","true");const c={"x-api-key":r},l=i.toString();e&&e("uri:",l);const{data:d}=await h.get(l,{headers:c});return d},Fe=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/flows/${o}/supported`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Ae=ce("commands:env:deploy"),Ne="deploy";var Ue=Object.freeze({__proto__:null,builder:async e=>(Ae("builder",Ne),e.option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:Ne,desc:"Deploy Environment settings",handler:async e=>{Ae("handler",Ne,e);const{hg:t,json:o,apikey:s,env:r,sourceFolder:a}=e,{clientApiBaseUri:c}=t,l=n.resolve(process.cwd(),a);let u,f=y();try{u=ne(`Scanning ${ne(l,"info")} for deployable files`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const e=await $e(l,{filter:{pattern:"((**/requirements.txt)|(**/availableSources.json)|(**/availableTargets.json)|(**/availableConnectors.json)|(**/customTaps.json))"}});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne("There are no files to deploy at the specified location!")}`,"secondary"))));!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));for(const n of e)if(n.endsWith(".json"))try{const e=await i.readFile(n,{encoding:"utf-8"});JSON.parse(e)}catch(e){throw new Error(`File ${n} is not a valid JSON: ${String(e)}`)}u=ne("Verifying user and authorizing"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:t,secretAccessKey:a,sessionToken:y}=await xe({debug:Ae,baseUri:c,task:"env-deploy",env:r,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const g=new d.S3({accessKeyId:t,secretAccessKey:a,sessionToken:y});u=ne("Deploying environment files"),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const h="config/",m=new p({head:["File","Status"]});for await(const t of e){const e=n.basename(t);u=ne(`Pushing file: ${ne(e,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a={Bucket:r,Key:`${h}${e}`,Body:await i.readFile(t)},l=await g.putObject(a).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),Ae("s3-put-res",l),m.push([e,"Deployed"]),await Oe({debug:Ae,baseUri:c,env:r,apiKey:s})}o?ae({status:"success",deployedFiles:e}):te(m.toString())}catch(e){!o&&f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ae(e),e&&e.response&&e.response.data&&Ae("response",e.response.data)}}});const Ke=ce("commands:env:download"),Be="download";var De=Object.freeze({__proto__:null,builder:async e=>(Ke("builder",Be),e.option("downloadTo",he.downloadTo.config)),command:Be,desc:"Download Environment settings",handler:async e=>{Ke("handler",Be,e);const{hg:t,json:o,apikey:s,env:r,downloadTo:a}=e,{clientApiBaseUri:c}=t,l=n.resolve(process.cwd(),a);let u,f=y();try{u=ne("Verifying user and authorizing"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:e,secretAccessKey:t,sessionToken:a}=await xe({debug:Ke,baseUri:c,task:"env-download",env:r,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const y=new d.S3({accessKeyId:e,secretAccessKey:t,sessionToken:a});u=ne(`Scanning environment ${ne(r,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const g={Bucket:r,Prefix:"config/"},{Contents:h}=await y.listObjectsV2(g).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),Ke("s3-files",h);const m=h?_e(h.map((e=>e.Key)),{pattern:"((*/requirements.txt)|(*/availableSources.json)|(*/availableTargets.json)|(*/availableConnectors.json)|(*/customTaps.json))"}):[];if(!m||0===m.length)return void(o?ae({status:"success",downloadedFiles:[]}):f.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));u=ne(`Downloading to ${ne(l,"info")}`),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const b=new p({head:["File","Status"]});for await(const e of m){const t=n.basename(e),s=n.resolve(l,t);Ke("local-file",s),await i.mkdir(n.dirname(s),{recursive:!0}),u=ne(`Downloading file: ${ne(t,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a=y.getObject({Bucket:r,Key:e}).createReadStream();await i.writeFile(s,await ke(a)),!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),b.push([t,"Downloaded"])}o?ae({status:"success",downloadedFiles:m}):te(b.toString())}catch(e){o?ae({status:"error",error:e}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ke(e),e&&e.response&&e.response.data&&Ke("response",e.response.data))}}});const Me=[Ue,De],Le=ce("commands:env"),Pe="env <action>";var Ce=Object.freeze({__proto__:null,builder:async function(e){Le("builder",Pe);return(await be(e)).command(Me)},command:Pe,desc:"Manage environment settings",handler:async function(e){Le("handler",Pe,e)}});const Re=async(e,n,t,o)=>{try{const s=e.getObject({Bucket:n,Key:`${t}/flows/${o}/flow.json`}).createReadStream(),r=await ke(s);return 2===JSON.parse(r).version}catch(e){return!1}},ze=async(e,n,t,o,s=void 0)=>s??await Re(e,n,t,o)?"connectors":"taps",qe=ce("commands:etl:delete"),Ve="delete";var Ge=Object.freeze({__proto__:null,builder:async e=>(qe("builder",Ve),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).demandOption("tap",he.tap.demandText).option("tenant",{...he.tenant.config}).demandOption("tenant",he.tenant.demandText)),command:Ve,desc:"Delete ETL scripts",handler:async e=>{qe("handler",Ve,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,tenant:i}=e,{clientApiBaseUri:c}=n;let l,u=y();try{l=ne(`Deleting ETL scripts for Tenant ${ne(i,"info")} Flow ${ne(r,"info")} and Tap ${ne(a,"info")} to ${ne(s,"info")}`),!t&&u.info(ne(`Info: ${l}.`,"secondary")),l=ne("Verifying user and authorizing"),!t&&u.start(ne(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:f}=await xe({debug:qe,baseUri:c,task:"etl-deploy",env:s,tenant:i,flow:r,tap:a,apikey:o}),y=new d.S3({accessKeyId:e,secretAccessKey:n,sessionToken:f});!t&&u.succeed(ne(`Finished: ${l}.`,"secondary")),l=ne("Deleting ETL scripts"),!t&&u.start(ne(`In progress: ${l}...`,"secondary"));const g=`${i}/flows/${r}/${await ze(y,s,i,r)}/${a}/etl/`,h=await y.listObjectsV2({Bucket:s,Prefix:g}).promise();if(qe("s3-list-objects-res",h),h.Contents?.length>0){const e=await y.deleteObjects({Bucket:s,Delete:{Objects:h.Contents.map((e=>({Key:e.Key})))}}).promise();qe("s3-list-objects-res",e)}const m=await y.deleteObject({Bucket:s,Key:g}).promise();if(qe("s3-delete-object-res",m),!t&&u.succeed(ne(`Finished: ${l}.`,"secondary")),h.Contents?.length>0){const e=new p({head:["File","Status"]});h.Contents.filter((({Key:e})=>e!==g)).forEach((({Key:n})=>{const t=n.split("/"),o=t[t.length-1];e.push([o,ne("Deleted","info")])})),t?ae({status:"success",deletedObjects:(h.Contents??[]).map((({Key:e})=>e))}):te(e.toString())}else l=ne("There was no file or folder to be deleted"),t?ae({status:"success",deletedObjects:[]}):u.info(ne(`Info: ${l}.`,"secondary"))}catch(e){t?ae({status:"error",error:e}):(u.fail(ne(`Error: ${l}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),qe(e),e&&e.response&&e.response.data&&qe("response",e.response.data))}}});const We=ce("commands:etl:deploy"),Je="deploy";var Qe=Object.freeze({__proto__:null,builder:async e=>(We("builder",Je),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).option("all",he.all.config).option("tenant",{...he.tenant.config,default:"default"}).option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:Je,desc:"Deploy ETL scripts",handler:async e=>{We("handler",Je,e);const{hg:t,json:o,apikey:s,env:r,flow:a,tap:c,all:l,tenant:u,sourceFolder:f}=e,{clientApiBaseUri:g}=t;if(!l&&!c)throw new Error(`${he.tap.demandText} Or you can pass the --all flag to run this command for all taps/connectors.`);let m,b=y();const w=n.resolve(process.cwd(),f);try{m=ne(`Deploying script for Tenant ${ne(u,"info")} Flow ${ne(a,"info")}${c?` and Tap ${ne(c,"info")}`:""} to ${ne(r,"info")}`),!o&&b.info(ne(`Info: ${m}.`,"secondary"));const e=await $e(w,{recursive:!0,filter:{pattern:"!((**/sync-output)|(**/etl-output)|(**/snapshots))"}});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):b.fail(ne(`Error: ${ne("There are no files to deploy at the specified location!")}.`,"secondary")));m=ne("Verifying user and authorizing"),!o&&b.start(ne(`In progress: ${m}...`,"secondary"));const t={debug:We,baseUri:g,task:"etl-deploy",env:r,tenant:u,flow:a,apikey:s};c&&(t.tap=c);const{accessKeyId:l,secretAccessKey:y,sessionToken:v}=await xe(t);!o&&b.succeed(ne(`Finished: ${m}.`,"secondary"));const $=new d.S3({accessKeyId:l,secretAccessKey:y,sessionToken:v}),_=await Re($,r,u,a);m=ne("Validating flow and tap location"),!o&&b.start(ne(`In progress: ${m}...`,"secondary"));const k=await(async({debug:e,baseUri:n,env:t,apikey:o})=>{const s={"x-api-key":o},r=new URL(`${n}/${t}/flows/supported`).toString();e&&e("uri:",r);const{data:a}=await h.get(r,{headers:s});return a})({debug:We,baseUri:g,apikey:s,env:r}),j=k.find((({id:e})=>e===a));let O=[];try{if("default"===u||j?.type){const e=_?await(async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/v2/${t}/${o}/supportedConnectors`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i})({debug:We,baseUri:g,env:r,flow:a,apikey:s}):await Te({debug:We,baseUri:g,env:r,flow:a,apikey:s});if(O=(e??[]).filter((e=>!c||e[_?"id":"tap"]===c)),c&&0===O.length)throw new Error("Tap is not supported")}else{if(O=((_?await Ie({debug:We,baseUri:g,env:r,flow:a,tenant:u,apikey:s}):await Se({debug:We,baseUri:g,env:r,flow:a,tenant:u,apikey:s}))??[]).filter((e=>!c||e[_?"id":"tap"]===c)),c&&0===O.length)throw new Error("Tap is not linked")}}catch(e){throw We("err",e),new Error("Target location doesn't exist. Check your tenant, flow and tap arguments.")}!o&&b.succeed(ne(`Finished: ${m}.`,"secondary"));const x=new p({head:["File","Status"]});for(const t of O){const s=t[_?"id":"tap"];m=ne(`Preparing ${s} deployment target`),!o&&b.start(ne(`In progress: ${m}...`,"secondary"));const c=`${u}/flows/${a}/${await ze(null,null,null,null,_)}/${s}/etl/`,{Contents:l}=await $.listObjectsV2({Bucket:r,Prefix:`${c}`}).promise();!o&&b.succeed(ne(`Finished: ${m}.`,"secondary")),We("contents",l);const d=l.map((e=>({Key:e.Key})));if(d.length>0){m=ne(`Removing old ${s} ETL files`),!o&&b.start(ne(`In progress: ${m}...`,"secondary"));const e={Bucket:r,Delete:{Objects:d,Quiet:!0}};await $.deleteObjects(e).promise(),d.forEach((({Key:e})=>x.push([`${s}/${e.substring(c.length)}`,ne("Deleted","warn")]))),!o&&b.succeed(ne(`Finished: ${m}.`,"secondary"))}for await(const t of e){const e="win32"===process.platform?n.relative(f,t).replace(/\\/g,"/"):n.relative(f,t),a=`${c}${e}`;m=ne(`Deploying file: ${ne(`${s}/${e}`,"info")}`),!o&&b.start(ne(`In progress: ${m}...`,"secondary"));const l={Bucket:r,Key:a,Body:await i.readFile(t)},d=await $.putObject(l).promise();!o&&b.succeed(ne(`Finished: ${m}.`,"secondary")),We("s3-put-res",d),x.push([`${s}/${e}`,ne("Deployed","info")])}}o?ae({status:"success",deployedFiles:e}):te(x.toString())}catch(e){o?ae({status:"error",error:e}):(b.fail(ne(`Error: ${m}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),We(e),e&&e.response&&e.response.data&&We("response",e.response.data))}}});const Ye=ce("commands:etl:download"),He="download";var Ze=Object.freeze({__proto__:null,builder:async e=>(Ye("builder",He),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).demandOption("tap",he.tap.demandText).option("downloadTo",he.downloadTo.config).demandOption("downloadTo",he.downloadTo.demandText).option("tenant",{...he.tenant.config,default:"default"}).option("overwrite",he.overwrite.config).demandOption("overwrite",he.overwrite.demandText)),command:He,desc:"Download ETL scripts",handler:async t=>{Ye("handler",He,t);const{hg:o,json:s,apikey:r,env:a,flow:c,tap:l,tenant:u,downloadTo:f,overwrite:g}=t,{clientApiBaseUri:h}=o;let m,b=y();const w=n.resolve(process.cwd(),f);try{m=ne("Verifying user and authorizing"),!s&&b.start(ne(`In progress: ${m}...`,"secondary"));const{accessKeyId:t,secretAccessKey:o,sessionToken:f}=await xe({debug:Ye,baseUri:h,task:"etl-download",env:a,tenant:u,flow:c,tap:l,apikey:r}),y=new d.S3({accessKeyId:t,secretAccessKey:o,sessionToken:f});!s&&b.succeed(ne(`Finished: ${m}.`,"secondary")),m=ne("Scanning for downloadable files"),!s&&b.start(ne(`In progress: ${m}...`,"secondary"));const v=`${u}/flows/${c}/${await ze(y,a,u,c)}/${l}/etl/`,$={Bucket:a,Prefix:v},{Contents:_}=await y.listObjectsV2($).promise();!s&&b.succeed(ne(`Finished: ${m}.`,"secondary")),Ye("s3-list-res",_);const k=_?_e(_.map((e=>e.Key)),{pattern:"!(.ipynb_checkpoints/*)"}):[];if(!k||0===k.length)return void(s?ae({status:"success",downloadedFiles:[]}):b.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));m=ne(`Downloading script files to ${ne(w,"info")}`),!s&&b.info(ne(`Info: ${m}.`,"secondary"));const j=new p({head:["File","Status"]});for await(const t of k){const o=t.substring(v.length),r=n.resolve(w,o);if(Ye("file",r),t.endsWith("/")){!e.existsSync(r)&&await i.mkdir(r,{recursive:!0});continue}if(!g)try{await i.stat(r),Ye("exists, skipping"),j.push([o,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&te(e)}m=ne(`Downloading file: ${ne(o,"info")}`),!s&&b.start(ne(`In progress: ${m}...`,"secondary")),await i.mkdir(n.dirname(r),{recursive:!0});const c=y.getObject({Bucket:a,Key:t}).createReadStream();await i.writeFile(r,await ke(c)),!s&&b.succeed(ne(`Finished: ${m}.`,"secondary")),j.push([o,"Downloaded"])}s?ae({status:"success",downloadedFiles:k}):te(j.toString())}catch(e){s?ae({status:"error",error:e}):(b.fail(ne(`Error: ${m}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ye(e),e&&e.response&&e.response.data&&Ye("response",e.response.data))}}});const Xe=[Ge,Qe,Ze],en=ce("commands:etl"),nn="etl <action>";var tn=Object.freeze({__proto__:null,builder:async function(e){en("builder",nn);return(await be(e)).command(Xe)},command:nn,desc:"Manage ETL scripts",handler:async function(e){en("handler",nn,e)}});const on=ce("commands:flows:list"),sn="list";var rn=Object.freeze({__proto__:null,builder:async e=>(on("builder",sn),e.option("tenant",{...he.tenant.config})),command:sn,desc:"List flows",handler:async e=>{on("handler",sn,e);const{hg:n,json:t,apikey:o,env:r,tenant:a}=e,{clientApiBaseUri:i}=n;let c,l=y();try{c=ne(`Retrieving ${a?`${ne(a,"info")} tenant's`:"the"} flows for environment: ${ne(r,"info")}`);const e=`${i}/${r}/flows/${a?`linked?user_id=${a}`:"supported"}`;on("requesting:",e),!t&&l.start(ne(`In progress: ${c}...`,"secondary"));const{data:n}=await h.get(e,{headers:{"x-api-key":o}});if(!t&&l.succeed(ne(`Finished: ${c}.`,"secondary")),on("response-data",n),!n||0===n.length)return void(t?ae([]):l.warn(ne(`Warning: ${ne("No flows for specified environment and tenant")}.`,"secondary")));if(t)ae(n);else{const e=new p({head:["ID","Name","isPush","Taps","Targets"]});n.forEach((n=>e.push([n.id,n.name||"",n.type||!1,n.taps?s.inspect(n.taps):"",n.targets?s.inspect(n.targets):"none"]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(l.fail(ne(`Error: ${c}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),on(e),e&&e.response&&e.response.data&&on("response",e.response.data))}}});const an=[rn],cn=ce("commands:flows"),ln="flows <action>";var dn,un=Object.freeze({__proto__:null,builder:async function(e){cn("builder",ln);return(await be(e)).command(an)},command:ln,desc:"Manage flows",handler:async function(e){cn("handler",ln,e)}}),fn={exports:{}},pn={exports:{}},yn={exports:{}},gn={exports:{}};var hn,mn={exports:{}},bn={exports:{}};var wn,vn,$n={exports:{}};function _n(){return vn||(vn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){if((0,o.default)(e))return function(e){var n=-1,t=e.length;return function(){return++n<t?{value:e[n],key:n}:null}}(e);var n=(0,r.default)(e);return n?function(e){var n=-1;return function(){var t=e.next();return t.done?null:(n++,{value:t.value,key:n})}}(n):(t=e,s=t?Object.keys(t):[],a=-1,i=s.length,function e(){var n=s[++a];return"__proto__"===n?e():a<i?{value:t[n],key:n}:null});var t,s,a,i};var t=function(){return hn||(hn=1,e=bn,n=bn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e&&"number"==typeof e.length&&e.length>=0&&e.length%1==0},e.exports=n.default),bn.exports;var e,n}(),o=a(t),s=function(){return wn||(wn=1,e=$n,n=$n.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e[Symbol.iterator]&&e[Symbol.iterator]()},e.exports=n.default),$n.exports;var e,n}(),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default}(mn,mn.exports)),mn.exports}var kn,jn={exports:{}};var On,xn={},En={exports:{}},Tn={exports:{}};var Sn,In,Fn,An={};function Nn(){return In||(In=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){if((0,a.isAsync)(e))return function(...n){const t=n.pop();return c(e.apply(this,n),t)};return(0,o.default)((function(n,t){var o;try{o=e.apply(this,n)}catch(e){return t(e)}if(o&&"function"==typeof o.then)return c(o,t);t(null,o)}))};var t=function(){return On||(On=1,e=Tn,n=Tn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return function(...n){var t=n.pop();return e.call(this,n,t)}},e.exports=n.default),Tn.exports;var e,n}(),o=i(t),s=function(){if(Sn)return An;Sn=1,Object.defineProperty(An,"__esModule",{value:!0}),An.fallback=s,An.wrap=r;var e,n=An.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,t=An.hasSetImmediate="function"==typeof setImmediate&&setImmediate,o=An.hasNextTick="object"==typeof process&&"function"==typeof process.nextTick;function s(e){setTimeout(e,0)}function r(e){return(n,...t)=>e((()=>n(...t)))}return e=n?queueMicrotask:t?setImmediate:o?process.nextTick:s,An.default=r(e),An}(),r=i(s),a=Un();function i(e){return e&&e.__esModule?e:{default:e}}function c(e,n){return e.then((e=>{l(n,null,e)}),(e=>{l(n,e&&(e instanceof Error||e.message)?e:new Error(e))}))}function l(e,n,t){try{e(n,t)}catch(e){(0,r.default)((e=>{throw e}),e)}}e.exports=n.default}(En,En.exports)),En.exports}function Un(){if(Fn)return xn;Fn=1,Object.defineProperty(xn,"__esModule",{value:!0}),xn.isAsyncIterable=xn.isAsyncGenerator=xn.isAsync=void 0;var e,n=Nn(),t=(e=n)&&e.__esModule?e:{default:e};function o(e){return"AsyncFunction"===e[Symbol.toStringTag]}return xn.default=function(e){if("function"!=typeof e)throw new Error("expected a function");return o(e)?(0,t.default)(e):e},xn.isAsync=o,xn.isAsyncGenerator=function(e){return"AsyncGenerator"===e[Symbol.toStringTag]},xn.isAsyncIterable=function(e){return"function"==typeof e[Symbol.asyncIterator]},xn}var Kn,Bn,Dn,Mn={exports:{}},Ln={exports:{}};function Pn(){return Kn||(Kn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});n.default={},e.exports=n.default}(Ln,Ln.exports)),Ln.exports}function Cn(){return Dn||(Dn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=function(){return dn||(dn=1,e=gn,n=gn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){function n(...n){if(null!==e){var t=e;e=null,t.apply(this,n)}}return Object.assign(n,e),n},e.exports=n.default),gn.exports;var e,n}(),o=u(t),s=u(_n()),r=function(){return kn||(kn=1,e=jn,n=jn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return function(...n){if(null===e)throw new Error("Callback was already called.");var t=e;e=null,t.apply(this,n)}},e.exports=n.default),jn.exports;var e,n}(),a=u(r),i=Un(),c=(Bn||(Bn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,s){let r=!1,a=!1,i=!1,c=0,l=0;function d(){c>=n||i||r||(i=!0,e.next().then((({value:e,done:n})=>{if(!a&&!r){if(i=!1,n)return r=!0,void(c<=0&&s(null));c++,t(e,l,u),l++,d()}})).catch(f))}function u(e,n){if(c-=1,!a)return e?f(e):!1===e?(r=!0,void(a=!0)):n===o.default||r&&c<=0?(r=!0,s(null)):void d()}function f(e){a||(i=!1,r=!0,s(e))}d()};var t,o=(t=Pn())&&t.__esModule?t:{default:t};e.exports=n.default}(Mn,Mn.exports)),Mn.exports),l=u(c),d=u(Pn());function u(e){return e&&e.__esModule?e:{default:e}}n.default=e=>(n,t,r)=>{if(r=(0,o.default)(r),e<=0)throw new RangeError("concurrency limit cannot be less than 1");if(!n)return r(null);if((0,i.isAsyncGenerator)(n))return(0,l.default)(n,e,t,r);if((0,i.isAsyncIterable)(n))return(0,l.default)(n[Symbol.asyncIterator](),e,t,r);var c=(0,s.default)(n),u=!1,f=!1,p=0,y=!1;function g(e,n){if(!f)if(p-=1,e)u=!0,r(e);else if(!1===e)u=!0,f=!0;else{if(n===d.default||u&&p<=0)return u=!0,r(null);y||h()}}function h(){for(y=!0;p<e&&!u;){var n=c();if(null===n)return u=!0,void(p<=0&&r(null));p+=1,t(n.value,n.key,(0,a.default)(g))}y=!1}h()},e.exports=n.default}(yn,yn.exports)),yn.exports}var Rn,zn={exports:{}};var qn,Vn,Gn,Wn={exports:{}};function Jn(){return qn||(qn=1,e=Wn,n=Wn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(n||(n=e.length),!n)throw new Error("arity is undefined");return function(...t){return"function"==typeof t[n-1]?e.apply(this,t):new Promise(((o,s)=>{t[n-1]=(e,...n)=>{if(e)return s(e);o(n.length>1?n:n[0])},e.apply(this,t)}))}},e.exports=n.default),Wn.exports;var e,n}function Qn(){return Vn||(Vn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=i(Cn()),o=function(){return Rn||(Rn=1,e=zn,n=zn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return(n,t,o)=>e(n,o)},e.exports=n.default),zn.exports;var e,n}(),s=i(o),r=i(Un()),a=i(Jn());function i(e){return e&&e.__esModule?e:{default:e}}n.default=(0,a.default)((function(e,n,o,a){return(0,t.default)(n)(e,(0,s.default)((0,r.default)(o)),a)}),4),e.exports=n.default}(pn,pn.exports)),pn.exports}var Yn=w((Gn||(Gn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=s(Qn()),o=s(Jn());function s(e){return e&&e.__esModule?e:{default:e}}n.default=(0,o.default)((function(e,n,o){return(0,t.default)(e,1,n,o)}),3),e.exports=n.default}(fn,fn.exports)),fn.exports));const Hn=ce("commands:jobs:download"),Zn="download <jobroot>";var Xn=Object.freeze({__proto__:null,builder:async e=>(Hn("builder",Zn),e.option("downloadTo",he.downloadTo.config)),command:Zn,desc:"Download Job files",handler:async t=>{Hn("handler",Zn,t);const{hg:o,json:s,apikey:r,env:a,jobroot:i,downloadTo:c}=t,{clientApiBaseUri:l}=o;let u,f=y();try{u=ne("Verifying user and authorizing"),!s&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:t,secretAccessKey:o,sessionToken:y}=await xe({debug:Hn,baseUri:l,task:"job-download",env:a,apikey:r,jobroot:i}),g=new d.S3({accessKeyId:t,secretAccessKey:o,sessionToken:y});!s&&f.succeed(ne(`Finished: ${u}.`,"secondary")),u=ne("Scanning for downloadable files"),!s&&f.start(ne(`In progress: ${u}...`,"secondary"));const h={Bucket:a,Prefix:i},{Contents:b}=await g.listObjectsV2(h).promise();if(Hn("res",b),!b||0===b.length)return void(s?ae({status:"error",error:"Nothing to download!"}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne("Nothing to download!")}`,"secondary"))));if(!s&&f.succeed(ne(`Finished: ${u}.`,"secondary")),!s){const e=new p({head:["File","Size","LastModified"]});b.forEach((n=>{const t=n.Key.substring(i.length+1);e.push([t,n.Size,n.LastModified.toLocaleString("en-US")])})),console.log(e.toString())}const w=n.resolve(process.cwd(),c,n.basename(i));await Yn(b.filter((({Key:e})=>!new RegExp(`${i}/([^/]+)-config.json`).test(e))),(async t=>{u=ne(`Downloading file: ${ne(t.Key,"info")}`),!s&&f.start(ne(`In progress: ${u}...`,"secondary"));const o=n.resolve(w,t.Key.substring(i.length+1));Hn("file",o),await m.mkdir(n.dirname(o),{recursive:!0});const r=g.getObject({Bucket:a,Key:t.Key}).createReadStream(),c=e.createWriteStream(o,{flags:"w"});r.pipe(c),!s&&f.succeed(ne(`Finished: ${u}.`,"secondary"))})),s?ae({status:"success",downloadedFiles:b.map((({Key:e})=>e))}):(u=ne("Downloading job files."),f.succeed(ne(`Finished: ${u}`,"secondary")))}catch(e){s?ae({status:"error",error:e}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Hn(e),e&&e.response&&e.response.data&&Hn("response",e.response.data))}}});const et=(...e)=>{ce("commands:jobs:list")(...e)},nt="list";var tt=Object.freeze({__proto__:null,builder:async e=>(et("builder",nt),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tenant",{...he.tenant.config,default:"default"}).option("count",he.count.config)),command:nt,desc:"List jobs",handler:async e=>{et("handler",nt,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tenant:a,count:i}=e,{clientApiBaseUri:c}=n;let l,d=y();try{l=ne(`Retrieving jobs for environment: ${ne(s,"info")} flow: ${ne(r,"info")} tenant: ${ne(a,"info")}...`);const e=`${c}/${s}/${r}/${a}/jobs${i?`?count=${i}`:""}`;et("requesting:",e),!t&&d.start(ne(`In progress: ${l}...`,"secondary"));const{data:n}=await h.get(e,{headers:{"x-api-key":o}});if(!t&&d.succeed(ne(`Finished: ${l}.`,"secondary")),et("response-data",n),!n||0===n.length)return void(t?ae([]):d.warn(ne(`Warning: ${ne("No jobs for the specified environment, flow and tenant")}.`,"secondary")));if(t)ae(n);else{const e=new p({head:["name","details"]});n.forEach((n=>e.push([n.job_name,JSON.stringify(n,void 0,2)]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(d.fail(ne(`Error: ${l}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),et(e),e&&e.response&&e.response.data&&et("response",e.response.data))}}});const ot=[Xn,tt],st=ce("commands:jobs"),rt="jobs <action>";var at=Object.freeze({__proto__:null,builder:async function(e){st("builder",rt);return(await be(e)).command(ot)},command:rt,desc:"Manage ETL jobs",handler:async function(e){st("handler",rt,e)}});const it=ce("commands:snapshots:deploy"),ct="deploy";var lt=Object.freeze({__proto__:null,builder:async e=>(it("builder",ct),e.option("tenant",{...he.tenant.config,default:"default"}).option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:ct,desc:"Deploy Snapshots",handler:async e=>{it("handler",ct,e);const{hg:t,json:o,apikey:s,env:r,tenant:a,sourceFolder:c}=e,{clientApiBaseUri:l}=t;let u,f=y();const g=n.resolve(process.cwd(),c);try{u=ne(`Deploying Snapshots for Tenant ${ne(a,"info")} to ${ne(r,"info")}`),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const e=await $e(g,{recursive:!0});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):f.fail(ne(`Error: ${ne("There are no files to deploy at the specified location!")}.`,"secondary")));u=ne("Verifying user and authorizing");const{accessKeyId:t,secretAccessKey:y,sessionToken:h}=await xe({debug:it,baseUri:l,task:"snapshot-deploy",env:r,tenant:a,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const m=new d.S3({accessKeyId:t,secretAccessKey:y,sessionToken:h});u=ne("Validating tenant exists"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));try{const{CommonPrefixes:e}=await m.listObjectsV2({Bucket:r,Prefix:`${a}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw it("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const b=`${a}/snapshots/`,w=new p({head:["File","Status"]});u=ne("Preparing deployment target"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{Contents:v}=await m.listObjectsV2({Bucket:r,Prefix:`${b}`}).promise();!o&&f.stop(),it("contents",v),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const $=v.map((e=>({Key:e.Key})));if($.length>0){const e={Bucket:r,Delete:{Objects:$,Quiet:!0}};await m.deleteObjects(e).promise(),$.forEach((({Key:e})=>w.push([e.substring(b.length),ne("Deleted","warn")])))}!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));for await(const t of e){const e=n.relative(c,t),s=`${b}${e}`;u=ne(`Deploying file: ${ne(e,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a={Bucket:r,Key:s,Body:await i.readFile(t)},l=await m.putObject(a).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),it("s3-put-res",l),w.push([e,ne("Deployed","info")])}o?ae({status:"success",deployedFiles:e}):te(w.toString())}catch(e){o?ae({status:"error",error:e}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),it(e),e&&e.response&&e.response.data&&it("response",e.response.data))}}});const dt=ce("commands:snapshots:download"),ut="download";var ft=Object.freeze({__proto__:null,builder:async e=>(dt("builder",ut),e.option("downloadTo",he.downloadTo.config).demandOption("downloadTo",he.downloadTo.demandText).option("tenant",{...he.tenant.config,default:"default"}).option("overwrite",he.overwrite.config).demandOption("overwrite",he.overwrite.demandText)),command:ut,desc:"Download Snapshots",handler:async t=>{dt("handler",ut,t);const{hg:o,json:s,apikey:r,env:a,tenant:c,downloadTo:l,overwrite:u}=t,{clientApiBaseUri:f}=o;let g,h=y();const m=n.resolve(process.cwd(),function(e){function n(e){return process.argv.indexOf(e)>-1}if(n(`--${e}`))return!0;const t=he[e]?.config?.alias||[];for(let e in t)if(n(`-${t[e]}`))return!0;return!1}("downloadTo")?l:"snapshots");try{g=ne("Verifying user and authorizing"),!s&&h.start(ne(`In progress: ${g}...`,"secondary"));const{accessKeyId:t,secretAccessKey:o,sessionToken:l}=await xe({debug:dt,baseUri:f,task:"snapshot-download",env:a,tenant:c,apikey:r}),y=new d.S3({accessKeyId:t,secretAccessKey:o,sessionToken:l});!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),g=ne("Validating tenant exists"),!s&&h.start(ne(`In progress: ${g}...`,"secondary"));try{const{CommonPrefixes:e}=await y.listObjectsV2({Bucket:a,Prefix:`${c}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw dt("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),g=ne("Scanning for downloadable files"),!s&&h.start(ne(`In progress: ${g}...`,"secondary"));const b=`${c}/snapshots/`,w={Bucket:a,Prefix:b},{Contents:v}=await y.listObjectsV2(w).promise();!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),dt("s3-list-res",v);const $=v?v.map((e=>e.Key)).filter((e=>e!==b)):[];if(!$||0===$.length)return void(s?ae({status:"success",downloadedFiles:[]}):h.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));g=ne(`Downloading snapshot files to ${ne(m,"info")}`),!s&&h.info(ne(`Info: ${g}.`,"secondary"));const _=new p({head:["File","Status"]});for await(const t of $){const o=t.substring(b.length),r=n.resolve(m,o);if(dt("file",r),t.endsWith("/")){!e.existsSync(r)&&await i.mkdir(r,{recursive:!0});continue}if(!u)try{await i.stat(r),dt("exists, skipping"),_.push([o,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&te(e)}g=ne(`Downloading file: ${ne(o,"info")}`),!s&&h.start(ne(`In progress: ${g}...`,"secondary")),await i.mkdir(n.dirname(r),{recursive:!0});const c=y.getObject({Bucket:a,Key:t}).createReadStream();await i.writeFile(r,await ke(c)),!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),_.push([o,"Downloaded"])}s?ae({status:"success",downloadedFiles:$}):te(_.toString())}catch(e){s?ae({status:"error",error:e}):(h.fail(ne(`Error: ${g}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),dt(e),e&&e.response&&e.response.data&&dt("response",e.response.data))}}});const pt=[lt,ft],yt=ce("commands:snapshots"),gt="snapshots <action>";var ht=Object.freeze({__proto__:null,builder:async function(e){yt("builder",gt,e);return(await be(e)).command(pt)},command:gt,desc:"Manage tenant snapshots",handler:async function(e){yt("handler",gt,e)}});const mt=ce("commands:tenants:custom-etl"),bt="custom-etl",wt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,supportedSources:a})=>{const i=await Se({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t});let c=null;for(const{tap:l}of[...i,...a]){const{accessKeyId:a,secretAccessKey:i,sessionToken:u}=await xe({debug:e,baseUri:n,task:"etl-download",env:o,tenant:r,flow:s,tap:l,apikey:t}),f=new d.S3({accessKeyId:a,secretAccessKey:i,sessionToken:u}),p={Bucket:o,Prefix:`${r}/flows/${s}/taps/${l}/etl/`},{Contents:y}=await f.listObjectsV2(p).promise();if(y.some((({Key:e})=>e.endsWith("etl.py")||e.endsWith("etl.ipynb")))&&(c=r),null!==c)break}return c};var vt=Object.freeze({__proto__:null,builder:async e=>(mt("builder",bt),e.option("tenant",he.tenant.config).option("flow",he.flow.config).demandOption("flow",he.flow.demandText)),command:bt,desc:"List tenants with custom ETL in a specific flow",handler:async e=>{mt("handler",bt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=y();try{a=ne(`Retrieving tenants for environment ${ne(s,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ee({debug:mt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Te({debug:mt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]);!t&&i.succeed(ne(`Finished: ${a}.`,"secondary"));let l=[];a=ne(`Querying for custom ETL scripts for flow ${ne(r,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));for(const t of je(e)){const e=await Promise.all(t.map((e=>wt({debug:mt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,supportedSources:c}))));l=l.concat(e.filter(Boolean))}if(!t&&i.succeed(ne(`Finished: ${a}.`,"secondary")),t)ae(l);else{const e=new p({head:["Tenant ID"]});e.push(...l.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(i.fail(ne(`Error: ${a}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),mt(e),e&&e.response&&e.response.data&&mt("response",e.response.data))}}});const $t=ce("commands:tenants:custom-field-map"),_t="custom-field-map",kt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{const i=a?await Ie({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}):await Se({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}),c=[],{accessKeyId:l,secretAccessKey:u,sessionToken:f}=await xe({debug:e,baseUri:n,task:"field-map-download",env:o,tenant:r,flow:s,apikey:t}),p=new d.S3({accessKeyId:l,secretAccessKey:u,sessionToken:f});for(const{id:e,tap:n}of i){const t={Bucket:o,Key:`${r}/flows/${s}/${a?"connectors":"taps"}/${a?e:n}/fieldMap.json`};try{await p.headObject(t).promise(),c.push(a?e:n)}catch(e){}}return{tenant:r,connectors:c}};var jt=Object.freeze({__proto__:null,builder:async e=>($t("builder",_t),e.option("tenant",he.tenant.config).option("flow",he.flow.config).demandOption("flow",he.flow.demandText)),command:_t,desc:"List tenants with custom field map in a specific flow",handler:async e=>{$t("handler",_t,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=y();try{a=ne(`Retrieving tenants for environment ${ne(s,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ee({debug:$t,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Fe({debug:$t,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(ne(`Finished: ${a}.`,"secondary"));const d=[];a=ne(`Querying for custom field maps for flow ${ne(r,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));for(const t of je(e)){const e=await Promise.all(t.map((e=>kt({debug:$t,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,isV2Flow:l}))));d.push(...e.filter((({connectors:e})=>e.length>0)))}if(!t&&i.succeed(ne(`Finished: ${a}.`,"secondary")),t)ae(d);else{const e=new p({head:["Tenant ID","Connector IDs"]});e.push(...d.map((({tenant:e,connectors:n})=>[e,n.join(", ")]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(i.fail(ne(`Error: ${a}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),$t(e),e&&e.response&&e.response.data&&$t("response",e.response.data))}}});const Ot=ce("commands:tenants:delete"),xt="delete";var Et=Object.freeze({__proto__:null,builder:async e=>(Ot("builder",xt),e.option("tenant",he.tenant.config)),command:xt,desc:"Delete tenant",handler:async e=>{Ot("handler",xt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=y();try{if("default"===r)throw new Error('It\'s not possible to delete "default" tenant!');i=ne(`Deleting tenant ${r} schedules`),!t&&c.start(ne(`In progress: ${i}...`,"secondary")),await(async({debug:e,baseUri:n,env:t,apikey:o,tenant:s})=>{const r={"x-api-key":o},a=new URL(`${n}/tenant/${t}/${s}?schedules_only=true`).toString();e&&e("uri:",a);const{data:i}=await h.delete(a,{headers:r});return i})({debug:Ot,baseUri:a,env:s,apikey:o,tenant:r}),!t&&c.succeed(ne(`Finished: ${i}.`,"secondary")),i=ne("Verifying user and authorizing"),!t&&c.start(ne(`In progress: ${i}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:l}=await xe({debug:Ot,baseUri:a,task:"tenant-delete",env:s,tenant:r,apikey:o});!t&&c.succeed(ne(`Finished: ${i}.`,"secondary"));const u=new d.S3({accessKeyId:e,secretAccessKey:n,sessionToken:l});for(i=ne(`Deleting tenant ${r} for environment ${ne(s,"info")}`),!t&&c.start(ne(`In progress: ${i}...`,"secondary"));;){const e=((await u.listObjectsV2({Bucket:s,Prefix:`${r}/`}).promise()).Contents||[]).map((({Key:e})=>({Key:e})));if(0===e.length)break;await u.deleteObjects({Bucket:s,Delete:{Objects:e}}).promise()}if(!t&&c.succeed(ne(`Finished: ${i}.`,"secondary")),t)ae({statu:"success",tenantDeleted:r});else{const e=new p({head:["Tenant ID"]});e.push([r]),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(c.fail(ne(`Error: ${i}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ot(e),e&&e.response&&e.response.data&&Ot("response",e.response.data))}}});const Tt=ce("commands:tenants:list"),St="list";var It=Object.freeze({__proto__:null,builder:async e=>(Tt("builder",St),e.option("tenant",he.tenant.config)),command:St,desc:"List tenants",handler:async e=>{Tt("handler",St,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e;let a,i=y();try{a=ne(`Retrieving tenants for environment ${ne(s,"info")}`);const e=`${n.clientApiBaseUri}/tenants/${s}${r?`?tenant=${r}`:""}`;Tt("requesting:",e),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));const{data:c}=await h.get(e,{headers:{"x-api-key":o}});if(!t&&i.succeed(ne(`Finished: ${a}.`,"secondary")),Tt("response-data",c),!c||0===c.length)return void(t?ae([]):i.info(ne(`Info: ${ne("No tenants found in the specified environment")}.`,"secondary")));if(t)ae(c);else{const e=new p({head:["tenant ID"]});e.push(...c.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(i.fail(ne(`Error: ${a}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Tt(e),e&&e.response&&e.response.data&&Tt("response",e.response.data))}}});const Ft=[vt,jt,Et,It],At=ce("commands:tenants"),Nt="tenants <action>";var Ut=Object.freeze({__proto__:null,builder:async function(e){At("builder",Nt);return(await be(e)).command(Ft)},command:Nt,desc:"Manage tenants",handler:async function(e){At("handler",Nt,e)}});const Kt=[ge,Ce,tn,un,at,ht,Ut];process.env.AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE="1";X({});const Bt=o(process.argv.slice(2));Bt.usage(ne("Usage: $0 <command>")).command(Kt).demandCommand().alias("v","version").alias("h","help").string("_").strictCommands().epilogue(ne("For more information, visit https://docs.hotglue.xyz/docs/cli-overview")).wrap(Math.min(Bt.terminalWidth(),90)).parse(process.argv.slice(S()+1),V);
33
+ */(e),s="string"==typeof e,r=function(e){const n=[],t=Object.create(null);let o=!0;Object.keys(e).forEach((function(t){n.push([].concat(e[t],t))}));for(;o;){o=!1;for(let e=0;e<n.length;e++)for(let t=e+1;t<n.length;t++){if(n[e].filter((function(e){return-1!==n[t].indexOf(e)})).length){n[e]=n[e].concat(n[t]),n.splice(t,1),o=!0;break}}}return n.forEach((function(e){const n=(e=e.filter((function(e,n,t){return t.indexOf(e)===n}))).pop();void 0!==n&&"string"==typeof n&&(t[n]=e)})),t}(Object.assign(Object.create(null),t.alias)),a=Object.assign({"boolean-negation":!0,"camel-case-expansion":!0,"combine-arrays":!1,"dot-notation":!0,"duplicate-arguments-array":!0,"flatten-duplicate-arrays":!0,"greedy-arrays":!0,"halt-at-non-option":!1,"nargs-eats-options":!1,"negation-prefix":"no-","parse-numbers":!0,"parse-positional-numbers":!0,"populate--":!1,"set-placeholder-key":!1,"short-option-groups":!0,"strip-aliased":!1,"strip-dashed":!1,"unknown-options-as-args":!1},t.configuration),i=Object.assign(Object.create(null),t.default),c=t.configObjects||[],l=t.envPrefix,d=a["populate--"],u=d?"--":"_",f=Object.create(null),p=Object.create(null),y=t.__||U.format,g={aliases:Object.create(null),arrays:Object.create(null),bools:Object.create(null),strings:Object.create(null),numbers:Object.create(null),counts:Object.create(null),normalize:Object.create(null),configs:Object.create(null),nargs:Object.create(null),coercions:Object.create(null),keys:[]},h=/^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/,m=new RegExp("^--"+a["negation-prefix"]+"(.+)");[].concat(t.array||[]).filter(Boolean).forEach((function(e){const n="object"==typeof e?e.key:e,t=Object.keys(e).map((function(e){return{boolean:"bools",string:"strings",number:"numbers"}[e]})).filter(Boolean).pop();t&&(g[t][n]=!0),g.arrays[n]=!0,g.keys.push(n)})),[].concat(t.boolean||[]).filter(Boolean).forEach((function(e){g.bools[e]=!0,g.keys.push(e)})),[].concat(t.string||[]).filter(Boolean).forEach((function(e){g.strings[e]=!0,g.keys.push(e)})),[].concat(t.number||[]).filter(Boolean).forEach((function(e){g.numbers[e]=!0,g.keys.push(e)})),[].concat(t.count||[]).filter(Boolean).forEach((function(e){g.counts[e]=!0,g.keys.push(e)})),[].concat(t.normalize||[]).filter(Boolean).forEach((function(e){g.normalize[e]=!0,g.keys.push(e)})),"object"==typeof t.narg&&Object.entries(t.narg).forEach((([e,n])=>{"number"==typeof n&&(g.nargs[e]=n,g.keys.push(e))})),"object"==typeof t.coerce&&Object.entries(t.coerce).forEach((([e,n])=>{"function"==typeof n&&(g.coercions[e]=n,g.keys.push(e))})),void 0!==t.config&&(Array.isArray(t.config)||"string"==typeof t.config?[].concat(t.config).filter(Boolean).forEach((function(e){g.configs[e]=!0})):"object"==typeof t.config&&Object.entries(t.config).forEach((([e,n])=>{"boolean"!=typeof n&&"function"!=typeof n||(g.configs[e]=n)}))),function(...e){e.forEach((function(e){Object.keys(e||{}).forEach((function(e){g.aliases[e]||(g.aliases[e]=[].concat(r[e]||[]),g.aliases[e].concat(e).forEach((function(n){if(/-/.test(n)&&a["camel-case-expansion"]){const t=A(n);t!==e&&-1===g.aliases[e].indexOf(t)&&(g.aliases[e].push(t),f[t]=!0)}})),g.aliases[e].concat(e).forEach((function(n){if(n.length>1&&/[A-Z]/.test(n)&&a["camel-case-expansion"]){const t=F(n,"-");t!==e&&-1===g.aliases[e].indexOf(t)&&(g.aliases[e].push(t),f[t]=!0)}})),g.aliases[e].forEach((function(n){g.aliases[n]=[e].concat(g.aliases[e].filter((function(e){return n!==e})))})))}))}))}(t.key,r,t.default,g.arrays),Object.keys(i).forEach((function(e){(g.aliases[e]||[]).forEach((function(n){i[n]=i[e]}))}));let w=null;Object.keys(g.counts).find((e=>C(e,g.arrays)?(w=Error(y("Invalid configuration: %s, opts.count excludes opts.array.",e)),!0):!!C(e,g.nargs)&&(w=Error(y("Invalid configuration: %s, opts.count excludes opts.narg.",e)),!0)));let b=[];const v=Object.assign(Object.create(null),{_:[]}),$={};for(let e=0;e<o.length;e++){const n=o[e],t=n.replace(/^-{3,}/,"---");let s,r,i,c,l,d;if("--"!==n&&q(n))k(n);else{if(t.match(/---+(=|$)/)){k(n);continue}if(n.match(/^--.+=/)||!a["short-option-groups"]&&n.match(/^-.+=/))c=n.match(/^--?([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&(C(c[1],g.arrays)?e=j(e,c[1],o,c[2]):!1!==C(c[1],g.nargs)?e=_(e,c[1],o,c[2]):O(c[1],c[2],!0));else if(n.match(m)&&a["boolean-negation"])c=n.match(m),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],O(r,!!C(r,g.arrays)&&[!1]));else if(n.match(/^--.+/)||!a["short-option-groups"]&&n.match(/^-[^-]+/))c=n.match(/^--?(.+)/),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],C(r,g.arrays)?e=j(e,r,o):!1!==C(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||l.match(/^-/)&&!l.match(h)||C(r,g.bools)||C(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,z(r)):(O(r,l),e++)));else if(n.match(/^-.\..+=/))c=n.match(/^-([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&O(c[1],c[2]);else if(n.match(/^-.\..+/)&&!n.match(h))l=o[e+1],c=n.match(/^-(.\..+)/),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],void 0===l||l.match(/^-/)||C(r,g.bools)||C(r,g.counts)?O(r,z(r)):(O(r,l),e++));else if(n.match(/^-[^-]+/)&&!n.match(h)){i=n.slice(1,-1).split(""),s=!1;for(let t=0;t<i.length;t++){if(l=n.slice(t+2),i[t+1]&&"="===i[t+1]){d=n.slice(t+3),r=i[t],C(r,g.arrays)?e=j(e,r,o,d):!1!==C(r,g.nargs)?e=_(e,r,o,d):O(r,d),s=!0;break}if("-"!==l){if(/[A-Za-z]/.test(i[t])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(l)&&!1===C(l,g.bools)){O(i[t],l),s=!0;break}if(i[t+1]&&i[t+1].match(/\W/)){O(i[t],l),s=!0;break}O(i[t],z(i[t]))}else O(i[t],l)}r=n.slice(-1)[0],s||"-"===r||(C(r,g.arrays)?e=j(e,r,o):!1!==C(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||/^(-|--)[^-]/.test(l)&&!l.match(h)||C(r,g.bools)||C(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,z(r)):(O(r,l),e++)))}else if(n.match(/^-[0-9]$/)&&n.match(h)&&C(n.slice(1),g.bools))r=n.slice(1),O(r,z(r));else{if("--"===n){b=o.slice(e+1);break}if(a["halt-at-non-option"]){b=o.slice(e);break}k(n)}}}function k(e){const n=S("_",e);"string"!=typeof n&&"number"!=typeof n||v._.push(n)}function _(e,n,t,o){let s,r=C(n,g.nargs);if(r="number"!=typeof r||isNaN(r)?1:r,0===r)return V(o)||(w=Error(y("Argument unexpected for: %s",n))),O(n,z(n)),e;let i=V(o)?0:1;if(a["nargs-eats-options"])t.length-(e+1)+i<r&&(w=Error(y("Not enough arguments following: %s",n))),i=r;else{for(s=e+1;s<t.length&&(!t[s].match(/^-[^0-9]/)||t[s].match(h)||q(t[s]));s++)i++;i<r&&(w=Error(y("Not enough arguments following: %s",n)))}let c=Math.min(i,r);for(!V(o)&&c>0&&(O(n,o),c--),s=e+1;s<c+e+1;s++)O(n,t[s]);return e+c}function j(e,n,t,o){let r=[],c=o||t[e+1];const l=C(n,g.nargs);if(C(n,g.bools)&&!/^(true|false)$/.test(c))r.push(!0);else if(V(c)||V(o)&&/^-/.test(c)&&!h.test(c)&&!q(c)){if(void 0!==i[n]){const e=i[n];r=Array.isArray(e)?e:[e]}}else{V(o)||r.push(T(n,o,!0));for(let o=e+1;o<t.length&&!(!a["greedy-arrays"]&&r.length>0||l&&"number"==typeof l&&r.length>=l)&&(c=t[o],!/^-/.test(c)||h.test(c)||q(c));o++)e=o,r.push(T(n,c,s))}return"number"==typeof l&&(l&&r.length<l||isNaN(l)&&0===r.length)&&(w=Error(y("Not enough arguments following: %s",n))),O(n,r),e}function O(e,n,t=s){if(/-/.test(e)&&a["camel-case-expansion"]){const n=e.split(".").map((function(e){return A(e)})).join(".");E(e,n)}const o=T(e,n,t),r=e.split(".");if(L(v,r,o),g.aliases[e]&&g.aliases[e].forEach((function(e){const n=e.split(".");L(v,n,o)})),r.length>1&&a["dot-notation"]&&(g.aliases[r[0]]||[]).forEach((function(n){let t=n.split(".");const s=[].concat(r);s.shift(),t=t.concat(s),(g.aliases[e]||[]).includes(t.join("."))||L(v,t,o)})),C(e,g.normalize)&&!C(e,g.arrays)){[e].concat(g.aliases[e]||[]).forEach((function(e){Object.defineProperty($,e,{enumerable:!0,get:()=>n,set(e){n="string"==typeof e?U.normalize(e):e}})}))}}function E(e,n){g.aliases[e]&&g.aliases[e].length||(g.aliases[e]=[n],f[n]=!0),g.aliases[n]&&g.aliases[n].length||E(n,e)}function T(e,n,t){t&&(n=function(e){return"string"!=typeof e||"'"!==e[0]&&'"'!==e[0]||e[e.length-1]!==e[0]?e:e.substring(1,e.length-1)}(n)),(C(e,g.bools)||C(e,g.counts))&&"string"==typeof n&&(n="true"===n);let o=Array.isArray(n)?n.map((function(n){return S(e,n)})):S(e,n);return C(e,g.counts)&&(V(o)||"boolean"==typeof o)&&(o=N()),C(e,g.normalize)&&C(e,g.arrays)&&(o=Array.isArray(n)?n.map((e=>U.normalize(e))):U.normalize(n)),o}function S(e,n){if(!a["parse-positional-numbers"]&&"_"===e)return n;if(!C(e,g.strings)&&!C(e,g.bools)&&!Array.isArray(n)){(I(n)&&a["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${n}`)))||!V(n)&&C(e,g.numbers))&&(n=Number(n))}return n}function B(e,n){Object.keys(e).forEach((function(t){const o=e[t],s=n?n+"."+t:t;"object"==typeof o&&null!==o&&!Array.isArray(o)&&a["dot-notation"]?B(o,s):(!P(v,s.split("."))||C(s,g.arrays)&&a["combine-arrays"])&&O(s,o)}))}function D(e,n){if(void 0===l)return;const t="string"==typeof l?l:"",o=U.env();Object.keys(o).forEach((function(s){if(""===t||0===s.lastIndexOf(t,0)){const r=s.split("__").map((function(e,n){return 0===n&&(e=e.substring(t.length)),A(e)}));(n&&g.configs[r.join(".")]||!n)&&!P(e,r)&&O(r.join("."),o[s])}}))}function M(e,n,t,o=!1){Object.keys(t).forEach((function(s){P(e,s.split("."))||(L(e,s.split("."),t[s]),o&&(p[s]=!0),(n[s]||[]).forEach((function(n){P(e,n.split("."))||L(e,n.split("."),t[s])})))}))}function P(e,n){let t=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){t=t[e]||{}}));const o=n[n.length-1];return"object"==typeof t&&o in t}function L(e,n,t){let o=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){e=K(e),"object"==typeof o&&void 0===o[e]&&(o[e]={}),"object"!=typeof o[e]||Array.isArray(o[e])?(Array.isArray(o[e])?o[e].push({}):o[e]=[o[e],{}],o=o[e][o[e].length-1]):o=o[e]}));const s=K(n[n.length-1]),r=C(n.join("."),g.arrays),i=Array.isArray(t);let c=a["duplicate-arguments-array"];!c&&C(s,g.nargs)&&(c=!0,(!V(o[s])&&1===g.nargs[s]||Array.isArray(o[s])&&o[s].length===g.nargs[s])&&(o[s]=void 0)),t===N()?o[s]=N(o[s]):Array.isArray(o[s])?c&&r&&i?o[s]=a["flatten-duplicate-arrays"]?o[s].concat(t):(Array.isArray(o[s][0])?o[s]:[o[s]]).concat([t]):c||Boolean(r)!==Boolean(i)?o[s]=o[s].concat([t]):o[s]=t:void 0===o[s]&&r?o[s]=i?t:[t]:!c||void 0===o[s]||C(s,g.counts)||C(s,g.bools)?o[s]=t:o[s]=[o[s],t]}function C(e,n){const t=[].concat(g.aliases[e]||[],e),o=Object.keys(n),s=t.find((e=>o.includes(e)));return!!s&&n[s]}function R(e){const n=Object.keys(g);return[].concat(n.map((e=>g[e]))).some((function(n){return Array.isArray(n)?n.includes(e):n[e]}))}function q(e){return a["unknown-options-as-args"]&&function(e){if(e=e.replace(/^-{3,}/,"--"),e.match(h))return!1;if(function(e){if(e.match(h)||!e.match(/^-[^-]+/))return!1;let n,t=!0;const o=e.slice(1).split("");for(let s=0;s<o.length;s++){if(n=e.slice(s+2),!R(o[s])){t=!1;break}if(o[s+1]&&"="===o[s+1]||"-"===n||/[A-Za-z]/.test(o[s])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(n)||o[s+1]&&o[s+1].match(/\W/))break}return t}(e))return!1;return!function(e,...n){return[].concat(...n).some((function(n){const t=e.match(n);return t&&R(t[1])}))}(e,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(e)}function z(e){return C(e,g.bools)||C(e,g.counts)||!(`${e}`in i)?(n=function(e){let n=x.BOOLEAN;return C(e,g.strings)?n=x.STRING:C(e,g.numbers)?n=x.NUMBER:C(e,g.bools)?n=x.BOOLEAN:C(e,g.arrays)&&(n=x.ARRAY),n}(e),{[x.BOOLEAN]:!0,[x.STRING]:"",[x.NUMBER]:void 0,[x.ARRAY]:[]}[n]):i[e];var n}function V(e){return void 0===e}return D(v,!0),D(v,!1),function(e){const n=Object.create(null);M(n,g.aliases,i),Object.keys(g.configs).forEach((function(t){const o=e[t]||n[t];if(o)try{let e=null;const n=U.resolve(U.cwd(),o),s=g.configs[t];if("function"==typeof s){try{e=s(n)}catch(n){e=n}if(e instanceof Error)return void(w=e)}else e=U.require(n);B(e)}catch(n){"PermissionDenied"===n.name?w=n:e[t]&&(w=Error(y("Invalid JSON config file: %s",o)))}}))}(v),void 0!==c&&c.forEach((function(e){B(e)})),M(v,g.aliases,i,!0),function(e){let n;const t=new Set;Object.keys(e).forEach((function(o){if(!t.has(o)&&(n=C(o,g.coercions),"function"==typeof n))try{const s=S(o,n(e[o]));[].concat(g.aliases[o]||[],o).forEach((n=>{t.add(n),e[n]=s}))}catch(e){w=e}}))}(v),a["set-placeholder-key"]&&function(e){g.keys.forEach((n=>{~n.indexOf(".")||void 0===e[n]&&(e[n]=void 0)}))}(v),Object.keys(g.counts).forEach((function(e){P(v,e.split("."))||O(e,0)})),d&&b.length&&(v[u]=[]),b.forEach((function(e){v[u].push(e)})),a["camel-case-expansion"]&&a["strip-dashed"]&&Object.keys(v).filter((e=>"--"!==e&&e.includes("-"))).forEach((e=>{delete v[e]})),a["strip-aliased"]&&[].concat(...Object.keys(r).map((e=>r[e]))).forEach((e=>{a["camel-case-expansion"]&&e.includes("-")&&delete v[e.split(".").map((e=>A(e))).join(".")],delete v[e]})),{aliases:Object.assign({},g.aliases),argv:Object.assign($,v),configuration:a,defaulted:Object.assign({},p),error:w,newAliases:Object.assign({},f)}}}({cwd:process.cwd,env:()=>D,format:s.format,normalize:n.normalize,resolve:n.resolve,require:n=>{if("undefined"!=typeof require)return require(n);if(n.match(/\.json$/))return JSON.parse(e.readFileSync(n,"utf8"));throw Error("only .json config files are supported in ESM")}}),P=function(e,n){return M.parse(e.slice(),n).argv};P.detailed=function(e,n){return M.parse(e.slice(),n)},P.camelCase=A,P.decamelize=F,P.looksLikeNumber=I;new RegExp("(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)","g");var L={fs:{readFileSync:e.readFileSync,writeFile:e.writeFile},format:s.format,resolve:n.resolve,exists:n=>{try{return e.statSync(n).isFile()}catch(e){return!1}}};let C;class R{constructor(e){e=e||{},this.directory=e.directory||"./locales",this.updateFiles="boolean"!=typeof e.updateFiles||e.updateFiles,this.locale=e.locale||"en",this.fallbackToLanguage="boolean"!=typeof e.fallbackToLanguage||e.fallbackToLanguage,this.cache=Object.create(null),this.writeQueue=[]}__(...e){if("string"!=typeof arguments[0])return this._taggedLiteral(arguments[0],...arguments);const n=e.shift();let t=function(){};return"function"==typeof e[e.length-1]&&(t=e.pop()),t=t||function(){},this.cache[this.locale]||this._readLocaleFile(),!this.cache[this.locale][n]&&this.updateFiles?(this.cache[this.locale][n]=n,this._enqueueWrite({directory:this.directory,locale:this.locale,cb:t})):t(),C.format.apply(C.format,[this.cache[this.locale][n]||n].concat(e))}__n(){const e=Array.prototype.slice.call(arguments),n=e.shift(),t=e.shift(),o=e.shift();let s=function(){};"function"==typeof e[e.length-1]&&(s=e.pop()),this.cache[this.locale]||this._readLocaleFile();let r=1===o?n:t;if(this.cache[this.locale][n]){r=this.cache[this.locale][n][1===o?"one":"other"]}!this.cache[this.locale][n]&&this.updateFiles?(this.cache[this.locale][n]={one:n,other:t},this._enqueueWrite({directory:this.directory,locale:this.locale,cb:s})):s();const a=[r];return~r.indexOf("%d")&&a.push(o),C.format.apply(C.format,a.concat(e))}setLocale(e){this.locale=e}getLocale(){return this.locale}updateLocale(e){this.cache[this.locale]||this._readLocaleFile();for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(this.cache[this.locale][n]=e[n])}_taggedLiteral(e,...n){let t="";return e.forEach((function(e,o){const s=n[o+1];t+=e,void 0!==s&&(t+="%s")})),this.__.apply(this,[t].concat([].slice.call(n,1)))}_enqueueWrite(e){this.writeQueue.push(e),1===this.writeQueue.length&&this._processWriteQueue()}_processWriteQueue(){const e=this,n=this.writeQueue[0],t=n.directory,o=n.locale,s=n.cb,r=this._resolveLocaleFile(t,o),a=JSON.stringify(this.cache[o],null,2);C.fs.writeFile(r,a,"utf-8",(function(n){e.writeQueue.shift(),e.writeQueue.length>0&&e._processWriteQueue(),s(n)}))}_readLocaleFile(){let e={};const n=this._resolveLocaleFile(this.directory,this.locale);try{C.fs.readFileSync&&(e=JSON.parse(C.fs.readFileSync(n,"utf-8")))}catch(t){if(t instanceof SyntaxError&&(t.message="syntax error in "+n),"ENOENT"!==t.code)throw t;e={}}this.cache[this.locale]=e}_resolveLocaleFile(e,n){let t=C.resolve(e,"./",n+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(t)&&~n.lastIndexOf("_")){const o=C.resolve(e,"./",n.split("_")[0]+".json");this._fileExistsSync(o)&&(t=o)}return t}_fileExistsSync(e){return C.exists(e)}}let q;try{q=a.fileURLToPath("undefined"==typeof document?require("url").pathToFileURL(__filename).href:w&&"SCRIPT"===w.tagName.toUpperCase()&&w.src||new URL("index.js",document.baseURI).href)}catch(e){q=process.cwd()}const z=q.split("node_modules")[0];r.notStrictEqual,r.strictEqual,s.inspect,z||process.cwd(),n.basename,n.dirname,n.extname,n.relative,n.resolve,process.cwd,process.exit,process.nextTick,void 0!==process.stdout.columns&&process.stdout.columns,e.readFileSync,function(e,n){C=n;const t=new R(e);t.__.bind(t),t.__n.bind(t),t.setLocale.bind(t),t.getLocale.bind(t),t.updateLocale.bind(t),t.locale}({directory:n.resolve(q,"../../../locales"),updateFiles:!1},L);const V={hg:{appName:"hotglue",clientApiBaseUri:process.env.HOTGLUE_CLIENT_API_BASE_URI||"https://client-api.hotglue.xyz",defaultConfigFileName:"config.yaml"}},W={},G=()=>n.resolve(t.homedir(),`.${V.hg.appName}`,V.hg.defaultConfigFileName),J=async()=>{const{appName:e}=V.hg;try{return await c.cosmiconfig(e).load(G())||{}}catch(e){return{}}},Q=async()=>{const{appName:e}=V.hg,n=c.cosmiconfig(e,{searchPlaces:[`${e}.yaml`,`.${e}.yaml`,`.${e}rc.yaml`,`.${e}rc.yml`,`.${e}rc`,`.${e}rc.json`,`.${e}rc.js`]});try{return await n.search()||{}}catch(e){throw console.log(e),new Error(`Malformed configuration file: ${e.message}`)}},Y={primary:e=>l.whiteBright(e),secondary:e=>l.white(e),info:e=>l.green(e),warn:e=>l.yellow(e),error:e=>l.redBright(e),success:e=>l.greenBright(e)};let H=Y,Z="primary";function X(e){return H={...Y,...e},re}function ee(e){process.stdout.write(e)}const ne=(e,n=Z)=>{if(!e)return"";if("string"==typeof e)return H[n]?H[n](e):H[Z](e);const t=s.inspect(e,{colors:!0});return H[n]?H[n](t):t};function te(...e){return console.log(...e),re}function oe(e,n){return ee(ne(e,n)),ee("\n"),re}function se(e,n){return ee(ne(e,n)),re}const re={cl:te,pr:oe,pp:se,setTheme:X,setDefault:function(e="primary"){return H[e]&&(Z=e),re}},ae=e=>{console.log(JSON.stringify(e))},ie=u("hotglue-cli");function ce(e){return ie.extend(e)}const le=ce("commands:config:set"),de="set <setting> <value>";var ue=Object.freeze({__proto__:null,builder:async e=>(le("builder",de,e),e.option("setting",{describe:"The configuration parameter you wish to set",type:"string"}).option("value",{describe:"The configuration parameter's value",type:"string"}),e),command:de,desc:"Set configuration key-value pairs",handler:async e=>{le("handler",de,e);const{json:t,setting:o,value:s}=e;if(["apikey"].includes(o))try{const e=await J();e&&e.config?!t&&se("Updating profile config file..."):!t&&se("Creating profile config file...");const r=e&&e.config?{...e.config,[o]:s}:{[o]:s},a=f.stringify(r),c=e&&e.filepath?e.filepath:G();await(async(e,t)=>{await i.mkdir(n.dirname(e),{recursive:!0}),await i.writeFile(e,t)})(c,a),t?ae({status:"success"}):se("Done").pr()}catch(e){t?ae({status:"error",error:e}):console.log(e)}else t?ae({status:"error",error:"Invalid settings parameter"}):console.error("Invalid settings parameter")}});const fe=[ue],pe=ce("commands:config"),ye="config [action]";var ge=Object.freeze({__proto__:null,builder:async function(e){return pe("builder",ye),e.command(fe)},command:ye,desc:"Configure your hotglue CLI",handler:async function(e){pe("handler",ye,e);const{action:t}=e;if(!t)try{const e=await J();e.config&&0!==Object.keys(e.config).length||oe("No profile configuration found. Run config set to configure the hotglue CLI.");const t=new p({head:["Setting","Value","Config File","Type"]});e.config&&Object.entries(e.config).forEach((([n,o])=>t.push([n,o,e.filepath,"Profile"])));const o=await Q();o.config&&Object.entries(o.config).forEach((([e,s])=>t.push([e,s,n.relative(process.cwd(),o.filepath),"Project"]))),t.length>0&&console.log(t.toString())}catch(e){throw console.log(e),e}}}),he={env:{config:{describe:"Environment Id",type:"string",alias:["e"]},demandText:'The "env" parameter (Environment Id) is required. Either pass here using `-e [env_id]` or add an env property in your rc file.'},apikey:{config:{describe:"API key",type:"string",alias:["k"]},demandText:"API key is required. Either pass here using -k [key] or configure your profile using config set."},json:{config:{describe:"Makes the output format to be JSON",type:"boolean",default:!1},demandText:""},tenant:{config:{describe:"Tenant (user) ID",type:"string",alias:["u"]},demandText:"TenantId is required. You can pass it using -u [tenantId]."},flow:{config:{describe:"Flow ID",type:"string",alias:["f"]},demandText:"FlowId is required. You can pass it using -f [flow_id]."},tap:{config:{describe:"Tap name",type:"string",alias:["t"]},demandText:"Tap name is required. You can pass it using -t <tap_name>."},connector:{config:{describe:"Connector ID",type:"string",alias:["c"]},demandText:"Connector ID is required. You can pass it using -c <connector>."},all:{config:{describe:"Run command for all taps/connectors",type:"boolean",default:!1,alias:["a"]},demandText:'This "all" flag is required. You can pass it using -a or --all.'},jobroot:{config:{describe:"Job Root (S3 prefix)",type:"string",alias:["j"]},demandText:"JobRoot key is required. You can pass it using -j [job_root]."},count:{config:{describe:"Max returned records",type:"number"}},downloadTo:{config:{describe:"Download folder",default:".",type:"string",alias:["d"]},demandText:"A destination folder is required. You can pass it using -d [folder] and can be either relative from cwd or absolute."},sourceFolder:{config:{describe:"Source folder",type:"string",default:".",alias:["s"]},demandText:""},configFilePath:{config:{describe:"Config file path",type:"string",default:"./config.json",alias:["p"]},demandText:'Local path of the config (with .json extension). Example: "/home/hotglue/config.json"'},overwrite:{config:{describe:"Overwrite existing",type:"boolean",default:!1,alias:["o"]},demandText:""},cleanup:{config:{describe:"Clean up target prior to action",type:"boolean",default:!1,alias:["c"]},demandText:""}};const me=ce("base"),we=async e=>{me("builder");const n=await(async()=>{const e=await J(),n=await Q();return{...W,...e.config,...n.config}})();return e.option("apikey",he.apikey.config).option("env",he.env.config).option("json",he.json.config).config(n).demandOption(["env"],he.env.demandText).demandOption(["apikey"],he.apikey.demandText)},be=ce("utils.js"),ve=async(e,t,o=[])=>{const{includeSymLinks:s,recursive:r,filter:a}=t,{matcher:c}=a,l=n.resolve(e),d=await i.readdir(l,{withFileTypes:!0});for(const e of d){const a=n.resolve(l,e.name);e.isSymbolicLink()&&!s||(!c||c(a)?e.isFile()?o.push(n.resolve(l,e.name)):e.isDirectory()&&r&&await ve(n.resolve(l,e.name),t,o):be("skip",a))}return o},$e=async(e,n)=>{const t={includeSymLinks:!1,recursive:!1,filter:{},...n},{pattern:o}=t.filter;return o&&(t.filter.matcher=g.matcher(o,{dot:!0})),ve(e,t)},ke=(e,n)=>{be("filter-in",e);const{pattern:t}={...n};let o=e;return t&&(o=g(o,t)),be("filter-out",o),o};const _e=e=>{const n=[];return new Promise(((t,o)=>{e.on("error",o),e.on("data",(e=>n.push(Buffer.from(e)))),e.on("end",(()=>t(Buffer.concat(n).toString("utf8"))))}))},je=(e,n=10)=>{const t=[];for(let o=0;o<e.length;o+=n){const s=e.slice(o,o+n);t.push(s)}return t},Oe=async({debug:e,baseUri:n,env:t,apiKey:o})=>{const s=new URL(`${n}/${t}/resetAvailableEntities`),{data:r}=await h.delete(s,{headers:{"x-api-key":o,"Content-type":"application/json"}});e({data:r})},xe=async({debug:e,baseUri:n,task:t,env:o,apikey:s,...r})=>{const a=new URL(`${n}/credentials/${t}/${o}`);r&&Object.entries(r).forEach((([e,n])=>{a.searchParams.set(e,n)}));const i=a.toString();e&&e("uri:",i);const{data:c}=await h.get(i,{headers:{"x-api-key":s}}),{accessKeyId:l,secretAccessKey:d,sessionToken:u}=c;return{accessKeyId:l,secretAccessKey:d,sessionToken:u}},Ee=async({debug:e,baseUri:n,env:t,apikey:o})=>{const s=`${n}/tenants/${t}`;e("requesting:",s);const{data:r}=await h.get(s,{headers:{"x-api-key":o}});return e("response-data",r),r},Te=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/${o}/supportedSources`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Se=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/v2/${t}/${o}/supportedConnectors`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Ae=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,config:a})=>{const i=new URL(`${n}/${t}/${o}/${s}/linkedSources`);a&&i.searchParams.set("config","true");const c={"x-api-key":r},l=i.toString();e&&e("uri:",l);const{data:d}=await h.get(l,{headers:c});return d},Fe=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,config:a})=>{const i=new URL(`${n}/v2/${t}/${o}/${s}/linkedConnectors`);a&&i.searchParams.set("config","true");const c={"x-api-key":r},l=i.toString();e&&e("uri:",l);const{data:d}=await h.get(l,{headers:c});return d},Ie=async({debug:e,baseUri:n,env:t,apikey:o})=>{const s={"x-api-key":o},r=new URL(`${n}/${t}/flows/supported`).toString();e&&e("uri:",r);const{data:a}=await h.get(r,{headers:s});return a},Ue=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/flows/${o}/supported`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Ne=u("commands:env:validators"),Ke=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableSources.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>await Te({debug:Ne,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.tap)throw new Error(`Source ${JSON.stringify(e)} has no tap id`);return e.tap})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate source id(s) found in availableSources.json: ${i.join(", ")}. All sources must have a unique tap id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.tap)));if(c.length>0)throw new Error(`Sources ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableSources.json`)},Be=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableTargets.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>{const o=await(async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/${o}/supportedTargets`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i})({debug:Ne,baseUri:n,env:s,flow:e.id,apikey:t});return o})))).flat(),a=e.map((e=>{if(!e.target)throw new Error(`Target ${JSON.stringify(e)} has no target id`);return e.target})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate target id(s) found in availableTargets.json: ${i.join(", ")}. All targets must have a unique target id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.target)));if(c.length>0)throw new Error(`Targets ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableTargets.json`)},De=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableConnectors.json must be an array of objects");const r=(await Promise.all(o.filter((e=>2==e.version)).map((async e=>await Se({debug:Ne,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.id)throw new Error(`Connector ${JSON.stringify(e)} has no id`);return e.id})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate connector id(s) found in availableConnectors.json: ${i.join(", ")}. All connectors must have a unique id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.id)));if(c.length>0)throw new Error(`Connectors ${c.map((e=>e.id)).join(", ")} are linked, but missing from your availableConnectors.json`)},Me=ce("commands:env:deploy"),Pe="deploy";var Le=Object.freeze({__proto__:null,builder:async e=>(Me("builder",Pe),e.option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:Pe,desc:"Deploy Environment settings",handler:async e=>{Me("handler",Pe,e);const{hg:t,json:o,apikey:s,env:r,sourceFolder:a}=e,{clientApiBaseUri:c}=t,l=n.resolve(process.cwd(),a);let u,f=y();try{u=ne(`Scanning ${ne(l,"info")} for deployable files`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const e=await $e(l,{filter:{pattern:"((**/requirements.txt)|(**/availableSources.json)|(**/availableTargets.json)|(**/availableConnectors.json)|(**/customTaps.json))"}});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne("There are no files to deploy at the specified location!")}`,"secondary"))));!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));for(const n of e)if(n.endsWith(".json"))try{const e=await i.readFile(n,{encoding:"utf-8"});JSON.parse(e)}catch(e){throw new Error(`File ${n} is not a valid JSON: ${String(e)}`)}const t=await Ie({debug:Me,baseUri:c,env:r,apikey:s});for(const n of e){if(n.endsWith("availableSources.json")){const e=JSON.parse(await i.readFile(n,{encoding:"utf-8"}));await Ke(e,c,s,t,r)}if(n.endsWith("availableTargets.json")){const e=JSON.parse(await i.readFile(n,{encoding:"utf-8"}));await Be(e,c,s,t,r)}if(n.endsWith("availableConnectors.json")){const e=JSON.parse(await i.readFile(n,{encoding:"utf-8"}));await De(e,c,s,t,r)}}u=ne("Verifying user and authorizing"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:a,secretAccessKey:y,sessionToken:g}=await xe({debug:Me,baseUri:c,task:"env-deploy",env:r,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const h=new d.S3({accessKeyId:a,secretAccessKey:y,sessionToken:g});u=ne("Deploying environment files"),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const m="config/",w=new p({head:["File","Status"]});for await(const t of e){const e=n.basename(t);u=ne(`Pushing file: ${ne(e,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a={Bucket:r,Key:`${m}${e}`,Body:await i.readFile(t)},l=await h.putObject(a).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),Me("s3-put-res",l),w.push([e,"Deployed"]),await Oe({debug:Me,baseUri:c,env:r,apiKey:s})}o?ae({status:"success",deployedFiles:e}):te(w.toString())}catch(e){!o&&f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Me(e),e&&e.response&&e.response.data&&Me("response",e.response.data)}}});const Ce=ce("commands:env:download"),Re="download";var qe=Object.freeze({__proto__:null,builder:async e=>(Ce("builder",Re),e.option("downloadTo",he.downloadTo.config)),command:Re,desc:"Download Environment settings",handler:async e=>{Ce("handler",Re,e);const{hg:t,json:o,apikey:s,env:r,downloadTo:a}=e,{clientApiBaseUri:c}=t,l=n.resolve(process.cwd(),a);let u,f=y();try{u=ne("Verifying user and authorizing"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:e,secretAccessKey:t,sessionToken:a}=await xe({debug:Ce,baseUri:c,task:"env-download",env:r,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const y=new d.S3({accessKeyId:e,secretAccessKey:t,sessionToken:a});u=ne(`Scanning environment ${ne(r,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const g={Bucket:r,Prefix:"config/"},{Contents:h}=await y.listObjectsV2(g).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),Ce("s3-files",h);const m=h?ke(h.map((e=>e.Key)),{pattern:"((*/requirements.txt)|(*/availableSources.json)|(*/availableTargets.json)|(*/availableConnectors.json)|(*/customTaps.json))"}):[];if(!m||0===m.length)return void(o?ae({status:"success",downloadedFiles:[]}):f.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));u=ne(`Downloading to ${ne(l,"info")}`),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const w=new p({head:["File","Status"]});for await(const e of m){const t=n.basename(e),s=n.resolve(l,t);Ce("local-file",s),await i.mkdir(n.dirname(s),{recursive:!0}),u=ne(`Downloading file: ${ne(t,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a=y.getObject({Bucket:r,Key:e}).createReadStream();await i.writeFile(s,await _e(a)),!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),w.push([t,"Downloaded"])}o?ae({status:"success",downloadedFiles:m}):te(w.toString())}catch(e){o?ae({status:"error",error:e}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ce(e),e&&e.response&&e.response.data&&Ce("response",e.response.data))}}});const ze=[Le,qe],Ve=ce("commands:env"),We="env <action>";var Ge=Object.freeze({__proto__:null,builder:async function(e){Ve("builder",We);return(await we(e)).command(ze)},command:We,desc:"Manage environment settings",handler:async function(e){Ve("handler",We,e)}});const Je=async(e,n,t,o)=>{try{const s=e.getObject({Bucket:n,Key:`${t}/flows/${o}/flow.json`}).createReadStream(),r=await _e(s);return 2===JSON.parse(r).version}catch(e){return!1}},Qe=async(e,n,t,o,s=void 0)=>s??await Je(e,n,t,o)?"connectors":"taps",Ye=ce("commands:etl:delete"),He="delete";var Ze=Object.freeze({__proto__:null,builder:async e=>(Ye("builder",He),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).demandOption("tap",he.tap.demandText).option("tenant",{...he.tenant.config}).demandOption("tenant",he.tenant.demandText)),command:He,desc:"Delete ETL scripts",handler:async e=>{Ye("handler",He,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,tenant:i}=e,{clientApiBaseUri:c}=n;let l,u=y();try{l=ne(`Deleting ETL scripts for Tenant ${ne(i,"info")} Flow ${ne(r,"info")} and Tap ${ne(a,"info")} to ${ne(s,"info")}`),!t&&u.info(ne(`Info: ${l}.`,"secondary")),l=ne("Verifying user and authorizing"),!t&&u.start(ne(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:f}=await xe({debug:Ye,baseUri:c,task:"etl-deploy",env:s,tenant:i,flow:r,tap:a,apikey:o}),y=new d.S3({accessKeyId:e,secretAccessKey:n,sessionToken:f});!t&&u.succeed(ne(`Finished: ${l}.`,"secondary")),l=ne("Deleting ETL scripts"),!t&&u.start(ne(`In progress: ${l}...`,"secondary"));const g=`${i}/flows/${r}/${await Qe(y,s,i,r)}/${a}/etl/`,h=await y.listObjectsV2({Bucket:s,Prefix:g}).promise();if(Ye("s3-list-objects-res",h),h.Contents?.length>0){const e=await y.deleteObjects({Bucket:s,Delete:{Objects:h.Contents.map((e=>({Key:e.Key})))}}).promise();Ye("s3-list-objects-res",e)}const m=await y.deleteObject({Bucket:s,Key:g}).promise();if(Ye("s3-delete-object-res",m),!t&&u.succeed(ne(`Finished: ${l}.`,"secondary")),h.Contents?.length>0){const e=new p({head:["File","Status"]});h.Contents.filter((({Key:e})=>e!==g)).forEach((({Key:n})=>{const t=n.split("/"),o=t[t.length-1];e.push([o,ne("Deleted","info")])})),t?ae({status:"success",deletedObjects:(h.Contents??[]).map((({Key:e})=>e))}):te(e.toString())}else l=ne("There was no file or folder to be deleted"),t?ae({status:"success",deletedObjects:[]}):u.info(ne(`Info: ${l}.`,"secondary"))}catch(e){t?ae({status:"error",error:e}):(u.fail(ne(`Error: ${l}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ye(e),e&&e.response&&e.response.data&&Ye("response",e.response.data))}}});const Xe=ce("commands:etl:deploy"),en="deploy";var nn=Object.freeze({__proto__:null,builder:async e=>(Xe("builder",en),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).option("all",he.all.config).option("tenant",{...he.tenant.config,default:"default"}).option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:en,desc:"Deploy ETL scripts",handler:async e=>{Xe("handler",en,e);const{hg:t,json:o,apikey:s,env:r,flow:a,tap:c,all:l,tenant:u,sourceFolder:f}=e,{clientApiBaseUri:g}=t;if(!l&&!c)throw new Error(`${he.tap.demandText} Or you can pass the --all flag to run this command for all taps/connectors.`);let h,m=y();const w=n.resolve(process.cwd(),f);try{h=ne(`Deploying script for Tenant ${ne(u,"info")} Flow ${ne(a,"info")}${c?` and Tap ${ne(c,"info")}`:""} to ${ne(r,"info")}`),!o&&m.info(ne(`Info: ${h}.`,"secondary"));const e=await $e(w,{recursive:!0,filter:{pattern:"!((**/sync-output)|(**/etl-output)|(**/snapshots))"}});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):m.fail(ne(`Error: ${ne("There are no files to deploy at the specified location!")}.`,"secondary")));h=ne("Verifying user and authorizing"),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const t={debug:Xe,baseUri:g,task:"etl-deploy",env:r,tenant:u,flow:a,apikey:s};c&&(t.tap=c);const{accessKeyId:l,secretAccessKey:y,sessionToken:b}=await xe(t);!o&&m.succeed(ne(`Finished: ${h}.`,"secondary"));const v=new d.S3({accessKeyId:l,secretAccessKey:y,sessionToken:b}),$=await Je(v,r,u,a);h=ne("Validating flow and tap location"),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const k=(await Ie({debug:Xe,baseUri:g,apikey:s,env:r})).find((({id:e})=>e===a));let _=[];try{if("default"===u||k?.type){if(_=(($?await Se({debug:Xe,baseUri:g,env:r,flow:a,apikey:s}):await Te({debug:Xe,baseUri:g,env:r,flow:a,apikey:s}))??[]).filter((e=>!c||e[$?"id":"tap"]===c)),c&&0===_.length)throw new Error("Tap is not supported")}else{if(_=(($?await Fe({debug:Xe,baseUri:g,env:r,flow:a,tenant:u,apikey:s}):await Ae({debug:Xe,baseUri:g,env:r,flow:a,tenant:u,apikey:s}))??[]).filter((e=>!c||e[$?"id":"tap"]===c)),c&&0===_.length)throw new Error("Tap is not linked")}}catch(e){throw Xe("err",e),new Error("Target location doesn't exist. Check your tenant, flow and tap arguments.")}!o&&m.succeed(ne(`Finished: ${h}.`,"secondary"));const j=new p({head:["File","Status"]});for(const t of _){const s=t[$?"id":"tap"];h=ne(`Preparing ${s} deployment target`),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const c=`${u}/flows/${a}/${await Qe(null,null,null,null,$)}/${s}/etl/`,{Contents:l}=await v.listObjectsV2({Bucket:r,Prefix:`${c}`}).promise();!o&&m.succeed(ne(`Finished: ${h}.`,"secondary")),Xe("contents",l);const d=l.map((e=>({Key:e.Key})));if(d.length>0){h=ne(`Removing old ${s} ETL files`),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const e={Bucket:r,Delete:{Objects:d,Quiet:!0}};await v.deleteObjects(e).promise(),d.forEach((({Key:e})=>j.push([`${s}/${e.substring(c.length)}`,ne("Deleted","warn")]))),!o&&m.succeed(ne(`Finished: ${h}.`,"secondary"))}for await(const t of e){const e="win32"===process.platform?n.relative(f,t).replace(/\\/g,"/"):n.relative(f,t),a=`${c}${e}`;h=ne(`Deploying file: ${ne(`${s}/${e}`,"info")}`),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const l={Bucket:r,Key:a,Body:await i.readFile(t)},d=await v.putObject(l).promise();!o&&m.succeed(ne(`Finished: ${h}.`,"secondary")),Xe("s3-put-res",d),j.push([`${s}/${e}`,ne("Deployed","info")])}}o?ae({status:"success",deployedFiles:e}):te(j.toString())}catch(e){o?ae({status:"error",error:e}):(m.fail(ne(`Error: ${h}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Xe(e),e&&e.response&&e.response.data&&Xe("response",e.response.data))}}});const tn=ce("commands:etl:download"),on="download";var sn=Object.freeze({__proto__:null,builder:async e=>(tn("builder",on),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).demandOption("tap",he.tap.demandText).option("downloadTo",he.downloadTo.config).demandOption("downloadTo",he.downloadTo.demandText).option("tenant",{...he.tenant.config,default:"default"}).option("overwrite",he.overwrite.config).demandOption("overwrite",he.overwrite.demandText)),command:on,desc:"Download ETL scripts",handler:async t=>{tn("handler",on,t);const{hg:o,json:s,apikey:r,env:a,flow:c,tap:l,tenant:u,downloadTo:f,overwrite:g}=t,{clientApiBaseUri:h}=o;let m,w=y();const b=n.resolve(process.cwd(),f);try{m=ne("Verifying user and authorizing"),!s&&w.start(ne(`In progress: ${m}...`,"secondary"));const{accessKeyId:t,secretAccessKey:o,sessionToken:f}=await xe({debug:tn,baseUri:h,task:"etl-download",env:a,tenant:u,flow:c,tap:l,apikey:r}),y=new d.S3({accessKeyId:t,secretAccessKey:o,sessionToken:f});!s&&w.succeed(ne(`Finished: ${m}.`,"secondary")),m=ne("Scanning for downloadable files"),!s&&w.start(ne(`In progress: ${m}...`,"secondary"));const v=`${u}/flows/${c}/${await Qe(y,a,u,c)}/${l}/etl/`,$={Bucket:a,Prefix:v},{Contents:k}=await y.listObjectsV2($).promise();!s&&w.succeed(ne(`Finished: ${m}.`,"secondary")),tn("s3-list-res",k);const _=k?ke(k.map((e=>e.Key)),{pattern:"!(.ipynb_checkpoints/*)"}):[];if(!_||0===_.length)return void(s?ae({status:"success",downloadedFiles:[]}):w.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));m=ne(`Downloading script files to ${ne(b,"info")}`),!s&&w.info(ne(`Info: ${m}.`,"secondary"));const j=new p({head:["File","Status"]});for await(const t of _){const o=t.substring(v.length),r=n.resolve(b,o);if(tn("file",r),t.endsWith("/")){!e.existsSync(r)&&await i.mkdir(r,{recursive:!0});continue}if(!g)try{await i.stat(r),tn("exists, skipping"),j.push([o,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&te(e)}m=ne(`Downloading file: ${ne(o,"info")}`),!s&&w.start(ne(`In progress: ${m}...`,"secondary")),await i.mkdir(n.dirname(r),{recursive:!0});const c=y.getObject({Bucket:a,Key:t}).createReadStream();await i.writeFile(r,await _e(c)),!s&&w.succeed(ne(`Finished: ${m}.`,"secondary")),j.push([o,"Downloaded"])}s?ae({status:"success",downloadedFiles:_}):te(j.toString())}catch(e){s?ae({status:"error",error:e}):(w.fail(ne(`Error: ${m}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),tn(e),e&&e.response&&e.response.data&&tn("response",e.response.data))}}});const rn=[Ze,nn,sn],an=ce("commands:etl"),cn="etl <action>";var ln=Object.freeze({__proto__:null,builder:async function(e){an("builder",cn);return(await we(e)).command(rn)},command:cn,desc:"Manage ETL scripts",handler:async function(e){an("handler",cn,e)}});const dn=ce("commands:flows:list"),un="list";var fn=Object.freeze({__proto__:null,builder:async e=>(dn("builder",un),e.option("tenant",{...he.tenant.config})),command:un,desc:"List flows",handler:async e=>{dn("handler",un,e);const{hg:n,json:t,apikey:o,env:r,tenant:a}=e,{clientApiBaseUri:i}=n;let c,l=y();try{c=ne(`Retrieving ${a?`${ne(a,"info")} tenant's`:"the"} flows for environment: ${ne(r,"info")}`);const e=`${i}/${r}/flows/${a?`linked?user_id=${a}`:"supported"}`;dn("requesting:",e),!t&&l.start(ne(`In progress: ${c}...`,"secondary"));const{data:n}=await h.get(e,{headers:{"x-api-key":o}});if(!t&&l.succeed(ne(`Finished: ${c}.`,"secondary")),dn("response-data",n),!n||0===n.length)return void(t?ae([]):l.warn(ne(`Warning: ${ne("No flows for specified environment and tenant")}.`,"secondary")));if(t)ae(n);else{const e=new p({head:["ID","Name","isPush","Taps","Targets"]});n.forEach((n=>e.push([n.id,n.name||"",n.type||!1,n.taps?s.inspect(n.taps):"",n.targets?s.inspect(n.targets):"none"]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(l.fail(ne(`Error: ${c}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),dn(e),e&&e.response&&e.response.data&&dn("response",e.response.data))}}});const pn=[fn],yn=ce("commands:flows"),gn="flows <action>";var hn,mn=Object.freeze({__proto__:null,builder:async function(e){yn("builder",gn);return(await we(e)).command(pn)},command:gn,desc:"Manage flows",handler:async function(e){yn("handler",gn,e)}}),wn={exports:{}},bn={exports:{}},vn={exports:{}},$n={exports:{}};var kn,_n={exports:{}},jn={exports:{}};var On,xn,En={exports:{}};function Tn(){return xn||(xn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){if((0,o.default)(e))return function(e){var n=-1,t=e.length;return function(){return++n<t?{value:e[n],key:n}:null}}(e);var n=(0,r.default)(e);return n?function(e){var n=-1;return function(){var t=e.next();return t.done?null:(n++,{value:t.value,key:n})}}(n):(t=e,s=t?Object.keys(t):[],a=-1,i=s.length,function e(){var n=s[++a];return"__proto__"===n?e():a<i?{value:t[n],key:n}:null});var t,s,a,i};var t=function(){return kn||(kn=1,e=jn,n=jn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e&&"number"==typeof e.length&&e.length>=0&&e.length%1==0},e.exports=n.default),jn.exports;var e,n}(),o=a(t),s=function(){return On||(On=1,e=En,n=En.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e[Symbol.iterator]&&e[Symbol.iterator]()},e.exports=n.default),En.exports;var e,n}(),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default}(_n,_n.exports)),_n.exports}var Sn,An={exports:{}};var Fn,In={},Un={exports:{}},Nn={exports:{}};var Kn,Bn,Dn,Mn={};function Pn(){return Bn||(Bn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){if((0,a.isAsync)(e))return function(...n){const t=n.pop();return c(e.apply(this,n),t)};return(0,o.default)((function(n,t){var o;try{o=e.apply(this,n)}catch(e){return t(e)}if(o&&"function"==typeof o.then)return c(o,t);t(null,o)}))};var t=function(){return Fn||(Fn=1,e=Nn,n=Nn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return function(...n){var t=n.pop();return e.call(this,n,t)}},e.exports=n.default),Nn.exports;var e,n}(),o=i(t),s=function(){if(Kn)return Mn;Kn=1,Object.defineProperty(Mn,"__esModule",{value:!0}),Mn.fallback=s,Mn.wrap=r;var e,n=Mn.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,t=Mn.hasSetImmediate="function"==typeof setImmediate&&setImmediate,o=Mn.hasNextTick="object"==typeof process&&"function"==typeof process.nextTick;function s(e){setTimeout(e,0)}function r(e){return(n,...t)=>e((()=>n(...t)))}return e=n?queueMicrotask:t?setImmediate:o?process.nextTick:s,Mn.default=r(e),Mn}(),r=i(s),a=Ln();function i(e){return e&&e.__esModule?e:{default:e}}function c(e,n){return e.then((e=>{l(n,null,e)}),(e=>{l(n,e&&(e instanceof Error||e.message)?e:new Error(e))}))}function l(e,n,t){try{e(n,t)}catch(e){(0,r.default)((e=>{throw e}),e)}}e.exports=n.default}(Un,Un.exports)),Un.exports}function Ln(){if(Dn)return In;Dn=1,Object.defineProperty(In,"__esModule",{value:!0}),In.isAsyncIterable=In.isAsyncGenerator=In.isAsync=void 0;var e,n=Pn(),t=(e=n)&&e.__esModule?e:{default:e};function o(e){return"AsyncFunction"===e[Symbol.toStringTag]}return In.default=function(e){if("function"!=typeof e)throw new Error("expected a function");return o(e)?(0,t.default)(e):e},In.isAsync=o,In.isAsyncGenerator=function(e){return"AsyncGenerator"===e[Symbol.toStringTag]},In.isAsyncIterable=function(e){return"function"==typeof e[Symbol.asyncIterator]},In}var Cn,Rn,qn,zn={exports:{}},Vn={exports:{}};function Wn(){return Cn||(Cn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});n.default={},e.exports=n.default}(Vn,Vn.exports)),Vn.exports}function Gn(){return qn||(qn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=function(){return hn||(hn=1,e=$n,n=$n.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){function n(...n){if(null!==e){var t=e;e=null,t.apply(this,n)}}return Object.assign(n,e),n},e.exports=n.default),$n.exports;var e,n}(),o=u(t),s=u(Tn()),r=function(){return Sn||(Sn=1,e=An,n=An.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return function(...n){if(null===e)throw new Error("Callback was already called.");var t=e;e=null,t.apply(this,n)}},e.exports=n.default),An.exports;var e,n}(),a=u(r),i=Ln(),c=(Rn||(Rn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,s){let r=!1,a=!1,i=!1,c=0,l=0;function d(){c>=n||i||r||(i=!0,e.next().then((({value:e,done:n})=>{if(!a&&!r){if(i=!1,n)return r=!0,void(c<=0&&s(null));c++,t(e,l,u),l++,d()}})).catch(f))}function u(e,n){if(c-=1,!a)return e?f(e):!1===e?(r=!0,void(a=!0)):n===o.default||r&&c<=0?(r=!0,s(null)):void d()}function f(e){a||(i=!1,r=!0,s(e))}d()};var t,o=(t=Wn())&&t.__esModule?t:{default:t};e.exports=n.default}(zn,zn.exports)),zn.exports),l=u(c),d=u(Wn());function u(e){return e&&e.__esModule?e:{default:e}}n.default=e=>(n,t,r)=>{if(r=(0,o.default)(r),e<=0)throw new RangeError("concurrency limit cannot be less than 1");if(!n)return r(null);if((0,i.isAsyncGenerator)(n))return(0,l.default)(n,e,t,r);if((0,i.isAsyncIterable)(n))return(0,l.default)(n[Symbol.asyncIterator](),e,t,r);var c=(0,s.default)(n),u=!1,f=!1,p=0,y=!1;function g(e,n){if(!f)if(p-=1,e)u=!0,r(e);else if(!1===e)u=!0,f=!0;else{if(n===d.default||u&&p<=0)return u=!0,r(null);y||h()}}function h(){for(y=!0;p<e&&!u;){var n=c();if(null===n)return u=!0,void(p<=0&&r(null));p+=1,t(n.value,n.key,(0,a.default)(g))}y=!1}h()},e.exports=n.default}(vn,vn.exports)),vn.exports}var Jn,Qn={exports:{}};var Yn,Hn,Zn,Xn={exports:{}};function et(){return Yn||(Yn=1,e=Xn,n=Xn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(n||(n=e.length),!n)throw new Error("arity is undefined");return function(...t){return"function"==typeof t[n-1]?e.apply(this,t):new Promise(((o,s)=>{t[n-1]=(e,...n)=>{if(e)return s(e);o(n.length>1?n:n[0])},e.apply(this,t)}))}},e.exports=n.default),Xn.exports;var e,n}function nt(){return Hn||(Hn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=i(Gn()),o=function(){return Jn||(Jn=1,e=Qn,n=Qn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return(n,t,o)=>e(n,o)},e.exports=n.default),Qn.exports;var e,n}(),s=i(o),r=i(Ln()),a=i(et());function i(e){return e&&e.__esModule?e:{default:e}}n.default=(0,a.default)((function(e,n,o,a){return(0,t.default)(n)(e,(0,s.default)((0,r.default)(o)),a)}),4),e.exports=n.default}(bn,bn.exports)),bn.exports}var tt=b((Zn||(Zn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=s(nt()),o=s(et());function s(e){return e&&e.__esModule?e:{default:e}}n.default=(0,o.default)((function(e,n,o){return(0,t.default)(e,1,n,o)}),3),e.exports=n.default}(wn,wn.exports)),wn.exports));const ot=ce("commands:jobs:download"),st="download <jobroot>";var rt=Object.freeze({__proto__:null,builder:async e=>(ot("builder",st),e.option("downloadTo",he.downloadTo.config)),command:st,desc:"Download Job files",handler:async t=>{ot("handler",st,t);const{hg:o,json:s,apikey:r,env:a,jobroot:i,downloadTo:c}=t,{clientApiBaseUri:l}=o;let u,f=y();try{u=ne("Verifying user and authorizing"),!s&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:t,secretAccessKey:o,sessionToken:y}=await xe({debug:ot,baseUri:l,task:"job-download",env:a,apikey:r,jobroot:i}),g=new d.S3({accessKeyId:t,secretAccessKey:o,sessionToken:y});!s&&f.succeed(ne(`Finished: ${u}.`,"secondary")),u=ne("Scanning for downloadable files"),!s&&f.start(ne(`In progress: ${u}...`,"secondary"));const h={Bucket:a,Prefix:i},{Contents:w}=await g.listObjectsV2(h).promise();if(ot("res",w),!w||0===w.length)return void(s?ae({status:"error",error:"Nothing to download!"}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne("Nothing to download!")}`,"secondary"))));if(!s&&f.succeed(ne(`Finished: ${u}.`,"secondary")),!s){const e=new p({head:["File","Size","LastModified"]});w.forEach((n=>{const t=n.Key.substring(i.length+1);e.push([t,n.Size,n.LastModified.toLocaleString("en-US")])})),console.log(e.toString())}const b=n.resolve(process.cwd(),c,n.basename(i));await tt(w.filter((({Key:e})=>!new RegExp(`${i}/([^/]+)-config.json`).test(e))),(async t=>{u=ne(`Downloading file: ${ne(t.Key,"info")}`),!s&&f.start(ne(`In progress: ${u}...`,"secondary"));const o=n.resolve(b,t.Key.substring(i.length+1));ot("file",o),await m.mkdir(n.dirname(o),{recursive:!0});const r=g.getObject({Bucket:a,Key:t.Key}).createReadStream(),c=e.createWriteStream(o,{flags:"w"});r.pipe(c),!s&&f.succeed(ne(`Finished: ${u}.`,"secondary"))})),s?ae({status:"success",downloadedFiles:w.map((({Key:e})=>e))}):(u=ne("Downloading job files."),f.succeed(ne(`Finished: ${u}`,"secondary")))}catch(e){s?ae({status:"error",error:e}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),ot(e),e&&e.response&&e.response.data&&ot("response",e.response.data))}}});const at=(...e)=>{ce("commands:jobs:list")(...e)},it="list";var ct=Object.freeze({__proto__:null,builder:async e=>(at("builder",it),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tenant",{...he.tenant.config,default:"default"}).option("count",he.count.config)),command:it,desc:"List jobs",handler:async e=>{at("handler",it,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tenant:a,count:i}=e,{clientApiBaseUri:c}=n;let l,d=y();try{l=ne(`Retrieving jobs for environment: ${ne(s,"info")} flow: ${ne(r,"info")} tenant: ${ne(a,"info")}...`);const e=`${c}/${s}/${r}/${a}/jobs${i?`?count=${i}`:""}`;at("requesting:",e),!t&&d.start(ne(`In progress: ${l}...`,"secondary"));const{data:n}=await h.get(e,{headers:{"x-api-key":o}});if(!t&&d.succeed(ne(`Finished: ${l}.`,"secondary")),at("response-data",n),!n||0===n.length)return void(t?ae([]):d.warn(ne(`Warning: ${ne("No jobs for the specified environment, flow and tenant")}.`,"secondary")));if(t)ae(n);else{const e=new p({head:["name","details"]});n.forEach((n=>e.push([n.job_name,JSON.stringify(n,void 0,2)]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(d.fail(ne(`Error: ${l}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),at(e),e&&e.response&&e.response.data&&at("response",e.response.data))}}});const lt=[rt,ct],dt=ce("commands:jobs"),ut="jobs <action>";var ft=Object.freeze({__proto__:null,builder:async function(e){dt("builder",ut);return(await we(e)).command(lt)},command:ut,desc:"Manage ETL jobs",handler:async function(e){dt("handler",ut,e)}});const pt=ce("commands:snapshots:deploy"),yt="deploy";var gt=Object.freeze({__proto__:null,builder:async e=>(pt("builder",yt),e.option("tenant",{...he.tenant.config,default:"default"}).option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:yt,desc:"Deploy Snapshots",handler:async e=>{pt("handler",yt,e);const{hg:t,json:o,apikey:s,env:r,tenant:a,sourceFolder:c}=e,{clientApiBaseUri:l}=t;let u,f=y();const g=n.resolve(process.cwd(),c);try{u=ne(`Deploying Snapshots for Tenant ${ne(a,"info")} to ${ne(r,"info")}`),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const e=await $e(g,{recursive:!0});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):f.fail(ne(`Error: ${ne("There are no files to deploy at the specified location!")}.`,"secondary")));u=ne("Verifying user and authorizing");const{accessKeyId:t,secretAccessKey:y,sessionToken:h}=await xe({debug:pt,baseUri:l,task:"snapshot-deploy",env:r,tenant:a,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const m=new d.S3({accessKeyId:t,secretAccessKey:y,sessionToken:h});u=ne("Validating tenant exists"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));try{const{CommonPrefixes:e}=await m.listObjectsV2({Bucket:r,Prefix:`${a}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw pt("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const w=`${a}/snapshots/`,b=new p({head:["File","Status"]});u=ne("Preparing deployment target"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{Contents:v}=await m.listObjectsV2({Bucket:r,Prefix:`${w}`}).promise();!o&&f.stop(),pt("contents",v),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const $=v.map((e=>({Key:e.Key})));if($.length>0){const e={Bucket:r,Delete:{Objects:$,Quiet:!0}};await m.deleteObjects(e).promise(),$.forEach((({Key:e})=>b.push([e.substring(w.length),ne("Deleted","warn")])))}!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));for await(const t of e){const e=n.relative(c,t),s=`${w}${e}`;u=ne(`Deploying file: ${ne(e,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a={Bucket:r,Key:s,Body:await i.readFile(t)},l=await m.putObject(a).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),pt("s3-put-res",l),b.push([e,ne("Deployed","info")])}o?ae({status:"success",deployedFiles:e}):te(b.toString())}catch(e){o?ae({status:"error",error:e}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),pt(e),e&&e.response&&e.response.data&&pt("response",e.response.data))}}});const ht=ce("commands:snapshots:download"),mt="download";var wt=Object.freeze({__proto__:null,builder:async e=>(ht("builder",mt),e.option("downloadTo",he.downloadTo.config).demandOption("downloadTo",he.downloadTo.demandText).option("tenant",{...he.tenant.config,default:"default"}).option("overwrite",he.overwrite.config).demandOption("overwrite",he.overwrite.demandText)),command:mt,desc:"Download Snapshots",handler:async t=>{ht("handler",mt,t);const{hg:o,json:s,apikey:r,env:a,tenant:c,downloadTo:l,overwrite:u}=t,{clientApiBaseUri:f}=o;let g,h=y();const m=n.resolve(process.cwd(),function(e){function n(e){return process.argv.indexOf(e)>-1}if(n(`--${e}`))return!0;const t=he[e]?.config?.alias||[];for(let e in t)if(n(`-${t[e]}`))return!0;return!1}("downloadTo")?l:"snapshots");try{g=ne("Verifying user and authorizing"),!s&&h.start(ne(`In progress: ${g}...`,"secondary"));const{accessKeyId:t,secretAccessKey:o,sessionToken:l}=await xe({debug:ht,baseUri:f,task:"snapshot-download",env:a,tenant:c,apikey:r}),y=new d.S3({accessKeyId:t,secretAccessKey:o,sessionToken:l});!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),g=ne("Validating tenant exists"),!s&&h.start(ne(`In progress: ${g}...`,"secondary"));try{const{CommonPrefixes:e}=await y.listObjectsV2({Bucket:a,Prefix:`${c}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw ht("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),g=ne("Scanning for downloadable files"),!s&&h.start(ne(`In progress: ${g}...`,"secondary"));const w=`${c}/snapshots/`,b={Bucket:a,Prefix:w},{Contents:v}=await y.listObjectsV2(b).promise();!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),ht("s3-list-res",v);const $=v?v.map((e=>e.Key)).filter((e=>e!==w)):[];if(!$||0===$.length)return void(s?ae({status:"success",downloadedFiles:[]}):h.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));g=ne(`Downloading snapshot files to ${ne(m,"info")}`),!s&&h.info(ne(`Info: ${g}.`,"secondary"));const k=new p({head:["File","Status"]});for await(const t of $){const o=t.substring(w.length),r=n.resolve(m,o);if(ht("file",r),t.endsWith("/")){!e.existsSync(r)&&await i.mkdir(r,{recursive:!0});continue}if(!u)try{await i.stat(r),ht("exists, skipping"),k.push([o,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&te(e)}g=ne(`Downloading file: ${ne(o,"info")}`),!s&&h.start(ne(`In progress: ${g}...`,"secondary")),await i.mkdir(n.dirname(r),{recursive:!0});const c=y.getObject({Bucket:a,Key:t}).createReadStream();await i.writeFile(r,await _e(c)),!s&&h.succeed(ne(`Finished: ${g}.`,"secondary")),k.push([o,"Downloaded"])}s?ae({status:"success",downloadedFiles:$}):te(k.toString())}catch(e){s?ae({status:"error",error:e}):(h.fail(ne(`Error: ${g}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),ht(e),e&&e.response&&e.response.data&&ht("response",e.response.data))}}});const bt=[gt,wt],vt=ce("commands:snapshots"),$t="snapshots <action>";var kt=Object.freeze({__proto__:null,builder:async function(e){vt("builder",$t,e);return(await we(e)).command(bt)},command:$t,desc:"Manage tenant snapshots",handler:async function(e){vt("handler",$t,e)}});const _t=ce("commands:tenants:custom-etl"),jt="custom-etl",Ot=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,supportedSources:a})=>{const i=await Ae({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t});let c=null;for(const{tap:l}of[...i,...a]){const{accessKeyId:a,secretAccessKey:i,sessionToken:u}=await xe({debug:e,baseUri:n,task:"etl-download",env:o,tenant:r,flow:s,tap:l,apikey:t}),f=new d.S3({accessKeyId:a,secretAccessKey:i,sessionToken:u}),p={Bucket:o,Prefix:`${r}/flows/${s}/taps/${l}/etl/`},{Contents:y}=await f.listObjectsV2(p).promise();if(y.some((({Key:e})=>e.endsWith("etl.py")||e.endsWith("etl.ipynb")))&&(c=r),null!==c)break}return c};var xt=Object.freeze({__proto__:null,builder:async e=>(_t("builder",jt),e.option("tenant",he.tenant.config).option("flow",he.flow.config).demandOption("flow",he.flow.demandText)),command:jt,desc:"List tenants with custom ETL in a specific flow",handler:async e=>{_t("handler",jt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=y();try{a=ne(`Retrieving tenants for environment ${ne(s,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ee({debug:_t,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Te({debug:_t,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]);!t&&i.succeed(ne(`Finished: ${a}.`,"secondary"));let l=[];a=ne(`Querying for custom ETL scripts for flow ${ne(r,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));for(const t of je(e)){const e=await Promise.all(t.map((e=>Ot({debug:_t,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,supportedSources:c}))));l=l.concat(e.filter(Boolean))}if(!t&&i.succeed(ne(`Finished: ${a}.`,"secondary")),t)ae(l);else{const e=new p({head:["Tenant ID"]});e.push(...l.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(i.fail(ne(`Error: ${a}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),_t(e),e&&e.response&&e.response.data&&_t("response",e.response.data))}}});const Et=ce("commands:tenants:custom-field-map"),Tt="custom-field-map",St=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{const i=a?await Fe({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}):await Ae({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}),c=[],{accessKeyId:l,secretAccessKey:u,sessionToken:f}=await xe({debug:e,baseUri:n,task:"field-map-download",env:o,tenant:r,flow:s,apikey:t}),p=new d.S3({accessKeyId:l,secretAccessKey:u,sessionToken:f});for(const{id:e,tap:n}of i){const t={Bucket:o,Key:`${r}/flows/${s}/${a?"connectors":"taps"}/${a?e:n}/fieldMap.json`};try{await p.headObject(t).promise(),c.push(a?e:n)}catch(e){}}return{tenant:r,connectors:c}};var At=Object.freeze({__proto__:null,builder:async e=>(Et("builder",Tt),e.option("tenant",he.tenant.config).option("flow",he.flow.config).demandOption("flow",he.flow.demandText)),command:Tt,desc:"List tenants with custom field map in a specific flow",handler:async e=>{Et("handler",Tt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=y();try{a=ne(`Retrieving tenants for environment ${ne(s,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ee({debug:Et,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Ue({debug:Et,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(ne(`Finished: ${a}.`,"secondary"));const d=[];a=ne(`Querying for custom field maps for flow ${ne(r,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));for(const t of je(e)){const e=await Promise.all(t.map((e=>St({debug:Et,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,isV2Flow:l}))));d.push(...e.filter((({connectors:e})=>e.length>0)))}if(!t&&i.succeed(ne(`Finished: ${a}.`,"secondary")),t)ae(d);else{const e=new p({head:["Tenant ID","Connector IDs"]});e.push(...d.map((({tenant:e,connectors:n})=>[e,n.join(", ")]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(i.fail(ne(`Error: ${a}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Et(e),e&&e.response&&e.response.data&&Et("response",e.response.data))}}});const Ft=ce("commands:tenants:delete"),It="delete";var Ut=Object.freeze({__proto__:null,builder:async e=>(Ft("builder",It),e.option("tenant",he.tenant.config)),command:It,desc:"Delete tenant",handler:async e=>{Ft("handler",It,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=y();try{if("default"===r)throw new Error('It\'s not possible to delete "default" tenant!');i=ne(`Deleting tenant ${r} schedules`),!t&&c.start(ne(`In progress: ${i}...`,"secondary")),await(async({debug:e,baseUri:n,env:t,apikey:o,tenant:s})=>{const r={"x-api-key":o},a=new URL(`${n}/tenant/${t}/${s}?schedules_only=true`).toString();e&&e("uri:",a);const{data:i}=await h.delete(a,{headers:r});return i})({debug:Ft,baseUri:a,env:s,apikey:o,tenant:r}),!t&&c.succeed(ne(`Finished: ${i}.`,"secondary")),i=ne("Verifying user and authorizing"),!t&&c.start(ne(`In progress: ${i}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:l}=await xe({debug:Ft,baseUri:a,task:"tenant-delete",env:s,tenant:r,apikey:o});!t&&c.succeed(ne(`Finished: ${i}.`,"secondary"));const u=new d.S3({accessKeyId:e,secretAccessKey:n,sessionToken:l});for(i=ne(`Deleting tenant ${r} for environment ${ne(s,"info")}`),!t&&c.start(ne(`In progress: ${i}...`,"secondary"));;){const e=((await u.listObjectsV2({Bucket:s,Prefix:`${r}/`}).promise()).Contents||[]).map((({Key:e})=>({Key:e})));if(0===e.length)break;await u.deleteObjects({Bucket:s,Delete:{Objects:e}}).promise()}if(!t&&c.succeed(ne(`Finished: ${i}.`,"secondary")),t)ae({statu:"success",tenantDeleted:r});else{const e=new p({head:["Tenant ID"]});e.push([r]),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(c.fail(ne(`Error: ${i}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ft(e),e&&e.response&&e.response.data&&Ft("response",e.response.data))}}});const Nt=ce("commands:tenants:list"),Kt="list";var Bt=Object.freeze({__proto__:null,builder:async e=>(Nt("builder",Kt),e.option("tenant",he.tenant.config)),command:Kt,desc:"List tenants",handler:async e=>{Nt("handler",Kt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e;let a,i=y();try{a=ne(`Retrieving tenants for environment ${ne(s,"info")}`);const e=`${n.clientApiBaseUri}/tenants/${s}${r?`?tenant=${r}`:""}`;Nt("requesting:",e),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));const{data:c}=await h.get(e,{headers:{"x-api-key":o}});if(!t&&i.succeed(ne(`Finished: ${a}.`,"secondary")),Nt("response-data",c),!c||0===c.length)return void(t?ae([]):i.info(ne(`Info: ${ne("No tenants found in the specified environment")}.`,"secondary")));if(t)ae(c);else{const e=new p({head:["tenant ID"]});e.push(...c.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(i.fail(ne(`Error: ${a}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Nt(e),e&&e.response&&e.response.data&&Nt("response",e.response.data))}}});const Dt=ce("commands:tenants:custom-catalog"),Mt="custom-catalog",Pt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{try{const i=a?await Fe({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}):await Ae({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}),c=[],{accessKeyId:l,secretAccessKey:u,sessionToken:f}=await xe({debug:e,baseUri:n,task:"field-map-download",env:o,tenant:r,flow:s,apikey:t}),p=new d.S3({accessKeyId:l,secretAccessKey:u,sessionToken:f});for(const{id:e,tap:n}of i){const t={Bucket:o,Key:`${r}/flows/${s}/${a?"connectors":"taps"}/${a?e:n}/catalog.json`};try{await p.headObject(t).promise(),c.push(a?e:n)}catch(e){}}return{tenant:r,connectors:c}}catch(e){return console.error(e),{tenant:r,connectors:[]}}};var Lt=Object.freeze({__proto__:null,builder:async e=>(Dt("builder",Mt),e.option("tenant",he.tenant.config).option("flow",he.flow.config).demandOption("flow",he.flow.demandText)),command:Mt,desc:"List tenants with custom catalog in a specific flow",handler:async e=>{Dt("handler",Mt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=y();try{a=ne(`Retrieving tenants for environment ${ne(s,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ee({debug:Dt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Ue({debug:Dt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(ne(`Finished: ${a}.`,"secondary"));const d=[];a=ne(`Querying for custom catalogs for flow ${ne(r,"info")}`),!t&&i.start(ne(`In progress: ${a}...`,"secondary"));for(const t of je(e)){const e=await Promise.all(t.map((e=>Pt({debug:Dt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,isV2Flow:l}))));d.push(...e.filter((({connectors:e})=>e.length>0)))}if(!t&&i.succeed(ne(`Finished: ${a}.`,"secondary")),t)ae(d);else{const e=new p({head:["Tenant ID","Connector IDs"]});e.push(...d.map((({tenant:e,connectors:n})=>[e,n.join(", ")]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(i.fail(ne(`Error: ${a}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Dt(e),e&&e.response&&e.response.data&&Dt("response",e.response.data))}}});const Ct=[xt,At,Ut,Bt,Lt],Rt=ce("commands:tenants"),qt="tenants <action>";var zt=Object.freeze({__proto__:null,builder:async function(e){Rt("builder",qt);return(await we(e)).command(Ct)},command:qt,desc:"Manage tenants",handler:async function(e){Rt("handler",qt,e)}});const Vt=[ge,Ge,ln,mn,ft,kt,zt];process.env.AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE="1";X({});const Wt=o(process.argv.slice(2));Wt.usage(ne("Usage: $0 <command>")).command(Vt).demandCommand().alias("v","version").alias("h","help").string("_").strictCommands().epilogue(ne("For more information, visit https://docs.hotglue.xyz/docs/cli-overview")).wrap(Math.min(Wt.terminalWidth(),90)).parse(process.argv.slice(S()+1),V);
34
34
  //# sourceMappingURL=index.js.map